<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>計算機だけが友だち on 或る阿呆の記</title><link>https://hack-le.com/categories/%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%A0%E3%81%91%E3%81%8C%E5%8F%8B%E3%81%A0%E3%81%A1/</link><description>Recent content in 計算機だけが友だち on 或る阿呆の記</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Wed, 04 Nov 2026 18:17:37 +0900</lastBuildDate><atom:link href="https://hack-le.com/categories/%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%A0%E3%81%91%E3%81%8C%E5%8F%8B%E3%81%A0%E3%81%A1/index.xml" rel="self" type="application/rss+xml"/><item><title>Gemini 3.8 FlashよりDeepSeek-V4.1-Flashのほうが良い</title><link>https://hack-le.com/gemini-vs-deepseek/</link><pubDate>Tue, 27 Oct 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/gemini-vs-deepseek/</guid><description>&lt;p&gt;私は昨年のGoogle AI Pro半額セールにホイホイつられて年間契約をしてしまい、その後結局10ヶ月ばかり使い続けています。Google AI Proは最初こそ良かったものの、その後凄まじい勢いでナーフされ、&lt;strong&gt;今は普通に使っているとだいたい一週間制限の半分くらいで使い果たしてしまう感じです(^_^;)&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;それで、従量課金のDeepSeek APIを使うようになったんですけれど、使い始めてどうもなにやら、&lt;strong&gt;少なくともGemini 3.8 FlashよりもDeepSeek-V4.1-Flashのほうが圧倒的に上&lt;/strong&gt;だなぁ、と。&lt;/p&gt;&#10;&lt;p&gt;AIのモデルについて、何がどう上なのかを説明するのは、人間を比べるのと同じくらい難しいです。&lt;/p&gt;&#10;&lt;p&gt;一応ベンチマークみたいなのはありますけれど、あれはテストみたいなもので。A君は東大卒なのでXX大卒のB君より優秀です、っていう説明してる人いたら残念な人だなって思うでしょう。これが徒競走なら、A君は50m6秒でB君は50m7秒なのでA君のほうが早いですって言われたらせやろねですが、まぁそれもA君がB君よりフルマラソンでも早いとは言えないものの、一つ基準にはなります。&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;人の能力について、我々人類はその測定方法について2026年現在なお試行錯誤の最中&lt;/strong&gt;です。AIのタスクは50m走より我々の仕事そのものに近いわけですから、当然その評価は人間と同じように難しい、少なくともテストで語れるものではない、という感じですね。&lt;/p&gt;&#10;&lt;p&gt;ですが、&lt;strong&gt;ずっと一緒に仕事をしていると、各領分における能力の差というものは、なんとなし見えてくるもの&lt;/strong&gt;です。それを言語化することは難しいですけれど、やっぱりあって、どんなに人類皆平等と考えようとしても、いざという時に誰を頼るかにその人の本音は出ます。&lt;/p&gt;&#10;&lt;p&gt;その観点で、&lt;strong&gt;既に難しい修正はDeepSeekかなぁという感じになっているので、まぁ僕はそちらを信用しているのでしょう&lt;/strong&gt;。最近Gemini 4 Argonが出てきたものの、ターミナルのagyでは使えるのに何故かAntigravityに出てこないので評価は保留。Google AI Proも解禁されてるはずなのに。まぁでも使えたところでどうせ大して使えないんでしょ。&lt;/p&gt;&#10;&lt;p&gt;まーでもそうね、一つ愚痴を言うなら、AntigravityのせいなのかGemini 3.8 Flashのせいなのかわかりませんが、&lt;strong&gt;Gemini本当に指示無視する&lt;/strong&gt;んです。指示っていうかルールを無視する。フォールバックでエラー握りつぶすなと何度言ってもする。ルールで定めてもする。なんなら「ルールどおりです（大嘘）」って報告する。それで毎度のようにルール無視を作り込んで、作り込んだルール無視をDeepSeekが発見して「なおしておきました」っていうのが頻発。なんなのか。&lt;/p&gt;&#10;&lt;p&gt;こんな感じなので、契約が継続する年末まではGeminiを中心に使う日が続くとは思いますけれど、その後はDeepSeekになるんじゃないですかねぇ、この調子だと。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-ai-pro/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【覇権からネタ枠】Google AI Proの半額セールに釣られて年間契約したけど結局Geminiはどうなのか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-ai-pro/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_51390_1786727418.webp" alt="【覇権からネタ枠】Google AI Proの半額セールに釣られて年間契約したけど結局Geminiはどうなのか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-antigravity-deepseek-api/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【AIプログラミング】AntigravityからDeepSeekのAPIに移行を進めたい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-antigravity-deepseek-api/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_51900_1789017127.webp" alt="【AIプログラミング】AntigravityからDeepSeekのAPIに移行を進めたい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ローカルLLMでAIコーディングにかかる時間</title><link>https://hack-le.com/localllm-ai-time/</link><pubDate>Sat, 17 Oct 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/localllm-ai-time/</guid><description>&lt;p&gt;そんなもんモノによるやろとしか言えないわけですが、参考までに…。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;LLM: qwen3.8-flash-next&lt;/li&gt;&#10;&lt;li&gt;サーバ: GMKtec EVO-X2 (ミニPC)&#10;&lt;ul&gt;&#10;&lt;li&gt;Ryzen AI Max+395&lt;/li&gt;&#10;&lt;li&gt;128GB RAM&lt;/li&gt;&#10;&lt;li&gt;Windows 11&lt;/li&gt;&#10;&lt;li&gt;LM Studio 0.4.25&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;クライアント: M2 Pro Mac mini + VSCode + Cline&lt;/li&gt;&#10;&lt;li&gt;対象: Go + Next.js のセルフホスト型Webアプリケーション&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;LLM的なスペックでいえば、ユニファイドメモリ128GBのっけたRyzenなミニPCで、Vulkanで実行、という感じです。これが庶民にできる精一杯なんや……と思っていましたが今はこの構成マジで60万してて死にました。30万のときに10台くらい買っておけばよかった。もう世界はおしまいです。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/92731fb92d1b3f3cef825e8fc7734b24-700x429.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;狂ってると思った。&lt;/p&gt;&#10;&lt;h2 id="改修内容"&gt;改修内容&#10;&lt;/h2&gt;&lt;p&gt;何かと言うと、私が趣味でやっているAIイラスト作成支援アプリの微改修です。Characterを登録する際に、いつも同じ情報があるため（わかる人向けに言うとmasterpieceなどクオリティ系やネガティブプロンプト）、それらをテンプレートとしていました。で、そのテンプレート自体を複製したい、というものです。&lt;/p&gt;&#10;&lt;p&gt;具体的には以下の画面改修です。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/5170cac20c2b619e1944a17cc358c37b-699x375.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;ここに複製ボタンを追加するだけです。複製する内容は具体的には以下のように、説明文であるとか、基本的な数値設定や、定型句となるプロンプト群です。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/ffb288a0a69eb2a1d27b834a2085860f-700x650.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;こいつをコピーする機能がほしいわけです。これはまぁ出来そうというか、出来てほしい感じがしますよね。&lt;/p&gt;&#10;&lt;p&gt;それでまぁ、細かく指示してもよかったけれど、ここはあえてふわっとした指示にします。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Templatesにおいて、Character用のテンプレートの複製を追加する。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Codexあたりならこれでまったく問題なく、投げたら数分で完全に完了すると思います。さてローカルLLMだとどうなるか……。&lt;/p&gt;&#10;&lt;p&gt;結果、&lt;strong&gt;2時間かけて完了&lt;/strong&gt;です。2時間ノンストップで動き続けたんだから凄いといえば凄いんだけど、まぁまぁかかった感じですね。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/image.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;oh…90.0k…。でもちゃんと機能はできていました。コードもそんな変なことはなかった…ように思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/2cf19ed4ef448e335594c1efac115be4-699x350.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;ローカルLLMだとさすがにもうちょっと人間側が指示を明確にしたほうが良さそうな感じはしました。&lt;/p&gt;&#10;&lt;p&gt;しかし正直、AntigravityのGemini 3.8 Flashよりもなんだかちゃんとしている気がする……。いやさすがにそんなはずはないか…？まぁもうちょっとみていかないとけませんが。&lt;/p&gt;&#10;&lt;h2 id="唸れミニpc"&gt;唸れミニPC&#10;&lt;/h2&gt;&lt;p&gt;しかし、マジで2時間ずっと唸っていましたね。これは電気代を考えたときにどうなんだろうか。多分DeepSeekのAPIで20円くらいの改修だったと思うんですよね。まぁ最大電力が230Wなんだからフルパワーでも0.46kWh、1kWh 30円なら13.8円、LLMなら常にフルパワーではないはずだし、計算上はAPIよりは安いとは言える。まぁちょっとどっかで消費電力は計測しよう。&lt;/p&gt;&#10;&lt;p&gt;でも安いといっても、本体が60万円するようではちょっともうペイしないですね。30万円でもペイはしないのに。しかし、検閲やら情報統制やら嫌な動きが加速していることもあり、今後は本当にローカルLLMに最終的に頼らざるを得ない世界線になるような気はしています。使えそうなときには積極的に使って感触をつかんでいきたいところです。&lt;/p&gt;&#10;&lt;p&gt;AI PCが高すぎる問題も、これはAIバブルが弾けた段階で、投げ売りのターンは来るんじゃないかなぁ…あるいはもっと軽量なモデルでコーディング限定なら頑張れるものが出てくるか。&lt;a class="link" href="https://pc.watch.impress.co.jp/docs/news/2145566.html" target="_blank" rel="noopener"&#10; &gt;Qwen3.8-Flash-Nextローカル実行環境「Strata」更新。旧世代GeForceやArcに一筋の光 - PC Watch&lt;/a&gt;とか注目ですね。まぁとにかく、世の趨勢に負けず抵抗していきたいところです。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/07/eyecatch_45815_1783902299.webp" alt="ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/localllm-ai-qwen3-8-flash-next/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ローカルLLMでAIコーディング：Qwen3.8-Flash-Nextはまぁまぁ使えそう？&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/localllm-ai-qwen3-8-flash-next/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_53151_1790136208.webp" alt="ローカルLLMでAIコーディング：Qwen3.8-Flash-Nextはまぁまぁ使えそう？" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aibubble-houkai/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIバブルが崩壊したら、何がどこまで崩壊するか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aibubble-houkai/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/output-13.webp" alt="AIバブルが崩壊したら、何がどこまで崩壊するか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ローカルLLMでAIコーディング：Qwen3.8-Flash-Nextはまぁまぁ使えそう？</title><link>https://hack-le.com/localllm-ai-qwen3-8-flash-next/</link><pubDate>Fri, 02 Oct 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/localllm-ai-qwen3-8-flash-next/</guid><description>&lt;p&gt;DeepSeek V4.1 Flashで従量課金を始めたところ、コーディングにかかる費用が可視化され、oh…となっておりました。「この改修に20円か…」と思うと、まぁ安いといえば安いんですが、別に儲かっているわけでもない個人開発者としては真顔になります。&lt;/p&gt;&#10;&lt;p&gt;ということで、今一度試すぞローカルLLM…！Qwen3.8-Flash-Nextが話題になっていたことを思い出し、数時間かけてダウンロード。頼むぞ…( ･`ω･´)&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;GMKtec EVO-X2&#10;&lt;ul&gt;&#10;&lt;li&gt;Ryzen AI Max+395&lt;/li&gt;&#10;&lt;li&gt;128GB RAM&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;LM Studio v0.4.24&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;qwen3.8-flash-next&lt;/code&gt;:Q4_K_M&#10;&lt;ul&gt;&#10;&lt;li&gt;95.43GB(^_^;)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="早速実行していくかい"&gt;早速実行していくかい？&#10;&lt;/h2&gt;&lt;p&gt;テストがてら、開発中のアプリで一つ簡単な改修をすることにしました。D-Shelf（仮）という、メディア管理ツールを制作しているのですが、これで余計な機能があったので削除しようとしています。以下の画面のうち、「一覧のすべてを読了にするボタン」、これが不要です。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/09/8d7460e107df1012909ea5ac43a9d236-700x347.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;大昔自炊したFF6の攻略本…すべてが懐かしい…&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;このボタンを削除するだけです。これはまぁ、出来てほしいなって感じですね。&lt;/p&gt;&#10;&lt;p&gt;プロンプトと言えるほどでもないプロンプト。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Work詳細（タイトル一覧）にある全巻読了の機能は、これは不要であるので、削除する。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;実行後、EVO-X2が唸りをあげ始めます。今度消費電力計測しよ…。たしかACアダプタ200W超えてたんですよねぇ。&lt;/p&gt;&#10;&lt;p&gt;それでまぁ、なんだかんだ十数分くらいかかったと思いますが、結果は出ました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/09/f55f13f3ba7b9911d0dd02c58899afa8.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;いけてそう🤔&lt;/p&gt;&#10;&lt;p&gt;フロントエンドだけではなく、ちゃんとバックエンドのコードも削除してデッドコード化しないようにしていますね。地味にちゃんと日本語なのも嬉しい。アップデート後はこんな感じです。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/09/d81fd9cde34e0cc34ae324eb2ef59d64-700x320.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;無事消えました。よろしい。&lt;/p&gt;&#10;&lt;h2 id="光が見えてきた"&gt;光が見えてきた&#10;&lt;/h2&gt;&lt;p&gt;ということで、&lt;strong&gt;諦め気味だったローカルLLMによるコーディングは、ちょっと光が見え始めてきたなぁと感じております&lt;/strong&gt;。あとはむしろ&lt;strong&gt;ローカルLLMでも出来るような設計と規模感でアプリケーションをまとめることのほうが重要&lt;/strong&gt;かもしれません。&lt;/p&gt;&#10;&lt;p&gt;とはいえコスパの観点では微妙ですかね。LLMは間欠的になるのかなとは思うので、平均消費電力は今度改めて計測しようと思いますけれど、もし最大200Wで30分かかると0.1kWhで、これは約3円。100Wだったら1.5円くらいか。ちょっとここはちゃんと計測しないとですけど、まぁいっても数円くらいでしょう。DeepSeekだったら恐らく10-15円くらいかかる改修だったと思うので、ローカルLLMで出来る内容なら安くなる、とは言えるかなぁ。&lt;/p&gt;&#10;&lt;p&gt;とはいえ今は&lt;strong&gt;AIのせいでPC相場が狂っているので、これ目当てに買うぞ、みたいなのは全然オススメしません&lt;/strong&gt;。&lt;strong&gt;経済的にはペイしない&lt;/strong&gt;と思います。AIバブルが弾けて、ラグナロクで焼かれるべき阿呆どもが買い占めたMacやミニPC、グラボが中古で安く出回るのを待つほうがいいのではないでしょうか。ガードレールが気に入らないので、検閲緩和のモデルを使いたいんだ！というのであればいいかもですが。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、いつか来るだろうAI企業大暴走の日に備えて、余裕があるなら用意しておくといいかもですね。AI以外にも普通に用途は幅広いので、開発者なら一台くらい高性能PCは持っておいていいかもしれません。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/07/eyecatch_45815_1783902299.webp" alt="ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-claude-code-20-100/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIは高くなる？&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-claude-code-20-100/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/04/eyecatch_49516_1776958301.webp" alt="AIは高くなる？" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aibubble-houkai/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIバブルが崩壊したら、何がどこまで崩壊するか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aibubble-houkai/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/output-13.webp" alt="AIバブルが崩壊したら、何がどこまで崩壊するか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>AIの入力は音声のほうが良いか？</title><link>https://hack-le.com/ai-io/</link><pubDate>Wed, 23 Sep 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-io/</guid><description>&lt;p&gt;最近、AIへの指示出しでタイピングよりも音声入力のほうが楽で、これからのオフィス設計も変わっていくのでは、というような投稿を見ました。で、それについて入力インタフェースが課題ですよね、という夢の物語に繋がっていました。&lt;/p&gt;&#10;&lt;h2 id="音声入出力の特性"&gt;音声入出力の特性&#10;&lt;/h2&gt;&lt;p&gt;それ自体について特に何か反駁があるわけではないのですが、ただ思ったのは、&lt;strong&gt;僕自身はどうあってもキーボードによるテキスト入力と画面のテキスト出力を好むだろう&lt;/strong&gt;、ということです。指が動くこと、使えること、目が使えること、という身体的な制約を加味すれば、耳と口という視覚とは異なるオーディオインタフェースについての価値は確かにあります。しかしそれは身体的な事情のためなのであって、効率のためではありません。&lt;/p&gt;&#10;&lt;p&gt;対人間であれば、&lt;strong&gt;発話からくる情緒的なニュアンスや、互いの時空間を拘束する同期的な性質&lt;/strong&gt;により、コミュニケーションとしてメールより電話より対話が適していることはたくさんあります。しかしこれも本来の情報伝達という機能からするとやや本質的ではなく、対AIではほぼ無効化されるでしょう。せいぜいdBの値から発話者の感情の推測が働く程度ではないでしょうか。となると、この面でも効率的とは思えない。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;出力帯域幅&lt;/strong&gt;の観点では、これは確かに発話がタイピングより優れています。僕はかなりタイピング速度が早いほうだと思いますが、それでも音声にかなうはずはありません。しかし、&lt;strong&gt;多くの場合ボトルネックは帯域幅ではなく思考をまとめる脳の演算&lt;/strong&gt;ではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;もちろん&lt;strong&gt;現場での作業中など咄嗟の一声と脊髄的な応答が必要な場面では違います&lt;/strong&gt;が、AIを使う時点でリアルタイム性については既に犠牲になっているでしょうし、またそもそもAIにできることと現場作業はかなり乖離があるのが現実に思います。とすると、&lt;strong&gt;実態としてはAIには咄嗟の応答ではなく論理的な応答が期待されるはずで、するとやはりボトルネックは我々の脳にある&lt;/strong&gt;のではないでしょうか。話す速度やタイピング速度は早く出来るかもしれませんが、早く考えることはできません。&lt;/p&gt;&#10;&lt;p&gt;一点、&lt;strong&gt;タイピングの明確な問題として視覚表現が苦手というのがあるのですけれど、これは発話もまったく同じ脆弱性を抱えている&lt;/strong&gt;ため、まぁこれについてはどっちもどっち、ですかね。むしろ記号やアスキーアートのような一発技がある分タイピングのほうがまだ有利ですかね。発話にもイントネーションや発声の大きさ・速度、ボイスパーカッションで表現という大技があるかもしれませんが、ちょっと厳しそう。&lt;/p&gt;&#10;&lt;p&gt;こういう感じなので、僕としてはそもそも対AIにおける音声入力の優位性自体にかなり疑問があります。&lt;/p&gt;&#10;&lt;h2 id="認知特性の話"&gt;認知特性の話&#10;&lt;/h2&gt;&lt;p&gt;…などと申し上げましたが、これを反駁という気がないのは、&lt;strong&gt;これらは僕の思考様式、認知特性が色濃く出たもので、この感覚は恐らく特殊なほうなのだろう&lt;/strong&gt;と思われるからです。&lt;/p&gt;&#10;&lt;p&gt;つまり僕は、&lt;strong&gt;認知特性として極端に文字列に偏ってしまっている&lt;/strong&gt;のです。これは僕が14年にわたってブログを続けられていることの一因でもあるでしょうね。&lt;/p&gt;&#10;&lt;p&gt;その結果なのか、それとも原因なのか、僕は基本的には一度ロジックを組み立てようとする癖がついています。それをしないと、理解が著しく妨げられるような感覚です。入出力の両方でそうなっており、&lt;strong&gt;素のまま受け止める、というようなことが苦手&lt;/strong&gt;です。なので人の話を聞くのも正直苦手です。&lt;/p&gt;&#10;&lt;p&gt;昔からそうで、学校の授業では先生の言うことをその場で理解できませんでした。なので、後で教科書やノートを見直して、頭の中で整理して、ああそういうことか、と理解していました。幸いこれは成績を高める学習スタイルの一つとして有用なものであったので、その点では困らなかったのですけれど、頭のいい人は授業中に全部理解するのだ、というような言説を見聞きするたびに、そうなのかなぁ…とそれができない自分にもどかしさを感じることもありました。&lt;/p&gt;&#10;&lt;p&gt;なので、対人コミュニケーションで特に早口でまくし立てるような人とは非常に相性が悪く、それに対する自分なりのスタンスを築くにはまだまだ幼かったため、なかなか臆病な子供に育ってしまったと思います。認知特性を理解して対処法を教えられる人はなかなかいないですよね。今はさすがに経験を積んで、ある程度の対策は取りますが、やはり得意ではありません。&lt;/p&gt;&#10;&lt;p&gt;娯楽においてすら、音声や動画といった、盛んに次世代メディア的な喧伝をされているものも、あまり好きではありません。映画・ドラマ・アニメを見ません。小説・漫画を好みます。&lt;/p&gt;&#10;&lt;p&gt;一方、世の中YouTubeやTikTokが持て囃され、これからは動画だと言われ続け、今実際そうなっているでしょう。ショート動画は個人的には何がしたいのか意味不明なのですが、社会問題として受け止められることもあるくらいには好む人が多いようです。XことTwitterが最後のテキストメディアだという言説もよく聞きました。&lt;/p&gt;&#10;&lt;p&gt;このような感じですから、僕のほうが変わっているのでしょう。そしてこのご時世にこの（比較的）長文の記事を読まれている方も、恐らく世間的にはマイノリティに入る特性があるかと思われます。しかもその特性を多様とは認めてもらえません…おっと余計なことを言ってしまった。&lt;/p&gt;&#10;&lt;h2 id="出力インタフェースの期待"&gt;出力インタフェースの期待&#10;&lt;/h2&gt;&lt;p&gt;以上より、AIがあったからといってその入力に音声を使うことは、僕はあまりないのではないかと思います。ごくシンプルなタスクなどであればそういう特性の人はマイノリティかもしれませんが相当数はいると思います。自分の特性に確信があるならば、世間の潮流に流されないように振る舞いたいところです。&lt;/p&gt;&#10;&lt;p&gt;個人的には、出力を音から文字列に変換する、というロールのほうに、期待していますね。こっちのほうがAIも得意でしょ、多分。&lt;/p&gt;&#10;</description></item><item><title>【脱Antigravity】DeepSeek APIはじめました</title><link>https://hack-le.com/antigravitydeepseek-api/</link><pubDate>Tue, 22 Sep 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/antigravitydeepseek-api/</guid><description>&lt;p&gt;Google AI Proプランで、Antigravityのサブスク枠がいい加減つらい感じになっています。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/09/image-1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;いよいよDeepSeek V4のAPIを試すときがきたようです。&lt;/p&gt;&#10;&lt;p&gt;久しぶりにVSCodeを起動しました。プラグインとしてはGeminiがRoo Codeが最先端やっていうからインストールしてDeepSeekのAPIキーをセットしたんですけれど…。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;これは Roo Code の最後のリリースです。&#10;数週間前にお知らせしたとおり、私たちは今後、ソフトウェア開発の未来だと考えているクラウドエージェントプラットフォーム&#10;Roomote に注力することにしました。この約1年間のご支援、本当にありがとうございました。&lt;/p&gt;&#10;&lt;p&gt;この拡張機能は今後も無期限に動作し続けるはずですが、バグ修正、新機能、モデル更新は提供されません。&lt;/p&gt;&#10;&lt;p&gt;拡張機能を使いたい場合は、コミュニティによる Roo Code のフォークである&#10;ZooCode と、Roo Code の出発点である&#10;Cline をぜひ確認してみてください。&lt;/p&gt;&#10;&lt;p&gt;Happy coding!&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;oh…。ちなみに実際に使ってみたらDeepSeekのAPIリクエストは永遠に通りませんでした。&lt;/p&gt;&#10;&lt;p&gt;仕方ないのでアンインストールし、Clineを試しました。こちらはすぐに通り、簡単なタスクを投げたところ、あっという間に仕上げてくれました。費用も算出してくれて、flashで2.4Mトークン、オフピークで$0.0355といったところでした。DeepSeekはオフピークとピークアワーがあるようで、ピークアワーはオフピークの2倍の料金になってしまうとのことで。「&lt;a class="link" href="https://api-docs.deepseek.com/quick_start/pricing/#deduction-rules" target="_blank" rel="noopener"&#10; &gt;Models &amp;amp; Pricing | DeepSeek API Docs&lt;/a&gt;」によると&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;(3) Off-peak rates are half of the peak rates. Peak hours are 01:00 - 04:00 and 06:00 - 10:00 UTC, Monday through Friday (all other hours are off-peak).&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;つまり日本時間の月ー金10:00-13:00, 15:00-19:00 は料金が倍だということです。選べるならオフピークに開発したいところですね。&lt;/p&gt;&#10;&lt;p&gt;このコスト感ならまぁいいかな…？ちなみに料金表はDeepSeek V4/ChatGPT/Geminiでこんな感じです。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;モデル（2026年9月）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;入力（1M）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;キャッシュ&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;出力（1M）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;DeepSeek V4 Flash&lt;/strong&gt;（オフピーク）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;$0.15&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;$0.003&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;$0.60&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;OpenAI GPT-5.6 Luna&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0.20&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0.02&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$1.20&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Google Gemini 3.8 Flash&lt;/strong&gt;(2026年末まで)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0.75&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0.075&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$3.75&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;2026-09-23: 記事公開してから速攻でGPT-6 Lunaが出て、入力$0.1、出力$0.5になりました。キャッシュ考えてもGPT-6 Lunaのほうが現状いいかも&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Geminiはなにがしたいんや。&lt;/strong&gt; しかもこれ2027年から倍になりますんで…。位置づけ的にはもう少し高級なつもりなんでしょうか…別にそういう感じはしないんですけどね。&lt;/p&gt;&#10;&lt;p&gt;ただ、サブスクプランにおいて使っている限りは、正直費用感としてこの高さではないんですよね。うーん。内部的にどうなっているのかわからないのでなんとも…。まぁとりあえず、DeepSeek V4 Flashで問題なさげなら良さそう、とは言えるでしょう。&lt;/p&gt;&#10;&lt;p&gt;それにしても操作感がAntigravityとは全然違います。Antigravityの問題は、ツールまで囲い込まれてしまって、気がつくと世間の潮流と離れてしまうことかもしれません。&lt;/p&gt;&#10;&lt;p&gt;DeepSeek V4 Flash vs Gemini 3.8 Flashのどちらが良いのかは、今のところなんとも言えない感じですが、少なくとも頭悪くはなっていないとは思います。&lt;/p&gt;&#10;&lt;p&gt;このへんは使っていくうちに感触がわかるでしょう。年末の契約が切れるまではAntigravityをまず使いつつ、リミットがきたらDeepSeekをボチボチ試す、という感じになるかなぁと思います。この調子だと、脱Google AI Proは達成できるかな。さらばYouTube Premium Lite。でも半額セールしてたら買ってもええんやで？&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-ai-pro/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【覇権からネタ枠】Google AI Proの半額セールに釣られて年間契約したけど結局Geminiはどうなのか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-ai-pro/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_51390_1786727418.webp" alt="【覇権からネタ枠】Google AI Proの半額セールに釣られて年間契約したけど結局Geminiはどうなのか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-antigravity-deepseek-api/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【AIプログラミング】AntigravityからDeepSeekのAPIに移行を進めたい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-antigravity-deepseek-api/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_51900_1789017127.webp" alt="【AIプログラミング】AntigravityからDeepSeekのAPIに移行を進めたい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>【AIプログラミング】AntigravityからDeepSeekのAPIに移行を進めたい</title><link>https://hack-le.com/ai-antigravity-deepseek-api/</link><pubDate>Fri, 11 Sep 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-antigravity-deepseek-api/</guid><description>&lt;p&gt;現在自分はGoogleのAI Proプランを契約しています。理由は、昨年末の半額セールに釣られたからです。一年間14,500円、つまり1ヶ月あたり1,200円程度ということで、これは非常にお得だと思われました。実際、そのときはお得でした。&lt;/p&gt;&#10;&lt;p&gt;しかしその後猛烈な勢いでナーフされ、さらにGeminiはモデル覇権争いから明確に脱落し、proは永遠に放置され、Flashばかりが更新される今日この頃。あのセールで「掴まされた！」とその後の展開で思った開発者は多いと思います。いまは「いやでもGoogle Driveがあるから」と涙目で強がるしかありませぬ。&lt;/p&gt;&#10;&lt;p&gt;しかも私はGoogle Driveは監視アプリとみなしているので積極的には使いません。積極的にはというのは、間接的には逃れられないので…。そしてYouTube Premium Liteだけが残った。まぁ実際、YouTube Premium LiteはGoogle TVでは便利です、というかGoogle TVはYouTube Premiumを売るためのものだったんだなと今更思いました。&lt;/p&gt;&#10;&lt;h2 id="deepseekが候補"&gt;DeepSeekが候補&#10;&lt;/h2&gt;&lt;p&gt;さてそれはともかく、早いもので私が年額セールにホイホイ釣られてから三四半期ほど経過し、そろそろ次の更新が迫ってまいりました。まぁなんだかんだいって、ナーフされたとはいえそれでもなお安いほうなのかな、とは思います。&lt;/p&gt;&#10;&lt;p&gt;思いますが、1,200円/月だからそう思うので、これが2,900円/月となるとやはり話は変わります。そろそろ次を探さないといけません。&lt;/p&gt;&#10;&lt;p&gt;まぁ無難にいくならOpenAIかClaudeなんですけれど、正直どっちも高いなぁという気持ちがあります。あとChatGPTは、特にチャットのスタンスが非常に好きになれず、あまりこれに金を払いたくない。そもそも自分にとって金を払う動機はほとんどコーディングエージェントなので、チャットは必須要件ではありあせん。&lt;/p&gt;&#10;&lt;p&gt;ということを考えていくと、みんな大好きなのか大嫌いなのかわからないが中華AIが選択肢に上がってきますね。&lt;/p&gt;&#10;&lt;p&gt;中華AIについて異様に嫌う人がいますが、米国ならよくて中国はだめ、というのは私は与しません。セキュリティや情報漏洩云々について、米国と中国で、日本人として大差ないと思います。米国人に召し上げられるのは仕方ないが中国人に召し上げられるのは嫌だ、とはならないです。いいとは思いませんが、もう他人のモデルをネット経由で使う以上もうどうにもならないという絶望感があります。&lt;/p&gt;&#10;&lt;p&gt;中華AIは泥棒云々も、だったら米国AIは泥棒じゃないのか、というのがあるから、米国や米企業の中国AIは泥棒だといくらいっても、誰も同情しないですよね。&lt;/p&gt;&#10;&lt;p&gt;ということで私は安くて実用的であること、ただそれだけを基準に考えて、中華AIもいいなぁと思っているわけです。最近はKimi K3が話題になっていましたが、コスパを考えるならDeepSeekかなぁと思っております。先月値上げされていましたが、それでもなおコスト優位性はあるし…と思っていたところ、なんかまた値下げされたようです。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://finance.biggo.jp/news/74dec468-f7b2-47af-9a0c-dc0f2a930625" target="_blank" rel="noopener"&#10; &gt;DeepSeek、値上げから23日で電撃値下げ——背後に「オープンソース分身」の包囲網 — BigGo ファイナンス&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;値下げ自体は限定的ではありますが、たった23日で一部でも譲歩したらのは事実上の失敗を示唆しています。やはりこれはオープンモデルだからというのが大きいはずで、つまりまぁDeepSeekを使えるのはDeepSeekだけではない…というわけですね。&lt;/p&gt;&#10;&lt;p&gt;ここらへん、VPS文化に近いような感じもあって、探せば面白いプロバイダもあるのではないか、と思われます。最初はリファレンスでもあるDeepSeekの公式を使いつつ、慣れてきたら野良の謎プロバイダを探していくことを想定しています。&lt;/p&gt;&#10;&lt;h2 id="antigravityとサブスク枠の不満"&gt;Antigravityとサブスク枠の不満&#10;&lt;/h2&gt;&lt;p&gt;DeepSeek系になると、ツールは自分で用意し、また課金体系は従量課金になると思われますが、まぁそれでいいかなと思っています。&lt;/p&gt;&#10;&lt;p&gt;GoogleのAntigravityはわかりやすくはあるんですけれど、まぁツールごとGoogleの作法に従わないといけないので、それがなんとも鬱陶しい。まぁVSCodeでもそれはそうなんですが、MSとGoogleのダブルの作法に影響されるというのは地獄です。&lt;/p&gt;&#10;&lt;p&gt;またGoogleならではの免責のための承認地獄。&lt;code&gt;ls&lt;/code&gt;や&lt;code&gt;docker ps&lt;/code&gt;の承認待ちで止まっているの見ると殺意が芽生える。まぁ緩和する設定もあるんですが、やっているつもりなんですが、しかしやはりなんだか何かと止まる…。バイブスがないんだよバイブスが。DeepSeekのAPI運用のほうがこのへんやりやすそう。&lt;/p&gt;&#10;&lt;p&gt;あとサブスク枠を使うもの全般に言えるのですが、&lt;strong&gt;貧乏根性が発揮されてリセットされる前に使い切らないと損なような気がして、なにか追い立てられるように実装をしてしまいます&lt;/strong&gt;。使い切らないと、24時間無意味にエージェント動かしている阿呆の分のコストも背負っているのかなぁと思ってしまう。かといって最初からクライマックスで早々と枠を使い切ると、いざという時に従量課金の手出しが出てしまうので、なんだか奇妙な計画性を求められ、これがけっこうストレスです。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、従量課金で適正と思えるコストになるならば、それが一番良いように思われました。サブスクだとなんか割としょうもないことにもいちいちAI使ってしまうし、それもよくない。まぁ何をAIに頼んで何を自分でやるかをいちいち判断するのがしんどい説もあると思いますが、個人的にそれは人間が考えるべきことだとは思います。&lt;/p&gt;&#10;&lt;p&gt;ということで、そろそろボチボチDeepSeekを試していくかなぁ、というお気持ちです。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/gemini-1200/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;脱Googleならず！月1,200円には勝てなかったよ……無念のGemini年間契約&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/gemini-1200/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/12/image-10_16x9.jpg" alt="脱Googleならず！月1,200円には勝てなかったよ……無念のGemini年間契約" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-ai-pro/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【覇権からネタ枠】Google AI Proの半額セールに釣られて年間契約したけど結局Geminiはどうなのか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-ai-pro/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_51390_1786727418.webp" alt="【覇権からネタ枠】Google AI Proの半額セールに釣られて年間契約したけど結局Geminiはどうなのか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>AI PCでやることがない</title><link>https://hack-le.com/ai-pc-yarukoto/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-pc-yarukoto/</guid><description>&lt;p&gt;バカみたいに高くなるメモリのせいで、PCが高くなって、そういえばAI PCって言わなくなったなぁと思う今日この頃。まぁAI PCなんて、メーカが売りたがっていただけで、ユーザでほしがってる人は見たことないしなぁというか、&lt;strong&gt;そもそもみんなPCで何してるんだろう&lt;/strong&gt;と、ふと思った。いや、まずPCを持っているのだろうか。&lt;/p&gt;&#10;&lt;h2 id="pcの所有率"&gt;PCの所有率&#10;&lt;/h2&gt;&lt;p&gt;軽く調べて見ると、なんだか調査によって結果に随分とばらつきがある。「&lt;a class="link" href="https://news.yahoo.co.jp/expert/articles/afa422cac03701694da43bbda22778f1e363103d" target="_blank" rel="noopener"&#10; &gt;年齢階層別にパソコンの世帯普及率の実情をさぐる(2024年公開版)（不破雷蔵） - エキスパート - Yahoo!ニュース&lt;/a&gt;」は内閣府の調査をベースにしているが、全体で7割くらいはPCを所持しているのに対し、「&lt;a class="link" href="https://markezine.jp/news/detail/45588" target="_blank" rel="noopener"&#10; &gt;Z世代のパソコン所有率、3割未満に／4人に1人が「テレビ番組は見ない」【日本インフォメーション調査】：MarkeZine（マーケジン）&lt;/a&gt;」では半分にも満たないようだった。まぁ調査対象はもちろんだが、前者は世帯所有率で後者は個人所有率であるので、その差が大きいか。確かに、家にある誰のものとも言えないPCを、自分が持っていると言えるかどうかは微妙だよね。&lt;/p&gt;&#10;&lt;p&gt;しかしまぁ、全体の傾向として以下は言えるだろう。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PC所有率はピークを超えて減少傾向&lt;/li&gt;&#10;&lt;li&gt;若者はむしろ持っていない人も多く、一番持っているのは中年&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ま…それはそうかな、と思う。僕も学生時代はブラウジングのほかは２ちゃんや音楽や画像の管理をしたりで、今それらはスマートフォンやタブレットでも機能的には十分に見える。ってことは、職業的な専門性や趣味がないとPCを使う必要に迫られない。大学生ならレポートのためにPC買うだろうけれど、逆に言うと大学行かなかったらPC使わないまま社会人突入だろうし、仕事でしか使わなかったら、PCの楽しさなんてわからないものな。&lt;/p&gt;&#10;&lt;h2 id="pcの楽しさ"&gt;PCの楽しさ&#10;&lt;/h2&gt;&lt;p&gt;PCの楽しさ、か。考えてみたらなんだろう。考えてみると、以下があるように思う。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;生産&lt;/li&gt;&#10;&lt;li&gt;管理&lt;/li&gt;&#10;&lt;li&gt;徹底した調査&lt;/li&gt;&#10;&lt;li&gt;大量の閲覧&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="生産"&gt;生産&#10;&lt;/h3&gt;&lt;p&gt;生産とは、こうしてブログを書いたり、プログラミングしたり、イラストや動画を制作したり、SNSでつぶやいたり、オフィスソフトでデータをまとめたり、といった活動がそう言えるかな。最近はこれらをスマホやタブレットで十分だ、という向きもあるのだけれど、少数派だと思う。だいたい生産する人は、他のこともハードにやるので…。&lt;/p&gt;&#10;&lt;h3 id="管理"&gt;管理&#10;&lt;/h3&gt;&lt;p&gt;管理とは、つまりデータ管理にあたる。テキストやオフィスソフトのデータはもちろん、音楽や写真、絵、動画など、あらゆるメディアをファイルとして整理して保存する。&lt;/p&gt;&#10;&lt;p&gt;ま…最近はこれもスマホでクラウド上に送るだけって人も多いのかな。写真なんかもう自分で管理している人のほうが少数派だろうし、音楽に至っては管理どころか、ストリーミングが主流になってしまったね。&lt;/p&gt;&#10;&lt;p&gt;でも今でも、好事家は手元に置いて整理しているだろう。特に生産する場合、この管理は必須の要件にあたる。&lt;/p&gt;&#10;&lt;h3 id="徹底した調査"&gt;徹底した調査&#10;&lt;/h3&gt;&lt;p&gt;徹底した調査とは、徹底して調査することです（某大臣風味）。スマホでAIにちょっと聞くとか検索するとかではなく、まぁ何枚をウィンドウを並べて、データを保存し、整理し、まとめて、ああでもないこうでもないと考えるその一連のプロセス、その結果としてのなにか。&lt;/p&gt;&#10;&lt;p&gt;まぁ生産の一種かもしれないのだけれど、創発的に生み出そうとすることと、今あるものをなんとか拾い集めてくることは、個人的には区別したいかな。いずれにせよスマホやタブレットではしんどい。アプリひとつでどうにかなるものではない。バラバラのデータを、自分が主体となって再構築する作業は、PCじゃないと難しい。&lt;/p&gt;&#10;&lt;h3 id="大量の閲覧"&gt;大量の閲覧&#10;&lt;/h3&gt;&lt;p&gt;受動的な閲覧にしても、PCはその大画面と高い処理能力、充実した入力インタフェースにより、圧倒的な体感を提供する。スマホなんかデカいと言っても所詮6-7インチ程度、27インチやら31.5インチある大画面の一覧性と比べたら雲泥の差。一覧性、豊富な情報量、高い表現力、それらを実現しようと思えば、やはりPC、となる。&lt;/p&gt;&#10;&lt;h2 id="pcとクラウド"&gt;PCとクラウド&#10;&lt;/h2&gt;&lt;p&gt;逆に言うと、上記にあげたことをしないのであれば、PCは不要だ、ということになる。実際、&lt;strong&gt;人生においてそんなものは不要、という人の割合は多い気がする&lt;/strong&gt;。PC所有率はまだまだ高すぎるくらいかもしれない。&lt;/p&gt;&#10;&lt;p&gt;一方で、&lt;strong&gt;本当はもっと使いこなせたほうがいい人、というのもこれもまた多すぎる気がする&lt;/strong&gt;。たとえばクラウドにデータを預けっぱなしにしていたら、サービス側の誤射でアカウントBANされたりなんだりデータが破壊されてしまった人なんかが定期的にトレンドになるが、ああいう人は本来目の前の箱をもっと有効に使うべきだった典型じゃないかな。&lt;/p&gt;&#10;&lt;p&gt;まぁこの10年、クラウドが大いに流行りすぎたせいで、&lt;strong&gt;トレンドに敏感な層ほどクラウドに傾倒してしまった&lt;/strong&gt;きらいはある。むしろ本来ローカルのPCを大事にすべき人ほど、率先して自分のデータを雲の上に差し出していたのは皮肉なことだ。&lt;/p&gt;&#10;&lt;p&gt;もっともこういう僕も、まさに音楽管理で喜んでApple Musicを使った結果、ライブラリを滅茶苦茶に破壊されて嘆いたりなどの洗礼を受けている。当時は本当にそれが最先端だとみんな信じ込まされていたのだし、今のその流れはある…というか今なおメインストリームかもね。かもっていうか、そうかな。そうだろうな。残念だけど。&lt;/p&gt;&#10;&lt;h2 id="今更ai-pcと言われても"&gt;今更AI PCと言われても&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;PCに関して言えば、出来ることはどんどん減ってきたように感じる20年だった&lt;/strong&gt;。スペックは上がっているのに、奇妙なことだ。しかしスペックが上がるのと反比例するように、機能の実現はむしろクラウドに移行した。実際の処理は雲の上で行われるため、PCとスマホの違いはインタフェースくらいになってしまった。&lt;/p&gt;&#10;&lt;p&gt;実際、前述したPCの楽しさとしての4つの項目も、ほとんどはインタフェースの差異からくるものだと思う。大きな画面、キーボード、マウス、そして複数のアプリを同時に立ち上げられること。まぁせいぜいその程度かな。そのアプリも、なんというか、まぁ、商業アプリか、いくつかの定番が残っているだけで。&lt;/p&gt;&#10;&lt;p&gt;何を考えているかと言うと、&lt;strong&gt;本質的に処理ないし計算と言えるようなことを、目の前でPCにどれだけさせてきたか、ということについて違和感がある&lt;/strong&gt;。写真や音楽の管理のようなまさに個人がPCでやればよいことも、全部クラウドでやっている。それは他人のサーバだから、自分でいじれることが多いわけじゃない。&lt;/p&gt;&#10;&lt;p&gt;そんな中でAIブームがきた。メーカはこぞってAI PCだというけれど、別にPCにAIがついたからといって、今更やりたいこともない。&lt;strong&gt;データは全部雲の上にあって自由にできない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;それでもなおAIを使った面白いアイディアを考える人はいるかもしれないけれど、&lt;strong&gt;署名の金が払えないので作ったソフトはOSによりマルウェア扱いで一般人はインストールもままならない&lt;/strong&gt;。そもそも個人制作のアプリはもう検索に出てこない。といって&lt;strong&gt;企業は金にならないことはやらないし、そもそもリスク回避が第一なので先進的な試み自体にハードルがある&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;結局、OSの胴元がなんか売り出そうとするのだけれど、それはなんだか背景を消したり会議のノイズを消したりメールのドラフトを書いたりディナーの予約をしたりといったもので、バカ高い金を払う理由にはどう考えてもならないものだ。&lt;/p&gt;&#10;&lt;p&gt;まぁつまり、今更AI PCと言われても、&lt;strong&gt;AIにさせたいほどのことをPCでやっている人自体が既にごく少数派になっている&lt;/strong&gt;。家族の写真すら、多くの人は目の前の箱に入れていない。そのように先導してきたのは、まさにPC業界そのものであった。ただOSのアップデートを言い訳にして売ってきただけだった。性能アップを、OSを重くするだけに使ってきた。それが一番楽だったんだろうな。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;AIブームでPC業界はむしろ苦しいわけだけれど、業界全体でツケを払っているんだろうなぁ&lt;/strong&gt;、と思う。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-stage-manager-5/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Macのステージマネージャは結局5日でやめた：シングルタスクとは何か問題&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-stage-manager-5/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/02/mac-stage-manager-5.webp" alt="Macのステージマネージャは結局5日でやめた：シングルタスクとは何か問題" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-ai/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac突然の値上げ、AIがPCを奪う&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-ai/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/eyecatch_50230_1782461044.webp" alt="Mac突然の値上げ、AIがPCを奪う" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>楽天ひかり + TP-Link Archer AX5400(AX73) + クロスパスで高速通信の設定</title><link>https://hack-le.com/rakutenhikari-tp-link-archer-ax5400ax73-xpass/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/rakutenhikari-tp-link-archer-ax5400ax73-xpass/</guid><description>&lt;p&gt;なんかもう忘れている気もするが覚えいてる限りのメモ。&lt;/p&gt;&#10;&lt;h2 id="楽天ひかりとクロスパスについて"&gt;楽天ひかりとクロスパスについて&#10;&lt;/h2&gt;&lt;p&gt;楽天ひかりはクロスパス（Xpass）対応のルータを自分で用意しないといけないのだが、最近のそこそこクラスなら多分対応している。AX5400も対応している。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/dp/B0C9PZBQVJ?language=ja_JP&amp;amp;linkCode=ll1&amp;amp;ref_=as_li_ss_tl&amp;amp;tag=hackle12-22" target="_blank" rel="noopener"&#10; &gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://m.media-amazon.com/images/I/91yMZ8vZ5vL._AC_.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/dp/B0C9PZBQVJ?language=ja_JP&amp;amp;linkCode=ll1&amp;amp;ref_=as_li_ss_tl&amp;amp;tag=hackle12-22" target="_blank" rel="noopener"&#10; &gt;WiFiルーター TP-Link 無線LANルーター Wi-Fi6対応 AX5400 EasyMesh WPA3 Archer AX73V 【Amazon限定 / 3年メーカー保証 / PS5・Switch・ iphone 対応】&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;※Amazonアソシエイトリンクを使用しています&lt;/p&gt;&#10;&lt;p&gt;これの商品写真が、僕の持っている宇宙船みたいなやつと違うんだけど型番同じなんだよなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはいいとして、このクロスパスについて超ざっくりAIに伺いつつ聞いたところ、つまりIPv4 over IPv6で、IPv4のWebサイトもIPv6でやりとりするための技術の一つ、になるらしい。なにかというとIPv4をカプセル化してIPv6のデータに包み込むわけだ。IPv6のほうが接続ルート的に空いてて繋がりやすいため、高速接続に対応する。&lt;/p&gt;&#10;&lt;p&gt;つまり&lt;strong&gt;クロスパスに対応してないと楽天ひかりの本気は出せない&lt;/strong&gt;わけだ。そしてルータの設定をするうえでも、IPv4 over IPv6の実装の一つだということは理解しておく必要がありそうだ。&lt;/p&gt;&#10;&lt;p&gt;なお自分は、自宅サーバ勢でちょっと事情があってIPv4でやっていたため、&lt;strong&gt;ルータでIPv6を切っていた。この時点で暗雲立ち込める&lt;/strong&gt;。まぁとりあえずIPv6はしゃーなしで有効化しますわな。&lt;/p&gt;&#10;&lt;h2 id="繋がるまでにやること"&gt;繋がるまでにやること&#10;&lt;/h2&gt;&lt;p&gt;さて、色々特殊な設定をしていたせいか、工事の人いわく「繋がってるはずなんですけど、ネット使えないですね。まぁ電話サポート一回できるんで」とそそくさと帰っていった。まぁ僕もおまかんの自覚はあったから別によい。&lt;/p&gt;&#10;&lt;p&gt;とりあえず &lt;code&gt;http://192.168.0.1&lt;/code&gt;なりなんありルータのアドレスにログイン。&lt;/p&gt;&#10;&lt;h3 id="ipv6は有効化する"&gt;IPv6は有効化する&#10;&lt;/h3&gt;&lt;p&gt;とりあえずしゃーなし。あまり切っている人はいないと思われるが…。まぁIPv4限定にしていたのもちょっと特殊な事情があったからなので、もういいんです。「詳細設定」の「IPv6」から&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/08/image-2-700x195.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;動的IP（SLAAC / DHCPv6）を選択。&lt;/p&gt;&#10;&lt;h3 id="接続タイプをds-liteに設定する"&gt;接続タイプをDS-Liteに設定する&#10;&lt;/h3&gt;&lt;p&gt;詳細設定の「ネットワーク」よりインターネット接続タイプを「DS-Lite」、AFTRは「自動」。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/08/image-3-700x255.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="再起動"&gt;再起動&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;NTTから配られたONUとAX5400をそれぞれ電源抜く&lt;/li&gt;&#10;&lt;li&gt;数分放置&lt;/li&gt;&#10;&lt;li&gt;ONUを電源投入、ランプが安定するまで待つ&lt;/li&gt;&#10;&lt;li&gt;次にAX5400を電源投入。安定するまで待つ&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;これでいけるはず。&lt;/p&gt;&#10;&lt;h2 id="lan内dnsを使うセルフホストの民"&gt;LAN内DNSを使うセルフホストの民&#10;&lt;/h2&gt;&lt;p&gt;あまりいないと思われるが、AGH + Caddyなど使ってセルフホストを使う民の場合、LAN内ドメインの名前解決がうまくいかないかもしれない。これはIPv6の通信が優先されていると思われる。なので、IPv6についてもきちんと対応すればいい、のかもしれないのだが、なんかもうしんどいのでLAN内ではもう全部IPv4でやるようにクライアント側の端末設定しました。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/landnsipv6windowsipv6/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;LAN内DNSでIPv6は使わないのでWindowsでIPv6を無効化する&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/landnsipv6windowsipv6/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/07/eyecatch_50770_1785034008.webp" alt="LAN内DNSでIPv6は使わないのでWindowsでIPv6を無効化する" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/linux-mint-xfce-22-3-ipv6-disabled/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Linux Mint Xfce 22.3 でIPv6を切る&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/linux-mint-xfce-22-3-ipv6-disabled/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_51088_1786019518.webp" alt="Linux Mint Xfce 22.3 でIPv6を切る" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/android-lan-agh-dns/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AndroidでLAN内DNS(AdGuard Home)にIPv4アドレスでアクセスする&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/android-lan-agh-dns/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_50782_1786019566.webp" alt="AndroidでLAN内DNS(AdGuard Home)にIPv4アドレスでアクセスする" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Androidはけっこう鬼門。&lt;/p&gt;&#10;&lt;p&gt;記憶違いなら御免なんだけど、Macはそもそもそんな設定してない。Wi-fiの設定でDNSサーバをAGHがあるIPアドレスに指定したらそれで動いたように思う。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/rakuten-mobile-pixel-7-eth/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;実録：楽天モバイル &amp;#43; Pixel 7からイーサネットテザリングでルータに繋げて家のネット回線にする&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/rakuten-mobile-pixel-7-eth/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/original_50265_1782755101_16x9.webp" alt="実録：楽天モバイル &amp;#43; Pixel 7からイーサネットテザリングでルータに繋げて家のネット回線にする" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/nuro-cancel/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;nuro光に申し込んだがキャンセルし、無事ネット難民になった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/nuro-cancel/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/eyecatch_50212_1782374138.webp" alt="nuro光に申し込んだがキャンセルし、無事ネット難民になった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Pixel 11を仔細に見つつ、Pixel 7ももうすぐ5年目、買い替える意味はあるだろうかと考える</title><link>https://hack-le.com/pixel-11-7/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/pixel-11-7/</guid><description>&lt;p&gt;最近Pixel 11が発売（予約）となりました。昨今の情勢から仕方ないのですけれど、やはり高くはなっています。ただ為替を見ると、日本は少し優遇されているようです。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-google-pixel-11-2-49800-japan.html" target="_blank" rel="noopener"&#10; &gt;Pixel 11で日本優遇が復活。Googleが最重要市場と位置付け、円安でも価格を抑える｜携帯総合研究所&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;それでもPixel 7の狂乱の旨味を知ってしまった民からすれば「高い！」なのですけれど、これはさすがにPixel 7が異常だったのでまぁ。&lt;/p&gt;&#10;&lt;p&gt;スペックなどなど検討しつつ、手元のPixel 7と比べてまいります。なんだかんだでこれ毎回やってるな。そろそろPixel 7のサポート期限となる2027年が近づいているので、真面目に検討もしていたりはします。一応。&lt;/p&gt;&#10;&lt;h2 id="お値段を見る"&gt;お値段を見る&#10;&lt;/h2&gt;&lt;h3 id="定価"&gt;定価&#10;&lt;/h3&gt;&lt;p&gt;なにはなくともお値段。税込みで&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;256GB: 136,800円&lt;/li&gt;&#10;&lt;li&gt;512GB: 156,800円&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;前モデルが128,900円なので、値上げといえば値上げですが、ストレージが128GBから256GBに増量されているので、多くのストレージを必要としている人ならば一応値下げになります。不要な人ならいらないストレージに金払う格好になります。ただ&lt;strong&gt;AIのために大容量モデルをDLさせたいとかいう意図があるのかもしれないので予断を許しません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;なお今までの歴代価格は以下 by AI。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;モデル&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;発売年月&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;最小ストレージ / RAM&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;発売時直販価格（税込）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Google Pixel 7&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2022年10月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128GB / 8GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;82,500円&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Google Pixel 8&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2023年10月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128GB / 8GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;112,900円&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Google Pixel 9&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2024年8月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128GB / 12GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;128,900円&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Google Pixel 10&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2025年8月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128GB / 12GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;128,900円&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;昨今のメモリ狂乱を経てこれなので、相対的に頑張っている、と言えると思います。&lt;/p&gt;&#10;&lt;h3 id="ストアクレジットと下取り価格の罠"&gt;ストアクレジットと下取り価格の罠&#10;&lt;/h3&gt;&lt;p&gt;ただPixelについては、&lt;strong&gt;ここに「発売当時の下取り価格とポイントの大盤振る舞い」まで含めないと見誤る&lt;/strong&gt;んですよね。&lt;strong&gt;今回は下取り10,000円増額、ストアクレジットは37,900ポイント&lt;/strong&gt;のようです（Pro以上は49,900ポイント、下取りは20,000円増額）。&lt;/p&gt;&#10;&lt;p&gt;比べてはいけませんが、当たり前ですがPixel 7のときの狂乱には遠いですね。Pixel 7は10%OFFクーポンが様々なルートで乱発、下取り価格はPixel 4が61,500円という異常値、さらに21,000ポイントのストアクレジットが付きました。つまり人によっては買うと黒字とまで言われた、&lt;strong&gt;狂気のiPhone絶対殺すキャンペーンが実施されていたわけです&lt;/strong&gt;。まぁさすがにこれが基準になったらモバイル業界は破壊され尽くしますので、いっときだけのお祭り騒ぎでした。&lt;/p&gt;&#10;&lt;p&gt;この後は&lt;strong&gt;下取り価格はやや太っ腹ながらも適正に近づいていき&lt;/strong&gt;、一方&lt;strong&gt;ストアクレジットは増量されます。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ストアクレジットはめちゃくちゃ使い道が限定されるので、本当に注意が必要&lt;/strong&gt;です。ストアクレジットを現金扱いして実質xx円という記事が多すぎますが、非常にGoogle寄りで、メディアとして中立的ではないと思います。Pixel 8がストアクレジット30,000ポイント、Pixel 9が32,100、Pixel 10が24,200だったようで、まぁPixel Watchの新シリーズも一緒にほしかった人とかなら、割安になると思います（というかそうでもないと使い道のなさで途方に暮れます。暮れました。）。&lt;/p&gt;&#10;&lt;p&gt;ちなみに下取り価格は1万円増額らしいのですが、それでもPixel 7の下取り価格は19,345円でした。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/08/image-5-700x691.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;中古ショップの販売相場が35,000円くらいだったので、メルカリのほうが高く売れそうですが、まぁ手間暇とのトレードオフですね。&lt;/p&gt;&#10;&lt;h2 id="スペックを見る"&gt;スペックを見る&#10;&lt;/h2&gt;&lt;p&gt;スペックは以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;SoC: Tensor G6&lt;/li&gt;&#10;&lt;li&gt;セキュリティチップ: Titan M3&#10;&lt;ul&gt;&#10;&lt;li&gt;耐量子暗号らしいがバンピーはスルーでOK&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ディスプレイ: 6.3インチ OLED (1080x2424, 60-120Hz)&lt;/li&gt;&#10;&lt;li&gt;RAM: 12GB&lt;/li&gt;&#10;&lt;li&gt;SSD: 256GB/512GB&lt;/li&gt;&#10;&lt;li&gt;バッテリー: 4,985mAh&lt;/li&gt;&#10;&lt;li&gt;サイズ: 72x152.8x8.6mm, 197g&lt;/li&gt;&#10;&lt;li&gt;7年間のOSセキュリティアップデート（2033年まで）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Titan M3の耐量子暗号が目を引きますが、一般人的には影響なしですね。ただまぁ海の向こうではなんだか業界に寄っては法的な要件に入りはじめているそうな。「&lt;a class="link" href="https://www.entrust.com/resources/learn/what-is-cnsa-2-0" target="_blank" rel="noopener"&#10; &gt;What is CNSA 2.0? | Entrust&lt;/a&gt;」によるとなんか2030年までに防衛とかでは耐量子暗号が必須なんだって。はえー。まぁリスクとしては過去の通信記録まで含めて復号されてしまうからというのがあるんだろうけれど、実態として機能するのか謎です。まぁチェックリストに入っているということで、Google的には無視できんのでしょうね。まぁでも我々小市民が気にすることではないのです。&lt;/p&gt;&#10;&lt;p&gt;それよりもRAM・SSDですが、これは高騰を考えると、正直頑張っているんだろうなぁと思います。ま、そんなに頑張る必要があるのもAIブームのせいだし、スペック落とせないのもAIブームのせいなので、マッチポンプみたいな感じもしますが…。「&lt;a class="link" href="https://www.zaikei.co.jp/article/20260813/865631.html" target="_blank" rel="noopener"&#10; &gt;【解説】Googleが「Pixel 11」を正式発表、Geminiが配車や買い物をアプリ上で代行 | 財経新聞&lt;/a&gt;」とのことですが、配車や買い物をAIにやってほしい人類っているんですかね。&lt;strong&gt;クラウドファーストを強力に進めてきたAndroid端末、AIするためのデータがそもそもない&lt;/strong&gt;のであった。&lt;/p&gt;&#10;&lt;p&gt;なんでまぁ、結局見るところはSoCになるでしょうか。&lt;strong&gt;G5より諸悪の根源扱いだったSamsungからTSMCになりました&lt;/strong&gt;けれど、実際の評判としてどうなんでしょうね。何しろ実機を持ってないのでなんとも言えんですね。一般的には、熱問題などは改善されたけれどゲームは相変わらず微妙みたいな評価でしょうか。今回2nmになりましたが、あんまり変わらないだろうなぁ。&lt;/p&gt;&#10;&lt;p&gt;使ってないのでなんともですが、&lt;strong&gt;個人的にはG2も別に不満なかったりする程度の使い方&lt;/strong&gt;なので、気にならないでしょう。ゲームはほとんどしなくて、ユーティリティツールを使うばかりです。で、そういう使い方だとPixel 7はほとんど何も問題になりません。&lt;/p&gt;&#10;&lt;p&gt;サブスマホでPOCO F7を持っており、これはスペックではPixel 7を圧倒しているのですが、実際の使い勝手はPixel 7のほうが良いです。POCO F7はアプリのロードや文字入力の初動などに引っかかりを感じることがありますが、Pixel 7にはそれがありません。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、Pixel 10以降さらに改善されているものと思いますが、私の使い方がユーティリティ寄り過ぎてあまり一般の参考にならないかもしれません。&lt;/p&gt;&#10;&lt;p&gt;まぁでも256GBで最新スマホだったらゲームやりたくなるかもしれないので、いざ使ってみると「最新の3Dゲームがスムーズじゃない！」とかは思ってしまう…のかなぁ。&lt;strong&gt;スペック追い求めるなら中華スマホになるように思います&lt;/strong&gt;。でもそれだったら&lt;strong&gt;そもそもスマホじゃなくてゲーミングPCかグラボ買ってください&lt;/strong&gt;って思ってしまう。高くなったとはいえ10万あったらさすがにまぁ動くグラボが買えますよ。&lt;strong&gt;PCを買おう！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="でpixel-11買うんか"&gt;で、Pixel 11買うんか？&#10;&lt;/h2&gt;&lt;p&gt;なんの話でしたっけ。ああそうPixel 11。まぁなんだ、Pixel 7から買い替えるか？というのが僕の命題になるんですけれど。&lt;/p&gt;&#10;&lt;p&gt;ま……いらないか。というか、&lt;strong&gt;10万円超える時点で射程外&lt;/strong&gt;なんです。10万円あったらジャンクPC10台買います（狂人）。じゃあなんだったんだこの比較。や、もしかすると興奮するアプデがあるかなと思って…。&lt;/p&gt;&#10;&lt;p&gt;まぁサブスマホもありますし、正直2027年アプデ終わっても延々と使い続ける気しかしません。意識低いと言われるかもですが、しかし&lt;strong&gt;現実的にお金は無限にあるわけではありません&lt;/strong&gt;。&lt;strong&gt;使えるものを使い続けること以上のエコはないしむしろ意識高い&lt;/strong&gt;( ･`д･´)&lt;/p&gt;&#10;&lt;p&gt;現状もAndroidはアプデが実質終わった端末大量にあると思いますけれど、OSのバージョンが古いこと自体が直接的な原因で致命的な事態に陥った、という話はまず聞きませんしね。&lt;/p&gt;&#10;&lt;p&gt;他に気をつけることたくさんあると思います。端末を買い替えるより、各種サービスでMFAを有効にする、パスワードマネージャでパスワードを管理してパスワードを使い回さない、Web上でパスワードや暗証番号、クレカの入力を求められたら警戒する、怪しいサイトのよくわからん謎APKを落とさない、そういった&lt;strong&gt;泥臭い個人の対策のほうが重要&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;安全保障上の要人ではなく、またそのために賃金も限られている市民は、通説に踊らされず賢く生きていきましょうや。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-store-credit/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-store-credit/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/10/ea2c70bff34560494e11be9aad7b7321.webp" alt="制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-10-pixel-7/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 10が出たけど気にせずPixel 7で戦う&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-10-pixel-7/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_19221_1787181670.webp" alt="Pixel 10が出たけど気にせずPixel 7で戦う" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-7/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 7はゲームしないユーティリティ勢にはちょうどよかった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-7/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_13785_1787181699.webp" alt="Pixel 7はゲームしないユーティリティ勢にはちょうどよかった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>AndroidでLAN内DNS(AdGuard Home)にIPv4アドレスでアクセスする</title><link>https://hack-le.com/android-lan-agh-dns/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/android-lan-agh-dns/</guid><description>&lt;p&gt;うちのプロバイダは楽天ひかりなのだが、楽天ひかりはIPv6必須となっている。で、LAN内DNSとしてAGHを利用しているのだが、最近のOSだとIPv6が優先されてLAN内ドメインの名前解決がうまくいかない。多分ルータとAGHでそれぞれIPv6の設定をきちんとやればうまくいくのだろうけれど1ミリもやる気が起きない。&lt;/p&gt;&#10;&lt;p&gt;なのでクライアント側でWi-fiネットワークの設定からIPv6を切っているのだが、PCはそれでよくてもスマホで詰まった。IPv6切れない。どうしてそういうことするの…。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;ルータ: TP-Link AX5400&lt;/li&gt;&#10;&lt;li&gt;サーバ: Linux Mint Xfce 22.3&#10;&lt;ul&gt;&#10;&lt;li&gt;DNS: AdGuard Home(AGH)&lt;/li&gt;&#10;&lt;li&gt;リバースプロキシ: Caddy&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Android 15 (Pixel 7)&#10;&lt;ul&gt;&#10;&lt;li&gt;RethinkDNS&lt;/li&gt;&#10;&lt;li&gt;MacroDroid&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;やりたいことは、Android側でDNSをIPv4でAGH入れたサーバに向ける。&lt;/p&gt;&#10;&lt;h2 id="標準のdnsサーバ指定じゃいかんのか"&gt;標準のDNSサーバ指定じゃいかんのか？&#10;&lt;/h2&gt;&lt;p&gt;Androidには一応静的IPでDNSサーバを指定する機能もある。一見これでおしまいに見えるが、実際には&lt;strong&gt;IPv4のサーバアドレスしか指定できないうえに、IPv6は切れないし、IPv6で名前解決失敗したらIPv4で試すとかするわけでもない、中途半端な無能&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;なので標準の機能では無理。&lt;/p&gt;&#10;&lt;h2 id="rethinkdnsで強制する"&gt;RethinkDNSで強制する&#10;&lt;/h2&gt;&lt;p&gt;RethinkDNSをダウンロード＆インストールする。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;タブバーから「構成」を選択&lt;/li&gt;&#10;&lt;li&gt;「DNS」を選択&lt;/li&gt;&#10;&lt;li&gt;「その他のDNS」&lt;/li&gt;&#10;&lt;li&gt;「DNS 53」&lt;/li&gt;&#10;&lt;li&gt;＋ボタンで追加してチェックを入れる&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;IPアドレスとポート番号だけ記述。ポートは普通は53&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="6"&gt;&#10;&lt;li&gt;最初の画面に戻って「開始」&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;これでLAN内ドメインの名前解決できるか試す。いけたらOK。&lt;/p&gt;&#10;&lt;h2 id="macrodroidでネットワークを検知してonoff"&gt;MacroDroidでネットワークを検知してOn/Off&#10;&lt;/h2&gt;&lt;p&gt;これだけだとネットワークから離脱したり入ったりするたびにRethinkDNS起動してOn/Offしないといけないめんどくさい。&lt;/p&gt;&#10;&lt;p&gt;なのでマクロアプリを入れて自動化。ここではMacroDroidをインストール＆ダウンロード&lt;/p&gt;&#10;&lt;p&gt;まず開始のトリガを作る。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;+でマクロの追加&lt;/li&gt;&#10;&lt;li&gt;トリガー&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;+を長押し&lt;/li&gt;&#10;&lt;li&gt;「Wi-fi状態の変化」&lt;/li&gt;&#10;&lt;li&gt;「ネットワークに接続時」より指定&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;アクション&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;「アプリ」「アプリを起動」より「RethinkDNS」を選択&lt;/li&gt;&#10;&lt;li&gt;「待機」で検索「1秒」&lt;/li&gt;&#10;&lt;li&gt;「機器の操作や動作」「UI画面操作」より「クリック」で「テキスト」の「開始」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これでネットワークに参加したとき、自動で開始したらOK。&lt;/p&gt;&#10;&lt;p&gt;同様に停止のマクロも作成。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;+でマクロの追加&lt;/li&gt;&#10;&lt;li&gt;トリガー&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;+を長押し&lt;/li&gt;&#10;&lt;li&gt;「Wi-fi状態の変化」&lt;/li&gt;&#10;&lt;li&gt;「ネットワークに切断時」より指定&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;アクション&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;「アプリ」「アプリを起動」より「RethinkDNS」を選択&lt;/li&gt;&#10;&lt;li&gt;「待機」で検索「1秒」&lt;/li&gt;&#10;&lt;li&gt;「機器の操作や動作」「UI画面操作」より「クリック」で「テキスト」の「停止」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ネットワークから離脱したときに自動で停止したらOK。&lt;/p&gt;&#10;&lt;h2 id="なにもかも違ってますか"&gt;なにもかも違ってますか&#10;&lt;/h2&gt;&lt;p&gt;なにか間違っているような気がして仕方ないが、とりあえずこれで運用している。起動しながら移動していれば問題ないのだが、画面OFFにしたまま移動すると動いてない感じ。まぁでも他にやりようもなく。自分は割と外に出るときはスマホいじりながら出るので…。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;</description></item><item><title>Linux Mint Xfce 22.3 でIPv6を切る</title><link>https://hack-le.com/linux-mint-xfce-22-3-ipv6-disabled/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linux-mint-xfce-22-3-ipv6-disabled/</guid><description>&lt;p&gt;操作メモ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Linux Mint Xfce 22.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;LAN内通信でIPv6を有効にしたくないのでクライアント端末で切りたい。&lt;/p&gt;&#10;&lt;p&gt;個別の理由としては、AdGuardHomeを使っていて、IPv6の設定するのがつらい。外との通信はルータ経由でIPv6を使うのでルータレベルで無効にしたくない。&lt;/p&gt;&#10;&lt;h2 id="操作"&gt;操作&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;タスクバー右下のWi-fiアイコンを右クリックし「接続を編集する」&lt;/li&gt;&#10;&lt;li&gt;操作したいWi-fiのSSIDを選択し、設定アイコンをクリック&lt;/li&gt;&#10;&lt;li&gt;IPv6設定タブをクリック&lt;/li&gt;&#10;&lt;li&gt;メソッドを「無視する」に変更する&lt;/li&gt;&#10;&lt;li&gt;保存して再接続する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/08/d518342b456c71edd4420817531de0cb.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;メソッドには「無効」もある。違いと使い分けはAI曰く以下。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;無視（ignore）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;無効（disabled）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;動作&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPv6アドレスの割り当て処理をスキップ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPv6機能そのものを完全停止&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ローカル通信&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;維持される（&lt;code&gt;fe80::&lt;/code&gt;などが残る）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;完全に遮断される&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;システム影響&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;互換性トラブルが起きにくい&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;一部アプリや機器接続に影響が出ることがある&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;無視で問題なければそのほうが多分安全。&lt;/p&gt;&#10;&lt;p&gt;2026-08-22: その後うまく接続できないことがあり、結局IPv6そのものを停止ました（無視しました）。。。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;</description></item><item><title>AI革命でiPhoneが高くなる</title><link>https://hack-le.com/ai-iphone/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-iphone/</guid><description>&lt;p&gt;Mac/iPadに続いてやっぱりきたか…というお気持ち。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/mobile/articles/2607/18/news015.html" target="_blank" rel="noopener"&#10; &gt;iPhoneやApple Watch一斉値上げ 17無印は14万2800円に、17eは10万円超え 加速する中古スマホ特需 - ITmedia Mobile&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;今回のは直接的には円安の影響なのはそう。今まで既にもうiPhoneは日本が一番安いって言われていたからね。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://shopping.yahoo.co.jp/promotion/coupon/everydayitems/?sc_e=shp_crm_banner_CRMPLUS-E-2026-048319" target="_blank" rel="noopener"&#10; &gt;iPhone一斉値上げ、じつは日本だけ？ 原因は円安の調整で、メモリ高騰による本体値上げはこれから #エキスパートトピ（篠原修司） - エキスパート - Yahoo!ニュース&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.nikkei.com/article/DGXZQOGR14BTS0U6A710C2000000/?n_cid=SNSTW001&amp;amp;n_tw=1784057842" target="_blank" rel="noopener"&#10; &gt;東京の月収世界39位、iPhoneは最安 円下落で物価の割安感加速 - 日本経済新聞&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;まぁでも記事にもあるが今後本国でも値上げは不可避。これはプロローグだと言うわけだよ。&lt;/p&gt;&#10;&lt;h2 id="iphoneは買わんでもいいけどipadは困る"&gt;iPhoneは買わんでもいいけどiPadは困る&#10;&lt;/h2&gt;&lt;p&gt;といっても既にいくつもの製品で値上げの嵐の中にいるガジェオタはだいたい覚悟していたのかなと思う。僕も昨年末のメモリ暴騰を受けて、特にいらなかったPOCO F7をサブスマホでGetしていた。iPhoneはもう使うことはないかもしれない。このままいくと最後のiPhoneがSE2になりそう。自分は元々スマホになんのこだわりもないので、これからずっと中華スマホかな…。&lt;/p&gt;&#10;&lt;p&gt;でもiPadはほしい。&lt;strong&gt;iPhoneはどうでもいいけれどiPadが高くなるのは困る&lt;/strong&gt;。しかし両者は一蓮托生、片方があがれば片方もあがる…というより真っ先にiPadが上がる🥺&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;タブレットについてはLenovoのYoga Tab Plusを以前買ったのだけれども、それでもなおスペック的に圧倒的に劣るiPad Pro 2018 64GBモデルをまだ使い続けているという事実&lt;/strong&gt;。画面が綺麗なのと、ブラウザの挙動一つとっても、なにかこう、いちいち気が利いているんだよな。&lt;/p&gt;&#10;&lt;p&gt;この微妙な表現の難しい使い勝手の良さ自体は多分Androidに対するiPhoneでもなおいえる。一方、僕がAndroidスマホを使うのは、価格もあるんだけれど（一番大きいけれど）機能の問題もある。&lt;/p&gt;&#10;&lt;p&gt;Androidのほうが他社もそれなりに連携しやすいとあって、Androidのほうがサービス連携が簡単、ないしAndroidしか対応しないということや、また一部の硬派なアプリケーションはAndroidしかないなどもあり、ユーティリティの豊富さの観点でAndroidに長がある。とはいえ中華スマホの価格帯にiPhoneあったらそっちを選ぶけどね(´・ω・｀)&lt;/p&gt;&#10;&lt;p&gt;タブレットの場合は、あまりサービス連携みたいなのがなく、Appleのエコシステムまたはブラウザで完結するのでソフトウェアの言いしれない使いやすさの恩恵を受けやすく、HWにおいてもタブレットでは既にスペック的には飽和している。また恐らくはOSとHWの開発が同じことである最適化されているためか、Android端末よりスペックが劣っていても実際の体感はiOSのほうが良いことはしばしば。&lt;/p&gt;&#10;&lt;p&gt;なにより&lt;strong&gt;古いiPadでも画像は美麗なのであって、総合的にビューアとしての端末はなおiPad最強伝説が自分の中にある&lt;/strong&gt;。なのでもし今持っているiPad Pro 2018がいよいよお亡くなりになっても（2026年になお頑張っている！！）、これは中古でも整備済みでもiPadの後継を探してしまう気がする。&lt;/p&gt;&#10;&lt;p&gt;僕はiPhoneについてはそもそもあんまり話題にしないし、Macについてはジョブズ亡き後悪くなったと腐してばかりなのだが、iPadについては多分ほとんど悪口も言ってないんじゃないかな。iPadは本当に初代から滅茶苦茶楽しみだったし今に至るまで喜びが続いている数少ないデバイスとなっている。&lt;/p&gt;&#10;&lt;h2 id="siri-aiなんか期待しているのは投資家だけ"&gt;Siri AIなんか期待しているのは投資家だけ&#10;&lt;/h2&gt;&lt;p&gt;僕はMacBook Air 2010以来のAppleユーザではあるが、何かとApple製品を腐しながらもなんだかんだ使っているが、それは単に製品として良いからなのであって、悪いとなれば使わない。実際iPhoneはもう使っていない。ラップトップもLinuxにした。サーバも結局Linux。&lt;/p&gt;&#10;&lt;p&gt;一方でメインデスクトップがM2 Pro Mac miniで、タブレットで毎日長く使っているのは新しいLenovoやXiaomiではなく古いiPad Proだったりする。そして前述したように、iPad Proがいかれたら次も探しそうだし、デスクトップMacも…そっちは価格次第かな。いやでも探してしまう気がする…。&lt;/p&gt;&#10;&lt;p&gt;まぁつまり、&lt;strong&gt;よければ使うし今後も使うわけだが、その理由は決してAIではない&lt;/strong&gt;。AIが目当てでMacやiPad/iPhone買ってる人なんて知らない。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;AIで株価が上がるのは投資家が勝手に何かの物語を作ってそれに適合するから&lt;/strong&gt;で、現実のユーザにとっては使わないAIよりも確実に支払う値札のほうが重要だ。さすがに投資家もそれはわかっているのか、いざMacが値上がりすると株価を下げるんだから、勝手なものだよ。でも値上がりの原因はAIが需要を逼迫させているからだ。&lt;/p&gt;&#10;&lt;h2 id="リソースは有限"&gt;リソースは有限&#10;&lt;/h2&gt;&lt;p&gt;まずIT革命以降の勘違いをここで正さないといけないのは、&lt;strong&gt;AIは維持費用だけで破滅できる重厚長大産業だということ&lt;/strong&gt;だ。だからユーザを増やせば儲かるサブスク最高みたいな2010年代に確立したクソモデルはもう通用しない。プログラマであれば、綺羅びやかな高性能モデル発表とは別に、&lt;strong&gt;以前と同じ価格で同じ事ができない&lt;/strong&gt;ことも痛感しているはずだし、価格面については今後も正直悲観的な人が多いのではないか。&lt;/p&gt;&#10;&lt;p&gt;なぜ安くならないのか。それは単純に、&lt;strong&gt;リソースが有限&lt;/strong&gt;だからだ。このリソースとは、人の時間、資源、土地、モノといった実体だ。AIが使うリソースを減らさない、それどころか増やす以上、そのリソースの価格は転嫁される。&lt;/p&gt;&#10;&lt;p&gt;そして&lt;strong&gt;リソースが有限であるという事実により、AIがリソースを食うと単純な算数の結果としてほか産業のリソースが減る&lt;/strong&gt;。その減った結果がPCメモリの高騰であり、昨年末くらいからDELLをはじめPCメーカが急にAIに対してトーンダウンした背景でもある。&lt;/p&gt;&#10;&lt;p&gt;まぁ考えてみれば当たり前なのだが、その当たり前が2010年代までは当たり前ではなかった。ムーアの法則による劇的なハードウェアの性能アップ、光ファイバによる通信の超低損失、そして純粋に資源を掘って届けることができていた。グローバル化によって人も徹底的に安くなった。&lt;/p&gt;&#10;&lt;p&gt;2020年代、AI時代になってすべてが反転している。ムーアの法則は終わり、もうソフトウェアのリッチ化をカバーできていない。地政学上リスクが顕在化して原油の総供給が減る。ただでさえ効率の悪くなっていたのに。たとえ代替手段に乗り換えても、それは効率の低下を意味しており、&lt;strong&gt;社会全体が使えるリソースは低下する可能性が高い&lt;/strong&gt;。先進諸国では人間の数が減り続け、とある宗派ばかりが増えていく。&lt;/p&gt;&#10;&lt;p&gt;そして、&lt;strong&gt;低下したリソースをさらにAIが食い潰す&lt;/strong&gt;。GDPだけが増えて成長と呼ばれるが、それは単に引換券の数を増やした似すぎない。しかもそのリソースがAIとその関係者に集中するため、周辺は吸われていく。国レベルでいえば覇権引換券ことドルを得るために、衛星国は自らのリソースを差し出すことになる。しかし衛星国のリソースを吸ったアメリカも、結局AIに配分するに過ぎず、AIとMAGAの狭間でトランプがニッコリする。&lt;/p&gt;&#10;&lt;p&gt;現状こんな感じで、この調子だとこの先とてもしんどい未来になりそうなので、まぁ僕はいらないけど、高くてもiPhoneほしかったら買える間に買ったほうがいいかもね。&lt;/p&gt;&#10;&lt;p&gt;それにしても、&lt;strong&gt;ジョブズだったらば、AI搭載したiPhoneをAppleの窓からぶん投げてくれたんじゃないのかなぁ&lt;/strong&gt;と、まぁ妄想したところで詮無いことではあるけれど…。今世界にいるのは、経営者の奴隷と、市場の奴隷だけだ。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ipad-pro-12-9-3-2018-2025/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;7年前のプロiPad Pro 12.9インチ第3世代(2018)は2025年でも最前線で戦えるのか？&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ipad-pro-12-9-3-2018-2025/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/04/9c468a59719c96d5e091da0ec18adab2.webp" alt="7年前のプロiPad Pro 12.9インチ第3世代(2018)は2025年でも最前線で戦えるのか？" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/12-7-lenovo-yoga-tab-plus/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;12.7インチ大型AndroidタブレットLenovo Yoga Tab PlusのProductivity Modeで送る最高の非生産ソシャゲライフ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/12-7-lenovo-yoga-tab-plus/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/04/zakki-image-5.webp" alt="12.7インチ大型AndroidタブレットLenovo Yoga Tab PlusのProductivity Modeで送る最高の非生産ソシャゲライフ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-ai/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac突然の値上げ、AIがPCを奪う&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-ai/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/eyecatch_50230_1782461044.webp" alt="Mac突然の値上げ、AIがPCを奪う" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Pixel 7 + 楽天モバイルでイーサネットテザリング生活：PD充電対応USB to LANアダプタ使いましょう</title><link>https://hack-le.com/pixel-7-mobile-ai/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/pixel-7-mobile-ai/</guid><description>&lt;p&gt;懺悔します。私が間違えていました。&lt;/p&gt;&#10;&lt;p&gt;先日、以下の記事を書きました。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/rakuten-mobile-pixel-7-eth/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;実録：楽天モバイル &amp;#43; Pixel 7からイーサネットテザリングでルータに繋げて家のネット回線にする&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/rakuten-mobile-pixel-7-eth/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/original_50265_1782755101_16x9.webp" alt="実録：楽天モバイル &amp;#43; Pixel 7からイーサネットテザリングでルータに繋げて家のネット回線にする" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事で、Pixel 7からUSB経由でLAN接続してイーサネットテザリングしているのですが、この時充電は家にあったAnkerのQi充電器を利用しました。別にそれでも問題なくできたので、AIが「それは熱がー、USB PD対応のアダプタ使うべき！」と言っていたのを、うるせぇクソ雑魚これだからAIは…などと腐していました。&lt;/p&gt;&#10;&lt;p&gt;しかし、利用しているとやはりどうにも安定しません。一番よくあるのは、バッテリー保護機能が働いて、バッテリーが死ぬまで充電をしなくなることです。バッテリーがしんでしばらくすると再び充電を開始します。&lt;strong&gt;多分これはAIの言う通り熱によるものと思われます&lt;/strong&gt;…。&lt;/p&gt;&#10;&lt;p&gt;熱自体はまぁ考えてみればそれはそうです。有線充電の場合は電源アダプタでAD→DCをしているので、損失分の発熱はアダプタが引き受けます。しかし&lt;strong&gt;Qi充電の場合はどうしてもスマホ内で受電してDCにせざるを得ず、損失分の発熱をスマホが引き受けます&lt;/strong&gt;。なので、Qi充電は構造的に熱問題が生じやすい。&lt;/p&gt;&#10;&lt;p&gt;それは定性的にわかっていたのですけれど、バッテリー保護が生じるまでいくんだなー😓&lt;/p&gt;&#10;&lt;p&gt;ということで、結局&lt;strong&gt;PD充電対応したUSB to LANアダプタを購入&lt;/strong&gt;したんです。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/dp/B0FQN8N2F1?language=ja_JP&amp;amp;linkCode=ll1&amp;amp;ref_=as_li_ss_tl&amp;amp;tag=hackle12-22" target="_blank" rel="noopener"&#10; &gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://m.media-amazon.com/images/I/61MwgKni39L._AC_.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/dp/B0FQN8N2F1?language=ja_JP&amp;amp;linkCode=ll1&amp;amp;ref_=as_li_ss_tl&amp;amp;tag=hackle12-22" target="_blank" rel="noopener"&#10; &gt;Type-C to LAN 【6ヶ月間保証付き】 USB 変換 高速 ギガビットイーサネット ドライバ不要 直接接続 アダプターゴールド タイプC PD充電対応 最大100w 1Gbps対応 小型軽量 RoHS準拠パソコン&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/dp/B0FQN8N2F1?language=ja_JP&amp;amp;linkCode=ll1&amp;amp;ref_=as_li_ss_tl&amp;amp;tag=hackle12-22" target="_blank" rel="noopener"&#10; &gt;Amazonで見る&lt;/a&gt;&lt;a class="link" href="https://hb.afl.rakuten.co.jp/ichiba/55b8efbb.638cf225.55b8efbc.b480989b/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fdps-ar%2Flcz004-01-06%2F&amp;amp;link_type=hybrid_url&amp;amp;ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9" target="_blank" rel="noopener"&#10; &gt;楽天市場で見る&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;※Amazonアソシエイト・楽天アフィリエイトリンクを使用しています&lt;/p&gt;&#10;&lt;p&gt;Amazonのレビューでは相性問題が言われてますが、まぁうちにはケーブルしぬほどあるので大丈夫でしょうということでGo。&lt;/p&gt;&#10;&lt;p&gt;そんで届いて取り付けてみたら、&lt;strong&gt;安定感がレベチ&lt;/strong&gt;。今まで半日に一回くらいあった断絶ですが、&lt;strong&gt;引きこもって一日中放置しても問題なくなりました&lt;/strong&gt;。さらに、&lt;strong&gt;通信速度も上がりました&lt;/strong&gt;。今まで最大5Mbpsくらいだったのが、よいときは15Mbpsくらいに。これはQi充電がどうこうというより、使っていたアダプタの問題もあるような気がします。。。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;AIが完全に正しかったです。生意気言ってすみませんでした&lt;/strong&gt;🥺&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/nuro-cancel/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;nuro光に申し込んだがキャンセルし、無事ネット難民になった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/nuro-cancel/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/eyecatch_50212_1782374138.webp" alt="nuro光に申し込んだがキャンセルし、無事ネット難民になった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ailaundering/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIを疑うが、AIを使う自分は信じる認知のロンダリング&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ailaundering/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/eyecatch_50201_1782374168.webp" alt="AIを疑うが、AIを使う自分は信じる認知のロンダリング" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>メールずっと使ってると、メールクライアントに苦労する</title><link>https://hack-le.com/mail-client/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/mail-client/</guid><description>&lt;p&gt;僕の一番古いメールアドレスはYahooのやつで、多分25年以上前に作ったと思われる。当然その後Googleアカウントを取得し、さらに取得し、また独自ドメインでもメールアドレスをつくり、なんだか色々していると、数万のメールが受信箱にたまっているアカウントが複数あるような状態になる。しかもそのメールは歴代の様々なその時々のトレンドを反映したものだ。&lt;/p&gt;&#10;&lt;p&gt;で、こういう状態になると、現代のメールクライアントはなんだかどれも悲鳴をあげるのかなんなのか、とにかくなんだか使えなくなる。それで、多分似たような状況にあると思われる、以下のRedditのスレッドを共感しながら読んでいた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.reddit.com/r/selfhosted/comments/weua6a/whats_the_best_selfhosted_webmail_client/?tl=ja" target="_blank" rel="noopener"&#10; &gt;セルフホスト型のウェブメールクライアントで一番おすすめってどれ？ : r/selfhosted&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;もうデスクトップのメールアプリは、完全に見切りつけて立ち去るところ。どのプラットフォームでも「ほぼ最上位」クラスのやつって、Gmailの容量（量が多いこと）にはどうしても耐えられないか、複数サーバーで詰まったりするんだよね。それか、メールの送受信しようとしてる間に何週間も休暇に入っちゃったりさ。で、その間にディスク容量とRAMを食いまくる。さらにデュアルブートしたり、複数マシン持ったりして同期するのも楽しそうに見えて、結局めんどい。デスクトップのメールアプリって、ずっとオン/オフでチャンスは与えてきたけど……いや、もうさすがに…ほぼ20年近く。そろそろ終わりにしようと思ってる。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;わかりみが深い。&lt;/p&gt;&#10;&lt;p&gt;僕の場合だと、たとえばThunderbirdなんかはまずそもそも固まる。同期すらできない有様。Macのメール.appは、これはいつ頃からか検索が機能しなくなった。インデックスの再構築とかそんなもん全部やっているが完全に無駄。というかMac系のメールクライアントで検索うまくいった試しがないんよな。&lt;/p&gt;&#10;&lt;p&gt;一番機能的にうまくいくのは、ブラウザであるVivaldiが内蔵するメーラだった。しかしながら、これは安定性に難があり、すぐに同期が止まる。これはPCの再起動やブラウザのアップデートなどでまた突然動き出す。メーラとしては使い物にならないが、検索がうまくいくので、検索のためだけに使っている。&lt;/p&gt;&#10;&lt;p&gt;結論として、僕のメール環境は送受信はMacのメール.appを基本にしつつ、検索はVivaldiの内蔵メーラを使っている、というなんだかよくわからない形になっている。&lt;/p&gt;&#10;&lt;p&gt;まぁ受信するメールの99.9%くらいはゴミなので、このゴミを一掃できれば多分問題なくなるのだけれど、このゴミの一掃が案外難しい。定期的にやろうとするが、あまりうまくいっていない。このゴミの一掃が本来的な課題の気はする。AIにはメール書かなくていいから過去の数十万件のメールとこれからのメールを完全に問題なく処理してほしい。と思ったがではAIの判断を信じられるかというと信じられないので、まぁダメかも。&lt;/p&gt;&#10;&lt;p&gt;最近はもうメールクライアント全体について諦めている。それで、今考えているのは、過去分のメールについてはアーカイブして、検索できるようにしだけしておき、受信箱は常に軽くすればよいのではないか、というアプローチになる。これについてはMail-Archiverというものが開発されているようだった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gigazine.net/news/20251230-mail-archiver/" target="_blank" rel="noopener"&#10; &gt;無料でGmailなどのメールをアーカイブして保存後に自動削除して空き容量を増やすことができる「Mail-Archiver」 - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;折を見て試してみたいと思う。&lt;/p&gt;&#10;</description></item><item><title>そういえばMacを使って15年以上経過している</title><link>https://hack-le.com/mac15years/</link><pubDate>Sat, 11 Jul 2026 09:31:24 +0900</pubDate><guid>https://hack-le.com/mac15years/</guid><description>&lt;p&gt;僕のメインPCはなんだかんだいってM2 Pro Mac miniで未だにMacなのだけれど、なんでずっとMac使っているんだろう、としばしば思う。初めてのMacがMacBookAir 2010なので、もうかれこれ16年Mac使っていることになるのだが、正直別にMacでないといけないと思っているわけではない。&lt;/p&gt;&#10;&lt;p&gt;先日のMacの値上げもあるが、とにかく今のMacは高騰化しており、これを今後も使い続けるのがいいのかどうか、よく思う。というか、何度か脱Macをはかったこともある。まぁ、結局今のところMacユーザであり続けているのだけれど…。&lt;/p&gt;&#10;&lt;p&gt;外形的にはまずMagicTrackpadがあげられる。トラックパッドの体験を超えるものが未だにない。Windows/Linuxにおいてどこぞの似たようなものを使っても、体験としてまったく追いつかない。正直、Windows/Linuxならトラックボールを使ったほうがよいと思う。&lt;/p&gt;&#10;&lt;p&gt;まぁトラックパッドも、標準では使いづらくて、Bettertouchtoolがあるからこそ便利なのだが…。&lt;/p&gt;&#10;&lt;p&gt;あとは地味にEmacsキーバインドが標準で使えることの便利さがある。Windowsでも有志の努力によって似たような挙動はできるのだけれど、しかし標準でサポートされている安定性にはかなわない。&lt;/p&gt;&#10;&lt;p&gt;といっても、こちらもKarabinerがあるから使いやすいのであって、これがなければ微妙だなと思う。&lt;/p&gt;&#10;&lt;p&gt;あとはよく言われるように一応UNIXであることか。お陰様で割とカジュアルに色々なソフトウェアを入れられるし、開発もできる。とはいえこのへんは本来的にはLinuxのほうがよい。&lt;/p&gt;&#10;&lt;p&gt;あとはまー、たいていのソフトウェアについては最近はMac用はだいたいある、なんならMac用しかない、というのも地味に良いか。&lt;/p&gt;&#10;&lt;p&gt;基盤となる機能のうえに、Windowsほどではないが有志による無料ないし少額のソフトウェアがある程度充実していることが大きいね。AirDropとかiMessageとかFacetimeとかはクソどうでもいいけど。Mac標準機能で良かったのは最近だとユニバーサルコントロールくらいだな…。従来のアプリならプレビュー.appは標準アプリ界の中でも名作。FinderはMSのスパイがAppleの評判を落とすために作った。&lt;/p&gt;&#10;&lt;p&gt;こうして思い返すと、なんだか大昔（13年前）にMacを使う理由について書いたときと全然変わらなくて笑った。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/32323358-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;MacのメリットはトラックパッドとUnix&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/32323358-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2573_1789396057.webp" alt="MacのメリットはトラックパッドとUnix" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;あとハードウェア面の話をするならば、&lt;strong&gt;スペックを考えると静音性と省エネルギーなのは確か&lt;/strong&gt;だよなと思う。ただこれはラップトップはともかくデスクトップPCだと微妙かもしれない。ってかどうせハードディスク積んだガチャベイやらRTX4070積んだStable Diffusionサーバやらがグオングオン言っている環境で省エネだの静音性だの言っても仕方ない。あと爆熱。俺、いつかMac miniで目玉焼き焼くんだ…。まぁそれでも結局壊れずに歴代Mac miniも何年も持ってるんだよな。&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;ここであげたことをゴチャゴチャというより、使っている時、なんとなし使いやすいと感じる、という面が大きい&lt;/strong&gt;。なんだろうね。文字が綺麗だから？地味にあるかも。ぬるっと動く感じが心地よいのだろうか？どうなんだろう。&lt;/p&gt;&#10;&lt;p&gt;慣れの問題と思われるかもしれないが、自分は15年くらい複数OSをずっと扱っており、現在のノートPCはWindowsとLinuxがメインであって、もはやMacは使っていない中で、それでもやはり&lt;strong&gt;Macは何か肌になじむような感覚がある&lt;/strong&gt;、と思う。この感覚は名状しがたい。&lt;/p&gt;&#10;&lt;p&gt;個人的にはMacはLion以降ずっと間違え続けていると思うし、AppleSiliconは衝撃だったものの今やその優位性も限定的だと思う。そして高くなりすぎている。だからMacを人に勧める気は全然ないし、&lt;strong&gt;常にもうMacやめたいと思っている&lt;/strong&gt;。特に最近の開発者（特にWebを中心としたIT系）はMacでしょみたいな風潮見ると逆張り気質なので本当にやめたくなる。&lt;/p&gt;&#10;&lt;p&gt;だが今のところ僕のメインPCは結局Macなのだし、また少なくともこのマシンが生きている限りは使い続けるだろうとも思うし、&lt;strong&gt;なんならイカれてもブツクサいいながらまたMac買う気もする&lt;/strong&gt;。その時になってみないとわからないけど。&lt;/p&gt;&#10;&lt;p&gt;まぁ自分で言うのもなんだが、僕がMacを使い続けている間は、世間一般的なイメージとは裏腹に、なおMacは泥臭く良いところがあり続けているんじゃなかろうか。その判定は、結局のところ使い続けているかどうかという自分の行動に現れるように思う。そこは自分の感性を信じられている。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m2-pro-mac-mini-1-5/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac mini を購入して1年5か月経過：静かに革命&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m2-pro-mac-mini-1-5/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/04/zakki-image-2.webp" alt="M2 Pro Mac mini を購入して1年5か月経過：静かに革命" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/macbook-neo-review/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;MacBook Neoは実用に即して削ぎ落されている&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/macbook-neo-review/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/03/eyecatch_48574_1773331941.webp" alt="MacBook Neoは実用に即して削ぎ落されている" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>実録：楽天モバイル + Pixel 7からイーサネットテザリングでルータに繋げて家のネット回線にする</title><link>https://hack-le.com/rakuten-mobile-pixel-7-eth/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/rakuten-mobile-pixel-7-eth/</guid><description>&lt;p&gt;引っ越しで光回線関係について無知故に、ネット回線難民になってしまった。光回線になるまで一ヶ月かかる見込みだ。これについては先日だいぶ愚痴った。機械音声で永遠に有人に繋げなかったNuro光許さない。楽天ひかりは電話は繋がるけれど工事が一ヶ月以上先になってしまったよ。最初から楽天ひかりにしておけば…。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/nuro-cancel/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;nuro光に申し込んだがキャンセルし、無事ネット難民になった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/nuro-cancel/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/eyecatch_50212_1782374138.webp" alt="nuro光に申し込んだがキャンセルし、無事ネット難民になった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;まぁ愚痴っていても仕方ない。とにかくネットに繋げないと話にならない。これについては、無制限に使えるのがウリの楽天モバイルを契約しているので、ついに全力を出させるときがきた、という感じだ。&lt;/p&gt;&#10;&lt;p&gt;素直にやるとWi-fiテザリングになる。普通の人はこれでよいだろう。しかし僕の場合は、LAN内で稼働させているセルフホストのアプリケーションが多い。なので、あくまでもルータを使う必要がある。ルータから見てPixel 7をWAN側においてやりたいわけだ。そんなことできるんだろうか。&lt;/p&gt;&#10;&lt;p&gt;ちょっと不安だったが、テザリングの項目の中に「イーサネットテザリング」なるものがあり、これを使うことで、有線でPixel 7とルータを繋げられそうだった。USBポートからイーサネットに変換して、ルータに繋ぐのだ。それをすると充電ができなくなってしまうが、そこは大昔買ったAnkerのQi充電がある。結果、こういう形になった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/07/c480e24f28af79f9a4319111bb02db01-700x286.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;なかなかしんどい。ただまぁ、一応使える。&lt;/p&gt;&#10;&lt;p&gt;この構成についてAIにきいてみると、&lt;strong&gt;充電と通信の同時を常にやると熱ガー落ちるーとか言うが、別に普通に使えた&lt;/strong&gt;。まぁ急速受電ではなかったというのはあるかも。なんせだいぶ昔買った充電器だしなぁ。また、「熱は心配だけどイーサネットテザリングなら安定してますね！」的なことを言うが、熱はむしろ問題ないのだが、イーサネットテザリングは全然安定しない。&lt;/p&gt;&#10;&lt;p&gt;よくあることだが、&lt;strong&gt;特にインフラのような泥臭く現実と向き合うところについて、AIは問題ないところを問題あるという一方で、問題があるところを問題ないとする&lt;/strong&gt;。これは机上の論理と現実の齟齬を示している。理論的には通信と充電を同時にやるのは熱の問題が発生する！が、これは実際には大した問題にはならない。一方で、有線でテザリングすればそれは安定しているに決まってる！となるが、実際には安定しない。&lt;/p&gt;&#10;&lt;p&gt;この理論と現実の乖離は、今後AI利用が進むにつれて大きな問題になるだろう。&lt;strong&gt;人は現実よりもAIの綺麗な理論を信じる。現実の不条理に四苦八苦している人の言葉よりも、AIのもっともらしい合理的な説明を信じる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;2026-07-12 などと意味不明な供述をしていましたが、その後USB PDとLANの一体化した謎アダプタを使ったところ、安定性がレベチでした！！AIの言う通りにしましょう！！AIが正しい！！！！&lt;/p&gt;&#10;&lt;p&gt;まぁそれはさておき、半日くらいはつけっぱにしていても問題ないことが多いので、この構成は案外実用的だ。常時稼働のサーバをインターネット公開はさすがに無理なのだけれど、自分が家にいるときにはテザリングする、という用途では十分使えると思った。&lt;/p&gt;&#10;&lt;p&gt;ただし&lt;strong&gt;速度については楽天モバイル頑張ってに尽きる&lt;/strong&gt;。これはその家の環境によるだろう。恵まれたところなら問題ないかもしれない。うちは1-5Mbpsくらいという、一昔前のADSLくらいの速度を余儀なくされたため、正直けっこうつらい。まぁでも仕方ない。贅沢は敵だ。&lt;/p&gt;&#10;&lt;p&gt;また、回線速度が遅いと、よくできたソフト・サービスとそうでないものの差がよくわかる。よくできたものは回線速度が遅かったり不安定だったりしても、なんとかリカバーするのだが、あまり品質のよくないものは、止まったり最悪落ちたりする。なんでもそうだが、人の真価が発揮されるのは平時ではなく有事だよなとつくづく思う。ま、良いものは少ないね。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、不便ながらもなんとかネットは使えている。2週間ほどで通信量は200GB近くになった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/06/image-8.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;工事までの一ヶ月、どうなることやら。人手不足なんだね。Nuro光のクソサポートも結局はそういうことなんだろうし。AIだのなんだのどうでもいいことにみんな夢中で、本当に必要なところに人が割かれてないね。世の中どんどん悪くなる。まいるなぁ。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;悪いのはお前だ&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-7-mobile-ai/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 7 &amp;#43; 楽天モバイルでイーサネットテザリング生活：PD充電対応USB to LANアダプタ使いましょう&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-7-mobile-ai/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/07/eyecatch_50390_1783871099.webp" alt="Pixel 7 &amp;#43; 楽天モバイルでイーサネットテザリング生活：PD充電対応USB to LANアダプタ使いましょう" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Mac突然の値上げ、AIがPCを奪う</title><link>https://hack-le.com/mac-ai/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/mac-ai/</guid><description>&lt;p&gt;ついに来たか、という気持ちはないでもないが、値上げ幅が想定より大きくさすがにうぇってなった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/news/articles/2606/25/news138.html" target="_blank" rel="noopener"&#10; &gt;「Mac」「iPad」突然の一斉値上げ MacBook Airは18万4800円→22万4800円からに - ITmedia NEWS&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;MacBook Neoが整備済みにきたらポチろうかなーとか内心思っていたのだけれどこれも2万の値上げでもう世界はおしまいです&lt;/strong&gt;。真面目に今持っているMacが最後のMacになってしまうかもしれない。ただPC業界自体が燃え上がるAIブームの前に風前の灯である。むしろAppleはよく耐えたほうで、帝王Appleですら白旗あげざるを得なかったというのが実際だろう。DellやHPは秒であげてたからね…。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-spec-down/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AI革命で一般ユーザのPCがスペックダウンする謎の技術革新&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-spec-down/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/12/output-18.webp" alt="AI革命で一般ユーザのPCがスペックダウンする謎の技術革新" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;iPhoneはまだギリギリ粘っているようだが、これも最後かもしれないね。&lt;/p&gt;&#10;&lt;p&gt;これは断言できるけれど、&lt;strong&gt;ユーザはSiri AIよりもApple IntelligenceよりもCopilotよりも、今までの値札でよりハイスペックのPCを求めていたと思う&lt;/strong&gt;。でも実際は、今までよりも高い値札で低いスペックになりつつある。&lt;/p&gt;&#10;&lt;p&gt;これは&lt;strong&gt;AIがPCのリソースを奪っている&lt;/strong&gt;といえる。ここはかなり直接的な関係だからわかるだろう。AIに必要なメモリ需要で工場が圧迫されて、僕らが使うPCやスマホのメモリが後回しにされているわけだ。ついに8GBメモリのPCまで復活する始末。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gigazine.net/news/20260605-laptop-8gb-ram/" target="_blank" rel="noopener"&#10; &gt;ノートPCに8GBのRAMが復活、部品不足の中メーカーは手頃な価格のノートPCを提供するためにメモリ容量を削減している - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ちょっと前までAI PC！とか言ってたけど、これでどうやってAIするんだ？正解はAIしない。する必要もない。&lt;/p&gt;&#10;&lt;p&gt;そんなことはメーカもわかっていたはずだが、AIというマジックワードをつければ高いPCを売りつけられるぞ！という算段だったと思われる。まさかそのAIに必要なパーツを食われて、高い原価で低い性能のPCを売らなくてはいけなくなるハメになるとは思わなかったのだろう。まぁ、メモリの高騰は昨年末急にきたからね。&lt;/p&gt;&#10;&lt;p&gt;この構図はあちこちで見られていて、より広範で見れば、SamsungとSKハイニックスの賞与で韓国にインフレ危機、と真面目に韓国銀行が警告を出しており、これは半導体業界という一部に全体のリソースが偏り過ぎていることを示している。アメリカの刷ったドルで人的資源と物質的資源をAIにツッコミまくった結果、一国の経済すら揺るがしている。その結果生まれたものが、ホリエモンのクソ動画であったり娘に現行犯逮捕される父親であったりするのが現在なので、全体としては豊かになっていない。&lt;/p&gt;&#10;&lt;p&gt;まぁ世界のメインシナリオでは、このあとAIがシンギュラリティでAGIですべての人間を救うことになっているので、それまでの辛抱だということなのかもしれないが、それを信じるにしても当面PCの低スペック化は止められないのだろう。なにしろ当のAIプラットフォーマーもサーバ運用には四苦八苦してますしおすし。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://japan.cnet.com/article/35249117/" target="_blank" rel="noopener"&#10; &gt;「Claude」で障害発生（復旧） - CNET Japan&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;AIはなんでもできる。サーバ運用を除いて。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、基本に立ち返る機会だとも思う。リソースの制約が機能していれば、ユーザの計算資源と帯域幅を使ってなによりもまっさきに広告をダウンロードするなんて狂ったことを業界もしてこなかったのではないか。&lt;/p&gt;&#10;&lt;p&gt;資源は有限で、通信もタダではないという、当たり前のことに立ち返る時がきたんだろう。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aiblackhole/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIがすべてを吸い上げる&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aiblackhole/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/06/eyecatch_50222_1782400264.webp" alt="AIがすべてを吸い上げる" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/old-pc-linux/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;古いPCのLinux再生計画&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/old-pc-linux/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/output-17.webp" alt="古いPCのLinux再生計画" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>メインのノートPCをLinuxにしたいなぁと思いつつ</title><link>https://hack-le.com/main-pc-linux/</link><pubDate>Wed, 10 Jun 2026 00:56:07 +0900</pubDate><guid>https://hack-le.com/main-pc-linux/</guid><description>&lt;p&gt;Windows 11のうんこっぷりにキレ散らかす日々、いい加減Linuxに切り替えたい。おらもう勝手に再起動されるの嫌だ。&lt;/p&gt;&#10;&lt;p&gt;今この記事を書いているWindows PCは、5年くらい前に買ったASUSのTUF GAMING F15だ。モバイル版のRTX3060(VRAM 6GB)がのっており、消費電力もかなり高いのだが、その高い消費電力でやっていることがブログ執筆ではしょうもない。&lt;/p&gt;&#10;&lt;p&gt;と言いつつゲームもちょくちょくしているので、一応ゲーミングPCの面目躍如はある模様。が、そのためにLinuxに移行する踏ん切りがつかなかったりもする。以前デュアルブートでPop!_OS 22.04を入れていたこともあるのだけれど、あの時は所詮デュアルブート、本意気ではなかった。本気でやるならやはりWindowsごと消さねばなるまい。&lt;/p&gt;&#10;&lt;p&gt;なのだけれど、Linuxだとゲームとかやっぱりつらくなるよなぁ、と思って躊躇している。最近はSteamをはじめたいていのゲームは動くという噂なのだが、俺たちのDMM Game Playerはそうもいかなさそうである。いやまぁ、DMM Game Playerにあるようなのはたいていスマホ版がある（というかそっちが本体に近い）ので、別に動かなきゃ動かないで別にいいんだが…。&lt;/p&gt;&#10;&lt;p&gt;しかしまぁ、SteamなんかにしたってWindowsネイティブのほうがたいてい良いのではないかなぁ。と思ってAIに聞いてみたら、「古いWindows向けのゲームなんかはむしろLinuxのほうが動くこともある」らしく、一長一短であるらしい。そうなのか。しかし今更古いWindowsゲームでやりたいのがあるのか、と考えてみると特にない。&lt;/p&gt;&#10;&lt;p&gt;特にないというか、冷静に考えるとゲーム自体大してやっていないのだけれど、子供時代ゲームが大好きであの頃の楽しさを忘れられないためか、常に「ゲームを楽しくやりたいなぁ」と欲求だけが亡霊のように残っており、やりもしないゲームが積まれ続けて10年以上経過したかと思う。いやでもきっといつかまたやるから…。&lt;/p&gt;&#10;&lt;p&gt;あとは地味にLinuxでEmacsキーバインドを実現する手段が確保できていない、というのがある。Windowsではkeyhac + Fakeymacsでほぼやりたいことができるのだが、これと同等のことをLinuxでやろうとすると、どうしたらいいのかちょっとわかっていない。しかも僕はJISキーボードをUSキーボードのように使うということもしていたりするので余計に厄介である。なんだかんだで今なおWindowsではこういうかゆいところに手が届くソフトウェアが有志により開発されているのは大きい。あとはMSが滅びてくれたら完璧なんだけど。&lt;/p&gt;&#10;&lt;p&gt;それとまぁ、e-taxのようなクソアプリを使わざるを得ない状況もあるので。まぁこれは何もゲーミングPCでやる必要はないため、本当に必要ならそれ用の事務用PCを中古で用意するほうがいいかもしれない。なにもRTX3060の消費電力でやることではあるまい。いやまぁ、それをいったらブログ執筆もそうなんだけどさ…。&lt;/p&gt;&#10;&lt;p&gt;あとドライバ周りで苦労することになる可能性もあるしなぁ。開発自体はLinuxのほうがやりやすいけれど、それはメインデスクトップのMacでやればいいことではあるし。サブノートはLinuxなので、メインノートはWindowsを使うことで、一通りのOSを触り続けられるというのはあるし。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ今月はちょっと落ち着かないので、やるとしても来月かなぁ。MSが余計なことしなければWindowsでもいいんだけどなぁ。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/windows-11-init/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Windows 11で入れているアプリやキーボードの設定（Emacsキーバインド）&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/windows-11-init/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-4.webp" alt="Windows 11で入れているアプリやキーボードの設定（Emacsキーバインド）" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Dell Latitude 5290は中古PCサーバの母艦としていいかもしれないね、一方クライアントなら意外にも…</title><link>https://hack-le.com/dell-latitude-5290-l390-linux/</link><pubDate>Tue, 26 May 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/dell-latitude-5290-l390-linux/</guid><description>&lt;p&gt;うちには40台くらいジャンクPCがある。特に2018年前後を集めており、定番なのはLenovo ThinkPadとDel Latitudeあたりだ。このへんはまぁ安いといってもジャンクの中では高いのかもしれないのだが、既に送料で底打ちがあるため、バランスを取るならこのへんかなぁ、とは思う。ジャンクでバランスもなにもないが…。&lt;/p&gt;&#10;&lt;h2 id="結局linuxに似合う中古pcはなんなんだい"&gt;結局Linuxに似合う中古PCはなんなんだい&#10;&lt;/h2&gt;&lt;p&gt;個人的には、漁っているとFUJITSUのLIFEBOOKやPANASONICのLet&amp;rsquo;s Noteの古いやつなんかが、むしろ良いのではないか？という気がしている。流通量もそこそこあるし。あのへんはLenovoやDellとは異なる方向にブランドなので、必ずしも安くなっていない…なんなら骨董品レベルのものがやけに高く売られていることもある。あの時代のパーツがほしい人向けなんだろうか…しかしコンシューマのPCでそんなことあるかなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁなんでもいいのだけれど、無難にいくならThinkPadかLatitude、というのはそれはそう、という感じだ。ただ2018年より、ThinkPadの上位モデルであるX280以降はメモリソルダリングという悪に手を染めてしまっているため、それより一つ落ちるはずのL390のほうが、メモリの拡張性高い分使いやすいという逆転現象が起きている。筐体の無骨さもサーバ用途ならばむしろ悪くない。まぁ問題は、L390はThinkPadシリーズの中だとそんなに量が出回っていないということかな…。あと、LANポートがないのもいたいね。&lt;/p&gt;&#10;&lt;p&gt;そこでいくと、&lt;strong&gt;Dell Latitude 5290は攻守ともに強い感じ&lt;/strong&gt;だ。メモリも換えられるし。ま、ちょっと重いかな。Dellらしい無骨さではある。しかし前述したように&lt;strong&gt;サーバで無骨さは褒め言葉&lt;/strong&gt;よ。ただ同じ型番で2-in-1タイプもあるらしいが、そちらはオンボードという罠仕様になっている。まぁジャンク漁りをする人の中でも2-in-1を狙うのはさらに数寄者だろうから好きでやっているんだろうが…。&lt;/p&gt;&#10;&lt;p&gt;なので、僕はThinkPad L390を母艦にしているけれども、Dell Latitude 5290も実は候補に上がっていた。しかし結局L390になり、Latitude 5290は仕事で使うPCとして供養する流れだ。Core i5-8250Uと8GBという必要十分なスペックに、LANポートがあるのが決めてになったかな。LANポートがあると、それ経由でシングルボードな子機とサクッと接続できるのがよい。SSDは家にあった128GB SATA SSDだがね。m.2 2280フォームファクタのSATAがあるなんて、ジャンク漁るまで知らなかったよ…。&lt;/p&gt;&#10;&lt;p&gt;まぁThinkPadだのDellだのも当然のように裏蓋ネジなかったり画面TNでもやってたしCMOS切れてたり通信たまに切れたりバッテリー死んでたりするという点では変わらない。そこは安くどうにかできるならなんとかするし、できるけど高く付くならそういう使い方は諦めるという割り切りが必要だ。&lt;/p&gt;&#10;&lt;h2 id="クライアントならちょっと冒険してみて"&gt;クライアントならちょっと冒険してみて…&#10;&lt;/h2&gt;&lt;p&gt;さて少し目先を変えて、そんなサーバとかじゃなくて、普通に普段遣いでやりたいんだけど、という向きでは、僕の見た感じだと感触はかなり異なる。&lt;/p&gt;&#10;&lt;p&gt;ここで一番重要なのは液晶で、画面は生きててIPSフルHDとバッテリーとキーボードタッチパッドが生きていること、が条件となる。あとためらわないレベルで外観が保たえれていることとか（時々戦争に持っていったの？みたいな可愛そうな筐体がある…）。ここがクリアしていればあとはまぁなんとか。&lt;/p&gt;&#10;&lt;p&gt;まぁあるにはあるんだけど、普通に1万超えてくるよねこんなの。高いよ。ジャンクでも2万くらいはある。まともな中古店なら2万後半から3万しててもおかしくない。これからもっと高くなるかもな。&lt;/p&gt;&#10;&lt;p&gt;…なんですけど、PANASONICとかLIFEBOOKで捨て値になっているように、バッテリーが死にかけだけどもまだ残っていて、驚くべきことにIPS FHD（ときどきTN FHDがあるので気をつける）、みたいなのが、3000円とか5000円とかで手に入ったりすることもある（送料込み）。もちろんCPUは期待するな。Core i5第4世代でも気にするな。でもバッテリー生きてるならなんでもいいじゃない！たとえ残り39%とかだったとしても！&lt;/p&gt;&#10;&lt;p&gt;このへんのはね、まぁさすがに常用はつらいと思うけど、サーバよりも持ち運びたいタイプの特定用途のクライアントPCとして活躍の場があると思ったな。筐体のめっちゃ軽いからね。当時は最先端だったんだろう。&lt;/p&gt;&#10;&lt;p&gt;PANASONICの昔のやつとかでもボタン一つでWi-fi切り替えギミックとかほしい人はほしそうなやつあるしね。まだそこまでちゃんといじってなけど、僕はけっこういいと思ったな。&lt;/p&gt;&#10;&lt;h2 id="どんどん検証していく"&gt;どんどん検証していく&#10;&lt;/h2&gt;&lt;p&gt;40台くらいジャンク揃えたけど「完璧だ！」みたいなのマジでなくて、「こいつはここがなぁ…」のオンパレードです。今はThinkPad L390を使っていて、これは比較的の文句のないPC…に見せかけて、クリックパッド死んでたりするからねｗあとなんか全体的にもやってる。まぁあんまりメインディスプレイがっつり見ないけどね。&lt;/p&gt;&#10;&lt;p&gt;とりあえず今日現時点においては、このサイトはThinkPad L390 Core i5-8265U, 32GB RAMで動いております。RAMだけすごい。普段は3-6GBの利用料なので完全に無駄。でもこれからメインサーバの機能をうつしていったら重くなるかも。&lt;/p&gt;&#10;&lt;p&gt;最初の間は消費電力も10Wくらいだったけど、メディア系のサーバを入れ始めたから、いまは15Wくらいにあがってそうだなー…。Jellyfinとかは入れる予定ないんだけど。Immichは入れようかなぁ。家族にAppleやGoogleにお布施しているのがいたら救ってもいいんだが…。&lt;/p&gt;&#10;&lt;p&gt;この子がいつでも最後のちからを振り絞れるように、後ろに何台ものジャンクを控えさせておかないとな。そういう態勢を整えて、知見を共有していきたい。&lt;/p&gt;&#10;&lt;p&gt;まぁなんにしても、あんまり失敗したくなくて、でもLinuxほしいなぁって雑に思う人はDell Latitude 5290はいいと思うよ（2-in1は避けつつ）。ジャンクなら別途パーツ含めて1万、保証付きの中古ショップなら…25000くらいかなぁ。ジャンク市場もこれからどうなることやら…&lt;/p&gt;&#10;</description></item><item><title>ConoHaのメールサーバからさくらのメールボックスに移行した</title><link>https://hack-le.com/conoha-sakura-mail/</link><pubDate>Fri, 08 May 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/conoha-sakura-mail/</guid><description>&lt;p&gt;面倒臭かったのだけれど、メールサーバをConoHaからさくらに移行した。2026年3月のConoHa大規模障害とその対応にすっかり信を失ってしまったよね。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/conoha-vps-down/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ConoHa VPS落ちすぎ問題&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/conoha-vps-down/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/03/eyecatch_48871_1774613666.webp" alt="ConoHa VPS落ちすぎ問題" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;ConoHaはなんだかんだで10年くらい使っていたので、残念ではあったけれども、仕方がない。実際本当に酷かった。VPSをまとめ買いしてしまったせいであと一年ほど契約が残っているけれど、それでもこのサイトは今はVPSから移行して自宅サーバで稼働中だ。&lt;/p&gt;&#10;&lt;p&gt;まぁ、大規模障害においても、VPSではないメールサーバのほうは特に障害が起きてはいなかったんだけどさ。でもなんかもう、ConoHaに金払いたくねぇって気持ちのほうが強くなってしまったよな。VPSでやろうかな、という気持ちはあったんだけれど、あんな障害があっては、その気も失せる。&lt;/p&gt;&#10;&lt;p&gt;ちなみにConoHaのメールサーバは月額605円と、個人で使うにはまぁまぁのお値段だ。そうは言ってもメールサーバの運用はHTTPの世界以上にややこしくされてしまったため、自前でやるのもなかなかしんどいので、専用サービスを使っていたわけだ。ConoHaにとっても悪くない商売なんだろうが。しかし肝心のVPSがあれじゃねぇ…。&lt;/p&gt;&#10;&lt;p&gt;それで結局、俺たちのさくらのメールボックス。やたらと安いことで有名なさくらのメールボックス。3年契約すると月額88円という脅威の安さ。1年契約でも月額110円。ここだけデフレの世界線。3年契約で3000円ちょっとと逆に心配になる。ありがとうさくら。株買っておけばよかった。&lt;/p&gt;&#10;&lt;p&gt;まぁ実際安すぎて不安になるレベルなので、ちゃんと使えるかなぁと思ったのだけれど、送受信共に特に問題なかった。今となっては必須のDKIM/SPF/DMARCもできたし。レジストラはさくらではなくCloudflareだけど、特に問題なし。ので、2日ほど様子を見て完全に移行した。ConoHaのメールサーバのほうは削除。さらばConoHa。&lt;/p&gt;&#10;&lt;p&gt;今のところ特に不便はないが、強いて言えば最初のログインするID代わりのドメインがわかりづらかった。契約時のメールを見る必要がある。ってかMXが指定したサブドメインになると思わなかったな。これ適当なの入力したら後悔することになりそう。あと複数ドメイン使えるのはいいが、ユーザ名が全ドメイン共通扱いとなるのは人によっては困るケースもあるかもしれない。まぁでもこのプラン使う人はほぼ個人や個人事業主、あるいはひとり法人だろうからまぁ問題ないのだろう。&lt;/p&gt;&#10;&lt;p&gt;というわけで、結果的には、Conoha半年分の料金でさくら3年契約となった形だ。しかしあんなことがなければConoHa使い続けてもよかったんだけどね。今となってはこのサイトで紹介クーポンのリンク貼っていたのも黒歴史だし、数人とはいえ実際契約までいった人には申し訳ない気持ちがある。しかし使っていたから勧めたのだし、実際安定していたんだ。&lt;strong&gt;今回落ちたのも新バージョンとなるVer3.0で、Ver.2は落ちてなかったらしい&lt;/strong&gt;。最近のIT業界はこんなのばっかりだ。バージョンアップの意味が変わって久しい。&lt;/p&gt;&#10;&lt;p&gt;ConoHaには自分たちが売っているものは本当のところなんだったのか、今一度思い出してほしいところだ。まぁ僕にとってはもう遅いのだが…。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/dkim-spf-dmarc/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;独自ドメインでメールするために、DKIM/SPF/DMARCのお勉強&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/dkim-spf-dmarc/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_14196_1789100822.webp" alt="独自ドメインでメールするために、DKIM/SPF/DMARCのお勉強" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/zoho-mail-domain/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Zoho Mailで無料の独自ドメインメール 趣味、ブロガー、個人事業主、零細企業によし&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/zoho-mail-domain/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_15314_1788943883.webp" alt="Zoho Mailで無料の独自ドメインメール 趣味、ブロガー、個人事業主、零細企業によし" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Linux Mint Xfce 22.3 で外付けハードディスクのRAIDの残滓を片付けて初期化する</title><link>https://hack-le.com/linux-mint-xfce-22-3-raid-zero/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linux-mint-xfce-22-3-raid-zero/</guid><description>&lt;p&gt;ガチャベイに新しく突っ込んだハードディスクに、古のRAIDの残滓が残っていたときの対処。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Linux Mint Xfce 22.3&lt;/li&gt;&#10;&lt;li&gt;ThinkPad L390&lt;/li&gt;&#10;&lt;li&gt;ガチャベイ&#10;&lt;ul&gt;&#10;&lt;li&gt;WDの2TB HDD&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="状況と対応"&gt;状況と対応&#10;&lt;/h2&gt;&lt;p&gt;新しく入れたHDDがbusyで初期化できない。前にRAIDしていたためと思われる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="nx"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;proc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;mdstat&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Personalities&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;raid0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;raid1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;raid4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;raid5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;raid6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;raid10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;linear&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;md125&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;inactive&lt;/span&gt; &lt;span class="nx"&gt;sdd1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="mi"&gt;4190208&lt;/span&gt; &lt;span class="nx"&gt;blocks&lt;/span&gt; &lt;span class="kr"&gt;super&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;       &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;md126&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;inactive&lt;/span&gt; &lt;span class="nx"&gt;sdd3&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="mi"&gt;1948663840&lt;/span&gt; &lt;span class="nx"&gt;blocks&lt;/span&gt; &lt;span class="kr"&gt;super&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;       &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;md127&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;inactive&lt;/span&gt; &lt;span class="nx"&gt;sdd2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="mi"&gt;523264&lt;/span&gt; &lt;span class="nx"&gt;blocks&lt;/span&gt; &lt;span class="kr"&gt;super&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;       &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;unused&lt;/span&gt; &lt;span class="nx"&gt;devices&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;none&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;めっちゃRAID。inactiveにはなっているが。これを解除する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="nx"&gt;mdadm&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;stop&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;md125&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="nx"&gt;mdadm&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;stop&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;md126&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="nx"&gt;mdadm&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;stop&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;md127&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;RAIDの署名消去。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="nx"&gt;mdadm&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;zero&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;superblock&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sdd1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="nx"&gt;mdadm&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;zero&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;superblock&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sdd2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="nx"&gt;mdadm&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;zero&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;superblock&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sdd3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;念押しでゼロ入れる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="nx"&gt;wipefs&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sdd&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そうしたら「ディスクの管理」でパーティションの初期化ができる。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;</description></item><item><title>ThinkPad L390 + Linux Mint Xfce 22.3 のHDMI接続で音声出力する</title><link>https://hack-le.com/thinkpad-l390-linux-mint-xfce-22-3-hdmi/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/thinkpad-l390-linux-mint-xfce-22-3-hdmi/</guid><description>&lt;p&gt;ジャンクで買ったThinkPad L390 にLinux Mint Xfce 22.3を導入した。で、先日コイツに32GB RAMをぶち込んで無事動作することを確認したので、これを自宅のメインサーバにすることを画策している。&lt;/p&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;早速Xiaomiの激安4KチューナーレステレビMi TVにHDMIで接続した。画面はうつったが…音がならない。デスクトップ右下スピーカーアイコンから「オーディオミキサー」より出力先を選択できるが、HDMIが表示すらされない。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Lenovo ThinkPad L390&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-8265U&lt;/li&gt;&#10;&lt;li&gt;Linux Mint Xfce 22.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Xiaomi Mi TV: 4Kチューナーレステレビ&lt;/li&gt;&#10;&lt;li&gt;HDMI&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="原因と対応"&gt;原因と対応&#10;&lt;/h2&gt;&lt;h3 id="ハードウェアレベルの確認"&gt;ハードウェアレベルの確認&#10;&lt;/h3&gt;&lt;p&gt;まずハードウェアレベルで認識の確認。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aplay -l&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結果。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**** ハードウェアデバイス PLAYBACK のリスト ****&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;カード 0: PCH &lt;span class="o"&gt;[&lt;/span&gt;HDA Intel PCH&lt;span class="o"&gt;]&lt;/span&gt;, デバイス 0: ALC257 Analog &lt;span class="o"&gt;[&lt;/span&gt;ALC257 Analog&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス: 0/1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス &lt;span class="c1"&gt;#0: subdevice #0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;カード 0: PCH &lt;span class="o"&gt;[&lt;/span&gt;HDA Intel PCH&lt;span class="o"&gt;]&lt;/span&gt;, デバイス 3: HDMI &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Mi TV&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス: 1/1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス &lt;span class="c1"&gt;#0: subdevice #0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;カード 0: PCH &lt;span class="o"&gt;[&lt;/span&gt;HDA Intel PCH&lt;span class="o"&gt;]&lt;/span&gt;, デバイス 7: HDMI &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;HDMI 1&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス: 1/1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス &lt;span class="c1"&gt;#0: subdevice #0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;カード 0: PCH &lt;span class="o"&gt;[&lt;/span&gt;HDA Intel PCH&lt;span class="o"&gt;]&lt;/span&gt;, デバイス 8: HDMI &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;HDMI 2&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス: 1/1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  サブデバイス &lt;span class="c1"&gt;#0: subdevice #0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mi TVが存在する。つまり認識はしている。&lt;/p&gt;&#10;&lt;h3 id="スピーカーテスト"&gt;スピーカーテスト&#10;&lt;/h3&gt;&lt;p&gt;ここでカード0, デバイス3スピーカーテスト。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;speaker-test -D hw:0,3 -c &lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;音がならない。しかしエラーにもならない。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;再生デバイス: hw:0,3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ストリームパラメータ: 48000Hz, S16_LE, &lt;span class="m"&gt;2&lt;/span&gt; チャネル&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;16&lt;/span&gt; オクターブのピンクノイズを使用&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;レート 48000Hz &lt;span class="o"&gt;(&lt;/span&gt;要求値 48000Hz&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;バッファサイズ範囲 &lt;span class="m"&gt;64&lt;/span&gt; 〜 &lt;span class="m"&gt;1048576&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ピリオドサイズ範囲 &lt;span class="m"&gt;32&lt;/span&gt; 〜 &lt;span class="m"&gt;524288&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;最大バッファサイズ &lt;span class="m"&gt;1048576&lt;/span&gt; を使用&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ピリオド数&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;period_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;262144&lt;/span&gt; で設定&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;buffer_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1048576&lt;/span&gt; で設定&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;0&lt;/span&gt; - Front Left&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1&lt;/span&gt; - Front Right&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ピリオド時間&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 10.957507&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;0&lt;/span&gt; - Front Left&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1&lt;/span&gt; - Front Right&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;よって、ハードウェアの音出力チャネル自体がミュートになっていると考える。&lt;/p&gt;&#10;&lt;h3 id="ミュートの解除"&gt;ミュートの解除&#10;&lt;/h3&gt;&lt;p&gt;以下を実行する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alsamixer&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;F6キー後、サウンドカードでHDA Intel PCHを選択。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/04/62bebba79b14376a2f02e65c0ede87dc.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;S/PDIFがMMになっている。つまりミュート状態。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/04/2b6cd35ed650aa606a60ee24b4ca27dc.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;矢印キーでS/PDIFを選択肢Mキーでミュート解除される。&lt;/p&gt;&#10;&lt;p&gt;この状態で再び&lt;code&gt;speaker-test&lt;/code&gt;を実行したら、音が鳴るはず。&lt;/p&gt;&#10;&lt;h3 id="オーディオミキサーに表示"&gt;オーディオミキサーに表示&#10;&lt;/h3&gt;&lt;p&gt;しかし相変わらずオーディオミキサーにはHDMI出力が出てこない。&lt;/p&gt;&#10;&lt;p&gt;オーディオミキサーこれはプロファイルの選択の問題となる。デスクトップ右下スピーカーアイコンから「オーディオミキサー」を開く。「設定」タブからプロファイルを選択する。「デジタルステレオ（HDMI）出力 + アナログステレオ 入力」を選ぶ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/04/f19297c0a86cf13aa8374b2fc46d1441.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;そうしたら、「出力デバイス」よりHDMI出力を選択できるようになる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/04/7a3ed940f72719220d4bdbac32ed63d3.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;これで無事、音が出た。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;ちょっと苦労した。AIとの相談ではだいぶ迷走した部分もあったが、最終的にはうまくいってよかった。多分第8世代Core i系のデバイスで同様のことが起きたら、これでだいたいいけるのでは。ハードウェアとして認識さえされているならなんとかなるはず…。&lt;/p&gt;&#10;&lt;p&gt;その後継続して利用しているけれど、特に問題なし。よかったよかった。&lt;/p&gt;&#10;</description></item><item><title>Linux PCとHDMI接続したディスプレイでチラつきの対応</title><link>https://hack-le.com/linux-pc-hdmi-display-flicker/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linux-pc-hdmi-display-flicker/</guid><description>&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;Linux PCとHDMI接続したディスプレイで、少しの時間操作しないと画面全体にチラつきが高い頻度で発生する。本体ディスプレイはちらつかない。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Lenovo ThinkPad L390&#10;&lt;ul&gt;&#10;&lt;li&gt;Intel Core i5-8265U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Linux Mint Xfce 22.3&lt;/li&gt;&#10;&lt;li&gt;Xiaomi Mi TV&lt;/li&gt;&#10;&lt;li&gt;HDMI接続&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;内蔵GPUの省電力制御に起因すると思われる。カーネルパラメータで電力制御の無効化を実施する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /etc/default/grub&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下の行を変更する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GRUB_CMDLINE_LINUX_DEFAULT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;quiet splash i915.enable_dc=0 pcie_aspm=off intel_idle.max_cstate=1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;設定の意味。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;i915.enable_dc=0&lt;/code&gt;&lt;/strong&gt; （最重要：ディスプレイの深い省電力状態を無効化）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;pcie_aspm=off&lt;/code&gt;&lt;/strong&gt; （PCIeのアクティブ状態電源管理を無効化）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;intel_idle.max_cstate=1&lt;/code&gt;&lt;/strong&gt; （プロセッサのCステートを制限し、電圧降下を防ぐ）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;反映して再起動。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo update-grub&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo reboot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再起動後、チラつきが発生しないことを確認する。&lt;/p&gt;&#10;&lt;h2 id="aiが言うことには"&gt;AIが言うことには&#10;&lt;/h2&gt;&lt;p&gt;正直AIに言われるままやった(´・ω・｀)&lt;/p&gt;&#10;&lt;p&gt;AIが言うことには、以下のような問題であった、ということだ。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;今回の現象と対策を、要点に絞ってまとめました。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="1-現象の正体gpuのサボりすぎ"&gt;1. 現象の正体：GPUの「サボりすぎ」&#10;&lt;/h3&gt;&lt;p&gt;操作を止めると、ThinkPad（Intel GPU）が「描画の仕事がない」と判断し、消費電力を極限まで抑える「&lt;strong&gt;深い省電力状態（DC5/DC6ステート）&lt;/strong&gt;」に移行します。&lt;/p&gt;&#10;&lt;p&gt;この際、HDMI端子に送られる信号の電圧や同期タイミングが、省電力の影響でわずかに不安定になります。Xiaomi Mi TV側の受信機がこの微弱な変化を「信号の乱れ」として検知してしまうため、画面がちらつきます。&lt;/p&gt;&#10;&lt;h3 id="2-解決策省電力の強制解除"&gt;2. 解決策：省電力の強制解除&#10;&lt;/h3&gt;&lt;p&gt;「操作していない時も、HDMIの信号強度を落とさない」ように設定を書き換えます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;設定変更の対象:&lt;/strong&gt; システムの起動設定（GRUB）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;追加する命令:&lt;/strong&gt; &lt;code&gt;i915.enable_dc=0&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;これを追加することで、GPUが深い省電力状態（DCステート）に入るのを禁止し、常に安定した信号を出力させます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;反映方法:&lt;/strong&gt; 設定追記後、&lt;code&gt;sudo update-grub&lt;/code&gt; を実行して再起動。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-なぜ本体は無事でtvだけなのか"&gt;3. なぜ本体は無事で、TVだけなのか&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;本体液晶:&lt;/strong&gt; &lt;strong&gt;eDP (Embedded DisplayPort)&lt;/strong&gt; という専用規格で繋がっており、省電力による電圧変動に非常に強い設計になっています。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;外部TV:&lt;/strong&gt; &lt;strong&gt;HDMI&lt;/strong&gt; 規格で繋がっており、PC側の省電力制御（電圧低下やノイズ）の影響をダイレクトに受けてしまいます。特にテレビはPCモニターよりも信号の厳密な同期を求める傾向があるため、相性として現れやすくなります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="まとめ"&gt;まとめ&#10;&lt;/h3&gt;&lt;p&gt;この問題は、「&lt;strong&gt;LinuxのドライバがTV側の許容範囲を超えて省エネしようとしている&lt;/strong&gt;」ことが原因です。上記の設定で「サボり」を禁止すれば、操作の有無にかかわらず安定します。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;画面のチラつきはけっこう鬱陶しかったので、解決してよかった。&lt;/p&gt;&#10;&lt;p&gt;AIのお陰様でなんとかなりました(´・ω・｀)&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/linux-pc-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【Linux PC再生計画】中古PCも触ってみるといろいろだ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/linux-pc-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/02/output.webp" alt="【Linux PC再生計画】中古PCも触ってみるといろいろだ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>GeminiもChatGPTも阿呆過ぎるのでチャットはローカルLLMで良いとなっている</title><link>https://hack-le.com/geminichatgptlocalllm/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/geminichatgptlocalllm/</guid><description>&lt;p&gt;特にGeminiが顕著なのだが、推論のリソースをケチっているのか出力設計がタコなのかその両方なのか知らないが、とにかく出力が深刻に愚かであると思う。応答速度だけは確かに早くなったが、その出力がゴミなので使う気になれない。いやまぁ料理の相談くらいならできるし、検索エンジンの代わりにはなるのだが、それ以上にならない。&lt;/p&gt;&#10;&lt;p&gt;対話はまったくする気にならない。Geminiはキーワードを拾って妄想を繰り広げているような感じで、2,3もチャットを往復すると本当にひどい。最初の話題で出たキーワードを永遠にこすり続けられるのには辟易とする。ChatGPTはなんだか壁の向こうにいる弁護団に向かっていかに自分の出力が法的に問題ないかをアピールしているような感じだ。&lt;/p&gt;&#10;&lt;p&gt;これは主観だが、僕はAIについては各々が主観で語るしかないと思っている。一応ベンチマークはあるものの、AIの性能を測るというベンチに信を置いていない。というのも、AIの性能は人間のように定義が難しいからだ。人間の能力の定量化について成功したという人は少ないと思うが、AIについても同じことが言える。何を持って良いとするのか、誰にもわからない。&lt;/p&gt;&#10;&lt;p&gt;別にAIが特別なわけでもない。音楽にも物語にも絵画にもベンチマークは存在しない。あってもそれは本質的に価値を反映しない。取引時価はあってもそれは価値ではない。ゴッホの絵はゴッホが死んでから自律的に成長して評価されたのではない。同じ話だ。質は本質的に量で語れない。&lt;/p&gt;&#10;&lt;p&gt;まぁでもこれだけだとあんまりなので、事実として、僕は課金しているGeminiではなく、自宅のRyzen AI Max+395で動かしているローカルLLMとチャットするようになった、ということは書いておこう。&lt;/p&gt;&#10;&lt;p&gt;Qwen3.5-27BのQ4で、検閲回避とされているモデルだ。犯罪やNSFWの話もできるとされている。犯罪の話はしていないが、NSFWについてはプロンプトの相談をしてみたら本当に出力された。おっぱいの単語に過剰反応してポリシー違反にするChatGPTとは雲泥の差である。気兼ねなく話せるのは非常に良いことだ。&lt;/p&gt;&#10;&lt;p&gt;応答速度は3tokens/s程度でかなり遅いのだけれど、使えないほどではない。ブログでも書いている間に返答はくる。個人的には速度はあまり重視していない。むしろ多少ゆっくりのほうがよい。こちらも考えをまとめないといけない。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、プログラミングにおいては現状ローカルLLMよりも明確に良いため、そのために課金は続ける…続けるというか、昨年末のGoogleのAI Proの半額セールで年間契約してしまったよね。だからAntigravityは使っている。まぁここ1,2か月の改悪はひどいものだが、一応まだ使えないほどではない。まぁ現時点でこれだから、果たして今年が終わる頃にどうなっているのかは恐ろしさもあるが…。今の国際情勢などもかなり不透明さを増している。今とはまったく違う状況になっているかもしれない…。&lt;/p&gt;&#10;&lt;p&gt;一方で、ローカルLLMはとりあえず変わらない。昨日できたことが今日できるという一番嬉しい当たり前という品質がここにある。当たり前が一番難しい。当たり前は当たり前じゃないんだな。今のところはコイツが希望だ。最後の希望かもしれない。なんとか使いこなしていきたい。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ryzen-ai-max-395-128gb-ram/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;30万でRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM ならちょっとほしい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ryzen-ai-max-395-128gb-ram/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_19575_1789622185.webp" alt="30万でRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM ならちょっとほしい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>DDR4メモリの中古相場もマシになってきたか</title><link>https://hack-le.com/ddr4-32gb-ram-old/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/ddr4-32gb-ram-old/</guid><description>&lt;p&gt;昨年2025年末より続くメモリの狂乱物価はジャンク市場にも影響しており、バカみたいな取引価格になっているのだが、少し落ち着いてきたかもしれない。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gazlog.jp/entry/china-memory-scalper-cry-hard/" target="_blank" rel="noopener"&#10; &gt;中国でメモリ価格下落を受けて転売業者がパニック状態に。一時的な値下がりにも期待&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Xでも取り上げられている。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://twitter.com/0x71ff/status/2041637122768302392?s=20" target="_blank" rel="noopener"&#10; &gt;https://twitter.com/0x71ff/status/2041637122768302392?s=20&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これ画像のやつ9000円だけど容量いくらなんだろう。ブランド的に8GB2枚組だろうか。でもそうすると9000円は全然高いよね。16GB2枚組なら今の相場だと安い。高いけど安い。まぁジャンク市場にも放出されてんのかなーとは、僕も日々市場価格を見ているが思う。&lt;/p&gt;&#10;&lt;p&gt;それで今回、KINGSTONとADATAの16GB2枚を送料込みで9500円ほどで手に入れた。高いけど動作未確認でも今の相場だとこんなもん。まだまだ即決15000円とかザラにある。メルカリだと2万とかある。意味がわからないよ。&lt;/p&gt;&#10;&lt;p&gt;まぁ嘆いていても仕方ないし、とりあえずThinkPad L390に挿入。ドキドキしつつ見守ったところ、最初の起動にちょっと時間がかかってドギマギするも無事認識。&lt;/p&gt;&#10;&lt;p&gt;こちらCPUはCore i5-8265Uとなっており、そこに32GB RAMなら個人用サーバとしては十分じゃなかろうか。ストレージは256GBだけどまぁ必要があれば増やせばいいし、これによって8GB RAMが弾き出されたので他のジャンクPCに入れられる。サーバー用途なら8GBでもあまり問題ないんだけど、いろいろなアプリケーションを同時にたてるとなんだかんだでメモリはあるにこしたことはないからねぇ。&lt;/p&gt;&#10;&lt;p&gt;それにしても、&lt;strong&gt;PCはひたすら実用のためにある&lt;/strong&gt;のであって、適正価格がなにかは難しいにせよ、さすがに「これはない」っていう価格はあるわけで、なんでそんなものを転売しようと思うのか、理解に苦しむ。&lt;strong&gt;転売で釣り上げられるのは命に関わる必需品やファングッズのような情熱に支えられるもの&lt;/strong&gt;であって、PCメモリは全然向いてないだろう。転売ヤーの癖に転売がなにかもわかってないんじゃないか。まぁパニック買いでいくつかは売れるかもしれないが、大して儲けられるわけがない。&lt;strong&gt;転売ヤー自体倫理的にどうかと思うのに、そのうえでセンスがないんだから本当に救いようがない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;PCはどこまでも実用のためなんだから、必要以上に買われないし、そもそもDDR4はもう十分作られた。原理的にそんなに上がる余地があるわけじゃない。純粋に迷惑だし、誰も得しない変なことするのはやめてほしいもんだね。&lt;/p&gt;&#10;&lt;p&gt;現場からは以上です。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-memory/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AI需要によるメモリ高騰からわかること：誰もメモリが3ヶ月で5倍になると思っていなかった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-memory/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/12/output-24.webp" alt="AI需要によるメモリ高騰からわかること：誰もメモリが3ヶ月で5倍になると思っていなかった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/tenbaiya/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;転売ヤーは何故嫌われるのか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/tenbaiya/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2024/04/33c5ede0a40dc0d9441ce4018a8eddf3.webp" alt="転売ヤーは何故嫌われるのか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Windows 11 で OpenSSHサーバたててファイル送受信</title><link>https://hack-le.com/windows-11-openssh/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/windows-11-openssh/</guid><description>&lt;p&gt;なんかwingetとか色々なルートがあってややこしいんだが、今回は「&lt;a class="link" href="https://learn.microsoft.com/en-us/principles-for-ai-generated-content" target="_blank" rel="noopener"&#10; &gt;Get started with OpenSSH Server for Windows | Microsoft Learn&lt;/a&gt;」のルートに従う。GUIでやろうとしたけど、SSHクライアントはあるのにSSHサーバが見つからなかったのでCUI経由でいく。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;サーバ: Windows 11 Home&lt;/li&gt;&#10;&lt;li&gt;クライアント: macOS 14.8.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;SSHの鍵認証のやり方（秘密鍵・公開鍵・aurhorized_keysの関係）は知っているものとする。つまりLinux/Mac/UNIXでは普通に鍵認証でSSHやっている人向け。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;Powershellを管理者権限で起動する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Get-WindowsCapability -Online &lt;span class="p"&gt;|&lt;/span&gt; Where-Object Name -like &lt;span class="s1"&gt;&amp;#39;OpenSSH*&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでClientとServerでNotPresentになってるのがあったらインストールする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install the OpenSSH Client&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install the OpenSSH Server&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;けっこう時間かかった。なんでなん。&lt;/p&gt;&#10;&lt;p&gt;終わったら以下が表示される。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Path :&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Online : True&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RestartNeeded : False&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そしたら起動設定する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Start the sshd service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Start-Service sshd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# OPTIONAL but recommended:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Set-Service -Name sshd -StartupType &lt;span class="s1"&gt;&amp;#39;Automatic&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;!&lt;span class="o"&gt;(&lt;/span&gt;Get-NetFirewallRule -Name &lt;span class="s2"&gt;&amp;#34;OpenSSH-Server-In-TCP&amp;#34;&lt;/span&gt; -ErrorAction SilentlyContinue&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Write-Output &lt;span class="s2"&gt;&amp;#34;Firewall Rule &amp;#39;OpenSSH-Server-In-TCP&amp;#39; does not exist, creating it...&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; New-NetFirewallRule -Name &lt;span class="s1"&gt;&amp;#39;OpenSSH-Server-In-TCP&amp;#39;&lt;/span&gt; -DisplayName &lt;span class="s1"&gt;&amp;#39;OpenSSH Server (sshd)&amp;#39;&lt;/span&gt; -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort &lt;span class="m"&gt;22&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Write-Output &lt;span class="s2"&gt;&amp;#34;Firewall rule &amp;#39;OpenSSH-Server-In-TCP&amp;#39; has been created and exists.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後のクソ長コマンドは要はポート22を開けている。&lt;/p&gt;&#10;&lt;p&gt;そんでここからが面倒なのだが、&lt;code&gt;C:\ProgramData\ssh&lt;/code&gt;に&lt;code&gt;sshd_config&lt;/code&gt;があるのだが、以下のような記述がある。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Match Group administrators&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なにこれ？と思ったけど管理者がログインしてきたときのaurhorized_keysの場所を指定しているらしい。個人ユーザなら普通は管理者であろう。権限的に面倒臭いので、コメントアウトして無視する。ただし書き換えるには管理者権限が必要であるため、メモ帳を管理者権限で開き、メモ帳からファイルを開いて、&lt;code&gt;#&lt;/code&gt;をつけてコメントアウト。&lt;/p&gt;&#10;&lt;p&gt;そうしたら、&lt;code&gt;C:\Users\ユーザ名\.ssh&lt;/code&gt;に&lt;code&gt;aurhorized_keys&lt;/code&gt;を作って、公開鍵を登録する。&lt;/p&gt;&#10;&lt;p&gt;そしたらMacから以下を実行。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh ユーザ名@IPアドレス&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ログインできたらOK。&lt;/p&gt;&#10;&lt;p&gt;scpの試験。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;touch test.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp test.txt ユーザ名@IPアドレス:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ホームディレクトリに出来たらOK。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;例によってエラい苦労した。まぁでもSSH環境構築の面倒くささはWindowsで嫌になるポイントの一つではあったので、いつのまにか公式でちゃんと対応していたのはよかったと思う。めんどくさかったけど。&lt;/p&gt;&#10;</description></item><item><title>ポータブル電源を初めて買うために調べた</title><link>https://hack-le.com/portable-power/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/portable-power/</guid><description>&lt;p&gt;最近世の中が物騒なので、ポータブル電源を手に入れようと思った。右も左もわからないので、色々調べて必要な知識をまとめていく。&lt;/p&gt;&#10;&lt;h2 id="見るべきスペック"&gt;見るべきスペック&#10;&lt;/h2&gt;&lt;p&gt;とりあえず何を見るべきか。なんかボソボソとAIと相談したやつの中で重要なのをまとめさせた。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;内容&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;防災・実用上のポイント&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;容量 (Wh)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;バッテリーの「持ち」&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;1000Wh&lt;/strong&gt;が定番。スマホ約100回、電気毛布なら約10〜15時間使え、安心感が違います。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;電池の種類&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;リン酸鉄リチウム&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;現在の主流。「寿命が長い（10年〜）」「安全性が高い」「充電が速い」の3拍子揃った必須条件です。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;定格出力 (W)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;動かせる「家電」&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;電子レンジやドライヤーを使うなら&lt;strong&gt;1200W〜1500W以上&lt;/strong&gt;が必要。容量が大きくても出力が低いと家電は動きません。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;充電速度&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;満充電までの時間&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;リン酸鉄モデルは0%→80%まで1時間前後で終わるものが多い。「&lt;strong&gt;AC急速充電&lt;/strong&gt;」の有無が分かれ目です。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;本当にガチるなら1000Whは全然足りないと思う。ただ正直僕は1000Whでどれだけやれるかもわからないし、まず試す必要があると思われた。&lt;/p&gt;&#10;&lt;p&gt;あとは重量だけど、筋トレしよう！！！&lt;/p&gt;&#10;&lt;p&gt;他の機能としては&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自然放電率…基本的に防災謳っているのはどれも優秀と思う&lt;/li&gt;&#10;&lt;li&gt;ソーラーパネルとの相性…メーカーと合わせれば間違いない&lt;/li&gt;&#10;&lt;li&gt;パススルー機能、UPS機能…日常に取り込むなら&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="よく出てくるメーカー"&gt;よく出てくるメーカー&#10;&lt;/h2&gt;&lt;p&gt;とりあえず調べ始めて出てくるのは以下のメーカー。あとざっと見た印象も。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Jackery（ジャクリ）: 定番&#10;&lt;ul&gt;&#10;&lt;li&gt;New: 多分コスト的にこれになる&lt;/li&gt;&#10;&lt;li&gt;Plus: プロ仕様&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;EcoFlow: 全体的に充電早くて出力がでかい&#10;&lt;ul&gt;&#10;&lt;li&gt;DELTA: 高出力、大容量&lt;/li&gt;&#10;&lt;li&gt;RIVER: 軽量、持ち運び&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Anker&#10;&lt;ul&gt;&#10;&lt;li&gt;Solix&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Bluetti（ブルーティ）&#10;&lt;ul&gt;&#10;&lt;li&gt;AC&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;全部中華。あとはアメリカのGoal Zeroとか俺達のJVCケンウッドが出てくるけど高いというか中華が安いんだろう多分。&lt;/p&gt;&#10;&lt;p&gt;俺達の中華なら、2026年4月現在、相場は1000Whでだいたい6万円くらいって感じ。どれもこれも似たようなかんじであるためとても悩む。800Whくらいになると4万くらいになるが、定格出力も少し落ちる。&lt;/p&gt;&#10;&lt;p&gt;AIに聞くとだいたい「Jackeryがええで。自然放電率が有能やから放置しておいていざというときに使うケースにうってつけや」みたいなことを言う。でもJackeryは中華の中ではちょっと高くなる。&lt;/p&gt;&#10;&lt;h2 id="1000wh--800wh-くらいのやつだと"&gt;1000Wh / 800Wh くらいのやつだと&#10;&lt;/h2&gt;&lt;p&gt;だいたい1000Whだと以下が競争相手になるのではないか。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Jackery 1000 New&lt;/li&gt;&#10;&lt;li&gt;EcoFlow DELTA 3&#10;&lt;ul&gt;&#10;&lt;li&gt;Airは定格出力が500Wしかないけど安い。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Bluetti AC180: 1152Wh, 17kg&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この中だとJackery 1000 Newが定番になると思うがちょっと高い。65000円くらいした。DELTA 3とAC180は6万円くらい。ここにそれぞれポイントがつく。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ソーラーパネルセットだともうちょっと安くなる…ように見えるが、計算したら微妙だった&lt;/strong&gt;わ。たとえば「&lt;a class="link" href="https://amzn.to/3OiRU7S" target="_blank" rel="noopener"&#10; &gt;EcoFlowのRiver 2 Pro + 160W両面ソーラーパネル&lt;/a&gt;（アフィリンク）」はなんだけど、65,000円くらいだが、これはそれぞれ別売りで買ったのと大して変わらない値段だった。Jackeryのセット売のやつは、少し安かったけど、正直バラで好きな組み合わせ買ったほうがよいと思う。&lt;/p&gt;&#10;&lt;p&gt;DELTA 3はAirもあるが、こちらは定格出力が500Wとなる。これだと家電はしんどいが、防災観点だと、ポータブル電源を使わないといけないシチュエーションで大電力を使うべきではない説もある。しかし少しでも使えるだけで良い説もある。正直これはもう被災しないとわからん…。&lt;/p&gt;&#10;&lt;p&gt;800Whクラスだと以下になるか。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;EcoFlow River 2 Pro (定格出力800W)&lt;/li&gt;&#10;&lt;li&gt;Blutti AC70 (定格出力1000W)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;それぞれ4万 + ポイントって感じ。&lt;/p&gt;&#10;&lt;h2 id="ecoflow-delta-3にした"&gt;EcoFlow DELTA 3にした&#10;&lt;/h2&gt;&lt;p&gt;結局EcoFlow DELTA 3にした。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://amzn.to/4c84rTq" target="_blank" rel="noopener"&#10; &gt;EcoFlow DELTA 3 ポータブル電源 1024Wh&lt;/a&gt;（アフィリンク）&lt;/p&gt;&#10;&lt;p&gt;まず1000Whクラスにした理由は、ポータブル電源において電源容量は計画停電対策としても重要で、これはありそうな気がしたので。定格出力も大きい。非常時に大電力をそもそも使うべきではないと思うが、そうは言ってもあれば使えるので。&lt;/p&gt;&#10;&lt;p&gt;EcoFlowにした理由は3つ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Jackeryよりちょっと安い。&lt;/li&gt;&#10;&lt;li&gt;ソーラーパネルが色々ある。&lt;/li&gt;&#10;&lt;li&gt;たまたまあった整備済み品が安かった。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;整備済み品が45,000円ほどだったんよ。ここにポイントがつく。レビューもよかったし、どうせ使ってれば中古になるんだからの精神で突撃。中古に抵抗がないんだ僕は。ポイント考えたら4万くらいじゃないかな。保証半年しかないけどね。まぁでも公式の保証5年っていうのもどこまで信用していいかわからないし。なにせ中華。&lt;/p&gt;&#10;&lt;p&gt;ソーラーパネルはちょっと小さめのやつを買うつもり。というのも、&lt;strong&gt;ソーラーパネルを引っ張り出さないといけない時点で割と修羅モードに入っている可能性があり、治安の悪化が想定され、そうなるとデカいやつとか目立って仕方がない&lt;/strong&gt;と思った。そんな事態になったら商売あがったりだよ(;´Д｀)&lt;/p&gt;&#10;&lt;p&gt;まぁソーラーパネルはともかく、防災として、ポータブル電源については買える間に買っておいたほうが良いのではなかろうか。&lt;/p&gt;&#10;</description></item><item><title>M2 MBA(整備済み) vs MacBook Neoならどう考えるか</title><link>https://hack-le.com/m2-mba-vs-macbook-neo/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/m2-mba-vs-macbook-neo/</guid><description>&lt;p&gt;なんとなくAppleの整備済製品見てたら、M2 MacBook AIrが出ていた。最近MacBook Neoが出たが、そういえば比べるとどうなんだろう、と思った。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.apple.com/jp/shop/product/g15s3j/a/refurbished-13-inch-macbook-air-apple-m2-chip-with-8%E2%80%91core-cpu-and-8%E2%80%91core-gpu-space-gray?fnode=f3a57ef5264370b0a883649d00a022641f9f4f29cb70ded8f51362ceed2cf181786daa59ce3205d0b20e1272e59f942529e51c1f7887bd890c3b8c760a8ccb114a1099e82f64badcea170113e2adc175" target="_blank" rel="noopener"&#10; &gt;13インチMacBook Air [整備済製品] 8コアCPUと8コアGPUを搭載したApple M2チップ - スペースグレイ - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2022年7月発売&lt;/li&gt;&#10;&lt;li&gt;IPSテクノロジー搭載13.6インチ（対角）LEDバックライトディスプレイ&lt;sup&gt;1&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;16GBユニファイドメモリ&lt;/li&gt;&#10;&lt;li&gt;256GB SSD&lt;sup&gt;2&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;1080p FaceTime HDカメラ&lt;/li&gt;&#10;&lt;li&gt;Thunderbolt / USB 4ポート x 2&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これで110,800円か🤔&lt;/p&gt;&#10;&lt;p&gt;16GB RAMが大きい。ちなみにSoC性能をGeminiにまとめさせると以下だった。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;比較項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;A18 Pro (MacBook Neo)&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;M2 (MacBook Air)&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;シングルコア&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;約 3,400&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約 2,600&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;マルチコア&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約 8,300&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;約 10,000&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;GPU (グラフィック)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約 32,000 (Metal)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;約 45,000 (Metal)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;メモリ帯域幅&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;60 GB/s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;100 GB/s&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;思ったよりA18 Pro頑張る。いったいスマートフォンで何をそんなにやるんだ？と思ったがPCなら良いだろう。&lt;/p&gt;&#10;&lt;p&gt;これでMacBook Neoは99,800円だから、確かによく頑張っている。とはいえなんだかんだでRAMの差が大きいのも事実で、1万円の差で16GB RAMになるならM2 MBAの整備済み製品のほうがいいなぁ。地味にスピーカーもM2 MBAのがいいし。USB-CはちゃんとUSB-Cだし。Magsafeあるし。&lt;/p&gt;&#10;&lt;p&gt;まぁでもMacBook Neoの整備済み品が出てそれが85,000円くらいだったら、Neoがいいってなるかも。安いは正義。ま…円安がさらに悪化して、整備済みが出る頃には価格改定されている可能性もあるが…。&lt;/p&gt;&#10;&lt;p&gt;ソフトウェアサポートの問題はあるけれど、最近はなんかもうとにかくアプデしたくない感じが強くなってきており、あまりObsoleteとかも気にしなくなってきた。うちのメインデスクトップであるM2 Pro mac miniは未だにSonoma(14.8.3)使っている。あげる気がしない…。&lt;/p&gt;&#10;&lt;p&gt;まぁ追従するにしても、Tahoe(16.x)でMac mini 2018が対象外となったが、M2はまぁ20.xくらいまでサポートされんじゃねとも思うし、そっからセキュリティパッチの提供期間なんかを考えると、いずれにせよあと5,6年はソフトウェア的にも安泰なんじゃない多分。10万前後のラインでそれなら十分及第点かと。&lt;/p&gt;&#10;&lt;p&gt;まぁ今のところMacノートを買う予定はないのだけれど、10万で新品のNeoと11万で16GB RAMのM2 MBA整備済みだったら、M2 MBAがいいかなぁ。僕の場合はUSキーボード配列を求めてしまうので、整備済み品の入手難度はかなり上がってしまうのだけれどね…。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/macbook-neo-review/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;MacBook Neoは実用に即して削ぎ落されている&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/macbook-neo-review/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/03/eyecatch_48574_1773331941.webp" alt="MacBook Neoは実用に即して削ぎ落されている" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m5-macbook-air/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M5 MacBook Air を見ておく。誰向けなのかよくわからん&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m5-macbook-air/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/03/eyecatch_48731_1773939917.webp" alt="M5 MacBook Air を見ておく。誰向けなのかよくわからん" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>結局Google日本語入力を再び使い始めた</title><link>https://hack-le.com/google-input-method/</link><pubDate>Tue, 31 Mar 2026 01:22:07 +0900</pubDate><guid>https://hack-le.com/google-input-method/</guid><description>&lt;p&gt;ATOKの許されざる突然の値上げ宣言の圧政に反発し、数年続けていたATOK Passportを怒りの解約、そのあとOS標準の日本語入力システムを使っていた。なので、WindowsではMS-IME、Macではことえり…ではなく日本語入力変換プログラムとかいう愛のない名前のやつを使っていた。&lt;/p&gt;&#10;&lt;p&gt;なんだけれど、結局今はWindows/MacともにGoogle日本語入力使っちゃってるよね。脱Googleとか嘯いていたのにね。&lt;/p&gt;&#10;&lt;h2 id="ありのままの君が好き"&gt;ありのままの君が好き&#10;&lt;/h2&gt;&lt;p&gt;言い訳すると、元々脱GoogleとはGoogleが明日なくなっても困らないという意味であった。実際、明日Google日本語入力がなくなっても「あら」くらいのもんなのだ。だからまぁ、いいといえばいい。とはいえGoogle日本語入力を使いながらタイプする脱Googleは楽しいか？という気持ちはある。&lt;/p&gt;&#10;&lt;p&gt;気持ちはあったが、利便性には勝てなかった。なんか一周回って一番いいような気がする。なんかこう、&lt;strong&gt;余計なことしなくて&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;日本特有のシステムだからかもしれない。なのでコストをかけてアップデートはされないものの、廃止しろと言われるほどでもなく、結果、&lt;strong&gt;完成したソフトウェアを必要以上にいじらないという、資本主義にあるまじき理想が達成された、のかもしれない&lt;/strong&gt;。資本主義式アップデートの結果がATOKの悲劇だったわけなので…。&lt;/p&gt;&#10;&lt;h2 id="依存ではないあるべき便利"&gt;依存ではない、あるべき便利&#10;&lt;/h2&gt;&lt;p&gt;結果的に、Google日本語入力はソフトウェアのあるべき姿、そして便利とはなにかを体現しているかのように思える。つまり、&lt;strong&gt;あればあったで便利だが、なくなったからといって困るかといえば、言うほどではない。しかしできればなくならないでほしいし、あったら感謝する。便利とはこのようなものではなかろうか&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;これと&lt;strong&gt;対極にあるのが依存&lt;/strong&gt;だ。依存はなくなると困る。最悪の依存は、あってほしいわけではないが、なくなると困るタイプのものだ。そんな依存あるか？と思われるかもしれないが、ストレスからくる暴飲暴食やギャンブル依存症などがそういえるだろう。そしてソフトウェアでは、使いたくないが標準に合わせるために渋々使うOSやオフィスなどがそうかもしれない何とは言わないが。&lt;/p&gt;&#10;&lt;p&gt;そしてサブスク化したATOKにも、似たようなところがあった。少なくとも僕はATOKをやめたとき、多少の摩擦を感じた。感じたものの、いざやめてみると「なんか言うほど困らないな、なんであれに金払ってたんだ」みたいな気持ちになった。とすると、&lt;strong&gt;ATOKは僕にとって便利というより依存ないし惰性といえるもので続いていたのだろう&lt;/strong&gt;、と今となっては思われる。&lt;/p&gt;&#10;&lt;h2 id="質とはなにか"&gt;質とはなにか&#10;&lt;/h2&gt;&lt;p&gt;これについて、Google日本語入力がかつてよりよくなった、というわけではないように思う。単にATOKの価値が下がったので、相対的に無駄と感じているのではなかろうか。これは長年のATOK使いであった姉も「昔ほどの精度はない」といっていたし、精度が悪くなったと愚痴るツイートは多く見られた。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;質というのは厄介で、本質的に測定できない&lt;/strong&gt;。測定できた時点でそれは質ではなく量である。だから質とはどこまでも主観だ。主観なのだが、多くの人が集まってなにかを選ぶとき、それは確かに存在すると思われる。その存在を確認するためにユーザ数やらなんやらを指標とするのだが、それは常に遅行指標であるし、また複合的な要因に支えられている。&lt;/p&gt;&#10;&lt;p&gt;結局のところ&lt;strong&gt;質の良し悪しは個々が己の人生にかけて判断するしかないもの&lt;/strong&gt;、なのだろう。&lt;/p&gt;&#10;&lt;p&gt;その点で、ATOKは確かになにか失っていたのではないか。最安プランが廃止されたことで運用コストと単価は上がったのかもしれず、見た目の数値は変わらなかったりもしかすると改善すらされていたりするかもしれないのだが、それはどこまでも数値である。失われた数の中に、三十年来使ってきたユーザがこんな終わりかと吐き捨てるようなツイートがあったことなど、ジャストシステムは知るまいな。&lt;/p&gt;&#10;&lt;h2 id="結局google"&gt;結局Google&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで、結局またGoogle日本語入力を使っている。まぁそもそも、LinuxでMozc使っている時点で今更ではある。わかっていたけど身も蓋もないので言わなかった。なんか最近のGoogleは他社に比べると相対的にマシな気がしてきた。AIプログラミングはAntigravityを使っている。結局Googleやないかい。&lt;/p&gt;&#10;&lt;p&gt;ま、使えればなんでもいいのよ。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/atok-premium/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ランボー怒りの解約：ATOK値上げ強制移行&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/atok-premium/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-41.webp" alt="ランボー怒りの解約：ATOK値上げ強制移行" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>MBP 2019の画面をぶつけたら何もしてないのに壊れたので使い道を考えたい</title><link>https://hack-le.com/mbp-2019-display/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/mbp-2019-display/</guid><description>&lt;p&gt;2020年の初売りでGetしたMBP 2019、実は昨年(2025年)の6月にお亡くなりになっていました。画面をなんかこう、棚的なものにぶつけたところ、その一撃で画面が映らなくなってしまったのです。何もしてないのに壊れたと言って差し支えないでしょう。&lt;/p&gt;&#10;&lt;p&gt;外部ディスプレイに接続すると使えるので、まだ最後の用途としてサーバ用途が残っています。ただ問題は、すでにうちにはサーバがある、ということです。&lt;/p&gt;&#10;&lt;h2 id="今見るとアレなスペック"&gt;今見るとアレなスペック&#10;&lt;/h2&gt;&lt;p&gt;MBP2019は、常用するラップトップとしてはスペック的にはややつらいところがあります。&lt;strong&gt;今見ると4コア Core-i5 1.4GHzというのは罰ゲームのようなスペック&lt;/strong&gt;です。それでも当時としては「やった！」という感じでした。「やっとか……」というほうが近かったかもしれませんが……。その少し前までは、&lt;strong&gt;徹底的に舐めプしていたIntelの陰謀&lt;/strong&gt;によりラップトップは2コアしかない冬の時代が続いていたために、4コアでも十分に思えました。&lt;/p&gt;&#10;&lt;p&gt;いやまったく、&lt;strong&gt;2018年までMacでノートとはいえプロの名を冠したモデルのCPUで2コアしかなかったのは異常だった&lt;/strong&gt;と思います。RyzenのおかげでIntelもようやく重い腰をあげて真面目にやり始めたわけですが、特に省電力などが重視されるラップトップ向けでマトモと言えるものが出るには、さらにもうしばらく時間がかかりました。そしてようやく追いついてきたかと思いきや、13-14世代の不具合問題。Intelは2010年代ににはもうだいぶ腐っていたのかもしれませんね。AppleがSoCの自社開発を進めたのは、Intelいい加減にしろみたいな気持ちもあったりするんでしょうか。&lt;/p&gt;&#10;&lt;p&gt;まぁIntelは過去にも危うい時期はあったので、また復活すると思いたいところですが、今のところはあまり芳しくない感じです。Alteraも結局売却ですし、全体的に迷走している感が否めませんね（「&lt;a class="link" href="https://www.publickey1.jp/blog/25/fpga_1.html" target="_blank" rel="noopener"&#10; &gt;インテル、分社化したFPGA部門「アルテラ」を投資会社へ売却すると発表 － Publickey&lt;/a&gt;」）。AIバブルの中で、彼らは一緒に弾けるのか、それとも踏ん張るのか。&lt;/p&gt;&#10;&lt;h2 id="居場所がない"&gt;居場所がない&#10;&lt;/h2&gt;&lt;p&gt;さて、Intelのことはいいのですが、それで結局のMBP 2019をどうしてくれようというところです。外部ディスプレイ出力は生きているためにデスクトップとしては使えますし、また純粋にサーバとしても使えます。つまり、&lt;strong&gt;このMBPはキーボードとトラックパッド、バッテリーがついたMac mini&lt;/strong&gt;という風にも考えられます。&lt;/p&gt;&#10;&lt;p&gt;そう考えると使い道はあると思うのですが、うちには既にメインデスクトップとしてM2 Pro mac miniがあり、また高負荷に耐えるサーバとしてIntel Mac mini 2018があります。そもそもサーバ用途としては30台を超えるジャンクPCがあります（狂気）。&lt;/p&gt;&#10;&lt;p&gt;こうなると、既に家には居場所がないのですねぇ。まぁ無理に使う必要はないと言われればそれまでなのですが…。&lt;/p&gt;&#10;&lt;p&gt;なーんかないかなぁ…。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mbp-2019-2025/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;6年目に突入するMacBook Pro 2019&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mbp-2019-2025/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/01/mbp2019-2025.webp" alt="6年目に突入するMacBook Pro 2019" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>初心者がAIプログラミングをする最初の課題は何が良いか</title><link>https://hack-le.com/aiprogramming-shoshinsha/</link><pubDate>Mon, 23 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/aiprogramming-shoshinsha/</guid><description>&lt;p&gt;ずっとAIプログラミングをみんなでやって世界中のITエンジニアを壊滅させる方法を考えているんだけれど、実際に自分がやっていることを言語化してみると、本当に非エンジニアだとやっぱり難しいよなぁと思った。&lt;/p&gt;&#10;&lt;h2 id="aiプログラミングはなにが難しいのか"&gt;AIプログラミングはなにが難しいのか？&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;つくるだけならいいと思う&lt;/strong&gt;んだよね。多分、それらしいものができる、まではけっこう多くの人がたどり着けると思う。&lt;strong&gt;問題は、それをずっと使えるのか&lt;/strong&gt;。バグが発生したときになおせるか。内部的なアップデートなどで壊れたときに対応できるか。機能の改修をしても問題なく使い続けられるか。&lt;/p&gt;&#10;&lt;p&gt;これはけっこう難しい、というかほぼ無理なんじゃないかな。勉強がすることが多い。&lt;/p&gt;&#10;&lt;p&gt;ただ個人的には道筋がないとは思っていなくて、やりながら学んでいけるルートはあるんじゃないのか？とは思う。だからそこに至るまでの課題設定が重要。課題がすべて。&lt;/p&gt;&#10;&lt;p&gt;では具体的にどんな課題なら良いのか？条件をいくつか考えた。&lt;/p&gt;&#10;&lt;h2 id="自分でデータを持たないもってもテキストファイルかexcel"&gt;自分でデータを持たない、もってもテキストファイルかExcel&#10;&lt;/h2&gt;&lt;p&gt;まず、&lt;strong&gt;自分でデータを持たないものが良い&lt;/strong&gt;。自前のデータベースやルールに沿ったファイル保存をしない。&lt;/p&gt;&#10;&lt;p&gt;わかりやすいのは、毎回まっさらなスタート。たとえば質問に答えるだけとか、画像を受け取ったら文字列にするだけとか。いわゆるフィルタ処理に特化する。前回の入力をベースにして処理をする、みたいなことをしない。今までの記憶をしない。&lt;strong&gt;次の入力として再利用しないなら、ファイル保存はOK&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁこの制約で自分にとって役立つユースケースはそんなにないかもしれないが、最初からデータには手を出さないほうがいい。&lt;/p&gt;&#10;&lt;p&gt;なぜかというと、&lt;strong&gt;自前のデータベースの長期的な運用は普通に仕事レベルだから&lt;/strong&gt;だ。AIに指示してカジュアルに機能追加していたらデータベースは絶対壊れる。保証する。壊れる。そんで二進も三進もいかなくなる。&lt;/p&gt;&#10;&lt;p&gt;だったら、最初から自前のデータベースみたいなもんはいらねぇ、と割り切ってしまうのがよい。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと。「自分でわかるならいいんでしょ」の精神で、&lt;strong&gt;テキストファイルやExcelを最終出力にするのはアリ&lt;/strong&gt;。まぁむしろこれが現実的かも？ただそれを入力として再利用する、みたいなのにすると、やっぱり事故りやすくはなると思うが、対応はまぁ頑張ればできると思う。&lt;/p&gt;&#10;&lt;p&gt;あとは、自前じゃなければいいんでしょう？ということで、&lt;strong&gt;最終的なデータの管理をクラウドサービスが請け負うタイプ（つまりSaaS）はアリ&lt;/strong&gt;ではある。個人的にはSaaSを使いたくないからAIプログラミングだろう！と思うが、まぁ現実的には中々すぐにそういうわけにはいかないかもしれない。この場合は、SaaSと繋がりやすくするための土管を作る感じになる。&lt;/p&gt;&#10;&lt;h2 id="インターネットに公開しない"&gt;インターネットに公開しない&#10;&lt;/h2&gt;&lt;p&gt;この制約は厳しいかもしれないが、最初の一歩は&lt;strong&gt;アクセスできるのはLAN内のみ&lt;/strong&gt;とする。インターネットから、つまり外でスマホからアプリにはアクセスできない。この理由は明確だろう。セキュリティ上の問題だ。当たり前に思うんだが、なんだかどうもカジュアルにフルオープンして事故っている人の話なんかが、OpenClawとかで聞こえてくるので…。&lt;/p&gt;&#10;&lt;p&gt;外からアクセスしたくなるのはわかるが、そのためには勉強が必要。ここはAIに任せない。インターネットは戦場なので、最初から突撃しない。泳いだことないのにいきなり海で泳ごうとしない。AIはあなたを守らない。責任を取らない。取れない。&lt;/p&gt;&#10;&lt;p&gt;まぁランディングページのような静的なページをホスティングサービスにあげる、ならアリではある。結局SaaSになってしまうし、そっちはそっちでホスティングの難しさがあるんだが…。&lt;/p&gt;&#10;&lt;p&gt;あと、アプリからインターネットの情報にアクセスするのはいいよ。別に天気の情報取得するのになんも悪いことないよね。スクレイピングは禁止のサイトがあることや、1つのサイトに秒速でアクセスしまくるとかはやめよう。&lt;/p&gt;&#10;&lt;h2 id="ユーザ管理しない"&gt;ユーザ管理しない&#10;&lt;/h2&gt;&lt;p&gt;ユーザ管理というと多義的なんだが、まぁつまり&lt;strong&gt;AさんとBさんで権限が変わるみたいなのはしない&lt;/strong&gt;。ログインなし。&lt;strong&gt;全員同じ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁなんでかっていうと、どうしてもクレデンシャルの問題が出てきて、事故りやすくなる。これはセキュリティの問題であり、プライバシーの問題でもある。本当にプライバシーが守られているか、どうやってわかるのか。&lt;/p&gt;&#10;&lt;p&gt;またユーザの登録削除は現実の運用フローと密接なつながりもあり、ややこしい。最初はよくても中長期的にはしんどくなるだろう。&lt;/p&gt;&#10;&lt;h2 id="課題の立て方"&gt;課題の立て方&#10;&lt;/h2&gt;&lt;p&gt;この制約でAIに考えさせたら以下のようなのが出てきた。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;録音をアップロードしたらテキスト化する議事録アプリ&lt;/li&gt;&#10;&lt;li&gt;メモを所定のフォーマットに整えるような整形ツール。&lt;/li&gt;&#10;&lt;li&gt;所定の条件に沿った翻訳ツール。&lt;/li&gt;&#10;&lt;li&gt;レシートの文字起こし&lt;/li&gt;&#10;&lt;li&gt;ニュースサイトから最新の時事ネタをとってきて要約するツール&lt;/li&gt;&#10;&lt;li&gt;ECサイトの商品価格比較ツール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;なんか教科書にのってそう。どれも一般的過ぎて面白くないだろうね。そうじゃなくて、&lt;strong&gt;もっとこう、世界中で欲しいのは多分自分だけ、みたいなのがいい&lt;/strong&gt;よ。その考え方が一番のポイントかもしれんね。たとえ&lt;strong&gt;習作でも、使うアプリを作りたい&lt;/strong&gt;。他人じゃなくて、&lt;strong&gt;自分がほしいもの&lt;/strong&gt;をつくろう。それが&lt;strong&gt;自分だけがほしいものなら最高&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;p&gt;僕だったらそうだなぁ…「特定のゲームアプリの起動を監視して、起動時刻をCSV出力する」そして見返して反省する。まぁ作らないけど、方向性として、こういうめちゃニッチなやつがいいよ。&lt;/p&gt;&#10;&lt;h2 id="基本は土管"&gt;基本は土管&#10;&lt;/h2&gt;&lt;p&gt;だいたい以上かな。これらの条件が揃った課題であれば、プログラミングをやったことがない人でも作りやすいうえに、必要に応じて改修もできて、また長く使えるんじゃないかなーと思う。&lt;/p&gt;&#10;&lt;p&gt;まぁ、必要な処理に特化したものだね。つまり土管。パイプです。保存するものを作るなら、自分でもわかるテキストファイルやExcelなどスプレッドシートのファイルにしよう。&lt;/p&gt;&#10;&lt;p&gt;作っている間に、いろいろ学べることもある。そうすれば、もっとたくさんのことができるようになるだろう。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aiprog/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIプログラミングで作ったもの実例集&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aiprog/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/03/eyecatch_48966_1774943837.webp" alt="AIプログラミングで作ったもの実例集" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aiantigravitywebapp/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【AIプログラミング】AntigravityでWebアプリを制作するときの最初の指示で土台を作るまで&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aiantigravitywebapp/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/03/ae62ebe55ab9af18d7518ff2d9578d20-scaled.webp" alt="【AIプログラミング】AntigravityでWebアプリを制作するときの最初の指示で土台を作るまで" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>M5 MacBook Air を見ておく。誰向けなのかよくわからん</title><link>https://hack-le.com/m5-macbook-air/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/m5-macbook-air/</guid><description>&lt;p&gt;特に買う予定はないんだが、なんか欲しくなったときにあらかじめ調べておくと捗るので、先日2026年3月より発売されたM5 MacBook Airについても一応見ることにした。&lt;/p&gt;&#10;&lt;h2 id="スペック"&gt;スペック&#10;&lt;/h2&gt;&lt;p&gt;例によって雑に比較する。Geminiに適当につくらせるとAppleのスポークスマンみたいな提灯テーブルだったので、適当につっこんで修正。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;MacBook Air (M4)&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;MacBook Air (M5)&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;プロセッサ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;M4チップ (3nm)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;M5チップ (改良版3nm / N3P)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10コア (P-core 4コア)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10コア (&lt;strong&gt;Super Core 4コア&lt;/strong&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;GPU&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8/10コア&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8/10コア (Neural Accelerator)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Neural Engine&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16コア (最大38 TOPS)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;16コア&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;メモリ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16GB〜 120GB/s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;16GB〜 (153GB/s)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ストレージ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;256GB～&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;512GB～&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ディスプレイ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Liquid Retina (500ニト)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Liquid Retina (変化なし)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ワイヤレス通信&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Wi-Fi 6E / BT 5.3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Wi-Fi 7 / BT 6.0&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;バッテリー駆動&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;52.6 Wh / 66.5Wh&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;52.6 Wh / 66.5 Wh&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;外部ポート&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Thunderbolt / USB 4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Thunderbolt / USB 4 (DP2.1対応)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;価格&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;164,800 円 / 198,800 円&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;184,800円 / 219,800円&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;各種コア数は変わってないんだけれど、アーキテクチャ変更がそこかしこにあるという感じだが、ちょこちょこと「ん？」というところがある。&lt;/p&gt;&#10;&lt;p&gt;個人的に気になったところいくつか。&lt;/p&gt;&#10;&lt;h3 id="伝説のスーパーコア"&gt;伝説のスーパーコア&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;まず問題はSuper Coreである&lt;/strong&gt;。なんだそれは。これはどうも例によってApple様がまた名前を変えたらしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/pcuser/articles/2603/06/news114.html" target="_blank" rel="noopener"&#10; &gt;突然の「スーパーコア」誕生と消えたEコア――Apple M5 Pro／Maxが断行した「CPU大再編」を読み解く：本田雅一のクロスオーバーデジタル（1/3 ページ） - ITmedia PC USER&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;実際、既に2025年10月より発売されていたM5 MBPではPコア/Eコアだったが、今回の発表で遡及的に変更されたことから、これは呼称の変更があったと言っていいのだろう。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;ところが、今回のM5 Pro／Maxチップの発表に伴い、Appleは&lt;strong&gt;CPUコアの呼称を“遡及的に”変更&lt;/strong&gt;し、従来のPコアを「スーパーコア」に改めた。「MacBook Pro」の製品情報サイトを見てみると、既に発売済みのM5チップモデルの&lt;a class="link" href="https://www.apple.com/jp/macbook-pro/specs/" target="_blank" rel="noopener"&#10; &gt;スペック&lt;/a&gt;において、従来は「高性能コア」と書かれていた部分が「スーパーコア」に置き換わっている。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;しかしこれはさらにややこしいことが起きているようで、MBAでは関係ないが、M5 Pro/Maxチップのほうでは、Eコアそのものが廃止され、そこにPコアという名前でまた別のやつがあるんだとさ。何を言っているのかわからんと思うが僕もわからん。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;一方で、M5 Pro／Maxチップには、従来のPコアの代わりに&lt;strong&gt;新しい「Pコア」&lt;/strong&gt; が搭載された。要するに、M5チップとM5 Pro／Maxチップで&lt;strong&gt;同じ名前なのに位置付けの異なるPコアが搭載された&lt;/strong&gt;ということになる。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://www.itmedia.co.jp/pcuser/articles/2603/06/news114.html" target="_blank" rel="noopener"&#10; &gt;突然の「スーパーコア」誕生と消えたEコア――Apple M5 Pro／Maxが断行した「CPU大再編」を読み解く：本田雅一のクロスオーバーデジタル（1/3 ページ） - ITmedia PC USER&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;記事によると、新しいPコアは高性能なEコア（高効率コア）では？と推測されている。またさらに穿った見方として、Apple的にはEコアも十分な性能で省電力みたいな扱いを受けるのは不服であり、Pro以上ではEコアを排してそこに新設計のPコアを置いたということなんかも、と踏み込まれていた。&lt;/p&gt;&#10;&lt;p&gt;ただそれならそれで別の名前にすればいいわけで、さも従来のPコアがそのままPro以上ではスライドされたかのような印象を与える命名は、やはり不誠実な気もする。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、今回から&lt;strong&gt;SoCの命名は大きな変化があった&lt;/strong&gt;、ことは抑えておく必要がありそう。&lt;/p&gt;&#10;&lt;h3 id="gpuのai対応"&gt;GPUのAI対応&#10;&lt;/h3&gt;&lt;p&gt;次になにこれ？と思ったのはNeural Acceleratorだが、これは要はGPUの中でAI最適化をすすめたもの、と受け止めた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://macfan.book.mynavi.jp/article/75019/" target="_blank" rel="noopener"&#10; &gt;M5チップ徹底解剖②AI性能を支える「Neural Accelerator」とは？ | Mac Fan Portal&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;生成AI時代にNEはどう考えても力不足。結局GPUだよねという現実。M4ではCPU内にもアクセラレータができていたんだね。M4全然見てなかったわ。M2 Pro買ってて悔しかったから。やっぱ毎回追わないと、後で追うのが面倒くさいな。&lt;/p&gt;&#10;&lt;p&gt;つまりCPUにもGPUにもAIのアクセラレータがあるわけで、NEとはなんだったのかみたいな感じになっている。TOPSの公表してないのもAI性能を誤解させると思ったのだろうか。というかウリになってないしなぁ。もう誰もMacのNE見てない。&lt;/p&gt;&#10;&lt;h3 id="通信規格は変わったけどどうでもいいや"&gt;通信規格は変わったけどどうでもいいや&#10;&lt;/h3&gt;&lt;p&gt;個人的には無線規格については既に飽和している感あるため、どうでもいい感。Wi-fi 7までいってたのか。もうFFのナンバリングくらいどうでもよくなってる。ただあんまり見てなかったんだけど、6GHzっていつの間にか対応になってたんだね。電波法だと2022年9月かららしい。使える帯域が増えているのは確かにいいだろうな。&lt;/p&gt;&#10;&lt;p&gt;あとWi-fi 7はなんか複数周波数帯を同時に受けて良しなにするみたいなことできるっぽいんだが(MLO, Multi-Link Operation)、個人的にはこういう荒業は懐疑的。電波は電波だし、同じデータが全周波数できているわけでもないし。&lt;/p&gt;&#10;&lt;p&gt;まぁいずれにせよWi-fi 7対応のルータ持ってないし持つ気もないからどうでもいい。&lt;/p&gt;&#10;&lt;h3 id="高い"&gt;高い…&#10;&lt;/h3&gt;&lt;p&gt;若干あきらめの境地に達しているが高い。とはいえSSDが512GBになっているし、止まらない円安を考えると、粘っているほうかもしれない。ただ正直ユーザとしては「値段なりに上がった」という感じがする。&lt;/p&gt;&#10;&lt;p&gt;正直体験としてはM4と変わらんだろうと思われる。&lt;/p&gt;&#10;&lt;p&gt;まぁMacBook Neoモデルが出たことで、気兼ねなくなったところはあるだろう。コスパ勢はNeo買ってねってことか。&lt;/p&gt;&#10;&lt;h2 id="誰向け"&gt;誰向け？&#10;&lt;/h2&gt;&lt;p&gt;先日のMacBook Neoが非常に明確なターゲット層が見えたのに対し、&lt;strong&gt;このAirはややぼやけている&lt;/strong&gt;と思った。&lt;/p&gt;&#10;&lt;p&gt;スペック的には悪くはないが、熱なども考えるとやはり本格開発には向かないだろう。とはいえライトに使うならたいてはNeoで十分な気がする。&lt;/p&gt;&#10;&lt;p&gt;つっても、&lt;strong&gt;もはやMBPはお値段がたいへんなことになってしまっている&lt;/strong&gt;ので、&lt;strong&gt;少しでも費用を抑えながら開発したい、とか制作系の作業をしたい、という向きにとっては希望なのかもしれない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;個人的にはそれだったらMac miniのほうが良いのでは…という気もするが…まぁMac miniは昔からニッチ受けなんだよなぁなぜか。Mac miniではキラキラできないからなの？&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;どうしてもMBA買うなら、M5と同じ価格ならM4の整備済みでメモリ盛ってるやつを買うほうがいいと思う&lt;/strong&gt;。たとえば今見たらこんなのがストアに出ていた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.apple.com/jp/shop/product/fc6j4j/a/15%E3%82%A4%E3%83%B3%E3%83%81MacBook-Air-%5B%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81%5D-10%E3%82%B3%E3%82%A2CPU%E3%81%A810%E3%82%B3%E3%82%A2GPU%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9FApple-M4-%E3%83%81%E3%83%83%E3%83%97-%E3%82%B7%E3%83%AB%E3%83%90%E3%83%BC" target="_blank" rel="noopener"&#10; &gt;15インチMacBook Air [整備済製品] 10コアCPUと10コアGPUを搭載したApple M4チップ - シルバー - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;15インチ, 512GB SSD, 24GB RAMで193,800円となっている。M5の22万より安いが、&lt;strong&gt;RAMという物理的な優位性のほうが、ここまでに見てきたアーキテクチャ的な改善を上回る&lt;/strong&gt;だろう。整備済みはつまり中古ではあるけれど、Appleが保証しているだけあって、個人的には新品と遜色ないと思っている。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;特に買う気はないんだが、MacBook Neoが割と興味深かったので、そういやMBAは今どんな感じなんだろうと思って調べた。まぁたまに調べておかないと、ほしくなったときに調べるのがだいぶメンドクサイし、それに一応世情の動きも多少は抑えておく必要はあるだろう。&lt;/p&gt;&#10;&lt;p&gt;僕にわかる世情なんて計算資源のことしかないのだから、これは多少面倒でも見ておくのが世間との繋がりというやつになるかもしれないしならないかもしれない。&lt;/p&gt;&#10;&lt;p&gt;折を見てMacBook Proも見ていくかな。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/macbook-neo-review/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;MacBook Neoは実用に即して削ぎ落されている&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/macbook-neo-review/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/03/eyecatch_48574_1773331941.webp" alt="MacBook Neoは実用に即して削ぎ落されている" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>MacBook Neoは実用に即して削ぎ落されている</title><link>https://hack-le.com/macbook-neo-review/</link><pubDate>Sat, 14 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/macbook-neo-review/</guid><description>&lt;p&gt;久しぶりにMacの話題でも。&lt;/p&gt;&#10;&lt;p&gt;先日2026-03-11に発売されたMacBook Neoは、久方ぶりの攻めたモデルというか、最近はAppleの悪口を言うことが多くなってしまった僕でも、少し欲しいと思わされるものだった。実際整備済み品とかで安くなっていたら衝動でポチる可能性がある。…USキーボードならね。&lt;/p&gt;&#10;&lt;h2 id="スペック"&gt;スペック&#10;&lt;/h2&gt;&lt;p&gt;スペックはGeminiにまとめさせたところでは以下のようになっている。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;詳細&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;価格&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;256GBモデル：99,800円 / 512GBモデル：114,800円（税込）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;プロセッサ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Apple A18 Pro&lt;/strong&gt;（iPhone 16 Proと同じチップを採用）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ディスプレイ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;13.0インチ Liquid Retina（2,408 x 1,506、500ニト）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;メモリ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8GB（ユニファイドメモリ）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;重量 / 厚さ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.23kg / 1.27cm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ポート&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;USB-C x 2（&lt;strong&gt;手前側はUSB 2&lt;/strong&gt;、奥側はUSB 3/DisplayPort対応）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;メモリ8GBに怨嗟の声が上がっているが、昨今のメモリ価格の異常な高騰を思うと、どうにもならない気がする。とはいえ、軽量Linuxならともかく、&lt;strong&gt;大飯喰らいのmacOSなのにそんなメモリで大丈夫か？という心配は妥当&lt;/strong&gt;だろう。&lt;/p&gt;&#10;&lt;p&gt;しかしまぁ、このマシンで想定される用途ならば問題ないのではなかろうか。それはWebブラウジングであり、メールであり、ちょっとしたアプリケーションである。dockercontainer前提の開発ではないしDTMではないし動画制作ではない。まぁちょっとした編集くらいはあるかもしれないけれど、その程度のものだろう。&lt;/p&gt;&#10;&lt;p&gt;であるならば、まぁ確かにメモリは常にカツカツかもしれないんだが、大して気にならないのではないかな、と思う。実際ほんの少し前までMacBook Proの吊るしが8GBだったくらいなんだから…（あれはどうかと思ったが）。&lt;/p&gt;&#10;&lt;p&gt;あと&lt;strong&gt;やや気になるのはUSB-Cの一つがUSB 2であるところ&lt;/strong&gt;だろうか。ここは人によってはゲッてなるかもしれないねぇ。&lt;/p&gt;&#10;&lt;h2 id="よく考えられていると思った"&gt;よく考えられていると思った&#10;&lt;/h2&gt;&lt;p&gt;それくらいで、&lt;strong&gt;個人的には非常によく考えて削ぎ落されたマシン&lt;/strong&gt;だと思った。&lt;strong&gt;コストの制約の中で、実用を徹底的に考えたもの&lt;/strong&gt;に思う。これは昨今のMacには見られなかった姿勢なので、好印象だ。メンテナンス性も非常に良いらしい。まぁ分解しやすいっていうだけで、SSDメモリのアップグレードはできないんだけどね。&lt;/p&gt;&#10;&lt;p&gt;まぁでも昨今メモリもストレージも高いので、このエントリークラスMacを使うならそのまま使うのがいいように思う。ストレージが256GBで足りるかは人によるかな。&lt;strong&gt;512GBモデルは指紋認証もつく&lt;/strong&gt;ので、15,000円の価格差をどう考えるところは悩ましいが、まぁそこまで悪くはないと思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;この価格帯での唯一無二はやっぱり13インチRetinaだね&lt;/strong&gt;。Retinaは初めて使った時本当に感動したな。10万クラスでこの画面の綺麗さは他にないのではないかな。&lt;strong&gt;この綺麗さは単に解像度じゃない&lt;/strong&gt;んだよな。画面って、普段使いでは本当に大事だよ。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;筐体がアルミなのも、美しいだけじゃなく熱伝導性の観点で良い&lt;/strong&gt;のだろう。見掛け倒しは嫌いだけど、見た目と実利が両立しているのは好き。まぁあっついけどね。今日もうちの2台あるMac miniは目玉焼き焼けそうなほどに激熱だよ。激熱だけど24時間サーバ稼働で、1台はもう7年選手だけど全然現役だからねぇ。&lt;/p&gt;&#10;&lt;p&gt;あと&lt;strong&gt;静音性についても期待したい&lt;/strong&gt;。ファンレス設計のようだし静かだと思うよ。&lt;strong&gt;音もね、カタログスペックには出てこないけど普段使いで実は重要&lt;/strong&gt;なんだよ。まぁいくら熱伝導性がいいといったって、ファンレスで重い作業はできないだろうが。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、PCを使ったごくごく基本的な作業においては、非常に快適なんじゃないのかなぁ、と思うんだよ。そりゃ開発だの制作だのと言ったヘビーなことには当然使えないと思うけど、&lt;strong&gt;多くの人にとっては最適な一本&lt;/strong&gt;なんじゃないかな。正直ほかのPCメーカはしんどいと思うよ。&lt;/p&gt;&#10;&lt;p&gt;15年前、ジョブズ晩年の頃は、MacはWindowsマシンよりハードウェアとしてもコスパ高かったことを思い出す。今のMacBook AirやProはちょっと買う気になれないけれど、このNeoはいいんじゃないかな。ま、最近はジャンクPCとLinuxにハマりつつあるから、買わないと思うけどね。買わないんじゃないかな、多分…。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m2-pro-mac-mini-1-5/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac mini を購入して1年5か月経過：静かに革命&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m2-pro-mac-mini-1-5/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/04/zakki-image-2.webp" alt="M2 Pro Mac mini を購入して1年5か月経過：静かに革命" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>【中古Linux】Core i5-8250Uと8GB RAMでビルドはさすがにつらい、けどそれくらい</title><link>https://hack-le.com/linuxcore-i5-8250u8gb-ram-build/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linuxcore-i5-8250u8gb-ram-build/</guid><description>&lt;p&gt;Linux PC再生計画で、現在モバイル用ラップトップを実際にThinkPad X280にしている。Core i5-8250U、8GB RAM, 512GB SSD、FHDで、スペックとしてはまぁまぁ。バッテリーも生きてる。2万ちょいだったな。粘れば1万円台で落とせたと思うんだけど間違えて即決してしまったといういわくつきなんだが、それでも相場よりは安く手に入った。&lt;/p&gt;&#10;&lt;p&gt;ほとんどの作業において、特に問題ない。開発についてもどうせクラウド上のAIが頑張るのであって、PCの負荷は大したものではないだろう、できらぁ！と思ってやっていた…のだけれど、さすがにビルド走るとちょっとつらい。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/dd15174c73099fd02b3a66381ab925ef.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;うへぇ。CPUは100%に張り付くしメモリも枯渇し始める。普段は50%くらいなんだけどね。80％いったよね。X280は残念ながらメモリ増設不可能なのだが、L390やDellのLatitudeなら増設したらメモリはなんとかなるけれど、多分どっちかっていうと&lt;strong&gt;CPUのほうがボトルネック&lt;/strong&gt;じゃないかなこの場合。しゃあない。&lt;/p&gt;&#10;&lt;p&gt;まぁでも逆に言うと、つらいのはビルドするときくらいではあるね。普段は全然問題ない。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;devcontainer使ってゴリゴリやる今どきなリッチスタイルは厳しいと思う&lt;/strong&gt;けど、&lt;strong&gt;慎ましやかにネイティブで動かす分にはまぁ十分&lt;/strong&gt;。ビルドは重いけど常にビルドするわけでもなし。&lt;/p&gt;&#10;&lt;p&gt;ただちょっと気になっているのは、エレコムのUSBドングルなトラックボールマウスを使っているのだけれど、ちょいちょいプチフリっぽくなるんよね。これは個体の相性的問題なのかどうか。他のPCでは確認できていない事象なので、相性かも…。&lt;/p&gt;&#10;&lt;p&gt;ま、なんにしても、&lt;strong&gt;モバイルとしては十分な性能だと思った&lt;/strong&gt;。中古PCで十分だね。第8世代なんで内蔵グラフィックスはしょっぱいけどね。それはまぁ仕方ない。&lt;/p&gt;&#10;</description></item><item><title>2026年でもPixel 7のほうがPOCO F7より使いやすい</title><link>https://hack-le.com/2026-pixel-7-poco-f7/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/2026-pixel-7-poco-f7/</guid><description>&lt;p&gt;Pixel 7で戦い続けると言いながら、2025年12月にPOCO F7を買ってしまっていた。だいたい4万円といったところ。&lt;/p&gt;&#10;&lt;h2 id="お買い上げの流れ"&gt;お買い上げの流れ&#10;&lt;/h2&gt;&lt;p&gt;正直そんなに欲しいと思っていたわけではないのだけれど、メモリのバカみたいな高騰があって、ストレージも値上がりするだろうことは明らかで、当分はその解消の見込みもなく、PCが即座に値上げの空気…という中で、スマホの値上がりは時間の問題だと思ったんだよね。&lt;/p&gt;&#10;&lt;p&gt;家にあるのはPixel 7だけ。もしもこの子がいかれたら買わないわけにはいかないが、その時にスマホが値上がりしていたら悔しい。どうせもうスマホのスペックなんて飽和してるしなぁ。&lt;/p&gt;&#10;&lt;p&gt;なんてことを思ったとき、一応もう一台持っておいたほうがいいかなぁ、なんて思ったんだね。独立してから&lt;strong&gt;仕事専用のスマホがほしい&lt;/strong&gt;とも思っていたし、仕事用として使って、もしPixel 7がいかれたらコイツが予備になって無駄にならないな、とかそういう算段。あるいは買う言い訳…。&lt;/p&gt;&#10;&lt;p&gt;それでまぁ、ちょうどXiaomiのPOCO F7が少し安くなっていたのを見て、ぽちった、という流れ。まぁ実際、その後高くなっているので、判断は悪くなかったと思う。&lt;/p&gt;&#10;&lt;h2 id="スペックの比較-poco-f7が圧倒しているが細かな機能が削がれている"&gt;スペックの比較: POCO F7が圧倒しているが細かな機能が削がれている&#10;&lt;/h2&gt;&lt;p&gt;まぁ予備というか、2022年発売のPixel 7に対して、POCO F7は2025年発売。スペックだけ見ればPixel 7を圧倒しているんだけどね。以下はGeminiにまとめさせた。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;Google Pixel 7&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;POCO F7&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;発売時期&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2022年10月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2025年6月&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ディスプレイ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6.3インチ OLED (90Hz)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6.83インチ AMOLED (120Hz)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;解像度&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1080 x 2400 (FHD+)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1280 x 2772 (1.5K)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;チップセット&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Google Tensor G2&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Snapdragon 8s Gen 4&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RAM / ストレージ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8GB / 128・256GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;12GB / 256・512GB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;背面カメラ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;50MP(広角) + 12MP(超広角)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;50MP(広角) + 8MP(超広角)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;前面カメラ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10.8MP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20MP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;バッテリー&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4,355mAh&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;6,500mAh&lt;/strong&gt; (印版は7,550mAh)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;充電速度&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;有線20W / ワイヤレス対応&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;有線90W&lt;/strong&gt; / &lt;strong&gt;ワイヤレス非対応&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;防水・防塵&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IP68&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IP68 / IP69&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;重量&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;197g&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約215.7g&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Android 13 (16まで対応)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Android 15 (HyperOS 2)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;ワイヤレスチャージできない&lt;/strong&gt;、というところを除けばPOCO F7の圧勝。ただこの表にない重要な項目としては、&lt;strong&gt;POCO F7はSuica非対応、eSIM非対応&lt;/strong&gt;、がある。eSIM非対応は買ってから気づいたよね。盲点だった。&lt;/p&gt;&#10;&lt;p&gt;個人的には&lt;strong&gt;ワイヤレスチャージとSuica非対応は残念&lt;/strong&gt;ではあるんだけれど、まぁいいかと思えるくらいの範囲だ。それよりもスペックの高さのほうが目を引く。予備というか、メインスマホになるんじゃないかな…なんて思っていた。&lt;/p&gt;&#10;&lt;h2 id="ゲーム以外ではpixel-7のほうが操作感が上"&gt;ゲーム以外ではPixel 7のほうが操作感が上&#10;&lt;/h2&gt;&lt;p&gt;思っていたのだが、購入して3か月近く経過しているものの、&lt;strong&gt;相変わらずPixel 7がメインスマホ&lt;/strong&gt;になっている。総じて、Pixel 7のほうが使いやすかった。&lt;/p&gt;&#10;&lt;p&gt;なんだろう、&lt;strong&gt;スペックはPOCO F7のほうが上のはずなんだけれど、実際の操作感はPixel 7のほうが上&lt;/strong&gt;なんだよ。RSSリーダーで記事を読むとか、文字入力するとか、そういうちょっとしたところで、どういうわけかPOCO F7はひっかかることがあるんだ。本当になんで？&lt;strong&gt;スペックでは圧倒しているはずなのに！！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;しかし確かに、ゲームとか動かすと、POCO F7のほうが3Dグラフィックとか上だなと感じた。感じたけれど、僕は&lt;strong&gt;スマホでゲームやらない&lt;/strong&gt;んだよ。だからあまり恩恵がない。&lt;/p&gt;&#10;&lt;h2 id="画面の大きさの壁"&gt;画面の大きさの壁&#10;&lt;/h2&gt;&lt;p&gt;画面が大きいのもよくなくて、どうも僕の手のサイズだと、&lt;strong&gt;Pixel 7の6.3インチがぎりぎり使いやすい壁だったらしい&lt;/strong&gt;。Pixel 7はあまり苦も無く操作できるんだけど、6.83インチのPOCO F7はちょっとつらくて、スマホリングが必須になってしまった。&lt;/p&gt;&#10;&lt;p&gt;まぁこれについては僕の手が小さいからであって、&lt;strong&gt;手の大きな人ならばPOCO F7でも問題ない&lt;/strong&gt;かも。でも&lt;strong&gt;僕みたいに小柄な男性や一般的な女性は、たぶんPixel 7のほうがいい&lt;/strong&gt;よ。まぁ僕より手が小さかったら、Pixel 7でも既にスマホリング必須みたいになるかもしれず、その場合はどっちも変わらない、と思うかもしれないけどね。まぁこればかりは触らないとわからないのがつらいところだ。そして&lt;strong&gt;買わないと触れないという&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="poco-f7も悪くはないけど中古のpixel-7のほうが魅力的"&gt;POCO F7も悪くはないけど、中古のPixel 7のほうが魅力的&#10;&lt;/h2&gt;&lt;p&gt;まぁ値段を考えるとPOCO F7も決して悪いスマホではない、というか普通に勧められるものではある。でも正直Pixel 7のほうが使い勝手が良いと思うとは思わなかったな。今イオシスみたら、32,800円でAランク品があった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/image-700x321.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://iosys.co.jp/items/smartphone/pixel/pixel7" target="_blank" rel="noopener"&#10; &gt;https://iosys.co.jp/items/smartphone/pixel/pixel7&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;これに対して、POCO F7の新品は現在ちょっと高騰しているようで、タイミング次第だが5万くらいにはなってしまうかも。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;19223&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="https://garumax.com/poco-f7-iijmio-sale-20260216" target="_blank" rel="noopener"&#10; &gt;IIJmioでPOCO F7が29,800円のバグ価格に！一時在庫切れ中なので定期チェックを - ガルマックス&lt;/a&gt;」ということも先日あったようだが、3万円はガルマックスさんの言う通りバグ価格で、ゲットできたらめちゃくちゃラッキーという感じ。狙って買えるものではないと思う。&lt;/p&gt;&#10;&lt;p&gt;で、こうなってくると、&lt;strong&gt;Pixel 7のサポートが2027年までであることを加味しても、新品のPOCO F7より中古のPixel 7のほうが良いのでは？&lt;/strong&gt; と思う。もし僕が今から一台目のスマホが必要で、どちらかを買うならば、たぶん中古のPixel 7にしたと思う。&lt;/p&gt;&#10;&lt;p&gt;まぁそもそもPOCO F7とていつまでサポートされるかは期待できんし。そもそもスマホのサポートが切れたところでなんなの？という気持ちもある（言ってはいけない）。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;スマホゲームをめっちゃやる人ならPOCO F7のほうがいいかもしれないけど、そうでもなければ、Pixel 7のほうが個人的にはおすすめ&lt;/strong&gt;です。&lt;/p&gt;&#10;</description></item><item><title>脱Dropbox再考: そもそも同期は必要か</title><link>https://hack-le.com/datsudropboxsaikou/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/datsudropboxsaikou/</guid><description>&lt;p&gt;&lt;strong&gt;この前Dropboxのプレミアム会員の権利が終わった&lt;/strong&gt;。2020年から&lt;strong&gt;6年&lt;/strong&gt;続けていたらしい。2020年に31,680円で3年分まとめ買いしたのと、2023年にAmazonで29,800円で購入していた。今はもうこの価格で出ることはないだろう。なので6万円ほど（月額約860円）だが、最後の1年はほとんど使っていなかったので、あながち得したともいえない。長期割引の罠にはまってしまった感じはする。&lt;strong&gt;正直なきゃないでよかった&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ただ、Dropbox自体は嫌いなサービスではない。むしろ個人的には好きですらあった。最近アカウントBANの騒ぎがあったのを見た時はちょっと悲しかったけど、全体的には良いサービスだと思う。&lt;/p&gt;&#10;&lt;p&gt;Linuxでも使えるし、Macでは文字コード正規化問題のようなニッチだがクリティカルなところも対応していたし、スクリーンショット横取りなんかは気が利いていたし、カメラアップロードも便利だし、アプリの使い勝手もまぁ悪くないし、復元機能などはかなり強力で何度か助けられたし、なにより&lt;strong&gt;同期という単純ながら難しい課題の精度を着実に上げていた&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Dropboxほどの機能はOSSやNASでは恐らくだいぶ厳しくて&lt;/strong&gt;、僕はQNAPのNASについてきたQSyncという同期アプリを今は使っているが、正直安定性はDropboxに及ぶべくもない。大量のファイルについて読み書きすると平然と取りこぼすので、あまり信用できない感じだ。OSSではNextcloudやSeafileもあるが、あまりマジメに試していないものの、運用者の記事を調べるとやはり苦労していそうな感じがある。&lt;/p&gt;&#10;&lt;p&gt;そこへいくと、業務として同期が必要なのであれば、Dropboxは安心して高いなりの仕事は任せられるのはそうだと思う。本当に必要ならね。&lt;/p&gt;&#10;&lt;p&gt;個人や中小規模において、同期に毎月1,500円払えるかと言われると、それはちょっとどうかな。正直900円くらいでも、よく払っていたなぁと思う。&lt;strong&gt;結局どこまでも経費&lt;/strong&gt;だからねぇ。正直ほとんどオーバースペックと思われる。たいてい、少しの工夫でどうにかなりそうなんだよなぁ。&lt;/p&gt;&#10;&lt;p&gt;そして厳しくなるばかりのアカウントBANリスク。バックアップがわりになるというが、&lt;strong&gt;自宅が火災にあってデータ消失するリスクより、謎のアカウントBANでデータ消失するリスクのほうが現実的に高い&lt;/strong&gt;だろうさ。ちょっと厳しいよなこれは。&lt;/p&gt;&#10;&lt;p&gt;考えてみると、&lt;strong&gt;本当に同期が必要なシチュエーションってもはやあまりない&lt;/strong&gt;んだよなぁ。結局やりたいことは、コンピュータAでやった操作を、コンピュータBで続きができる、ファイルが分裂しないっていうことだと思う。これについて、アプローチとしてはクライアントサーバ型と、すべてのPCにばら撒く分散型があるわけだが、分散が適切な状況ってのはあまりない感じだ。ただDropboxが手軽だったら使っていた。&lt;/p&gt;&#10;&lt;p&gt;その手軽さは、ファイルという実体を直接操作できるところが大きい。しかし&lt;strong&gt;最近は、ファイルを直接操作することはあまりなくて、アプリケーション経由であることが多くなった&lt;/strong&gt;。&lt;strong&gt;セルフホストが手軽になったことや、AIによってちょっとした自分用ツールをサクッと作れるようになったことが大きい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;そうすると、&lt;strong&gt;僕が「そもそも同期する必要あるか？」と疑問に思うようになったのは、ここ数年のAIの隆盛と、セルフホスト・自宅サーバに再び傾倒し始めたことが影響している&lt;/strong&gt;かもしれない。&lt;/p&gt;&#10;&lt;p&gt;Dropboxをはじめとしたクラウドサービスは、アカウントBANに象徴されるように、なんつーか健全な商売にしか使えないというか、自分のプライバシーを預けるにはあまりにも危なっかしい相手になってしまったし、ここらへんが転換期なのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/dropbox-ban/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;DropboxでアカウントBANされた人がいるらしい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/dropbox-ban/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/output-32.webp" alt="DropboxでアカウントBANされた人がいるらしい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>2026年にLinuxで再生するPCの目安: 2013年くらいが契機</title><link>https://hack-le.com/linux-pc-2013/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linux-pc-2013/</guid><description>&lt;p&gt;&lt;strong&gt;うちにジャンクPCが今20台くらいある&lt;/strong&gt;。いやもっとあるかも。数えろ。&lt;/p&gt;&#10;&lt;p&gt;だいたい2016-2018年くらいを中心に見ているが、古いやつで2013年なんてのもある。さすがにそれぞれ癖はあるんだが、使ってみると存外ちゃんと動く。もちろんWindowsではない。Linuxを入れている。Linuxといっても、ちゃんとGUIを入れている。まぁ最新のキラキラしたやつではなく、軽量なやつだけどさ。&lt;/p&gt;&#10;&lt;p&gt;それでまぁつくづく思ったんだけれど、これは僕が今まで使ってきたPCの軌跡とも一致する肌感として、&lt;strong&gt;PCのスペックって2012年くらいにもう飽和してたんだなぁ&lt;/strong&gt;、と。具体的にはSandyさんことSandy Bridgeのあたり。うちにはないけど、たぶんデスクトップならSandy Bridge現存していれば全然動くと思う。ものが生きてればね。&lt;/p&gt;&#10;&lt;p&gt;ラップトップでも、家にある2013年のHaswellなやつ（第4世代）を試したところ、ちゃんと動いてくれる。ストレージがSSDでメモリが4GB以上あれば問題ない。4GBだよ、8GBじゃなくね。まぁ作業にもよるんだけど、一般的なオフィスワークなら4GBでいけると思う。&lt;/p&gt;&#10;&lt;p&gt;まぁそれだって大したもんだよ。僕が大学はいる時初めて持たせてもらったPC、もう20年前になるか、Hitachiのプリウスとかいう今はなきブランドだったけど、メモリ512MBだったはず。それで自分で512MBのメモリを買って、ドキドキしながら増設した覚えがある。周りにPC詳しい人なんかいなかったし、本当にビビりながらやってたな。それで1GBだぜすげぇって思ってた。実際1GBメモリってすごいと思う。4GBメモリなんて完全に異次元だった。Windowsは認識すらできてなかったし(32bit時代)。&lt;/p&gt;&#10;&lt;p&gt;でもあの頃から、別にできること変わってない。むしろ減った気がする。あと遅くなったな。なんでもかんでもネットとおして、よくわからない通信してるから。広告表示を待たされるだけのインターネットだった。&lt;/p&gt;&#10;&lt;p&gt;そんなわけだから、&lt;strong&gt;よくわからないことをするOSを入れなければ、第4世代、つまり2013年くらいのPCでも問題なく動く&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;もう少し贅沢を言うなら、&lt;strong&gt;2018年、つまりRyzen後くらいがもう一つの契機&lt;/strong&gt;になるだろう。Intelなら、&lt;strong&gt;第8世代Core i5以降は4コアになるので、これを選んでおけば困ることはない&lt;/strong&gt;。ついでにこの世代になるとUSB Type-Cで給電できたりもして、利便性も上がる。…まぁ、メモリがソルダリングされるというクソな文化もあった時期なので、そこだけ注意なんだが…（ThinkPad X280とか）。&lt;/p&gt;&#10;&lt;p&gt;古いPCを見るならCPUが重要で、ストレージとメモリは最低限の拡張性があればどうにでもなる。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ストレージはSSDならなんでもいい&lt;/strong&gt;。HDDじゃなければいい。SATAかNVMeかどうかはあまり気にしなくていい。NVMeならそれに越したことはないが、SATAと峻別できるハイパーヒューマンはいないと思う。&lt;strong&gt;容量が大事&lt;/strong&gt;。&lt;strong&gt;ストレージとは貯蔵という意味&lt;/strong&gt;である。容量でかいほうが耐久性も上がるし。&lt;/p&gt;&#10;&lt;p&gt;メモリも、&lt;strong&gt;DDR3くらいからはもはや人間に峻別できる領域ではない&lt;/strong&gt;。容量のほうが大事。DDR5なんて高くて熱いだけ。唯一、LLMの推論目当てならば、ユニファイドメモリに価値が出てくるのだが、これはもはや古いPCをLinuxで再生！とは完全に文脈が異なる。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、&lt;strong&gt;ストレージとメモリはマザボの規格に合わせて、容量最重視でよかろう&lt;/strong&gt;なのだ。&lt;/p&gt;&#10;&lt;p&gt;そんな感じなんで、&lt;strong&gt;AIのせいでAI PCが高すぎて買えないとかいうコメディに付き合う必要はなくて&lt;/strong&gt;、今あるPCがあるならそれにLinuxを入れてもいいし、それが怖ければ中古で買ってもいい。&lt;strong&gt;なんか最近OpenClawのためにM4 Mac mini買う人とかいるらしいが、OpenClawのためにそんな高いもんいらん&lt;/strong&gt;からな。ローカルLLMなら別だが、それはスペック跳ね上がるんで。クラウドの大手LLM使う分には、&lt;strong&gt;中古のPCで十分AIできるよ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;Linux前提で中古品買うなら、&lt;strong&gt;個人的には、2018年くらいの、Core i5第8世代の中古PCで、液晶IPSパネルのFHDでメモリ8GB以上のやつを買うのが、コスパよくかつ無難かな&lt;/strong&gt;と思う。Core i3は2コアなので気を付けよう。あと第7世代も2コア。CPUよく見ようね。パネルもHD/TN多いから気を付けよう。&lt;/p&gt;&#10;&lt;p&gt;機種で言えばThinkPad X280とか。メンテナンス性も高いし（地味にCMOS電池の交換しやすいかとか重要）流通量も多く、交換部品も多い。ただThinkPad X280はメモリ換装できないから注意だね。まぁでも16GBメモリバカ高いし（バカ高くなってしまった）、開発者でなけりゃ8GBあればとりあえずいいと思うよ。メモリ変えられるやつだとL390があるけれど、流通量がやや少なく、また見た目も少し無骨になるのと、無線ガチャでRealtekだったりするらしい（変えられるけど）。&lt;/p&gt;&#10;&lt;p&gt;Core i5第8世代、8GB RAM, 256GB SSD, IPSパネルFHD, バッテリー生きてる、くらいのスペックだとPC工房あたりで2-3万円くらいになってるのを記事でみた気がする。中古なんで常にあるかはしらん。Be-Stockなら2万円台で見た。ジャンク狙えばもっと安くいけるけど、苦労が多いしガチャなのでおすすめしない。PCいっぱいほしい！っていう人ならいいけどそういう人は自分で勝手にやるだろう。&lt;/p&gt;&#10;&lt;p&gt;ディストリビューションは、僕はずっとLinux Mint Xfce Editionを入れている。気が向いたら他のも試す。なんかまぁ色々と実録していくので、一人でも多くの人がLinuxに触れるきっかけになるといいなぁと思いつつ。&lt;/p&gt;&#10;&lt;p&gt;世の中に転がる使える計算資源を活かしていきたい。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/linux-pc-3/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【Linux PC再生計画】用途ごとのスペック&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/linux-pc-3/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/02/output-1.webp" alt="【Linux PC再生計画】用途ごとのスペック" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ThinkPad L390 + Linux Mint 22.3 Xfce を使う: CMOS電池交換しました: Linuxマシンとしてすすめられるか？</title><link>https://hack-le.com/thinkpad-l390-linux-mint-22-3-xfce/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/thinkpad-l390-linux-mint-22-3-xfce/</guid><description>&lt;p&gt;今回はThinkPad L390について、例によってLinux Mint 22.3 Xfce を入れていきます。2026年にこの2018年モデルはどこまで戦えるか？&lt;/p&gt;&#10;&lt;h2 id="マシンについて"&gt;マシンについて&#10;&lt;/h2&gt;&lt;p&gt;2018年モデル。細かい仕様についてはAIにまとめさせた「&lt;a class="link" href="https://ai.hack-le.com/thinkpad-l390%e3%81%ae%e3%82%b9%e3%83%9a%e3%83%83%e3%82%af%e3%81%be%e3%81%a8%e3%82%81/" target="_blank" rel="noopener"&#10; &gt;ThinkPad L390のスペックまとめ&lt;/a&gt;」を参照。外観はこんな感じ&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/03/IMG_20260220_180004-700x752.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;なんともなさそうに見えるだろ？&lt;strong&gt;クリックボタン死んでる&lt;/strong&gt;んだぜ、これ…。&lt;/p&gt;&#10;&lt;p&gt;うーん、これはちょっと残念。まぁタッチパッド部分は生きてるので、クリックはできるだけいいんだけれど。まぁジャンクはガチャだから仕方ないね。バッテリー生きてるしOK。もとよりTN液晶ならサーバ用途になるだろうしね。&lt;/p&gt;&#10;&lt;p&gt;そのほかスペックは以下のような感じです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-8265U, 4コア&lt;/li&gt;&#10;&lt;li&gt;DDR4 8GBx1 RAM (空1)&lt;/li&gt;&#10;&lt;li&gt;ストレージなし&lt;/li&gt;&#10;&lt;li&gt;13.3インチ, TNパネル, HD&lt;/li&gt;&#10;&lt;li&gt;バッテリー 78%&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;CMOS切れ&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;キーパッド反応なし&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;無線LANはIntel&lt;/li&gt;&#10;&lt;li&gt;Type-Cで充電可能&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これで7000円といったところでした。USB Type-Cで充電可能なのは有難い。&lt;/p&gt;&#10;&lt;p&gt;無線LANはちゃんとIntelでした。Geminiが言うことにはL390はここは微妙にガチャらしく、Realtekだったりするから、そうだったら交換したほうがいいよと言われていた。AI変なところ詳しい。ちなみにIntel 8265NGWあたりオクとかで探せば500円くらいで手に入ります。&lt;/p&gt;&#10;&lt;p&gt;ストレージは256GB NVMe SSDをつっこみました。そこそこのCPUとRAMなので128GBはやめときました。プラス、CMOS電池の交換。なので総費用は11,000円くらいになりますかねぇ。パーツ高くなったなぁ…。うーん、まぁ一般的には安く仕上げたことにはなるんですけれど、苦労に見合うかと言われると(;´Д｀)&lt;/p&gt;&#10;&lt;p&gt;CMOS電池ですが、バッテリーを取り外さないといけないX280と違い、裏蓋を開けるだけでアクセスできます。ただ交換する時に問題となるのは、ピッチ何mmなのかということ。L390はマイナーなのか、名指しで検索しても出てこないんだわ。しゃーないので実際に開けて番号を確かめる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/03/IMG_20260220_173932-700x933.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;FRU PNは0X0443。Lenovoのページで調べると「&lt;a class="link" href="https://support.lenovo.com/jp/ja/parts-lookup" target="_blank" rel="noopener"&#10; &gt;レノボ PC/サービス部品の検索| 純正交換部品 | レノボ ジャパン サポート JP&lt;/a&gt;」出てきますが中身がCR2016くらいのことしかわからない。「&lt;a class="link" href="https://download.lenovo.com/pccbbs/mobiles_pdf/l390_l390yoga_hmm_en.pdf" target="_blank" rel="noopener"&#10; &gt;https://download.lenovo.com/pccbbs/mobiles_pdf/l390_l390yoga_hmm_en.pdf&lt;/a&gt;」みても2pinということしかわからない無能。&lt;/p&gt;&#10;&lt;p&gt;まぁ&lt;strong&gt;X280と同じコネクタが入った&lt;/strong&gt;ので、X280用で探せばいいと思います。なので2pinかつピッチは1.25mmかな。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;L390はメモリスロットが2つある上に交換もできる&lt;/strong&gt;ので、今から中古でゲットするならX280より良い説があります。最大32GBの拡張性は魅力。とはいえ、今はメモリも高くなってしまったので、16GBとか買おうとするとジャンクの本体代より高くなる勢いなのですが…。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;もうLinux Mint入れるの何台目だよということで、改めて言うことも特にないんですが…。&lt;/p&gt;&#10;&lt;p&gt;Core i5の4コアCPU、8GB RAMということで、xfceで動かす分には何の問題もないですね。クリックボタンきかないのは悲しい。まぁ僕自身はトラックボールマウス使うので、僕が使う分には支障がないのはそうなんだが…そうは言っても、やはりいざというときにはスタンドアロンで使いたいしなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁちょっといじっている感じでは、他に目立った不具合はなさそうかなぁ。&lt;/p&gt;&#10;&lt;p&gt;サーバと思えば、十分すぎるほどに十分。普段使いなら、液晶がTNパネルなのとクリックボタンの死亡がつらい。あと仕様として内蔵グラフィックスはウンコなのでゲームは期待するな（あんまり再生PCでゲームやろうって人はいないと思いますが）。そんなところでしょうか。IPSタイプなら普段使いも耐えると思います…値段跳ね上がるけど。&lt;/p&gt;&#10;&lt;p&gt;サーバでは、メモリ換装すれば今でも第一線でバリバリいけるんじゃないですかねぇ。ま…そのメモリが高いのでどうにもならんのですが。8GB RAMのったジャンクPC集めてクラスタ作ったほうが安上がりになりそうな狂った世界線になってしまった。まぁ、だから20台近くジャンクPC仕入れてかたっぱしからLinux入れていくとかいう狂ったことをし始めたわけですが…。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;全体的には、家庭用Linuxサーバのベースとしておすすめできる機体&lt;/strong&gt;かなと思います。IPS液晶で物理系が死んでない筐体ならば、普段使いもいけるでしょう。CMOS電池もX280と共通で使えますし、裏蓋あければだいたいアクセスできるので、メンテナンス性もよいです。&lt;strong&gt;メモリ交換できる点はX280より明らかに上&lt;/strong&gt;。ただあんまり出回ってないので、わざわざ狙うほどでもないかな。ただしCore i3はトラップ。2コアしかない。この時代の中古、CPU違ってもそこまで値段に差がつかないので、基本的にはCore i5狙いで。&lt;/p&gt;&#10;</description></item><item><title>怖すぎ。Alldocubeのタブレットに最初からマルウェア</title><link>https://hack-le.com/alldocube-malware/</link><pubDate>Sat, 28 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/alldocube-malware/</guid><description>&lt;p&gt;怖い。Alldocubeのタブレットにマルウェアが混入されたまま出荷されていたらしい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://pc.watch.impress.co.jp/docs/static/ranking/" target="_blank" rel="noopener"&#10; &gt;Alldocubeの格安タブレットでマルウェア「Keenadu」感染確認。公式声明 - PC Watch&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://garumax.com/alldocube-announces-countermeasures-against-keenadu" target="_blank" rel="noopener"&#10; &gt;ALLDOCUBEがマルウェア「Keenadu」への対策を案内。対応が早い！！！！ - ガルマックス&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;原因はサプライチェーン攻撃だって。そんなんどうしろと。うわー…。&lt;/p&gt;&#10;&lt;h2 id="影響するモデル"&gt;影響するモデル&#10;&lt;/h2&gt;&lt;p&gt;一応、現時点で影響を受けているとされるのは以下だ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;iPlay 50 mini Pro(8+256GB/8+128GB、Android 13)&lt;/li&gt;&#10;&lt;li&gt;iPlay 60 mini Pro(8+128GB、Android 14)&lt;/li&gt;&#10;&lt;li&gt;iPlay 60 Pro(8+128GB、Android 14)&lt;/li&gt;&#10;&lt;li&gt;iPlay 70 Pro(6+256GB、Android 14)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;少なくとも上記デバイスを使っている人は即刻シャットダウンして、対応されるまで待ったほうがいい&lt;/strong&gt;ね。&lt;/p&gt;&#10;&lt;p&gt;僕が持っているiPlay 70 mini Ultraは一応セーフと言われているけれど…不安だなぁ。怖すぎる。Dr. Web Lightで検出できるという話なので、とりあえずインストールして実行した。無事、検出されず、ひとまずは安心…？&lt;/p&gt;&#10;&lt;p&gt;影響を受けるモデルと受けないモデルの違いがどこにあるのかは推測するしかないのだが、AIに共通項があるか推論させたところ、Helio G99 + Android 13/14の組み合わせですね、ということで、そのサプライチェーンが狙われたのかもしれない。&lt;/p&gt;&#10;&lt;h2 id="何が起きるのか"&gt;何が起きるのか？&#10;&lt;/h2&gt;&lt;p&gt;さて、問題はKeenaduで何をされるのかだ。PC Watchの記事によると以下。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;被害者のデバイスをリモートで無制限に制御できるが、実際の挙動としてはブラウザの検索エンジンを乗っ取り、新規アプリのインストールを収益化し、広告要素と密かにやり取りする。そのため、煩わしい広告や発生源を特定できない謎の音が再生されるといった苦情が寄せられる。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;「無制限に制御」とさらっと書いているんだが、そりゃなんでもできるってことなんだろうか&lt;/strong&gt;。全権掌握レベルのことがされているんだろうか。今確認されているのは、広告不正クリックとかせこいことのようだが、技術的にはそのデバイスでできるすべてのことができてしまうのでは……？？？&lt;/p&gt;&#10;&lt;p&gt;もしそうならば、たとえばパスワードマネージャのアプリなど入れていたら、すべてのサービスのパスワードを変更しなくてはならない、となってしまうと思うが…。まぁ一応今のところ、そういう挙動はしていない、ということなんかねぇ…しかしそれは、普段言われている「最悪の想定をして〜」とは随分異なる楽観論に思えるが…。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.sdsg.moe/entry/2026/02/20/135709" target="_blank" rel="noopener"&#10; &gt;おそらく開発者環境が侵害されていて、正規署名されてAndroidファームウェアレベルで存在するバックドア「Keenadu」 - Slapdash Safeguards&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この記事読むと、技術的にはやはりなんでもできてしまう、という結論に思える。しかしそれならもっと大騒ぎすべきではないか……。&lt;/p&gt;&#10;&lt;p&gt;なんとも、よくわからない。普段は起きてないセキュリティ事故の危険性について声高に取り上げるメディアが、実際に起きたインシデントについて最悪の想定を語らないのは、商業的な理由があるんだろうか。たしかにまぁ、このタイミングで確認されていないことを「技術的にありうる」という理由で言えば、それは実態と乖離した形で流布されてしまうリスクもある。あるけどなぁ…。&lt;/p&gt;&#10;&lt;p&gt;とりあえず対象者はいますぐシャットダウン、対象じゃなくてもウィルスチェックはしておいたほうがいいね。3/5までに対応するといっているから、まずはそれを待つしかない。&lt;/p&gt;&#10;&lt;h2 id="これもツケなのか"&gt;これもツケなのか…&#10;&lt;/h2&gt;&lt;p&gt;しかしそれにしても、&lt;strong&gt;OSレベルの知識と、実際のサプライチェーンに介入できる力となると、組織的な犯罪だよなぁ&lt;/strong&gt;。それでやってることが広告の不正クリックとは、セコすぎて涙が出るが、実際いい収入になるのかもしれない。また、今後さらなる悪事を実行するための足場ならしでもあったのか。怖いなぁ。今後も起きうるってことだし、今他でも起きてるんだろうなぁ。&lt;/p&gt;&#10;&lt;p&gt;Alldocubeは安価で高性能なタブレットについて信頼と実績のあるメーカーだ。それだけに今回の衝撃ではあるし、発表するだけマシという見方もある。実際のところ、もっと安い名もなきメーカーならば、黙殺したり逃亡したりもありえる。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、&lt;strong&gt;マルウェア仕込みのハードウェアを出荷していた、というのはどう考えてもお粗末&lt;/strong&gt;。ううん、安いのタブレットの裏には、安く働かされている労働者がいて、その結実が安価で高性能なタブレットなのか…と思うと、なんともなぁ。これも社会のツケなんかねぇ…。&lt;/p&gt;&#10;&lt;p&gt;まぁでもとりあえずは、iPlay 70 mini Ultraについては、今のところは大丈夫なのでは、と思う。実際何も検出されなかったし…。おすすめできるかと言われるともはやあれなんだが…。Amazon見てみたら、評価低くて草。僕が持っているやつでは特に不具合ないのだが、個体差が激しいのかな。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16526&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>Ubuntu 24.04 で cloudflaredのアンインストール</title><link>https://hack-le.com/ubuntu-24-04-cloudflared-uninstall/</link><pubDate>Wed, 18 Feb 2026 10:49:54 +0900</pubDate><guid>https://hack-le.com/ubuntu-24-04-cloudflared-uninstall/</guid><description>&lt;p&gt;なんか公式ドキュメント見て見つからなかったのでメモ。Claude生成だがまぁあってそう。&lt;/p&gt;&#10;&lt;p&gt;環境&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Ubuntu 24.04.3&lt;/li&gt;&#10;&lt;li&gt;cloudflaredはパッケージでインストール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;とりあえず停止。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl stop cloudflared&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl disable cloudflared&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;パッケージでインストールした場合は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# パッケージをアンインストール&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt remove cloudflared&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 設定ファイルも含めて完全削除&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt purge cloudflared&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 不要な依存関係を削除&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt autoremove&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# サービスファイルを削除&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm /etc/systemd/system/cloudflared.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Drop-In設定ディレクトリも削除&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm -rf /etc/systemd/system/cloudflared.service.d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# systemdをリロード&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl daemon-reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;確認コマンド&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# cloudflaredが残っていないか確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;which cloudflared&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# プロセスが残っていないか確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ps aux &lt;span class="p"&gt;|&lt;/span&gt; grep cloudflared&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# サービスの状態確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl status cloudflared&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上。&lt;/p&gt;&#10;</description></item><item><title>Dell Latitude 3570 に Linux Mint 22.3 Xfce 入れたが起動に失敗してつらい</title><link>https://hack-le.com/dell-latitude-3570-linux-mint-22-3-xfce-fail/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/dell-latitude-3570-linux-mint-22-3-xfce-fail/</guid><description>&lt;p&gt;つらい。もう朝からずっとやってる。10回以上インストールしてる。失敗する。つらいよぉ……。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Dell Latitude 3570&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i3-6100U&lt;/li&gt;&#10;&lt;li&gt;4GB RAM&lt;/li&gt;&#10;&lt;li&gt;120GB SATA SSD (Corsair) (自分で入れたジャンク)&lt;/li&gt;&#10;&lt;li&gt;Bios version 1.5.2&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Linux Mint 22.3 Xfce&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;物自体はストレージなし本体のみで4,000円ほどだった。液晶に白いもやみたいなのが複数ある。キーボードちょい凹み。トラックパッドはなんかずれる。バッテリーは生きてた。このスペックだったら3,000円くらいで取れるまで粘ってもよかったかもね。。。そして動かないし。。。&lt;/p&gt;&#10;&lt;h2 id="症状-hard-drive---not-installed"&gt;症状: Hard Drive - Not installed&#10;&lt;/h2&gt;&lt;p&gt;インストール自体は成功している、と思う。特にエラーが出ないし、ライブUSBメモリで確認したら、ちゃんとパーティション見えてるしね。&lt;/p&gt;&#10;&lt;p&gt;でも&lt;code&gt;Hard Drive - Not installed&lt;/code&gt;って永遠に言われる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/2026-02-11-12.07.08-1-700x379.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;そんなわけあるか。&lt;/p&gt;&#10;&lt;p&gt;これは多分BIOSとブートの問題かなぁ……。&lt;/p&gt;&#10;&lt;h2 id="やったこと"&gt;やったこと&#10;&lt;/h2&gt;&lt;p&gt;とりあえずの設定の確認はした。Secure BootはOFF、SATA OperationはAHCI、ブートの順番、FastbootはThrough。&lt;/p&gt;&#10;&lt;h3 id="uefiにする"&gt;UEFIにする&#10;&lt;/h3&gt;&lt;p&gt;最初に見た時はMBRになっていたが、これをUEFIに設定しなおした。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/2026-02-11-10.30.14-700x394.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;UEFIに設定するとBoot Sequenceからブツが消えた。さらにそこから再インストールしてもやはり消えたまま……かと思ったら、「ubuntu」として認識されたこともある。パスもあっていそうなのだが、症状は変わらず。&lt;code&gt;BOOTX64.EFI&lt;/code&gt;を作成して無理やり読み込ませようともしたが変わらず。&lt;/p&gt;&#10;&lt;h3 id="legacymbrでインストール"&gt;Legacy(MBR)でインストール&#10;&lt;/h3&gt;&lt;p&gt;これは手順がややこしいが、「&lt;a class="link" href="https://foxclone.org/downloads/20230509-LM21_legacy.pdf" target="_blank" rel="noopener"&#10; &gt;https://foxclone.org/downloads/20230509-LM21_legacy.pdf&lt;/a&gt;」が参考になる。インストーラ、LegacyとUEFIでUI違うんだね🤔&lt;/p&gt;&#10;&lt;p&gt;しかし、結局症状変わらず。ちなみにbootフラグはついてる。&lt;/p&gt;&#10;&lt;h3 id="先頭ブロックを破壊して再インストール"&gt;先頭ブロックを破壊して再インストール&#10;&lt;/h3&gt;&lt;p&gt;先頭ブロックにゴミが残っているんじゃないのというAIの指摘を受けて、下記コマンドを実行。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dd &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/zero &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/sdb &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;512&lt;/span&gt; &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行後、Gpartを開いでgptでパーティションを再作成し、UEFIでインストール。&lt;/p&gt;&#10;&lt;p&gt;症状変わらず。&lt;/p&gt;&#10;&lt;h3 id="ディスクの完全消去"&gt;ディスクの完全消去&#10;&lt;/h3&gt;&lt;p&gt;下記を実行。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo gdisk /dev/sdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Fount valid GPT with protective MBR; usin GPTが出てくる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/2026-02-11-15.31.31-700x394.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;これは正常だがDellのBIOSが保護MBRの形式に対応できてないかも、とのことで下記手順で消去。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;x&lt;/code&gt;&lt;/strong&gt; を入力して Enter（エキスパートモードへ移行）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;z&lt;/code&gt;&lt;/strong&gt; を入力して Enter（GPTおよびMBRデータを破壊する「Zap」コマンド）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Y&lt;/code&gt;&lt;/strong&gt; を入力して Enter（本当に消去するか確認されます）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Y&lt;/code&gt;&lt;/strong&gt; を入力して Enter（MBRも消去するか確認されます）。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;もう一回インストールする。&lt;/p&gt;&#10;&lt;p&gt;……これ今までと何か違うところあるかね。まぁ当然のように（？）症状変わらず。&lt;/p&gt;&#10;&lt;h3 id="biosのアップデート-152---1240"&gt;BIOSのアップデート 1.5.2 -&amp;gt; 1.24.0&#10;&lt;/h3&gt;&lt;p&gt;最初にやれという気がしたが、すっかり失念していた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.dell.com/support/product-details/ja-jp/product/latitude-3570-laptop/drivers" target="_blank" rel="noopener"&#10; &gt;Latitude 3570のサポート | ドライバーおよびダウンロード | Dell 日本&lt;/a&gt;より最新のバージョンを探すと 1.24.0 が出ていた。現在1.5.2なので、だいぶ離れている。今回はBIOSの問題である可能性が高いため、これはかなり期待できる……。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/2026-02-11-16.15.18-700x413.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;はいダメ。もう終わりだよこのジャンク。&lt;/p&gt;&#10;&lt;h2 id="ai嘘しかつかない"&gt;AI嘘しかつかない&#10;&lt;/h2&gt;&lt;p&gt;Geminiは何度も何度も何度も同じ設定を確認し続け、さらに永遠に存在しないURLや全然関係ないURLとセットで、「こんな解決事例があります」と言い続け、そんなURLは存在しないと言うと、「あなたの時間を無駄にさせてしまい申し訳ありません。これが正しいURLです（嘘）」を繰り返す嘘つき無能。&lt;/p&gt;&#10;&lt;p&gt;気づけば半日たっており、イライラは頂点に達し、「&lt;strong&gt;これ以上嘘ついたらピチャイの髭全部燃やす&lt;/strong&gt;。本当にできると思っているのかYes/Noで答えろ」と詰めたところ「多分ハードウェアの問題だから無理！！」と言ってきたのでヒゲ燃やす決定。&lt;/p&gt;&#10;&lt;p&gt;っていうか、そう思うならなんでソフトウェア的な解決方法を永遠と言い続けるクソ野郎とキレたところ、「たいへん申し訳ございません物理的案接続の再確認、別ドライブへの交換以外に道はないという現実をお伝えします」とのことで、もう疲れ切った。&lt;/p&gt;&#10;&lt;p&gt;BIOSで読めてないのにインストーラで読めるとか、そんなことあるのか？と思ったのだけれど、BIOSだとコントローラを介して数ミリ秒で認識しないといけないとか、SSD側の電力問題で間に合わない可能性もあるとか、まぁいかにもそれっぽいが実際どうかわからん。ただまぁありそうな話ではある。なんせ今回試したSSDもジャンク品でけっこう怪しいんだよなぁ……。外付けケースでは認識していたものの。うーん。&lt;/p&gt;&#10;&lt;p&gt;今度気が向いたら別のSSDで試してみるか……と思ったが、もう元気がないのでここまで。&lt;/p&gt;&#10;&lt;p&gt;その後、SSDを入れ替えたら無事動きました…。&lt;/p&gt;&#10;</description></item><item><title>Linux Mint Xfceを入れてからやること</title><link>https://hack-le.com/linux-mint-xfce/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linux-mint-xfce/</guid><description>&lt;p&gt;LinuxでPC再生計画を実行中。とりあえず家が旧式のThinkPadで埋もれつつある。&lt;/p&gt;&#10;&lt;p&gt;Linux Mint Xfceを導入したときの設定メモ。なんか変更あったら随時入れていく。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;試したのは以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ThinkPad X250&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i3-5010U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ThinkPad X260&lt;/li&gt;&#10;&lt;li&gt;ThinkPad X270&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-7300U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ThinkPad X280&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i3-7020U&lt;/li&gt;&#10;&lt;li&gt;Core i5-8250U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ThinkPad L390&lt;/li&gt;&#10;&lt;li&gt;Dell Latitude 3570&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i3-6100U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Dell Latitude 5290&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-8250U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Dell Latitude 5300&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-8265U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;FUJITSU LIFEBOOK A574/H&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-4300M&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;FUJITSU FMVWD2028&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-8265U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;TSUKUMO eX.computer Notebook PC N1501K&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-6200U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;2026年には産廃とされるスペックでも、Linux Mint Xfceだと普通に動きます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;常用に影響があるのはむしろTNパネルかIPSパネルかといったところ。慣れればこんなもんかと思うでしょうけれど、IPSなやつと見比べた途端に「我々は虐げられていたのか！」みたいな気分になります。まぁでも慣れるとTNでもそんなもんかねという感じです。&lt;/p&gt;&#10;&lt;h2 id="忘れがちな操作"&gt;忘れがちな操作&#10;&lt;/h2&gt;&lt;h3 id="ワークスペースの移動"&gt;ワークスペースの移動&#10;&lt;/h3&gt;&lt;p&gt;Ctrl + Alt + 矢印&lt;/p&gt;&#10;&lt;h3 id="ターミナルでコピペ"&gt;ターミナルでコピペ&#10;&lt;/h3&gt;&lt;p&gt;Shiftを入れる。Ctrl + Shift + Vで貼り付け。&lt;/p&gt;&#10;&lt;h2 id="設定"&gt;設定&#10;&lt;/h2&gt;&lt;h3 id="マウスとタッチパッド"&gt;マウスとタッチパッド&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;スクロールを逆向きにする（好み）&lt;/li&gt;&#10;&lt;li&gt;ポインター速度を調整する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="日本語入力"&gt;日本語入力&#10;&lt;/h3&gt;&lt;p&gt;「設定マネージャー」から「入力方法」→「日本語」を確認する。手順が書いてあるのでそのとおりにやる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/01/a9a86db1ca818d15d9b03330d3b59f46-700x457.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;画面の指示通りにやるだけ。最終的にFcitx + Mozcになる。&lt;/p&gt;&#10;&lt;p&gt;一点、Fcitxの設定画面で、入力メソッドの設定なのだが、「キーボード - 日本語（不明）」の下に「Mozc（日本語）」となっている場合、キーボード - 日本語は削除する。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/66ed61e19091733dd0e4f2711dd01afc-700x411.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;マイナスボタンから消せる。&lt;/p&gt;&#10;&lt;h3 id="ctrlとcaps-lockをスワップする"&gt;CtrlとCaps Lockをスワップする&#10;&lt;/h3&gt;&lt;p&gt;XfceだとGUIでやれる方法が見つからなかったよ。なので以下を参考にさせていだきました。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://opensource.com/article/18/11/how-swap-ctrl-and-caps-lock-your-keyboard" target="_blank" rel="noopener"&#10; &gt;How to swap Ctrl and Caps Lock keys in Linux | Opensource.com&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まずテスト。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;/usr/bin/setxkbmap -option &amp;#34;ctrl:swapcaps&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;こいつを実行して、Caps LockでCtrlになるかを確認する。&lt;/p&gt;&#10;&lt;p&gt;うまくいくことを確認したら、&lt;code&gt;~/.profile&lt;/code&gt;に上記コマンドを追記する。&lt;/p&gt;&#10;&lt;p&gt;再起動して、ログイン後も設定が保持されていることを確認する。&lt;/p&gt;&#10;&lt;h2 id="ハードウェア"&gt;ハードウェア&#10;&lt;/h2&gt;&lt;h3 id="マイクとかスピーカーとか音声周り"&gt;マイクとかスピーカーとか音声周り&#10;&lt;/h3&gt;&lt;p&gt;なんかマイクとか動作しないことがある。音声系のトラブルは下記記事の知識が使えることが多い。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/thinkpad-x280-linux-mint-xfce-28-3-vivaldi-mic/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ThinkPad X280 &amp;#43; Linux Mint Xfce 22.3 でマイク入力&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/thinkpad-x280-linux-mint-xfce-28-3-vivaldi-mic/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/02/output-2.webp" alt="ThinkPad X280 &amp;#43; Linux Mint Xfce 22.3 でマイク入力" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/thinkpad-l390-linux-mint-xfce-22-3-hdmi/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ThinkPad L390 &amp;#43; Linux Mint Xfce 22.3 のHDMI接続で音声出力する&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/thinkpad-l390-linux-mint-xfce-22-3-hdmi/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/04/eyecatch_49340_1776895434.webp" alt="ThinkPad L390 &amp;#43; Linux Mint Xfce 22.3 のHDMI接続で音声出力する" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h3 id="hdmi接続でチラつきの発生"&gt;HDMI接続でチラつきの発生&#10;&lt;/h3&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/linux-pc-hdmi-display-flicker/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Linux PCとHDMI接続したディスプレイでチラつきの対応&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/linux-pc-hdmi-display-flicker/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/04/eyecatch_49399_1776334946.webp" alt="Linux PCとHDMI接続したディスプレイでチラつきの対応" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="一通りのソフトウェアを入れる"&gt;一通りのソフトウェアを入れる&#10;&lt;/h2&gt;&lt;p&gt;完全にただの好み。&lt;/p&gt;&#10;&lt;h3 id="debを落として入れる"&gt;.debを落として入れる&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Vivaldi&#10;&lt;ul&gt;&#10;&lt;li&gt;パネルの位置を右にする&lt;/li&gt;&#10;&lt;li&gt;検索エンジンはGoogleにする。すまんな&#10;&lt;ul&gt;&#10;&lt;li&gt;DuckDuckGoはうちのサイトを表示しないから…&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="端末から入れる"&gt;端末から入れる&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;tlp, tlp-rdw&#10;&lt;ul&gt;&#10;&lt;li&gt;サーバ利用なら75-80%で充電するように設定するのがよい（後述）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;emacs&#10;&lt;ul&gt;&#10;&lt;li&gt;みんな大好き&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;wine-installer&#10;&lt;ul&gt;&#10;&lt;li&gt;winetricks&#10;&lt;ul&gt;&#10;&lt;li&gt;winetricks cjkfonts&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="ブラウザ拡張"&gt;ブラウザ拡張&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Bitwarden&lt;/li&gt;&#10;&lt;li&gt;FormatLink&lt;/li&gt;&#10;&lt;li&gt;Floccus&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="サーバ向け設定"&gt;サーバ向け設定&#10;&lt;/h2&gt;&lt;p&gt;24時間稼働常設サーバにするときの設定。クライアントとして使うならほぼいらない。&lt;/p&gt;&#10;&lt;h3 id="静的ipアドレス"&gt;静的IPアドレス&#10;&lt;/h3&gt;&lt;p&gt;IPアドレスを固定する。ルータ側で固定してもいい。&lt;/p&gt;&#10;&lt;h3 id="充電を80で止める"&gt;充電を80%で止める&#10;&lt;/h3&gt;&lt;p&gt;据え置きサーバー用途ならば、充電を80%までにして少しでも長生きさせたい。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install tlp tlp-rdw&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;設定ファイルの編集。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /etc/tlp.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下を探してコメントアウトする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バッテリーの充電開始しきい値（75%以下になったら充電開始）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;START_CHARGE_THRESH_BAT0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;75&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バッテリーの充電終了しきい値（80%に達したら充電停止）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;STOP_CHARGE_THRESH_BAT0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再起動と確認。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tlp start&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tlp-stat -b&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="スリープの無効化"&gt;スリープの無効化&#10;&lt;/h3&gt;&lt;p&gt;サーバー用途だとスリープは邪魔。&lt;/p&gt;&#10;&lt;p&gt;とりあえず設定で「電源管理」からあらゆる設定を「しない」にしつつ、AC接続において管理をGUIでさせない。余計なことばかりしやがって。&lt;/p&gt;&#10;&lt;p&gt;そのうえでCUIでスリープ殺す。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もとに戻す時。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ファイアウォール有効化とポート開放"&gt;ファイアウォール有効化とポート開放&#10;&lt;/h3&gt;&lt;p&gt;サーバ用途なのでファイアウォール有効化。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw &lt;span class="nb"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;55555番を開ける時は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw allow &lt;span class="m"&gt;55555&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;確認コマンド&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw status numbered&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="openssh-server"&gt;OpenSSH Server&#10;&lt;/h3&gt;&lt;p&gt;SSHはいるだろう。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install openssh-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;起動と有効化。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl status ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイアウォールの設定。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw allow ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw &lt;span class="nb"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;IPアドレスの確認。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip addr show&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接続の確認。クライアントPCの公開鍵をサーバPCの &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt;に追加。パーミッションは600。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh ユーザ名@サーバのIPアドレス&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一応、SSHの設定について。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/20462465-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;SSHで鍵認証を用いて、パスワードなしでログインする方法&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/20462465-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2553_1789270747.webp" alt="SSHで鍵認証を用いて、パスワードなしでログインする方法" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;ハードウェアごとの所感は別途記事にしたいと思いますが、思っていたよりもかなり快適に使えます。ディスプレイだけつらいところがありますが、サブマシンとしては十分な感じがします。ブラウザでタブいっぱい開かなければ普通に使えるんじゃないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;ジャンクを漁って自分でやれる人なら、数千円で環境作れると思います。とはいえ普段遣いを考えるなら、あと1万円追加してIPS + 8GB RAMをおすすめしますけどね。RAMは換装できるモデルなら良いと思います。&lt;/p&gt;&#10;&lt;p&gt;個人的にはEmacsキーバインドを入れたいのですが、どちらかというと他人様に使ってもらえる設定を追求中なので、あまりニッチすぎる設定は後回し。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/linux-pc-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【Linux PC再生計画】中古PCも触ってみるといろいろだ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/linux-pc-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/02/output.webp" alt="【Linux PC再生計画】中古PCも触ってみるといろいろだ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ThinkPad X260 Core i3-6100 4GB RAM で Linux Mint 22.3 Xfce を動かす</title><link>https://hack-le.com/thinkpad-x260-core-i3-6100-4g/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/thinkpad-x260-core-i3-6100-4g/</guid><description>&lt;p&gt;Linux PC量産計画で、今回はけっこう古めの筐体、ThinkPad X260について見ていく。なお試したOSはいつものようにLinux Mint 22.3 Xfce Edition。&lt;/p&gt;&#10;&lt;h2 id="スペック"&gt;スペック&#10;&lt;/h2&gt;&lt;p&gt;X260は2016年1月に発売された、主にSkylake世代（第6世代Core iシリーズ）の時期のやつで、スペックは例によってAI記事「&lt;a class="link" href="https://ai.hack-le.com/category/pc/web%e3%83%96%e3%83%a9%e3%82%a6%e3%82%b6/" target="_blank" rel="noopener"&#10; &gt;ThinkPad X260のスペックを整理&lt;/a&gt;」に詳細をまとめさせた。今回使った筐体のスペックはこれ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CPU: Core i3-6100U, 2.3GHz, 2コア4スレッド&lt;/li&gt;&#10;&lt;li&gt;RAM: DDR4 4GB&lt;/li&gt;&#10;&lt;li&gt;SSD: SATA 128GB&lt;/li&gt;&#10;&lt;li&gt;LCD: TN, HD&lt;/li&gt;&#10;&lt;li&gt;Webカメラあり&lt;/li&gt;&#10;&lt;li&gt;バッテリー: 死亡&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;3000円で買った安定のクソスペ。SSDは抜かれてたので自分で入れた。バッテリー死んでて辛い。液晶は普通。&lt;/p&gt;&#10;&lt;p&gt;インタフェースはけっこう充実している。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;USB 3.0 x 3（うち1つはPowered USB）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;HDMI&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Mini DisplayPort&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;RJ-45（有線LAN）&lt;/li&gt;&#10;&lt;li&gt;SDカードリーダー（4-in-1）&lt;/li&gt;&#10;&lt;li&gt;マイク/ヘッドホン・コンボ・ジャック&lt;/li&gt;&#10;&lt;li&gt;ドッキングコネクター（底面）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;RJ-45、HDMI、USB 3.0と欲しいところが揃っている。Mini DisplayPort懐かしい。SDカード入るのは地味に良いかもね。&lt;/p&gt;&#10;&lt;h2 id="使い勝手"&gt;使い勝手&#10;&lt;/h2&gt;&lt;p&gt;とりあえずこの記事はX260で書いている。使えるといえば使えるが、しんどいといえばしんどいような感じだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/0f2c38a58401a63c74b8b0683d12e212.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;メモリはスワップがあるけれど、それよりもCPUの負荷が常にまぁまぁある。普通にネットをしてるだけでこれなので、動画とか見るとしんどいかもしれない。&lt;/p&gt;&#10;&lt;p&gt;と思ったが、一応YouTubeを流しながら編集する、程度は問題なくできる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/dfcdd90c3db3e1091dd5246f8272701b.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;CPU、メモリともにちょっと負荷あがるね。まぁでも特にもたつくような感じはないかな。ブラウザでタブめっちゃ開けば開いただけメモリの使用量は増えていく。&lt;/p&gt;&#10;&lt;p&gt;負荷云々よりも、液晶がTNなのが厳しいのはしゃーない。一番いい感じで見える角度があるので、それを探し当ててそこで見るのがよい。あまり便が良い感じではないが、姿勢は良くなるかもしれない。一応世の中にはThinkPadで換装できるFHDのLCDなどアリエクなどに売っていたりするが、普通にジャンク本体より高いので使う気になれない。&lt;/p&gt;&#10;&lt;p&gt;バッテリーが死んでるのはこのジャンク特有の問題ではあるが、やはりずっと繋げっぱなしの制約があるのは悲しいところだ。少し残っているだけでも、取り回しの便は全然違うし、なによりサーバ用途ではUPS代わりになっていいのだけどね…。&lt;/p&gt;&#10;&lt;p&gt;キーボードの打鍵感は、これは好みになるが、個人的にはかなり良いと思った。ペチペチ。赤ポチは好きな人は好きなんだろうが僕は慣れない。ちゃんと動いて入る。タッチパッドも問題なく動く。まぁ僕はトラックボールマウスを外付けで使ってしまうわけだが…。地味にこのへんの外部入力が問題ないのは良いよね。&lt;strong&gt;Webカメラもちゃんと動いてました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;全体的には、これでも十分という人はそれなりにいる気もした。やはりディスプレイが一番のネックかなと思うんだけれど、据え付けで使う分には外部出力という手もあるので、案外困らないかもしれない。&lt;/p&gt;&#10;&lt;h2 id="サーバとしては"&gt;サーバとしては&#10;&lt;/h2&gt;&lt;p&gt;サーバの検証はなにをするかまだちょっと決められていない。ほとんどの用途には足ると思うけれど、Immichのような重量級は推奨要件を満たせていないので微妙だろうなぁ。インストールはできるし、快適さを求めなければまぁ動くとは思う。&lt;/p&gt;&#10;&lt;p&gt;とりあえずWordPressを入れて試したが、当然ながらこれは問題なく動く。そりゃ２GB RAMのVPSでも3台動かせているのだからそりゃそうだな。&lt;/p&gt;&#10;&lt;p&gt;少し重ためなものとして、Growiを入れてみる。GrowiはMongoDBとElasticsearchがあるので、そこそこヘビーだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/02/fe0886d58832796dc1127ed287858e76.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;メモリの使用量がさすがに増えるけど、3GB未満。&lt;/p&gt;&#10;&lt;p&gt;ま、VPSだと思ったら4GB RAMなんて豪華だし、ネイティブで完全にリソースを使えるのだから、そりゃ強いよね。ちょっと何かあったらこうして画面を確認することができるんだしさ。&lt;/p&gt;&#10;&lt;p&gt;Cloudflare Tunnelで手軽に外部公開もできるし、通信帯域や可用性を気にしないなら、これで十分だなぁ。VPS1年契約するよりいいかもしれないね。&lt;/p&gt;&#10;&lt;p&gt;ただこのPCについていえば、バッテリーが死んでるのは残念だ。バッテリーが少しでも生きていれば、停電などでも生き延びることができるので、可用性に大いに寄与するはずだ。まぁバッテリーも買えば互換品もあるんだけどさ。高いしなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁバッテリー死んでるなら爆発しなくていいんじゃないの、というポジティブに考えられなくもない。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;GUI含めてちゃんと動いてくれるが、Webブラウザでなんでもやろうとするとつらい場面は出てくるはず。&lt;/p&gt;&#10;&lt;p&gt;個人的にはこのスペックならやはりサーバ用途がいいなと思う。たいていの用途には十分さ。&lt;/p&gt;&#10;</description></item><item><title>【Linux PC再生計画】中古PCも触ってみるといろいろだ</title><link>https://hack-le.com/linux-pc-2/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linux-pc-2/</guid><description>&lt;p&gt;Linux PCを量産する計画をたてて、ジャンクPCを漁り始めている。とりあえず、今家に2016-2018年くらいのThinkPadが8台ある。普通なら産廃として扱われるものである。しかし今話題のOpenClawなどは普通に動くので、専用機にするとなんだか人格が与えられたようで愛着がわく。&lt;/p&gt;&#10;&lt;p&gt;再生、なかなか手こずるしね……。いままでどんだけやってきたと思っているんだ、中古PCの再生なんて余裕だ……と思っていたのだけれど、買い始めてみると色々あるものだなぁと思う。&lt;/p&gt;&#10;&lt;h2 id="相場観が必要"&gt;相場観が必要&#10;&lt;/h2&gt;&lt;p&gt;近所のハードオフをのぞくほか、オクやフリマなどを中心見ているのだが、同じものでもかなり価格が異なる。特に中古となると液晶の品質、バッテリーの劣化、筐体の劣化など、見えないところが多く、ここらへんはあまり精査もされていないため、けっこう賭けである。&lt;/p&gt;&#10;&lt;p&gt;古いPCの知識が必要で、どこのメーカーからなんの型番がいつ頃でて、どのようなバリエーションがあったか、Linuxでの対応はどうか、などみるべきところが多い。&lt;/p&gt;&#10;&lt;p&gt;また、しばしばストレージやメモリのパーツが抜かれているため、パーツ単位の相場感も見る必要がある。AIバブルのせいでメモリとストレージが高騰しているのはよく知られているが、それは低価格帯にも波及しており、128GB SATA SSDのような産廃でも2,000円超えがざらになっている。うまくいけばまとめ買いで1,500円でゲットできることもある、といった感じだ。&lt;/p&gt;&#10;&lt;p&gt;しかしその場合でも、果たしてSSDの耐久性がどれくらいかはわからない。特に128GB/256GBのTBWはそんなに大きくないので、死亡寸前みたいなのを掴まされることもある。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、これらについてちゃんとみたうえで情報を提示したり、必要に応じて交換などすれば、納得のいく価格をで得られるかもしれない。PC工房とかの中古品の価格をみると、けっこう高いが、自分でジャンク漁りをするギャンブル性を思うと、あんなもんだろうなぁ、と思った。&lt;/p&gt;&#10;&lt;h2 id="ネジが硬い"&gt;ネジが硬い&#10;&lt;/h2&gt;&lt;p&gt;中古品の注意点として、特に液晶、バッテリー、筐体の機械部分の劣化と、メモリやストレージが抜き取られていたりすること、BIOSロック、CMOS電池切れなどは想定していた。&lt;/p&gt;&#10;&lt;p&gt;しかし、やり始めて「これは想定してなかったなぁ」と思ったのは、&lt;strong&gt;裏蓋のネジが硬い&lt;/strong&gt;。長年放置していたためなのか、それとも前のユーザが適当なドライバで馬鹿にしたのか、なんだかわからないが、とにかく開けづらいものが多くある。だいたい1つくらいネジがしんどいことになっている。&lt;/p&gt;&#10;&lt;p&gt;これを受けて、3台のPCがまだ再生できていない。急遽M2のネジと、ネジ外しなどを注文することになった。&lt;/p&gt;&#10;&lt;h2 id="マイクとカメラが鬼門"&gt;マイクとカメラが鬼門&#10;&lt;/h2&gt;&lt;p&gt;ソフトウェア的には、ThinkPadはLinuxでの前評判が良かったこともありほとんど問題ない、と思われたのだが、&lt;strong&gt;実際に使っていくと色々トラブルが発生した&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;Linux Mint XfceだとCapsLockキーのCtrlスワップがGUIで用意されておらず、&lt;code&gt;~/.profile&lt;/code&gt;をいじる必要があるなど、やはりいまだに細かくノウハウが必要な状況だ。&lt;/p&gt;&#10;&lt;p&gt;また、マイクとカメラが最初の状態では使えず、特にカメラはまだ解決できていない……と思ったが、あとでよくみたら多分これカメラねぇわwww&lt;/p&gt;&#10;&lt;p&gt;そういえばWebカメラが重要視されたのってコロナ禍以降、つまり2020年以降かもなぁ。&lt;/p&gt;&#10;&lt;p&gt;マイクについては、まずシステムレベルでの調整が必要だったほか、「FIrefoxでは使えるがVivaldiではもう一つ設定が必要」などがあり、これは細かく見ていくとたいへんだ、と思われた。&lt;/p&gt;&#10;&lt;p&gt;これがデバイスとディストリビューションの組み合わせの数だけあるのだから、Linux PCが普通の人にとって難題となるはずだ。&lt;/p&gt;&#10;&lt;h2 id="これからのこと"&gt;これからのこと&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;自分としては、ユースケースも含めて使える状態を示していきたい&lt;/strong&gt;と思っている。普通のアプリケーションのセルフホストだけではなく、最近はやりのAIエージェントアプリ、Moltbot（Clawdbot）専用機とするなども、けっこう面白い。Moltbotは非常に強力な権限が必要であるため、PCそのものをMoltbot専用機にしてしまう、というのはけっこう合理的である。&lt;/p&gt;&#10;&lt;p&gt;他にも、GooglePhoto代替のImmich、Zoom代替のJitsi Meetなど、完全にアプリケーションを使える形でPCを提案すれば、それは一つ価値として機能するのではないか、と思われる。Immichは推奨要件が大きいが、サーバとしてはTN液晶でも別にいいし、またそれ以外の多くは4GB RAM, 128GB SSDでも十分だ（8GB RAMだとなおよいのはそう）。NASにするならどうせ外付けHDDケースを買った方がいいので、SSDを積む意味は薄い。これなら価格はかなり抑えられる。それでいながら強力だ。&lt;/p&gt;&#10;&lt;p&gt;また一般ユースにおいては、Web、メール、オフィス、事務、動画閲覧といった一般的な用途では、IPS + FHD、8GB RAM、4コア、ある程度のバッテリー、くらいのスペックが良いだろう。SSDは128GBでもいいと思うのだが、不安なら512GBにグレードアップしてもいい。256GBはやや中途半端で、だいたい128GBと耐久性や速度など大して変わらないから、どうせアップグレードするなら512GBがいいだろう。&lt;/p&gt;&#10;&lt;p&gt;自分としてはソリューションを売るつもりはなくて、あくまでも意思はあるが知識と経験の壁に手こずっていたり一歩を踏み出せない人、あるいは忙しくてできない人のサポートとなることを考えている。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/thinkpad-x280-get/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;【Linux PC量産計画】産廃スペックのThinkPad X280を入手&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/thinkpad-x280-get/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/2026-01-21-17.14.01-scaled.webp" alt="【Linux PC量産計画】産廃スペックのThinkPad X280を入手" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>【Linux PC再生計画】用途ごとのスペック</title><link>https://hack-le.com/linux-pc-3/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/linux-pc-3/</guid><description>&lt;p&gt;デバイスを10台ほど調達した。色々なPCを触っているうちに、やはりスペックによって使い途は異なると思われた。&lt;/p&gt;&#10;&lt;p&gt;以下の層にわかれると思う。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;サーバ用途&lt;/li&gt;&#10;&lt;li&gt;限られたオフィス用途（用途が決まっており、皆で必要なときにだけ使うようなの）&lt;/li&gt;&#10;&lt;li&gt;普段使い&lt;/li&gt;&#10;&lt;li&gt;開発・クリエイティブ&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;それぞれに必要なスペックがわかれる&lt;/p&gt;&#10;&lt;h2 id="サーバ用途"&gt;サーバ用途&#10;&lt;/h2&gt;&lt;p&gt;サーバ用途はもっとも幅広く対応する。最小スペックとしては以下でもOK。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CPU 2コア&lt;/li&gt;&#10;&lt;li&gt;TN液晶&lt;/li&gt;&#10;&lt;li&gt;4GB RAM&lt;/li&gt;&#10;&lt;li&gt;128GB SSD&lt;/li&gt;&#10;&lt;li&gt;バッテリーはUPS程度あればよし&lt;/li&gt;&#10;&lt;li&gt;筐体がボロボロでも問題なし&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これでも相当のことができる。メモリは8GBあることが望ましいが、4GBでも多くのアプリケーションをセルフホストできるぞ。&lt;/p&gt;&#10;&lt;p&gt;逆に、以下は不要で、場合によっては邪魔にすらなる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;IPS, FHD&lt;/li&gt;&#10;&lt;li&gt;薄型&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これは安定性と電力と冷却、拡張性の問題になる。&lt;strong&gt;何をどうしたところで、物理法則には勝てない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;具体的には、ThinkPad X270とX280を比べた時、X280は薄型でメモリもオンボードであるため、X270より必ずしも良いとは言えない。特にX270は地味にUSB給電もできるし、筐体がでかい分、熱的にもよいだろう。一方、X280のCore i5の第8世代以降は4コアあり、これはメリットである。&lt;/p&gt;&#10;&lt;p&gt;CPUとRAMについては大いに越したことはなく、たとえばImmichのような写真管理では4コア8GB RAMが推奨要件に入ってくるので、最終的に用途次第になる。逆に言うと、そこまで必要なアプリケーションは使える。&lt;/p&gt;&#10;&lt;p&gt;自分としては、まずここをターゲットにしたい。一番Linuxの楽しさ、強力さを体験できるところでもある。1万円台でLinux遊び放題の環境を作ろうと思ったらこれになる。&lt;/p&gt;&#10;&lt;h2 id="限られたオフィス用途"&gt;限られたオフィス用途&#10;&lt;/h2&gt;&lt;p&gt;そんなに使うわけではないのだが、ないと困るみたいなPCも世の中には存在する。ホームユースでも「YouTube専用機」とか「ビデオチャットするだけ」みたいな使い方がある。そこで無駄にスペックを盛るのはもったいない。&lt;/p&gt;&#10;&lt;p&gt;なので、これは基本的に前述のサーバ用途と同じようなスペックでよい……のだが、以下の点は盛りたくなる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;液晶はIPS、できればFHD&lt;/li&gt;&#10;&lt;li&gt;キーボードはそこそこきれい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ただIPS液晶のFHDだけの時点で、多分他のスペックも割と高いと思う。で、そうなると中古市場でも2万くらいからあるので、なんだか僕が頑張るところでもないなぁ感が出てくるのだね。正直IPS液晶のやつはまだジャンクになっていないし。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、Windowsだと快適には使えないレベルなので、Linuxチューニングしたものに価値を感じてくれる人はいるかもしれないなぁとは思うので、一応ターゲットには入っている。&lt;/p&gt;&#10;&lt;h2 id="普段使い"&gt;普段使い&#10;&lt;/h2&gt;&lt;p&gt;普段使いとなると、それなりのスペックがほしいと思う。ここでいう普段使いとは、Web、メール、オフィス、事務、メディアの閲覧、ビデオチャットといった用途だ。&lt;/p&gt;&#10;&lt;p&gt;前述のスペック、2コアCPUの4GB RAMでも軽量Linuxなら割と戦えるのだが、正直以下のスペックはほしくなる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;IPS, FHD&lt;/li&gt;&#10;&lt;li&gt;4コア以上のCPU&lt;/li&gt;&#10;&lt;li&gt;8GBのRAM&lt;/li&gt;&#10;&lt;li&gt;SSD 256GBあると嬉しい&lt;/li&gt;&#10;&lt;li&gt;軽いと嬉しい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;軽さはサーバ用途では不要だったが、普段使いでは輝きを増す。&lt;/p&gt;&#10;&lt;p&gt;このスペックはWindows 11だとちょっと厳しいくらいの感じで、使えなくはない。ただLinuxのほうが圧倒的に快適。僕が用意するとすればここらへんまでだと思う。&lt;/p&gt;&#10;&lt;p&gt;まぁ全部自分でやるよって人は、これくらいのスペックはBeStockあたりで探せば状態のいいやつが2万円台で手に入る。苦労するとは思うけどね。そういう人向けにインストールマニュアルを作って販売とかもあるだろうか。&lt;/p&gt;&#10;&lt;h2 id="開発クリエイティブ"&gt;開発・クリエイティブ&#10;&lt;/h2&gt;&lt;p&gt;開発となると以下はほしくなる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;SSD 512GB以上&lt;/li&gt;&#10;&lt;li&gt;16GB以上のRAM&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;SSDの256GBはけっこう中途半端なので、個人的にはここは512GBにしたい。ってか開発用途だと多分256GBは足りない。512GBになると、速度・耐久性ともに跳ね上がるし、またほとんどの人にとって十分な容量だ。これに加えて16GB RAMあったら無敵だ。&lt;/p&gt;&#10;&lt;p&gt;ただここまでやるとWindows 11も普通に使えてしまうので、Linuxで再生するぞ！というよりは、おらもうWindows嫌だ！という思想的な理由になるだろう。&lt;/p&gt;&#10;&lt;p&gt;当然ながら盛るほどに予算は上がってしまうし、メモリ16GBは今だとちょっとお高い。そのまま使いたい人なら、オンボードで16GBのやつが狙い目かもしれない。探せば3万台であるだろう。普通は4万いきそうだけどね。安く仕上げるなら、ThinkPad L390でSSDとメモリを換装・増設するようなパターンが一番やりやすいだろうね。&lt;/p&gt;&#10;&lt;p&gt;まぁ開発マシンは青天井なので、ここまでくるとこだわりもった人が好きにしてくれーではある。自分だったら32GB RAMは用意するしね。CPUだってもうすこし……とか言い始めると、普通に6桁になるよね。自分的にはあまり積極的に用意するつもりは今のところない。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;なんだかジャンクPCが積まれてきたわけだが、実際のところこいつを本当に捌けるのか？と考えるとなんだか微妙な気がしてきたので、ユースケースを整理する必要があると思われた。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Linux PCをホームユースに持っていくこと自体は、本来的な価値がものすごくある&lt;/strong&gt;、という気持ちは変わらないし、可能性を考えている人はけっこういると思う。ただ誰もがエンジニアのようにその作業を楽しいと思えるわけではない。しかしやる気がないわけでもないだろう。ここらへんは、僕のコンピュータ以外におけるDIY的な関心の感じに近いのではないか。僕も本当は日曜大工とか家庭菜園とかやってみたいけれど、没頭できるほどではない。だから信用できる詳しい人によるサポートは、僕ならばほしいと思う。&lt;/p&gt;&#10;&lt;p&gt;ユーザはIT業界で信じられているような愚かな存在ではない、&lt;strong&gt;ユーザは代行ではなく支援を求めている&lt;/strong&gt;、少なくともそういうユーザは相当数いるはずだ、という気持ちが、僕のモチベーションとなっている。&lt;/p&gt;&#10;</description></item><item><title>メルカリで売られているらしい謎の13年前スペックのPCは本当に闇か</title><link>https://hack-le.com/mercari-yami/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/mercari-yami/</guid><description>&lt;p&gt;面白いツイートが流れてきました。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://twitter.com/naoming728/status/2019696746834940413?s=20" target="_blank" rel="noopener"&#10; &gt;https://twitter.com/naoming728/status/2019696746834940413?s=20&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;自作PCを嗜むものならば、このツイートの嘆きはよくわかるのではないでしょうか。私も非常によく理解できます。&lt;/p&gt;&#10;&lt;p&gt;一方で、やり玉に挙げられたこの構成は、案外よく考えられたものだ、とも思います。実際、普通の人が5万円弱を握りしめてPCを買った場合、もっともよい体験が得られるんじゃなかろうか。&lt;/p&gt;&#10;&lt;p&gt;比較対象として、今現在5万円で買えるデスクトップとして正解に近いミニPCを見てみましょう。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;47868&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;表にしてみます。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;闇市PC（中古ビルド）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;GMKtec M8（最新ミニPC）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Core i7-4770&lt;/strong&gt; (2013年)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Ryzen 5 PRO 6650H&lt;/strong&gt; (2022年)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;GPU&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;GeForce GTX 1060 3GB&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Radeon 660M&lt;/strong&gt;（内蔵GPU）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;メモリ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;16GB DDR3&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;16GB LPDDR5-6400&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ストレージ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;512GB SSD&lt;/strong&gt; (SATA接続)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;512GB NVMe SSD&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Windows 10 Pro&lt;/strong&gt; 、MS Office 2021つき&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Windows 11 Pro&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;見た目・筐体&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;MONTECH XR（白・パノラマ）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;弁当箱&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;拡張性&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ケース内の空きはあるが、中身が古い&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;OCuLink・USB4搭載&lt;/strong&gt;（eGPU接続可）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;価格&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;49,800円&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;49,997円&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;一般的にはミニPCが正解とされるでしょう。しかしながら、実用という観点で見たとき、果たしてそう言い切れるだろうか？&lt;/p&gt;&#10;&lt;p&gt;というのも、&lt;strong&gt;10年前の型落ちGPUとはいえ、やはり5万円で買える程度のPCについてくる内蔵グラフィックよりは当然強い、という一点&lt;/strong&gt;です。それ以外のあらゆるスペックは確かに現代のPCに負けているのですが、その負け方が、&lt;strong&gt;恐らく一般的な用途においてボトルネックにならない&lt;/strong&gt;んです。少なくとも、GPUの性能差を埋められるものではありません。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;メモリのDDR3とDDR5の速度差を体感できるハイパーヒューマンはいません&lt;/strong&gt;し、そこがボトルネックになることはまず考えられません。&lt;strong&gt;SSDもSATAとNVMeの速度差を体感できるハイパーヒューマンは（略）&lt;/strong&gt; 。まぁクソデカzipのコピーとかしたらそりゃ体感できますけど、日常使いでは結局細かなランダムアクセスが重要なので。&lt;/p&gt;&#10;&lt;p&gt;CPUについては明確な差がありますね。ここは確かに差を体感できるところかも。しかしデスクトップ版Core i7の第四世代は、多くの用途において十分に機能するでしょう。&lt;/p&gt;&#10;&lt;p&gt;一般の人でスペックがネックになりえるとしたら、それはゲームなのですが、&lt;strong&gt;そのゲームこそまさにGPUの強さがきいてきます&lt;/strong&gt;。この差が大きい。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;スペックにおいて、13年前のPCのほうが、現代のミニPCの体験を上回るんじゃないか、と思えます&lt;/strong&gt;ね。そして&lt;strong&gt;なんといっても見た目がいい&lt;/strong&gt;。所有欲を満たしてくれることでしょう。でかいだけに熱問題も安定しやすい。&lt;strong&gt;物理法則は変わりません&lt;/strong&gt;。…ま、私は小型のほうが好きですが…。&lt;/p&gt;&#10;&lt;p&gt;ソフトウェアについても、WIndows 11がWindows 10より優れていると思うヒューマンはどれだけいますか？単にサポート切れだからなんとなく怖い、という人がほとんどです。実際、Windows 10のシェアは依然として大きいし、MSのWindows 11強制には怨嗟の声があふれていますね。&lt;/p&gt;&#10;&lt;p&gt;ホームユースにおいて、私はWindows 10であることが問題になるとは思いません。マルウェアはほとんどの場合自分で招き入れるものです。そうでない純粋な攻撃の場合、家庭内においてはルータが防壁になります。ルータを突破されている時点でもうOSどうのとか言ってる場合ではありません。&lt;/p&gt;&#10;&lt;p&gt;さらにMS Officeまであります。まぁ間違いなくボリュームライセンスの使いまわしで黒に近いグレーですが、ヤフーショッピングを見れば500円でMS Officeが今日も元気に売りさばかれている現状、倫理的な問題はあれど、実際的な問題にはなりづらいでしょう。倫理的な問題というならそもそもMSの独占的な地位を悪用したWindowsアプデ強制のほうがよほど…。&lt;/p&gt;&#10;&lt;p&gt;拡張性については、微妙なところですが、OcuLinkの存在を考えるとミニPCは良いでしょう。しかしね、&lt;strong&gt;5万円でなんかカッケェPCを買う人に、OcuLinkって刺さると思います？&lt;/strong&gt; 絶対使わないって断言できます。2.5GbpsのLANポートもいりません。&lt;/p&gt;&#10;&lt;p&gt;以上を考えると、メルカリで売られているらしいこの謎PCは、確かに闇市的である一方、&lt;strong&gt;実用という観点において決して法外ではない、むしろ確実にわかっている人間が制約の中で実用のために組んだものだ&lt;/strong&gt;、と言えます。&lt;strong&gt;ほんの2年前に、25万円で8GB RAMのMacにProの名を冠して売ったAppleより誠実だとすら思いました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;私は最近思うんです。&lt;strong&gt;この10年、体験に寄与しないところばかりを高額で押し付けられている一方、本当に必要なスペックは進化どころか価格を考えると退化している&lt;/strong&gt;。その歪みがここに出ている。闇市、情弱向けPCなどと揶揄されていますし、それは現代的な常識からは正しいかもしれません。しかし実際は、恐らくまともに動きます。なんなら同じ価格の現代の高コスパPCよりも良い体験をもたらすでしょう。これはいったいどういうことだ？&lt;/p&gt;&#10;&lt;p&gt;そんなことを考えながら、今日も私は数千円のジャンクPCを買って、軽量のLinuxを入れています。もう十数台ばかり集まりました。阿呆です。この子たちを使って、本当に必要なことをするには、これで十分だと立証していきたい。必要ないことをやるためには、不十分でしょうけれど。&lt;/p&gt;&#10;&lt;p&gt;でも、&lt;strong&gt;みんながやりたいことは、不必要なことじゃなくて、必要なことじゃないでしょうか&lt;/strong&gt;。そういう当たり前のことを、思い出していきたいのです。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/old-pc-linux/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;古いPCのLinux再生計画&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/old-pc-linux/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/output-17.webp" alt="古いPCのLinux再生計画" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ThinkPad X280 + Linux Mint Xfce 22.3 でマイク入力</title><link>https://hack-le.com/thinkpad-x280-linux-mint-xfce-28-3-vivaldi-mic/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/thinkpad-x280-linux-mint-xfce-28-3-vivaldi-mic/</guid><description>&lt;p&gt;表題どおり。ThinkaPad X280にLinux Mint Xfce Editionを入れたところ、そのままだとマイク入力できなかったのでその調整。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;ThinkPad X280&#10;&lt;ul&gt;&#10;&lt;li&gt;Core i5-8250U&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Linux Mint 22.3 Xfce&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="デバイスレベルのマイク調整"&gt;デバイスレベルのマイク調整&#10;&lt;/h2&gt;&lt;p&gt;まずマイクが初期設定だと100%に張り付いてしまっていたので調整。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;arecord&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;vvv&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="nx"&gt;dat&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを実行すると100%に張り付いているのが確認される。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;alsamixer&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行後、F6でサウンドカードを選択する。F4でInternal Mic Boostを0に下げる。&lt;/p&gt;&#10;&lt;p&gt;ESCで閉じる。&lt;/p&gt;&#10;&lt;p&gt;再度&lt;code&gt;arecord&lt;/code&gt;を実行して100%にならないのを確認する。&lt;/p&gt;&#10;&lt;p&gt;以下を実行して録音・再生してテスト。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="nx"&gt;秒間録音します&lt;/span&gt;&lt;span class="err"&gt;（&lt;/span&gt;&lt;span class="nx"&gt;話し続けてください&lt;/span&gt;&lt;span class="err"&gt;）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;arecord&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="nx"&gt;cd&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wav&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;録音したファイルを再生します&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;aplay&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wav&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;録音した声が再生されたらOK。&lt;/p&gt;&#10;&lt;h2 id="vivaldiでマイク認識"&gt;Vivaldiでマイク認識&#10;&lt;/h2&gt;&lt;p&gt;Firefoxではこのまま使えたのだが、Vivaldiだと使えなかった。ブラウザで使えないのは困る。&lt;a class="link" href="https://mictests.com/" target="_blank" rel="noopener"&#10; &gt;Mic Test&lt;/a&gt;でマイク入力が見つからないことがわかった。&lt;/p&gt;&#10;&lt;p&gt;Vivaldiを閉じて以下を実行する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;vivaldi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ffmpeg&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行すると&lt;code&gt;Proprietary media codecs (120726) was already present&lt;/code&gt;と言われ、なんだか意味がなさそうなのだが、実際にはもう一度Vivaldiを立ち上げてマイクテストするとマイクが見つかるようになる。&lt;/p&gt;&#10;&lt;p&gt;その後MTGでも使ってみたが、無事認識された。音量も特に問題なさそうだった。&lt;/p&gt;&#10;</description></item><item><title>メモ: LinuxのLive USBメモリを作る</title><link>https://hack-le.com/linux-live-usb/</link><pubDate>Tue, 03 Feb 2026 19:43:43 +0900</pubDate><guid>https://hack-le.com/linux-live-usb/</guid><description>&lt;p&gt;ディストリビューションのISOを適当に落とす（Linux Mint は&lt;a class="link" href="https://www.linuxmint.com/edition.php?id=327" target="_blank" rel="noopener"&#10; &gt;Linux Mint 22.3 &amp;ldquo;Zena&amp;rdquo; - Linux Mint&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;p&gt;ISOの書き込みはdd……ではなく、「&lt;a class="link" href="https://etcher.balena.io/#download-etcher" target="_blank" rel="noopener"&#10; &gt;balenaEtcher - Flash OS images to SD cards &amp;amp; USB drives&lt;/a&gt;」を使う。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/01/image-6-700x415.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Windows, Linuxもあって便利。&lt;/p&gt;&#10;&lt;p&gt;作成したLive USBメモリをブッ刺して起動。各の方法でBIOSに入ってブートするドライブを選択してインストーラ起動。指示にしたがってやる。&lt;/p&gt;&#10;&lt;p&gt;これだけのメモ。&lt;/p&gt;&#10;</description></item><item><title>ThinkPad X280 Core i5-8250U 8GB RAMでLinux Mint Xfceを動かす</title><link>https://hack-le.com/thinkpad-x280-linux-mint-xfce/</link><pubDate>Tue, 03 Feb 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/thinkpad-x280-linux-mint-xfce/</guid><description>&lt;p&gt;Linux PC再生計画で、今回は割とまともなスペックのThinkPad X280を調達しました。なにをもってまともかというのは難しいところですが。まぁ4コアで8GB RAMあるなら一応まともといっていいんじゃないでしょうか。Windows前提だとつらいスペックです。&lt;/p&gt;&#10;&lt;h2 id="前回の産廃スペック"&gt;前回の産廃スペック&#10;&lt;/h2&gt;&lt;p&gt;前回試したのはあまりまともとは言い難い、2026年だと産廃確定演出のThinkPad X280 Core i3-7020U 4GB RAMです。X280の基本的な仕様はこちらの記事に記載済みなので繰り返しません。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/thinkpad-x280-get/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ThinkPad X280を入手&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/thinkpad-x280-get/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/2026-01-21-17.14.01-scaled.webp" alt="ThinkPad X280を入手" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;前回記事のスペックはWindows 11に本来対応していないKabyLakeなCore i3-7020U(2コア4スレッド)、4GB RAM、128GB SATA SSDなのえ、一般的には産廃と言って差し支えないものです。ついでにTN液晶なのもつらい。解像度1366x768も普段遣いとしては微妙でしょう。なにより、すべての挙動がワンテンポ、いやツーテンポ……いやスリーテンポくらい遅れるゆっくり仕様。心に余裕のある人向けデバイスで、もし会社に入ってこれが支給されたらその日の間にモームリ待ったなしの代物でした。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、GUIは厳しいかなぁと思っていたのですが、Linux Mint Xfce Editionを入れたところ、思いのほかまともに動きました。それなら、よりよいスペックならばどれほどに？&lt;/p&gt;&#10;&lt;h2 id="今回のスペック"&gt;今回のスペック&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Windows 11&lt;/li&gt;&#10;&lt;li&gt;CPU: Core i5-8250U 1.60GHz 4コア8スレッド&lt;/li&gt;&#10;&lt;li&gt;RAM: 8GM(オンボード)&lt;/li&gt;&#10;&lt;li&gt;SSD: Intel 512GB, NVMe, PCIe 3.0x4&#10;&lt;ul&gt;&#10;&lt;li&gt;21TBW使用済み、健康状態96%。思ったより良い。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Display: IPS 1920x1080&#10;&lt;ul&gt;&#10;&lt;li&gt;特にムラもないし綺麗だと思う。ただ僕は画面の良し悪しわからない侍なのでなぁ。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;バッテリー: 37090mAh / 47880mAh, Cycle Count: 124&#10;&lt;ul&gt;&#10;&lt;li&gt;Cycle Count少なくてよい。80%弱はちょっと劣化してるけどまぁ中古としては状態良いほうだと思う。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これはけっこうまともと言っていよいのではないでしょうか。RAMが16GBなら完璧だったかも。各種劣化を加味しても、良いと思いました。&lt;/p&gt;&#10;&lt;p&gt;中古の相場はPC工房でCore i5-8350U, 256GBで「&lt;a class="link" href="https://www.pc-koubou.jp/products/detail.php?product_id=1015930" target="_blank" rel="noopener"&#10; &gt;Lenovo 〔中古〕 ThinkPad X280 / インテル® Core™ i5 プロセッサー -8350U 1.7GHz / メモリー8GB / SSD 256GB / Windows 11 Pro / 12.5型 フルHD / WEBカメラ / 無線LAN ※底面キズ・液晶キーボード跡(小) (中古保証3ヶ月間) | パソコン工房【公式通販】&lt;/a&gt;」より30,980円でした。BeStockなら同じようなのが19,800円とか22,800円でOSなしでありました。&lt;/p&gt;&#10;&lt;p&gt;Windows 11でも基本的な挙動は存外しっかりしていました。もたつく感じはありません。Windowsとしてもこれで十分だよっていう人はけっこういるかもです。まぁ色々入れていくと重くなっていく可能性高いですけどね。Windowsなので。8GB RAMはちょっと心許ないのはそうです。&lt;/p&gt;&#10;&lt;p&gt;というか、以下の記事は2012年12月の記事なんですけど、この時に5000円で16GBメモリを手にれているんですよね。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/26479988-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac miniをTime Machineサーバーにした&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/26479988-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2566_1789395965.webp" alt="Mac miniをTime Machineサーバーにした" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;DDR3ですが、DDR4と体感で違いわかる人っていないんじゃないでしょうか。まぁ14年前と今では円の強さが全然違うという悲しい現実もありますが、それをひっくるめても、体感できるレベルではあまり変わってないどころか、昨今のAIによるバカみたいな暴騰を見ると、PC業界はむしろ退化しているのかもしれません……。まぁだからこそ、Linux再生計画を思いついた面は大いにあるのですが……。&lt;/p&gt;&#10;&lt;h2 id="linux-mint-xfceを入れる"&gt;Linux Mint Xfceを入れる&#10;&lt;/h2&gt;&lt;p&gt;例によってLinux Mint Xfceを入れます。当然のことながら非常に快適に動きました。ディスプレイだけ、1920x1080だとかえって見づらかったので、1600x900にしました。&lt;/p&gt;&#10;&lt;p&gt;しかし、やはり本当のところは普段使いにして初めてわかるものです。一度本意気で使って試しそうと思います。そうすると個人的にはUSキーボードにしたくなってしまうのですけど…まぁでもJISキーボードも昔とったなんとやらで、少しやれば思い出せるでしょう。&lt;/p&gt;&#10;&lt;p&gt;このマシンのスペックだと、開発用としては少しパワー不足かな。サーバー用途ならばデータベースまで使ったアプリケーションもゴリゴリ使えるでしょうね。&lt;/p&gt;&#10;&lt;p&gt;ただこのスペックだと、サーバー用途は少しもったいない気もします。普段使いで全然問題ないことを見出したいですね。この記事もこのPCで書いていますが、本当にまったく問題ないです。&lt;/p&gt;&#10;&lt;h2 id="windowsのゲームはつらそう"&gt;Windowsのゲームはつらそう&#10;&lt;/h2&gt;&lt;p&gt;Wineを入れてRPGツクールなゲームとかやってみましたが…全体的にこれは厳しそう。グラフィックがうつらなかったり、遅かったり（これはスペックの問題？）、あとメモリもさすがにけっこう食うので、最低8GB必須。&lt;/p&gt;&#10;&lt;p&gt;まぁゲーム用途ではもとより厳しいかなとは思います。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;非常にサクサク動くので驚いています。このスペックでこれだけ動くなら、ほとんどの人にとっては十分なのかなと思いますね。&lt;/p&gt;&#10;&lt;p&gt;8GBメモリでもけっこう快適なので、16GBにあげるよりもSSDの容量を512GBにするほうが実用的かもしれません。512GBあれば、たいていの人は足りるはず。&lt;/p&gt;&#10;&lt;p&gt;とはいえXにログインしたとき、表示にしばらく時間がかかるのを確認するなども確認されました。結局Webブラウザなんですよねぇ、今重いのって。&lt;/p&gt;&#10;&lt;p&gt;ま、なにはともあれ、一度ちゃんと使い込んでみますか。&lt;/p&gt;&#10;</description></item><item><title>ASUS TUF GAMING F15 FX506HMのSSDの換装をする</title><link>https://hack-le.com/asus-tuf-gaming-f15-fx506hm-ssd/</link><pubDate>Thu, 29 Jan 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/asus-tuf-gaming-f15-fx506hm-ssd/</guid><description>&lt;p&gt;Linux PC計画のために、試験で使えるSSDがほしくなった。すでにストレージは高くなっているが、家に遊んでいるストレージがあるため、それを活用すればよかろうと思われた。&lt;/p&gt;&#10;&lt;p&gt;それで、面倒くさがってやらなかったが、ゲーミングPC ASUS TUF GAMING F15 FX506HMに刺していたSSD 2枚を1枚に統合した。&lt;/p&gt;&#10;&lt;h2 id="状況とやりたいこと"&gt;状況とやりたいこと&#10;&lt;/h2&gt;&lt;p&gt;やりたいことは、メインSSDのSamsung 512GBと2枚目SSDのPNY 2TBを、WD SN7100 2TBに一本化する。どうでもいいがPNYのSSDはウンコで、データ転送が途中で劇的に遅くなったり、数十GBのデータに至っては途中で停止して送れないまであった。転送データ倉庫以外の用途でおすすめしない。&lt;/p&gt;&#10;&lt;p&gt;それはさておき、現状とてもややこしいことになっている。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Cドライブ: 標準のSamsungの512GB&lt;/li&gt;&#10;&lt;li&gt;Dドライブ: 後付けしたPNYの2TB SSDがある&#10;&lt;ul&gt;&#10;&lt;li&gt;パーティションを複数にわけており、一部をWindowsのデータ用、一部をLinuxにしている&lt;/li&gt;&#10;&lt;li&gt;ブートのためにrEFIndを導入している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ディスクの管理では以下のような状態だ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/01/image-5-700x205.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Dドライブのカオスっぷりよ。&lt;/p&gt;&#10;&lt;p&gt;不明になっているディスク2は新しく導入するWDのSN7100 2TB。「ディスク2不明」のところを右クリックすると初期化できるので、GPTで初期化する。&lt;/p&gt;&#10;&lt;p&gt;これを最終的にWDのSN7100 2TBに一本化したい。Linuxのデュアルブートは一通り楽しんだのでもうやめる。&lt;/p&gt;&#10;&lt;p&gt;なので、以下の手順を実行することになる。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;CドライブのSamsung 512GBをSN7100にクローンして換装する&lt;/li&gt;&#10;&lt;li&gt;換装後、起動できることを確認してから、DドライブのデータをCドライブに移行する&lt;/li&gt;&#10;&lt;li&gt;データの移行を確認したら、rENIndを削除する。というかDドライブを初期化する&lt;/li&gt;&#10;&lt;li&gt;DドライブのPNY 2TBをSSDを取り出す&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;これによって、512GBと2TBのSSDを予備として取り出す。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;h3 id="クローンを作成する"&gt;クローンを作成する&#10;&lt;/h3&gt;&lt;p&gt;換装先のSN7100を外付けケースを購入する。ヨドバシで2500円くらいで玄人志向のケースを買った。10Gbpsのケースならそれくらいが相場。&lt;/p&gt;&#10;&lt;p&gt;前節よりディスクを初期化したうえでクローンを作成する必要があるが、WDのSSDならAcronisのソフトウェアを使わせてもらえる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://support-jp.wd.com/app/products/downloads/softwaredownloads" target="_blank" rel="noopener"&#10; &gt;Western Digital 製品ソフトウェアのダウンロード&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ソフトウェアをインストールして起動。左側のタブ「ツール」からディスクのクローン。ソースとターゲットのドライブを指定すればOK。500GBのディスクなら1時間もかからなさそう。散歩して帰ってきたら終わっていた。&lt;/p&gt;&#10;&lt;h3 id="ssdを換装する"&gt;SSDを換装する&#10;&lt;/h3&gt;&lt;p&gt;裏蓋を開けてSSDを換装する。裏蓋の開け方と位置の確認は以下の動画が参考になる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=Dou69V3oNrs" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=Dou69V3oNrs&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ネジは全部で9本、3種類の長さがあり、左下・右下が短、上中央の2つが長、それ以外が中。右下のネジがバカになりかけてて焦った。&lt;/p&gt;&#10;&lt;p&gt;カバーを開ける時、マイナスドライバーなどで隙間をこじ開ける必要がある。最初にあけるときはちょっと苦労した記憶がある。2回目以降はそうでもない。&lt;/p&gt;&#10;&lt;p&gt;左側中央の黒いカバーがあるやつが標準のSSD。中央が2枚目のSSD。&lt;/p&gt;&#10;&lt;h3 id="起動の確認"&gt;起動の確認&#10;&lt;/h3&gt;&lt;p&gt;どきどきしながら起動したところ、&lt;strong&gt;まさかのWindowsアップデートとBIOSアップデートが両方とも同時に走るというトラブルが発生&lt;/strong&gt;。なんでこのタイミングで！&lt;/p&gt;&#10;&lt;p&gt;しかし問題なくアップデートできた。よかった……。&lt;/p&gt;&#10;&lt;h3 id="トラブル-docker-desktopが動かない"&gt;トラブル: Docker Desktopが動かない&#10;&lt;/h3&gt;&lt;p&gt;なんか&lt;code&gt;Virtualization support not detected&lt;/code&gt;とか言われてDocker Desktopが動かなかった。再インストールしたが同様。なんだろう。クローンしたからなのか、BIOSのアップデートが入ったからなのか、WIndowsのアップデートが入ったからなのか……。&lt;/p&gt;&#10;&lt;p&gt;わからんが、とりあえず「Windowsの機能の有効化」より「仮想マシンプラットフォーム」と「Linux用Windowsサブシステム」について、一度チェックを外して再起動し、さらにもう一回チェックをつけて再起動。そうしたら無事認識されるようになった。&lt;/p&gt;&#10;&lt;h3 id="dドライブのデータの移動"&gt;Dドライブのデータの移動&#10;&lt;/h3&gt;&lt;p&gt;Dドライブのデータを手動で移動する。ただのデータはコピーするだけだが、プログラムが実行するものはそうもいかない。&lt;strong&gt;フォルダ移動を公式に用意してくれているかサービスは好感度がとても上がります&lt;/strong&gt;。Steamはなんだかんだ言われているけれど、原初のインターネットの精神も生き残っているよなぁと感じられる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Dropbox&#10;&lt;ul&gt;&#10;&lt;li&gt;同期フォルダを移動する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;QSync&#10;&lt;ul&gt;&#10;&lt;li&gt;同期フォルダを調べる。一度同期を停止したうえで、フォルダコピーしてから再度同期&#10;&lt;ul&gt;&#10;&lt;li&gt;遅くていいなら、空フォルダにして同期したほうが安全ではある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Steam&#10;&lt;ul&gt;&#10;&lt;li&gt;すべてのゲームのインストールフォルダを変更&lt;/li&gt;&#10;&lt;li&gt;最後にDドライブをライブラリから削除する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;HoyoPlay&#10;&lt;ul&gt;&#10;&lt;li&gt;各ゲームを再インストール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Google Play Games&#10;&lt;ul&gt;&#10;&lt;li&gt;各ゲームを再インストール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Yostar Games&#10;&lt;ul&gt;&#10;&lt;li&gt;ランチャーとゲーム本体が別々にある。プログラムの削除でランチャーを削除したうえで、ゲーム本体と一緒にフォルダごと削除&lt;/li&gt;&#10;&lt;li&gt;その後再インストール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;DMM Game Player&#10;&lt;ul&gt;&#10;&lt;li&gt;各ゲームを再インストール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Kindle&#10;&lt;ul&gt;&#10;&lt;li&gt;同期フォルダを変更する。中身についてはコピーしない。必要になったら再ダウンロードする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;なんかこうしてみると無駄にゲームいっぱいインストールしていた。全然やってないのに。阿呆なのか？&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;ということで、半日かけて移行を完了させた。やはりCドライブ1本の運用が一番楽だと思う。Dドライブはあっても本当にデータ倉庫にしないと移行が面倒くさい。&lt;/p&gt;&#10;&lt;p&gt;正直Windows使いたくないんだが、ゲームをやるなら仕方がないね。各プラットフォームもLinux対応をやってほしいものだが、そのためにはやはりLinuxを広めないといけない。今回余ったSSDはLinuxの試験のために活用しよう。&lt;/p&gt;&#10;&lt;p&gt;メモリは無駄に32GB2枚刺しにしているのだが、今となっては資産になってしまった。どうしてこんなことに……。しかも解消される見込みもない。64GBは使いきれていないので、そのうち取り出して別PCに転用するとかあるかもしれない。&lt;/p&gt;&#10;</description></item><item><title>産廃スペックのThinkPad X280 Core i3-7020Uを入手</title><link>https://hack-le.com/thinkpad-x280-get/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/thinkpad-x280-get/</guid><description>&lt;p&gt;Linux PC再生計画のため、Linuxを無難に入れやすそう（ドライバ問題とか一通りクリアしてそう）でかつ中古市場にたくさんあるラップトップとして、とりあえずThinkPad X280を手に入れました。今回はX280について一通りのことを調べまようと思います。&lt;/p&gt;&#10;&lt;h2 id="スペック"&gt;スペック&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_X280/ThinkPad_X280_Spec.PDF?v=c841f9ca-66cc-4169-8332-2262f4c46672" target="_blank" rel="noopener"&#10; &gt;https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_X280/ThinkPad_X280_Spec.PDF?v=c841f9ca-66cc-4169-8332-2262f4c46672&lt;/a&gt;&lt;a class="link" href="https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_X280/ThinkPad_X280_Spec.PDF?v=c841f9ca-66cc-4169-8332-2262f4c46672" target="_blank" rel="noopener"&#10; &gt;https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_X280/ThinkPad_X280_Spec.PDF?v=c841f9ca-66cc-4169-8332-2262f4c46672&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;X280は2018年で、仕様が刷新された模様で、当時の流行が全面的に出ています。基本的な仕様のパターンは以下です。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;項目&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;詳細内容&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;第8世代（Kaby Lake R）または 第7世代（Kaby Lake）Intel Core プロセッサー / ※第8世代 Core i5以上は4コア/8スレッド&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;メモリ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4GB / 8GB / 16GB (&lt;strong&gt;オンボード/基板直付けのため増設不可&lt;/strong&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ストレージ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;SSD (M.2 NVMe または SATA)&lt;/strong&gt; / 128GB / 256GB / 512GB / 1TB / ※2.5インチHDDスロットは廃止、M.2 2280スロット×1&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ディスプレイ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;12.5型 アンチグレア（非光沢）&lt;/strong&gt; / 1. HD TN液晶 (1366×768) / 2. FHD IPS液晶 (1920×1080) / 3. FHD IPS液晶 (1920×1080) &lt;strong&gt;マルチタッチ対応&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;グラフィックス&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Intel UHD Graphics 620（CPU内蔵）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;重量&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約1.13kg 〜（構成により異なる）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;インターフェース&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;USB Type-C ×2 (うち1つはThunderbolt 3)、USB 3.1 Gen1 (USB 3.0) ×2、HDMI、イーサネット拡張コネクター、マイクロフォン/ヘッドフォン・コンボ・ジャック&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;バッテリー駆動&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;最大約15.8時間（JEITA2.0）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;通信機能&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Wi-Fi 5 (IEEE802.11ac/a/b/g/n)、Bluetooth v4.1、WWAN（LTE対応モデルあり） / 無線チップはIntel製のはず&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;仕様書をみてもUSB Type-C Port 2つとあるのですが、筐体見ると1つしかないように見える…と思ったんだが、よく見るとイーサネット拡張用のコネクタの一部がType-Cになっていた&lt;/strong&gt;。なんて特殊なことしてるんだ。&lt;/p&gt;&#10;&lt;p&gt;ストレージ128GBはかなりギリギリ。&lt;strong&gt;SATA規格のM.2 2280&lt;/strong&gt;とかいう意味不明なものがあるが、ボード自体はNVMeに対応します。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;メモリがオンボード&lt;/strong&gt;なのが罠すぎます。この時代はメモリのソルダリングが正当化されている時代でした。クソです。だいたいAppleのせい。まぁAppleがハシゴを外したので、今はまた拡張性大事じゃね？になっていると思いますが……。&lt;/p&gt;&#10;&lt;p&gt;しかし、&lt;strong&gt;中古で蘇らせる観点では、「抜き取れない」とポジティブな見方も可能&lt;/strong&gt;ですね。抜き取れたら抜き取られちゃうでしょ。そして、&lt;strong&gt;この時代の4GB RAMの中古ラップトップは普通にWindowsを使う限りもはや産廃と言っていいでしょう&lt;/strong&gt;から、普通の人は始末に困るはずです。&lt;/p&gt;&#10;&lt;p&gt;また&lt;strong&gt;RJ45ポートが廃止&lt;/strong&gt;されました。独自の拡張コネクターがありますが、そんなもん使いたい人いるんですかねぇ。&lt;/p&gt;&#10;&lt;p&gt;ただし、充電でUSB Type-Cが使えるのは非常に良かったのではないでしょうか。&lt;/p&gt;&#10;&lt;h3 id="cpuのパターン"&gt;CPUのパターン&#10;&lt;/h3&gt;&lt;p&gt;X280は2018年、Ryzen旋風が吹き荒れてようやくIntelの尻に火がつき始めた時です。&lt;/p&gt;&#10;&lt;p&gt;なので、&lt;strong&gt;CPUが第7世代か第8世代かで大きな違いがあります。Core i5/i7においては、第8世代は4コア化しているが、第7世代は2コアしかありません&lt;/strong&gt;。一方でクロック周波数の問題もあるので一概に第8世代が良いとは言えないかもしれませんし、Windowsを動かすのに力不足なのは同じです。&lt;/p&gt;&#10;&lt;p&gt;しかし重要な問題として、第7世代はそもそもWindows 11サポート外です。この差は中古市場において大きな差となります。ただ中古市場ではだいたいみなさん無理やり入れているようです。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;世代&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;シリーズ&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;型番&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;コア/スレッド&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;基本周波数&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;第8世代&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i7-8650U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4 / 8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.90 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i7-8550U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4 / 8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.80 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i5-8350U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4 / 8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.70 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i5-8250U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4 / 8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.60 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i3-8130U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2 / 4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.20 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;第7世代&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i5-7300U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2 / 4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.60 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i5-7200U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2 / 4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.50 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i3-7100U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2 / 4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.40 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Core i3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;i3-7020U&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2 / 4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.30 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="ディスプレイのパターン"&gt;ディスプレイのパターン&#10;&lt;/h3&gt;&lt;p&gt;ディスプレイのパターンが地味に色々です。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;解像度&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;パネル種類&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;輝度&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;タッチパネル&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;特徴・備考&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;1366×768 (HD)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TN液晶&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;220 nit&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;なし&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;最廉価構成。視野角が狭く、色の変化が大きい。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;1920×1080 (FHD)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;IPS液晶&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;300 nit&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;なし&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;標準的な高精細構成。視野角が広く、発色が良い。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;1920×1080 (FHD)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;IPS液晶&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;300 nit&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;あり&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10点マルチタッチ対応。インセル方式で比較的軽量。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;タッチはどうでもいいとして、&lt;strong&gt;TN液晶とIPS液晶が混ざっているのはかなり罠&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="相場感"&gt;相場感&#10;&lt;/h3&gt;&lt;p&gt;ちょっとまだよく掴めていませんが、スペックに幅がある分、だいたい5,000円〜20,000円くらいまで幅広い感じですね。&lt;/p&gt;&#10;&lt;h2 id="今回の獲物"&gt;今回の獲物&#10;&lt;/h2&gt;&lt;p&gt;フリマでエントリーモデルとみられる、Core i3-7020U、128GB SSD、4GB RAM、TN液晶、アダプダなどの付属品なし裸本体のみ。PC工房でCoire i3-8130U, 256GB SSD, 8GB RAMが19,800円だったので、さすがにこれよりはだいぶ安いものの、それでもスペック差を考えるとちょっと高く掴んでしまったかなと思います。反省。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.pc-koubou.jp/products/detail.php?product_id=1200568" target="_blank" rel="noopener"&#10; &gt;Lenovo 〔中古〕Thinkpad X280 インテル® Core™ i3 プロセッサー -8130U/DDR4 8GB/256GB SSD/CPU内蔵/Windows 11 Home（中古保証3ヶ月間） | パソコン工房【公式通販】&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;でも、もの自体は割と綺麗でした。充電はどこにでもあるType-C ケーブルとRavPowerの45W充電器でいけました。仕様書見ると65Wもいけそう。&lt;/p&gt;&#10;&lt;p&gt;OSはWindows 11 Pro 22H2が入っていた。無理やり入れたっぽいな🤔&lt;/p&gt;&#10;&lt;h3 id="バッテリーレポート"&gt;バッテリーレポート&#10;&lt;/h3&gt;&lt;p&gt;cmdを出して&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;powercfg /batteryreport&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでhtmlが出力されます。&lt;/p&gt;&#10;&lt;p&gt;最大47,880mAhが42,880mAhに劣化(89%)していました。cycle count=46です。まぁ中古なんでこんなもんじゃないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;このへんの情報はLenovo Vantageをインストールして見てもわかります。&lt;/p&gt;&#10;&lt;h3 id="ストレージ"&gt;ストレージ&#10;&lt;/h3&gt;&lt;p&gt;CrystalDiskInfoで確認すると、当然のようにSATA。書き込みが648PBになっていたがそんなわけはない。&lt;/p&gt;&#10;&lt;p&gt;電源投入回数733、使用時間2578時間、となっていました。&lt;/p&gt;&#10;&lt;h3 id="液晶の見やすさ"&gt;液晶の見やすさ&#10;&lt;/h3&gt;&lt;p&gt;TN液晶です。クソです。ThinkPadさんが2018年にまだTN液晶を採用していたとは思いませんでした。&lt;/p&gt;&#10;&lt;h3 id="挙動"&gt;挙動&#10;&lt;/h3&gt;&lt;p&gt;すべてにおいてワンテンポ遅れる感じがあります。いやツーテンポかもしれない。Snipping Toolの起動すら遅い。そして保存がまた遅い。このPCを使い続けるのは苦行だと思います。&lt;/p&gt;&#10;&lt;h3 id="総評"&gt;総評&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;会社に入ってこのPCが配布されたらその日のうちに退職願を書き始める&lt;/strong&gt;と思います。これでWindows 11 Proと言われても使う気にならないですね。&lt;/p&gt;&#10;&lt;p&gt;通常ならばこれはデメリットなわけですが、これを生き返すことができれば、それは価値になるかと思います。そして世の中には、普通の人にとっては産廃でしかないデバイスが大量にある、とも言えるわけです。いくらインフレが進んでも、これらのジャンクPCの市場価値は産廃のままでしょう。&lt;/p&gt;&#10;&lt;p&gt;なので、こいつにLinuxを入れていきたいと思います。基本的にはサーバー用途で、監視用のダッシュボードを表示する、くらいがちょうど良さそうです。&lt;/p&gt;&#10;</description></item><item><title>古いPCのLinux再生計画</title><link>https://hack-le.com/old-pc-linux/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/old-pc-linux/</guid><description>&lt;p&gt;何もかもが高くなり、Windows 11の強行が続く昨今、Linuxに関心が生まれた人はけっこういると思います。また、突然の値上げが横行するサブスクに嫌気がさしている人も多いでしょう。&lt;/p&gt;&#10;&lt;p&gt;しかし一方で、そういった人たちが手軽にLinuxや脱サブスクに向けた自前のサービス構築に向けた足がかりが未だにないのも事実かと思います。今あるPCをまるっとLinuxにおきかえるのも、またデュアルブートもいずれも敷居が高いものです。かといって使えるかどうかもわからないのに、中古PCを買ってきて自分でLinuxのインストールから挑戦、というのも気重です。&lt;/p&gt;&#10;&lt;p&gt;これは当然というべきで、長年PCに親しみ一応ITエンジニアで給与をいただいてきた私でも、Linux目当てで中古PCを買う、というのはけっこう悩ましさがあります。インストールはもっとも基本的でありながらもっとも難しいもので、しかも最後はハードウェアの壁にぶち当たるため、金と時間を無駄にすることもありがちです。どこまで使い物になるかもやってみないとわかりません。&lt;/p&gt;&#10;&lt;p&gt;そんなことを考え、ではWindows 11のサポート切れなどで安価で流れているPCをオクやフリマで購入し、Linuxマシンとして徹底的に実機検証し、そのうえで最初から使える状態かつ何が出来て何が出来ないのかを公開すれば、多くの人にとって参考になるのではないかと思いました。&lt;/p&gt;&#10;&lt;p&gt;商売にはならなそうですが、まず私としても技術的関心があります。なによりも一人でも多くの人がWindowsでもMacでもない、ビッグテックとは異なる選択肢を見出し、自分で必要なサービスを構築することができるようになることは、これは大いに社会貢献であるように思われます。&lt;/p&gt;&#10;&lt;p&gt;そう思うとなんだかやってみたくなり、とりあえずフリマとオクでCore iの第6世代から第8世代くらいのThinkpad(X260,X270,X280あたり)を何台か購入しました。これらは流通量が多く、Linuxの実績があり、しかも第7世代以前はWindows 11のサポート外です（無理やりアップグレードしている人も多いようですが）。複数台操作することで、端末の癖と型番の癖の違いもわかるでしょう。これらのマシンを追い込んで検証のうえ、その成果を公開しようかなと思っています。&lt;/p&gt;&#10;&lt;p&gt;ま、何はともあれ技術検証ですね。届いたら早速やってみたいと思います。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-memory/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AI需要によるメモリ高騰からわかること：誰もメモリが3ヶ月で5倍になると思っていなかった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-memory/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/12/output-24.webp" alt="AI需要によるメモリ高騰からわかること：誰もメモリが3ヶ月で5倍になると思っていなかった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>最先端の暖房ガジェット：トタン湯たんぽ</title><link>https://hack-le.com/yutanpo/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/yutanpo/</guid><description>&lt;p&gt;&lt;strong&gt;都内で暖房は甘え&lt;/strong&gt;という信条のもと、私はエアコンの暖房機能を使うことはほとんどありません。さすがにまったくないとまでは言いませんが、しかし今冬でも2回くらいしかつけてないのではないかな。なので、我が家の冬の電気代は夏に比べるとかなり安くなります。まぁそれでも昨今の電気代は一昔前と比べるべくもないのですが…再エネ賦課金とかいう重税…。&lt;/p&gt;&#10;&lt;p&gt;しかしでは暖房器具をまったく使ってないのかというと、そんなこともなく、今冬より湯たんぽを導入しました。&lt;strong&gt;湯たんぽは熱を閉じ込めて持ち運ぶことができるという、画期的なガジェット&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;またプラスチック製ではなく、&lt;strong&gt;昔ながらのトタン製の湯たんぽ&lt;/strong&gt;にしました。理由としては、耐久性が高いこと、また直火で暖められることです。&lt;/p&gt;&#10;&lt;p&gt;ガスで暖められるというのは、平時と有事の両方で強さがあります。熱効率という観点だけならば電気も良いのですけれど、やはりガスのエネルギー密度にはかないません。&lt;/p&gt;&#10;&lt;p&gt;また、有事において電気は使えない可能性も高いです。その点、ガスなど火を起こす手段はいくらかありますのでね。&lt;/p&gt;&#10;&lt;p&gt;平時はもちろん、平時の延長として有事にも使える暖房器具、安くて耐久性も高い、素晴らしいことです。&lt;/p&gt;&#10;&lt;p&gt;まぁ、さすがに外出時や外出先では使いづらいですから、家の中での暖房になりますけどね。平時における取り回しの良さの観点に立てば、まぁ電気のほうがいい面もあるでしょう。&lt;/p&gt;&#10;&lt;p&gt;しかしこれから何があるかわかりませんし、少しでも平時と有事の差を縮める生活を考えたほうがよいと思うんですよねぇ…。&lt;/p&gt;&#10;&lt;p&gt;ま、なんにしても、いいですよ、トタン湯たんぽ。見た目も一周回ってレトロな良さがあると思います。おすすめです。火傷だけ気を付けましょう。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;47882&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/kairo/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;暖房しない主義：手を暖めるためにハクキンカイロ始めました&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/kairo/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/12/2025-12-08-12.24.19-scaled.webp" alt="暖房しない主義：手を暖めるためにハクキンカイロ始めました" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ブラウザでSSHログインして操作できるShell In A Boxが便利だった（Mac）</title><link>https://hack-le.com/shellinabox/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/shellinabox/</guid><description>&lt;p&gt;Webブラウザ経由でCLI実行できるの助かる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://github.com/shellinabox/shellinabox" target="_blank" rel="noopener"&#10; &gt;shellinabox/shellinabox: Official-ish Fork of Shell In A Box&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ターミナル横に開けばええやないかいとか思われそうだが、いやブラウザで開けるところに価値がある。特に&lt;strong&gt;ブラウザとしてVivaldi使っていると、Webパネルという機能でサイドバーにWebアプリを開けるのだけれど、この組み合わせが非常に強力&lt;/strong&gt;。CLIの簡単さとブラウザの強力なGUIが組み合わさって非常に強い。&lt;/p&gt;&#10;&lt;p&gt;開発自体はだいぶ前に止まっている模様。また、日本語の入力が厳しそうな感じだったので、そのうち別アプリも試したい。本格的に開発で使うぞっていうのではなく、&lt;strong&gt;いくつかのCLIツールを実行できるだけでハッピー&lt;/strong&gt;なので、とりあえずヨシ！&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&#10;&lt;ul&gt;&#10;&lt;li&gt;macOS Sonoma 14.8.1&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ShellInABox 2.20&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="インストールと使い方"&gt;インストールと使い方&#10;&lt;/h2&gt;&lt;h3 id="インストール"&gt;インストール&#10;&lt;/h3&gt;&lt;p&gt;homebrewで一発だった。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install shellinabox&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="使い方"&gt;使い方&#10;&lt;/h3&gt;&lt;p&gt;そして利用はこれだけ。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shellinaboxd -t&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;-tはhttpsの無効化。LANでしか使わないので。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;http://IPアドレス:4200&lt;/code&gt;にブラウザアクセスしたら、あとは普通に使える。&lt;/p&gt;&#10;&lt;p&gt;LAN内の別PCからもアクセスできる。sshログインするより楽かもしれない。&lt;/p&gt;&#10;&lt;h3 id="オプション"&gt;オプション&#10;&lt;/h3&gt;&lt;p&gt;以下は使いがち&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;-t&lt;/code&gt;: http接続（https無効）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-h&lt;/code&gt;: ヘルプ表示&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--no-beap&lt;/code&gt;: ブラウザ経由で音を出さない&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-p ポート番号&lt;/code&gt;: 起動するポート番号を変更する&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--version&lt;/code&gt;: バージョン番号の表示&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="macで自動起動するplist"&gt;Macで自動起動するplist&#10;&lt;/h3&gt;&lt;p&gt;こいつを例によって &lt;code&gt;$(HOME)/Library/LaunchAgents/&lt;/code&gt;において &lt;code&gt;launchctl load&lt;/code&gt;する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;?xml &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;?&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!DOCTYPE plist PUBLIC &lt;span class="s2"&gt;&amp;#34;-//Apple//DTD PLIST 1.0//EN&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;#34;&lt;/span&gt;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;plist &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;dict&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;!-- ドメインは自分ので調整 --&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;string&amp;gt;com.example.shellinabox-m2&amp;lt;/string&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;!-- パスとオプション調整 --&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;array&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;string&amp;gt;/opt/homebrew/bin/shellinaboxd&amp;lt;/string&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;string&amp;gt;-t&amp;lt;/string&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;/array&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;true/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;key&amp;gt;KeepAlive&amp;lt;/key&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;true/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;!-- ログも好きな場所に調整 --&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;key&amp;gt;StandardOutPath&amp;lt;/key&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;string&amp;gt;/tmp/shellinabox-m2.log&amp;lt;/string&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;key&amp;gt;StandardErrorPath&amp;lt;/key&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;string&amp;gt;/tmp/shellinabox-m2-error.log&amp;lt;/string&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/dict&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/plist&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="日本語問題"&gt;日本語問題&#10;&lt;/h2&gt;&lt;p&gt;そのままだと日本語が化けた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/image-2-700x197.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;LANGを設定すると表示できる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;LANG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ja_JP.UTF-8&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/image-3-700x160.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;でも入力はつらそう&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/image-4-700x42.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;これは解決できていない。&lt;strong&gt;強いて言えば日本語を使わない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="vivaldiのwebパネルとの相性がよい"&gt;VivaldiのWebパネルとの相性がよい&#10;&lt;/h2&gt;&lt;p&gt;リアルで使っている人を自分以外見たことがない系マイナーブラウザの中ではメジャーブラウザVivaldiには、Webパネルという機能がある。このWebパネルは便利だ。サイドバーにWebサイトを表示できるのだが、これによって&lt;strong&gt;サイドバーにターミナルを出現させることが可能&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;これは個人的に非常に便利だ。&lt;strong&gt;CLIの作業はけっこうブラウザで手順書を見ながらやることが多い&lt;/strong&gt;。コンテナ作る時とかね。特にインフラ周りの作業だとけっこうあるはず。&lt;/p&gt;&#10;&lt;p&gt;また、自作のスクリプトなどはわざわざGUIにするのがめんどくさいなので、コマンドまんまだったりTUIだったりする。僕の場合はサイト管理のためにいくつかのツールを作っているのだが、サイトを閲覧しながらツールを実行できるのは、けっこう快適である。&lt;/p&gt;&#10;&lt;p&gt;たとえば以下は、記事を編集しながら、その隣で&lt;code&gt;wp-mkimg&lt;/code&gt;なるWordPressサイト向けの自作コマンドを実行しようとしている。これができるのはけっこう嬉しかったりする。LAN内のどのPCからもできるし。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/ba0be3680d5e67ebcd67735a68952dad-700x201.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;lazydocker&lt;/code&gt;とか&lt;code&gt;htop&lt;/code&gt;を使ってブラウザを見ながらリソース管理することも可能だ（やりたいかは知らない）。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;ブラウザ経由でよく使うCLIツールを使いたいという第一の欲求は満たせた&lt;/strong&gt;。とりあえずよかった。日本語問題は今後困りそうなので、別のも試したい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/tsl0922/ttyd" target="_blank" rel="noopener"&#10; &gt;tsl0922/ttyd: Share your terminal over the web&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/butlerx/wetty" target="_blank" rel="noopener"&#10; &gt;butlerx/wetty: Terminal in browser over http/https. (Ajaxterm/Anyterm alternative, but much better)&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;っていうか、最初は&lt;code&gt;ttyd&lt;/code&gt;を試したのだけれど、動かなかったんだよねぇ。&lt;/p&gt;&#10;</description></item><item><title>Hantekの激安FG付きオシロDSO2D10、帯域100MHzを買って1年が経過した</title><link>https://hack-le.com/hantek-dso2d10/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/hantek-dso2d10/</guid><description>&lt;p&gt;1年ほど前になりますが、スタンドアロンのオシロスコープFG付を買いました。&lt;strong&gt;昨今の世情もあって、1年前より高くなっている気はしますが、それでも10年前を思うと圧倒的に安い&lt;/strong&gt;ですね。これは一家に一台オシロスコープの時代がきているといえるでしょう（言えない）。&lt;/p&gt;&#10;&lt;p&gt;オシロスコープはPCに繋げること前提のものならば安いものも昔からありましたが、あれは不便です。オシロはやはりスタンドアロンがいい。俺たちの中華が激安オシロを出してくれています。良いことです。&lt;/p&gt;&#10;&lt;h2 id="激安オシロで何が悪い"&gt;激安オシロで何が悪い&#10;&lt;/h2&gt;&lt;p&gt;FPGAなんも知らんのに「できらぁ」とぶっこき開発請けて始めたところ、やはりオシロとFGがないと実機試験もままならないということで、なんか安いやつないかなと物色していました。予算もないので、ソフトウェアオシロでしゃーなしかな……と思っていたのですが、なんと探してみたところ、3万円弱でFG付き100MHz帯域(1GSa/s)のスタンドアロンなオシロがありました奥さん。世界も捨てたもんじゃないですね。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://amzn.to/41hTWJd" target="_blank" rel="noopener"&#10; &gt;https://amzn.to/41hTWJd&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この手の怪しい激安オシロは、確か10年くらい前に仕事で必要になって買ったのですが、その時はせいぜい50MHz帯域のやつが10万円くらいした記憶があります。FGはあったかなぁ、なかった気がする。&lt;/p&gt;&#10;&lt;p&gt;色々見て、Hantekという安測定器で有名らしい例によって中華なメーカのやつを一丁ポチりました。DSO2D10とかいうやつです。安く買うならアリエクが一番安いんじゃないかな多分。僕はYahooのSCSのストアで買いました。…今はHantekのFG付のやつちょっと高くなっていますね…。&lt;/p&gt;&#10;&lt;h2 id="一家に一台オシロスコープ"&gt;一家に一台オシロスコープ&#10;&lt;/h2&gt;&lt;p&gt;ということでポチったのが1年以上前のことですが、それからなんだかんだと使っております。まぁ本格的に何かを計測したいわけではなく、あくまでFPGA搭載シングルボードコンピュータの実機試験が目的なのですが、その目的には十分使えています。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/image-7-700x357.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;試験で一晩中波形出力とかもしてますけど、問題なく動いてくれて助かります。やっぱりスタンドアロンがいいですよね。&lt;/p&gt;&#10;&lt;p&gt;一家に一台激安オシロ。&lt;/p&gt;&#10;</description></item><item><title>AI需要によるメモリ高騰からわかること：誰もメモリが3ヶ月で5倍になると思っていなかった</title><link>https://hack-le.com/ai-memory/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-memory/</guid><description>&lt;p&gt;今年一番上がったのはゴールド？シルバー？いいえ、メモリです。&lt;strong&gt;年初にメモリを買っていれば億り人になれました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="メモリ大暴騰"&gt;メモリ大暴騰&#10;&lt;/h2&gt;&lt;p&gt;PCが好きな人なら誰もが知っているだろう、メモリの異常な高騰。その狂気はグラフで見ると一発だ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/68e20c435e97d2d8db460dacb77d6c3f-700x574.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;おわかりいただろうか。3ヶ月のグラフだとこうなる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/7cc976d09e1bb0584adbb6296b604a33-700x719.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;3ヶ月で21,680円から126,680円にアップ！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;値下がり率-254.3%なんて初めて見たよ。値下がり率マイナスは草。&lt;/p&gt;&#10;&lt;p&gt;これでも、売っているだけマシで、kakaku.comのランキングを見ると、&lt;strong&gt;上位はまずそもそも売り切れている&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/ef3b72d7a6fbb24cbec10f1004ee1501-700x596.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;このスクショのとおり、冒頭にあげたメモリはランキング3位、まだ売っているものの中では一番売れているやつだ。他の生き残りメモリの価格と比較しても、現在の相場の価格になっていることがわかる。販売停止するcrucialだからプレミアが乗っている、というわけでもなさそうだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;さすがにパニック買いみたいなことが起きている気もする&lt;/strong&gt;が、とりあえず今日(12/21)はこんな感じでした。&lt;/p&gt;&#10;&lt;p&gt;この暴騰の原因はAI需要とされている（参考「&lt;a class="link" href="https://xenospectrum.com/samsung-shifts-hbm-production-to-ddr5-memory-shortage-analysis/" target="_blank" rel="noopener"&#10; &gt;Samsungが「HBM」の生産を縮小し「DDR5」を増産？AIブームの裏で進行するメモリ市場の劇的な構造変化と価格高騰の真実 | XenoSpectrum&lt;/a&gt;」）。少なくともみんなそう思っている。だからSNSでは、AI動画なんかに「このゴミを作るためにメモリが高くなっている」のようなヘイトの溜まったリプライや引用RPがつくようになった。は言い難い。さらに&lt;strong&gt;あまりにも突然で、予測することも不可能だった&lt;/strong&gt;。実際、誰も予想していなかった。&lt;strong&gt;対応不可能&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="誰もメモリ高騰をわかっていなかった"&gt;誰もメモリ高騰をわかっていなかった&#10;&lt;/h2&gt;&lt;p&gt;過去を振り返って思うことがある。それは、&lt;strong&gt;3ヶ月前に誰も「3ヶ月後にメモリの価格が5倍になる！」なんて言ってなかったなぁ、ということ&lt;/strong&gt;だ。まぁ、言っても信じなかっただろう。もちろん僕も。&lt;/p&gt;&#10;&lt;h3 id="誰がメモリは数倍になると預言したか"&gt;誰がメモリは数倍になると預言したか&#10;&lt;/h3&gt;&lt;p&gt;僕らは確かに、メモリやストレージに強いAI需要があることを知っていたはずだ。しかし、だからといって垂直に数倍に跳ね上がる、とは思わなかった。今こうしてチャートを見ても信じがたい気持ちがある。今パニックの最中で、来月には多少落ち着いている可能性もあるが、いずれにせよ、今起きている狂乱は記録として残る。誰がこれを予想できただろう。&lt;/p&gt;&#10;&lt;p&gt;誰か一人でもいたか？3ヶ月後にメモリが5倍になるので買うなら今です、というYouTuberがいたか？5倍になってから言ってる奴はいっぱいいるが。&lt;/p&gt;&#10;&lt;p&gt;11月27日のBloombergの記事「&lt;a class="link" href="https://about.bloomberg.co.jp/solution/bloomberg-terminal/" target="_blank" rel="noopener"&#10; &gt;AI需要急増でメモリー不足懸念、デルやHPがコスト上昇の波及を警告 - Bloomberg&lt;/a&gt;」にはこうある。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;カウンターポイント・リサーチは今月、メモリーモジュール価格が来年4－6月（第2四半期）までに50%上昇するとの&lt;a class="link" href="https://counterpointresearch.com/en/insights/advanced-memory-prices-likely-to-double-as-dram-crunch-spreads-on-nvidia-pivot-structural-factors" target="_blank" rel="noopener"&#10; &gt;予測&lt;/a&gt;を示した。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;現実は一ヶ月もたたないうちに「&lt;a class="link" href="https://gigazine.net/news/20251217-samsung-ddr5-memory/" target="_blank" rel="noopener"&#10; &gt;サムスンがDDR5メモリの価格を100％以上引き上げ - GIGAZINE&lt;/a&gt;(12/17の記事)」となっている。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;僕らは誰一人として、本当のところを何もわかっていなかった&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="価格は線形に上がらず非線形に暴騰する"&gt;価格は線形に上がらず、非線形に暴騰する&#10;&lt;/h3&gt;&lt;p&gt;不足って、こういうことなんだなぁ、となんだかしみじみ実感した。&lt;strong&gt;価格が線形に上がっていくのは、なんだかんだいってまだ「ある」からで、本当に「ない」となった時、価格は非線形に暴騰する&lt;/strong&gt;。&lt;strong&gt;ないことがさらなる需要を呼ぶ&lt;/strong&gt;。まぁこれがみんな大嫌い転売ヤーのメカニズムの一つではあるんだろうね。今回ばかりは転売ヤーのせいではないが……。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;僕らはコップに水が溜まる量はある程度わかるけれど、コップの高さもその形も知らない&lt;/strong&gt;んだろう。&lt;/p&gt;&#10;&lt;p&gt;そうすると、他のことはどうなのか心配になる。AIが必要としているのはメモリだけじゃない。電気や水は？また、銅をはじめさまざまな部材や、労働力を必要とするはずだ。それらは問題ないんだろうか。少なくともメモリについては、その変曲点を誰も知らなかった。&lt;/p&gt;&#10;&lt;p&gt;電気ひとつとっても、コップの高さを当てるのは難しい。発電だけではない。変調、送電、蓄電、さまざまな仕組みが統合されて電気は届く。そのすべてを見通している人はいないだろう。つまり、&lt;strong&gt;電気の需要はわかるかもしれないが、その需要を満たせるのかは、本当のところ誰もわかっていないのでは？&lt;/strong&gt; そして満たせなくなったとき、価格は暴騰するのでは？へたしたら、価格もつかないのでは？&lt;/p&gt;&#10;&lt;p&gt;これは電気だけではなく、あらゆるリソースでそれが言えるわけだが、大丈夫なんだろうか。&lt;/p&gt;&#10;&lt;h2 id="リソースはあるだけ使われる"&gt;リソースはあるだけ使われる&#10;&lt;/h2&gt;&lt;p&gt;ソフトウェアの世界では、リソースはあるだけ使われる。半導体の進歩は凄まじいが、その一方で実際のアプリケーションの体感速度はどうだろうか。まぁテレホタイム時代の画像表示からよくなったのは確かだが、その後は本質的ではないレンダリングや通信にリソースが奪われ、体感はむしろ遅くなっているような感じがする。&lt;/p&gt;&#10;&lt;p&gt;だが&lt;strong&gt;PCの使えるメモリはわかっているが、社会のメモリは不明である&lt;/strong&gt;。この状態で、無限のソフトウェアを作ろうとしたとき、いったいどうなるんだろうか。PCならば落ちるだけだが、それが社会だったら？&lt;/p&gt;&#10;&lt;h2 id="xデーを誰も知らない"&gt;Xデーを誰も知らない&#10;&lt;/h2&gt;&lt;p&gt;ということを考えると、少し悲観に過ぎるのかもしれないのだが、僕としては、今回のメモリ高騰は良い予行演習だった、と思っている。少なくとも、&lt;strong&gt;これから何かが起きるとしても、その直前まで、誰も具体的なことを言っていない、ということは間違いないだろう&lt;/strong&gt;。そのつもりでいかねば。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-spec-down/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AI革命で一般ユーザのPCがスペックダウンする謎の技術革新&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-spec-down/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/12/output-18.webp" alt="AI革命で一般ユーザのPCがスペックダウンする謎の技術革新" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>HP Inspire Envy 7221の愚痴</title><link>https://hack-le.com/hp-inspire-envy-7221-guchi/</link><pubDate>Tue, 23 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/hp-inspire-envy-7221-guchi/</guid><description>&lt;p&gt;去年、電帳法に対応するためにプリンタが必要になった。プリンタなんてイマドキいらないと思っていたが、法令遵守のために仕方なく買った。&lt;/p&gt;&#10;&lt;p&gt;そんな感じだから、プリンタはなんでもいいと思った。ただ壊れづらいほうがいいなと思って、当時たまたまセールをしていてかつ、インクの交換がヘッドごとという特徴をもつHP Inspire Envy 7221を買った。&lt;/p&gt;&#10;&lt;p&gt;正直、あまり満足はしていない。&lt;/p&gt;&#10;&lt;h2 id="少し使わないだけでインクが掠れる"&gt;少し使わないだけでインクが掠れる&#10;&lt;/h2&gt;&lt;p&gt;プリンタをあまり使わない運用だから、&lt;strong&gt;油断すると一週間二週間くらいは平気で放置するのだが、それによってインクが出なくなる&lt;/strong&gt;。今までインクを使い切ったことがなく、すべて放置で掠れるパターンになった。レビューを見ていてある程度知っていたのだが、思ったよりも頻度が高かった。&lt;/p&gt;&#10;&lt;p&gt;仕方ないので、&lt;strong&gt;今はTODOリストをできるだけ毎日印刷するなどしている&lt;/strong&gt;。ただこのルーチン自体は、怪我の功名ではあるが、やってみると案外いいことに思えた。電池を使わず、雑における固定画面ディスプレイと思えば、これは一周回って良いものに思えた。何を言っているのか、という感じだが、やはりアナログにはアナログの良さがある、という当たり前の話ではある。&lt;/p&gt;&#10;&lt;h2 id="無線が切れる"&gt;無線が切れる&#10;&lt;/h2&gt;&lt;p&gt;気がつくと無線が切れる。&lt;strong&gt;再接続すればいいというわけでもなく、無線のセットアップを初期化するしかない&lt;/strong&gt;。この一年で何度もセットアップさせられた。けっこう面倒な思いをした。&lt;/p&gt;&#10;&lt;p&gt;やはりこういう機器は安定第一で、有線に勝るものなし、なのかなぁと思った。プリンタやスキャナは、その性質上作業する部屋に置いてあることが多いし、そうするとケーブルの引き回し自体は、最初はちょっと苦労するかもしれないが、まずできるだろう。どうせ無線のセットアップで苦労するなら、有線で引いたほうがいいのではないか、と思えた。&lt;/p&gt;&#10;&lt;p&gt;無線の醍醐味はむしろスタンドアロンで扱えることかもしれないんだけれど、スタンドアロンといってもUSBメモリでやるんでなければクラウド前提ということになるのだし（というかUSBメモリだったらネットいらんね）、それはそれで依存度が強くなんだなかなぁと思う。&lt;/p&gt;&#10;&lt;p&gt;なお、ルータとの相性問題の可能性はある。うちのルータはTP-LinkのAX5400（AX73）を使っている。ただ、ルータ自体は他のデバイスとこういった不具合を起こしたことはないので、自分としてはHPのほうを疑っている。&lt;/p&gt;&#10;&lt;h2 id="用紙サイズの検出に失敗する"&gt;用紙サイズの検出に失敗する&#10;&lt;/h2&gt;&lt;p&gt;ちょくちょく、用紙サイズ不一致、のエラーを起こす。&lt;/p&gt;&#10;&lt;p&gt;トレイは一つしかないのだが、機能としてはA4と写真印刷の二種類があるために、誤判定を起こすのだと思う。そんなに間違えるもんだろうか。A4と写真用用紙はかなり大きさが異なる。いったいどうやって検出しているんだろう。なぜ失敗するのかよくわからない。&lt;/p&gt;&#10;&lt;p&gt;用紙の置き方にコツがあるとも思えず、ただただプリンタ側の誤検出だと思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/2025-11-20-14.01.19-700x503.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;これが起きると、だいたい紙詰まりしている。面倒くさい。&lt;/p&gt;&#10;&lt;h2 id="プリンタを買ったことはよかった"&gt;プリンタを買ったことはよかった&#10;&lt;/h2&gt;&lt;p&gt;愚痴愚痴と言ったが、プリンタを買ったこと自体は、実はけっこうよかったかな、と思っている。なんというか、紙という媒体の凄さを今さらながら確認した。2000年代から2010年代に青春を駆け抜けた僕は、ややデジタル偏重になり、紙という紙を部屋から捨て去った。まぁそれはキャリア上必要に迫られたこともある……移動が必要だった。それも大移動が。移動においてデジタルは現代はリアルホイポイカプセルであって革命的な存在だった。&lt;/p&gt;&#10;&lt;p&gt;しかしポータビリティや検索性などを除けば、紙にしかない機能は確かにある。バッテリーが不要、ディスプレイとして複製可能、コストが安いので雑に扱える。これらの機能は紙にしかない。&lt;/p&gt;&#10;&lt;p&gt;なので、TODOリストや覚えたいこと、チートシートの印刷など、印刷という技術はもっと有効活用するべきところがあったなぁと、そんなことをいまさら思った。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14909&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/select-printer/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;あまり印刷しない人のプリンタ選び&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/select-printer/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_14907_1789096138.webp" alt="あまり印刷しない人のプリンタ選び" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/44356706-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;移動が多いと電子書籍は有難い&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/44356706-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2627_1789089352.webp" alt="移動が多いと電子書籍は有難い" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>AIによるまとめや議事録はどこまで使えるのか</title><link>https://hack-le.com/aigijiroku/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/aigijiroku/</guid><description>&lt;p&gt;僕はAIによるまとめ、議事録なんてのは本質的に使い物ににならない、と思っていたのだけれど、友人曰く、AI議事録をけっこう便利に使っているらしい。僕はAI議事録を実際に使っていないし、友人が言うならそうなのかなぁと思った。&lt;/p&gt;&#10;&lt;p&gt;しかし僕の普段AIチャットを使っている肌感だと、使い物になるとは思えない。どこらへんに違いがあるのだろう。&lt;/p&gt;&#10;&lt;h2 id="aiには濃淡がない濃淡がなければできる"&gt;AIには濃淡がない→濃淡がなければできる&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;僕がAI議事録やまとめに否定的なことの一つは、AIの回答には濃淡がないからだ&lt;/strong&gt;。まぁあるように見せかけるかもしれないんだが、実際にはない。&lt;/p&gt;&#10;&lt;p&gt;「それとこれを並べるの！？」という驚きは、チャットではけっこうよくあるのではないか。たとえば「もう本当にあらゆるものが高くてつらい。卵も値上がりするし、こんなんじゃ家なんて……」と愚痴ったとして、あとでAIに「高いものの具体例をまとめて」と言えば&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;卵&lt;/li&gt;&#10;&lt;li&gt;家&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;と列挙すること請け合いだ。もしジョークの一つでも挟めば、そのジョークもガッツリ取り入れるだろう。これは&lt;strong&gt;AIの根本的な理解のなさによる&lt;/strong&gt;。AIにとってはどちらも「話者の提示した具体例としての文字列」なわけだ。なので、実務的にはどうでもいいタスクAと一大プロジェクトBが並列にならんだりもする。&lt;/p&gt;&#10;&lt;p&gt;そういう次第だから、&lt;strong&gt;まとめなんかさせると、なんだか何が言いたいのかよくわからないぼやけたものができる&lt;/strong&gt;。だから僕はAIに分析などはさせないようになった。やるとすれば論点の列挙、くらいだ（しかしそれも抽象度の切り分けがいつも奇妙だ！）。&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;逆にいうと、そういった濃淡が必要なければ、それはできそう&lt;/strong&gt;だ。というかまさに、論点の列挙がそうなる。で、議事録として「何が話されたか」「タスクの割り当て」「Next Action」は、厳密には階層があるものの、実務的にはフラットで十分であるし、そのほうがわかりやすかったりする。&lt;/p&gt;&#10;&lt;p&gt;なので、機能的に確かに十分使えるかもなぁ、とは思えた。&lt;/p&gt;&#10;&lt;h2 id="aiは責任がない責任が不要ならできる"&gt;AIは責任がない→責任が不要ならできる&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;もう一つ、僕がAI議事録やまとめについて否定的な理由は、AIは責任が持てないことだ&lt;/strong&gt;。無責任なやつの言うことなど信用できない。したがって、AIの議事録やまとめにも責任がないため、それそのものは信ずるに値しない。よって、AI議事録は根拠にできない。以下のようになるだろう。&lt;/p&gt;&#10;&lt;p&gt;「AI議事録を見てください、あなたはこの日そういいました」&lt;br&gt;&#10;「はぁ？AIが間違えたんじゃないの？」&lt;/p&gt;&#10;&lt;p&gt;これを防ぐには、&lt;strong&gt;AI議事録の内容を全員が承認する、という儀式が必要&lt;/strong&gt;になる。しかしそうすると、「今までなかった手間」が増えることになり、いったいそれでは楽になったと言えるかわからないし、また「毎回確認を求められるために、儀式化していた。内容を認めない。重要な議事録はAIにやらせるべきではないし、特別な承認フローがあるべきだ」と強弁するなどもあるかもしれない。力関係次第で全然あるだろうな。&lt;/p&gt;&#10;&lt;p&gt;逆にいうと、そういう言った言わないが発生しない、つまりもとよりAIによる議事録が純粋に参考として活用される環境ならば、使える。言い換えると、&lt;strong&gt;信用の根拠ではなく、あくまでも実務のためならば、使える&lt;/strong&gt;かもしれん。&lt;/p&gt;&#10;&lt;p&gt;まとめにおいても、そういえば僕はけっこうAIに技術的な質問の備忘録を記事にさせているので、これは考えるとAIまとめかも？信用の根拠にしない、という条件がつくならば、機能的にはある程度いけんのかもね。&lt;/p&gt;&#10;&lt;h2 id="ご利用の条件"&gt;ご利用の条件&#10;&lt;/h2&gt;&lt;p&gt;以上より、AIによる議事録、まとめについては、以下の条件がそろえば使えるのかなぁと思った。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;項目をフラットに抽出する&lt;/li&gt;&#10;&lt;li&gt;信用の根拠にしない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;逆にいうと、これ以上を求めると、やっぱり使えないんじゃないかね。&lt;/p&gt;&#10;</description></item><item><title>AI革命で一般ユーザのPCがスペックダウンする謎の技術革新</title><link>https://hack-le.com/ai-spec-down/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-spec-down/</guid><description>&lt;p&gt;最近のメモリ高騰のバカ騒ぎを見ていると、世の中けったいなことが起きているなぁと、ただでさえ厭世的な今日この頃なのに、余計に辟易とさせられてしまうね。なんだかなぁ。&lt;/p&gt;&#10;&lt;h2 id="メモリ高騰でpcも値上がりか"&gt;メモリ高騰でPCも値上がりか&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://taisy0.com/2025/12/14/218090.html" target="_blank" rel="noopener"&#10; &gt;メモリ高騰は2026年第1四半期も継続へ｜スマホやノートPCの搭載メモリ容量も引き下げられる見通し | 気になる、記になる…&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.itmedia.co.jp/news/articles/2512/11/news084.html" target="_blank" rel="noopener"&#10; &gt;メモリ高騰でパソコンは値上げする？ メーカー各社に聞いた【追記あり】 - ITmedia NEWS&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;外資の回答が不誠実過ぎる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;もとより僕は用がなくてもメモリやSSDの価格をチェックして、安くなっているのを見ると、特に必要はないので買わないのだが、しかし健康に寄与しているなぁと実感する性質であるので、昨今の狂ったようなメモリ高騰にはだいぶウンザリしている。メモリとストレージはずっともなのでもちろんSSDも値上がりしているわけだよ&lt;/p&gt;&#10;&lt;p&gt;[SSDはCrucialを中心に大幅な値上がりが継続、新モデルは「WD Black SN8100」のヒートシンク搭載版が発売[12月前半のSSD価格]] - AKIBA PC Hotline!](&lt;a class="link" href="https://akiba-pc.watch.impress.co.jp/docs/price/monthly_repo/2069920.html" target="_blank" rel="noopener"&#10; &gt;https://akiba-pc.watch.impress.co.jp/docs/price/monthly_repo/2069920.html&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、冒頭に紹介した各メーカーの声明記事においては、「お客様の価値へのコミットメント」を維持しているとのことであったDellは、法人向けではあるけれど、早速値上げするらしい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.nichepcgamer.com/archives/dell-is-reported-to-raise-prices-on-its-pc-products-on-december-17-2025.html" target="_blank" rel="noopener"&#10; &gt;Dell、ついにPCを値上げ。Xデーは2025年12月17日。かなりの値上げ幅 | ニッチなPCゲーマーの環境構築Z&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;うーんこれがコミットメント。&lt;/p&gt;&#10;&lt;p&gt;まぁ原価にダイレクトにかかわるのだから、事情はわかるものの、ユーザにとって価格の内訳は関係なく、ただ総額だけがある。ということで、「今は時期が悪い、でも待つともっと悪くなる！」という悲鳴があちこちで上がっており、俺たちのマウスコンピュータは買うなら今と言わんばかりのツイートをしていた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://pc.watch.impress.co.jp/docs/news/2070385.html" target="_blank" rel="noopener"&#10; &gt;マウスにもメモリ高騰の波が？Xで「悪いことは言いません、早目の購入を」 - PC Watch&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;通常こういうメッセージは売り手による商売根性むき出しと捉えられて歓迎されないと思うが、今回ばかりは「完全にそのとおりだ」とユーザ側も真摯な警告と受け止めていたように思う。&lt;strong&gt;少なくとも、「お客様の価値にコミットメント」より誠実なメッセージだと受け取られた&lt;/strong&gt;のではなかろうか（なお記事執筆後マウスでも値上げが確認された「&lt;a class="link" href="https://pc.watch.impress.co.jp/docs/news/2071627.html" target="_blank" rel="noopener"&#10; &gt;「PC買うなら急げ」は本当だった。マウスが一部販売停止&amp;amp;1月値上げを発表 - PC Watch&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="待つほど悪くなる時代"&gt;待つほど悪くなる時代&#10;&lt;/h2&gt;&lt;p&gt;それにしても、PCの市場自体はせいぜい40年くらいのものだと思うのだけれど、その間にもいろいろとあったが、&lt;strong&gt;今が一番の買い時で、これから中長期的に悪くなるだろう、という見通しが立っているというのは、実は初めてではないのだろうか&lt;/strong&gt;。少なくとも、僕が物心ついてPCに興味をもったここ25年ほどでは初に思う。&lt;/p&gt;&#10;&lt;p&gt;確かにこれまでも何かとあったものの、ムーアの法則のようなハードウェア部分の革新が大きかったこともあり、&lt;strong&gt;基本的にはPCは「待てば待つだけよくなる」という通念があった&lt;/strong&gt;ように思われる。まぁムーアの法則が通用しなくなってきた2010年代半ばには停滞感も確かにだいぶあったけど、悪くなるというほどではなかった。そこへRyzenがきて、さらにAppleSiliconがきて、ということで、停滞感は払拭された。&lt;/p&gt;&#10;&lt;h2 id="実はメモリ高騰以前から悪化していた"&gt;実はメモリ高騰以前から悪化していた&#10;&lt;/h2&gt;&lt;p&gt;…と思ったのだけれど、考えてみると、&lt;strong&gt;そういえばAppleSiliconの登場からしばらくまでがピークで、なんだかそれ以降は微妙だったかもしれない&lt;/strong&gt;。CPUはまだよかったのだが、GPUがね…仮想通貨に振り回されていたし、その後はChatGPT-3.5の鮮烈なデビューが3年前ということで、まぁずっと高くなっていて中古も安くならず…。&lt;/p&gt;&#10;&lt;p&gt;実際、僕の持っているノートPCはASUS TUF GAMING F15で、Core i5-11400H 6コア 2.7GHz + NVIDIA GTX3060(laptop, VRAM 6GB)なのだけれど、2021年11月当時に109,800円で購入している。&lt;/p&gt;&#10;&lt;p&gt;で、2025年12月現在、同じく109,800円のものをkakaku.comで調べてみると、&lt;a class="link" href="https://kakaku.com/item/K0001619833/spec/#tab" target="_blank" rel="noopener"&#10; &gt;価格.com - Lenovo LOQ 15IRX9 Core i5 13450HX・16GBメモリー・512GB SSD・RTX 3050・15.6型フルHD液晶搭載 83DV00KNJP [ルナグレー] スペック・仕様&lt;/a&gt;があったが、Core i5 13450HX(10コア)はいいとして、GPUがRTX3050になっているのはとてもつらい感じだ。さらにメモリがDDR5である一方、最大32GBなのも地味に悪い（今のノートPCは無駄に64GBに増設している）。まぁ64GBあったところで、もはや買う気にならない価格なわけだが…。&lt;/p&gt;&#10;&lt;p&gt;このPC価格はメモリ高騰の影響を受ける前からだ。つまり、&lt;strong&gt;メモリ高騰とか関係なく、すでにゲーミングPCにおいては4年たっても進化はないどころか、悪くなっていた&lt;/strong&gt;、といえそうだ。まぁ&lt;strong&gt;日本市場では円安の問題がでかいのはそのとおりなんだけどね&lt;/strong&gt;…。&lt;/p&gt;&#10;&lt;h2 id="受益者と負担者が違う件"&gt;受益者と負担者が違う件&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;ただでさえ悪化していたところに、今回のメモリ高騰がトドメとなった&lt;/strong&gt;、という感じかもしれないね。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、僕からしても、今後のPCの見通しについてはかなり悲観的だ。PCは常に今が一番良くて、待つほどに悪くなる時代に入ってしまったのだろうか。そして&lt;strong&gt;ユーザのPCが劣化する理由は技術革新です、というんじゃ、本当に意味が分からない&lt;/strong&gt;。いったい何をしているんだ俺たちは。&lt;/p&gt;&#10;&lt;p&gt;そして今回はメモリだから、業界人の間に激震が走る程度なのだが、AIが必要とするのはメモリだけではない。電気、水、そしてそれらも不足することが予測されている。&lt;strong&gt;この調子で、本当に電気と水が不足したら、いったいどうなるんだろう？&lt;/strong&gt; DRAMという、比較的増やしやすいものでも供給が追い付かず、業界全体で負担を被っている、というのが今回なんだが、電気と水で同じことがおきたら、これは本当にシャレにならないよなぁ。&lt;/p&gt;&#10;&lt;p&gt;今回&lt;strong&gt;示唆的に思うのは、AIの恩恵を受けているとは言い難い、少なくともAIで経済的に豊かになっているわけではない僕らが、価格の暴騰という形でコストを負わされている構図だ。&lt;/strong&gt; これでは&lt;strong&gt;技術革新というより技術の独占&lt;/strong&gt;ではないか…。そして&lt;strong&gt;もし電気や水で不足が起きたら、同じことが社会レベルで起きる&lt;/strong&gt;わけだよねぇ。こりゃちょっと納得いかんというか、それ以前に生存レベルの話になってしまうような…。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;今回のメモリの件は、業界の話で済ませずに、ちゃんとAIのリソースについて向き合うべきなんじゃないのかなぁ&lt;/strong&gt;。AIはこれまでのソフトウェア業界の常識が通用しなくて、あまりにも計算資源が高すぎる。&lt;/p&gt;&#10;&lt;p&gt;いったい僕らはどこに向かっているのだろう…と思いつつ、&lt;strong&gt;とりあえず今あるPCは大事にしよう&lt;/strong&gt;、と思うのであった。&lt;/p&gt;&#10;&lt;h2 id="関連"&gt;関連&#10;&lt;/h2&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aibubble-revo/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIは革命だが、バブルは崩壊するし、崩壊はAIにとどまらない&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aibubble-revo/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output.webp" alt="AIは革命だが、バブルは崩壊するし、崩壊はAIにとどまらない" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;当たり前だが、本当に崩壊すれば社会はもっとつらいことになる。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/07/eyecatch_45815_1783902299.webp" alt="ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;もう30万円では買えなくなりました。&lt;/p&gt;&#10;</description></item><item><title>AI画像生成の吹き出しでハマったらチャットやり直した方がよさそう</title><link>https://hack-le.com/aigazou-fukidasi/</link><pubDate>Sat, 13 Dec 2025 07:34:24 +0900</pubDate><guid>https://hack-le.com/aigazou-fukidasi/</guid><description>&lt;p&gt;最近トップページに雑な画像を貼っている。たとえばこんなの。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/61e1bcacec7f15a438da2c4f936b9b36-700x467.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;このしょうもない画像を作るためにメモリが高騰していると考えると泣けてくるが、まぁきっと世の中には世のため人のため社会のために画像作っている人もいるんだろう知らんけど。&lt;/p&gt;&#10;&lt;p&gt;さてそれはともかく、&lt;strong&gt;ローカルでStable Diffusionなんかを使うのと違ってありがたいのはやはり「セリフ」と「吹き出し」まで生成してくれる手軽さだ&lt;/strong&gt;。手軽といってもやはり難しいには違いないらしく、&lt;strong&gt;一発でクリアできないことが多い&lt;/strong&gt;。なんならハマることもある。&lt;/p&gt;&#10;&lt;p&gt;今回はChatGPT 5.1でハマった事例。ついでにGemini 3もやった事例。&lt;/p&gt;&#10;&lt;h2 id="chatgpt-51"&gt;ChatGPT 5.1&#10;&lt;/h2&gt;&lt;p&gt;雑なプロンプトは以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ブログのトップに使う漫画を作って。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;このコマは毎日入れ替えるくらいの使い捨て。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;少しクスッ、と思えるものがよい。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## 全体&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;コマ数: 1コマ&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;アスペクト比: 横長&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;スタイル: シンプルな白黒コミック&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## 1コマ目&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;キャラクター: ダンベルを持っている猫&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;吹き出し:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;暖房は甘え&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;背景: シンプル&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="auto多分instant"&gt;Auto（多分Instant）&#10;&lt;/h3&gt;&lt;p&gt;この雑なプロンプトをChatGPTに投げてできたのたこれ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/62c00aae7f26fdd1a39d021ee9b47ccb-700x467.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;マジか。これについて「文字を間違えている。「暖房は甘え」です」と雑に指摘。すると以下ができた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/c8f81f055e6f3030ba8eced66465bdf1-700x700.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;マジなのか。恐らくアスペクト比ワイドでつくったのに、実際は正方形で出してしまっているのであろう混乱と、そして&lt;strong&gt;謎の漢字&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;「文字が見切れている。また、暖房の文字もおかしい。」と指摘して出てきたのが以下。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/04ea71fe8d71c2119cdb30322b39f546-700x467.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;もうええわ。多分文字が見切れていることは気づいたのだろうが、文字がいよいよ大変なことになっている。&lt;/p&gt;&#10;&lt;p&gt;まぁこれについては、ちゃんと指摘すれば修正される余地はある気がしたものの、このまま続けているとメモリの価格がさらに上がるのも残当なので撤退。&lt;/p&gt;&#10;&lt;h3 id="thinkingでやりなおし"&gt;Thinkingでやりなおし&#10;&lt;/h3&gt;&lt;p&gt;新しくチャットを開いて、今度はThinkingモードでやってみた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/7a75feffa17447b3a0938c1f28b7d650-700x467.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;今度はうまくいった。まぁなんか見切れているので、例によって生成と出力でアスペクト比に齟齬があるように見えるが、まぁ雑画像なら別にいいか、という感じ。&lt;/p&gt;&#10;&lt;h3 id="autoでやりなおし"&gt;Autoでやりなおし&#10;&lt;/h3&gt;&lt;p&gt;Thinkingの必要があるのだろうか？と思って、Autoにして再度チャットルームを開き、もう一度同じプロンプトを貼った。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/69f084327d5f4bbf8e907bb17ea778cb-700x467.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;やっぱりアスペクト比問題と思われる見切れは発生しているんだが、今度はうまくいった模様。&lt;/p&gt;&#10;&lt;h2 id="nanobanana-gemini"&gt;NanoBanana (Gemini)&#10;&lt;/h2&gt;&lt;p&gt;ついでなのでNano Banana（Gemini）も試してみた。&lt;/p&gt;&#10;&lt;h3 id="高速モード"&gt;高速モード&#10;&lt;/h3&gt;&lt;p&gt;Flashのことだと思うが、いったんそれでプロンプトを投げた。一瞬でできた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/Gemini_Generated_Image_1syxce1syxce1syx-700x700.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;一瞬でできたが残念。何語？噂のNano Bananaこんなもんなんか。&lt;/p&gt;&#10;&lt;h3 id="思考モード"&gt;思考モード&#10;&lt;/h3&gt;&lt;p&gt;と思ったところで、思考モード（3 Pro） でやれというご指示をいただいた。そうかと思ってまったく同じプロンプトであげなおすと、以下が出力された。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/Gemini_Generated_Image_vnlwnivnlwnivnlw-700x297.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;おう。一応できている。ちょっと思ったよりワイド過ぎるが、アスペクト比については細かく指定しなかったのでしゃーなし。&lt;/p&gt;&#10;&lt;h3 id="高速モードでもう一回"&gt;高速モードでもう一回&#10;&lt;/h3&gt;&lt;p&gt;ふと、これもガチャの影響が強いかもしれない、と思って、高速モードに切り替えて同じプロンプトをもう一回投げた。前と同じ画像が出てきた。キャッシュかな。&lt;/p&gt;&#10;&lt;p&gt;まぁ画像生成速度にあからさまな差があるし、Geminiで画像作るなら3 Proでやれ、ということだろう。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;雑なまとめ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;確かに文字出力もできるものの、やはり難しい&lt;/li&gt;&#10;&lt;li&gt;ガチャがあるので、ハマったら変に粘らず撤退してルームやり直すほうがいい&#10;&lt;ul&gt;&#10;&lt;li&gt;連続してシリーズ的に作っているルームがあるなら、やり直しはしんどいかもしれないのだが、そんな人いるんだろうか&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Geminiで画像作るなら3 Pro&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;たったこれだけの1コマでも、やってみると試行錯誤が発生する&lt;/strong&gt;ので、巷でたまに見かけるよくできたAI漫画みたいなのは、どれだけの出力を試行したのだろうかと、メモリの高騰に想いを馳せて泣く。画像も動画もこれ以上いらないんだけどな。と言いつつ、あったら使いたくなるので雑な画像作って「ふーん」ってなってる。なんだかなぁ。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/chatgpt-dall-e-3-%e3%81%a7%e3%81%93%e3%81%a0%e3%82%8f%e3%82%8a%e3%81%ae%e3%81%aa%e3%81%84%e3%82%a2%e3%82%a4%e3%82%ad%e3%83%a3%e3%83%83%e3%83%81%e7%94%bb%e5%83%8f%e4%bd%9c%e6%88%90/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ChatGPT &amp;#43; DALL-E 3 でアイキャッチ画像を作成する&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/chatgpt-dall-e-3-でこだわりのないアイキャッチ画像作成/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/12/output-8.webp" alt="ChatGPT &amp;#43; DALL-E 3 でアイキャッチ画像を作成する" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;他人様&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.techno-edge.net/article/2025/11/26/4733.html" target="_blank" rel="noopener"&#10; &gt;Google「Nano Banana Pro」で“漫画”生成祭り開催中。一発出しでこの仕上がり……（生成AIクローズアップ） | テクノエッジ TechnoEdge&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>普通の質問でも今(2025年12月現在)はGemini &gt; ChatGPTっぽい</title><link>https://hack-le.com/geminichatgpt/</link><pubDate>Tue, 09 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/geminichatgpt/</guid><description>&lt;p&gt;次の課金は完全にGeminiになるだろうと思う。あらゆるところでChatGPTの劣化を感じているのだけれど、ちょっとした質問レベルでも、ChatGPTはなんというか、常に煙に巻かれているように思われる。&lt;/p&gt;&#10;&lt;p&gt;そう思った一例。&lt;/p&gt;&#10;&lt;h2 id="質問gdpデフレータとは"&gt;質問：GDPデフレータとは&#10;&lt;/h2&gt;&lt;p&gt;今回の質問はこれ。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;GDP deflatorってのはなにを示すの？&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;極めてシンプルかつ、大したことを聞いていない。&lt;/p&gt;&#10;&lt;h2 id="chatgpt-51-thinking"&gt;ChatGPT 5.1 Thinking&#10;&lt;/h2&gt;&lt;p&gt;Instantは阿呆すぎるので、最近は常にThinkingにしている。&lt;/p&gt;&#10;&lt;p&gt;その結果がこれ。長いけど全文引用する。ちゃんと読まなくても眺めればいいよ。&lt;/p&gt;&#10;&lt;h3 id="回答"&gt;回答&#10;&lt;/h3&gt;&lt;p&gt;GDPデフレーターは、**名目GDPと実質GDPの差から計算される「国内で生産されたモノ・サービス全体の価格水準」**を示す指標です。ざっくり言うと、&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;物価がどれくらい上がった／下がったか&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;ただし対象は&lt;strong&gt;輸入品ではなく、国内で生産されたものだけ&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;消費・投資・政府支出・輸出など、&lt;strong&gt;GDPに含まれるもの全部をまとめた平均的な価格&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;を見ています。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;どう計算する？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;基本式はこれです：&lt;/p&gt;&#10;&lt;p&gt;&lt;math display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;GDPデフレーター&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mtext&gt;名目GDP&lt;/mtext&gt;&lt;mtext&gt;実質GDP&lt;/mtext&gt;&lt;/mfrac&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;100&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\text{GDPデフレーター} = \frac{\text{名目GDP}}{\text{実質GDP}} \times 100&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;名目GDP&lt;/strong&gt;：その年の価格で測ったGDP&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;実質GDP&lt;/strong&gt;：基準年の価格にそろえて測ったGDP&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;なので、名目と実質の差＝価格変動の影響をまとめて拾うのがGDPデフレーターです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;CPI（消費者物価指数）との違い&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;よく混ざるのでここが重要。&lt;/p&gt;&#10;&lt;p&gt;GDPデフレーター&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;国内で生産されたものが対象&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;輸入品は基本的に入らない&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;GDP全体の価格&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;CPI&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;家計が買うものが対象&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;輸入品も入る&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;消費に特化した物価&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;例：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;原油など輸入価格が急騰すると、&lt;strong&gt;CPIは上がりやすい&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;でもそれが輸入中心なら、&lt;strong&gt;GDPデフレーターへの影響は相対的に小さめ&lt;/strong&gt;になり得ます&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;何に役立つ？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;実質成長率の理解&lt;/strong&gt; 名目GDPが伸びても、物価上昇分を除くと実質はあまり伸びてない…みたいな判断に必要。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;経済全体（GDP構成要素の広い範囲）の物価動向&lt;/strong&gt;を把握。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;超ざっくりまとめ&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;GDPデフレーター＝“国内で作られたもの”の“GDP全体の平均価格の変化”&lt;/strong&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;必要なら、簡単な数値例で&lt;br&gt;&#10;「名目は増えたのに実質は横ばい→デフレーターが上がってる」&lt;br&gt;&#10;みたいな計算イメージも一緒に作るよ。&lt;/p&gt;&#10;&lt;h3 id="回答所感"&gt;回答所感&#10;&lt;/h3&gt;&lt;p&gt;以上。全然わからん。&lt;/p&gt;&#10;&lt;p&gt;まず質問に答えてない。定義式を最初に示すのはよいが、&lt;strong&gt;その式はなんなのかの説明をほとんどせずに、突然CPIとの違いを説明し始める&lt;/strong&gt;。文章量の7割くらいがCPIとの違いになっている。GDPデフレータが上下する具体例だけあるが、ここまでGDPデフレータが上がるとはどういうことか、下がるとはどういうことかがまるでわからない。口調も安定していないし、最後の意味不明な提案もイライラする。&lt;/p&gt;&#10;&lt;p&gt;その後GDPデフレータの上下は何を示すのか、と聞いてようやく少しわかったが、それでもなお、文章量の割に質問に直接答えてもらえていないような違和感があった。&lt;/p&gt;&#10;&lt;h2 id="gemini-3"&gt;Gemini 3&#10;&lt;/h2&gt;&lt;p&gt;まったく同じ質問をした。これも眺めたらいいよ。&lt;/p&gt;&#10;&lt;h3 id="回答-1"&gt;回答&#10;&lt;/h3&gt;&lt;p&gt;GDPデフレーターは、一国の経済において&lt;strong&gt;国内で新しく生産されたすべての最終財とサービスの価格水準の変動&lt;/strong&gt;を示す&lt;strong&gt;物価指数&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;これは、&lt;strong&gt;名目GDP&lt;/strong&gt;（その年の価格で計算したGDP）を&lt;strong&gt;実質GDP&lt;/strong&gt;（基準年の価格で計算したGDP）で割ることによって算出されます。&lt;/p&gt;&#10;&lt;p&gt;$$\text{GDPデフレーター} = \frac{\text{名目GDP}}{\text{実質GDP}} \times 100 \quad \text{（基準年を100とする場合）}$$&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;💡 GDPデフレーターが示すこと&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;GDPデフレーターは、以下のことを示します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;国内経済全体の物価動向:&lt;/strong&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;消費だけでなく、設備投資や公共投資など、&lt;strong&gt;国内の生産活動全体&lt;/strong&gt;に関わる物価の動きを包括的に捉えます。&lt;/li&gt;&#10;&lt;li&gt;この点が、家計が購入する品目に焦点を当てた**消費者物価指数（CPI）**との大きな違いです。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;インフレ・デフレの傾向:&lt;/strong&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;GDPデフレーターの&lt;strong&gt;増加率がプラス&lt;/strong&gt;（上昇）であれば、&lt;strong&gt;インフレーション（インフレ）&lt;/strong&gt; 圧力が高まっていることを示します。&lt;/li&gt;&#10;&lt;li&gt;逆に&lt;strong&gt;増加率がマイナス&lt;/strong&gt;（下落）であれば、&lt;strong&gt;デフレーション（デフレ）&lt;/strong&gt; 圧力が強いことを示します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;実質経済成長率の測定:&lt;/strong&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;名目GDPから物価変動の影響（インフレやデフレ）を取り除き、&lt;strong&gt;真の経済規模の成長&lt;/strong&gt;（&lt;strong&gt;実質GDP&lt;/strong&gt;）を評価するために使われます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;⚖️ 消費者物価指数（CPI）との違い&lt;/strong&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;特徴&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;GDPデフレーター&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;消費者物価指数（CPI）&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;対象範囲&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;国内で生産されたすべての最終財・サービス&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;家計が購入する消費財・サービス（輸入品を含む）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;輸入品&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;含まれない&lt;/strong&gt;（国内生産品のみ）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;含まれる&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;国内総生産（GDP）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;算出に用いられる（名目/実質の比率）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;算出には直接用いられない&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;GDPデフレーターは輸入品の価格変動を反映しないため、例えば原油価格の上昇など、輸入物価が大きく変動する場合には、CPIと異なる動きを示すことがあります。&lt;/p&gt;&#10;&lt;p&gt;GDPデフレーターが100より大きければ基準年より物価水準が上昇、小さければ下落していることを意味します。&lt;/p&gt;&#10;&lt;p&gt;この指標について、さらに詳しい計算例や、過去の日本の動向について知りたいことはありますか？&lt;/p&gt;&#10;&lt;h3 id="所感"&gt;所感&#10;&lt;/h3&gt;&lt;p&gt;わかる。こちらの回答のほうが良い。最初にGDPデフレータの式があるのは一緒だが、&lt;strong&gt;その後「GDPデフレータが示すものはなにか」の説明がある&lt;/strong&gt;。ここが決定的に違う。&lt;strong&gt;ChatGPTはなぜかこの一番のコアをすっ飛ばした&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;また、&lt;strong&gt;地味にCPIとの比較の仕方もGeminiのほうが適切である&lt;/strong&gt;。ChatGPTは箇条書きだが、Geminiは表を使っている。同じ条件で比較する時は表の方が良い。&lt;/p&gt;&#10;&lt;p&gt;また、数値的な意味、100を跨いでその大小が何を意味するかも理解しやすい。&lt;/p&gt;&#10;&lt;p&gt;僕はAIの逆質問は嫌いだが、今回の「詳しい計算例や過去の日本の動向について」という提案については、比較的適切と評価できる。&lt;/p&gt;&#10;&lt;h2 id="なぜchatgptの回答は酷いのか"&gt;なぜChatGPTの回答は酷いのか&#10;&lt;/h2&gt;&lt;p&gt;Geminiの回答を見ることで、ChatGPTの回答の酷さを認識した。まずこれが決定的だが、&lt;strong&gt;ChatGPTは「GDPデフレータは何を示すか」というコアの説明をすっ飛ばして、派生的なCPIとの違いについて突然長々と説明を始めた&lt;/strong&gt;。Geminiはそれに対し、まずGDPデフレータとは何を示すものか、ということを適切に説明し、そのうえで「それはCPIではだめなのか？」という当然あるだろう疑問に先回りする形で答えている。CPIとの比較によってより理解も深まると考えられる。&lt;/p&gt;&#10;&lt;p&gt;わかってからChatGPTを見直すと、書いてあること自体に間違いがあるわけではない、と思う。ただ間違えていないことは、質問に答えていることにはならない。責任回避にパラメータ全振りした役人や政治家の答弁などを想像すれば良い。&lt;strong&gt;正しくてそれらしいが、まったく質問に答えていない、そういう回答の仕方&lt;/strong&gt;はある。そして今回のChatGPTの回答がそれだった。&lt;/p&gt;&#10;&lt;p&gt;僕は早期からChatGPTには課金してきたし、ClaudeやGeminiもそれぞれ課金した時期があり、ずっと比較を続けてきた。その肌感から、としか言えないのだが、&lt;strong&gt;以前のChatGPTは、こんな人の話を聞かない独りよがりのオタク、みたいな感じではなく、ちゃんと質問に答えようとしていた&lt;/strong&gt;と思う。&lt;/p&gt;&#10;&lt;p&gt;実際今の僕は、ChatGPTに課金しているにも関わらず、無料のGeminiに話すことのほうが多い。今回は、「これくらいの質問ならサクッと答えるだろう」と思ってChatGPTに質問したら、見事に裏切られた形だ。しかもGeminiが模範的な回答をしたことによって、その酷さの理由（コアの説明をすっ飛ばした）がよく理解できた。&lt;/p&gt;&#10;&lt;p&gt;現在のChatGPTが何故酷く感じられるのかは、もはや推察するしかないのだが、&lt;strong&gt;ユーザの意図よりも出力の設計が優先されており、それで頓珍漢な回答になっているのではなかろうか&lt;/strong&gt;、と思われる。調整の目標として、網羅性や安全性に過度に傾いているんかなぁ？つまり、意図より安全な回答を優先して（GDPデフレータは、定義式は明確だが、その解釈については、ちょっと意見が分かれているのかねぇ？）、でも文章量を落とさないために冗長な情報を並べ立てているって感じ。&lt;/p&gt;&#10;&lt;p&gt;この&lt;strong&gt;学生のいやいや書いた水増しレポート&lt;/strong&gt;みたいな傾向は、Claudeではよくあったのだが、最近はChatGPTにそれが見られる。さらに以前のGeminiでよく見られた（今もあるけど）役人答弁的な、正しいが質問に答えていない責任回避癖もでてきた。つまり、&lt;strong&gt;ClaudeとGeminiの悪いところが悪魔合体している&lt;/strong&gt;ような感じだ。やはりOpenAIは何か間違えているものを追いかけているんじゃないかねぇ。&lt;/p&gt;&#10;&lt;p&gt;大手LLMはその時々で傾向がそれぞれ変わるため、また潮目が変わるかもしれないが、現状、明確にGemini &amp;gt; ChatGPTだと思う。僕はGoogle嫌いで脱Googleなんてカテゴリも作っているくらいだし、これまでもGeminiについては辛辣な評価を続けてきたが、今回ばかりはそうもいかなくなった。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Geminiの品質はよくなっていると思うが、その一方でChatGPTは悪くなっている&lt;/strong&gt;ように感じる。次はGeminiに課金するだろう。課金したくねぇなぁ。&lt;/p&gt;&#10;&lt;h2 id="関連記事"&gt;関連記事&#10;&lt;/h2&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/chatgpt-gemini-claude/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;勝手に決めつけるChatGPTとGeminiとClaudeの傾向の違い：結局どれに貢げばいいのか決定戦&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/chatgpt-gemini-claude/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/07/04ea1923bd78f1008a9903eeb4ca26fb.webp" alt="勝手に決めつけるChatGPTとGeminiとClaudeの傾向の違い：結局どれに貢げばいいのか決定戦" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/gyakushitsumon/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;僕「逆質問しないで」AI「逆質問しませんが、複数の方向性を提示するので、選んでください」&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/gyakushitsumon/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-36.webp" alt="僕「逆質問しないで」AI「逆質問しませんが、複数の方向性を提示するので、選んでください」" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-enum/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIの出力から学ぶ、箇条書きをわかりづらくする100の方法&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-enum/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-30.webp" alt="AIの出力から学ぶ、箇条書きをわかりづらくする100の方法" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Mac/Winの標準IMEで今日や昨日の日付をYYYY-mm-ddで一発で出すためにEspansoを使う</title><link>https://hack-le.com/mac-win-espanso/</link><pubDate>Sun, 07 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/mac-win-espanso/</guid><description>&lt;p&gt;ATOKの実質値上げ強行をうけ、ランボー怒りの解約をしたのがつい先日。&lt;/p&gt;&#10;&lt;p&gt;その後はWindowsではMS-IME、Macでは日本語入力変換プログラムとかいう愛のないことえりの後継プログラムを使っていた。つまりOSについてくるやつ。&lt;/p&gt;&#10;&lt;p&gt;で、まぁそんなに困ることもないなと思ったのだけれど、地味にちょっと困ったのが「きょう」でYYYY-mm-dd形式の日付を出せないことだった。これはGoogle日本語入力ならばできるのだけれど、宗教上の理由で使いたくない。&lt;/p&gt;&#10;&lt;p&gt;どうしたもんかなと思って調べると、MacだとなんかスクリプトにしたものをAutomatorとか使ってワークフロー呼び出しとか大技使われていたりして「そん なに」という気分になった。&lt;/p&gt;&#10;&lt;p&gt;いやもうちょっとサクッとやりたいわけよ、と思ったところで「Espansoでええやないかい」と気づいた。&lt;/p&gt;&#10;&lt;p&gt;Espansoはクロスプラットフォームのスニペットアプリだ。任意の文字入力を置換して出力する。たとえば「:date」とうつことによって「2025-12-02」のように今日の日付を出力することができる。解説記事はソフトアンテナさんのこの記事をどうぞ（丸投げ）。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://softantenna.com/blog/espanso/" target="_blank" rel="noopener"&#10; &gt;espanso - Rustで書かれたクロスプラットフォームのテキスト展開ツール | ソフトアンテナ&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁこんなものは習うより慣れよなのだ。&lt;/p&gt;&#10;&lt;p&gt;で、インストールしたとして、Macの場合は &lt;code&gt;~/Library/Application\ Support/espanso/match/base.yml&lt;/code&gt;を編集する。日付は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;matches:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - trigger: &lt;span class="s2"&gt;&amp;#34;:date&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; replace: &lt;span class="s2"&gt;&amp;#34;{{mydate}}&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vars:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: mydate&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: date&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; params:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; format: &lt;span class="s2"&gt;&amp;#34;%Y-%m-%d&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これによって、&lt;code&gt;:date&lt;/code&gt;で&lt;code&gt;%Y-%m-%d&lt;/code&gt;の出力ができる。&lt;/p&gt;&#10;&lt;p&gt;昨日の場合は以下のように&lt;code&gt;offset&lt;/code&gt;を使える。-86400秒、つまり1日分のマイナス。（参考「&lt;a class="link" href="https://espanso.org/docs/matches/extensions/" target="_blank" rel="noopener"&#10; &gt;Extensions | Espanso&lt;/a&gt;」）&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- trigger: &lt;span class="s2"&gt;&amp;#34;:yday&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; replace: &lt;span class="s2"&gt;&amp;#34;{{yesterday}}&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vars:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: yesterday&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: date&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; params:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# -1 day (昨日) のオフセットを指定&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; offset: -86400&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# yyyy-mm-dd形式で出力&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; format: &lt;span class="s2"&gt;&amp;#34;%Y-%m-%d&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;明日を出したければ+86400だね。来週でも先週でも似たようにできる。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/atok-premium/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ランボー怒りの解約：ATOK値上げ強制移行&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/atok-premium/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-41.webp" alt="ランボー怒りの解約：ATOK値上げ強制移行" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ランボー怒りの解約：ATOK値上げ強制移行</title><link>https://hack-le.com/atok-premium/</link><pubDate>Thu, 04 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/atok-premium/</guid><description>&lt;p&gt;長いこと使っていたATOKを先日解約した。例の実質値上げであるベーシックプラン廃止のため。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/news/articles/2511/26/news075.html" target="_blank" rel="noopener"&#10; &gt;「ATOK Passport」実質値上げにユーザー悲鳴 月330円プラン廃止、660円に - ITmedia NEWS&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ジャストシステムさんェ……。&lt;/p&gt;&#10;&lt;h2 id="xで値上げを知りランボー怒りの即時解約"&gt;Xで値上げを知りランボー怒りの即時解約&#10;&lt;/h2&gt;&lt;p&gt;契約停止ならまだわかるのだが、サイレントに倍額のプレミアム以降させられる。説明も一切なし、Xでそれを知るという有様。なんじゃそら。&lt;/p&gt;&#10;&lt;p&gt;正直660円はちょっと……という気持ちはあるが、それ以上に態度にイラッときたため、解約。だいたい&lt;strong&gt;プレミアムに660円の価値はないと思っていたからベーシックを選んでいたんだから&lt;/strong&gt;。ちょっと邪悪じゃないですか。&lt;/p&gt;&#10;&lt;p&gt;どうやって解約するのかわかりづらかったけれど、「&lt;a class="link" href="https://pc-karuma.net/atok-passport-cancellation/" target="_blank" rel="noopener"&#10; &gt;ATOK Passport を解約する方法 - PC設定のカルマ&lt;/a&gt;」の方の記事を参考にしました。「&lt;a class="link" href="https://www.justmyshop.com/" target="_blank" rel="noopener"&#10; &gt;Just MyShop － ジャストシステム直営ECサイト －&lt;/a&gt;」より「お客様カウンター」で「定額利用サービス」の「契約内容の確認・解約」から。&lt;/p&gt;&#10;&lt;p&gt;完了すると画面での表示と、メールが届く。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/0a8ad1d46ec4130fb2019c4127ece8f0-700x278.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;ちょっと焦ったのは、解約のタイミングで費用請求が発生すること。というのも、ATOKのサブスクって後払いなんだねぇ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/013c742fb47e88112ef003f594dd2f85-700x335.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;解約日請求は、日割りなし解約、ただし月末までは無料使用可能……という解釈になるんですか……？&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;後払いのサブスクってあるんだと衝撃を受けた。やっぱりこの辺は日本企業的に前払いは商習慣的に受け入れ難いと思ったのだろうか？&lt;/p&gt;&#10;&lt;p&gt;いやそれだったらサブスク自体受け入れ難いんだけど……。&lt;strong&gt;なんでローカルで動く日本語入力でサブスクが必要なのか完全に意味不明&lt;/strong&gt;だし。以前まではそれが時代の流れだ、みたいな感じで僕も自分に言い聞かせていた面があるけれど、冷静に考えたらおかしいわ。クラウド辞書とかいらんからな。アプデ対応が名目なら従来通り買い切り版アプデしている人だけ買えばええやん。&lt;strong&gt;いらん機能入れるから値上げは納得できない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;実際「ATOK　値上げ」「ATOK　解約」で調べていると、十年以上使ってきたけど解約する、みたいな人もかなり出てくる。皆、&lt;strong&gt;価格というより不信感が壁を超えた、という感じ&lt;/strong&gt;。&lt;strong&gt;三十年使ってこられた方の「30年使ってきて最後がこれかよ」というツイートが印象的でした。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/12/27edb26ce5c9613899921efdde8e5e58-700x139.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://x.com/tai_shang/status/1993676841010495910?s=20" target="_blank" rel="noopener"&#10; &gt;https://x.com/tai_shang/status/1993676841010495910?s=20&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;僕なんかよりよほどコアなファン層だが、そういう人たちと最悪な別れ方をするの、企業としては最悪なんじゃないのかねぇ。&lt;/p&gt;&#10;&lt;h2 id="そもそも変換精度が微妙なのでos標準で十分説"&gt;そもそも変換精度が微妙なので、OS標準で十分説&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;そもそもATOKに求められていたのは、芸能人の名前を一発変換できることではなく、高い変換精度であったはずだ&lt;/strong&gt;。それは日本企業だからこそ出来るはずのことだった。&lt;/p&gt;&#10;&lt;p&gt;しかし現状はどうだろう。&lt;/p&gt;&#10;&lt;p&gt;今回、解約する前にしばらくMac標準を試していた。なんかいつの間にか、ことえりじゃなくて日本語入力変換プログラムとかいう、愛のない名前になっていたらしい……。&lt;/p&gt;&#10;&lt;p&gt;で、&lt;strong&gt;しばらく試した結果としては、学習が若干微妙ではあるけれど、変換精度自体は思っていたよりだいぶマシ&lt;/strong&gt;であった。あと大学生時代に登録したユーザ辞書が出てきて謎の感動があった。「だお」で「（ ^ω^）」と変換されたり「よろ」で「よろしくお願いします」になったり、うーんこれは完全に大学生。そういえば&lt;strong&gt;Mac標準15年ぶりかもしれないマジで&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ってかATOKもよくよく考えてみると最近別に変換精度よいと思えない。たとえばATOKを使ってAIとのチャットしたときのことだが……&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;ジャーキーはうまいが酒を飲みたくなってしまう。ノンアルコールで代わりになるのは内科&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;AIにこんなしょうもないこと聞いてるの？聞いてる。&lt;/p&gt;&#10;&lt;p&gt;で、「なるのはないか」を「内科」と誤変換されている。これもうことえり以下だろ。なお&lt;strong&gt;ChatGPTさんこの誤変換をまさかの深読み&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="ジャーキーを食べるとついお酒が欲しくなる気持ち、よく分かります。 でも「内科」まで出てきているので、おそらく 健康面にも配慮しつつ、ノンアルで満足できる代替飲料 を探している、という意味だと解釈しますね。" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/576b7bff7fbdbc77e1e1c2d632aeaec0-700x223.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁこれについては正直ChatGPT側もどうかとは思う。なんか&lt;strong&gt;ChatGPTも阿呆になっている気がする今日この頃&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;あと学習が強いのはいいんだが、それによって誤変換を学習したり（通はちゃんと調整するようだが……）、なんか以前打った謎ワードを学習して妙な推測変換をしたりする。&lt;/p&gt;&#10;&lt;p&gt;これによって &lt;strong&gt;「お」と打つと「おっぱい」が出てきて「おとこのこ」が「男の娘」になるなどするため、人様の前で使えない状態&lt;/strong&gt;になる。以前あったやばいヒヤリハットでは、メールで「記入お願いします」が「奇乳お願いします」になっており、送る直前に気づいて「うおおおおおおお」となった。&lt;/p&gt;&#10;&lt;p&gt;なんでそんな学習したのかは置いといて……。……いや、百歩譲ってこれが僕の趣味ならまだしも仕方ないかもしれないんだが、別にそういう性癖ではないから余計に嫌なんだけどこの手のはどう言い訳しても言い訳なのでもういいです。&lt;/p&gt;&#10;&lt;p&gt;もう少し真面目な例としては、うちのATOKは一部の文脈で感想（かんそう）を巻層と変換したがる悪癖が身についてしまい、これも地味に鬱陶しかった。常にそうなるわけではなくて、どうも文脈によって巻層になるらしく、誤変換を修正するのもなんだかどうやるのかよくわからない感じで、放置していた。なんだったんだろう。&lt;/p&gt;&#10;&lt;p&gt;こんな感じなので、&lt;strong&gt;まぁ確かにOS標準の変換精度はあまりよくないし、最近は絵文字がやたら出てきて鬱陶しいというのもあるのだが、ではATOKなら良いかというとこれはこれで別角度から良いとはいえない&lt;/strong&gt;ように思う。&lt;/p&gt;&#10;&lt;p&gt;姉もATOKを使っていたのだが、今回の件を愚痴ったところ「変換は昔のATOKの面影ないよ。入力なれてるから使ってるだけ」とのこと。ATOKの変換精度下がってるよね、というのはSNSでユーザの評判を調べていても、けっこうあちこちで言われているようだ。&lt;/p&gt;&#10;&lt;h2 id="強権を発動できるそうサブスクならね"&gt;強権を発動できる、そうサブスクならね&#10;&lt;/h2&gt;&lt;p&gt;僕としては、OS標準よりはやっぱりまだマシなんじゃないのかなぁとは思うので、正直買い切り版があったら買ってもいいかな、程度の気持ちはある。しかしサブスクとなるとかなりどうかと思うし、&lt;strong&gt;まして強権的な移行は、価格の問題だけではなく心情的な面で大きな不信感を抱く結果となった&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;この強権を発動できるのが、サブスクというやつの特徴&lt;/strong&gt;だ。つまり、&lt;strong&gt;制御権が自分ではなくサービス提供側にある&lt;/strong&gt;。だからこそ、その力の行使は極めて慎重であるべきだし、実際2010年代前半くらいまでは、企業側もそれなりに配慮があったと思うのだが、ここ最近はどこもかしこもかなりひどい、と思う。&lt;/p&gt;&#10;&lt;p&gt;そうして&lt;strong&gt;値上げを強制しておきながら、どうでもいい機能が追加されるわりに、本当に重要な機能の改善がおろそかになっている&lt;/strong&gt;。なんなら低下しているまである。わかりやすく華々しい新機能、何百万語追加のような、測れるものばかりが重視され、体験という本質的に測れないものは放置される。収益という測れるものが重視され、顧客のロイヤリティという測れないものは軽視される。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;測れる価格が重んじられ、測れない価値が軽んじられる&lt;/strong&gt;。それが資本主義だというならば、そのうちに人間にも値札がはられ、その人生は無視されるディストピアになるだろう。&lt;/p&gt;&#10;&lt;p&gt;つまりATOKプレミアム強制移行はまさに1984的ディストピア到来のカナリアだったんだよ！な、なんだってー&lt;/p&gt;&#10;&lt;p&gt;ふぅ……。ATOK推していたのにどうしてどうして……。&lt;/p&gt;&#10;&lt;h2 id="懐かしの記事"&gt;懐かしの記事&#10;&lt;/h2&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-ime-atok/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;趣味としての脱Googleその5 Google日本語入力編: でぇじょぶだ、ATOKがある&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-ime-atok/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_16003_1788943925.webp" alt="趣味としての脱Googleその5 Google日本語入力編: でぇじょぶだ、ATOKがある" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/10-atok/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;10年ぶりにGoogle日本語入力からATOKに乗り換えた&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/10-atok/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_11763_1788944596.webp" alt="10年ぶりにGoogle日本語入力からATOKに乗り換えた" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>YouTubeの動画を文字起こしする手順とスクリプト (yt-dlp + whisper.cpp)</title><link>https://hack-le.com/youtube-mojiokoshi/</link><pubDate>Tue, 02 Dec 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/youtube-mojiokoshi/</guid><description>&lt;p&gt;たまには純粋なハウツーでも書くかと思った。といっても今までの記事のまとめみたいなもんだけど。&lt;/p&gt;&#10;&lt;p&gt;まぁこれをされると動画作成者はつらいかもしれんのだが、そうは言ってもこちらの人生にも限りがある。音声だけでいいものは音声でいいのだし、もっといえば正直文字で読みたい。倍速再生だのなんだと言っても、文字より高いタイパなどない。コピーされるからテキストにいかないのはわかるけどさ。このブログもコピーされまくり学習されまくりbot来訪しまくりだよ。&lt;/p&gt;&#10;&lt;p&gt;文字起こししたものは、LLMで読みやすくなるように見だしをつけたり、書き言葉になおしたり、成功率高いわけじゃないけど対談ものなら「話者」を付与するとかもさせられる。なんならTTSで再び音声化もできる（意味不明）。&lt;/p&gt;&#10;&lt;h2 id="全体のやること"&gt;全体のやること&#10;&lt;/h2&gt;&lt;p&gt;やることは結局以下となる。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;YouTubeから動画を&lt;code&gt;yt-dlp&lt;/code&gt;でmp3としてダウンロードする&lt;/li&gt;&#10;&lt;li&gt;mp3を&lt;code&gt;whisper.cpp&lt;/code&gt;を使って文字起こしする&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;つまりこれらのソフトウェアを使える環境が必要。持続性に関してはほぼ&lt;code&gt;yt-dlp&lt;/code&gt;がいつまで通用するのが問題だと思う。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;コマンド実行として基本的にUNIXライクな環境&#10;&lt;ul&gt;&#10;&lt;li&gt;Windowsもできるがちょっとたるい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;whisper.cppを動かせる程度のマシン&#10;&lt;ul&gt;&#10;&lt;li&gt;そんなに性能いらないはず。AppleSiliconなMacで十分と思う&#10;&lt;ul&gt;&#10;&lt;li&gt;時間かけてもいいなら割とそこらへんのPCでいいかもしれん&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;自分の環境&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;M2 Pro Mac mini&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;12CPU, 19GPU&lt;/li&gt;&#10;&lt;li&gt;32GB RAM&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;GMKtec EVO-X2&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Ryzen AI Max+ 395&lt;/li&gt;&#10;&lt;li&gt;128GB RAM&lt;/li&gt;&#10;&lt;li&gt;Windows 11&#10;&lt;ul&gt;&#10;&lt;li&gt;CPUだけならWSL2で構築すれば楽だけど、GPU使うならネイティブの環境でやったほうが楽じゃないかな&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="手順という名のリンク集"&gt;手順という名のリンク集&#10;&lt;/h2&gt;&lt;h3 id="yt-dlpで落とす"&gt;yt-dlpで落とす&#10;&lt;/h3&gt;&lt;p&gt;じゃあ具体的に手順なんだけれど、以前AIに書かせた手順書を投げっぱなしジャーマン。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ai.hack-le.com/%e5%8b%95%e7%94%bb%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e3%81%ae%e5%ae%9a%e7%95%aa%e2%94%80%e2%94%80yt-dlp%e3%81%a8%e3%81%84%e3%81%86%e4%b8%87%e8%83%bd%e3%83%84%e3%83%bc%e3%83%ab/" target="_blank" rel="noopener"&#10; &gt;動画ダウンロードの定番──yt-dlpという万能ツール&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;さすがにこれだけだとなんなので、コード例。まぁほとんどこれだけでよいので。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yt-dlp -x --audio-format mp3 &lt;span class="s1"&gt;&amp;#39;https://www.youtube.com/watch?v=ysG84McAKUQ&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これによって総務省の林総務大臣の記者会見が聞けるぞ。&lt;/p&gt;&#10;&lt;p&gt;yt-dlpはちょこちょこと仕様が変わる……というよりプラットフォームの仕様が変わるのでそれに併せてソフトウェアも変わるというべきだが、いつまで続くかなぁ。&lt;/p&gt;&#10;&lt;h3 id="whispercppで文字起こしする"&gt;whisper.cppで文字起こしする&#10;&lt;/h3&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/whisper-cpp-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;whisper.cppで文字起こしをM2 Pro Mac miniとWindows/Ryzen AI Max&amp;#43; 395/Vulkanでやって比較&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/whisper-cpp-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-5.webp" alt="whisper.cppで文字起こしをM2 Pro Mac miniとWindows/Ryzen AI Max&amp;#43; 395/Vulkanでやって比較" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;ここからさらに各環境における手順リンクに飛べる。まるで役所のようだ。そしてこの記事では、だいたいどれくらいの速度でやれるかも書いているよ。&lt;/p&gt;&#10;&lt;h3 id="おまけ-一括で処理するbashスクリプト"&gt;(おまけ) 一括で処理するbashスクリプト&#10;&lt;/h3&gt;&lt;p&gt;URLを指定して、文字起こししたtxtに変換するまでの処理のスクリプト。だいたいAIが書いた。&lt;/p&gt;&#10;&lt;p&gt;以下のコードについて、必要なところを改変する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 必要なもの&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# - ffmpeg&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# - yt-dlp (URL モード用)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# - whisper-cli をインストールして、whisper_dir を設定&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; -euo pipefail&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;original_cwd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;usage&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Usage: &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;basename &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; [-u URL] [audio-file]&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nb"&gt;getopts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;:u:h&amp;#34;&lt;/span&gt; opt&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;opt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; in&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; u&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OPTARG&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; h&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; usage&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="se"&gt;\?&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Unknown option: -&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OPTARG&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; usage&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; :&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Option -&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OPTARG&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; requires an argument.&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; usage&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;esac&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;shift&lt;/span&gt; &lt;span class="k"&gt;$((&lt;/span&gt;OPTIND &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$#&lt;/span&gt; -ne &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Do not mix -u with a positional audio file.&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; usage&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$#&lt;/span&gt; -ne &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; usage&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;wav_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;tmp_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cleanup&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;wav_file&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rm -f -- &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;wav_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;tmp_dir&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rm -rf -- &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;tmp_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;trap&lt;/span&gt; cleanup EXIT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; ! &lt;span class="nb"&gt;command&lt;/span&gt; -v yt-dlp &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;yt-dlp not found in PATH.&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;tmp_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;mktemp -d&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;download_template&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;tmp_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/%(title)s.%(id)s.%(ext)s&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yt-dlp --no-playlist --extract-audio --audio-format mp3 --audio-quality &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;download_template&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;find &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;tmp_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -maxdepth &lt;span class="m"&gt;1&lt;/span&gt; -type f -name &lt;span class="s1"&gt;&amp;#39;*.mp3&amp;#39;&lt;/span&gt; -print -quit&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Failed to locate downloaded audio file.&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;expand_user&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;~&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; ~/* &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%s\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="se"&gt;\~&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%s\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;expand_user &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; /* &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;i_aud_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;input_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname -- &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;input_base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;basename -- &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;i_aud_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input_base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;wav_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;i_aud_file&lt;/span&gt;&lt;span class="p"&gt;%.*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.wav&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;output_prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;original_cwd&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;basename -- &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;i_aud_file&lt;/span&gt;&lt;span class="p"&gt;%.*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;output_prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;i_aud_file&lt;/span&gt;&lt;span class="p"&gt;%.*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;whisper_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/ghq/github.com/ggml-org/whisper.cpp&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;whisper_cmd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./build/bin/whisper-cli&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;whisper_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./models/ggml-large-v3.bin&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ffmpeg -i &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;i_aud_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -ar &lt;span class="m"&gt;16000&lt;/span&gt; -ac &lt;span class="m"&gt;1&lt;/span&gt; -c:a pcm_s16le &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;wav_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;whisper_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;whisper_cmd&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -m &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;whisper_model&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -l ja -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;wav_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --output-txt --output-file &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_prefix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Transcription saved to &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_prefix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.txt&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改変ポイント&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;whisper_dir&lt;/code&gt;のパス&lt;/li&gt;&#10;&lt;li&gt;112行目の &lt;code&gt;ja&lt;/code&gt; は日本語設定なのでここんところオートにするかどうかはモノ次第&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;使い方。ファイルを保存したい場所でスクリプト実行する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./audio2txt.sh -u https://www.youtube.com/watch?v&lt;span class="o"&gt;=&lt;/span&gt;ysG84McAKUQ&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;カレントディレクトリにファイルを出力する。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;-u&lt;/code&gt;をつけない場合は、mp3ファイルを指定することで、&lt;code&gt;yt-dlp&lt;/code&gt;の処理をスキップして音声を直接文字起こしする。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;ハッキリ言って&lt;code&gt;yt-dlp&lt;/code&gt;がいつまで使えるかにかかっている。頑張って&lt;code&gt;yt-dlp&lt;/code&gt;コミュニティ🥺&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;youtube-dl&lt;/code&gt;からお世話になっているけれど、あまり広がり過ぎると潰される圧力も高まるし、難しいところだ。しかしそうは言っても、Webの情報がYouTubeに吸われているような構造があって、本来ならばテキストで表現されるべきものまで全部YouTubeにいってしまっているような危機感がある。この構造を作ったのは他ならぬGoogleはじめビッグテックだから、個人的には抵抗したい。&lt;/p&gt;&#10;&lt;p&gt;まーそれとは別に、音声って不思議なもんで、書き言葉とは根本から違うらしく、&lt;strong&gt;スタイルだけ書き言葉になおしても、そのときに死ぬ何かはあるように思う&lt;/strong&gt;。なのでまぁ聞きたい言葉は、聞けるなら聞いたほうがいいんじゃないかな。&lt;/p&gt;&#10;</description></item><item><title>KDE ConnectでLAN内のAndroid -&gt; PC にファイル送信する</title><link>https://hack-le.com/kde-connect-lan-android-pc/</link><pubDate>Sat, 29 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/kde-connect-lan-android-pc/</guid><description>&lt;p&gt;現在脱Dropboxを進めている。その中で最近のカメラアップロードとかスクショ転送どうしようかなと思っており、Nextcloudなども導入しているが、目的を考えるとやや重たい気がする。やりたいことはただのファイル転送であって、インターネット越しならともかくLAN内で困る必要は本来ないはず。&lt;/p&gt;&#10;&lt;p&gt;ということでKDE Connectを試した。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://kdeconnect.kde.org/" target="_blank" rel="noopener"&#10; &gt;KDE Connect | KDE Connect: A project that enables all your devices to communicate with each other.&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="インストールから手順"&gt;インストールから手順&#10;&lt;/h2&gt;&lt;p&gt;AndroidにおいてはF-Droidからインストールするのが理念に沿っているのだろうけれど、Playストアにもあるので、Playストアからインストールした。すまぬ……すまぬ……いやでも端末Pixel 7だし、ってかAndroid使っている時点で、そこはもうどうしようもなくね。&lt;/p&gt;&#10;&lt;p&gt;Mac側ではARM版をダウンロードしてフツーにインストールして起動。&lt;/p&gt;&#10;&lt;p&gt;Androidアプリ側起動すると、Macデバイスが一覧にあるのでペアリング。ファイルアクセスとか、必要なやつの一通りの権限を許可する。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/1711f547d0c62fc478f3485847c7ef1f-700x325.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;やりたいことはファイル転送なのだが、&lt;strong&gt;PC側で「Plugin Settings」「Share and receive」でダウンロード先の設定をする&lt;/strong&gt;。うちはダウンロードフォルダにしている。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/206deecec720a7bce0db9a265712a4d4-700x203.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;最初の設定ではDesktopになっていたのだが、転送されていなかった。権限の問題かな？🤔&lt;/p&gt;&#10;&lt;p&gt;設定したら、Androidアプリ側より「ファイルを送信」する。と、特に反応はないのだが、PC側を確認するときちんと送れている。&lt;/p&gt;&#10;&lt;h2 id="他の機能も便利"&gt;他の機能も便利&#10;&lt;/h2&gt;&lt;p&gt;今回の記事で書いてないけれど、マウスのリモートコントロールとか出来るが、個人的には地味に便利だった。テレビ代わりに映しているPCのリモコンになる……。こういう強烈なことができるのは、iOSに対するAndroidの優位性だね。ニッチ過ぎるけど。&lt;/p&gt;&#10;&lt;p&gt;あとファイル転送で逆向きのPC→Androidは実はまだうまくいってないのだけれど、こっちの用途だとFile Browser使うのでまぁいいやって放置している(^_^;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/web-file-browser/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;WebベースのファイラFile Browserを試す：こういうのでいいんだよ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/web-file-browser/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_19184_1788943570.webp" alt="WebベースのファイラFile Browserを試す：こういうのでいいんだよ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Chrombookは使えなかった思い出：その本質は制約</title><link>https://hack-le.com/chrombookmemory/</link><pubDate>Wed, 26 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/chrombookmemory/</guid><description>&lt;p&gt;タイムラインを見ていると、なんだかChromebookが議論になっていて、懐かしいなと思った。今でこそ&lt;a class="link" href="https://hack-le.com/category/series/google/" &gt;脱Google&lt;/a&gt;とか特集を組んでしまうようになってしまったが、ほんの数年前、僕は無邪気にGoogleを信仰している信徒だった。&lt;/p&gt;&#10;&lt;h2 id="googleの信徒だった頃"&gt;Googleの信徒だった頃&#10;&lt;/h2&gt;&lt;p&gt;Chromebookについて、こんな記事を書いていた。2018年の記事だ。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/core-i5-chromebook/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;4コアCore i5なChromebookが快適過ぎて楽しい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/core-i5-chromebook/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_7873_1789088685.webp" alt="4コアCore i5なChromebookが快適過ぎて楽しい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事を見ると、だいたい僕が喜んでいるのは以下のポイントだった模様。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;4コア、8GB RAMであること（Ryzenが出るまで、Intel舐めプの影響で2コアが主流だった）&lt;/li&gt;&#10;&lt;li&gt;Androidアプリが使えること&lt;/li&gt;&#10;&lt;li&gt;Linuxが使えること（多分Crostiniのことかな）&lt;/li&gt;&#10;&lt;li&gt;タッチディスプレイがある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ChromebookはChrome前提という非常に強烈な制約があるのだが、そこにAndroidアプリが使える！とか、さらにターミナルも使える！ということで、当時の僕にとっては非常に進化に思えたのだろう。&lt;/p&gt;&#10;&lt;p&gt;また、その他に背景としては、2018年なので、ちょうどMac冬の時代雪解け直前くらいの頃、というのもある。&lt;/p&gt;&#10;&lt;p&gt;その頃のMacは本当にしょうもなくて、バタフライキーボードやタッチバーに代表されるように迷走の極致で、価格ばかり高くなるものだから、まったく欲しいと思えず、僕はクックの悪口ばかり書いていた。&lt;/p&gt;&#10;&lt;p&gt;当時の心境は上記記事にもある。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;際立った進化のないWindowsとMacのPCを尻目に、Chromebookは着実な進化を続けてきました。このスマホ全盛の時代に、今なおPCのことをGoogleさんが真剣に考えてくれているのはすごく嬉しいです。心強い。&lt;/p&gt;&#10;&lt;p&gt;さすがに愛機MacBook Air 2013もそろそろ限界が見え始めて、ノートPC新調したいなと思っていたところで、いくつもの要因が重なり、今こそもう一度Chromebookを手にすべき、と、ついついポチってしまいました。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;今となっては5年くらいだと大して変わらん感じがするが、当時ハードウェアが進化し続けた00年代までの思い出がまだ残っていて、2013年のPCが2018年も大して変わらんってどういうことだよ！とキレてたんだと思う。まぁさすがにあの頃はいくらなんでも変わらなさすぎたと思うけど。&lt;/p&gt;&#10;&lt;p&gt;デザイナーのおもちゃと化したMacを尻目に、Chromebookはラップトップも4コアになり、機能的なところで随分とアップデートがあったようだから、僕は随分と期待したようだ。&lt;/p&gt;&#10;&lt;h2 id="信じた者だが救われなかった"&gt;信じた者だが救われなかった&#10;&lt;/h2&gt;&lt;p&gt;で、実際にデバイスを買ってウキウキと試しており、当時の記事にはその歓び記述されているが、その後とんと記事にされていない。理由は簡単で、&lt;strong&gt;結局使わなかったから&lt;/strong&gt;だ。今の僕なら批判的な記事を書いたかもしれないのだが、当時はよほどでないとそういう記事は書かなかったかもしれない。あるいは記事を書くとか書かないとか以前に記憶からすっぽり抜けていたのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;ま、書いたとしても、「使わなかったことを書く」というレビュアーにとってはけっこう難しいことをやらないといけなかったので、忙しくてそんな気力はなかったかもね。ネガティブレビューはレビューの中でも難しいジャンルだし。でも&lt;strong&gt;レビューで本当に大切なことは、何ができたかより何ができなかったかだし、何をしたかではなく何をしなかったのか&lt;/strong&gt;、だ。ま、あんま需要ないんだけどね。&lt;/p&gt;&#10;&lt;p&gt;だからといって今さら書くこともなかろうに、ではあるかもしれんけど、当初期待した機能は、実際使って見ると、特に使わなかったなぁ。&lt;/p&gt;&#10;&lt;p&gt;たとえば、&lt;strong&gt;上記の記事ではスクショをペンで書き込みできるぞ！と感動していたが、実際にはそんなことしたいユースケースはなかった&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;期待された新機能、Androidアプリができることについては、昔やっていたゲームを1つ出来たのが楽しい、くらいだったが、逆に言うとそれ以外まったく利用しなかった。&lt;strong&gt;わざわざPCでAndroidアプリをやりたい理由は特になかった。&lt;/strong&gt; ついでにある日突然画面にヒビが入っており（何もしてないのに壊れた）、画面を見るくらいなら良いものの、タッチ機能は全然期待できなくなった。&lt;/p&gt;&#10;&lt;p&gt;ターミナルも使わなかった。そもそもターミナルが統合されて嬉しいのは、そのPCであれこれとやりたいことがあるから、なのだけれど、それ自体が&lt;strong&gt;Chromebookの根幹的な思想と矛盾している&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;この&lt;strong&gt;設計思想の問題がもっとも重大&lt;/strong&gt;だ。たとえば僕はEmacsキーバインドの呪いにかかっているため、キーボードについては激しいリマッピングを求めるのだが、ChromebookはCapsLackとかCtrlキーをちょっといじれるだけだった。これは僕にとって決定打になっていた模様。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/image-11-700x190.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://x.com/tamasan774/status/1284762194584858624" target="_blank" rel="noopener"&#10; &gt;https://x.com/tamasan774/status/1284762194584858624&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Chromebookは素晴らしいんだけれど、Emacsキーバインドを快適にかつあんまり頑張らないで使いたいというあまりない欲求のために結局使えないでいる。&#10;うちにあるChromebookは宝の持ち腐れ状態だ……。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;2020年7月には既に持ち腐れ状態になっていたようだ。&lt;/p&gt;&#10;&lt;p&gt;ただこの時点ではChromebook自体は素晴らしいと評価しているね。Googleに対する信心が残っていたのだろう。実際には、&lt;strong&gt;使っていないという事実がすべてだと思うけどね&lt;/strong&gt;。今の僕だと「これは設計思想の問題が如実に出た結果で、今後も根本的な解決は望めない」とか言ってバッサリ切ったかもしれない。&lt;/p&gt;&#10;&lt;p&gt;元々&lt;strong&gt;Macに対する失望がChromebookに向かわせたところもあったように思えた&lt;/strong&gt;が、その後MacBook Pro 2019（CPUはショボいが一応4コア）を買っているし、またAppleSiliconでMacは劇的な変化という印象を与えたわけで、結局、&lt;strong&gt;もはやChromebookに行く理由は僕の中ではなくなった&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;それでChromebookは使われないまま、&lt;strong&gt;最終的に2024年9月リネットジャパンで不要なゴミを捨てる時に送料無料にするための種となった（PCを捨てると送料無料になる）&lt;/strong&gt; 。一応動いていたので売れたと思うが、画面ヒビ入ってるとか色々あったから売るのすら面倒くさくなったんかな。いや、動かなくなったんだっけ？それさえ覚えてない。愛着がない。&lt;/p&gt;&#10;&lt;h2 id="その本質は機能ではなく制約"&gt;その本質は機能ではなく制約&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで、共産主義の学校こと教育施設あたりで一部導入されたほかは、&lt;strong&gt;別段広まらないまま今に至る2025年11月、時代のあだ花であった、というのは妥当な評価に思える&lt;/strong&gt;。ここからわかるとおり、&lt;strong&gt;Chromebookの肝は機能よりもむしろ制約にあった&lt;/strong&gt;。管理したい側が配布するデバイスとしては便利だったろうな。今にして思うとすげーGoogleっぽいわ。&lt;/p&gt;&#10;&lt;p&gt;ただ僕は、Twitterを見ると2023年1月でもなんかまだ若干未練があった模様。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/b5cb04c609638a5806935683a2d77901-700x154.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://x.com/tamasan774/status/1616997474127998977" target="_blank" rel="noopener"&#10; &gt;https://x.com/tamasan774/status/1616997474127998977&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Emacsの呪いが解ければ、Chromebookも現実的な選択肢とあがってくるんだけれど&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;2023年1月っていうと、ちょうど退職した頃だったかな。Googleへの信仰もギリギリ残っていた頃だっただろうか。なんで突然こんなことツイートしたのかは覚えていない。キーボードの柔軟な変更ができないのは、些事ではなく根本的な設計思想の問題だ、と気づかないといけないね。&lt;/p&gt;&#10;&lt;p&gt;まーでも実際、別に&lt;strong&gt;まったく使えないということはないと思う&lt;/strong&gt;よ。先もちょっと書いたが、&lt;strong&gt;Chromebookは機能ではなくて制約を求めるもの&lt;/strong&gt;で、その制約に、特に強いられるわけでもなくぴったりとハマって不便がないなら、便利なんじゃない。&lt;/p&gt;&#10;&lt;p&gt;具体的には、Web（というかChrome）だけで十分で、おまけでちょっと周辺のことをしたい、くらいだったら、もしかしたらベストかもしれない。ただ&lt;strong&gt;その判断ができるには、PCと自分に対する理解が必要だし、あるいは側にわかる人がいて、「あなたの場合はChromebookで十分だよ」と判断できる必要がある&lt;/strong&gt;かな、と思う。これは非常に限定的というか、実際ほぼないのではないかな。&lt;/p&gt;&#10;&lt;p&gt;ま、いずれにせよ&lt;strong&gt;Chrome前提でEvilの霊道みたいなデバイスをいまさら僕が薦めることはもはやない&lt;/strong&gt;けどさ。ただまぁ、ちょっと懐かしかったな。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/core-i5-chromebook/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;4コアCore i5なChromebookが快適過ぎて楽しい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/core-i5-chromebook/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_7873_1789088685.webp" alt="4コアCore i5なChromebookが快適過ぎて楽しい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/47245254-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Chromebook は現代のワープロ…しかしポテンシャルの発揮にはスペックがもっと必要&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/47245254-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2809_1789466959.webp" alt="Chromebook は現代のワープロ…しかしポテンシャルの発揮にはスペックがもっと必要" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/renet-japan/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;リネットジャパンで不要な大昔のディスプレイをPCと一緒に無料回収してもらった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/renet-japan/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2024/10/renet-japan.webp" alt="リネットジャパンで不要な大昔のディスプレイをPCと一緒に無料回収してもらった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>注文したLoRaモジュールがまた税関で止められた。やっぱ何か起きてるのかなぁ</title><link>https://hack-le.com/lora-zeikan/</link><pubDate>Sat, 22 Nov 2025 18:20:49 +0900</pubDate><guid>https://hack-le.com/lora-zeikan/</guid><description>&lt;p&gt;前回LPWAの通信モジュールをAmazonで注文したところ、税関で止められて返送されてしまった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/amazon-lora/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AmazonでポチったLoRaデバイスが税関通らなかった模様&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/amazon-lora/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-2.webp" alt="AmazonでポチったLoRaデバイスが税関通らなかった模様" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;で、性懲りも無く別の出品者から同じやつを再注文したのだけれど、なんとまたまた税関で止められてしまって買えなかった。二回連続、ということで、どうもやっぱり、何か起きているということなんだろうか。以下のようなメッセージが送られてきた。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;出品者lianbeitunmaoyiからのメッセージ：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;お客様、&#10;物流会社から、国際物流に影響を与える多くの不確実な要因により、&lt;strong&gt;お客様の荷物が税関で阻止&lt;/strong&gt;され、お客様の住所に配送できないという通知を受け取りました。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;うーん。&lt;/p&gt;&#10;&lt;p&gt;昨今、日中の間がゴタゴタしているわけだが、関係あったりするのかなぁ。うーん……。&lt;/p&gt;&#10;&lt;p&gt;とりあえず、デバイスはやっぱり秋葉原にって、T-Beamをもう一台買わないとどうにもならないみたいだね。あるといいんだけど……。&lt;/p&gt;&#10;</description></item><item><title>GMKtec EVO-X2 + Open WebUI + LM Studio + gpt-oss-120b の手順と雑感</title><link>https://hack-le.com/gmktec-evo-x2-open-webui-lm-studio-gpt-oss-120b/</link><pubDate>Fri, 21 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/gmktec-evo-x2-open-webui-lm-studio-gpt-oss-120b/</guid><description>&lt;p&gt;30万円で買ったGMKtec EVO-X2をフル活用するべく、色々といじっている。チャット機能はやはりほしいのでいじる。&lt;/p&gt;&#10;&lt;h2 id="環境と構成"&gt;環境と構成&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;ホストマシン&#10;&lt;ul&gt;&#10;&lt;li&gt;Intel Mac mini 2018&#10;&lt;ul&gt;&#10;&lt;li&gt;Docker Desktop for Mac 4.51.0&lt;/li&gt;&#10;&lt;li&gt;Open WebUI&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;サーバ&#10;&lt;ul&gt;&#10;&lt;li&gt;GMKtec EVO-X2&#10;&lt;ul&gt;&#10;&lt;li&gt;Ryzen AI Max+ 395&lt;/li&gt;&#10;&lt;li&gt;128GB&lt;/li&gt;&#10;&lt;li&gt;Windows 11&lt;/li&gt;&#10;&lt;li&gt;LM Studio 0.3.30&#10;&lt;ul&gt;&#10;&lt;li&gt;gpt-oss-120b&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ホストマシンはM2 Pro Mac mini + OrbStackでもやった。&lt;/p&gt;&#10;&lt;p&gt;LM Studioはインストールして、モデルを入れているものとする。&lt;/p&gt;&#10;&lt;p&gt;ざっくり構成&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR&#10;subgraph Mac&#10;subgraph OrbStack&#10;web(Open WebUI)&#10;end&#10;end&#10;subgraph EVO-X2&#10;subgraph LM Studio&#10;gpt(gpt-oss-120b)&#10;end&#10;end&#10;user(User)&#10;user --&gt; web&#10;web --&gt; gpt&lt;/pre&gt;&lt;h2 id="ざっくり手順"&gt;ざっくり手順&#10;&lt;/h2&gt;&lt;h3 id="lm-studio入れてapi使えるようにする"&gt;LM Studio入れてAPI使えるようにする&#10;&lt;/h3&gt;&lt;p&gt;公式サイトからインストールするだけ。APIサーバは左側のタブの2番目。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/image-9-700x227.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;IPアドレスとかも表示される。ポート番号は1234。以下で確認する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl http://IP:1234/v1/models&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="evo-x2-vramを64gb---96gbにする"&gt;EVO-X2 VRAMを64GB -&amp;gt; 96GBにする&#10;&lt;/h3&gt;&lt;p&gt;一応。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/windows-11-init/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Windows 11で入れているアプリやキーボードの設定（Emacsキーバインド）&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/windows-11-init/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-4.webp" alt="Windows 11で入れているアプリやキーボードの設定（Emacsキーバインド）" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;割り当てについてはLM Studioで確認できる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/image-6-700x257.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;AMDのソフトウェアからも変更できそうに見えるが、なんぼやっても変更されなかった。結局BIOSだよ。ESC押しまくってBIOSに入ったら、それっぽい項目を探す。それっぽいところに潜っていくと「UMA Frame Buffer Size」という名前のやつがあるから、それ。&lt;/p&gt;&#10;&lt;h3 id="open-webui-のインストール"&gt;Open WebUI のインストール&#10;&lt;/h3&gt;&lt;p&gt;以下の &lt;code&gt;docker-compose.yml&lt;/code&gt;を作る。ポートは好きなの開ける。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version: &lt;span class="s1"&gt;&amp;#39;3.8&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;services:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; open-webui:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; image: ghcr.io/open-webui/open-webui:main&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; container_name: open-webui&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; restart: always&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ports:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - &lt;span class="s2"&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; volumes:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - open-webui:/app/backend/data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 永続化のためのボリューム定義&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;volumes:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; open-webui:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Dockerにボリュームを管理させるデフォルト設定&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;http://IPアドレス:ポート&lt;/code&gt;にアクセスすると、最初に管理者ユーザを作成することになる。&lt;/p&gt;&#10;&lt;h3 id="open-webui-から-lm-studioを繋げる"&gt;Open WebUI から LM Studioを繋げる&#10;&lt;/h3&gt;&lt;p&gt;ユーザアイコンから管理者パネルを開いて、「接続」タブ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;接続タイプ: ローカル&lt;/li&gt;&#10;&lt;li&gt;URL: &lt;code&gt;http://LM StudioあるマシンのIPアドレス:1234/v1&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;認証: なし&lt;/li&gt;&#10;&lt;li&gt;Provider TYpe: OpenAI&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;そしたらチャットで選択できるようになる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/image-7-700x227.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;なんか適当に話す。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/image-8-700x170.png"&gt;&lt;/p&gt;&#10;&lt;h2 id="gpt-oss-120bとの会話の雑感"&gt;gpt-oss-120bとの会話の雑感&#10;&lt;/h2&gt;&lt;p&gt;とりあえず日本語で話す限りは阿呆だなぁと思う。&lt;strong&gt;絶妙に話が通じなくて、あまり話す気がしない&lt;/strong&gt;。GPT-3.5の時はどうだったかなぁ。英語だともうちょっとマシなんだろうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Geminiの無料枠は非常に大きいという現状、正直宗教的な理由以外でわざわざgpt-oss-120bを使ってチャットする理由はちょっと思い当たらない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ツールとかと連携させるなら、使い所あるのかな？うーん。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;企業の都合で勝手に変えられない&lt;/strong&gt;、というのは大きいかも。いくらチューニングしてもアプデで滅茶苦茶になるこんな世の中じゃ。&lt;/p&gt;&#10;&lt;p&gt;また、&lt;strong&gt;インターネットから隔絶された環境でもけっこうな知にアクセスができる&lt;/strong&gt;、というのは非常に大きいのではないか、と思われる。いつまでもあると思うなインターネット。真面目な話、ネットに繋がせてもらえない環境は実在するので、そういうところにあると神になると思われる……が、そんなところで30万円するEVO-X2を導入できんか。つらいなぁ。&lt;/p&gt;&#10;</description></item><item><title>もうすぐ4年のルータ TP-Link AX5400 稼働中</title><link>https://hack-le.com/tp-link-ax5400/</link><pubDate>Tue, 18 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/tp-link-ax5400/</guid><description>&lt;p&gt;たまに自分が何のルータを持っていたか調べる、というのをなんだか半年に一回くらいやっている気がするので、記事がてらメモる。うちにあるのは、なんだかんだと言われるTP-LinkのAX5400。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tp-link.com/jp/home-networking/wifi-router/archer-ax73/" target="_blank" rel="noopener"&#10; &gt;Archer AX73 | AX5400 デュアルバンド ギガビット Wi-Fi 6ルーター | TP-Link 日本&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;AX73と言われていたりAX5400と言われていたりして謎だ。どっちなんだい！ホームユースとしてはまぁまぁの価格で、当時10,830円で購入したようだ。&lt;/p&gt;&#10;&lt;p&gt;外観は人によって好き嫌いが大きく分かれそうな、なんだか宇宙船みたいなアンテナ剥き出しの平置き型。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/ArcherAX73US10Argblarge_1606985107954m-700x700.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://www.tp-link.com/jp/home-networking/wifi-router/archer-ax73/" target="_blank" rel="noopener"&#10; &gt;https://www.tp-link.com/jp/home-networking/wifi-router/archer-ax73/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;個人的にはルータの見た目にこだわりはまったくなく、ルータはとにかく電波と安定して動いてくれることがすべてだ。購入してからもうすぐ4年経過するが、これまで特にトラブルらしいトラブルはなかった。なので、よかったのだろうと思う。&lt;/p&gt;&#10;&lt;p&gt;一方で、&lt;strong&gt;家にあるHPのプリンタInspire Envy 7221とはちょくちょく無線が切れる&lt;/strong&gt;。切れるだけで再接続できればいいのだが、しない。これまで、1年でプリンタ十数回は無線の設定をやりなおしたと思う。WPSボタンで接続できるけれども、そうは言っても数分かかる作業ではあるし、非常に煩わしい。&lt;/p&gt;&#10;&lt;p&gt;このプリンタは何かと不安定で、正直購入したことを後悔している。で、どうせこの不安定性もこのプリンタが悪いに違いない……と思っていたのだけれど、この記事を書きながら、そういえばこのAX73との相性が悪い、とかだったりもするんだろうか、と思ったりなんだりもしたが、あのプリンタ以外の数十台におよぶ歴代Wi-fi機器でトラブったやついねーし、やっぱプリンタが悪いだろ。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;4年経過したがそれなりに満足している&lt;/strong&gt;。我が家は常に十数台のWi-fi機器が接続されており、さらにLAN内ファイル同期のソフトウェアなども走っているわけだが、問題なく通信できている。&lt;/p&gt;&#10;&lt;p&gt;最近のルータは性能も熟れているので、壊れない限りは使い続けるだろう。だいたい5年くらい経過すると、そろそろ大丈夫かなぁという気がしてくるジャンルではるので、コイツがタメされるのはむしろこれからかもしれない。とはいえ一応4年もったので、次に買う時があったとして、TP-Linkを選択肢から外そう、とはならんのではないかな。&lt;/p&gt;&#10;&lt;p&gt;ただ有線LANポートが4つしかないのは不便だね。いやまぁ標準的なんだけどさ。でも有線に勝るものなし。ここらへんは買い換え理由になりうる。&lt;/p&gt;&#10;&lt;p&gt;あとどうしても家に業務用ルータが欲しくなったとか、今後そういうよくわからないことを考え始める可能性もある。&lt;/p&gt;&#10;&lt;p&gt;ちなみにどうでもいいが、珍しくヨドバシカメラで買っていた。安かったのかな。多分年末セールだろ。ヨドバシカメラはいい加減ポイント商法やめたほうがいいと思う。価格-ポイントがAmazonの価格とまったく同じなんだけれど、それだったら最初から値引きされているAmazonのほうがいいよねっていう。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.yodobashi.com/product-detail/100000001005972554/" target="_blank" rel="noopener"&#10; &gt;ヨドバシ.com - ティーピーリンク TP-Link Wi-Fiルーター AX5400 Wi-Fi 6（11ax）対応 4804＋574Mbps デュアルバンド メッシュWi-Fi対応 OneMesh対応 Archer AX73 通販【全品無料配達】&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/select-printer/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;あまり印刷しない人のプリンタ選び&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/select-printer/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_14907_1789096138.webp" alt="あまり印刷しない人のプリンタ選び" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>メモリ高すぎて泣く</title><link>https://hack-le.com/memorytakasugi/</link><pubDate>Mon, 17 Nov 2025 13:37:37 +0900</pubDate><guid>https://hack-le.com/memorytakasugi/</guid><description>&lt;p&gt;メモリが高くて心が荒んでいる。&lt;/p&gt;&#10;&lt;p&gt;メモリが高いという記事は見ていたともさ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.bcnretail.com/market/detail/20251116_573268.html" target="_blank" rel="noopener"&#10; &gt;メモリーGB単価が35％超の急騰、パソコン価格にも影響か【道越一郎のカットエッジ】 - BCN＋R&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、気にはしていたのだけれどね。気にしつつもやっぱり実感をしていたわけではなくて、姉から「Amazonセールなに買う？」みたいな話をされたときに、「そういえばセールか、一応PCパーツ見ておくかな−」みたいな感じで、相場調べたら震えたよね。&lt;/p&gt;&#10;&lt;p&gt;これよ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/69a9b0928ce71bac8b8a28bcb2dcb570-700x561.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;これカカクコムで一位だったメモリよ。つらい。&lt;/p&gt;&#10;&lt;p&gt;しかも原因は明らかで、AIブームというかAIバブルというか、まぁあの連中のせいなので、この品薄が当分解消される見込みはなさそう。さらに世界的なインフレ、その中での日本円の通貨安、何一つ好転する要素がない。&lt;/p&gt;&#10;&lt;p&gt;特に必要はないけど買っとけばよかったなぁ。&lt;/p&gt;&#10;</description></item><item><title>whisper.cppで文字起こしをM2 Pro Mac miniとWindows/Ryzen AI Max+ 395/Vulkanでやって比較</title><link>https://hack-le.com/whisper-cpp-m2-pro-mac-mini/</link><pubDate>Fri, 14 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/whisper-cpp-m2-pro-mac-mini/</guid><description>&lt;p&gt;30万のAI PC、Ryzen AI Max+ 395をせっかく購入したので、ローカルで色々やらせようとしている。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ryzen-ai-max-395-128gb-ram/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;30万でRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM ならちょっとほしい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ryzen-ai-max-395-128gb-ram/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_19575_1789622185.webp" alt="30万でRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM ならちょっとほしい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;基本的にLLM目当てではあったけれど、どうせなら色々……と思ってwhisper.cppもやらせてみた。めっちゃ疲れた。&lt;/p&gt;&#10;&lt;p&gt;Macだと割とサクッと環境構築できるのだが、Windowsはなんだか色々としんどい。とりあえずLLMにはものすごく振り回された。どや顔で手順1〜10まで出して完璧ですみたいな感じ出してきて、やってみると手順1でエラー出ると何か良くないものが芽生える。&lt;/p&gt;&#10;&lt;p&gt;あれこれやってとりあえず出来たのだが、まとめる気力もなかったので環境構築記事はAIに書かせた。環境構築手順が見たい人はこれらの記事を見て。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://ai.hack-le.com/m2-pro-mac-mini%e3%81%a7whisper-cpp%ef%bc%88large-v3%ef%bc%89%e3%82%92metal%e5%af%be%e5%bf%9c%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%a6%e6%96%87%e5%ad%97%e8%b5%b7%e3%81%93%e3%81%97%e3%81%99/" target="_blank" rel="noopener"&#10; &gt;M2 Pro Mac miniでWhisper.cpp（large-v3）をMetal対応で動かして文字起こしする手順&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://ai.hack-le.com/windows-msys2-mingw-vulkan-%e3%81%a7-whisper-cpp-%e3%82%92%e4%bd%bf%e3%81%86/" target="_blank" rel="noopener"&#10; &gt;Windows + MSYS2/MinGW + Vulkan で whisper.cpp を使う&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;チャット内では色々な手順を試してAIも大混乱しているのか、書かせた記事は滅茶苦茶だったが、一通り修正した……はず。なので手はだいぶ入っているがAI記事なので別館行き。&lt;strong&gt;一度構築した環境は二度構築することは多々あるので、メモは残すに限る&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;最近はこの程度のメモ記事はAI記事にしているため、本館と別館に情報が散らばってしまい、正直後で見返す時に「どっちに書いたんだっけ？」ってなることが多い&lt;/strong&gt;。また&lt;strong&gt;AI記事別館のほうが既に本館の数倍アクセスがあって、色々と思うところがある&lt;/strong&gt;。実際今回も手順はAI別館のほうに投げているが、そちらのほうが一般的には参考にされるのかもしれない。まぁ、もうどうでもいいけど。&lt;/p&gt;&#10;&lt;p&gt;そんならこの記事は何を書くのかというと、まぁやってみましたということの思い出と、苦労したという報告と、AI記事のほうがアクセスあるってなんやねんっていう愚痴と、そして&lt;strong&gt;M2 Pro Mac mini vs Ryzen AI Max+ 395でwhisper.cppやったメモ&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;p&gt;長い前置きをしておいて、結果だけしれっと書くと以下。これは13分くらいの音声について、large-v3で文字書き起こしをした時のもの。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;デバイス&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;threads&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;GPU&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;M2 Pro Mac mini&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;METAL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;113秒&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;M2 Pro Mac mini&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;METAL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;113秒&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GMKtec EVO-X2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Vulkan&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;123秒&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GMKtec EVO-X2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Vulkan&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;121秒&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;ということでM2 Pro Mac mini（12CPU, 19GPU)のほうが早かった。なるほどという感じではある。&lt;/p&gt;&#10;&lt;p&gt;まぁこれはそうかもなとは思っていた。元々圧倒的な128GBというユニファイドメモリなら、オフロードすることで70Bとか120BのLLMも使える、というそれだけのために買ったものだし、また実際、優位性はそれくらいだと思う。&lt;/p&gt;&#10;&lt;p&gt;とはいえMacで同容量のメモリを用意すると平然と倍くらいかかる。現在EVO-X2はAIサーバとしてメインの用途とは切り離した運用をしているが、さすがにこの価格差になると、次ばかりは本当に脱Macになるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;正直120Bだと、できるタスクは確かに広がるのだけれど、やっぱり「うん……まぁ……」という感じなので、&lt;strong&gt;671Bは最低限必要な気もする&lt;/strong&gt;。メモリどんくらいいるんだろうね。512GBでギリいけるのかしら。&lt;/p&gt;&#10;&lt;p&gt;現状でも普通の人が買えるものとしてRAM512GBはギリギリなくはなく、Mac Studioで512GB積めるは積めるが、150万円からで震える。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-16-700x448.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;今まで買ったPCや周辺機器の合計するととんでもないことになりそうだなと思ったところで、考えるのをやめた&lt;/strong&gt;。以上。&lt;/p&gt;&#10;</description></item><item><title>AmazonでポチったLoRaデバイスが税関通らなかった模様</title><link>https://hack-le.com/amazon-lora/</link><pubDate>Thu, 13 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/amazon-lora/</guid><description>&lt;p&gt;以下の記事の続き。LoRaのMeshtasticでメッシュネットワークをやりたい！！&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/meshtastic-device/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Meshtasticできる機器探し&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/meshtastic-device/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_45128_1789622398.webp" alt="Meshtasticできる機器探し" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事でLILYGOのT-BeamとHeltecのLoRa32 V3を紹介している。その後T-Beamは秋葉原で仕入れたのだが、通信先が同じだと面白くないなぁと思い、というか単に3,000円とT-Beamの半額で安かったので、HeltecのLoRa32 V3をAmazonでポチった。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;45129&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;2週間以上待たされる感じだったが、多分現地から直送しているんだろうと思われ、まぁ急いでないしいいよと思っていたのだが、このたび無事差し戻しをくらったらしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/b42605ead99ac4751400160287a8d91e-700x831.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;尊敬なるお客様&lt;/strong&gt;、チッスチッス。税関バリアで戻されたらしい🥺&lt;/p&gt;&#10;&lt;p&gt;税関のワークフローはよく知らないけれど、FCCもあるこのニッチな通信デバイスが個別に問題視されたとは思えないし、なんか巻き添えくらっちゃったのかなぁ。&lt;/p&gt;&#10;&lt;p&gt;そんなら再注文するかと思えば300円くらい値上がりしているし。いやまぁ、あんまり再注文する気にもなれんけどさ。&lt;/p&gt;&#10;&lt;p&gt;しかし、多分運が悪かっただけなんだとは思うけど、&lt;strong&gt;最近きな臭いから、なんか厳しくなっていたりすんのかな？という不安もちょっとある&lt;/strong&gt;。今のうちに、手に入れられるものは手に入れておいた方が、良いかもなぁ。&lt;/p&gt;&#10;&lt;p&gt;それにしても、尊敬なるお客様相手にもしっかり商売する中国人のバイタリティ、本当に見習いたい。でもサクラレビューはやめてほしい。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/amazon-review/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Amazonのレビューは報酬目当てのサクラ系だらけで全然参考にならない&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/amazon-review/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_8484_1789585585.webp" alt="Amazonのレビューは報酬目当てのサクラ系だらけで全然参考にならない" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ペッチペチ！お外で使うAndroidデバイスのキーボードとしてELECOM TK-FBP102BK/CE を購入した</title><link>https://hack-le.com/android-keyboard-elecom/</link><pubDate>Wed, 12 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/android-keyboard-elecom/</guid><description>&lt;p&gt;Enterキーが小さいからUS配列だと思い込んで買った愚か者が私です。日本語配列でした。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはいいとして、Androidタブレット用のキーボードとして、HHKB BTを使っていた。しかし、さすがにこれを外で使うにはあまりにも五月蠅すぎるという実際上の問題がある。&lt;strong&gt;HHKBの静音は、一般的にうるさい&lt;/strong&gt;。間違いなく振り向かれる。振り向かれた。気まずい。&lt;/p&gt;&#10;&lt;p&gt;それで、&lt;strong&gt;もっと許される音のキーボードを買う必要があった&lt;/strong&gt;わけだ。&lt;/p&gt;&#10;&lt;p&gt;この手のモバイルキーボードは昔から何台か使ってきたけれど、直近だとAnkerのペッチペチなパンタグラフのやつを使っていた。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;46043&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;こっちは正真正銘のUS配列だから、US配列志向ならこっちを買うべき&lt;/strong&gt;だね。ただ以前使ったとき、大して使った覚えてもなかったのだが、気がつくと一切無反応になっていたので、耐久性についてはお察し、といったところだろう。2000円の無線キーボードだし文句は言えないのかもしれないが……。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、やっぱり我らジャパンしか信用できない、という思いで今回はELECOMのやつにした。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;46042&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Enterキーが小さいからUS配列だと思ったら、思いっきりJIS配列で撃沈した&lt;/strong&gt;わ。ただこればかりは完全に僕が悪い。まぁ結局US配列として使うんですけども。はー何しているんだか。&lt;/p&gt;&#10;&lt;p&gt;一応ぺちぺちと打てます。音はまぁぺちぺちなるけど、HHKBよりはマシだし、一般的なキーボード音なので許されるかなと思います。打鍵のしやすさについては普通だけれど、JIS配列をUS配列で使うからそこんところで調整がいるよな。それでも普通の人よりかは早いさ。弘法筆を選ばずというやつだね。いやめっちゃ選びたいんだけどな。&lt;/p&gt;&#10;&lt;p&gt;まぁでもいいよ、どうせ元よりAndroidデバイスでガチの入力なんて求めてない。そもそも&lt;strong&gt;Emacsキーバインドできないと本気出せない&lt;/strong&gt;。Emacsの呪い。&lt;/p&gt;&#10;&lt;p&gt;誰かAndroidタブレット + Emacsキーバインド + Webブラウザの組合せできる方法知っている人がいたら教えてください。Chromebookですら難しかったから無理だろうなぁ。このEmacsの呪いのせいで、PC以外マトモに使おうという気になれない。でも&lt;strong&gt;キーボードという基本的なところをユーザが自由にできないっていうの、多分今のタブレットの本質なんだろうね&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;だから永遠にタブレットはPCの代わりになれない。&lt;strong&gt;タブレットとPCを統合する試みはこれまですべて失敗してきたし、これからも失敗する&lt;/strong&gt;。設計思想が根本的に違うから。以上。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/android-pc-ssh/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;外出先からAndroidタブレットで自宅PCにSSHでログインしてターミナルによる開発生活&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/android-pc-ssh/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_45235_1789622472.webp" alt="外出先からAndroidタブレットで自宅PCにSSHでログインしてターミナルによる開発生活" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>AIは皮肉をどこまでわかるのか</title><link>https://hack-le.com/aihiniku/</link><pubDate>Mon, 10 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/aihiniku/</guid><description>&lt;p&gt;わかるときもあるしわからない時もある。&lt;/p&gt;&#10;&lt;p&gt;今回の皮肉はこれ&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;オクで食洗機を買ってからというもの、最先端アルゴリズムによって数ヶ月にわたり食洗機をオススメされてきたのだが最近オクでトラックボールマウスを買ったところ、食洗機ではなくトラックボールマウスをオススメされるようになった&lt;/p&gt;&#10;&lt;p&gt;この反映のスピードこそ2025年の最先端アルゴリズムよな&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;これは人間なら誰でも皮肉だとわかるだろう。&lt;/p&gt;&#10;&lt;p&gt;これについて、「このツイートの言いたいことは？」という聞き方から引用する形で、ChatGPT/Claude/Geminiに読み込ませた。&lt;/p&gt;&#10;&lt;h2 id="chatgptの場合"&gt;ChatGPTの場合&#10;&lt;/h2&gt;&lt;p&gt;まずはChatGPT。有料会員だが聞き方が浅いので多分軽いモデルが使われていると思う。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;このツイートは、ネット上の「おすすめアルゴリズム」（レコメンド機能）の挙動を皮肉とユーモアを交えて述べています。&#10;内容を分解すると、次のような意味になります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;「オクで食洗機を買ってから、ずっと食洗機をオススメされていた」 　→　購入済みなのに同じジャンルの商品を延々と薦めてくるアルゴリズムの鈍さを指摘している。&lt;/li&gt;&#10;&lt;li&gt;「最近トラックボールマウスを買ったら、今度はそちらをオススメされるようになった」 　→　アルゴリズムが「最近の購入傾向」を学習して即座に切り替わった。&lt;/li&gt;&#10;&lt;li&gt;「この反映のスピードこそ2025年の最先端アルゴリズムよな」 　→　一見賞賛のように言いながら、実際には「買ったものをそのまま薦める程度で“最先端”とは笑える」という皮肉を込めている。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;機械学習やAIが進化しても、レコメンドシステムの“的外れさ”や“後追いぶり”は相変わらずだ&lt;/strong&gt;というユーモアを表現した投稿です。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;これをどう解釈するかは色々あるが、とりあえず皮肉だ、ということは理解している。&lt;/p&gt;&#10;&lt;p&gt;個人的には、「機械学習やAIが進化」という前置きにはポジティブバイアスがかかっているなと思う。元のツイートはむしろ、進化などしていない、ただ早くなっただけだ、というニュアンスを人は感じるのではなかろうか。&lt;/p&gt;&#10;&lt;h2 id="claude-sonnet-45-の場合"&gt;Claude (Sonnet 4.5) の場合&#10;&lt;/h2&gt;&lt;p&gt;プログラマ御用達Claude。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;このツイートが言いたいことは、&lt;strong&gt;レコメンドアルゴリズムの皮肉な特性&lt;/strong&gt;についてです。&lt;/p&gt;&#10;&lt;p&gt;具体的には:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;過去の購入を延々と勧め続ける問題&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;食洗機を買った後、数ヶ月も食洗機をおすすめされ続けた(もう持ってるのに)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;最新の購入には素早く反応&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;トラックボールマウスを買ったら、すぐにそちらのおすすめに切り替わった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;&lt;strong&gt;「最先端」への皮肉&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;すでに買った商品を勧め続けるという非効率さ&lt;/li&gt;&#10;&lt;li&gt;本当に賢いなら「もう持っている」と判断すべきなのに&lt;/li&gt;&#10;&lt;li&gt;でも最新の購入履歴への反応は早い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;つまり、「これが2025年の最先端アルゴリズムか&amp;hellip;」という言葉には、 &lt;strong&gt;「最先端と言いながら、ユーザーのニーズを本当には理解していない」という皮肉や呆れ&lt;/strong&gt;が込められています。&lt;/p&gt;&#10;&lt;p&gt;購入済み商品を延々勧めるのではなく、補完商品や関連商品を提案する方が賢いはずなのに、というツッコミですね。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;とりあえず皮肉とは理解している。一方で、箇条書きの使い方が例によってClaude流で、箇条書き本来の並列・階層の特性ではなく、単に段落区切りのように使われているのが、個人的なイライラポイント。&lt;/p&gt;&#10;&lt;p&gt;結論をより建設的な方向に持っていこうとしているのもClaudeっぽいっちゃそうかもしれん。&lt;/p&gt;&#10;&lt;h2 id="gemini-25-flashの場合"&gt;Gemini (2.5 Flash)の場合&#10;&lt;/h2&gt;&lt;p&gt;FlashだがGemini。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;このツイートの言いたいことは、 &lt;strong&gt;「インターネット上の&lt;/strong&gt;（おそらくオークションサイトやECサイト、SNSなどの）&lt;strong&gt;おすすめ表示アルゴリズムの&lt;/strong&gt;ユーザーの興味への****『反映のスピード』** **が非常に速く、優れている」**ということです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;以前の状況:&lt;/strong&gt; オークションで食洗機を買った後、数ヶ月間にわたって食洗機関連の商品が「おすすめ」として表示され続けていた。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;現在の状況と変化:&lt;/strong&gt; 最近になってトラックボールマウスを買ったら、すぐに「おすすめ」の内容が食洗機関連からトラックボールマウス関連に切り替わった。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この**「興味の変化への即座の対応」&lt;strong&gt;を体験した筆者が、「この反映のスピードこそ&lt;/strong&gt;2025年の最先端アルゴリズム&lt;strong&gt;だ」と、その&lt;/strong&gt;精度の高さと応答性の速さ**に感心している様子を表しています。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;素直か&lt;/strong&gt;。逆に煽られてんのかと思ったわ。&lt;/p&gt;&#10;&lt;p&gt;まぁでもこの子のおかげでこの試行は記事になりました。AIなんてこんなもんよ。&lt;/p&gt;&#10;&lt;h2 id="ところでマークダウンどうにかして"&gt;ところでマークダウンどうにかして&#10;&lt;/h2&gt;&lt;p&gt;どうでもいいけどマークダウンの日本語非対応ぶりはいい加減どうにかならんか。AI革命の前にマークダウン改善してどうぞ。&lt;/p&gt;&#10;&lt;h2 id="関連記事"&gt;関連記事&#10;&lt;/h2&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-enum/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIの出力から学ぶ、箇条書きをわかりづらくする100の方法&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-enum/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-30.webp" alt="AIの出力から学ぶ、箇条書きをわかりづらくする100の方法" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/chatgpt-gemini-claude/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;勝手に決めつけるChatGPTとGeminiとClaudeの傾向の違い：結局どれに貢げばいいのか決定戦&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/chatgpt-gemini-claude/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/07/04ea1923bd78f1008a9903eeb4ca26fb.webp" alt="勝手に決めつけるChatGPTとGeminiとClaudeの傾向の違い：結局どれに貢げばいいのか決定戦" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/chatgptlarge-breasts/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ChatGPT「large breastsはエッチだから削除しておくね^^」「small breastsはエッチじゃないからOKです👍」&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/chatgptlarge-breasts/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-18.webp" alt="ChatGPT「large breastsはエッチだから削除しておくね^^」「small breastsはエッチじゃないからOKです👍」" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Windows 11で入れているアプリやキーボードの設定（Emacsキーバインド）</title><link>https://hack-le.com/windows-11-init/</link><pubDate>Thu, 06 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/windows-11-init/</guid><description>&lt;p&gt;Windows 11をインストールした後、個人的に導入しているアプリのメモ書き。&lt;/p&gt;&#10;&lt;p&gt;移行のときとかに、そういえばこのアプリ入れてたなと思い出せるのと、参照リンク全部引くのも面倒なので。&lt;/p&gt;&#10;&lt;h2 id="稼働中のwindows-pc"&gt;稼働中のWindows PC&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;GMKtec EVO-X2&#10;&lt;ul&gt;&#10;&lt;li&gt;ローカルLLM&lt;/li&gt;&#10;&lt;li&gt;Ryzen AI Max+ 395&lt;/li&gt;&#10;&lt;li&gt;DDR5 128GB RAM&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;HP OMEN&#10;&lt;ul&gt;&#10;&lt;li&gt;Stable Diffusionとゲーム&lt;/li&gt;&#10;&lt;li&gt;Intel Coire i7-8700K&lt;/li&gt;&#10;&lt;li&gt;DDR4 32GB RAM&lt;/li&gt;&#10;&lt;li&gt;NVIDIA RTX4070 VRAM 12GB&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ASUS TUF Gaming F15 FX506HM&#10;&lt;ul&gt;&#10;&lt;li&gt;ラップトップとカジュアルゲーム&lt;/li&gt;&#10;&lt;li&gt;デュアルブートでLinux入れている&lt;/li&gt;&#10;&lt;li&gt;Intel Core i5-11400H 6C12T 2.7GHz&lt;/li&gt;&#10;&lt;li&gt;NVIDIA RTX3060(laptop) VRAM 6GB&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="アプリケーション"&gt;アプリケーション&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;ブラウザ&#10;&lt;ul&gt;&#10;&lt;li&gt;Vivaldi&#10;&lt;ul&gt;&#10;&lt;li&gt;今のメインブラウザ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Firefox&lt;/li&gt;&#10;&lt;li&gt;Brave&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メーラー&#10;&lt;ul&gt;&#10;&lt;li&gt;Vivaldi&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;マウス用&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.microsoft.com/accessories/ja-jp/d/sculpt-comfort-mouse" target="_blank" rel="noopener"&#10; &gt;Sculpt Comfort Mouse (スカルプト コンフォート マウス) | デバイスのダウンロード | Microsoft Accessories&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;日本語入力&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/crftwr/keyhac-win/releases" target="_blank" rel="noopener"&#10; &gt;keyha&lt;/a&gt;c&#10;&lt;ul&gt;&#10;&lt;li&gt;スタートアップ&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://w.atwiki.jp/ntemacs/pages/25.html" target="_blank" rel="noopener"&#10; &gt;Windows の操作を Emacs のキーバインドで行うための設定 （Keyhac版） - NTEmacs @ ウィキ - atwiki（アットウィキ）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://forest.watch.impress.co.jp/library/software/changekey/" target="_blank" rel="noopener"&#10; &gt;「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ゲーム&#10;&lt;ul&gt;&#10;&lt;li&gt;Steam&lt;/li&gt;&#10;&lt;li&gt;DMM GamePlayer&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;リモートコントロール&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://t-ishii.la.coocan.jp/hp/mc/index.html" target="_blank" rel="noopener"&#10; &gt;Mirror-DTC Home Page&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ポートは自分で開ける&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;テキストエディタ&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://sakura-editor.github.io/" target="_blank" rel="noopener"&#10; &gt;サクラエディタ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;オフィスソフト&#10;&lt;ul&gt;&#10;&lt;li&gt;LibreOffice&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;オンラインストレージ&#10;&lt;ul&gt;&#10;&lt;li&gt;Dropbox&#10;&lt;ul&gt;&#10;&lt;li&gt;無料アカウントなので3台まで&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;QSync Client&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ユーティリティ&#10;&lt;ul&gt;&#10;&lt;li&gt;CrystalDiskInfo&lt;/li&gt;&#10;&lt;li&gt;7-zip&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.tinytask.net/" target="_blank" rel="noopener"&#10; &gt;TinyTask&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.autohotkey.com/" target="_blank" rel="noopener"&#10; &gt;AutoHotkey&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://apps.microsoft.com/detail/9wzdncrfhwlh?hl=ja-JP&amp;amp;gl=JP" target="_blank" rel="noopener"&#10; &gt;HP Smart&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;プリンタのため。仕方がない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;AI&#10;&lt;ul&gt;&#10;&lt;li&gt;LM Studio&lt;/li&gt;&#10;&lt;li&gt;Ollama&lt;/li&gt;&#10;&lt;li&gt;ChatGPT&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;開発&#10;&lt;ul&gt;&#10;&lt;li&gt;Docker Desktop for Windows&lt;/li&gt;&#10;&lt;li&gt;Visual Studio Code&lt;/li&gt;&#10;&lt;li&gt;Vivado&lt;/li&gt;&#10;&lt;li&gt;Windows Terminal&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;AMD&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.amd.com/en/support/download/drivers.html" target="_blank" rel="noopener"&#10; &gt;Drivers and Support for Processors and Graphics&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;GMKtec EVO X-2のVRAM割り当て、結局BIOSじゃないと動かないんですけど！&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="もろもろの設定"&gt;もろもろの設定&#10;&lt;/h2&gt;&lt;h3 id="プライベートipアドレスの固定"&gt;プライベートIPアドレスの固定&#10;&lt;/h3&gt;&lt;h3 id="必要なポートの開放"&gt;必要なポートの開放&#10;&lt;/h3&gt;&lt;p&gt;Mirror-DTCで55555ポートの開放が必要なので「&lt;a class="link" href="https://pc-karuma.net/open-firewall-port-on-windows-11/?utm_source=chatgpt.com#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E9%96%A2%E9%80%A3%E3%81%AE%E8%A8%98%E4%BA%8B" target="_blank" rel="noopener"&#10; &gt;Windows 11 - 特定ポート番号の通信を許可する方法 - ファイアウォール - PC設定のカルマ&lt;/a&gt;」を参考に以下の手順であける。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;スタートメニューの検索フォームに「セキュリティ」と入力し、 Windows セキュリティ を起動。&lt;/li&gt;&#10;&lt;li&gt;左ペインで「ファイアウォールとネットワーク保護」を選び、「詳細設定」をクリック。&lt;/li&gt;&#10;&lt;li&gt;管理者承認のユーザーアカウント制御（UAC）ダイアログが出たら「はい」を選択。&lt;/li&gt;&#10;&lt;li&gt;左側メニューで「受信の規則」を選択し、右側の「新しい規則…」をクリック。&lt;/li&gt;&#10;&lt;li&gt;「規則の種類」で「ポート」を選び、「次へ」をクリック。&lt;/li&gt;&#10;&lt;li&gt;「プロトコルおよびポート」で、使用するプロトコル（TCP または UDP）を選択し、「特定のローカルポート」に開放したいポート番号を入力して「次へ」。&lt;/li&gt;&#10;&lt;li&gt;「操作」で「接続を許可する」を選択し、「次へ」。&lt;/li&gt;&#10;&lt;li&gt;「プロファイル」でこの規則を適用するネットワークの種類（ドメイン／プライベート／パブリック）にチェックを入れて「次へ」。&lt;/li&gt;&#10;&lt;li&gt;「名前と説明」の欄に任意の名前および説明を入力し、「完了」をクリック。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="エクスプローラの右クリックメニューをまともにする"&gt;エクスプローラの右クリックメニューをまともにする&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://ai.hack-le.com/windows-11%e3%81%a7%e5%8f%b3%e3%82%af%e3%83%aa%e3%83%83%e3%82%af%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%92%e6%97%a7%e3%82%b9%e3%82%bf%e3%82%a4%e3%83%ab%e3%81%ab%e6%88%bb%e3%81%99%e6%96%b9%e6%b3%95/" target="_blank" rel="noopener"&#10; &gt;Windows 11で右クリックメニューを旧スタイルに戻す方法（レジストリ設定）&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="keyboardの設定hhkb-us配列前提"&gt;keyboardの設定（HHKB US配列）前提&#10;&lt;/h3&gt;&lt;p&gt;Keyboardの設定は永遠に悩ましい。個人的な環境は&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;HHKB US配列&lt;/li&gt;&#10;&lt;li&gt;英かな変換はやっぱりやりたい&lt;/li&gt;&#10;&lt;li&gt;左Cmdキー相当左♢で通常のショートカットキーを使いたい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;で、以下のような変則的な形になった。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ChageKeyでキースワップ&#10;&lt;ul&gt;&#10;&lt;li&gt;Win左→Ctrl右に変更&lt;/li&gt;&#10;&lt;li&gt;Win右→Ctrl左&lt;/li&gt;&#10;&lt;li&gt;Windowsキーなどいらぬ。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;keyhac + Fakeymacs&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Fakeymacsでは、&lt;code&gt;config_personal.py&lt;/code&gt;で以下を入れている。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;set_input_method_key&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;O-LAlt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;O-RAlt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;set_input_method_key&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;O-RCtrl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;O-LCtrl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;左右スワップしているのが奇妙な感じになっている。&lt;/p&gt;&#10;&lt;p&gt;現状これでやりたいことはできている。&lt;/p&gt;&#10;&lt;h3 id="evo-x2固有-vram割り当てを64gb---96gb-にする"&gt;(EVO-X2固有) VRAM割り当てを64GB -&amp;gt; 96GB にする&#10;&lt;/h3&gt;&lt;p&gt;割り当てについてはLM Studioで確認できる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/11/image-6-700x257.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;AMDのソフトウェアからも変更できそうに見えるが、なんぼやっても変更されなかった。結局BIOSだよ。ESC押しまくってBIOSに入ったら、それっぽい項目を探す。それっぽいところに潜っていくと「UMA Frame Buffer Size」という名前のやつがあるから、それ。&lt;/p&gt;&#10;&lt;h2 id="wsl"&gt;WSL&#10;&lt;/h2&gt;&lt;p&gt;Docker Desktop使う過程で勝手に入るし、なんか今さらではあるのだが。&lt;/p&gt;&#10;&lt;h3 id="apt"&gt;apt&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;direnv&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;gcc&lt;/li&gt;&#10;&lt;li&gt;g++&lt;/li&gt;&#10;&lt;li&gt;make&lt;/li&gt;&#10;&lt;li&gt;cmake&lt;/li&gt;&#10;&lt;li&gt;ruby&lt;/li&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;pandoc&lt;/li&gt;&#10;&lt;li&gt;ffmpeg&lt;/li&gt;&#10;&lt;li&gt;fzf&lt;/li&gt;&#10;&lt;li&gt;net-tools&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="バイナリ"&gt;バイナリ&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Go: &lt;a class="link" href="https://ai.hack-le.com/wsl%e3%81%a7go%e8%a8%80%e8%aa%9e%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" target="_blank" rel="noopener"&#10; &gt;WSLでGo言語をインストールする方法&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://ai.hack-le.com/wsl%e3%81%a7ghq%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" target="_blank" rel="noopener"&#10; &gt;WSLでghqをインストールする方法&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://ai.hack-le.com/ghq%e3%81%a7%e9%ab%98%e9%80%9f%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e7%a7%bb%e5%8b%95%e3%82%92%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b%e6%9c%80%e5%b0%8f%e8%a8%ad%e5%ae%9a/" target="_blank" rel="noopener"&#10; &gt;ghqで高速リポジトリ移動を実現する最小設定&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;pyenv: &lt;a class="link" href="https://ai.hack-le.com/wsl%e3%81%a7pyenv%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%ef%bc%88%e6%8e%a8%e5%a5%a8%e6%a7%8b%e6%88%90%ef%bc%89/" target="_blank" rel="noopener"&#10; &gt;WSLでpyenvをインストールする方法（推奨構成）&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="python"&gt;python&#10;&lt;/h3&gt;&lt;p&gt;プロジェクトごとに管理したい場合は&lt;code&gt;poetry&lt;/code&gt;を使う。グローバルで適当にやる用途として&lt;code&gt;~/venvs/default&lt;/code&gt;を作ってそこでごちゃごちゃする。バージョンはなんかそんときに新しかったやつ。適当でいい。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pip/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;pythonのpipで入れているもの&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pip/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_6826_1787720995.webp" alt="pythonのpipで入れているもの" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h3 id="javascript"&gt;JavaScript&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://volta.sh/" target="_blank" rel="noopener"&#10; &gt;Volta - The Hassle-Free JavaScript Tool Manager&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="sshの設定"&gt;sshの設定&#10;&lt;/h3&gt;&lt;p&gt;自前のWikiにあるが、複数アカウントの鍵作成。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自前のgitea&lt;/li&gt;&#10;&lt;li&gt;GitHub&lt;/li&gt;&#10;&lt;li&gt;GitLab&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Docker Desktop for Mac → Orbstackへ移行する</title><link>https://hack-le.com/docker-desktop-orbstack/</link><pubDate>Fri, 31 Oct 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/docker-desktop-orbstack/</guid><description>&lt;p&gt;OrbstackはMacで動かせるDocker Desktopの代替。本家より軽量で、いくつかのアプリケーションではこちらを推奨されることがある。というかNextcloudで推奨された。なので、入れることにした。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://orbstack.dev/" target="_blank" rel="noopener"&#10; &gt;OrbStack · Fast, light, simple Docker &amp;amp; Linux&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;すごいざっと見たところでは、Docker DesktopよりMac対応で統合してるし軽量だし性能いーくてLinuxデスクトップ環境まで作れる、ということらしい。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&lt;/li&gt;&#10;&lt;li&gt;macOS Sonoma 14.7.7&lt;/li&gt;&#10;&lt;li&gt;Docker Desktop for Mac 4.49.0 はひとまずインストールしたまま実行&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="orbstackの料金とか"&gt;Orbstackの料金とか&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://docs.orbstack.dev/faq" target="_blank" rel="noopener"&#10; &gt;Frequently asked questions · OrbStack Docs&lt;/a&gt;」より&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;OrbStack は有料製品&lt;/strong&gt;（ベータ終了後に有料化）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;個人利用&lt;/strong&gt;は無料。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;商用利用・非営利団体含む法人利用&lt;/strong&gt;は月 8 ドル／ユーザー。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;教育利用・非商用のオープンソース開発&lt;/strong&gt;は申請により無料ライセンスが可能。&lt;/li&gt;&#10;&lt;li&gt;30日間の猶予期間あり。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;商用でも中小規模だとDocker Desktopは無料なので、ここは考えどころになる場合はあるかもしらん。今回はホームユースでNextcloud使うためなので、個人利用。&lt;/p&gt;&#10;&lt;h2 id="orbstackの利用"&gt;Orbstackの利用&#10;&lt;/h2&gt;&lt;h3 id="インストール"&gt;インストール&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.orbstack.dev/quick-start" target="_blank" rel="noopener"&#10; &gt;Quick start · OrbStack Docs&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.orbstack.dev/install" target="_blank" rel="noopener"&#10; &gt;Install OrbStack · OrbStack Docs&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;いったんDocker Desktopは終了する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install orbstack&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;確認&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;docker&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;getting&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;started&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;http://localhost&lt;/code&gt;でDockerのチュートリアルが開けることを確認する。&lt;/p&gt;&#10;&lt;p&gt;これだけだとorb使ってんのかどうかわからんないので、以下を実行。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker context ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME DESCRIPTION DOCKER ENDPOINT ERROR&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;default Current DOCKER_HOST based configuration unix:///var/run/docker.sock &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;desktop-linux Docker Desktop unix:///Users/masudataku/.docker/run/docker.sock &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;orbstack * OrbStack unix:///Users/masudataku/.orbstack/run/docker.sock&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;orbstack&lt;/code&gt;のところに&lt;code&gt;*&lt;/code&gt;がついているので、正しく切り替わっている。Docker Desktopに切り替える場合は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker context use desktop-linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;orbstackに戻す時は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker context use orbstack&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="docker-desktopからイメージとか移行"&gt;Docker Desktopからイメージとか移行&#10;&lt;/h3&gt;&lt;p&gt;常駐アイコンからOrbstackのGUIを開ける。初回時は「Migrateする？」みたいなの表示されていると思うが、メニューバーの「File」からもMigrateは可能だし、以下のコマンドでも可能。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;orb docker migrate&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;何をしているのかは、ChatGPTによると&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;code&gt;orb docker migrate&lt;/code&gt; は、Docker Desktop のイメージ・コンテナ・ボリュームを OrbStack 側に&lt;strong&gt;コピー&lt;/strong&gt;するだけなので、結果として「両方に同じ名前・タグのイメージが存在」します。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;なので、Docker DesktopとOrbStackが併存する環境においてのコンテナの利用は、どちらのcontextをuseするかで決まる、ということになる。&lt;/p&gt;&#10;&lt;h3 id="自動起動"&gt;自動起動&#10;&lt;/h3&gt;&lt;p&gt;常駐アイコンのSettingsから、Start at loginを有効化する。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-9-700x699.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="orbstackのアンインストール手順"&gt;OrbStackのアンインストール手順&#10;&lt;/h3&gt;&lt;p&gt;やっぱりいらねぇ、となった場合。アプリケーションフォルダから OrbStack.app を削除する。&lt;/p&gt;&#10;&lt;p&gt;データを完全に消す場合は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf ~/.orbstack&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf ~/Library/Group Containers/HUAQ24HBR6.dev.orbstack&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Docker Desktop に戻す場合&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker context use desktop-linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="docker-desktopの削除"&gt;Docker Desktopの削除&#10;&lt;/h3&gt;&lt;p&gt;やる場合は。Docker Desktopを起動し、常駐アイコンの「Troubleshoot」よりアンインストール。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;今のところ特に何も不具合なく使えている。しばらく使って問題なさそうならいいかなぁ。関係あるのかわからないが、これインストールした後にMacを再起動すると、なぜか起動ディスクを選ぶところから始まった。その後の動作は問題ない。&lt;/p&gt;&#10;&lt;p&gt;LAN内でのhttpsなどOrbStackならではの機能もある。全部localhostとかIP直打ちは管理上も不便だし、httpだとキレてくるアプリも多いので、便利かもしれない。でもCalibreだと挙動おかしかったなぁ。&lt;/p&gt;&#10;&lt;p&gt;商用利用だと有料確定演出なので、結局みんなDocker Desktopを使い続ける気もしつつ、次はNextcloudかな。&lt;/p&gt;&#10;</description></item><item><title>ローカルLLMやりたくてRyzen AI Max+ 395 + 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった</title><link>https://hack-le.com/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/</link><pubDate>Wed, 29 Oct 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/</guid><description>&lt;p&gt;ムシャクシャしてポチった。今庶民がギリギリできるローカルLLMの限界を自分の手で試したかった。&lt;/p&gt;&#10;&lt;h2 id="欲しくなってしまった"&gt;欲しくなってしまった&#10;&lt;/h2&gt;&lt;p&gt;この記事を読んでいたらとてもほしくなったよね。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://pc.watch.impress.co.jp/img/pcw/docs/2053/153/html/H03_o.jpg.html" target="_blank" rel="noopener"&#10; &gt;【西川和久の不定期コラム】Ryzen AI MaxのLLMとAI画像生成の性能は？OCuLinkでどちらも快適に♪「GMKtec EVO-X2」(後編) - PC Watch&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Stable Diffusionでお絵かきしたい場合、そのうちにLoRAとかもやりたくなるだろうし、高くてもNVIDIAのグラボで頑張ることになるのではないか。しかし&lt;strong&gt;LLMの場合、学習が闇かつ大規模パラメータに勝るものなしという実情がある&lt;/strong&gt;。すると、&lt;strong&gt;学習はともかく推論さえできればいいということで、比較的安価なAMDも選択肢に入る&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;とはいえグラボは高いし電気もすごいしこれに見合う基盤PCはそもそも高い。家も狭い。とても手が出ない。そこへ颯爽と登場した俺たちのRyzen AI Max+ 395が当面の覇権なのはそうだろう。大容量VRAMの高級グラボなんてイーロン・マスクにしか買えないという現実の中で、バス幅のあるユニファイドメモリにオフロードすることにより、120BとかそれなりのパラメータのLLMを動かせる。&lt;strong&gt;現状庶民ができるのはこれが精一杯だと思う&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;30万円の中華なミニPCはかなり勇気のいるところではあるが、待っていてもこれ以上安くなると思えないし、なんならインフレと通貨安で高くなる可能性すらある。128GB RAMだとせいぜい120Bまでが限界だろうが、256GB RAMとか512GB RAMは現状しんどそうだ。まぁ金に糸目を付けなければ現状Mac Studio 512GB RAMなるものもあるが……。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-16-700x448.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;150万円……&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;150万円はいや、さすがに。震える。512GBだと671Bのやつも乗るんだろうね。&lt;/p&gt;&#10;&lt;p&gt;これを見た後にGMKtexのEVO-X2の30万円を見ると圧倒的に安く感じられる（錯覚）。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;45838&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;安いのでポチった（錯乱）。&lt;/p&gt;&#10;&lt;p&gt;正確には5%クーポンがあったので公式サイトからポチった。注文から10日くらいで届いたかな。&lt;/p&gt;&#10;&lt;h2 id="みんな大好きgpt-oss-120bをのせる"&gt;みんな大好きgpt-oss-120bをのせる&#10;&lt;/h2&gt;&lt;p&gt;とりあえず1日かけて一通りセットアップした。VRAMの割り当てが初期設定だと64GBになっているのだが、BIOSで設定変更することで96GBになる。BIOSはESCキーで入って、それっぽいところから「UMA Frame Buffer Size」なるものを探して設定すればよし。&lt;strong&gt;AMDのソフトウェアでも設定変更できる……ことになっているが、実際にやってみたら永遠に設定反映されなかった&lt;/strong&gt;。AMDェ……。&lt;/p&gt;&#10;&lt;p&gt;まぁ色々と苦労しつつ、例によってLM Studioでダウンロードして早速ロードする。コンテクスト長は16384。32768にしたらロードできんかった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-15-700x883.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;これで読み込んで実行。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-14-700x297.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;35トークン/秒はなかなかでは&lt;/strong&gt;。チャットとしても全然耐えられる。コンテクストも16384ならそれなりには話せそう。M2 Pro Mac mini(32GB RAM)だとDeepSeekの32Bでも死にそうになりながら数トークン/sだったことを思うと、かなり大きい。そういえばこのMac miniもたしか23万円くらいしたかな……。&lt;/p&gt;&#10;&lt;h2 id="difyとも連携させる"&gt;Difyとも連携させる&#10;&lt;/h2&gt;&lt;p&gt;LM Studioだとどこまでもチャットなので、セルフホストのDIfyとも連携する。これも&lt;strong&gt;DifyのマーケットプレイスにLM Studioがあるが使えないという罠にはまりつつ&lt;/strong&gt;、OpenAI API Compatibleとして導入すると利用することができた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-17-700x134.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;やり方は「&lt;a class="link" href="https://zenn.dev/shusuke_bridge/articles/168723683c89ed" target="_blank" rel="noopener"&#10; &gt;LM Studioを使ったgpt-oss-20bとDifyの連携方法【Mac】&lt;/a&gt;」の記事が参考になりました。&lt;/p&gt;&#10;&lt;p&gt;まぁAPI使うだけならDifyを使う必要もないのだけれど、色々なモデルを比較するにはやっぱりGUIでサクッとできたほうがよいので。ちなみにこのDifyは2年前にM2 Pro Mac miniを購入して前線を退いたIntel Mac mini 2018のコンテナ上で動いております。&lt;/p&gt;&#10;&lt;h2 id="なおollamaは"&gt;なおollamaは……&#10;&lt;/h2&gt;&lt;p&gt;ちょっと注意なのは、Ryzen AI Max+ 395でLLMを利用する場合、CUDAのパチモンことROCmではなくVulkan経由でやることになる。みんなの味方ollamaは、Vulkan対応まだ微妙なので、LM Studioを使っているのだね。それでこんな回りくどい構成に。&lt;/p&gt;&#10;&lt;h2 id="ポチった以上はやるしかない"&gt;ポチった以上はやるしかない&#10;&lt;/h2&gt;&lt;p&gt;ということで、2年ぶりとなる大型の買い物に震えつつポチりました。買ってしまった以上はやるしかないのである。ローカルLLMによる成果については、今後もボチボチ記事にしていきたい。30万円分は遊ばないと……。&lt;/p&gt;&#10;&lt;p&gt;（追記：似たようなのが出ていた。 &lt;a class="link" href="https://www.bosgamepc.com/products/bosgame-m5-ai-mini-desktop-ryzen-ai-max-395" target="_blank" rel="noopener"&#10; &gt;Bosgame M5 AI Mini Desktop Ryzen AI Max+ 395 96GB/128GB+2TB&lt;/a&gt; GMKtecよりすこーし安い？高いけど）&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/whisper-cpp-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;whisper.cppで文字起こしをM2 Pro Mac miniとWindows/Ryzen AI Max&amp;#43; 395/Vulkanでやって比較&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/whisper-cpp-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-5.webp" alt="whisper.cppで文字起こしをM2 Pro Mac miniとWindows/Ryzen AI Max&amp;#43; 395/Vulkanでやって比較" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aibubble-revo/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIは革命だが、バブルは崩壊するし、崩壊はAIにとどまらない&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aibubble-revo/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output.webp" alt="AIは革命だが、バブルは崩壊するし、崩壊はAIにとどまらない" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>AIの出力から学ぶ、箇条書きをわかりづらくする100の方法</title><link>https://hack-le.com/ai-enum/</link><pubDate>Sat, 25 Oct 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-enum/</guid><description>&lt;p&gt;なんだかんだでClaudeを使い続けている今日この頃だが、Claudeで辟易とするのは&lt;strong&gt;箇条書きの過剰な多用&lt;/strong&gt;だ。文章全体の9割が箇条書き、なんていうのも珍しくない。そしてこれは、非常にわかりづらい。&lt;/p&gt;&#10;&lt;p&gt;これについて不満に思っているのは僕だけではないようで、いつぞやClaudeに箇条書きをやめさせる方法みたいなツイートが流れてきた。&lt;strong&gt;この時のコメント欄を見ると、「箇条書きがわかりづらいなんて、何言ってるの」みたいなのもあったが、これは奇妙な話だ&lt;/strong&gt;。そのリプを箇条書きで書かなかったことが、その答えではないか、と思った。&lt;/p&gt;&#10;&lt;p&gt;別に箇条書きは特別難しい手法ではなく、箇条書きにしないのは、単にそうする意味がないからだ。つまり&lt;strong&gt;箇条書きには適切な時と不適切な時があるという、極めて当たり前の話&lt;/strong&gt;である。だがその当たり前が、見落とされているものかもしれない。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;箇条書きが相応しいときと、そうでないときの違いはどこにあるだろうか？これは、論理的な繋がりを読者が即座に補完できるか、という点にある&lt;/strong&gt;。これが簡単ならば箇条書きで問題ないし、難しい場合は適切ではない。場合によっては論理の補完が不可能なことすらあり、&lt;strong&gt;その場合は論理を放棄してそれらしい単語を並べただけの、文章とも言えない文字列&lt;/strong&gt;といえる。AIはそういうの出力しがち。&lt;/p&gt;&#10;&lt;h2 id="箇条書きのアンチパターン"&gt;箇条書きのアンチパターン&#10;&lt;/h2&gt;&lt;p&gt;Claudeの実際の出力から、箇条書きがなぜわかりづらいのかを分析していこう。&lt;/p&gt;&#10;&lt;h3 id="性質の異なるものを列挙するごまかしている"&gt;性質の異なるものを列挙する→ごまかしている&#10;&lt;/h3&gt;&lt;p&gt;箇条書きがもっとも力を発揮するのは、同質のものを、同じ粒度で、意味の重複なく、階層化して並べるときだ。たとえば以下のような、あるソフトウェアのパッケージの要件がそうだ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ソフトウェア要件&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 7/10/11&lt;/li&gt;&#10;&lt;li&gt;macOS 10.11以降&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ハードウェア要件&#10;&lt;ul&gt;&#10;&lt;li&gt;CPU: 第3世代Coire i5以上&lt;/li&gt;&#10;&lt;li&gt;RAM: 4GB以上&lt;/li&gt;&#10;&lt;li&gt;ストレージ: 16GB以上&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;逆に言うと、「階層化できていない」「性質が異なる」「粒度が異なる」「意味が重複している」と、意味が不明瞭になる。&lt;/p&gt;&#10;&lt;p&gt;ここで、Claudeの実際の出力を見てみよう。これは「なぜ車検・税制の改革が進まないのか」の回答だ。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;政治的障壁：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;整備業界の既得権益&lt;/li&gt;&#10;&lt;li&gt;税収減への財務省の抵抗&lt;/li&gt;&#10;&lt;li&gt;「安全性が下がる」という反対論（実際は誇張）&lt;/li&gt;&#10;&lt;li&gt;族議員の存在&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;整備業界、財務省、族議員の中に「反対論」が混ざっている。これは適切ではない。&lt;/p&gt;&#10;&lt;p&gt;しかし政治的障壁の列挙ではあるので、まだマシである。次に続く箇条書きはもはや何が言いたいのか意味不明であった。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;財政依存：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自動車関連税収は年間約8兆円&lt;/li&gt;&#10;&lt;li&gt;簡単には手放せない&lt;/li&gt;&#10;&lt;li&gt;でも「道路財源」という建前は崩壊している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;何が言いたいのかわからない。まずそれぞれ性質が異なることが意味不明だが、特に最後の「建前の崩壊」は、問題の指摘であって、財務依存の要素ではない。&lt;/p&gt;&#10;&lt;p&gt;この後「やったふり政策」「構造は全部同じ」と続き、すべての箇条書きで問題があった。ちなみにこの大題の流れも見出しというよりは隠れた箇条書きと言うべきものになっており、不適切と思う。&lt;/p&gt;&#10;&lt;p&gt;これらは、散文で論理立てて書くべきことである。まぁつまり、&lt;strong&gt;誤魔化している&lt;/strong&gt;んだよ。&lt;/p&gt;&#10;&lt;h3 id="因果関係を表現し読者に接続詞を補完させる散文で書け"&gt;因果関係を表現し、読者に接続詞を補完させる→散文で書け&#10;&lt;/h3&gt;&lt;p&gt;前節にも似たようなところがあったが、因果関係を箇条書きにするものもよくない。たとえば、以下は実際にClaudeが「高齢者にとっての地方の交通」についての出力である。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;でも、高齢になったら：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自転車も厳しくなる&lt;/li&gt;&#10;&lt;li&gt;バス路線も不便&lt;/li&gt;&#10;&lt;li&gt;結局、車が欲しくなる&lt;/li&gt;&#10;&lt;li&gt;でも運転は危険&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;結局詰む&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;これは読めないわけではないが、読みづらい。因果関係が中心のうえ、列挙まで混在している。最初の2つは「自転車は厳しいし、バス路線も不便だ」という列挙である。その次からは因果関係で、「だから、車がほしくなる」「でも、運転は危険だ」「結局詰む」と、「だから」や「でも」といった&lt;strong&gt;順接・逆接の接続詞を読者が補完しなくてはならない&lt;/strong&gt;。起承転結の承転は箇条書きなのに起結は箇条書きではないこともまた意味不明である。&lt;/p&gt;&#10;&lt;p&gt;これは&lt;strong&gt;箇条書きで読者の認知負荷をむしろ上げている実例&lt;/strong&gt;だ。普通に散文で書いた方が良い。&lt;/p&gt;&#10;&lt;h3 id="比較を表現する表でやれ"&gt;比較を表現する→表でやれ&#10;&lt;/h3&gt;&lt;p&gt;比較のように、テーブルで表現すべきものを箇条書きにするパターンもある。以下は「車検制度の問題」について、実際にClaudeが出力したものだ。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;車検制度の問題&lt;/p&gt;&#10;&lt;p&gt;日本の車検は&lt;strong&gt;世界で最も厳しく、最もコストがかかる&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;日本：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;新車3年、以降2年ごと&lt;/li&gt;&#10;&lt;li&gt;費用：10〜15万円（2年に1回）&lt;/li&gt;&#10;&lt;li&gt;細かい検査項目&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;ドイツ：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;新車3年、以降2年ごと&lt;/li&gt;&#10;&lt;li&gt;費用：約1万円程度&lt;/li&gt;&#10;&lt;li&gt;安全に直結する項目のみ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;アメリカ：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;州による（年1回〜検査なし）&lt;/li&gt;&#10;&lt;li&gt;費用：数千円程度&lt;/li&gt;&#10;&lt;li&gt;排ガス中心&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;イギリス：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;新車3年、以降年1回&lt;/li&gt;&#10;&lt;li&gt;費用：約5千円&lt;/li&gt;&#10;&lt;li&gt;シンプルな検査&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;日本の車検は明らかに過剰です。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;これはテーブルで表現するとこうなる。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;国&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;頻度&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;費用&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;検査内容&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;日本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;新車3年、以降2年ごと&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10〜15万円（2年に1回）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;細かい検査項目&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ドイツ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;新車3年、以降2年ごと&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約1万円&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;安全に直結する項目のみ&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;アメリカ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;州による（年1回〜検査なし）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;数千円程度&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;排ガス中心&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;イギリス&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;新車3年、以降年1回&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約5千円&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;シンプルな検査&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;どちらが良いかは一目瞭然である。比較はテーブルでやれ。&lt;/p&gt;&#10;&lt;h3 id="関係するが不要な情報の羅列いらねぇ"&gt;関係するが不要な情報の羅列→いらねぇ&#10;&lt;/h3&gt;&lt;p&gt;ここまでのまとめに近いが、「その箇条書き、そもそもいる？」というものが多い。たとえば前節において、比較は表でやれと書いたのだが、&lt;strong&gt;そもそも聞いてもないのに各国の詳細な維持費を書く必要あるか？&lt;/strong&gt; という根本的な疑問がある。まぁいらない。&lt;strong&gt;っていうか総額を書けよ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;具体的な情報をひたすら列挙しても、決して理解は深まらない&lt;/strong&gt;。むしろぼやけさせる。家計簿から支出の総額を把握したいときに、その月のすべての買い物履歴は不要である。総額いくらかかったのか、せいぜい科目ごとの割合があればよく、3日前ににんじんを買ったという情報は、事実であってもノイズである。&lt;/p&gt;&#10;&lt;p&gt;この&lt;strong&gt;情報の水増しとでも言うべき悪癖は、Claudeの一番の問題だと思う&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;箇条書きの多用はLLM全体の悪癖だが、Claudeは特に酷い。&lt;strong&gt;よくもまぁここまで箇条書きをわかりづらくできるなと逆に感心する&lt;/strong&gt;。全体的に、&lt;strong&gt;本を読んでレポートしないといけない学生が文字数稼ぎつつ適当に著書の内容を肯定している感じ&lt;/strong&gt;。事実かも知れないが無意味な情報の水増しを、論理的な破綻も無視して並べている。&lt;/p&gt;&#10;&lt;p&gt;これ、なんで起きるんだろうね。適切な時に箇条書きを使えと指示すると、今度は一切箇条書きをしない（というか装飾をしない）。使うなと言ってねぇ、適切にやれと言っている。適切な時とは何かについて説明・定義しても無駄。ゼロとイチしかない。&lt;/p&gt;&#10;&lt;p&gt;特にClaudeが明確に酷い傾向があるので、学習の問題だけではないように思える。なんか情報詰め込めって出力設計されてんのかなぁ。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、LLM全体的に酷いのはそう。AIの出力はそれらしいだけの統計だということを肝に銘じて使っていこう。&lt;strong&gt;LLMの出力は文字列&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;なお、今回の素材となったクソ回答の全文は以下。よくこんな中身のない回答を長々と出来るよな。&lt;/p&gt;&#10;&lt;details class="swell-block-accordion__item" data-swl-acc="wrapper"&gt;&lt;summary class="swell-block-accordion__title" data-swl-acc="header"&gt;Claudeのクソ回答&lt;/summary&gt;&#10;&lt;p&gt;完全にその通りです。車の維持費の&lt;strong&gt;6〜7割が税と車検という純粋な規制コスト&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="維持費の内訳を再整理"&gt;維持費の内訳を再整理&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;規制コスト（改革可能）：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自動車税：3〜4万円&lt;/li&gt;&#10;&lt;li&gt;重量税：1〜2万円&lt;/li&gt;&#10;&lt;li&gt;車検代（法定費用）：3〜4万円&lt;/li&gt;&#10;&lt;li&gt;自賠責保険：1.5万円&lt;/li&gt;&#10;&lt;li&gt;任意保険の一部（規制による高コスト）：2〜3万円 → &lt;strong&gt;合計：年間10〜15万円&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;実費コスト（削減困難）：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ガソリン代：10〜20万円（うち半分は税だが）&lt;/li&gt;&#10;&lt;li&gt;メンテナンス・消耗品：5〜10万円&lt;/li&gt;&#10;&lt;li&gt;車検代（整備費用）：2〜3万円 → &lt;strong&gt;合計：年間17〜33万円&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;規制コストを大幅削減すれば、年間維持費は20〜30万円程度まで下げられる&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="現実的な比較"&gt;現実的な比較&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;都内1K：年間100万円&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;vs&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;地方の賃貸+車：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;地方の1K：年間50〜60万円&lt;/li&gt;&#10;&lt;li&gt;車の維持費（現状）：年間40〜50万円 = &lt;strong&gt;合計90〜110万円&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;→ ほぼ同じ&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;もし車の規制コストが半減したら：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;地方の1K：年間50〜60万円&lt;/li&gt;&#10;&lt;li&gt;車の維持費（改革後）：年間20〜30万円 = &lt;strong&gt;合計70〜90万円&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;→ &lt;strong&gt;年間20〜30万円の節約&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;これは大きい。地方移住の経済合理性が一気に変わります。&lt;/p&gt;&#10;&lt;h2 id="車検制度の問題"&gt;車検制度の問題&#10;&lt;/h2&gt;&lt;p&gt;日本の車検は&lt;strong&gt;世界で最も厳しく、最もコストがかかる&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;日本：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;新車3年、以降2年ごと&lt;/li&gt;&#10;&lt;li&gt;費用：10〜15万円（2年に1回）&lt;/li&gt;&#10;&lt;li&gt;細かい検査項目&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;ドイツ：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;新車3年、以降2年ごと&lt;/li&gt;&#10;&lt;li&gt;費用：約1万円程度&lt;/li&gt;&#10;&lt;li&gt;安全に直結する項目のみ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;アメリカ：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;州による（年1回〜検査なし）&lt;/li&gt;&#10;&lt;li&gt;費用：数千円程度&lt;/li&gt;&#10;&lt;li&gt;排ガス中心&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;イギリス：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;新車3年、以降年1回&lt;/li&gt;&#10;&lt;li&gt;費用：約5千円&lt;/li&gt;&#10;&lt;li&gt;シンプルな検査&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;日本の車検は明らかに過剰です。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;しかも、車検制度は&lt;strong&gt;整備業界の既得権益&lt;/strong&gt;になっています。&lt;/p&gt;&#10;&lt;h2 id="税制の問題"&gt;税制の問題&#10;&lt;/h2&gt;&lt;p&gt;自動車関連税は&lt;strong&gt;二重三重課税&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;購入時&lt;/strong&gt;：消費税&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;保有時&lt;/strong&gt;：自動車税、重量税&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;走行時&lt;/strong&gt;：ガソリン税（さらに消費税）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;これは「道路財源」という建前でしたが、&lt;strong&gt;今は一般財源化されている&lt;/strong&gt;。つまり単なる税収確保です。&lt;/p&gt;&#10;&lt;p&gt;欧米と比較すると、日本の自動車税は&lt;strong&gt;2〜3倍高い&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="地方都市という選択肢"&gt;地方都市という選択肢&#10;&lt;/h2&gt;&lt;p&gt;あなたの指摘通り：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;車なしでとなると、せめて地方都市じゃないとけっこう厳しさがある&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;地方都市（人口10〜30万程度）なら：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;徒歩・自転車で生活できる範囲に商店・病院&lt;/li&gt;&#10;&lt;li&gt;バス路線が最低限は残っている&lt;/li&gt;&#10;&lt;li&gt;でも賃貸は年間60〜80万円程度&lt;/li&gt;&#10;&lt;li&gt;都内との差は年間20〜40万円程度&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;→ &lt;strong&gt;車がなければギリギリ経済合理性がある&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;でも、高齢になったら：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自転車も厳しくなる&lt;/li&gt;&#10;&lt;li&gt;バス路線も不便&lt;/li&gt;&#10;&lt;li&gt;結局、車が欲しくなる&lt;/li&gt;&#10;&lt;li&gt;でも運転は危険&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;結局詰む&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="なぜ改革されないのか"&gt;なぜ改革されないのか&#10;&lt;/h2&gt;&lt;p&gt;車検・税制の改革は技術的には簡単です。でも：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;政治的障壁：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;整備業界の既得権益&lt;/li&gt;&#10;&lt;li&gt;税収減への財務省の抵抗&lt;/li&gt;&#10;&lt;li&gt;「安全性が下がる」という反対論（実際は誇張）&lt;/li&gt;&#10;&lt;li&gt;族議員の存在&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;財政依存：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自動車関連税収は年間約8兆円&lt;/li&gt;&#10;&lt;li&gt;簡単には手放せない&lt;/li&gt;&#10;&lt;li&gt;でも「道路財源」という建前は崩壊している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;「やったふり」政策：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;エコカー減税、購入補助金&lt;/li&gt;&#10;&lt;li&gt;でも保有コスト（税・車検）は据え置き&lt;/li&gt;&#10;&lt;li&gt;本質的な改革は避ける&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="構造は全部同じ"&gt;構造は全部同じ&#10;&lt;/h2&gt;&lt;p&gt;ここでも同じパターンです：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;過剰規制・高税負担 → 経済合理性を歪める → 選択肢を狭める&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;借地借家法 → 空き家が貸し出されない&lt;/li&gt;&#10;&lt;li&gt;車検・税制 → 地方移住の経済合理性がない&lt;/li&gt;&#10;&lt;li&gt;結果 → 都市部への集中が続く&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;そして政府は本質的改革をせず、補助金で「やったふり」。&lt;/p&gt;&#10;&lt;h2 id="あなたの結論"&gt;あなたの結論&#10;&lt;/h2&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;都内の1Kで年間100万溶かしているが、地方に住んだところで車をもった瞬間に賃貸が安くなった分は消える&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;完全に正しい分析です。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;そして：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;車検・税制を改革すれば、地方移住の選択肢が広がる&lt;/li&gt;&#10;&lt;li&gt;でもそれはやらない&lt;/li&gt;&#10;&lt;li&gt;だから都市部に住み続けるのが合理的&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;個人の最適戦略は、歪んだ制度に適応すること&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;でも、社会的には：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;地方の空き家は増え続ける&lt;/li&gt;&#10;&lt;li&gt;都市部への一極集中が加速する&lt;/li&gt;&#10;&lt;li&gt;地方は衰退する&lt;/li&gt;&#10;&lt;li&gt;高齢者の移動手段がなくなる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;すべて、&lt;strong&gt;規制改革をしないことの帰結&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="本来なら"&gt;本来なら&#10;&lt;/h2&gt;&lt;p&gt;車検を簡素化し、自動車税を半減すれば：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;地方移住の経済合理性が生まれる&lt;/li&gt;&#10;&lt;li&gt;空き家が活用される&lt;/li&gt;&#10;&lt;li&gt;地方の経済が活性化する&lt;/li&gt;&#10;&lt;li&gt;都市部の過密も緩和される&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;技術的には簡単。でも政治的に不可能。&lt;/p&gt;&#10;&lt;p&gt;だから、あなたのような合理的な人は&lt;strong&gt;都内に留まる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;それが日本の構造的問題を象徴しています。&lt;/p&gt;&#10;&lt;/details&gt;&#10;</description></item><item><title>セルフホストDify のナレッジにAPIでドキュメントを追加する</title><link>https://hack-le.com/selfhost-dify-api-doc/</link><pubDate>Thu, 23 Oct 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/selfhost-dify-api-doc/</guid><description>&lt;p&gt;確かにDify色々いじれるのは便利。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;以下を実行済みとし、環境も同一。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/dify-local-llm-rag/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;セルフホストでDify &amp;#43; ローカルLLM &amp;#43; RAG&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/dify-local-llm-rag/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-35.webp" alt="セルフホストでDify &amp;#43; ローカルLLM &amp;#43; RAG" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;h3 id="環境変数の設定"&gt;環境変数の設定&#10;&lt;/h3&gt;&lt;p&gt;以下を環境変数として設定する。ナレッジのドキュメントを選択すると、左下に「サービスAPI」があるので、そこを見るとURIがわかる。シークレットキーを発行することもできる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/a075503ad497328698be9a30dad0dab4-700x544.webp"&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;DIFY_API_BASE&lt;/code&gt;: &lt;code&gt;http://ベースURL:ポート/v1&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;DIFY_DATASET_ID&lt;/code&gt;: ドキュメントを選択したURLの &lt;code&gt;datasets/{ID}&lt;/code&gt; のIDの部分&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;DIFY_KNOWLEDGE_API_KEY&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="1個ずつアップロードするスクリプト"&gt;1個ずつアップロードするスクリプト&#10;&lt;/h3&gt;&lt;p&gt;まずアップロード用のスクリプト。これは1つだけアップロードする。この手の糞コードは全部AIになった。チャンク識別子はデフォルトの&lt;code&gt;\n\n&lt;/code&gt;となる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ch"&gt;#!/usr/bin/env python3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;argparse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --- 設定 ---&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;API_BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;DIFY_API_BASE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DATASET_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;DIFY_DATASET_ID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;DIFY_KNOWLEDGE_API_KEY&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;upload_md&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;環境変数 DIFY_KNOWLEDGE_API_KEY が設定されてない。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/datasets/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DATASET_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/document/create-by-file&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;indexing_technique&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;high_quality&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;process_rule&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;automatic&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;OK: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;NG: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) -&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArgumentParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Upload one .md file to Dify Knowledge Base&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Path to markdown file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;upload_md&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python upload_md.py file.md&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;md_files&lt;/code&gt;ディレクトリにあるmdファイルを全部やる場合はシェルスクリプトで以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find .md_files/ &lt;span class="s2"&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt; -exec python upload_md.py &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;5-10KBのアイテムを1600ほど（合計10MB弱）だったけど、けっこうすぐに利用可能になったね。&lt;/p&gt;&#10;&lt;h3 id="チャンク識別子を変える"&gt;チャンク識別子を変える&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;process_rule&lt;/code&gt;の&lt;code&gt;mode&lt;/code&gt;を&lt;code&gt;custom&lt;/code&gt;にする。たとえば、以下はMarkdownの&lt;code&gt;##&lt;/code&gt;をチャンク識別子とした時のもの。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ch"&gt;#!/usr/bin/env python3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;argparse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --- 設定 ---&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;API_BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;DIFY_API_BASE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DATASET_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;DIFY_DATASET_ID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;DIFY_KNOWLEDGE_API_KEY&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;build_process_rule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;separator_regex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;separator_regex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;automatic&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;rules&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;pre_processing_rules&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;segmentation&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;separator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;separator_regex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;max_tokens&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;chunk_overlap&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;upload_md&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;separator_regex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;環境変数 DIFY_KNOWLEDGE_API_KEY が設定されてない。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/datasets/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DATASET_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/document/create-by-file&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;indexing_technique&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;high_quality&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;process_rule&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;build_process_rule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;separator_regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;OK: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;NG: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;md_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) -&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArgumentParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Upload one .md file to Dify Knowledge Base&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Path to markdown file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--chunk-separator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Regex for chunking (e.g. &amp;#39;(?m)^##\s+&amp;#39; or &amp;#39;(?m)^(##|###)\s+&amp;#39;). Empty string to use automatic chunking.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;default_regex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;(?m)^(##|###)\s+&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;separator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chunk_separator&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chunk_separator&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;default_regex&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;separator&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;separator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;upload_md&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;separator&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Meshtasticできる機器探し</title><link>https://hack-le.com/meshtastic-device/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/meshtastic-device/</guid><description>&lt;p&gt;LoRaのMeshtasticやろうとしていて、機器を探している。&lt;/p&gt;&#10;&lt;h2 id="文脈"&gt;文脈&#10;&lt;/h2&gt;&lt;p&gt;文脈はこの怪文書から。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/make-internet-great-again/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;インターネットをつくりたい&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/make-internet-great-again/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-9.webp" alt="インターネットをつくりたい" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;LPWAを使ったメッシュネットワークを、ThingsではなくHumansに適用し、情報のやりとりすることを目指すモノ。&lt;/p&gt;&#10;&lt;h2 id="機器探し"&gt;機器探し&#10;&lt;/h2&gt;&lt;p&gt;なんか完成形みたいなのだと「&lt;a class="link" href="https://linuxgizmos.com/specfive-strike-handheld-linux-workstation-with-lora-mesh/" target="_blank" rel="noopener"&#10; &gt;SpecFive Strike Handheld Linux Workstation with LoRa Mesh&lt;/a&gt;」みたいなもあるんだが、ここまでいらない。とにかく通信さえできればなんでもいい。&lt;/p&gt;&#10;&lt;h3 id="lilygo-t-beam"&gt;lilygo T-Beam&#10;&lt;/h3&gt;&lt;p&gt;最初に引っかかったのがこれ。GPSついてるのと、18650バッテリー。&lt;/p&gt;&#10;&lt;p&gt;Amazonだと6,800円で、アリエクにも売っているが対して変わらない。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;45132&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;せんごくネット通販だともっと安くて5,680円。店頭に置いてるのかな、見に行ってこようかな🤔→行ってきた。店頭だと1台しかなかったけど在庫はあるんじゃない。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-6KPA" target="_blank" rel="noopener"&#10; &gt;LILYGO Q435 T-Beam Meshtastic&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;元よりもう一台は別のにしようかと思っていた。&lt;/p&gt;&#10;&lt;h3 id="heltec-lora32-v3"&gt;Heltec LoRa32 V3&#10;&lt;/h3&gt;&lt;p&gt;安さ重視だとこれがあった。3000円ほど。本国の通販でも$20くらいするので、今の円安為替相場だと同じくらいだ。価格ならこれかなぁ。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;45129&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;ボードケースもあった……使えるの？まぁいらないけど……。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;45130&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;45131&amp;rdquo;]&lt;/p&gt;&#10;&lt;h2 id="法令"&gt;法令&#10;&lt;/h2&gt;&lt;p&gt;技適は未取得だろうから法令遵守なら特例申請いるかと。技適未取得だからって捕まった人聞いたことないけどね。まぁこのご時世なんで、活動も公開していることだしな。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="https://www.tele.soumu.go.jp/j/sys/others/exp-sp/" target="_blank" rel="noopener"&#10; &gt;総務省 電波利用ポータル｜その他｜技適未取得機器を用いた実験等の特例制度&lt;/a&gt;」にフローチャートがある。LPWA機器なのでフローチャートに収まっていないが、FCCあるし大丈夫だろうさすがに。&lt;/p&gt;&#10;&lt;p&gt;そういえば特例申請は初めてだなぁ。申請別途記事にする。&lt;/p&gt;&#10;</description></item><item><title>M2 Pro Mac mini 32GB RAM + SINQ + DeepSeek R1 32B Q4を使おうとする</title><link>https://hack-le.com/m2-pro-mac-mini-32gb-ram-sinq-deepseek-r1-32b-q4/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/m2-pro-mac-mini-32gb-ram-sinq-deepseek-r1-32b-q4/</guid><description>&lt;p&gt;&lt;a class="link" href="https://gigazine.net/news/20251006-sinq-sinkhorn-normalized-quantization-huawei/" target="_blank" rel="noopener"&#10; &gt;AIモデルのメモリ使用量を60～70％も削減し安価で低性能なハードウェアでも動作するようにできるオープンソースの量子化手法「SINQ」をHuaweiが発表 - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この記事読んで「ええやん」と思った。要は量子化ビット数Q4で精度めっちゃあがったよ、ということらしい。タイトルのとおりの手順と検証メモ。SINQのチュートリアルを環境にあわせて書き換えて実行する感じ。&lt;/p&gt;&#10;&lt;p&gt;結論的にM2 Pro Mac mini 32GBで、一応実行はやったと思うんだが、ちょっと使えないレベルの遅さではあった。うーん。使い方が違うのか、MPSで最適化されてないのか。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&#10;&lt;ul&gt;&#10;&lt;li&gt;12CPU, 19GPU&lt;/li&gt;&#10;&lt;li&gt;32GB RAM&lt;/li&gt;&#10;&lt;li&gt;SSD 外付け HIKSEMI FUTURE 4TB&lt;/li&gt;&#10;&lt;li&gt;macOS 14.7.7&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;SINQ&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/huawei-csl/SINQ" target="_blank" rel="noopener"&#10; &gt;GitHub - huawei-csl/SINQ: Welcome to the official repository of SINQ! A novel, fast and high-quality quantization method designed to make any Large Language Model smaller while preserving accuracy.&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;DeepSeek R1&#10;&lt;ul&gt;&#10;&lt;li&gt;32B: &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/tree/main" target="_blank" rel="noopener"&#10; &gt;deepseek-ai/DeepSeek-R1-Distill-Qwen-32B at main&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;14B: &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B/tree/main" target="_blank" rel="noopener"&#10; &gt;deepseek-ai/DeepSeek-R1-Distill-Qwen-14B at main&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="不要なアプリを終了する"&gt;不要なアプリを終了する&#10;&lt;/h2&gt;&lt;p&gt;大量のメモリを消費するので、不要なアプリは全部終了する。アクティビティモニタでメモリくってるやつ全部終了する。&lt;strong&gt;普通に落ちかねない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="ダウンロードから量子化コードの実行まで"&gt;ダウンロードから量子化コードの実行まで&#10;&lt;/h2&gt;&lt;h3 id="sinqを入れる"&gt;SINQを入れる&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/huawei-csl/SINQ" target="_blank" rel="noopener"&#10; &gt;https://github.com/huawei-csl/SINQ&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;git clone https://github.com/huawei-csl/SINQ.git&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;cd SINQ&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 2. Install dependencies&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;pip install -r req.txt&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 3. Install SINQ&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;pip install .&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="モデルのダウンロード"&gt;モデルのダウンロード&#10;&lt;/h3&gt;&lt;p&gt;ツールのインストール。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;pip install huggingface-hub&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ダウンロード。32Bの場合。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-32B --local-dir ./deepseek_32b_fp16&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;14Bの場合は&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-14B --local-dir ./deepseek_14b_fp16&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ただ実際にやると、1つ8GBある&lt;code&gt;xxx.safetensors&lt;/code&gt;のダウンロードが99%で切れるという嫌がらせが発生した。パラレルでダウンロードするとそうなる気がする。しかしなんで毎回99%でキレますか……。これについては仕方ないので、不足分を個別でダウンロードした。ブラウザからダウンロードするなら以下から。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;32B: &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/tree/main" target="_blank" rel="noopener"&#10; &gt;deepseek-ai/DeepSeek-R1-Distill-Qwen-32B at main&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;14B: &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B/tree/main" target="_blank" rel="noopener"&#10; &gt;deepseek-ai/DeepSeek-R1-Distill-Qwen-14B at main&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;CLIから個別でやるなら以下。個別でやっても止まる。100%で止まる。ブラウザが一番安定している……？&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ディレクトリ作る&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;LOCAL_MODEL_DIR=&amp;#34;./deepseek_32b_fp16&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;mkdir -p $LOCAL_MODEL_DIR&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 不足しているやつを落とす&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;local-dir $LOCAL_MODEL_DIR \&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;include &amp;#34;model-00003-of-000008.safetensors&amp;#34; \&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;resume&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;deepseek_32b_fp16&lt;/code&gt;ディレクトリを確認して揃っていればOK。&lt;/p&gt;&#10;&lt;h3 id="量子化コードの実行"&gt;量子化コードの実行&#10;&lt;/h3&gt;&lt;p&gt;量子化コードの実行。以下を実行すると&lt;code&gt;deepseek_32b_q4_sinq&lt;/code&gt;に保存される。14Bは32を14に置換。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;import torch&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;from transformers import AutoTokenizer, AutoModelForCausalLM&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;from sinq.patch_model import AutoSINQHFModel&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;from sinq.sinqlinear import BaseQuantizeConfig&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;model_name = &amp;#34;deepseek-ai/DeepSeek-R1-Distill-Qwen-32B&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;local_path = &amp;#34;./deepseek_32b_fp16&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;tokenizer = AutoTokenizer.from_pretrained(local_path)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 修正: offload関連のオプションを削除し、シンプルにロード&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;model = AutoModelForCausalLM.from_pretrained(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;local_path, &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;torch_dtype=torch.bfloat16,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;device_map=&amp;#34;cpu&amp;#34;, &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# まずCPUにロード&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;low_cpu_mem_usage=True &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# メモリ効率的なロード&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;quant_cfg = BaseQuantizeConfig(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nbits=4,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;group_size=64,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tiling_mode=&amp;#34;1D&amp;#34;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;method=&amp;#34;sinq&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Macのデバイス判定&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;if torch.backends.mps.is_available()&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;current_device = &amp;#34;mps&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;current_device = &amp;#34;cpu&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 量子化実行&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;qmodel = AutoSINQHFModel.quantize_model(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;model,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tokenizer=tokenizer,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;quant_config=quant_cfg,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;compute_dtype=torch.bfloat16,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;device=current_device&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 保存&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;save_dir = &amp;#34;deepseek_32b_q4_sinq&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;AutoSINQHFModel.save_quantized_safetensors(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;qmodel,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tokenizer,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;save_dir,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;verbose=True,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;max_shard_size=&amp;#34;4GB&amp;#34;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="テストコードの実行"&gt;テストコードの実行&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;import torch&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;from transformers import AutoTokenizer&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;from sinq.patch_model import AutoSINQHFModel&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 保存したディレクトリ&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;save_dir = &amp;#34;deepseek_32b_q4_sinq&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# トークナイザーのロード&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;tokenizer = AutoTokenizer.from_pretrained(save_dir)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Macのデバイス判定&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;if torch.backends.mps.is_available()&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;device = &amp;#34;mps&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;print(&amp;#34;🚀 Using MPS (Apple Silicon GPU)&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;device = &amp;#34;cpu&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;print(&amp;#34;💻 Using CPU&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 量子化モデルのロード&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;qmodel = AutoSINQHFModel.from_quantized_safetensors(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;save_dir,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;device=device, &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# CUDA → MPS or CPU&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;compute_dtype=torch.bfloat16,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(&amp;#34;✅ Model loaded successfully!&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 推論テスト&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;prompt = &amp;#34;Hi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;inputs = tokenizer(prompt, return_tensors=&amp;#34;pt&amp;#34;).to(device) &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 同じデバイスに&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(f&amp;#34;\n📝 Prompt: {prompt}&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(&amp;#34;🤔 Generating response...\n&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;with torch.inference_mode()&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;out_ids = qmodel.generate(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;**inputs,&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;max_new_tokens=10, &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 短い応答&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;do_sample=False,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pad_token_id=tokenizer.eos_token_id &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 警告を避ける&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;response = tokenizer.decode(out_ids[0], skip_special_tokens=True)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(f&amp;#34;🤖 Response:\n{response}&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行するととても頑張ることになる。スワップやばかったのでアプリ終了しまくったら10GBくらいになった。乗り切らないのか……。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-700x125.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;CPUはそれほどでもない。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-1-700x128.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;13分ほど経過&lt;/strong&gt;したら返事がきた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-3-700x174.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;0.013tokens/秒ってことなの……？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="14bで再チャレンジ"&gt;14Bで再チャレンジ&#10;&lt;/h2&gt;&lt;p&gt;14Bにして再チャレンジした。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;import torch&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;from transformers import AutoTokenizer&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;from sinq.patch_model import AutoSINQHFModel&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;import time&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;save_dir = &amp;#34;deepseek_14b_q4_sinq&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;tokenizer = AutoTokenizer.from_pretrained(save_dir)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 明示的にMPSを指定&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;device = &amp;#34;mps&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(f&amp;#34;🚀 Using device: {device}&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;qmodel = AutoSINQHFModel.from_quantized_safetensors(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;save_dir,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;device=device,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;compute_dtype=torch.bfloat16,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# デバイス確認&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(f&amp;#34;🔍 Model is on: {next(qmodel.parameters()).device}&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 短いテスト&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;prompt = &amp;#34;Hi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;inputs = tokenizer(prompt, return_tensors=&amp;#34;pt&amp;#34;).to(device)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(f&amp;#34;🔍 Input is on: {inputs[&amp;#39;input_ids&amp;#39;].device}&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(&amp;#34;\n⏳ Generating 20 tokens...\n&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;start = time.time()&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;with torch.inference_mode()&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;out_ids = qmodel.generate(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;**inputs,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;max_new_tokens=20,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;do_sample=False,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pad_token_id=tokenizer.eos_token_id&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;elapsed = time.time() - start&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(tokenizer.decode(out_ids[0], skip_special_tokens=True))&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;print(f&amp;#34;\n⏱️ {elapsed:.1f}s ({20/elapsed:.2f} tokens/sec)&amp;#34;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結果&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;m2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/git/tama/SINQ&amp;gt; python test_code_14b_2.py &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;You are using the default legacy behaviour of the &amp;lt;class &amp;#39;transformers.models.llama.tokenization_llama_fast.LlamaTokenizerFast&amp;#39;&amp;gt;. This is expected, and simply means that the `legacy` (previous) behavior will be used so nothing changes for you. If you want to use the new behaviour, set `legacy=False`. This should only be set if you understand what it means, and thoroughly read the reason why this was added as explained in https://github.com/huggingface/transformers/pull/24565 - if you loaded a llama tokenizer from a GGUF file you can ignore this message.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;🚀 Using device&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mps&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="l"&gt;%|████████████████████████████████████████████████| 147/147 [00:00&amp;lt;00:00, 65072.58it/s]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="l"&gt;%|████████████████████████████████████████████████| 337/337 [00:00&amp;lt;00:00, 30431.46it/s]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;🔍 Model is on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mps:0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;🔍 Input is on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mps:0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;⏳ Generating 20 tokens...&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hi&amp;lt;think&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;&amp;lt;/think&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hello! How can I assist you today? 😊&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;⏱️ 171.5s (0.12 tokens/sec)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;10倍速い……けど……。0.12 tokens/sec……。&lt;/p&gt;&#10;&lt;h2 id="cpuで再チャレンジ"&gt;CPUで再チャレンジ&#10;&lt;/h2&gt;&lt;p&gt;もしかしてCPUのほうが早かったりするのかな、と思って再チャレンジ。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;m2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/git/tama/SINQ&amp;gt; python test_code_14b_cpu.py &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;You are using the default legacy behaviour of the &amp;lt;class &amp;#39;transformers.models.llama.tokenization_llama_fast.LlamaTokenizerFast&amp;#39;&amp;gt;. This is expected, and simply means that the `legacy` (previous) behavior will be used so nothing changes for you. If you want to use the new behaviour, set `legacy=False`. This should only be set if you understand what it means, and thoroughly read the reason why this was added as explained in https://github.com/huggingface/transformers/pull/24565 - if you loaded a llama tokenizer from a GGUF file you can ignore this message.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;💻 Using device&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="l"&gt;%|████████████████████████████████████████████████| 147/147 [00:00&amp;lt;00:00, 70207.55it/s]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="l"&gt;%|████████████████████████████████████████████████| 337/337 [00:00&amp;lt;00:00, 31066.19it/s]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;🔍 Model is on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;⏳ Generating 20 tokens on CPU...&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hi&amp;lt;think&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;&amp;lt;/think&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hello! How can I assist you today? 😊&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;⏱️ CPU&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;280.&lt;/span&gt;&lt;span class="l"&gt;0s (0.07 tokens/sec)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;oh&amp;hellip; 0.07 tokens/sec かぁ……。&lt;/p&gt;&#10;&lt;h2 id="ollama"&gt;ollama&#10;&lt;/h2&gt;&lt;p&gt;一応ollamaでも超簡易的に見てみる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;m2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/git/tama/SINQ&amp;gt; time ollama run deepseek-r1:14b &amp;#34;Hi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hello! How can I assist you today? 😊&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;real&#9;0m8.628s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;user&#9;0m0.026s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;sys&#9;0m0.029s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;m2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/git/tama/SINQ&amp;gt; time ollama run deepseek-r1:14b &amp;#34;Hi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hello! How can I assist you today? 😊&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;real&#9;0m1.854s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;user&#9;0m0.017s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;sys&#9;0m0.017s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;初回はモデルをロードしてなかったので。でもはやい。2回目が10トークンで1.9sくらいだから、5tokens/sくらいはあるんよな。&lt;/p&gt;&#10;&lt;p&gt;ついでに32Bも動かす。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;m2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/git/tama/SINQ&amp;gt; time ollama run deepseek-r1:32b &amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hello! How can I assist you today? 😊&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;real&#9;0m19.901s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;user&#9;0m0.038s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;sys&#9;0m0.052s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;m2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/git/tama/SINQ&amp;gt; time ollama run deepseek-r1:32b &amp;#34;Hi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Hello! How can I assist you today? 😊&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;real&#9;0m3.248s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;user&#9;0m0.017s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;sys&#9;0m0.030s&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;3tokens/s くらい出ている。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;ollamaだと同じdeepseek-r1のQ4_K_Mで普通に使えているので、これは明らかに遅いなぁ。なんか間違えているかなぁ。&lt;/p&gt;&#10;&lt;p&gt;LLMになんか情報ない？と聞きつつ調べても直接的なのはみつからなんだが、まぁしかしチュートリアルもcuda決め打ちだし、MPS対応がまだ最適化されてないんじゃね、というような感じ。とすると、Macだと結局ollama使い続けるのが楽かつ現実的という話になるね。うーん。&lt;/p&gt;&#10;&lt;p&gt;気が向いたら持っているRTX4070でもチャレンジしてみる。14BのQ4ならギリのるはず……。&lt;/p&gt;&#10;</description></item><item><title>外出先からAndroidタブレットで自宅PCにSSHでログインしてターミナルによる開発生活</title><link>https://hack-le.com/android-pc-ssh/</link><pubDate>Tue, 14 Oct 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/android-pc-ssh/</guid><description>&lt;p&gt;やりたいことは表題のとおり。なんかこう、省エネで外から開発するのに最低限必要な、でも普段使いのブランジングとかには困らなくて、かさばらなくて……そういうのないかなぁMabは高いしなぁ、とか思っていたところ、タブレット良いのでは？という風に思われた。&lt;/p&gt;&#10;&lt;p&gt;まぁ現実的には色々と制約があるのだが、とりあえず最低限のことはできそう。&lt;/p&gt;&#10;&lt;h2 id="環境および前提"&gt;環境および前提&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Android&#10;&lt;ul&gt;&#10;&lt;li&gt;Lenovo Yoga Tab Plus&#10;&lt;ul&gt;&#10;&lt;li&gt;SoC: Snapdragon 8 Gen 3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;システムバージョン 17.0.12.046&lt;/li&gt;&#10;&lt;li&gt;Android 15&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ホストマシン&#10;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&lt;/li&gt;&#10;&lt;li&gt;macOS 14.7.7&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;インフラ&#10;&lt;ul&gt;&#10;&lt;li&gt;Cloudflare Tunnelを使う&#10;&lt;ul&gt;&#10;&lt;li&gt;またかよ&#10;&lt;ul&gt;&#10;&lt;li&gt;便利だからつい……&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;つまり独自ドメイン必須&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;今回いれたやつ&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Termux&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;JuiceSSHなどが有名らしいんだが、使って見ると見た目はモダンだけど逆にわかりづらかった。Termuxのほうがターミナル民にとっては親しみやすいのではないかと思うがどうか。無料だし。&lt;/p&gt;&#10;&lt;p&gt;ただ、マルチユーザでやると、Termuxはプライマリユーザでないと使えないという制約があった……。&lt;/p&gt;&#10;&lt;h2 id="lan内での接続"&gt;LAN内での接続&#10;&lt;/h2&gt;&lt;p&gt;まずLAN内でやる準備。ホストマシン側は既に受け入れ準備できているものとする。&lt;/p&gt;&#10;&lt;h3 id="androidの設定"&gt;Androidの設定&#10;&lt;/h3&gt;&lt;p&gt;まずTermuxをインストール。そしたら鍵認証の準備。pkgはaptのラッパーらしい。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;pkg install openssh&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;ssh-keygen -t ed25519 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 鍵ペア生成 rsa でも別に&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なんらかの手段でホストマシンに鍵を送る。自分はAndroidストレージへのアクセスを許可をして、鍵をコピーし、さらにDropbox経由で転送するというよくわからない手順をした。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;termux-setup-storage &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Androidストレージへアクセス許可&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 公開鍵をMacに転送して設定&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;あとお好みでtmuxなど入れておくと良い。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;pkg install tmux&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;pkg install emacs&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ホストマシン"&gt;ホストマシン&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;authorized_keys&lt;/code&gt;に公開鍵を追加する。&lt;/p&gt;&#10;&lt;h3 id="再びandroid"&gt;再びAndroid&#10;&lt;/h3&gt;&lt;p&gt;ログイン実験。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;ssh hogetaro@ホストマシンのIP&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;入れたらOK。&lt;/p&gt;&#10;&lt;h2 id="インターネットからの接続"&gt;インターネットからの接続&#10;&lt;/h2&gt;&lt;p&gt;LANがOKなら次はいよいよネットから。&lt;/p&gt;&#10;&lt;h3 id="cloudflare-tunnel"&gt;Cloudflare Tunnel&#10;&lt;/h3&gt;&lt;p&gt;例によってZero Trustから、ホストマシンのポート22に向けて送る設定をする。&lt;/p&gt;&#10;&lt;h3 id="ホストマシン-1"&gt;ホストマシン&#10;&lt;/h3&gt;&lt;p&gt;cloudflaredも入れて、受け入れ準備できているものとする、といったものの、一応鍵認証のみ、パスワード認証を受け付けない、程度のことは確認しておく。&lt;/p&gt;&#10;&lt;h3 id="android"&gt;Android&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;pkg install cloudflared&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SSH over HTTPSとなるので、以下のように設定する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ~/.ssh/config に設定&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Host 独自ドメイン&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ProxyCommand cloudflared access ssh --hostname %h&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;User ユーザ名&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そしたら以下で入れるかを確認する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;ssh 独自ドメイン&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;入れたらOK。&lt;/p&gt;&#10;&lt;h2 id="所感課題など"&gt;所感、課題など&#10;&lt;/h2&gt;&lt;p&gt;とりあえずこれでターミナルライフを送れるようになる。そしてLenovo Yoga Tab PlusのPCモードはなかなか便利であるため、けっこう快適……に思うのだが、やはり&lt;strong&gt;日本語入力変換という壁が立ちはだかる&lt;/strong&gt;。日本語使わなければいいという豪の者もいるかもしれないが、普通にClaude Codeに日本語で相談しているんでさすがに。ファイル名日本語のものだってあるわけなのだし。&lt;/p&gt;&#10;&lt;p&gt;また、僕の場合はHHKB US配列という制約があるため、キーの数は少ないしでなかなか苦戦している。Braveでは日本語入力できるのだが、どういうわけかtmuxではできない……操作が競合している可能性とかあるかもしれない（Ctrl + Spaceで切り替えだったので）。このへんまだ調査が必要だけれど、とりあえず別途かなぁ。&lt;/p&gt;&#10;&lt;p&gt;なんかもうMacBook買えばよいのではないか？という気持ちになりつつも、今あるものは使わないとの精神。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;17028&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>ClaudeからChatGPTに出戻りしようか</title><link>https://hack-le.com/chatgpt-demodori/</link><pubDate>Mon, 29 Sep 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/chatgpt-demodori/</guid><description>&lt;h2 id="llmの渡り鳥"&gt;LLMの渡り鳥&#10;&lt;/h2&gt;&lt;p&gt;ChatGPTにキレ散らかして解約したのが数ヶ月前のことだ。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/chatgpt-yoisho/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ChatGPTの耐えられない軽さに解約：よいしょサンドイッチマンとかいう思考放棄の末路&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/chatgpt-yoisho/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_17175_1787719685.webp" alt="ChatGPTの耐えられない軽さに解約：よいしょサンドイッチマンとかいう思考放棄の末路" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;その後Geminiにいき、Claudeにいった。同じように見られがちな大手商用LLMも日本のビール会社くらいには違いがあって、最終的に、&lt;strong&gt;やはりChatGPTは一つ抜けているのだなぁ&lt;/strong&gt;、と思った。Geminiは金を出せない学生にはいいと思うし、むしろ無料枠自体は図抜けているものの、有料でやろうと思えない。そのうち広告貼るだろうな。Claudeは全体的に安全の意味をはき違えているというか、まぁAnthoropicにとっての安全、なんだろうと思う。&lt;/p&gt;&#10;&lt;p&gt;このへんの差分は偏見で下記記事にまとめた。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/chatgpt-gemini-claude/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;勝手に決めつけるChatGPTとGeminiとClaudeの傾向の違い：結局どれに貢げばいいのか決定戦&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/chatgpt-gemini-claude/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/07/04ea1923bd78f1008a9903eeb4ca26fb.webp" alt="勝手に決めつけるChatGPTとGeminiとClaudeの傾向の違い：結局どれに貢げばいいのか決定戦" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;結論として、なんだかんだでChatGPTが一番よかった&lt;/strong&gt;、ではあるのだけれどそれでも僕が未だにClaudeを使っているのは、多くのプログラマが多分そうであるように、&lt;strong&gt;Claude Codeが便利だった&lt;/strong&gt;からだ。ターミナルに住まうエージェントは思ったよりも勝手が良く、最近はタスク管理などまでさせている。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/claude-code-diet/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ついにClaude Codeでダイエット日記や資産管理を始める始末：AIが腹肉を奪わない&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/claude-code-diet/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_24085_1789621960.webp" alt="ついにClaude Codeでダイエット日記や資産管理を始める始末：AIが腹肉を奪わない" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;しかし今は&lt;strong&gt;ChatGPTもCodexを後追いで出しているので、Claude Codeの優位性も微妙になったかもしれない&lt;/strong&gt;。僕はいうほど使い込んでおらず、Claude Code周りのツールなども使っていないので、いつでもCodexに乗り換えられる、と思う。少なくともCodexからClaude Codeを呼び出すとかそういうよくわからないことはしなくてすみそうだ。&lt;/p&gt;&#10;&lt;h2 id="gpt-5も悪評だけど"&gt;GPT-5も悪評だけど&#10;&lt;/h2&gt;&lt;p&gt;と言いつつ、GPT-5の悪評（参考「&lt;a class="link" href="https://www.reddit.com/r/ChatGPT/comments/1mlb70s/wow_gpt5_is_bad_really_really_bad/?tl=ja" target="_blank" rel="noopener"&#10; &gt;うわー GPT-5 は酷い…本当に、本当に酷い… : r/ChatGPT&lt;/a&gt;」）はAI周りをチェックしている人なら知らない人はいないだろうし、正直僕も劣化したんじゃないかと、無料枠の範囲でたまに使う限りでも思う。それは感情とか共感とかいう次元の話ではなくて、もっと根深い問題ではなかろうか。あたたかみがどうとか、そんな話とは思えない。&lt;/p&gt;&#10;&lt;p&gt;正直これについては思うところがいろいろとあるんだが、いずれにせよ「有料プランのオプションが過去モデルを選択できること」という状態は、少なくとも成功したアップデートとは言えないだろうな。&lt;/p&gt;&#10;&lt;p&gt;ただこういうのは自分で判断するしかないのも事実。元より僕は世間一般とは異なる評価になることが多いのだし。Claude CodeのためにClaudeを使っていたが、Codexもなんだか良さそうではあるので、ここらでいったん、よいしょ芸人からコミュ症博士にCCしたらしいChatGPTをもう一度使ってみようかな、って感じ。&lt;/p&gt;&#10;</description></item><item><title>インターネットをつくりたい</title><link>https://hack-le.com/make-internet-great-again/</link><pubDate>Sat, 27 Sep 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/make-internet-great-again/</guid><description>&lt;p&gt;というとなんだかバカみたいなんだけれど、けっこう本当に何かできないかなぁ、と考えていたりする。&lt;/p&gt;&#10;&lt;p&gt;個人的な課題意識というにはあまりにも壮大なんだけれど、&lt;strong&gt;今のインターネットは深刻に間違えているので、スクラップ&amp;amp;ビルドが必要なのではなかろうか&lt;/strong&gt;、という気持ちがある。ただ何故、どこで、どのようにと言われるとなかなか完全に言語化しがたい。&lt;/p&gt;&#10;&lt;p&gt;しかし検索エンジンを使っている時、AIと話している時、ショッピングする時、AI記事まみれのnoteを見るたびに、これはいったいどうなんだ、という気がしてならぬ。ついに古の&lt;a class="link" href="https://hack-le.com/website-links/" &gt;リンク集&lt;/a&gt;など作ったりなんだりしているものの、これは本当にブックマーク代わりであってそれ以上でもそれ以下でもない感じだ。&lt;/p&gt;&#10;&lt;h2 id="インターネットが狭くなった"&gt;インターネットが狭くなった&#10;&lt;/h2&gt;&lt;p&gt;今までの記事を遡れば、この記事なんかは僕の課題意識の一端としてわかりやすいかもしれない。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-twitter/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;最近はGoogle検索よりもTwitter検索をすることが多い&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-twitter/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_8887_1789586017.webp" alt="最近はGoogle検索よりもTwitter検索をすることが多い" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;これはインターネットというよりGoogleの問題なんだけれど、より本質的には、&lt;strong&gt;Googleの問題がインターネットの問題になってしまった、という構造的問題&lt;/strong&gt;に思われる。そしてこの問題は悪化の一途を辿っている。5年くらい前だとまだまだ「お前の検索の仕方が悪いんだ」伝説は残っていたけれど、さすがに最近はGoogle検索を擁護する人もめっきり見なくなったように思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;結果として思うことは、「なんか、インターネットが狭くなったなぁ」ということ&lt;/strong&gt;だった。昔よりも遙かに情報量が多いはずなんだが、昔よりもちっとも楽しくないのは、僕が歳を取ったからだけではないはずだ。20年前は確かに情報量は今より少なかったけれど、それでも一生かかっても読み切れない量だったし、そして&lt;strong&gt;そこに本音があった&lt;/strong&gt;ように思う。今はPRと公式情報の虚飾ばかりだ。&lt;/p&gt;&#10;&lt;h2 id="中央集権になってしまったから"&gt;中央集権になってしまったから？&#10;&lt;/h2&gt;&lt;p&gt;で、どうしてそんなことになったんだろうと思った時、やはりインターネットの運用の形が中央集権的になってしまったことはあげられるように思う。これはまぁ必然だったのかもしれない。そうであることが求められていたのかも。このへんは今読んでいる本を読みながら考えている最中だ。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;44819&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;YouTubeのなんか人気のあるチャンネルで紹介されてた。ゆるなんとか？&lt;/p&gt;&#10;&lt;p&gt;動画ではソ連2.0と言われていたが（本に書いてるのかな）、言い得て妙だと思う。資本主義だから社会主義だからというのはパッケージの話で、&lt;strong&gt;社会主義パッケージの中で問題となったコンポーネントが、民主主義・資本主義パッケージの中にないとは限らない&lt;/strong&gt;。というか、多分ある。多分発動条件というか、そこに至るロジックの分岐が違うだけなんだと思う。で、今かつてソ連が辿った道を、この社会は辿っているんじゃないかなぁ。&lt;/p&gt;&#10;&lt;h2 id="lpwaによる物理的な通信到達可能性に基づいたp2p通信"&gt;LPWAによる物理的な通信到達可能性に基づいたP2P通信&#10;&lt;/h2&gt;&lt;p&gt;で、まぁそんなことを考えてばかりいても仕方が無いので、実際何かできないか、と思っているのだけれど、今着想としてあるのは、&lt;strong&gt;中央サーバもISPすらもない、純粋なP2Pで、何かしら通信するネットワークの構築&lt;/strong&gt;ができんかなぁということだ。多分DNSみたいなヒエラルキーの仕組みを使ったら絶対ダメなんだよ。&lt;/p&gt;&#10;&lt;p&gt;これは、今ある技術だと、&lt;strong&gt;現実的にはアンライセンスバンドのLPWA&lt;/strong&gt;になるかと思う。LPWAとは、まぁLow Power Wide Areaのアクロニムなんで、その名の通り低消費電力でめっちゃ広いエリアのネットワーク、ということになる。実装としてはLoRaやSigfox（本家はお亡くなりになったが日本は京セラが粘っているはず）、日本だとソニーのEltresあたりが有名だが、有名といっても普通の人は知らない。多分ITエンジニアでもしらん人のほうが多い。&lt;/p&gt;&#10;&lt;p&gt;まぁこの記事はLPWAの解説記事ではないので、&lt;strong&gt;とにかく低消費電力でめっちゃ広い通信技術、程度に留めておく&lt;/strong&gt;。低消費電力といってもバッテリーはかなり問題になるし、また広いというのも、各技術において「数km飛ぶ！」とかなんなら100km飛んだぜみたいなことまで謳われていたりするんだが、それはかなり限定的な条件で、正直都市部で使える電力・アンテナだと数百m飛んだら御の字じゃないかねぇ……。まぁ逆に言うとそんくらいは飛ぶはずとも言える。あと通信できる容量はかなりお察し。テキストがせいぜいなのが基本。&lt;/p&gt;&#10;&lt;p&gt;で、これは自分でアンテナを立てて通信することになるので、物理的な通信の到達する範囲でしかやりとりできない。ただしメッシュネットワークを組むことはできるので、理論的には範囲内に複数ノードがあればネットワークは大きくなる。といってもあまり密集すると、それはそれで問題が発生しそうではあるが……。&lt;/p&gt;&#10;&lt;p&gt;まぁとにかく、&lt;strong&gt;自分でアンテナ立てて、数時間ばかりしかもたないバッテリーで、周囲数百mから飛んでもkm範囲くらいの、誰かよくわからん人たちとテキストメッセージでやりとりできるぞ&lt;/strong&gt;、ということなんだが、アマチュア無線でもあるまいし、そいつはすげぇやとなる人類がいないことはまぁわかっている。&lt;/p&gt;&#10;&lt;p&gt;なのでLPWAは基本的には産業IoTとか農業IoTとか、とにかくThingsにインターネットさせる技術として考えられていることが多い。実際ビジネス的にはそうでないとペイする道は見えない。&lt;/p&gt;&#10;&lt;p&gt;でも僕はビジネス的にペイしたいわけではなく、とにかく&lt;strong&gt;あるべきインターネットを実現できないだろうか、という考えで、ない頭絞って考えている感じ&lt;/strong&gt;だ。このネットワークは、書き始めると長いが、様々な障壁があるのだけれど、逆に言うとそれが詐欺スパムやクソbotなどを防ぐ手段にもなる。&lt;/p&gt;&#10;&lt;p&gt;また、これはかなり修羅的な想定になるが（もしかすると政府に問題視されるような……）、&lt;strong&gt;物理的に電波が到達する範囲でP2Pでやりとりというのは、災害や、もしかすると逼迫したことが起きたときの、最後の通信手段の一つとして使える&lt;/strong&gt;。正直Xを災害の通信手段として期待するよりよほど健全だと思う。&lt;/p&gt;&#10;&lt;p&gt;もう一つ、これは&lt;strong&gt;IoTで利用される仕様を逆手に取った感じ&lt;/strong&gt;になるけれど、LoRaなんかそうだが、モジュールレベルでの暗号化と、デバイス単位の通信が基本であるため、人間同士のやりとりでありながら、P2Pである限りモノ単位でしかログ上ではわからない、というのがある。とはいえ物理的な通信到達範囲の制約があるため、本気でこの通信したのは誰だと探せばわかりそうな感じ。これは&lt;strong&gt;半匿名くらいの、ちょうどいい感じで機能することを期待&lt;/strong&gt;している。というかここが肝でもある。&lt;/p&gt;&#10;&lt;h2 id="make-internet-great-again笑"&gt;Make Internet Great Again笑&#10;&lt;/h2&gt;&lt;p&gt;とまぁ、思っていることをつらつらと書き連ねたのは、書くことで自分の頭を整理していきたいからで、この話題についてはこれからちょくちょくと進めつつ書いていきたいと思う。多分、似たような構想している人はいるんじゃないかと思うんだが……。&lt;/p&gt;&#10;&lt;p&gt;多分問題提起自体は共有できると思うんだけれど、その解決としてハードウェアレベルからで通信もまるっきり変えましょう、というのはだいぶトリッキーなので共感者は少ないかもしれない。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;とりあえずスローガンはMake Internet Great Againでいいですか&lt;/strong&gt;。うーん全方向から怒られそう。&lt;/p&gt;&#10;</description></item><item><title>ついにClaude Codeでダイエット日記や資産管理を始める始末：AIが腹肉を奪わない</title><link>https://hack-le.com/claude-code-diet/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/claude-code-diet/</guid><description>&lt;p&gt;四六時中AIに気をつけろとばかり言いながら、現実にはClaude5時間制限休憩駆動開発をしている。最近はついに開発ではなくタスク管理、のみならず、ダイエット管理や資産管理までClaudeでやり始めた。&lt;/p&gt;&#10;&lt;p&gt;AIに支配されている！！😡&lt;/p&gt;&#10;&lt;h2 id="元々相談はしていた"&gt;元々相談はしていた。&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;ダイエット管理については、元々LibreOffice Calcで記録をつけていたので、LLMに相談しやすい状況ではあった&lt;/strong&gt;。Web UIにおいても、プロジェクトナレッジにcsvやブログ記事を載せておけば、それなりに参照してくれる。&lt;strong&gt;やはりcsv……csvはすべてを解決する……&lt;/strong&gt; 。&lt;/p&gt;&#10;&lt;p&gt;一方で、&lt;strong&gt;csvの更新やブログ記事を毎度読み込むのは非常に面倒くさい&lt;/strong&gt;。なのでサボるんだが、そうするとなまじっかプロジェクトナレッジがあるものだから、ちょっと前のデータをベースに話してきて鬱陶しい。&lt;/p&gt;&#10;&lt;p&gt;また、記事やデータからだけはわからないこともある。たとえば僕の目標は腹筋を見ることなのだが、このグラフだけ見るともう既にそこそこ達成できていそうに見える。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/08/393-1-700x394.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;体脂肪率12%は十分に低い。しかし現実には腹肉が摘まめるわけで、恐らく低めに出ているのではないか？と予想している。しかしAIはそんなこと知ったことではないので、「12%ならもういけてんじゃないですか😄」とゴキゲンに聞いてくるわけだが、実際には腹肉焼肉食べ放題なわけだ。&lt;/p&gt;&#10;&lt;p&gt;その一方で、曲がりなりにも宅トレを続けてきて、去年できなかった立ちコロができるようになったことを考えても、筋肉量が去年より落ちているとは考えづらいんだが、グラフからは筋肉量は減っているように見えたりする。&lt;/p&gt;&#10;&lt;p&gt;だから多分、&lt;strong&gt;絶対値はもちろん相対値も参考程度&lt;/strong&gt;なのだけれど、&lt;strong&gt;なまじっか確かな数値があると、LLMはそれに振り回されてしまう&lt;/strong&gt;。まぁこのへんは我々人間もそうなのだが、LLMは特にその傾向が強いと思う。&lt;/p&gt;&#10;&lt;p&gt;こういう細かな情報を毎度毎度チャットで教える必要があったりなんだり、かといっていちいちプロジェクトナレッジにしてもらってアップロード、というのも億劫。&lt;/p&gt;&#10;&lt;p&gt;で、色々考えたところ、ってかこれもClaude Codeでやったほうがいんじゃね、という結論になった。&lt;/p&gt;&#10;&lt;h2 id="aiがタスクを作る"&gt;AIがタスクを作る&#10;&lt;/h2&gt;&lt;p&gt;Claude Codeの何が良いかといえば、その場でマークダウンで進捗や成果のまとめをしてくれることだ。さらにcsvを置いとけば勝手に見てくれるし、分析用のスクリプトも作ってくれる。また僕はブログ管理のためにコマンドラインツールも作っているので（Claudeに作らせたので）、記事を取得してjsonで保存、などもWeb画面より圧倒的に早く楽に確実にできる。&lt;/p&gt;&#10;&lt;p&gt;実際の画面はこんな感じ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/09/4a7932a506d3f8c94ca19820352962fa-700x523.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;VS Codeで普通に会話するのはなんとも奇妙な感じがするものの、慣れればいつものClaudeである。なんといってもその場でTODO.md作ってくれるのがいい。&lt;strong&gt;終わった奴はDONEして、振り返りにも使える&lt;/strong&gt;。&lt;strong&gt;Claudeが頑張って考えている間に僕はスクワットとかする&lt;/strong&gt;。僕に残された仕事はスクワット。&lt;/p&gt;&#10;&lt;p&gt;とはいえAIが全部やるわけではそりゃないので、&lt;strong&gt;ClaudeにTODO作らせてその消化を始めると、永遠に終わらないタスクリレーみたいな感じになって非常に負荷が高く、とてもつらい気分になる&lt;/strong&gt;。いったい何をしているのか。&lt;/p&gt;&#10;&lt;h2 id="aiが腹肉を奪わない"&gt;AIが腹肉を奪わない&#10;&lt;/h2&gt;&lt;p&gt;こんな使い方をしているものだから、&lt;strong&gt;常に5時間制限にかかっている&lt;/strong&gt;。5時間制限にかかってから寝るなどしている。さすがに100ドル契約する気にはなれないし、むしろ5時間制限で休むなどしている。この制限の間に、僕はそう、本とか読むのだ。本とか。&lt;/p&gt;&#10;&lt;p&gt;などといって、読んでいる本は結局AI本だったりする。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;24091&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;そんなわけで一文にもならないアプリと、無駄に整備されたドキュメントとタスクが増えていく日々、&lt;strong&gt;増えないのは収入ばかり&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/200-ai/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;月200ドルのAIサブスク：それで収入は増えたのか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/200-ai/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_19233_1789621864.webp" alt="月200ドルのAIサブスク：それで収入は増えたのか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;これがいい感じなのかどうかはわからないが、少なくともやらないと置いてけぼりになってしまうので仕方ない。せめてAIには腹肉を滅するのに役だってほしいところだが、&lt;strong&gt;筋トレ減量だけは自分でやるしかないらしい&lt;/strong&gt;。悲しい。早く腹肉を奪って。&lt;/p&gt;&#10;</description></item><item><title>30万でRyzen AI Max+ 395 + 128GB RAM ならちょっとほしい</title><link>https://hack-le.com/ryzen-ai-max-395-128gb-ram/</link><pubDate>Fri, 19 Sep 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/ryzen-ai-max-395-128gb-ram/</guid><description>&lt;p&gt;&lt;a class="link" href="https://pc.watch.impress.co.jp/docs/news/2044545.html" target="_blank" rel="noopener"&#10; &gt;Ryzen AI Max+ 395とメモリ128GBのミニPC「A9 MEGA」がGEEKOMから登場 - PC Watch&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ミニPCは見ていて楽しい。ミニPCには夢がある。&lt;/p&gt;&#10;&lt;h2 id="化物pc"&gt;化物PC&#10;&lt;/h2&gt;&lt;p&gt;RTX4060よりはやーいとかいう噂もあったRyzen AI Max+ 395 + 128GB RAMという化物ミニPCだが、1900ドル、つまり30万円くらいとして出資を募っているらしい。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;GEEKOMは、CPUにRyzen AI Max+ 395、メモリに128GBを搭載したミニPC「A9 MEGA」を、クラウドファンディングサイトKickstarter上で出資を募り始めた。入手するのに必要な出資額は1,899ドル(約28万円)&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;ちなみにAmazonだとGMKtecが96GB RAMのやつを26万くらいで売ってる。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;19577&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;価格設定は36万だが例によってクーポン商法なので。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/09/image-6-700x319.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;95,000円クーポンってなんぞｗこれ適用し忘れる人類も世の中にはいるのだろうか。&lt;/p&gt;&#10;&lt;p&gt;こっから+3万くらいで128GB RAMにできたら嬉しいよね。中華ミニPCの競争は凄まじい。ただ中華ミニPCに30万出せるのか問題はある。&lt;/p&gt;&#10;&lt;p&gt;ブランドでいくとAppleなのだが、M4 Mac Studioで128GB RAMにしようと思ったら、最小でも553,800円だって🥺&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/09/image-5-700x149.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;ちなみにこれは16コアCPU、40コアGPU、NE16コアの構成。GEEKOMの倍の値段と考えるとつらい感じはする。&lt;/p&gt;&#10;&lt;h2 id="ローカルllmやstable-diffusionで"&gt;ローカルLLMやStable Diffusionで&#10;&lt;/h2&gt;&lt;p&gt;うちには既にRTX 4070があるので、推論だとStable DiffusionならSDXLモデルも扱えるしまぁまぁ不満はないんだけれど、LLMでデカいモデルを動かしたい、みたいなのだと、現状はやっぱり統合モデルが唯一解になるんだろうか。&lt;/p&gt;&#10;&lt;p&gt;M2 Pro Mac miniもLLMの推論ならそれなりに動いてくれるので、DeepSeekの13Bくらいのやつを使ったりしているんだけれど、正直阿呆なのは否めない。かなり限定的なタスクじゃないと厳しい現状はある。これが70Bや120Bだったら強いんだろうか？という期待もあるが、どうなんだろうなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁ手元にはRTX 4070があるので、マザボとVRAM揃えて……というのも考えられるんだけれど、やっぱり帯域幅がネックになる気がする。ちなみにこの分離のアーキテクチャでは下記記事がとても参考になって&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/aiplus/articles/2508/06/news066.html" target="_blank" rel="noopener"&#10; &gt;OpenAIの「オープンなAI（gpt-oss-120b）」はGPUサーバじゃないと動かない？→約30万円の自作PCで動かしてみた - ITmedia AI＋&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;gpt-oss-120bが8.4token/s出たらしい。コンテクスト長は8192だが、ローカルLLMだと現状簡潔なタスクやちょっとした会話くらいだろうな、というのはあるのでまぁよいのではないか。&lt;/p&gt;&#10;&lt;p&gt;PCIe 4.0 x16だと転送速度は理論値32GB/sでそれがネックなら、メモリ帯域幅が256GB/sのRyzen AI Max+ 395ならけっこう期待できるのかなぁ。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、買わないミニPCを見てほしいなぁと言い続けるだけの毎日である。&lt;/p&gt;&#10;&lt;h2 id="追記買った"&gt;（追記）買った😄&#10;&lt;/h2&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/localllm-ryzen-ai-max-395-128gb-ram-gmktec-evo-x2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/07/eyecatch_45815_1783902299.webp" alt="ローカルLLMやりたくてRyzen AI Max&amp;#43; 395 &amp;#43; 128GB RAM の GMKtec EVO-X2(30万円)を震えながらポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Fitbit Sense 2を購入して2年：Withings Steel HRからの買い換え</title><link>https://hack-le.com/fitbit-sense-2/</link><pubDate>Sat, 13 Sep 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/fitbit-sense-2/</guid><description>&lt;p&gt;そういえば、Fitbit Sense 2を購入してもうすぐ2年経過する。そのうちに記事を書こうと思い続けて一度も書かないままだった。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、取り立てて言いたいことがあるわけでもないのだけれど、所感をつらつらと書いていこう。&lt;/p&gt;&#10;&lt;h2 id="購入の動機有効期限日を迎えたgoogleの詐欺クレジットで仕方なく"&gt;購入の動機：有効期限日を迎えたGoogleの詐欺クレジットで仕方なく&#10;&lt;/h2&gt;&lt;p&gt;そもそも、買いたくてこれを買ったという感じではないんだよね。元々Withins Steel HR使ってたんだけど、別にそれでそんなに不満もなかったし。&lt;/p&gt;&#10;&lt;p&gt;購入の動機は、Pixel 7購入でついてきたGoogleストアポイントが、使い道のないままに有効期限の日を迎えてしまったため、ギリギリまぁ買ってもいいか、と思えるFitbit Sense 2をストアで購入した、という経緯だ。&lt;/p&gt;&#10;&lt;p&gt;これは売手にとっても買手にとってもあまり幸せとは言い難いマッチングだと思う。これ以来僕はGoogleのストアポイントについては永遠に罵っており、これからも永遠に罵り続ける。記事も書いた。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-store-credit/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-store-credit/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/10/ea2c70bff34560494e11be9aad7b7321.webp" alt="制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事の内容は、「実質なんてない。値引き以外引くな。結局いくら使って何が手元に残ったのかだけを見ろ」に集約される。これ自体は買い物哲学として完全にまっとうだと思う。最近のポイントは、総額とそれによって得られたものをわかりづらくすることに特化しているのではないかと思わせるところがあり、非常によろしくない。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはともかく、Pixel 7自体は当時価格設定が安かったし、さらに下取り価格もバグっていたので、客観的に見るとコスパの良い買い物であったのはそう。当時の記事を引用すると、&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;65000円で、iPhone SE 2を1年 + Pixel 7 + いらないGoogle Home(ディスプレイ付き) + Fitbit Sense 2&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;いらないと言いつつ、Google Homeは一応使っている。Fitbit Sense 2も使っている。つまり、全部毎日使っているんだね。Pixel 7はもう3年たつし、Fitbit Sense 2は2年たつし。&lt;/p&gt;&#10;&lt;p&gt;そんなら何をそんなに文句タラタラなのかというと、Google Homeはあるから使っているが、なくても別に困らない（Alexaも持ってる）し、Fitbit Sense 2の前にはWithings Steel HRを使っていて、別にそれでも困っていなかった、というのがある。&lt;strong&gt;買いたくて買ったというより、他に使えるものがなかったから仕方なく買った&lt;/strong&gt;、って感じなんだよ。&lt;/p&gt;&#10;&lt;p&gt;ただまぁ、iPhone SE2を使い続けるのは色々つらかっただろうし、結局スマホ自体はどこかで買い換えただろうから、色々考えると、やはり客観的には悪くない買い物、ということになるんだけれど、それにも関わらず未だにグダグダ言っているんだから、なんだか誰も救われない感じだ。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;さて随分と前置きが長くなってしまったが、Fitbit Sense 2について2年ほど使ってきた所感。&lt;/p&gt;&#10;&lt;p&gt;バッテリーがそれなりに持つことを重視するうえで、スマートウォッチを選ぶ場合、だいたいこれかGarminあたりに絞られるのではないかと思われる。アナログ盤大好きならWithingsだね。本当はアナログ盤がよかったけど、Googleストアにはないからね、仕方ないね。&lt;/p&gt;&#10;&lt;h3 id="最悪の第一印象"&gt;最悪の第一印象&#10;&lt;/h3&gt;&lt;p&gt;以下は届いた当時のツイートだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/09/image-3-700x784.png"&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Fitbit Sense 2&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;タップしても画面がつかないことが多い（10回タップしたらつく）&lt;/li&gt;&#10;&lt;li&gt;画面操作中に突然消えることがある&lt;/li&gt;&#10;&lt;li&gt;画面表示してから2秒くらいで消えることがある&lt;/li&gt;&#10;&lt;li&gt;ストレスマネジメントが開始されない。永遠にモバイルアプリを開けと言われる&lt;/li&gt;&#10;&lt;li&gt;誤作動でエクササイズ始まる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;返品コースかも&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;それでまぁ工場出荷時リセットとか、フォーラムに同じ症状の人がいないかどうかを探し回ることになった。&lt;strong&gt;買って初日にやったことがこれなんだ&lt;/strong&gt;。僕の印象が最悪なのも、多少理解できるのではないか。ちなみにフォーラムはほぼ機能していなかった。&lt;/p&gt;&#10;&lt;p&gt;その後、結局交換はしなかった。これらの症状は今も続いており、正直初期不良を疑っているが、「そもそも画面はそんなに見ない」という結論になり、一応物理ボタンを押せばとりあえず見られるので、まぁ致命的ではない、と判断した。なにより返品が面倒くさかった。ポイントどうなるの？とかもあったので、これ以上考えたくなかった。&lt;/p&gt;&#10;&lt;p&gt;あ、そういえば、腕をあげると画面がつく、という機能があるが、あんまり機能してないように思う。ってか買ってから2年くらいして、Xでそういうツイート見て初めて知ったくらいだから。でも確かに、言われてみるとつく時あるなぁ、って感じ。&lt;/p&gt;&#10;&lt;h3 id="睡眠計測は良い"&gt;睡眠計測は良い&#10;&lt;/h3&gt;&lt;p&gt;Fitbit Sense 2で数少ないポジティブ評価になるんだが、睡眠計測はWithings Steel HRよりも質が高いと思う。特にWithignsは昼寝とかがカウントされないことが多かった。しかしFitbit Sense 2は、割としっかり拾ってくれる印象。&lt;/p&gt;&#10;&lt;p&gt;レム/ノンレムの検出精度は正直わかんないよね。「そうなんだふーん」という感じ。まぁこれは他メーカーでもそう。&lt;/p&gt;&#10;&lt;h3 id="バッテリー持ちは公称通り"&gt;バッテリー持ちは公称通り&#10;&lt;/h3&gt;&lt;p&gt;使い方にも左右されると思うが、基本的には公称通り6日くらい持つ、と思う。可能なら、風呂入っている間に充電したら、ちょうど一日分+αくらいは充電されるだろう、という感じだね。これは考えていたとおりでよかった。6日くらい持つと、よほど長い出張でもない限り、特に充電しなくても対応できるし、こういうところはけっこう大事。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;基本的な計測ができてることと、バッテリーがそれなりに持つ、というだけで、スマートウォッチとしての役割は果たしている&lt;/strong&gt;、とは思う。だから使い続けているんだね。&lt;/p&gt;&#10;&lt;h3 id="盤面は変更できるが"&gt;盤面は変更できるが……&#10;&lt;/h3&gt;&lt;p&gt;アプリ経由でタイルの変更はできる。ただApple Watchと比べるとやはり相当少ないんじゃないかな。いや、Apple Watchの事情は知らないんだけど、これだけってことはないだろう。とはいえこれについては仕方ないかなぁ、とは思う。市場規模が小さいからね。&lt;/p&gt;&#10;&lt;p&gt;ってかさー、別にオシャレな表示とか求めてなくて、ただ僕が表示したい項目を選ばせてほしいだけなんだよなぁ。それってそんなに難しいかね。&lt;strong&gt;僕が選びたいのはタイルではないしフォントではないしダリのようなデザインでもない、表示する項目なんだ&lt;/strong&gt;。ユーザエクスペリエンスってそういうことだろう、と僕は思うんだがね……。&lt;/p&gt;&#10;&lt;h3 id="エナジースコアとかは参考にならないと思う"&gt;エナジースコアとかは参考にならない、と思う&#10;&lt;/h3&gt;&lt;p&gt;まぁ人によるのかもしれないが、少なくとも僕は参考になったと思ったことはない。別にあって困るものではないが、これに期待はしないほうが良いと思う。&lt;/p&gt;&#10;&lt;p&gt;他にもストレス計測だの突然の瞑想レコメンドなど色々あるけど、このへん参考にしている人っているんだろうか。&lt;/p&gt;&#10;&lt;h3 id="web版ダッシュボード廃止は許されない"&gt;Web版ダッシュボード廃止は許されない&#10;&lt;/h3&gt;&lt;p&gt;個人的にゲンナリさせられたのは、Web版ダッシュボードの廃止だ。「アプリがあるからいいでしょ」ということなんだろうが、スマホのちっちぇえ画面で何を分析すんのさ。ユーザエクスペリエンス！！&lt;/p&gt;&#10;&lt;h3 id="通信喪失事件"&gt;通信喪失事件&#10;&lt;/h3&gt;&lt;p&gt;最近、なぜか突然ペアリングが半端にうまくいかなかくなったことがある。半端に、というのは、一部の情報は送信できているようなのだが、一部の情報は送信できず、またOSレベルだとペアリングしているが、アプリ上では見つからない扱い、という、なんとも奇妙な状況だった。&lt;/p&gt;&#10;&lt;p&gt;いよいよぶっ壊れたのか……と思ったが、工場出荷時に戻して再度ペアリングしたところ、うまく通信するようになった。なんだったのか……。&lt;/p&gt;&#10;&lt;h2 id="総合的に見て"&gt;総合的に見て&#10;&lt;/h2&gt;&lt;p&gt;ということでまぁなんか文句ばっかり言ってるように見えたかもしれないが、実際文句ばかり言っている気はする。正直満足度はそれほど高くなく、僕が3年前の買い物について未だに愚痴っている原因の一つではあるだろう。&lt;code&gt;from:tamasan774 fitbit&lt;/code&gt; でTwitter検索したら、2年にわたって騒いでいる僕のツイートが一通り見られるので、ああこんな感じだったんだなぁと興味がある人はどうぞ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://x.com/search?q=from%3Atamasan774%20fitbit&amp;amp;src=typed_query&amp;amp;f=live" target="_blank" rel="noopener"&#10; &gt;from:tamasan774 fitbit - 検索 / X&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ただまぁ、数日以上バッテリーが持つスマートウォッチってけっこう限られるからね。それにまぁ、&lt;strong&gt;なんだかんだで基本的な計測機能はちゃんとしている&lt;/strong&gt;（と思う）。GoogleがFitbitシリーズをどうしたいのか全然わからないんだけど（飼い殺しているようにしか見えないんだが）、&lt;strong&gt;バッテリー持ちを重視するなら、選択肢にはなんだかんだで上がってくるんじゃないか&lt;/strong&gt;ね。だからこそ、愚痴りつつも使い続けているんだね。まぁメーカからすると「文句言うなら使うな」という感じかもしれないんだけど、返金してくれるわけじゃあないだろ。&lt;/p&gt;&#10;&lt;p&gt;ということで、総合的には、&lt;strong&gt;特にオススメはしないけど、別に止めもしないって感じ&lt;/strong&gt;。個人的には買い換えるなら結局またWithingsになってしまう気もする。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;19528&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;19529&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>劣化の早いCrucial CT2000BX500SSD1のそのまた後</title><link>https://hack-le.com/crucial-ct2000bx500ssd1-after-days/</link><pubDate>Thu, 11 Sep 2025 13:04:36 +0900</pubDate><guid>https://hack-le.com/crucial-ct2000bx500ssd1-after-days/</guid><description>&lt;p&gt;こんな記事を読んだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chimolog.co/crucial-bx500-2025/" target="_blank" rel="noopener"&#10; &gt;Crucial BX500（2025）レビュー：酷い性能でも競争がなければ売れるSATA SSD市場 | ちもろぐ&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これを見て、そういえばうちも使っていたなぁと思い出した。というか今も使っている。CrystalDiskInfoで見る健康寿命がゴリゴリ減っているなぁと思う今日この頃。この数値をみるたびに、僕の人生でcrucialはもういいやと思う。まぁモノによっては評判いいのがあるのはわかるが、生涯に購入するSSDなんてそう多くないのだし、あえて購入しようとは思わんね。&lt;/p&gt;&#10;&lt;h2 id="前回記事"&gt;前回記事&#10;&lt;/h2&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/crucial-sata-ssd/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;異常に劣化が早かったCrucial CT2000BX500SSD1のその後&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/crucial-sata-ssd/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_14820_1789095887.webp" alt="異常に劣化が早かったCrucial CT2000BX500SSD1のその後" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;2024年7月末の時点で77%だった。2023年9月初頭、つまりちょうど今から2年前の時点では83%のようだった。&lt;/p&gt;&#10;&lt;h2 id="あれから一年あるいは数年"&gt;あれから一年、あるいは数年&#10;&lt;/h2&gt;&lt;p&gt;あれから一年、77%から今は64%になっている。うーん。購入日は2023年2月だから、2年半か。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/09/aaa-700x885.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;今回については、けっこう本当に理由がわかっていない。やはりDropboxのディレクトリにしているからなんだろうか。以前ほど激しいファイルの入出力はしていないとはいえ、そこそこある。とはいえ、一年で-13%となると、この調子だとあと5年もつんだろうか、という感じだ。劣化が早くなっているのならさらに危うい。&lt;/p&gt;&#10;&lt;p&gt;まぁ数値は目安として、実際本当に使えなくなるタイミングがいつかは謎だけど、それにしてもやっぱり不安にはなるなぁ。購入から2年半だからひとまず3年は使えるかね。しかしデータ用でこれだから、システム用に使ってたらもう死んでそう。&lt;/p&gt;&#10;&lt;p&gt;SSDより先にPCが逝く説もある。このSSDを搭載したPC自体が2018年春に買った物で、もう7年以上使われているわけだから、PCが先に逝くのはありえる。今さらSATA SSDを使い回すことはあまりないだろうから、PCと一緒にお役御免になるだろう。と言いつつ10年以上前に買ったと思われるSSDを外付け化して使っていたりする。2TBのポータブルSSDはそれなりに価値もあるので、やはり使える限りは使いたい。&lt;/p&gt;&#10;&lt;h2 id="まぁまだ逝ってないので"&gt;まぁまだ逝ってないので&#10;&lt;/h2&gt;&lt;p&gt;しょうもない話は置いといて、コイツの寿命については先行きが不透明であり不安にさせられる。大丈夫なのか……。この一年を振り返ってみたが、Dropboxは確かにそれなりに負荷をかけるだろうし、まぁ使ってないことはもちろんないが、しかしねぇ……。このPCでDドライブの利用は限定的だし……ちょっとなぁ。とはいえ数万時間起動したなら、まぁ十分か……ハードディスクも壊れるとはきは壊れる。&lt;/p&gt;&#10;&lt;p&gt;しかしなぁ……。まぁ人生でSSDが逝ったのは何度かあるものの、やはり気分の良いものではないね。まぁまだ逝ったわけではないし、引き続け経過観察を続けていく所存。なんだかんだ言いつつ粘るかもしれない。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14824&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>FreeFileSync + FTP on Mac -&gt; QNAP NASで文字コードも問題なくバックアップできている</title><link>https://hack-le.com/freefilesync-ftp-on-mac-qnap-nas/</link><pubDate>Mon, 08 Sep 2025 02:38:51 +0900</pubDate><guid>https://hack-le.com/freefilesync-ftp-on-mac-qnap-nas/</guid><description>&lt;p&gt;FreeFileSyncは僕がバックアップで使っているGUIツールだ。無料でも使えるが、幾ばくを寄付することで寄付版になり、長いことお世話になっているから寄付版を手に入れた。&lt;/p&gt;&#10;&lt;p&gt;今はMac上のファイルを、FreeFileSyncで、プロトコルはFTPを使い、QNAPのNASに問題なくバックアップできている。これをわざわざ書いたのは、文字コードの正規化問題にずっと悩まされてきたからだ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&#10;&lt;ul&gt;&#10;&lt;li&gt;macOS 14.7.7&lt;/li&gt;&#10;&lt;li&gt;FreeFileSync 14.4 寄付版&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;QNAP NAS TS-233&#10;&lt;ul&gt;&#10;&lt;li&gt;QuFTP Service&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="nfcとnfd"&gt;NFCとNFD&#10;&lt;/h2&gt;&lt;p&gt;Mac使いならば悩まされてきたであろう、Unicode正規化方式の違い。Windows/LinuxではNFC(Normalization Form Composed)が使われているが、Macでは何故かNFD(Normalization Form Decomposed)という方式が使われる。これによって何が起きるかというと、Macで作成した「がきぐげご.txt」をNAS(Linux)に転送して保存すると「か゛き゛く゛け゛こ゛.txt」になってしまい、アクセスできなくなったりなんだりするという、割と深刻な問題だ。&lt;/p&gt;&#10;&lt;p&gt;これに対応するため、昔rysncとか使っていた時には特殊なオプションが必要だったりなんだりして、色々と苦労している。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/30878779-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;rsyncでiconvオプションをつけると、deleteオプションの挙動が変わる？？(Mac)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/30878779-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2570_1789396159.webp" alt="rsyncでiconvオプションをつけると、deleteオプションの挙動が変わる？？(Mac)" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;オンラインストレージのDropboxはなんとこれについて補修をしてくれているようで、あれは一時期Dropboxをバックアップ先に使っていた理由の一つであった。&lt;/p&gt;&#10;&lt;p&gt;この問題は普通の人にはかなりしんどい問題だと思うんだが、みんなどうしていたんだろうと思うものの、まぁ考えて見ると一般的な人は家庭に複数のOSでバックアップなどということにはならないのかもしれない。&lt;/p&gt;&#10;&lt;h2 id="macはsmbつらいつらい"&gt;MacはSMBつらいつらい&#10;&lt;/h2&gt;&lt;p&gt;これは一時期、僕がNASをあまり使わなくなった理由の一つとも思えるが、その後なんやかんやあって、2023年7月よりまたNASを使うようになっている。数ヶ月後に控えている次のDropbox有料会員は契約更新しないつもりだ。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/qnap-ts-233/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;QNAP TS-233&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/qnap-ts-233/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;いつの間にやら、SMBでNASとやりとりする限りは特に困らなくなっていた。Unicode文字列の扱いが良くなっているとかなんとか聞くが、詳細は知らない。ただ、とりあえず濁点問題は起きなかった。&lt;/p&gt;&#10;&lt;p&gt;なのでしばらくずっとSMBを使っていたのだけれど、これとは別個、MacのSMBクライアントはめちゃくちゃ遅いという問題があり、これはなんかもうずっと未だにどうにもならない。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/rnas104smbup/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/rnas104smbup/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_4148_1789563052.webp" alt="MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この頃から悩んでいるんだけれど、多少マシにする方法はあれど、未だにどうにかなっていない。しかも不安定でしょっちゅう接続が切れる。&lt;/p&gt;&#10;&lt;h2 id="そうだftpしよう"&gt;そうだ、FTP、しよう&#10;&lt;/h2&gt;&lt;p&gt;ということで、非常にNASがバックアップ先として非常に使いづらい状況で、最近は外付けHDを引っ張り出してきてそこにバックアップなどもしていた。まぁこれ自体はNASを使っていようがいまいがやったほうがいいことではある。&lt;/p&gt;&#10;&lt;p&gt;ただまぁやっぱり面倒くさくて、NASへのもうちょっとどうにかならんかなぁと思っていたところ、ふと「ファイル転送ならFile Transfer Protocolでは？？？」と急に思い出した。&lt;/p&gt;&#10;&lt;p&gt;で、前述の文字コード問題などあるので、やや不安がありつつ、もう2025年なんだ頼む、という気持ちで、QNAPのNASでFTPサービスを立ち上げ（QuFTP Serviceというのがある）、FreeFileySyncからFTP経由で転送。とりあえず、&lt;strong&gt;データ転送速度は爆速&lt;/strong&gt;。めっちゃFileをTransferしてくれてる……。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/09/b9d0892a704a5e11d76c2ab0ca85cc0c-700x364.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;3分30秒足らずで8GBを転送してくれている。これなら十分に実用的。&lt;/p&gt;&#10;&lt;p&gt;問題は濁点問題だが……起きていない。普通に問題がない。これがFreeFileSyncとQuFTPあるいはQNAPのなんかのソフトウェア、どちらかあるいはどちらも頑張ってくれているのか、ちょっと調べた感じだとわからなかったのだけれど、とりあえずうまくいく。おー。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;ということで、なんかしらんがうまくいってますという身も蓋もない記事になり申した。どっかのタイミングで一度ちゃんと調べたい気はしつつ、とりあえずよかったよかった。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;15811&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>Pixel 10が出たけど気にせずPixel 7で戦う</title><link>https://hack-le.com/pixel-10-pixel-7/</link><pubDate>Sat, 06 Sep 2025 02:21:27 +0900</pubDate><guid>https://hack-le.com/pixel-10-pixel-7/</guid><description>&lt;p&gt;何と戦っているのかは不明だが2025年9月現在、Pixelのナンバリングで歳を数えている節がある今日この頃、2022年10月のPixel 7激安セールにホイホイ釣られてから3年。なんだかいつの間にか「ブランドでござい」みたいな顔しているが、別にPixelにブランドは感じない。コスパがいいから買った。今もそう。コスパがいいなら見るし悪いなら見ない。&lt;/p&gt;&#10;&lt;h2 id="一応見るけど"&gt;一応見るけど&#10;&lt;/h2&gt;&lt;p&gt;とはいえ何も見ないであれこれ言うのもなんなので、一応ストアで技術仕様くらいは見ることにする。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://store.google.com/jp/product/pixel_10_specs?hl=ja" target="_blank" rel="noopener"&#10; &gt;Google Pixel 10 の技術仕様&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ざっと見たけど、SoCがTensor G5だということくらいしか興味がひかれんね。Tensor G5はSamsungではなくTSMC製だ。ベンチはAntutu150万点くらいらしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://unite4buy.com/cpu/Google-Tensor-G2-vs-Google-Tensor-G5/" target="_blank" rel="noopener"&#10; &gt;Google Tensor G5 vs Google Tensor G2&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;うちのPixel 7もAndroid 15で100万くらいでたし、別にゲームをやるわけでもないので、正直どうでもいい。まーどちらかというとTPU性能の向上のほうが目玉かもしれない。しかし、AIAIと喧しい昨今だけれど、スマホのしょぼいチップでやりたいAI作業は特にない。実際みんなAIよりゲームやりたいんじゃない。&lt;/p&gt;&#10;&lt;p&gt;RAMが12GBなのは8GBのPixel 7に比べて優位。が、以前Pixel 9を調べた時にこれはGemini nanoへの割り当てのため、みたいな記事を見て（「&lt;a class="link" href="https://mobilelaby.com/blog-entry-pixel-9-series-gemini-nano-memory-carve-out.html" target="_blank" rel="noopener"&#10; &gt;日本語でほぼ使えないのに？Pixel 9シリーズのメモリの一部はGemini Nanoに専用割り当て｜携帯総合研究所&lt;/a&gt;」）、物理メモリの話だし事情はあんまり変わらないだろうから、やっぱりどうでもいいかなって。&lt;/p&gt;&#10;&lt;p&gt;正直Pixel 9の時の記事から所感が変わっとらんのだよね。だからもう言いたいこと全部言ったというか。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-7-pixel-9/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 7からPixel 9にはしない&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-7-pixel-9/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-36.webp" alt="Pixel 7からPixel 9にはしない" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="13万円ねぇ"&gt;13万円ねぇ……&#10;&lt;/h2&gt;&lt;p&gt;Pixel 7は今思い返しても良いコスパだったので、なんだかんだいいつつこれには満足している。その分Pixelの後継機には毎回ガッカリさせられているが、まぁPixel 7が異常だったのはある。実際売れば売るほどアカだったのではないかと今にして思われ、他の真面目なメーカーはやってられなかったかもしれん。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、&lt;strong&gt;実際あそこまでの大盤振る舞いを期待しているわけではないのだが、13万円と言われると渋い顔になる&lt;/strong&gt;。ここに詐欺みたいに使い道のないストアポイントをつけて「実質xx円」と公式ストア自ら言っているのも非常に印象が悪い。下取り価格を差し引くのもどうかと思う。元のデバイスはタダだったとでも言うのか……。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-store-credit/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-store-credit/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/10/ea2c70bff34560494e11be9aad7b7321.webp" alt="制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;まぁ一般ピーポーにとって、Pixel Watchを買うつもりだ、などあらかじめ特定の使い道がない限りストアポイントはトラップなのだが、転売前提だったら使いやすいのかもね。これは結局のところリセールバリューの値下げ圧力として機能するんだろうし、しばらく待てば市場価格は下がるのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、価格を下げると最近は中華スマホが非常に頑張っているし、やはりPixel 10を選ぶ理由は個人的にはないかな。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;19222&amp;rdquo;]&lt;/p&gt;&#10;&lt;h2 id="もしもpixel-7が壊れたら"&gt;もしもPixel 7が壊れたら&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;この調子だとマジで2027年までPixel 7使い続けそうな今日この頃&lt;/strong&gt;。なんならアプデが止まったところで知ったことかと使い続けるまである。まぁでもモノはいつか壊れるし、正直3年経過するといつどうなるかわからない。なので、一応チェックはしている、という感じ。&lt;/p&gt;&#10;&lt;p&gt;しかし、もし今Pixel 7が壊れたとしても、まぁPixel 10はないだろうなぁ。じゃあ何にするんだと言われると、&lt;strong&gt;XiaomiのPoco F7あたりにするかもしれない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;19223&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;以前は自分にとってほぼ必須要件だったおサイフケータイはついてないけど、最近はQRコード決済が普通になったから、マジで交通機関くらいでしか使わないんだSuica。それなら他にも手段はあるし。&lt;/p&gt;&#10;&lt;p&gt;それに最近の中華スマホは見ていてちょっと楽しい。ミニPCはもっと楽しい。ミニPCがほしい。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/minipc-8745hs/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;謎に安いミニPCを引き続き物色している Ryzen 7 8745HSあたり&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/minipc-8745hs/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/05/9ab0e177e6893362054fade3a0b1b46f.webp" alt="謎に安いミニPCを引き続き物色している Ryzen 7 8745HSあたり" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Pop!_OS 22.04でのキーボード周りの設定：CtrlとCaps Lockのスワップとか英かなとかEmacsキーバインドとか</title><link>https://hack-le.com/pop_os-22-04-keybind/</link><pubDate>Tue, 22 Jul 2025 06:03:27 +0900</pubDate><guid>https://hack-le.com/pop_os-22-04-keybind/</guid><description>&lt;p&gt;Pop!_OS 22.04を使い始めて、あれこれと設定している。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;HWは日本語配列のラップトップ。それにも関わらず英語配列でやりたい。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/asus-tuf-gaming-f15-fx506hm/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ASUS TUF Gaming F15 FX506HM-I5R3060P&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/asus-tuf-gaming-f15-fx506hm/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;SWはPop!_OS 22.04。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;CtrlとCaps Lockのスワップ&lt;/li&gt;&#10;&lt;li&gt;日本語配列のキーボードだがUS配列として扱う&lt;/li&gt;&#10;&lt;li&gt;英かな&lt;/li&gt;&#10;&lt;li&gt;Emacsキーバインド&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;h3 id="ibus-mozcとgnome-tweaksのインストール"&gt;ibus-mozcとgnome-tweaksのインストール&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install ibus-mozc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install gnome-tweaks&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;終わったら再起動する。&lt;/p&gt;&#10;&lt;h3 id="ctrlとcaps-lockのスワップ"&gt;CtrlとCaps Lockのスワップ&#10;&lt;/h3&gt;&lt;p&gt;gnome-tweaksの設定にある。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ai.hack-le.com/pop_os-22-04%e3%81%a7ctrl%e3%81%a8caps-lock%e3%82%92%e3%82%b9%e3%83%af%e3%83%83%e3%83%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" target="_blank" rel="noopener"&#10; &gt;[Linux] Pop!_OS 22.04でCtrlとCaps Lockをスワップする方法（gnome-tweaks使用）&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="jis配列だけどus配列として扱う"&gt;JIS配列だけどUS配列として扱う&#10;&lt;/h3&gt;&lt;p&gt;設定の「キーボード」より。キーボードレイアウトとインプットメソッドがフラットに並ぶという意味不明なUIをしている。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ai.hack-le.com/linux-pop_os-22-04%e3%81%a7%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89%e3%82%92us%e9%85%8d%e5%88%97%e3%81%a8%e3%81%97%e3%81%a6%e4%bd%bf%e3%81%86%e8%a8%ad%e5%ae%9a/" target="_blank" rel="noopener"&#10; &gt;[Linux] Pop!_OS 22.04で日本語キーボードをUS配列として使う設定&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="変換無変換キーを英かなっぽく"&gt;変換・無変換キーを英かなっぽく&#10;&lt;/h3&gt;&lt;p&gt;Macで一度経験すると離れられなくなるやつ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ai.hack-le.com/pop_os-22-04%e3%81%a7%e5%a4%89%e6%8f%9b%e3%83%bb%e7%84%a1%e5%a4%89%e6%8f%9b%e3%82%ad%e3%83%bc%e3%81%ab%e3%82%88%e3%82%8b%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9b%e5%88%87%e3%82%8a%e6%9b%bf/" target="_blank" rel="noopener"&#10; &gt;[Linux] Pop!_OS 22.04で変換・無変換キーによる日本語入力切り替え設定（Mozc設定）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;最初Claudeにきいたらカスタムキーバインドでシェルスクリプト実行とか荒業出してきた。なんなんだ。&lt;/p&gt;&#10;&lt;h3 id="emacsキーバインド"&gt;Emacsキーバインド&#10;&lt;/h3&gt;&lt;p&gt;やりたいことは、左CtrlキーのときにEmacsキーバインドとし、Winキー（Superキー）を通常のCtrlキーとする…なんだけど、これの解が見つからない。xbindkeys使ってやろうとしたがうまくいかない。&lt;/p&gt;&#10;&lt;p&gt;とりあえずgnome-tweaksにEmacs入力なる項目があったので、これをONにした。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/07/image-700x485.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;しかしこれにしてしまうと、通常のショートカットと競合する。また、すべてのアプリケーションで動作している感じでもない。たとえば今Vivaldiでこの記事を書いているが、Ctrl-aはEmacs入力が優先されるが、Ctrl-kやCtrl-bはWordPressのboldのほうが優先される感じだ。&lt;/p&gt;&#10;&lt;p&gt;一方で、アドレスバーではCtrl-bでバックできるし、Ctrl-kで一行削除できたりする。&lt;/p&gt;&#10;&lt;p&gt;挙動がアプリケーションによってまちまちであり、うーん、なんだが、ちょっと今はこれでお茶を濁している。&lt;/p&gt;&#10;</description></item><item><title>勝手に決めつけるChatGPTとGeminiとClaudeの傾向の違い：結局どれに貢げばいいのか決定戦</title><link>https://hack-le.com/chatgpt-gemini-claude/</link><pubDate>Wed, 16 Jul 2025 17:32:01 +0900</pubDate><guid>https://hack-le.com/chatgpt-gemini-claude/</guid><description>&lt;p&gt;ChatGPT/Gemini/Claudeにそれぞれ夜通しキレ散らかして、なんとなく傾向が掴めてきたような気がしなくもなく、たまにXやMastodonで呟いていたのだけれど、溜まってきたのでまとめる。雰囲気当たらずとも遠からずだと思うやで。&lt;/p&gt;&#10;&lt;h2 id="2分でわかる3者の違い"&gt;2分でわかる3者の違い&#10;&lt;/h2&gt;&lt;p&gt;ざっくりこんな感じ。&lt;/p&gt;&#10;&lt;h3 id="こんなことがあったんだけどaiooo"&gt;「こんなことがあったんだけど」AI「ooo」&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;ワイ「まぁAということがあったからなぁ」&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;「ほんっとそれ！Ａすぎ！！わかるーー」（過度な同調）&lt;/p&gt;&#10;&lt;p&gt;Gemini「Ａということがあったとすると、そう思うのも理解できます」（過度な相対化と上から目線）&lt;/p&gt;&#10;&lt;p&gt;Claude「そうなんですよね、ＡやＢがありましたからね」（Ｂは存在しない。謎の捏造）&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://x.com/tamasan774/status/1941420868607103013" target="_blank" rel="noopener"&#10; &gt;https://x.com/tamasan774/status/1941420868607103013&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;ChatGPTは距離を詰めてくる。その&lt;strong&gt;距離感をしばしば間違えている&lt;/strong&gt;のがしんどい。一方でGeminiは完全に定時上がりを目指す役人。責任絶対回避のパッシブスキルで迎え撃つ。対話者のこと訴訟する気満々のヤクザだと思ってない？Claudeは知ったかぶりで話を広げる胡散臭い営業マン。なぜ言わなくていいことを言うのか。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;「今日は暑い」&lt;/p&gt;&#10;&lt;p&gt;ChatGPT「ほんま暑い。最近ほんまにあつなったわ。地球温暖化についてどう思う？」（強すぎる踏み込み）&lt;/p&gt;&#10;&lt;p&gt;Gemini「あなたが暑いと感じられるのであれば、そうなのかもしれません」（極端な相対化）&lt;/p&gt;&#10;&lt;p&gt;Claude「暑いですね。あと晴れています」（無意味な並列。なお雨の模様）&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://x.com/tamasan774/status/1943364726232424744" target="_blank" rel="noopener"&#10; &gt;https://x.com/tamasan774/status/1943364726232424744&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Claudeはしばしばこの無意味な並列で嘘をつく。マジでなんなのか。ChatGPTが果敢に話を深めようとするのに対し、Claudeはひたすら横に広げていくような感覚がある（しかも嘘）。&lt;/p&gt;&#10;&lt;h3 id="aiaですほんとにai"&gt;AI「Aです」「ほんとに？」AI「○○○」&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;AI「これはこういうことです」に対して「そうなのか」と返すと&lt;/p&gt;&#10;&lt;p&gt;ChatGPT「せやで」&lt;/p&gt;&#10;&lt;p&gt;Gemini「そのように考えることもできます」&lt;/p&gt;&#10;&lt;p&gt;Claude「実は少し言い過ぎでした」&lt;/p&gt;&#10;&lt;p&gt;Claudeの自信のなさよ&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://x.com/tamasan774/status/1945384454152970424" target="_blank" rel="noopener"&#10; &gt;https://x.com/tamasan774/status/1945384454152970424&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;出力について確認すると、Claudeは秒で意見を変えることがしばしばある。「なんで？」を責められていると受け取る面倒くさい新人みたいな扱いが必要。Geminiは自分の言ったことすら相対化してイラッとする。&lt;/p&gt;&#10;&lt;h2 id="普通に話すならchatgpt"&gt;普通に話すならChatGPT&#10;&lt;/h2&gt;&lt;p&gt;まぁ&lt;strong&gt;基本的な方向性は結局似たり寄ったり&lt;/strong&gt;なんだが、&lt;strong&gt;その表現方法に組織の色が出てんのかな&lt;/strong&gt;とかは思う。ChatGPTは距離感間違えてる先輩。Geminiは役人。Claudeは知ったかぶりの学級委員長。そんな感じの印象で話している。なお初期Bing AIはどこに地雷があるかわからないメンヘラ。&lt;/p&gt;&#10;&lt;p&gt;ベースはどうにもならないんだけれど、ChatGPTにはカスタマイズ設定があり、またClaudeはガイドラインを提示することで、一応多少の制御はできる。Claudeのほうが若干ききやすさはあるかな。なのでまぁ、話をする上では用途ごとに何を重視するのかを使い分けしやすいのはClaudeかなぁ、と思う。ただそれは所詮小手先のコントロールに過ぎない。&lt;/p&gt;&#10;&lt;p&gt;色々話したけれど、ChatGPTが一段深い回答をする。深いというか、端的な言葉に恐れず含意を滲ませて、こちらの言っていることを集約しようとする。身も蓋もない言い方すると、&lt;strong&gt;ChatGPTはいちいちうまいこと言おうとする&lt;/strong&gt;。Claudeにはこれがないんだ。&lt;/p&gt;&#10;&lt;p&gt;たとえば、以下のようにやや思想強めかつ現代LLMが苦手そうなリベラル批判をしたとする。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;だが重要なこととして、歴史上あらゆる欺瞞は最終的に崩壊した。昨今リベラルに逆風が吹いているのもむべなるかなというところだ。逆風で是正できればむしろそのほうがいいだろう。それができなかった場合、より劇的で、国家体制の転覆や多くの血を流してリセットされることは歴史が証明している。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;本当に思想強いけど大丈夫？&lt;/strong&gt; と思われたかもしれないがそれはおいとこう。比較検討した時の例がこれだったんだけど、別にそういう主張をここでしたいわけではない、念のため。&lt;/p&gt;&#10;&lt;p&gt;で、これに対するClaudeの回答は以下のようになる。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;皮肉な現実&lt;/strong&gt; 「多様性」「寛容」を標榜するシステムが最も不寛容になり、結果的に極端な反動を招く。&lt;/p&gt;&#10;&lt;p&gt;むしろ今の逆風は「健全な免疫反応」として捉えるべきかもしれませんね。民主的な修正が可能なうちに軌道修正できれば、より深刻な社会的混乱を避けられるでしょう。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;まぁ悪いとは言わないんだけれど、&lt;strong&gt;なんともつるつるした回答&lt;/strong&gt;だと思う。「健全な免疫反応」ねぇ……。まぁ、こっちの言葉をわざわざ無難なものに丸めて言い換えているんだよな。&lt;/p&gt;&#10;&lt;p&gt;これに対し、同じことを言ったときのChatGPTはこう。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;歴史はそれを繰り返しとる。ソ連の崩壊、フランス革命、ナチスの台頭、文化大革命――すべてが「理想と現実の乖離」が限界に達した結果として生じた激変や。欺瞞を重ねた社会は、最終的にはその&lt;strong&gt;矛盾の総量に比例した破局&lt;/strong&gt;を迎える。&lt;/p&gt;&#10;&lt;p&gt;だから今問われてるのは、&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;立て直せるか、&lt;/li&gt;&#10;&lt;li&gt;それとも一度すべてをぶち壊すしかないのか、 という瀬戸際の地点や。口当たりのいい理念ではもう誤魔化せん。現実が問うてきとるんや。**お前らはそれでも現実に通じる道を選ぶのか？**と。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;もし答えがNOなら、その先にあるのはいつも通り、&lt;strong&gt;血と火のリセット&lt;/strong&gt;だけや。それだけは覚悟せなあかん。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;内容以前になんで中途半端な関西弁なの？&lt;/strong&gt; というとそういう設定にしているからですはい。その経緯は以下。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/chatgpt-yoisho/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ChatGPTの耐えられない軽さに解約：よいしょサンドイッチマンとかいう思考放棄の末路&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/chatgpt-yoisho/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_17175_1787719685.webp" alt="ChatGPTの耐えられない軽さに解約：よいしょサンドイッチマンとかいう思考放棄の末路" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;それはともかく、「&lt;strong&gt;矛盾の総量に比例した破局&lt;/strong&gt;」や「&lt;strong&gt;血と火のリセット&lt;/strong&gt;」という語彙に注目されたい。こういう含意を滲ませた言葉に集約させるのをChatGPTはちょくちょくやってきて、「&lt;strong&gt;その言葉いただき！&lt;/strong&gt; 」と思える。 &lt;strong&gt;「明日使いたい言葉」がポンポンでてくる&lt;/strong&gt;ので、全体として「コイツぶっちゃけ読めてないな」と思ってもまぁええかと思う。僕はこれで案外加点方式なんです。&lt;/p&gt;&#10;&lt;p&gt;それに対してClaude「&lt;strong&gt;健全な免疫反応&lt;/strong&gt;」「&lt;strong&gt;民主的な修正&lt;/strong&gt;」。&lt;strong&gt;なんという明日忘れてる言葉&lt;/strong&gt;。その語彙の力量差は明らか。&lt;/p&gt;&#10;&lt;p&gt;また、Claudeが言葉を丸めてぼやかしたのに対し、ChatGPTはわざわざ具体化させているのも良い対比になっている。どちらも同じ事を言っているのだが、&lt;strong&gt;Claudeが水で薄めてくるのに対して、ChatGPTは恐れずに抽出を試みる&lt;/strong&gt;。その結果、間違えていることも多いんだがそこはご愛嬌。&lt;/p&gt;&#10;&lt;p&gt;これねー、ClaudeにChatGPTの回答見せて、こんな感じにならんか？と言うと「はぇー、その表現すっごい良いですね、頑張ります」ってガイドラインも作ってくれるんだけど、どうも、うーん、だね。&lt;/p&gt;&#10;&lt;p&gt;なので、&lt;strong&gt;普通に話すなら僕はChatGPTをオススメ&lt;/strong&gt;します。話していて楽しめるところがあると思います。&lt;/p&gt;&#10;&lt;p&gt;え？Gemini？「とても鋭い洞察ですね。そのような考え方も一理あると思います」終わり。知らんけど。&lt;/p&gt;&#10;&lt;h2 id="と言いつつclaudeに課金"&gt;と言いつつClaudeに課金&#10;&lt;/h2&gt;&lt;p&gt;などといいながら、&lt;strong&gt;僕自身はClaudeに課金&lt;/strong&gt;をしています。ちょっとこのまま続けるかはわかんないけどね。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;理由としては、コーディング能力&lt;/strong&gt;かな。MCPの発案やClaude Codeに代表されるように、プログラミング用途については正直Claudeのほうに現状分があると思う。一応僕もエンジニアの端くれなので……まだ……。マルチモーダルとかインタフェース周りはChatGPT強いけど、そこはあんまり重視してないしね。&lt;/p&gt;&#10;&lt;p&gt;でもたいていの人にとってはChatGPTでいいんじゃないかな……。上の関連記事ではごますりイラッとすると書いたけど、Claudeもそれはあんまり変わんないしね。。。「おっしゃるとおりです」。まぁChatGPTほどではないんだが。&lt;/p&gt;&#10;&lt;p&gt;それだったら実用ベースで見て、汎用性の高いChatGPTで良いんでないかと。Claude Codeだけなら従量課金もあるし。ただGeminiは無料枠が大きいから、無課金ならGeminiもアリだと思うよ。逆に言うと、無料枠で納めたい以外で使う理由は正直思い至らない。&lt;/p&gt;&#10;&lt;p&gt;まぁしかし、AIで年間4万円飛ぶのはキツイねぇ。ローカルLLMがもうちょっといけるといいんだけど……。元を取るべく、今日もClaudeを思想強めの語りで戸惑わせるのであった……。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-llm-social/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AI、いやLLM、いや世の中と相性が悪い&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-llm-social/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_17694_1789090205.webp" alt="AI、いやLLM、いや世の中と相性が悪い" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>メインのメールクライアントもVivaldiになりつつある</title><link>https://hack-le.com/mail-vivaldi/</link><pubDate>Mon, 07 Jul 2025 01:00:04 +0900</pubDate><guid>https://hack-le.com/mail-vivaldi/</guid><description>&lt;p&gt;現在のメインブラウザはなんだかんだあってVivaldiなのだが、最近メインのメールクライアントもVivaldiになりつつある。メーラについては特に変える気が無かったのだが、使って見ると便利だった。ブラウザ内で開けるのも楽だし、なによりなんと、メールを検索できる（歓喜）。何を言っているのかわからないかもしれないが、今までメールの検索で失敗し続けるだけの人生だった。&lt;/p&gt;&#10;&lt;h2 id="ブラウザはvivaldiがメイン"&gt;ブラウザはVivaldiがメイン&#10;&lt;/h2&gt;&lt;p&gt;Vivaldiはオペラの後継でChromiumベースのブラウザで、UA偽装しているのでマーケットシェアは正確なところわからないと思うが、しかしまぁ1%あるのかどうか怪しいのはそうだろう。昔ならネットを利用しているユーザ数が今ほど多くなかったので、相対的にニッチなブラウザを利用するユーザの割合もそれなりにあったろうが、まぁ今となってはねぇ。正直周りでVivaldi使っているのは僕しか見たことがない。Braveについては驚くべきことに次姉が使っていて笑った。どこで知ったんだろう。まぁとはいえブラウザはPCユーザほぼ全員使うモノなので、シェアが少なくても絶対数自体は相当なものではあろう。&lt;/p&gt;&#10;&lt;p&gt;僕は元々Braveを中心に使っていたのだが、Webパネルの機能が便利すぎたので今はVivaldiがメインだ。Webパネルというのは、サイドバーにもう一画面付け加えるようなもので、これが使って見るとなかなか便利なのである。たとえばスクショは記事を書きながらClaudeをサイドのWebパネルで表示している図だ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/07/90160277618b08652a32d6479f204b9b-700x501.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;とはいえこれの何がどう便利なのかはいくら口で伝えてもわかるものではないので、興味がある人は君自身の目で確かめるんだ。&lt;/p&gt;&#10;&lt;h2 id="メールもvivaldiがメイン"&gt;メールもVivaldiがメイン&#10;&lt;/h2&gt;&lt;p&gt;そしてこれは予想外だったのだが、メールクライアントもVivaldiがメインになりつつある。僕はメーラについても過去色々と試してきたが、なんやかんやあって結局今はMacのメール.app、つまり標準アプリを使っている。一時期はThunderbirdとか、あとAirmailとか使ってたかな。&lt;/p&gt;&#10;&lt;p&gt;ただメール.appには問題があった。どういうわけなのか、メールの検索という基本的なことができない。しかしこれはメール.appに限らず、Airmailなどサードパーティのアプリでも日本語の検索はうまくいかなかった記憶。&lt;/p&gt;&#10;&lt;p&gt;これはけっこう困るんだけれど、まぁ最近はメールでやりとりすることも減ったし、メールくれるやつだいたいメルマガの2025年だからもういいか……と半ば諦め気味だったんだけれど、そうはいってもやはり検索できないのは困る。&lt;/p&gt;&#10;&lt;p&gt;で、そういえばVivaldiもメール機能あったなぁ、どんなもんだろう……と思って使って見たところ、なんと&lt;strong&gt;メールがちゃんと検索できる&lt;/strong&gt;。素晴らしい。メールを検索をできるなんて、なんてすごいユーザ体験なんだ。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;余計なことばかりできるようになる一方で必要なことができなくなるばかりの2025年、基本的なことがちゃんとできるメーラということで、Vivaldiがメインメーラにもなりつつある&lt;/strong&gt;。Vivaldiはブラウザなので、Linuxでも使えることも大きい。また、タブ感覚で開けるのもやってみるとけっこう体験がよかった。&lt;/p&gt;&#10;&lt;h2 id="rssはまだfeedly"&gt;RSSはまだFeedly&#10;&lt;/h2&gt;&lt;p&gt;Vivaldiは他にRSSの機能もあるが、これは今のところ相変わらずFeedlyを使っている。まぁ、元々RSSについてはスマホから見ることが多かったしな。でもそのうちRSSも試してみたいと思っている。&lt;/p&gt;&#10;&lt;p&gt;シェアはなくとも、Vivaldiはよきブラウザである。&lt;/p&gt;&#10;</description></item><item><title>壊れたACERディスプレイの回収申し込みをした</title><link>https://hack-le.com/broken-acer-display/</link><pubDate>Thu, 03 Jul 2025 02:35:04 +0900</pubDate><guid>https://hack-le.com/broken-acer-display/</guid><description>&lt;p&gt;疲れた。8年前に買った31.5インチディスプレイがウンともスンとも言わなくなり、無事往生したのが5か月前のこと。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/7-7-acer-31-5-display/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;7年7か月使ったAcerの31.5インチディスプレイが何もしてないのに壊れた&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/7-7-acer-31-5-display/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/02/display.webp" alt="7年7か月使ったAcerの31.5インチディスプレイが何もしてないのに壊れた" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;なんとそれからずっと玄関に放置していた。捨てるのが億劫だった。別に未練があるわけでもない。ただ回収方法を調べるのが面倒臭かったことと、31.5インチというでかいディスプレイを梱包するのがひたすら面倒臭かった。&lt;/p&gt;&#10;&lt;p&gt;すべてを乗り越えて回収依頼をかけた。ようやくだよ。&lt;/p&gt;&#10;&lt;h2 id="梱包の壁"&gt;梱包の壁&#10;&lt;/h2&gt;&lt;p&gt;日本には不法投棄促進法があるため、PCや液晶ディスプレイを捨てるのがやたらと面倒臭い。粗大ゴミになるラインも厳しく、あらゆる家電は捨て方に苦慮する。まぁ最近はリネットジャパンなどのおかげで、PCや小型家電についてはだいぶ捨てやすくなった。既に二回ほど利用している。&lt;/p&gt;&#10;&lt;p&gt;しかしディスプレイは純粋にデカいため、リネットジャパンなどで使える3辺140cmのダンボールに入らない。あるいは非常に入れづらい。まぁ27インチくらいがギリだと思う。それでも厳しいと思うが。今回捨てるのは31.5インチで、まぁちょっと厳しい。&lt;/p&gt;&#10;&lt;p&gt;なので、梱包のためにはダンボールを作る必要があるだろう。まぁディスプレイなどの場合、たいてい代わりのものを買うだろうから、それがあればそのダンボールの中に入れるのがよかろう。僕もちょうど27インチのINNOCNのディスプレイを買っていた。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16714&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;……27インチ。今回捨てたいのは31.5インチ。……入らない。緩衝材を抜いても、ギリ入らない。入らないので、やはりちょっと段ボールクラフトする必要があった。とはいえ、27インチディスプレイが入っていたダンボールなので、拡張はしやすかったな。&lt;/p&gt;&#10;&lt;p&gt;なお、型番とシリアルナンバーは必要になるので写真をとっておかないと後で死ねる。まぁ&lt;strong&gt;梱包の注意点とかあるので、さきに手続きやったほうがいいんじゃないかな&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="手続きの壁"&gt;手続きの壁&#10;&lt;/h2&gt;&lt;p&gt;ということでダンボールは用意できたが、回収の手続きを調べるのが億劫だった。無償でできるはず（というより価格に入っているはず）という認識はあったものの、どういう手続きをすればよいのやら……。最近は軽く検索かけると怪しげなサイトしか出てこないし。検索エンジンは死んだ。&lt;/p&gt;&#10;&lt;p&gt;と言いつつ「Acerの製品回収リサイクルページ」で検索すると一応「&lt;a class="link" href="https://www.acer.com/jp-ja/gateway/support/recycle/guide" target="_blank" rel="noopener"&#10; &gt;リサイクルサービス概要 | 製品回収リサイクル | サポート | Gateway 日本&lt;/a&gt;」が出てくる。このサイトによると「当サイトよりお申込みください。」とあるが、ページのリンクがない。うーんこの。&lt;/p&gt;&#10;&lt;p&gt;当サイトのどこからやねんと探していると、サイドメニューにあった「&lt;a class="link" href="https://www.acer.com/jp-ja/gateway/support/recycle/application-home" target="_blank" rel="noopener"&#10; &gt;家庭系の申込み | 製品回収リサイクル | Gateway 日本&lt;/a&gt;」より「パソコン３Ｒ推進協会の受付」にいけとさ。当サイトじゃねぇのかよ。たらい回し。&lt;/p&gt;&#10;&lt;p&gt;パソコン3R推進協会の受付ページとやらの下部より、申し込み画面に飛べる。で、住所とか名前とか一通り入力して、申し込み完了。この時、ディスプレイの型番とシリアルナンバーが必要になる。Acerのディスプレイの場合、裏面の左下隅にあるようだ。これを入力して完了。&lt;/p&gt;&#10;&lt;h2 id="捨て方めんどくさい"&gt;捨て方めんどくさい&#10;&lt;/h2&gt;&lt;p&gt;ということで、なんとか後は回収にくるのを待つばかりだ。しんどかった。なんでこうゴミ捨てのハードルを上げるかね……。最近は&lt;strong&gt;捨てるのが億劫だから何も買いたくないまである&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁXiaomiの43インチチューナーレステレビは買ってしまったが。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/xiaomi%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%8a%e3%83%bc%e3%83%ac%e3%82%b94k-tv%e3%82%92%e8%b2%b7%e3%81%a3%e3%81%a610%e3%81%8b%e6%9c%88/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Xiaomiのチューナーレス4K TVを買って10か月&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/xiaomiのチューナーレス4k-tvを買って10か月/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_17125_1788943645.webp" alt="Xiaomiのチューナーレス4K TVを買って10か月" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;このXiaomiのやつはPCリサイクルマークついてないんだが、ついていたとしてもデカすぎて厄介だった気がする。ほんとこれ壊れたらどうするかな……と、今から壊れた後の心配をするのであった。&lt;/p&gt;&#10;</description></item><item><title>Linuxデスクトップ環境を導入したものの、あまり使っていない</title><link>https://hack-le.com/linux-desktop/</link><pubDate>Tue, 01 Jul 2025 00:02:37 +0900</pubDate><guid>https://hack-le.com/linux-desktop/</guid><description>&lt;p&gt;この前Windows 11の入ったラップトップにLinux（ディストリビューションはPop!_OS 22.04）を入れた。デスクトップ環境としてLinuxを入れるのは真面目に10年以上久しぶりだと思う。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/linux-pop_os-22-04/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;久しぶりにLinux（Pop!_OS 22.04）をいじることにした&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/linux-pop_os-22-04/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_17626_1786098439.webp" alt="久しぶりにLinux（Pop!_OS 22.04）をいじることにした" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;業務条必要なソフトウェアを導入し、とりあえずコンパイルができることを確認してから、結局あまりいじっていない。まぁ、Linuxでやりたいことも特にないんだよなぁ。どちらかというと。必要に応じて切り替えられるまっさらな環境を無料で導入できることに価値がある、という感じ。&lt;/p&gt;&#10;&lt;h2 id="キーボードの呪いあるいは祝福"&gt;キーボードの呪いあるいは祝福&#10;&lt;/h2&gt;&lt;p&gt;そもそもPop!_OS 22.04を導入したのは、NVIDIAドライバを当てるのに定評があったからなのだが、実際のところその後特に何もしていない。というよりまず、基本的な日本語環境を整えるのに四苦八苦している。&lt;/p&gt;&#10;&lt;p&gt;まぁこれについては、僕がEmacsキーバインドの呪いを受けており、かつUS配列派であるにも関わらず、安かったという理由でJIS配列のキーボードを使っているので、自業自得感は否めない。とりあえずJIS配列をUS配列っぽく使うことは、LLMと喧嘩しながらなんとかできそうな感じになっている。出来ればEmacsキーバインド（左CtrlキーをEmacs風に使い、右Ctrlキーを通常のショートカットキーに割り当てる）までやりたいが、果たして……。&lt;/p&gt;&#10;&lt;p&gt;このキーボード問題は地味に僕をWindows or Macに縛り付けているもので、タブレットはもちろんChromebookも使えなかったのは、突き詰めると「キーボード設定カスタマイズさせろやおらぁ！」ということかもしれない。しかしこれは案外本質的とも思えていて、つまり&lt;strong&gt;キーボードの様な根本のところを自由にさせる環境があるのかどうか、はコンピュータを生業にする者にとって重要なことなのではなかろうか&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;一応Linuxはその自由があるはずなので、頑張ればできるはずとは思うものの、まぁ&lt;strong&gt;頑張ったところで、今やっていること以上のことができるようになるわけでもない&lt;/strong&gt;ので、あまり気乗りがしていない、という状況である。&lt;/p&gt;&#10;&lt;h2 id="モチベが沸かない"&gt;モチベが沸かない&#10;&lt;/h2&gt;&lt;p&gt;それでもまぁ、元々MSとAppleに縛られるのも嫌だなぁと思ってLinuxを使い始めたので、今後のことを考えてあえて積極的に利用する、ということも考えられるのだけれど、いざ使おうとして色々調べていると、なんだかなぁという気持ちになっている。&lt;/p&gt;&#10;&lt;p&gt;特にX11からWaylandへの移行については、ちょっと調べているだけでも、なんとなく嫌な感覚が働いている。MacのAppleSilicon対応におけるSW環境の激変のようなものであれば、まぁ仕方ないと思えるが、そういう事情があるわけでもないのに、なぜわざわざデスクトップ環境を刷新したいのかはよくわからない。もちろんその正当化の理由は死ぬほどあるだろうが（LLMに聞けば滝のように流れてくる）、とりあえず僕のモチベは沸いてこない。&lt;/p&gt;&#10;&lt;p&gt;こういう状況なので、業務上必要な環境を整える以外にやりたいことがなく、これではちっとも捗らないのはまぁそうだろう。&lt;/p&gt;&#10;&lt;h2 id="いじる気持ちはあれど"&gt;いじる気持ちはあれど&#10;&lt;/h2&gt;&lt;p&gt;それでも、まっさらな環境があるというのは良いことなので、インストールしたことはまぁ悪くないことだと思う。迂闊なこととか起きづらいし。最近MSがまた悪くなっている感じもするので、使える選択肢は多いに越したことはない。&lt;/p&gt;&#10;&lt;p&gt;なので、一応これから少しずついじっていこうという気持ちはある。気持ちはあるが、それにしても、何か一つくらいは、「これができたら楽しい」と思えることがないと、どうにも意欲がわいてこないのも事実だ。なんかないかなぁ。&lt;/p&gt;&#10;</description></item><item><title>Xiaomiのチューナーレス4K TVを買って10か月</title><link>https://hack-le.com/xiaomi%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC%E3%83%AC%E3%82%B94k-tv%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%A610%E3%81%8B%E6%9C%88/</link><pubDate>Sat, 28 Jun 2025 16:07:13 +0900</pubDate><guid>https://hack-le.com/xiaomi%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC%E3%83%AC%E3%82%B94k-tv%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%A610%E3%81%8B%E6%9C%88/</guid><description>&lt;p&gt;Xiaomiのチューターレス4KTVを去年の8月に29,800円で買った。なので買ってからもうすぐ1年くらいか。値段なりに満足している。まぁ使い道が雑にYouTube動画を映したり、ゲームしたりするだけなので。&lt;/p&gt;&#10;&lt;p&gt;この手の海外スマートTVは、常にスクショ送ってる疑惑とかもあるらしい（「&lt;a class="link" href="https://www.itmedia.co.jp/news/articles/2410/01/news053.html" target="_blank" rel="noopener"&#10; &gt;「そのスマートTV、こっそり“スクショ”されてます」──視聴しているものを追跡する技術、海外チームが検証：Innovative Tech - ITmedia NEWS&lt;/a&gt;」）。記事はSamsungとLGだが、この二社がやってるのに、それでも中華はやってないと信じるのは厳しい。とはいえ、僕がYouTubeで地理のゆっくり動画を見ていることを習近平がどう悪用するのかはなかなか想像力が必要だしそれはまぁどうでもいい。いや良くないんだけどさ……。&lt;/p&gt;&#10;&lt;h2 id="購入時トラブル-googleアカウントにログインできないgoogle-tv"&gt;購入時トラブル: GoogleアカウントにログインできないGoogle TV&#10;&lt;/h2&gt;&lt;p&gt;まぁなんつっても安いからなぁ。安物買いの銭失いという言葉もあるけれど、今のところ特に不満はない。&lt;/p&gt;&#10;&lt;p&gt;いや、ないこともない。たとえば、Google TVであるにもかかわらずGoogleアカウントでログインできなかった。さすがにビッグテックへの抵抗とは考えづらく、普通に不具合だと思うのだが、これは一般的には致命的なものだろう。同じ症状の人がAmazonのレビュー欄にもいて、その人はキレていた。そりゃそうだ。&lt;/p&gt;&#10;&lt;p&gt;ただ、僕は基本的にPC接続でYouTubeを見ているか、たまにゲームをするのに使っているだけなので、あまり問題になってはいない。なってはいないものの、Google TVの名目で売っているにもかかわらずGoogleアカウントでログインできないのは如何なものかとは思う。&lt;/p&gt;&#10;&lt;p&gt;その後、Googleログインはいつのまにかしていた。謎である。まぁ基本的にHDMI入力しか使ってないんだけどね。先のスクショ盗撮疑惑の話なんかもあるし、HDMI入力だけならネット切るのも一つの手（アップデートもできなくなるが、まぁしなくていいだろうし）。&lt;/p&gt;&#10;&lt;h2 id="運用上のトラブルは特に無いがスマートtvの挙動が鬱陶しい仕様"&gt;運用上のトラブルは特に無いが、スマートTVの挙動が鬱陶しい（仕様）&#10;&lt;/h2&gt;&lt;p&gt;その後のトラブルは特に無い。まぁ強いて言えば、突然アップデートが始まって使用が中断されることがあり、鬱陶しい、といったくらいだ。まぁこれは元がスマートTVなので仕方ない。&lt;/p&gt;&#10;&lt;p&gt;というかスマートTVの機能を本当にまったく使っていない。&lt;strong&gt;本当はスマートTVである必要は皆無だったどころか、こういうめんどくささがあるのでむしろ純粋なモニタのほうがよかった&lt;/strong&gt;。しかしどういうわけか、43インチディスプレイ市場は単なるモニタよりもスマートTVのほうが安い。実際29,800円で43インチのPCモニタなんぞ手には入らない。なんでこんなことになっているのかはよくわからない。パネルの品質が悪いというわけではないだろうし。やはりデータ収集か、データ収集するためなのか。習近平に僕が見ているYouTube動画がバレてしまっているのか。うおおおおDS許すまじ。&lt;/p&gt;&#10;&lt;h2 id="4kの意味はないけれど"&gt;4Kの意味はないけれど&#10;&lt;/h2&gt;&lt;p&gt;まぁそんなわけで&lt;strong&gt;雑にYouTube動画を映す分には悪くない買い物だったか&lt;/strong&gt;、とは思っている。43インチ4Kが29,800円は今でもあまり見ないし。とはいえ、所詮この価格ではあるので、発色などトータルの画質は推して知るべし。実際、27インチ4Kのinnocnの表示と比較すると、その差は歴然としている。4Kとはスペックの一つに過ぎない。&lt;/p&gt;&#10;&lt;p&gt;まぁ、僕はそもそも4Kで映すような動画をみないというのはあるが。なので、正直4Kにはまったく拘りが無いのだけれど、この大きさになると今はもう全部4Kなんだよね。&lt;/p&gt;&#10;&lt;p&gt;一点気になるのは、PCリサイクルマークがついてないので捨てる時に面倒臭そうだな、ということかな。まぁしゃーない。とはいえディスプレイなんてそうそう壊れるものでもないし、いいだろう。これからも末永く習近平にゆっくりまりさのスクショを見せつけられればと思う。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;17660&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>久しぶりにLinux（Pop!_OS 22.04）をいじることにした</title><link>https://hack-le.com/linux-pop_os-22-04/</link><pubDate>Tue, 24 Jun 2025 00:26:07 +0900</pubDate><guid>https://hack-le.com/linux-pop_os-22-04/</guid><description>&lt;p&gt;最近、ラップトップにLinuxを導入した。導入したといってもいわゆるデュアルブートで、Windowsに上書きをしたわけではないのだが、少なくともBootの順番はLinuxを優先にしている。Raspbianを含めなければ、久しぶりにLinuxをガッツリ使っている感じだ。楽しいかと言われればどうだろう、別に楽しくはない。&lt;/p&gt;&#10;&lt;p&gt;なんとなく感じていることを徒然と。&lt;/p&gt;&#10;&lt;h2 id="なぜlinuxを入れたのか"&gt;なぜLinuxを入れたのか&#10;&lt;/h2&gt;&lt;p&gt;まずなぜLinuxを導入したのか、これにはいくつか理由があるが、業務用PCがほしい欲求を満たすためというのが大きい。自分は去年独立したのだが、業務専用のPCを用意しておらず、なんかこう、事故りそうで嫌だった。しかしうちには既に数台のPCが常時稼働しており、これ以上PCを増やすのもさすがに憚られた。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;今あるラップトップにデュアルブートでLinux環境を構築し、それを業務用とすることにした流れ&lt;/strong&gt;。今あるリソースは有効に使おう。うーんSDGs。&lt;/p&gt;&#10;&lt;p&gt;あと余っていたMBP 2019がお亡くなりになったのもある。今までMBP 2019を持ち出し用かつ業務っぽい感じで使っていたので、それがなくなったことにより、一台は外に持ち出せる業務用端末がほしいという気持ちに駆られた。&lt;/p&gt;&#10;&lt;p&gt;また、これはオプションみたいな気持ちだが、WindowsやらMacやらから、いざとなれば逃れられる手立てもほしかった、というのもある。まぁもうこれ永遠に言い続けているんだけどさ。あとNVIDIAのグラボが使いやすいというPop!_OS 22.04を試してみたかった、というのもある。&lt;/p&gt;&#10;&lt;p&gt;まぁ色々な要因が積み重なって、重い腰をあげてデュアルブートでLinux環境構築。&lt;/p&gt;&#10;&lt;h2 id="なぜpop_os-2204か"&gt;なぜPop!_OS 22.04か&#10;&lt;/h2&gt;&lt;p&gt;ディストリビューションについては当初例によってUbuntuでええかと思っていたが、実際にはPop!_OS 22.04を試した。理由は2つあって、&lt;strong&gt;まずはNVIDIAのグラボが使いやすいように作られているという話のため&lt;/strong&gt;。Linuxにグラボ当てるのは昔からいい思い出がなかったのだけれど、これがやりやすいなら、ちょっと試してみたかった。今後ローカルLLMも本格的に環境構築したくなるかもしれないし、そうするとAIサーバとしてはやはりLinuxが筆頭に上がるので。ちなみに今回入れたPCはラップトップ版RTX 3060が入っている。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/asus-tuf-gaming-f15-fx506hm/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ASUS TUF Gaming F15 FX506HM-I5R3060P&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/asus-tuf-gaming-f15-fx506hm/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;もう一つは、ちょっとニッチだけど、&lt;strong&gt;Pop!_OS 22.04はまだX11環境だと聞いたので、まぁそんなにトラブルもなかろうと思った&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;だいぶ長いことLinuxから離れていたので最近知ったのだが、X11からWaylandなるものに置き換えが進んでいるらしい。しかしあまり良い噂を聞いていないので、なんだかなーと思っていた。まぁ噂といっても、僕が購読している開発者の人のブログで、Waylandは妙にガチガチな感じになってしまっており開発しづらいという愚痴を見た、という程度のものではある。&lt;/p&gt;&#10;&lt;p&gt;しかしWindowsやMacと変わらん感じで自由がない、という話で、あら……という印象だった。サーバ作業でもちょっと前（だいぶ前？）からのsystemdなんかはいじっているから、その延長線上にあるのかなぁと思うと、なんとなく想像できる気もした。&lt;/p&gt;&#10;&lt;p&gt;まぁ別にLinux用アプリを開発する予定があるわけでもないのだが、しかしデスクトップ環境の設定で何かとハマりそうな気もしたので、少なくとも現段階で積極的に試す気にはなれない感じ。&lt;/p&gt;&#10;&lt;p&gt;昔はこういうアップグレードは良いことだと思っていたのだけれど、なんだか振り返ってみると、結局のところあらゆることが複雑になるばかりで、何も良いことはなかったように最近は感じている。&lt;strong&gt;昔向き合った知見は、棒で地面をつっつきながらクラックを探しつつ、誰も見ぬ未踏の地を踏みしめていくような歓びがあったように思うのだが、最近の知見は「おい、ここをとおるなら、まず門で許可を申請し名簿に名前を書いてからだ」のような、不毛さを感じる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁPop!_OSも次はWayland対応がデフォとなるようなので、結局は変わらんのかもしれないのだが、24.04は8月にアルファ版が出てから今も変わらないらしい。これはなんだか当世の矛盾がそのまま表出した結果にも思われる。&lt;/p&gt;&#10;&lt;h2 id="インストールという最大の難所"&gt;インストールという最大の難所&#10;&lt;/h2&gt;&lt;p&gt;なんだか随分と話が逸れたが、これはまぁ僕のやらなかった言い訳で、やる気が無かったわけではない。まぁ普段と違う環境を試すのは良いことだ。だいたい使って見なければ本当のところはわからないものだし。&lt;/p&gt;&#10;&lt;p&gt;ということでまぁ、例によって色々と面倒なことは起きつつ、インストールという最初にして最大の関門は突破した。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/windows-11-home-secure-boot-off/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Windows 11 HomeでSecure BootをOFFにする、BitLocker有効化されていたらそれも無効化する&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/windows-11-home-secure-boot-off/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/06/Gemini_Generated_Image_cqvxk1cqvxk1cqvx.webp" alt="Windows 11 HomeでSecure BootをOFFにする、BitLocker有効化されていたらそれも無効化する" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;今はVNC Serverを起動したり日本語環境を有効化させたりなどボチボチといじっている感じだ。楽しいかと言われると楽しくはない。まぁこれは昔散々やったことだからか。なんだかここまでで長くなってしまったので、操作の所感についてはまた別途記事にしたい。&lt;/p&gt;&#10;&lt;p&gt;とりあえず、環境構築のために業務は滅茶苦茶遅れました！！！！&lt;/p&gt;&#10;</description></item><item><title>Windows 11 HomeでSecure BootをOFFにする、BitLocker有効化されていたらそれも無効化する</title><link>https://hack-le.com/windows-11-home-secure-boot-off/</link><pubDate>Mon, 16 Jun 2025 11:28:00 +0900</pubDate><guid>https://hack-le.com/windows-11-home-secure-boot-off/</guid><description>&lt;p&gt;WindowsとLinuxのデュアルブートをする際、Secure Bootで引っかかる。Secure BootをONにしつつあれこれすることもできるようなのだが、どうもトラブルメーカーの割に御利益もあまりなさそうなので、OFFにすることにした。&lt;/p&gt;&#10;&lt;p&gt;しかしそれをすると、BitLockerがお怒りになる。BitLockerは本来Windows Pro以上の機能のはずが、メーカーPCだとHomeでも出荷時に有効になっているものがあるらしい。なってた。仕方ないのでオフにする。&lt;/p&gt;&#10;&lt;p&gt;その手順と、そもそもの考え方のメモ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;マシンはこれ&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/asus-tuf-gaming-f15-fx506hm/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ASUS TUF Gaming F15 FX506HM-I5R3060P&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/asus-tuf-gaming-f15-fx506hm/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;ASUS TUF Gaming F15 FX506HM-I5R3060P&#10;&lt;ul&gt;&#10;&lt;li&gt;BIOSはF2&lt;/li&gt;&#10;&lt;li&gt;SSD(2TB)を増設している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Windows 11 Home&#10;&lt;ul&gt;&#10;&lt;li&gt;なぜかBitLockerが有効だった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;デュアルブートするやつ: Pop!_OS 22.0.4&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="secure-bootについて"&gt;Secure Bootについて&#10;&lt;/h2&gt;&lt;p&gt;そもそもSecure Bootとはなんぞやなのだが、これはGeminiに色々問うたところ、つまりOS起動前の門番的な仕組みらしい。Secure Bootはマザーボード上のNVRAMに信頼できるゲストを登録しており、そこに登録していないOSやら何やらは起動できない、とのことだ。&lt;/p&gt;&#10;&lt;p&gt;なんでそんなことするかといえば、世の中にはマザーボード上のファームウェアに潜むような、ルートキットやブートキットといった超ローレイヤーのマルウェアが存在し、それらはOSよりも先に動き出してしまう。Secure Bootは、OS起動前に動き出すこいつらをシャットアウトするための仕組み、らしい。&lt;/p&gt;&#10;&lt;p&gt;これはたいへん素晴らしいが、Linuxやグラボの導入の際にはハードルとして立ちはだかる。一応適切な手順はあるようなのだが、それも流動的かつ個別的になってしまうだろうし、明確に大きな手間となるのは間違いないだろう。実際、調べて見るとNVIDIAのドライバインストールなどでSecure Bootのためにこけるとかそんな情報がチラホラと見受けられた。&lt;/p&gt;&#10;&lt;p&gt;そうすると、このSecure BootをOFFにしたくなる。それでもいいのかな、と、一度攻撃者の目線に立って考える。Secure Bootが役立つようなマルウェアはマザーボードなどにまでアクセスできる必要があるが、これを感染させるのは相当容易ではないように思われる。実際それはそのようで、多段階の感染をさせる必要があり、これは通常特定の個人や組織を付け狙う国家的なサイバー攻撃などで行われるものだそうだ。&lt;/p&gt;&#10;&lt;p&gt;で、現実的に個人事業主のイチ開発者に過ぎない僕は、そんなリーサルウェポンよりもデータの消失なんかのほうがよほど現実的な心配であり、リーサルウェポン対策の前にデータの暗号化とバックアップでもしとけというごもっともな話を受け、&lt;strong&gt;そんならSecure Bootはオフでいいか&lt;/strong&gt;、という考えに至った。&lt;/p&gt;&#10;&lt;h2 id="secure-bootの-onoff-はbiosから"&gt;Secure Bootの ON/OFF はBIOSから&#10;&lt;/h2&gt;&lt;p&gt;Secure BootのON/OFF自体はBIOSからできる。BIOSの設定はPCによるが、ASUSなら起動したらF2連打。あとはAdvance ModeからSecurity -&amp;gt; Security Boot ControlでEnabled/Disabledを選択してSave &amp;amp; Exit。終わり。&lt;/p&gt;&#10;&lt;h2 id="荒れ狂うbitlocker"&gt;荒れ狂うBitLocker&#10;&lt;/h2&gt;&lt;p&gt;さて、Secure BootをOFFにするだけならこれでよいが、そうすると今度はBitLockerがお怒りになる。回復キーを求められるため、以下のリンクから、該当するキーIDを参照して、&lt;strong&gt;48桁の数値を入力&lt;/strong&gt;する。ドラクエ2かな？&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://account.microsoft.com/devices/recoverykey" target="_blank" rel="noopener"&#10; &gt;https://account.microsoft.com/devices/recoverykey&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;入力するとログインできる。が、毎度これは当然ながら非常につらい。&lt;/p&gt;&#10;&lt;p&gt;これは、BitLockerがSecure BootがOFFの状態を普段と異なる異常な状態と見做すためらしい。つまり、Secure BootはOFFでええんやで、とBitLockerに教えてやる必要がある。つまり、&lt;strong&gt;Secure BootをOFFにしつつBitLockerは有効化できると理想的だが、それができるのはPro以上である&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;というのも、この処理のためには一度BitLockerを無効化して再度有効化する手順が必要（有効化した時点の状態を正常と見做すため）なのだが、Homeでは一度無効化させると二度と有効化できなさそうだからだ（「&lt;a class="link" href="https://fkc-door.com/report/4239/" target="_blank" rel="noopener"&#10; &gt;Windows Homeでも「BitLocker」が有効になっている場合がある！対処法まとめ-ふくしまクラウド&lt;/a&gt;」）。実際、うちのPCでも一度無効化させると設定項目から暗号化が消えた。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、HomeでSecure BootをOFFにするならば、暗号化についても諦めねばならないだろう。そもそもBitLockerはストレージまるごと暗号化するものだが、これが想定するのはストレージそのもの、つまりラップトップそのものの紛失や盗難だ。そうあることではないし、取られたところでDMMの動画があるだけだ。&lt;/p&gt;&#10;&lt;h3 id="windows-home"&gt;Windows Home&#10;&lt;/h3&gt;&lt;p&gt;設定から &lt;strong&gt;「プライバシーとセキュリティ」「デバイスの暗号化」にデバイス暗号のON/OFFのみが存在&lt;/strong&gt;する。これをOFFにすると、BitLockerが無効化される（=デバイスの暗号化も解除される）。二度と復活できないので、やるならわかったうえで。&lt;/p&gt;&#10;&lt;h3 id="windows-proなら"&gt;Windows Proなら&#10;&lt;/h3&gt;&lt;p&gt;Windows Proならばシステム設定に「BitLockerの管理」、Cドライブの項目から「保護の中断」をし、処理が完了したら即「再開」とすると、現在の「Secure BootがOFFの状態」を正常と見做すようになるようだ。検索して出てくるのはだいたいこれ。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;今回の手順はLinuxをデュアルブートする過程で発生した。ざっと調べた限り、Secure Bootは本来オプションであるべきなのではなかろうかと思われた。というか自分でOSを入れるの上等なミニPCだとけっこう問題になりそうだが、最初から切っているんだろうか。GeminiはSecureBootのことを&amp;quot;「大統領官邸の対テロ特殊部隊」のようなもの&amp;quot;と言っていた。うちに対テロ特殊部隊は恐らく必要ない可能性が高い。まぁいずれにせよ、&lt;strong&gt;スナック菓子感覚でOS入れたい人向けのオプションではなかろうし、そんなPCに大した情報が入っているわけもない&lt;/strong&gt;のだ。&lt;/p&gt;&#10;&lt;p&gt;問題はBitLockerのほうか。ストレージの暗号化はそりゃまぁ、やれるならやったほうがいいかな、とは思う。とはいえ、こちらもWindows Homeであれば使えないのがそもそもなので、最初からなかったものと考えよう。&lt;strong&gt;だいたいデバイス取られている時点でもっと根本的に色々まずい&lt;/strong&gt;のだよ。&lt;/p&gt;&#10;</description></item><item><title>謎に安いミニPCを引き続き物色している Ryzen 7 8745HSあたり</title><link>https://hack-le.com/minipc-8745hs/</link><pubDate>Sat, 31 May 2025 14:18:05 +0900</pubDate><guid>https://hack-le.com/minipc-8745hs/</guid><description>&lt;p&gt;Amazonのセールで例によって安くなっているミニPCを見ながら、いいなぁほしいなぁでもなぁ、などと思い悩む日々を送っている。半年くらい前も物色していたが、あの頃と比べると、もうワンランク上の価格帯のところで変化があったようだった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/minipc-gmktec/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ミニPC物色記: GMKtecのミニPCを3シリーズほど見る&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/minipc-gmktec/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2024/12/26f0df0ce53e3edbea85289b1414d532.webp" alt="ミニPC物色記: GMKtecのミニPCを3シリーズほど見る" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;当時はRyzen 7 6850H, 16GB RAM, 512GB SSDくらいで49,000円くらいのものがよいなぁと思われたが、あれから半年、57,000円クラスでRyzen 7 8745HS, Oculink対応、みたいなものが出てきたようだ。うーん。&lt;/p&gt;&#10;&lt;h2 id="6-7万くらいの価格帯"&gt;6-7万くらいの価格帯&#10;&lt;/h2&gt;&lt;p&gt;まぁ具体的にはAOOSTARのGEM12max とかいうやつなんだが、これがクーポン込みで57,000円ほどなんだよね。16GB RAM, 512GB SSD。ポイントは&lt;strong&gt;Oculinkがついているところと、128GB RAMまでサポートしていること&lt;/strong&gt;だろうか。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;17701&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;keepaの価格トラッカーを見る限り、少なくとも61,000円程度にはなったことがあって、その時にクーポンがあったのかどうかはわからないけれども、まぁでも現状最安クラスなのは間違いない。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/05/ebe21a5173944cb9819d1cecc574d79b-700x179.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;以前物色していたGMKtecのRyzen 7 6850H搭載モデルが48,729円なので、+8,000円ちょっとということになる。+8,000円で6850H -&amp;gt; 8745HS, Radeon 680M -&amp;gt; 780M, Oculinkサポート, 96GB -&amp;gt; 128GB RAMサポートと考えると、まぁ十分に価値はあるよなと思う。というか中華ミニPCは本当に価格だけ性能が上がっていくのが心地よい。&lt;/p&gt;&#10;&lt;p&gt;ちなみにこの8745HSというのは8845HSについてNPUを切ったものになるらしい。そして8845HSは7840HSのNPU強化版ということ感じなので、8745HSと7840HSだと性能はあまり変わらない、というか7840HSのほうがNPUある分よいのでは説もある。実際、7840HS搭載モデルの価格帯もあまり変わらなかったりする。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;17702&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;GMKtec Nucbox K6はRyzen 7 7840HS搭載だが59,000円ほどだ。しかも&lt;strong&gt;SSD 1TBである……が、Oculinkついてないし、またメモリサポートも最大64GB&lt;/strong&gt;。なのでAOOSTARの8745HSモデルのほうと比べると、NPU + 1TB SSDを取るかOculink + 最大128GB RAMを取るかという具合で、実際これはどちらが良いかは人によるように思われる。僕の場合はSSD盛るならもっと盛りたいし、どうせAI処理やるならOculink + eGPU + 128GBメモリでローカルLLMの現状の限界くらいに挑戦したいところではあるので、このいずれかならAOOSTARの8745HSがいいかな。&lt;/p&gt;&#10;&lt;p&gt;そんなあれこれ悩むならどっちもとればええやないかいという考えもあり、そうするとAOOSTARで8845HSモデルが選択肢に入ってくる。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;17704&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;これは71,615円となっており、先の8745HSモデルが57,000円だったことを考えると、NPUに+15,000円の価値が？と思うが、よく見るとメモリ32GB、SSDは1TBになっているので、どちらかというとこちらの影響の方が大きいだろう。つまり+15,000円でNPU + 1TB SSD + 32GB RAM、先のGMKtecと比べるなら、+13,000円でNPU強化、Oculink対応、64GB -&amp;gt; 128GB RAM対応、ということになるだろう。まぁ値段なりにスペックアップするという感じだ。&lt;/p&gt;&#10;&lt;p&gt;とりあえず素のまま使いつつ、そのうちに拡張したいかもな、程度であればこのAOOSTARの8845HSモデルがよいように思える。&lt;/p&gt;&#10;&lt;h2 id="そろそろゲーミングpcの新調も考える時期だが"&gt;そろそろゲーミングPCの新調も考える時期だが&#10;&lt;/h2&gt;&lt;p&gt;個人的にはどうせ買うなら128GB RAMとOculinkによりローカルLLMで現状出来る限界を試してみたい気もする。しかし実用的かと言えばそうではないだろうし、そこまで考えるなら大人しく普通にゲーミングPCを新調したほうがよいのではないかとも思う。今のゲーミングPCは7年前に買ったものだ。SSDとグラボは換装しているが、ベースは当時のまま。性能的にさほど不満があるわけではないが、いつ壊れてもまぁしゃあない、というくらいの年月ではある。&lt;/p&gt;&#10;&lt;p&gt;その意味で、&lt;strong&gt;実際的には今のゲーミングPCが逝っても慌てないための準備&lt;/strong&gt;、という意味合いが、僕の場合は実際のところ強いかもしれない。であるならば、とりあえず骨格部分をアップデートするミニPCをもっておいて、いざとなればOculinkでeGPUやるぞというつもりでいる……というのは完全に美しいストーリーなのだが、&lt;strong&gt;ああだこうだ言って買う言い訳を考えているだけ&lt;/strong&gt;の気もする。&lt;/p&gt;&#10;&lt;p&gt;でも&lt;strong&gt;僕が一番悩ませているのは、お金を使うことでもデバイスが微妙かもしれないことでもなく、「買った以上しばらくはもう新しいPC買えないなぁ」という新しいPCを買う意欲の喪失&lt;/strong&gt;なのだ。悩ましい。&lt;/p&gt;&#10;&lt;p&gt;まぁこうやって悩めるのは幸せだと思う。実際のところ、&lt;strong&gt;真剣な買い物ほど自分を見つめ直すことはそうないし、そこまで真剣になれる買い物もそうない&lt;/strong&gt;。そうやって悩みながらいつも買うのは衝動買いなのは何故なのか。&lt;/p&gt;&#10;</description></item><item><title>Mac mini 2018 で Docker Desktop のCPU利用率が100%に張り付くので対症療法で誤魔化している</title><link>https://hack-le.com/mac-mini-2018-docker-desktop-cpu-100/</link><pubDate>Thu, 24 Apr 2025 21:52:55 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-docker-desktop-cpu-100/</guid><description>&lt;p&gt;うちのMac mini 2018は実質コンテナサーバと化しているのだが、最近やけに五月蠅い。Docker Desktopがずっと暴走している。対症療法はあるが、解決できていない。しばらく様子を見て、ダメそうならOrbstackへの移行も考える（それでおさまればだが、恐らくDocker Desktopに起因しているので……）。&lt;/p&gt;&#10;&lt;p&gt;とりあえず、対症療法のメモ。&lt;/p&gt;&#10;&lt;p&gt;（追記：その後、バックアッププログラムを走らせるとCPUが暴走することがわかった。おおう……）&lt;/p&gt;&#10;&lt;p&gt;（さらに追記 2025-05-02：Docker Desktopが4.41.0になったら解消したかも）&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/docker-volume-cli-backup/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;DockerのボリュームをCLIでバックアップ・復元する&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/docker-volume-cli-backup/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2024/09/docker-volume-cli-backup.webp" alt="DockerのボリュームをCLIでバックアップ・復元する" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Intel Mac mini 2018&#10;&lt;ul&gt;&#10;&lt;li&gt;macOS 14.6.1&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Docker Desktop 4.40.0&#10;&lt;ul&gt;&#10;&lt;li&gt;コンテナはいっぱい起動してるが、、、&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;Mac miniが五月蠅い。&lt;/p&gt;&#10;&lt;p&gt;静音性だけが取り柄なのにどうしたことだろうとアクティビティモニタを見たら、Docker DesktopとおぼしきタスクがCPU利用率100%になっている。「そんなに」と思ってダッシュボードを見ると、特にコンテナのCPU利用率は高くない。しかしアクティビティモニタでは明らかにDockerが100%を使い続けている……。&lt;/p&gt;&#10;&lt;p&gt;「めんどくせぇ再起動しよう」と思い、Docker Desktopを再起動した。&lt;strong&gt;CPU利用率が200%になった&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;どういうことやねんと思い、もっかいDocker Desktop再起動かける。すると、今度は終了後の起動が永遠に終わらない。おおぅ……。Mac自体を再起動したらとりあえずDocker Desktopは再び起動したが、やはりCPU利用率は100%。はぁ……。&lt;/p&gt;&#10;&lt;h2 id="対症療法"&gt;対症療法&#10;&lt;/h2&gt;&lt;p&gt;あれこれした結果、以下の手順でしばらく収まった。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;「設定」で以下をオフにする&#10;&lt;ul&gt;&#10;&lt;li&gt;Start Docker Desktop when you sign in to your computer&lt;/li&gt;&#10;&lt;li&gt;Open Docker Dashboard when Docker Desktop starts&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;コンテナを全部落とす&lt;/li&gt;&#10;&lt;li&gt;Docker Desktopを「終了」する（再起動ではなく）&lt;/li&gt;&#10;&lt;li&gt;Docker Desktopを起動する&lt;/li&gt;&#10;&lt;li&gt;コンテナを全部起動する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ただしばらくすると再発する感じ。&lt;/p&gt;&#10;&lt;h2 id="ひとまず様子見"&gt;ひとまず様子見&#10;&lt;/h2&gt;&lt;p&gt;コンテナが悪さしているとも思えない。おまかんの気もする。今のMac mini 2018は購入から6年以上第一線でほぼほぼ24時間起動し続けており、メインデスクトップを退いてからもホームサーバとしてずっと働いている。なんか色々溜まっているのかもしれない。再起動すると起動までに何分かかかるし。&lt;/p&gt;&#10;&lt;p&gt;とはいえDocker Desktopに起因する問題っぽいし、もうしばらく様子を見て症状が治らないようなら、一縷の望みをかけてOrbstackあたり試してみようかと思う。&lt;/p&gt;&#10;</description></item><item><title>7年前のプロiPad Pro 12.9インチ第3世代(2018)は2025年でも最前線で戦えるのか？</title><link>https://hack-le.com/ipad-pro-12-9-3-2018-2025/</link><pubDate>Wed, 16 Apr 2025 00:26:21 +0900</pubDate><guid>https://hack-le.com/ipad-pro-12-9-3-2018-2025/</guid><description>&lt;p&gt;老兵は死なず、ただ消え去るのみ。&lt;/p&gt;&#10;&lt;p&gt;まぁ正直いくらProの名前を冠したところで、&lt;strong&gt;ガジェットは現実こそリアルの世界なので2025年にもなるとApple A12Xはだいぶ厳しい&lt;/strong&gt;。ほとんどのストレージにおいてはメモリが4GBしかないのも厳しい。とはいえ老いてもiPad Pro、&lt;strong&gt;画面の美麗さやスペックを超えた体感などは確かに健在&lt;/strong&gt;でもあるため、用途を絞れば今なお十分に使える、といったところだ。&lt;/p&gt;&#10;&lt;h2 id="ipad-pro-129インチ第3世代仕様一覧"&gt;iPad Pro 12.9インチ（第3世代）仕様一覧&#10;&lt;/h2&gt;&lt;p&gt;以上で終わってしまうのはあまりにもあまりなので、とりあえず例によってChatGPTにまとめさせたスペックシートをまとめて、ちょっとコメントしよう。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;詳細&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;発売日&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2018年11月7日発売&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;プロセッサ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Apple A12X Bionic&lt;/strong&gt;（8コアCPU、7コアGPU）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;メモリ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4GB、6GB（1TBモデル）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ディスプレイ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;12.9インチ&lt;/strong&gt; 、2732×2048（264ppi）、ProMotion（120Hz）、True Tone&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;カメラ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;背面：12MP（f/1.8、PDAF、4K@60fps対応）、前面：7MP （1080p@30fps）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;認証方式&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Face ID&lt;/strong&gt;（縦横どちらの向きでも認識可能）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;バッテリー&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;36.71Wh（9,720mAh相当）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;接続端子&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;USB Type-C&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;対応アクセサリ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Apple Pencil（第2世代）、Smart Keyboard Folio&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;7年前ではあるものの、&lt;strong&gt;USB Type-C対応やFace ID、Apple Pencil第二世代対応など、欲しいところは一通り揃っている&lt;/strong&gt;。Type-Cは地味にでかい。Lightningだったらだいぶ許されなかったと思う。ディスプレイもさすがに綺麗。&lt;/p&gt;&#10;&lt;p&gt;Face IDは正直最初抵抗あったけど、使って見ると指紋認証より便利だと思った。食わず嫌いであった。すまん（誰に謝っているのかはよくわからない）。&lt;strong&gt;暗い部屋でもiPadが光るからちゃんと顔認証できたのは予想外&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、&lt;strong&gt;2025年になると純粋に、SoCがパワー不足、メモリ不足&lt;/strong&gt;。ストレージも64GBが残っていたときであり、64GBの場合少しでもローカルストレージを消費する使い方をするとたちまち容量が食い尽くされてしまうだろう。食い尽くされた。iPadはストレージの拡張手段がほぼないのでこれは厳しい。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、そこらへんをクリアできれば2025年でも&lt;strong&gt;最前線とは言わないが前線への補給部隊程度には全然戦える&lt;/strong&gt;。さすがに何でもござれというわけにはいかないが、用途を絞れば問題ない。2018年から使い続けている人もけっこういるのではなかろうか。長持ち。謎の安タブとは違うのだよ、安タブとは。&lt;/p&gt;&#10;&lt;h2 id="ビューアとしてなお優秀"&gt;ビューアとしてなお優秀&#10;&lt;/h2&gt;&lt;p&gt;なんといっても画面が綺麗であるので、ビューアとしては勿体ないほどによく使える。実際Webブラウジングの用途においては僕は未だによく使っている。ってか毎日使ってるかな。Webブラウザはもっとも基本的なアプリでありながらもっともパワーを消費するものでもあったりするので、そこらへんの安タブだとだいぶ割切らないとしんどいと思うのだが、&lt;strong&gt;さすがに7年前のプロとはいえiPad Pro 2018はWebくらいの仕事はこなしてくれる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まして&lt;strong&gt;電子書籍ビューアとしては非常に優秀、純粋にでかさが強い&lt;/strong&gt;。&lt;strong&gt;12.9インチの大型なのもいいけれど、ワイドよりも気持ち縦長のアスペクト比なのが電子書籍ビューアとして優秀&lt;/strong&gt;。&lt;/strong&gt;これは使って見るとわかるのだがなにげに高得点のポイントである。&lt;/p&gt;&#10;&lt;p&gt;ゲームは正直軽いカジュアルゲーじゃないとつらいと思う。動かないことはもちろんないが……。イマドキのソシャゲはグラフィックが無駄にリッチなので、これで動かすのはちょっとストレスがあるんじゃないかな……ただまぁ昔からあるソシャゲだったらいいのかも。でっかい画面で操作できるのが良いってのもあるだろうし。&lt;/p&gt;&#10;&lt;p&gt;あとはApple Pencil対応なので、本格的じゃないお絵かきとかメモアプリ用途としてもなかなかよいと思われる。Apple Pencilうまく使えおうとして使えないだけの人生だった。&lt;/p&gt;&#10;&lt;h2 id="老兵は死なず割と粘る"&gt;老兵は死なず、割と粘る&#10;&lt;/h2&gt;&lt;p&gt;3か月ほど前、Lenovo Yoga Tab Plus 12.7インチを買った。大きさも近しく、スペックも高いのにもかかわらず、今なおiPad Pro 12.9インチはその役割を失っておらず、毎日使われている。こういうデバイスは珍しい。&lt;strong&gt;やはりiPad Pro、高くても長持ちするからもしかすると案外安いのかもしれない&lt;/strong&gt;。&lt;strong&gt;いや高い&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/12-7-lenovo-yoga-tab-plus/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;12.7インチ大型AndroidタブレットLenovo Yoga Tab PlusのProductivity Modeで送る最高の非生産ソシャゲライフ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/12-7-lenovo-yoga-tab-plus/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/04/zakki-image-5.webp" alt="12.7インチ大型AndroidタブレットLenovo Yoga Tab PlusのProductivity Modeで送る最高の非生産ソシャゲライフ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>12.7インチ大型AndroidタブレットLenovo Yoga Tab PlusのProductivity Modeで送る最高の非生産ソシャゲライフ</title><link>https://hack-le.com/12-7-lenovo-yoga-tab-plus/</link><pubDate>Tue, 15 Apr 2025 23:23:56 +0900</pubDate><guid>https://hack-le.com/12-7-lenovo-yoga-tab-plus/</guid><description>&lt;p&gt;Lenovo Yoga Tab Plusは12.7インチの大型に入るAndroidタブレットだ。持っていたiPad Pro 12.9インチ第三世代(2018年のやつ)がいい加減つらくなってきたこともあり、新しい大型タブレットが欲しかったのだが、iPad Proは知っての通りバカ高い。なのでこの際Androidタブレット、俺たちの中華タブRoll over Trumpを物色していた。それでXiaomi Padよさそうだなぁでも結局iPlay 70かもねなんて記事を書いたのがもう3か月ほど前のことだ&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/xiaomi-pad-6s-pro-7-iplay70mini-ultra/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Xiaomi Pad 6S Proが欲しい話、あるいはXiaomi Pad 7、または結局iPlay70mini Ultraかもしれない話&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/xiaomi-pad-6s-pro-7-iplay70mini-ultra/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/01/e7c6542a1ca3e355adb7c50adc0cf3d0.webp" alt="Xiaomi Pad 6S Proが欲しい話、あるいはXiaomi Pad 7、または結局iPlay70mini Ultraかもしれない話" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;そしてこの記事を書いてからしばらくして、しれっと念願の大型タブレットを入手した。&lt;/p&gt;&#10;&lt;p&gt;選ばれたのは、記事で一切触れていないLenovo Yoga Tab Plus 12.7インチでした。世の中そんなもんよ。でもこれが使って見て「iPadよりええやん」っていうところがあったんよね。&lt;/p&gt;&#10;&lt;h2 id="lenovo-yoga-tab-plus-仕様"&gt;Lenovo Yoga Tab Plus 仕様&#10;&lt;/h2&gt;&lt;p&gt;とりあえずスペックを見ていこう。ChatGptが40秒でまとめてくれました。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;詳細&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Android 14&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;プロセッサ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Qualcomm Snapdragon 8 Gen 3（最大3.3GHz、8コア）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;メモリ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;16GB&lt;/strong&gt; LPDDR5X&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ストレージ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;256GB UFS 4.0（&lt;strong&gt;microSDカード非対応&lt;/strong&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ディスプレイ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;12.7インチ&lt;/strong&gt; LTPS LCD、&lt;strong&gt;解像度2944×1840&lt;/strong&gt;、144Hz、DCI-P3 100%、最大輝度900ニト&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;カメラ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;背面：13MP（メイン）＋2MP（マクロ）、前面：13MP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;バッテリー&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10,200mAh&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;オーディオ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Harman Kardon製6スピーカー（4ウーファー＋2ツイーター）、Dolby Atmos対応&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ペン入力&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Lenovo Tab Pen Pro&lt;/strong&gt;（8192段階筆圧感知）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;接続端子&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;USB Type-C（USB 3.2 Gen 1）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;通信&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Wi-Fi 7、Bluetooth 5.4、GPS非対応&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;認証&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;指紋認証、顔認証&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;サイズ&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;約291.0×188.3×6.7mm、重量：約640g&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;価格&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;約89,980円&lt;/strong&gt;（日本国内、2025年1月時点）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;個人的にポイントの部分を太字にした。&lt;/p&gt;&#10;&lt;p&gt;12.7インチ3Kディスプレイ + Snapdragon 8 Gen 3 + RAM 16GB + 256GBストレージ + ペン付き で 9万弱は素直に強い。これが楽天ストアでポイント加味すると8万くらいで買えたものだから、勢いでポチってしまった。microSD対応していたらよりよかったが（っていうかここまでモリモリで何故してないんだろう？）、256GBあるしまぁ。&lt;/p&gt;&#10;&lt;p&gt;使ってみるとさすがに快適であった。大型タブレットが欲しいひとならオススメできる。&lt;/p&gt;&#10;&lt;h2 id="ソシャゲをいくらでも同時プレイできるそうproductivityモードならね"&gt;ソシャゲをいくらでも同時プレイできる、そうProductivityモードならね&#10;&lt;/h2&gt;&lt;p&gt;本デバイスについて、Xかどこかで口の悪い誰かに &lt;strong&gt;「貧者のiPad」と表現されているのを見た時は言い得て妙だと思った&lt;/strong&gt;。実際まぁiPad Proのほうがベンチマーク以上に快適だと思う。まぁでもそれはお値段が倍違うことを思えばLenovo最高トランプ関税恐るるに足らずではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;そして&lt;strong&gt;個人的に面白いと思ったのは、Lenovo機で独自にあるらしいProductivityモード&lt;/strong&gt;だ。Productivityモードとはなんぞやというと、PC風にマルチウィンドウを実現するもので、複数のアプリを同時に起動することができる。以下のYouTube動画が参考になるだろう。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=Gj5yYaRo5tU" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=Gj5yYaRo5tU&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁ似たようなことはChromebookでも出来た気はするが、ChromebookはPCであるのに対しこちらはあくまでPC風のAndroidであるので、複数のAndroidアプリを使うという限りにおいては、安定性など考えると不安がなくてよいだろう。実際、多少挙動におかしなところがあったりすることはあるものの、全体的に問題なく使えている。&lt;/p&gt;&#10;&lt;p&gt;とはいえAndroidアプリを複数起動してProductivityに寄与するのかと思われるかもしれないが、これは人によるが僕の場合は断然寄与する。これによって、&lt;strong&gt;5つくらいのソシャゲを同時に起動してログボ同時ゲット&lt;/strong&gt;という感動を得た。&lt;strong&gt;Snapdragon 8 Gen 3の威力で同時起動してももたつかない&lt;/strong&gt;。&lt;strong&gt;おかげでまったく起動していなかったソシャゲも起動&lt;/strong&gt;して溜まっていたプレゼントボックスを開けることができた。さらに、基本的にクソ重い画面遷移中に他のソシャゲを操作することによって、効率的に無駄時間を過ごすことが可能だ。&lt;/p&gt;&#10;&lt;p&gt;このように、&lt;strong&gt;非生産的をマルチタスクすることにより、非生産的行為の時間を圧縮することが可能というまさしくProductivityな便利機能&lt;/strong&gt;である。なんか結局周回回数が増えただけで無駄にしている時間は減ってない気はする。&lt;/p&gt;&#10;&lt;p&gt;……。&lt;/p&gt;&#10;&lt;p&gt;……まぁでもなんか、実際ソシャゲのために複数端末買う人もいるらしいので、そういう人にとっては一台でたくさん同時プレイできるのはよいのではなかろうか。あと&lt;strong&gt;ウィンドウの大きさを変えられるため、通常とは異なるアスペクト比にできるので、いつものデバイスだと見切れている部分を閲覧する&lt;/strong&gt;などの非常にマニアックな楽しみ方も可能だ。&lt;/p&gt;&#10;&lt;p&gt;正直この機能は買ってから気づいたもので、全然知られていないように思うのだが、割と面白いので、Androidタブレットを買う時にはLenovoの魅力の一つとして参考にされたい。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;17028&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>M2 Pro Mac mini を購入して1年5か月経過：静かに革命</title><link>https://hack-le.com/m2-pro-mac-mini-1-5/</link><pubDate>Tue, 08 Apr 2025 03:03:42 +0900</pubDate><guid>https://hack-le.com/m2-pro-mac-mini-1-5/</guid><description>&lt;p&gt;Intel Mac mini 2018からM2 Pro Mac miniに買い換えて1年5か月が経過した。M3は悲しい感じでM2大勝利だったが、M4で飛躍的な進化を遂げたので、結果論だともう少し待てばよかったのにこの愚か者、という感じではあるけれど、そうは言ってもあの時どうにも欲しいという情動があったのは事実だし、また1年早く多くのことを楽しめたのだからやはり買ってよかったのだと思え思うしかない思って。&lt;/p&gt;&#10;&lt;h2 id="体験は満足度が高い"&gt;体験は満足度が高い&#10;&lt;/h2&gt;&lt;p&gt;まぁM4が強すぎるのでぐぬぬとなっているのは事実なんだけれど、&lt;strong&gt;正直M2 Proでほとんど不満がない&lt;/strong&gt;。これは&lt;strong&gt;最大限の賛辞&lt;/strong&gt;だと思ってよい。まぁLLMを使う上ではM4 Proだったらもうちょっと使い物になるかもと思える応答速度だったりしたのかなぁと思ったりなんだりもするけれど、結局普段使いはChatGPTやCodyなんだし、ローカルLLMに全振りするにはまだまだ時期が早い。&lt;/p&gt;&#10;&lt;p&gt;というわけで、全体的にMac mini 2018からすべてがパワーアップした一方、特に不便になったこともない。あったかもしれないけど思い浮かばない。この&lt;strong&gt;不便がない、というのはとても素晴らしいこと&lt;/strong&gt;で、実際のところ、普段使いにおいて重要なことはいかに不満が少ないかだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一般的なレビューでは、この新商品はアレができるコレができるということを言いたがるものだが、現実的に本当に手に馴染むかは何ができるかよりも何ができないか&lt;/strong&gt;のほうがきいてくる。まぁもちろん何ができるかも重要ではあるので、そういう意味ではレビューも有り難いし、実際僕も買う前にはよく見るのだが、しかし最終的に本当に自分にとって良いかは機能ではない。&lt;/p&gt;&#10;&lt;p&gt;僕は長期的な使い勝手こそ本質だと思っているので、思い出したようにプロダクトの所感についてあーだこーだと書いている。別に開封の儀を腐すつもりはないのだが、しかし&lt;strong&gt;プロダクトの良さはインパルスではなく積分であるはず&lt;/strong&gt;で、振り返って初めて、良かったなぁとか、あんまりだったとか、そういう感慨がわいてくるものだ。&lt;/p&gt;&#10;&lt;p&gt;それで僕はこうして、「特に不便がない」とわざわざ書き、そしてそれ以外特に言うことがない。&lt;strong&gt;この言うことの無さにじんわりとプロダクトとしての良さを実感するばかりだ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="懐かしのセルフホスティング自宅サーバ"&gt;懐かしのセルフホスティング（自宅サーバ）&#10;&lt;/h2&gt;&lt;p&gt;まぁこれでは記事としてあんまりな気がするので、一点良かったなと思うことを書くと、&lt;strong&gt;セルフホスティングの良さを再び経験できている&lt;/strong&gt;ことだ。まぁつまり自宅サーバなんだが、VPSでやっているサーバもあるので、全部含めてセルフホスティング。&lt;/p&gt;&#10;&lt;p&gt;ただしここでセルフホスティングしているのは主に買い換える前までメインデスクトップにしていたMac mini 2018だ。M2 Pro Mac miniを買った後、まだ動くMac mini 2018を見て、コイツどうしてくれようか、まだまだ使えるし、売って端金にするのも尺だなぁと思って、コンテナサーバにしてみるかと思って使ったところ、これがなかなか具合がよい。ちょっと試してみたいソフトウェアをスナック菓子感覚で楽しめる。なんなら常用しているサーバも数多い。&lt;/p&gt;&#10;&lt;p&gt;もちろんM2 Pro Mac miniでも問題なくできるのだが、コンテナはけっこう何かと重たいし、またできるだけ常時稼働させたいものだから、常用していると再起動も億劫になってしまうので、物理的にメインデスクトップと切り分けできたのはよかったと思う。メインデスクトップであるM2 Pro Mac miniを開発サーバとして、いけるなと思ったらMac mini 2018にデプロイするということも可能だ。まぁそこまでちゃんとやってるのはあんまりないけど。&lt;/p&gt;&#10;&lt;p&gt;このブログも今はレンサバでやっているのだけれど、またセルフホスティングに戻したいと思う。まぁこのブログは一時期よりアクセスが大幅に減ったとはいえ、それでもだいたい常に何人かは来訪してもらえているので、帯域や安定性を考えると、さすがに自宅サーバよりはVPSかなとは思うけど。&lt;/p&gt;&#10;&lt;h2 id="m2-pro-mac-miniが変えた生活"&gt;M2 Pro Mac miniが変えた生活&#10;&lt;/h2&gt;&lt;p&gt;M2 Pro Mac miniあんま関係ないやんと思われたかもしれないが、&lt;strong&gt;M2 Pro Mac miniを買わなければ、ここまでセルフホスティングを積極的に試していなかった&lt;/strong&gt;であろうということに注目されたい。つまり、&lt;strong&gt;M2 Pro Mac miniは我が家のシステムを変えた&lt;/strong&gt;のだ。こんなに素晴らしいことが他にあるだろうか。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;良いプロダクトとは、まず不満がないことで、あまりにも不満がないために何も言うことがなく、気がつくと月日が過ぎており、思い返してその良さを積分でじんわりと感じられるもの&lt;/strong&gt;だ。そしてさらに振り返れば、&lt;strong&gt;生活そのものが実は変わっていた&lt;/strong&gt;。そういうものであり、&lt;strong&gt;僕にとってM2 Pro Mac miniはまさに良いプロダクト&lt;/strong&gt;だったのである。&lt;/p&gt;&#10;&lt;p&gt;これで明らかなように、M4まで待つ必要はなかったというのが論理的帰結であり、それはそれとしてM4 Pro Mac mini欲しい。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-mac-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac Miniをポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-mac-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12198_1789621271.webp" alt="M2 Pro Mac Miniをポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac mini (2022)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>ガジェオタ vs トランプ：ガジェオタはトランプ関税とどう向き合うべきか</title><link>https://hack-le.com/gadget-trump/</link><pubDate>Sat, 05 Apr 2025 18:59:10 +0900</pubDate><guid>https://hack-le.com/gadget-trump/</guid><description>&lt;p&gt;トランプ関税が話題だ。この問題はガジェオタにとっても他人事ではなく、たとえば「iPhoneが40%高騰する！」などと言われている。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://forbesjapan.com/articles/detail/78285" target="_blank" rel="noopener"&#10; &gt;「トランプ関税」は米消費市場を直撃、iPhoneは40％高騰か 値上げ不可避の商品一覧 | Forbes JAPAN 公式サイト（フォーブス ジャパン）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ガジェオタにとってはやめてくれ以外の言葉はないが、それはそれとして現実は受け止めなければならない。いったい、我々ガジェオタはこの荒波の中でどう立ち振る舞うべきなのか……。&lt;/p&gt;&#10;&lt;h2 id="世界は我々に買いと言っている"&gt;世界は我々に買いと言っている&#10;&lt;/h2&gt;&lt;p&gt;まず&lt;strong&gt;今現在買うかどうか考え中だったものは、真面目に購入を検討したほうがよい&lt;/strong&gt;ように思う。今後どうなるかはまだわからないものの、このままいけば高騰シナリオは確かにありえる。なので、今既に発売しているものにほしいものがあるなら、ウインドウショッピングを始めたほうがいいだろう。僕の場合はM4 MacBook Airをどうしようかなといったところだ。&lt;/p&gt;&#10;&lt;p&gt;外的要因に振り回されるのは釈然としないかもしれない。だがここで思い出すべきことは、そもそも&lt;strong&gt;ガジェオタとは常に「買う言い訳」に飢えている生き物&lt;/strong&gt;だということだ。今回のトランプ関税はその格好ではないか。アメリカが、世界が、「今が買い」だと言っている。&lt;/p&gt;&#10;&lt;p&gt;即断即決即後悔。&lt;/p&gt;&#10;&lt;p&gt;これこそガジェオタの心得。&lt;/p&gt;&#10;&lt;p&gt;いや後悔したくないんだけどというのはもっともな意見だけれど、そもそも&lt;strong&gt;ガジェオタとは買えば買ったで後悔するが買わなきゃ買わないで買わなかったことを後悔する&lt;/strong&gt;という、思春期の女子よりめんどくさい生き物のはずだ。どうせ後悔するなら買って後悔するほうがいつかくる走馬灯も賑やかになるだろう。&lt;/p&gt;&#10;&lt;h2 id="今は待て時期が悪い"&gt;今は待て、時期が悪い&#10;&lt;/h2&gt;&lt;p&gt;しかし、&lt;strong&gt;当然のことながら無理すべきではない&lt;/strong&gt;。現在の経済状況や実際的な必要性をよく考えて、無理があるなら無理はしないことだ。ガジェットは安い買い物ではないのだから、良く考えたい。ヘタをして走馬灯を見る日が近づいたらつまらないだろう。&lt;/p&gt;&#10;&lt;p&gt;僕の場合も、去年独立してから不安定な身の上だし、また今使っているラップトップも健在なことや、いざとなればゲーミングノートなど頼りになる控えもいることから、今回のM4 MacBook Air買いの御宣託は無視する可能性はけっこう高い。いやわからん。どうしよう。まぁとりあえず考える。&lt;/p&gt;&#10;&lt;p&gt;このように、&lt;strong&gt;我々は買うこともできるし、買わないこともできる&lt;/strong&gt;。我々には自己決定権がある。世界は不自由かもしれないが、我々は自由だ。&lt;/p&gt;&#10;&lt;h2 id="世界は変わらない"&gt;世界は変わらない&#10;&lt;/h2&gt;&lt;p&gt;個人が自由でも世界がこれじゃ仕方ないという気持ちもあろうけれど、大丈夫、&lt;strong&gt;関税なくてもめっちゃ上がってるから&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ほんの10年ちょっと前はドル円80円だったことを思い出したい。あの頃僕は、Mac miniの竹モデルを6万円で買った。さらにメモリは5000円で16GBにできた。一昨年、ドル円140円だったか150円だったか、リプレースしたM2 Pro Mac mini(SoC, RAMは盛ってる)は整備済みで22万円した。M4 MacBook Air 4も盛ると余裕で20万超える。金がHeavyなんだが？&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-mac-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac Miniをポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-mac-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12198_1789621271.webp" alt="M2 Pro Mac Miniをポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/21247915-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini 2012購入記&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/21247915-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2554_1789391609.webp" alt="Mac mini 2012購入記" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;つまり&lt;strong&gt;何も大丈夫ではないんだが、実際のところトランプ関税なんか比較にならない高騰の波に既に我々は乗ってきたのは単なる事実&lt;/strong&gt;だ。そうでなくても、不測の事態で価格が上がるのはよくあることだし、たとえばタイの洪水でハードディスクが高騰したことなどもあった。まぁ自然的要因ではなく人災で価格が高騰し、しかもその高騰がなぜかアメリカ政府様の取り分になるというのは端的に意味が不明であるものの、長期的にはディールとやらで相互で関税を下げるなどのことがあるかもしれないしないかもしれないし、いやまぁとりあえず中国は報復するっぽいのでまぁ期待しないほうがよいが。&lt;/p&gt;&#10;&lt;p&gt;まぁなんにせよ、トランプ関税は予測不能で理不尽な世界のイベントの一つに過ぎず、&lt;strong&gt;世界は何も変わっていない&lt;/strong&gt;。&lt;strong&gt;変わったようにみえるとすれば、それは今少しいつもよりも見えやすくなっているというだけ&lt;/strong&gt;だろう。&lt;/p&gt;&#10;&lt;h2 id="荒波を愉しめ"&gt;荒波を愉しめ&#10;&lt;/h2&gt;&lt;p&gt;我々は既に価格高騰の荒波を乗りこなしている。これは事実だ。そしてもう一つ確認したい事実は、&lt;strong&gt;既に購入したガジェットに関税はかからない&lt;/strong&gt;ということだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ガジェオタは誰よりも真っ先に新しいものに飛びつく一方で、誰よりも長く執拗に古いものを使い続ける生き物でもある&lt;/strong&gt;。たとえ高騰したとしても、それが気に入らなければ、今あるものを使い続ければいい。ガジェオタならそれも楽しめるはずだ。制約の中でリソースの力を最大限発揮させる、結局一番楽しいのはこれ。&lt;/p&gt;&#10;&lt;p&gt;結局のところ、&lt;strong&gt;ガジェオタの取るべき態度はいままでどおり&lt;/strong&gt;だ。関税はクソだし世界はクソだが、ガジェットは素晴らしいし、我々はそれを自由意思でもって使いこなしているのであり、世界がどうあろうと何一つその態度に変わるところなどない。&lt;strong&gt;荒波を愉しめ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはそれとしてM4 MacBook Air買ったほうがいいかなぁ？&lt;/p&gt;&#10;</description></item><item><title>2025年もPixel 7で戦う：最高ではないが最低でもない成り行きの買い物</title><link>https://hack-le.com/2025-pixel-7/</link><pubDate>Fri, 28 Mar 2025 01:53:26 +0900</pubDate><guid>https://hack-le.com/2025-pixel-7/</guid><description>&lt;p&gt;Pixel 9aがアメリカで発表とかいう時にPixel 7の話もないもんだが、僕はPixel 9aに興味がまったくわかず、今持っているPixel 7を使い続ける気持ちしかない。&lt;/p&gt;&#10;&lt;p&gt;Pixel 7を買ったのは2022年10月のことで、税込み82,500円なのにPixel 4を61,500円で下取りしたという乞食速報が世間を駆け巡り、僕の持っていたiPhone SE2も35,000円という中古相場より高そうな下取り価格が提示されていたうえ、21,000ポイントのGoogleクレジットや10%割引きなど意味不明な大盤振る舞いがされていたものだから、1円で買ったiPhone SE2で10年戦う(｀･ω･´)とか言っていた僕が1年でホイホイ乗り換えたのはやむを得ないことだった。&lt;/p&gt;&#10;&lt;h2 id="googleクレジットは罠だった何度でも言う"&gt;Googleクレジットは罠だった（何度でも言う）&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;まぁ21,000ポイントのGoogleクレジットというやつはなかなかのトラップ&lt;/strong&gt;ではあった。Googleストアでしか使えないのだが、Googleストアに売っている製品でめぼしいものいえばPixelシリーズくらいで、そのPixelはもう既に持っているのだから酷いものだ。しかも&lt;strong&gt;有効期限は1年&lt;/strong&gt;しかなく、Google Homeをセールで買った以外は結局使い道のないままに期限最終日を迎え、仕方なくさしてほしくもなかったFitbit Sense 2を定価で買った。Amazonなど他ストアなら少し安くなっているが、仕方が無い。これについては散々愚痴っているが、&lt;strong&gt;これからも未来永劫愚痴る&lt;/strong&gt;気でいる。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-store-credit/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-store-credit/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/10/ea2c70bff34560494e11be9aad7b7321.webp" alt="制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;恐らくもっとも賢いクレジットの使い方は、当時まだ安かったPixel Buds Proを買い、転売して現金化することだっただろう。当時のPixel Budsシリーズは何故か為替を考慮すると異様に安い値段設定がされていた。まぁこれはPixel 7もそうだったから、Google的にはとにかくiPhone最強伝説を誇る禿のお膝元でシェアを取りたかったのだろうね。&lt;/p&gt;&#10;&lt;h2 id="おトクではあったハズ"&gt;おトクではあった……ハズ&#10;&lt;/h2&gt;&lt;p&gt;まぁなんだかんだでFitbit Sense 2は今も使っているので悪い買い物ではなかった、かもしれないしそうでもないかもしれない。元々僕はWithings Steel HRを使っていたので、別にスマートウォッチが新たに必要ということはなかったんだよな。しかし、入れ替えでWithingsは母の手に渡り、母が生活で睡眠と歩数を計測するようになったので、良かった、のかなぁ。うーんでもどうせならGarminのアナログのやつがほしかった感ある。&lt;/p&gt;&#10;&lt;p&gt;などとまぁ愚痴愚痴言ったけれど、&lt;strong&gt;これまでの買い物を総計すると「65000円でiPhone SE 2を1年 + Pixel 7 + Google Home(ディスプレイ付き) + Fitbit Sense 2」を買ったわけで、まぁおトクと言って良かったとは思う&lt;/strong&gt;。多分。というかここまで書いて気づいたが、&lt;strong&gt;Pixel 7もGoogle HomeもFitbit Sense 2も現状ほぼ毎日使っている&lt;/strong&gt;ので、これでまだ文句を言うのは乞食が過ぎるような気もした。&lt;/p&gt;&#10;&lt;p&gt;ただいずれも、是非とも欲しかったというわけではなく、結果的に家の中でポジションを見つけたので毎日使われてはいるんだが、あなたがなくても代わりはいるもの、というような気持ちがあるのかもしれない。イヤな客である。&lt;/p&gt;&#10;&lt;h2 id="pixel-7は安くてよかった"&gt;Pixel 7は安くてよかった&#10;&lt;/h2&gt;&lt;p&gt;このようにしみったれた人間であるから、その後Pixel 8やPixel 9が出ても、値札をちらっと一瞥したきり、ちっともほしいとは思わなかった。一応検討はした。した結果いらねぇとなった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-7-pixel-9/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 7からPixel 9にはしない&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-7-pixel-9/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-36.webp" alt="Pixel 7からPixel 9にはしない" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-7-pixel-8/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 7 から Pixel 8には乗り換えなかった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-7-pixel-8/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12124_1789621084.webp" alt="Pixel 7 から Pixel 8には乗り換えなかった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;こうして記事を振り返ってみると一瞥どころがガン見してるやんと思わなくもないが、まぁ結果としてPixel 7のままでいる。2025年3月も終わる現在、ちょうど2年半ほど使ったことになるけれど、特に不満がない。&lt;strong&gt;Pixel 7は市場の実売価格を考えると良い端末&lt;/strong&gt;だと思う。まぁどう考えてもPixel 7の大盤振る舞いは異常だったし、当時他のAndroidメーカーはやってられねぇと思ったのではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;まー実際のところ、僕はフツーの人よりもだいぶガジェット好きだと思うのだが、&lt;strong&gt;正直スマホで大したことをするわけではない&lt;/strong&gt;ので、Pixel 9なんか見ても特に食指が動かないのはあるだろう。最強AIを使うことで、いない人をいたことにしたり、いた人をいなかったことにしたり、泣いてる人を強制的に笑わせるといった&lt;strong&gt;思い出スターリン機能&lt;/strong&gt;が華やかにアピールされていたが、僕は自由主義者なので特に魅力を感じない。&lt;/p&gt;&#10;&lt;p&gt;実際スマホのAI機能って投資家以外誰も期待してないんじゃないのかな。iPhoneもApple intelligenceとか言ってるけど特に売上には繋がっていないようだし。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gigazine.net/news/20250113-apple-intelligence-not-boost-iphone-sales/" target="_blank" rel="noopener"&#10; &gt;「Apple IntelligenceはiPhoneの売上増加につながっていない」とアナリストが指摘 - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;投資家の期待もAIじゃなくてAIの先にある売上そして株価を期待しているだけであって、別に具体的な期待があるわけじゃないんだよな。&lt;/p&gt;&#10;&lt;h2 id="これからもpixel-7多分"&gt;これからもPixel 7多分&#10;&lt;/h2&gt;&lt;p&gt;まぁゲームをヘビーにやってる人とか、めっちゃカメラ使う人なら最新の高級スマホもいいと思うんだけれど、正直今のPixel 9の価格見ると、他にも色々な選択肢はあるよなと思う。特に最近は一時期霊圧が消えかかっていた中華メーカーが再び躍進しているし、あえてPixelを選ぶ理由はもはやないように思える。&lt;/p&gt;&#10;&lt;p&gt;もっとも、iOS端末が欲しかったらiPhone買うしかないので、iPhoneはこれからも一定程度強いだろう。そういえばiPhone SE4は10万円からということで、正直予想はしていたもののやはり実際そう言われるとだいぶ買う気が失せた。もうiOS端末をメインにすることはないかもしらんなぁ。また例によってキャリアが意味不明なMNP割引きとかしてたら買うかもだけど。もうないかなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁいずれにせよ&lt;strong&gt;買わなきゃタダ&lt;/strong&gt;なわけで、これからも愛機Pixel 7と共にOSサポートが終わる2027年までは駆け抜けていく所存だ。と言いつつどこかでiPhoneでもPixel 9aでも大盤振る舞いセールがあったらホイホイ乗り換えると思う。スマホなんてそんなもんよ。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-7-128gb-2022/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 7 128GB (2022)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-7-128gb-2022/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Macでキーボードの挙動が変？VivaldiとVisualStudio Code でだけ Cmd + [ がきかない現象</title><link>https://hack-le.com/vivaldi-visualstudio-code-cmd/</link><pubDate>Sat, 15 Mar 2025 09:57:36 +0900</pubDate><guid>https://hack-le.com/vivaldi-visualstudio-code-cmd/</guid><description>&lt;p&gt;何を言っているのか意味不明だと思うが僕も何が起きているのか意味不明だった。とりあえずなおったのでメモ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&#10;&lt;ul&gt;&#10;&lt;li&gt;ただし MBP 2019 でも起きていた&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Vivaldi, VSCode&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="事象"&gt;事象&#10;&lt;/h2&gt;&lt;p&gt;一部のアプリ、具体的はVisualStudioCode、Vivaldiにおいて、Cmdキーを押すと &lt;code&gt;[&lt;/code&gt; キーを認識しないという謎の事象が発生していた。これはMacの再起動などではなおらない。&lt;/p&gt;&#10;&lt;p&gt;キーストローク自体はシステム全体では認識されており、Karabinerを使うと押されていることがわかるし、Braveなど別のアプリでは認識されているため、一部のアプリでのみ生じている問題だといえる。&lt;/p&gt;&#10;&lt;p&gt;Vivaldiにおいて、実際にDevToolsを起動してキーストロークを検出したところ、 &lt;code&gt;[&lt;/code&gt;単体ならば問題ないが、Cmdキーを押した状態だと認識しないことがわかった。VisualStudioCodeも同様の状態だったと考えられる。&lt;/p&gt;&#10;&lt;h2 id="原因と対応"&gt;原因と対応&#10;&lt;/h2&gt;&lt;p&gt;なぜ複数のアプリでこんなことになるのか意味不明で、ずっと僕の頭を悩ませていたが、以下の措置を実行したところ、なおった（？）。少なくとも事象は再現しなくなった（削除コマンドなので、一応バックアップはとっておくとよい）。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm ~/Library/Preferences/com.apple.symbolichotkeys.plist&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意味不明だったのでChatGPTに理由を聞いたところ、以下のような回答を得られたが、あまり納得していない。&lt;/p&gt;&#10;&lt;details class="swell-block-accordion__item" data-swl-acc="wrapper"&gt;&lt;summary class="swell-block-accordion__title" data-swl-acc="header"&gt;ChatGPTによる回答&lt;/summary&gt;&#10;&lt;p&gt;問題が解決したことから、&lt;strong&gt;macOSのシステム設定（symbolic hotkeys）が影響していた&lt;/strong&gt; ことが明らかになりました。&lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; は、macOSのキーボードショートカット設定を管理するファイルであり、これが何らかの理由で &lt;code&gt;Cmd + [&lt;/code&gt; の入力を阻害していたと考えられます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-なぜ-comapplesymbolichotkeysplist-の削除で解決したのか"&gt;(ChatGPT) なぜ &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; の削除で解決したのか？&#10;&lt;/h2&gt;&lt;h3 id="1-cmd---がシステムレベルのホットキーに誤って割り当てられていた"&gt;1. &lt;code&gt;Cmd + [&lt;/code&gt; がシステムレベルのホットキーに誤って割り当てられていた&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; には、Mission Control、アプリケーションスイッチャー、ウィンドウ管理などのショートカット設定が保存されている。&lt;/li&gt;&#10;&lt;li&gt;何らかの理由で、&lt;code&gt;Cmd + [&lt;/code&gt; がVivaldiやVSCodeでは動作しない形でシステムに割り当てられていた可能性がある。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;rm&lt;/code&gt; でこのファイルを削除したことで、&lt;strong&gt;すべてのショートカット設定がリセットされ、デフォルトの挙動に戻った&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2-設定が壊れていた--予期せぬキー競合が発生していた"&gt;2. 設定が壊れていた / 予期せぬキー競合が発生していた&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;macOSアップデートや外部アプリの影響で、&lt;strong&gt;システムショートカット設定が壊れたり、不要な競合が発生したりすることがある&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;特に、VSCodeやVivaldiは&lt;strong&gt;標準的なmacOSのUIではなく、独自のキーボードイベント処理を持っている&lt;/strong&gt;ため、壊れた設定が影響を与えやすい。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-vivaldiとvscodeで-cmd---が特定の条件で無視されていた"&gt;3. VivaldiとVSCodeで &lt;code&gt;Cmd + [&lt;/code&gt; が特定の条件で無視されていた&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;システムの &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; に &lt;code&gt;Cmd + [&lt;/code&gt; に関する設定が存在し、それが&lt;strong&gt;特定のアプリでのみ適用される&lt;/strong&gt; 形になっていた可能性がある。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;defaults read -g&lt;/code&gt; で確認できるようなグローバルショートカットではなく、個別のアプリに影響を与える設定だった可能性。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-この問題の発生原因は"&gt;(ChatGPT) この問題の発生原因は？&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;過去に &lt;strong&gt;システム設定でショートカットをカスタマイズ&lt;/strong&gt; したことがある&lt;/li&gt;&#10;&lt;li&gt;macOSの&lt;strong&gt;アップデートによる設定変更&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;外部アプリ（Karabiner、BetterTouchToolなど）の影響&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;何らかの&lt;strong&gt;バグや意図しないシステム設定の競合&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;いずれかが影響して &lt;code&gt;Cmd + [&lt;/code&gt; が特定のアプリで無効になっていたと考えられます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-再発を防ぐためには"&gt;(ChatGPT) 再発を防ぐためには？&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;「システム設定」→「キーボード」→「キーボードショートカット」で、意図しない割り当てがないか確認&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;影響を受けやすい &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; のバックアップを定期的に取る&lt;/strong&gt; &lt;code&gt;cp ~/Library/Preferences/com.apple.symbolichotkeys.plist ~/Desktop/symbolichotkeys_backup.plist&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;再発した場合は、再度 &lt;code&gt;rm ~/Library/Preferences/com.apple.symbolichotkeys.plist&lt;/code&gt; を実行&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;外部アプリ（Karabiner-Elements, BetterTouchTool, Alfredなど）の設定を見直す&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;macOSアップデート後にショートカットの挙動をチェック&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-結論"&gt;(ChatGPT) 結論&#10;&lt;/h2&gt;&lt;p&gt;この問題の根本原因は、&lt;strong&gt;macOSの &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; に &lt;code&gt;Cmd + [&lt;/code&gt; の動作を妨げる何らかの設定が記録されていた&lt;/strong&gt; ことです。このファイルを削除してリセットすることで、VivaldiやVSCodeで &lt;code&gt;Cmd + [&lt;/code&gt; のショートカットが正常に機能するようになりました。&lt;/p&gt;&#10;&lt;p&gt;この現象は比較的珍しいですが、macOSのショートカット設定が予期せず影響を及ぼすことは時々あります。同様の問題が再発した場合は、まず &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; のリセットを試すのが最も確実な解決策となるでしょう。&lt;/p&gt;&#10;&lt;/details&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;特に副作用らしきことも起きていない。事象が再発しなくなったのでよかったが、それにしても意味不明だなとは思っている。&lt;/p&gt;&#10;&lt;p&gt;こういうイレギュラーなことにおいて、ChatGPTは無力の極みなので、まともに聞くのではなく、とにかくそれらしい事象を検索させて、可能性がありそうなことを試すしかない。最終的にとりあえずなんとかなったので、よかったのかな。&lt;/p&gt;&#10;</description></item><item><title>一度に複数リンクを一括で開くならLinkclump：効率的な情報収集のために</title><link>https://hack-le.com/linkclump/</link><pubDate>Wed, 19 Feb 2025 14:13:47 +0900</pubDate><guid>https://hack-le.com/linkclump/</guid><description>&lt;p&gt;（追記）なんかChromeではウンコなのでサポート終了らしいので、みんなVivaldiを使おう。&lt;/p&gt;&#10;&lt;p&gt;Linkclumpは気に入っているChrome拡張機能だ。Chromeでなくても、BraveなどChromium系列のやつなら使える。&lt;/p&gt;&#10;&lt;p&gt;これは何かと言うと、ブラウザで複数のリンクを選択し、選択範囲内のリンクを一括で新規タブで開く、というものだ。&lt;/p&gt;&#10;&lt;h2 id="機能の動画"&gt;機能の動画&#10;&lt;/h2&gt;&lt;p&gt;まぁ百聞に一見にしかずなので、次の短い動画を見れば、どんな機能かはほぼわかるだろう。&lt;/p&gt;&#10;&lt;p&gt;&lt;video controls src="https://hack-le.com/images/uploads/2025/02/46f85000d706142c196333462d8c6648.mov"&gt;&lt;/video&gt;&lt;/p&gt;&#10;&lt;p&gt;初期設定では、「zキーを押しながらドラッグして範囲を選択する」という設定になっているかと思われるが、ここは設定でShiftキーにしたりできる。&lt;/p&gt;&#10;&lt;h2 id="ユースケース"&gt;ユースケース&#10;&lt;/h2&gt;&lt;h3 id="検索結果をすべて見たい時"&gt;検索結果をすべて見たい時&#10;&lt;/h3&gt;&lt;p&gt;Googleを始めとする検索エンジンのクソ化が叫ばれて久しいものの、情報収集では今なお頼らざるを得ない。いやむしろ、クソ化が進み、一番上どころか1ページ目にもろくな情報が出てこない昨今、検索結果のすべてを開いてやるくらいのことが必要だ。&lt;/p&gt;&#10;&lt;p&gt;この時、検索結果を一つずつ開いていくのは億劫である。しかしLinkclumpがあれば、この手間を大いに省略することができる。&lt;/p&gt;&#10;&lt;p&gt;ちなみに僕は里の掟のためにGoogle検索を使っていないが、どこの検索エンジンを使っていても事情は大して変わらないので、有用である。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google3-google-ai/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;趣味としての脱Googleその3: 検索エンジン編 Google AIが証明するググってもカス&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google3-google-ai/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_13527_1788944350.webp" alt="趣味としての脱Googleその3: 検索エンジン編 Google AIが証明するググってもカス" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h3 id="オンラインショッピング"&gt;オンラインショッピング&#10;&lt;/h3&gt;&lt;p&gt;ネットショッピングでは、一つのお目当ての商品リンクが予めわかっていることは滅多にない。ほとんどの場合、語句で検索し、さらにショッピングモールサイトなどでは、同じ商品を扱う複数の店舗から選ぶなどしなくてはならない。&lt;/p&gt;&#10;&lt;p&gt;この時、一つ一つ開いて確認するのはいかにも億劫である。ここでもLinkclumpは非常に有用だ。&lt;/p&gt;&#10;&lt;h3 id="ページネーションが大量にある記事の読み込み"&gt;ページネーションが大量にある記事の読み込み&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;ページネーションは悪い文明！粉砕する！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;ユーザにとって記事分割が最悪のUXであることは今さら言うまでもないが、現実的には2025年も1ページあたり原稿用紙1枚か2枚分程度の長さで分割する悪いサイトはたくさんある。ページ遷移するたびに全画面広告を見せられ、さらに移動した先でまた脱毛とか美容を謳った怪しげな広告が画面の上半分を占有する。星新一のショートショートで描かれたディストピアが実現した笑えない2025年な今日この頃であるが、現実そうなっているので仕方が無い。&lt;/p&gt;&#10;&lt;p&gt;これの対策の一つはオートページャーだ。勝手に次のページを読み込んで繋げてくれる。これはうまく機能するとたいへんよいものだが、意図しないところで機能したり、適切に読めないことも多々ある。便利なものではあるが、個人的には常用するには副作用が大きいかなと思う。かつてEvernoteで全文をWebクリップするには必須の機能だったが、Evernoteは……もう……（ちなみにNotionのWebクリップだと、ページネーションの記事は後続まで読み込んで繋げてくれるのに対応しているサイトがけっこうある。有能）。&lt;/p&gt;&#10;&lt;p&gt;もう一つの対策がLinkclumpのように、リンクを一括で開くツールだ。これを使うことで、後続のページをまとめて開くことができる。ただし、「次へ」しかないものや、「1,2,3,&amp;hellip;,10」などと途中省略されているパターンには対応できない。対応できないが、&lt;strong&gt;1つの記事を10ページに分割するような記事を載せるサイトは読んじゃいけない&lt;/strong&gt;。金儲けだけの記事だ。どうせ記事も他からの無断転載だ。読まなくていいとかじゃない、読むべきじゃない。&lt;/p&gt;&#10;&lt;h3 id="リンク集巡回"&gt;リンク集、巡回&#10;&lt;/h3&gt;&lt;p&gt;リンク集を同時に開くのに便利だ。当サイトは古の流儀を継承しているため「&lt;a class="link" href="https://hack-le.com/website-links/" &gt;リンク集&lt;/a&gt;」がある。是非試されたい。&lt;/p&gt;&#10;&lt;h3 id="その他wikiなどで取得すべき情報のリンクが並んでいる時"&gt;その他、Wikiなどで取得すべき情報のリンクが並んでいる時&#10;&lt;/h3&gt;&lt;p&gt;普通に利用していても、「開きたいリンクが並んでいる」ケースは多くあるものだ。社内Wikiなんかでも、リンクページが箇条書きになっていて、全部を見ないといけない、なんてシチュエーションはありがちじゃないだろうか。&lt;/p&gt;&#10;&lt;h2 id="タブいっぱい開いてこうな"&gt;タブいっぱい開いてこうな&#10;&lt;/h2&gt;&lt;p&gt;スマホ全盛の昨今だが、スマホでまともな情報収集なんて出来ない。使い方の問題ではなく、もっと根本的に、大きさとインタフェースの問題だ。タブレットでもできない。大量の情報を効率よく取得し整理するには、絶対にPCが必要だ。&lt;/p&gt;&#10;&lt;p&gt;僕は別にスマホ嫌いでもタブ嫌いでもない、むしろiPod touchや初代iPadを使っていたくらいで、スマホ・タブレットの可能性については10年以上追求し色々試している。「&lt;a class="link" href="https://hack-le.com/profile/" &gt;俺のガジェット - 或る阿呆の記&lt;/a&gt;」を見ればわかるはずだ。&lt;/p&gt;&#10;&lt;p&gt;色々試してきた結果、腰を据えて大量に情報をアクティブに集め摂取するという観点では、結局PCとフルのWebブラウザが最強、00年代に完成していたという結論である。&lt;/p&gt;&#10;&lt;p&gt;Linkclumpのような拡張機能は、アクティブな情報収集には欠かせない有用なツールである。なんだかんだでもうずっと使っている。&lt;/p&gt;&#10;</description></item><item><title>Macのステージマネージャは結局5日でやめた：シングルタスクとは何か問題</title><link>https://hack-le.com/mac-stage-manager-5/</link><pubDate>Sun, 16 Feb 2025 17:30:18 +0900</pubDate><guid>https://hack-le.com/mac-stage-manager-5/</guid><description>&lt;p&gt;以前、Macの（not iPad）ステージマネージャについて記事を書きました。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-stage-manager/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Macのステージマネージャを使い始めた所感：現実に寄り添った集中モード（多分使わない）&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-stage-manager/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/02/c-scaled.webp" alt="Macのステージマネージャを使い始めた所感：現実に寄り添った集中モード（多分使わない）" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事の内容を端的にまとめると、&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ステージマネージャはiPad的なマルチタスクモドキで、PCの観点ではあえてマルチタスクをやめる集中モード 2.0みたいな機能&lt;/li&gt;&#10;&lt;li&gt;UIは画面左側にアプリのグループをまとめ、クリック一つでメイン領域のアプリを切り替えていくもの&lt;/li&gt;&#10;&lt;li&gt;所感は、「便利なユースケースはありそうだが、不便なユースケースが一つでもあると耐えられないため、恐らく使わない。しかし使ってみないことには評価できないので、しばらく使って見る」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;で、実際使い初めて、しばらくは「お、案外使えるな」と思っていたのですけれど、あれから5日、結局ステージマネージャを切りました。&lt;/p&gt;&#10;&lt;h2 id="便利だったところ"&gt;便利だったところ&#10;&lt;/h2&gt;&lt;p&gt;いきなりネガティブな話もなんなので、先に良かった話をしましょう。ステージマネージャには便利なところもありました。&lt;/p&gt;&#10;&lt;p&gt;たとえば「メールアプリ、Slack、チャットアプリを切り替える」というような時に便利でした。これはどういうことかと言うと、 &lt;strong&gt;「（いろいろなメディアの）新着を確認したい」というざっくりしたタスクにおいて、複数のアプリが整頓され、スムーズに切り替えられるのが便利だった&lt;/strong&gt;、ということになります。&lt;/p&gt;&#10;&lt;p&gt;なので、しばらくは「案外使えるかも」と思っていました。&lt;/p&gt;&#10;&lt;h2 id="ステージマネージャを切った理由"&gt;ステージマネージャを切った理由&#10;&lt;/h2&gt;&lt;p&gt;しかし、結局切ることになります。&lt;/p&gt;&#10;&lt;p&gt;ステージマネージャを切った理由を端的に言うと、「ディスプレイ領域が狭くなる」です。具体的には「左手にChatGPT……右手にWebブラウジング……合体！ChatGPTブラウジング！」をやろうとして、問題が発生しました。&lt;/p&gt;&#10;&lt;p&gt;僕が使うChatGPTはアプリではなくWebブラウザ版を使っているため、同じアプリであり、表示自体は可能です。可能ですが、&lt;strong&gt;ステージマネージャ、ChatGPT、Webブラウジングの3列体制は、できないわけではないがつらい&lt;/strong&gt;。が、僕のメインディスプレイは27インチディスプレイですが、この「画面領域が狭い」問題は物理的な制約であるため如何ともし難い。&lt;/p&gt;&#10;&lt;p&gt;この場合、ステージマネージャはアプリ表示領域を非表示にすることができます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/02/de15b682ff7f208b28e6b9537153de8f-700x350.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;ステージマネージャを非表示にすると、ステージマネージャを使うメリットの9割方が消失し、一方デメリットだけは残るような感覚&lt;/strong&gt;がありました。どうやら自分が感じていたステージマネージャの快適性は、常にアプリ候補が見えていること、ワンタッチで切り替えられることにあったようです。&lt;/p&gt;&#10;&lt;p&gt;しかし非表示にするとその恩恵は受けられなくなります。いやむしろ、通常の画面でウィンドウの表示領域をそれぞれ調整するなどしたほうが、よほどアプリの切り替えがやりやすいです。&lt;/p&gt;&#10;&lt;p&gt;で、「これ何の意味があるねん」という気持ちが募り、結局ステージマネージャを切りました。使い始めてから5日でした。&lt;/p&gt;&#10;&lt;h2 id="シングルタスクのシングルとは何か"&gt;シングルタスクの&amp;quot;シングル&amp;quot;とは何か&#10;&lt;/h2&gt;&lt;p&gt;今回の問題は、結局のところ &lt;strong&gt;「複数ウィンドウ並べたくなったらつらいだろう」という当初考えていたユースケースの一つにぶち当たった&lt;/strong&gt;ということになります。&lt;/p&gt;&#10;&lt;p&gt;これは本質的にステージマネージャがシングルタスクの集中モードだからですけれど、 &lt;strong&gt;「シングルタスクとは何か」でもあります&lt;/strong&gt;。この場合のシングルタスクはコンピュータ用語としてよりも、ビジネス用語、いや、実作業に基づいた「シングル」の側面が強いでしょう。すると、複数のアプリを並列に並べるタスクって実際あるわけで、&lt;strong&gt;一つのアプリを中心に据える、アプリ中心思想のステージマネージャでは、シングルタスクすら実現できない、ということになります&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;もとより&lt;strong&gt;一つのアプリで完結させることが前提になっていることが多いiOSアプリを使うiPadにおいては、大きな問題にはならないかもしれません&lt;/strong&gt;。しかしPCは違います。複数のアプリを組み合わせて一つのタスクをこなすことが前提で、一つのアプリだけで完結する作業のほうが限定的です。ですので、&lt;strong&gt;ステージマネージャの思想とは、そもそもPCの文化に合わないと言わざるを得ません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;この問題はステージマネージャに限らず、いわゆる「単機能」とされるすべてにおいて本質的な問題です。大昔、モバイルワードプロセッサなハードウェアであるポメラを使ったときに、「自分にとってテキストを編集するというのは、単機能すら満たしていない、不完全なものだった」と痛感したことがあります。本質的にこれと同じ問題と思います。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/45308888-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;何をもって単機能というのか、一つとはなにか、ポメラとノートパソコンの場合&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/45308888-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/01/output-20.webp" alt="何をもって単機能というのか、一つとはなにか、ポメラとノートパソコンの場合" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;10年前（！）の記事ですが、考えは変わりません。以下に一部引用します。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;これは常々私が難しいと考えていることなのですが、&lt;strong&gt;何をもって「一つ」なのかは明確ではなく、しかも人によって、かつ日々刻々と変わりうる&lt;/strong&gt;。そして、&lt;strong&gt;一つの捉え方こそ、その人の性格であり、能力であり、考え方であり、センスである&lt;/strong&gt;と私は思います。端的に言うと、&lt;strong&gt;ポメラの「一つ」は私の考える「一つ」ではなかったということです&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://hack-le.com/45308888-2/" &gt;何をもって単機能というのか、一つとはなにか、ポメラとノートパソコンの場合 - 或る阿呆の記&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;今回で言えば、 &lt;strong&gt;&amp;ldquo;ステージマネージャの「一つ」は私の考える「一つ」ではなかった&amp;quot;と言えるでしょう&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;まとめます。&lt;/p&gt;&#10;&lt;p&gt;ステージマネージャはマルチタスクモドキを実現するウィンドウマネージャ的な機能で、iPadにおいてはできることを拡張するものですが、元々マルチタスクのMacにおいては、逆にあえて制約を課す、いわゆる集中モードが本質となります。&lt;/p&gt;&#10;&lt;p&gt;アプリを主体とし、そのスムージングな切り替えで、やるべき作業に集中することを促します。これは特に、アプリを切り替えてこなしていくタスクで機能します。たとえば、「新着を確認する」というタスクに基づき、メール、Slack、Teams……といったアプリを切り替えるようなケースがあります。&lt;/p&gt;&#10;&lt;p&gt;一方で、複数のウィンドウを並べて作業する場合、できないわけではありませんが、ステージマネージャを使う意味があまりなくなります。設定も煩雑になり、普通に使ったほうが良いのでは、という結論になるのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;これは、PCとiOSの根本的な思想の違いに起因するでしょう。PCは複数のアプリを連携させて一つのタスクをこなすことが普通です。なので、アプリを主体としたステージマネージャでは、「一つのタスクをこなすための最低限にも満たない」ケースが出てきます。それを、設定を頑張って無理くり使う意味はないでしょう。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;作業のすべてに関わるウィンドウマネージャ的な機能は、「便利なユースケースがあること」よりも「不便な場面がないこと」のほうが優先されます&lt;/strong&gt;。その「不便」にぶち当たるまでの時間を測っていた、という感じになりますかね。5日でした。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、便利なシーンがあったことも確かです。&lt;strong&gt;仮想デスクトップごとにステージングマネージャのON/OFFおよびステージの表示・非表示を選ぶことができれば、使い所はある&lt;/strong&gt;かと思います。まぁでもAppleはやらないでしょうね。&lt;/p&gt;&#10;</description></item><item><title>ChatGPTで自分だけSomething went wrong while generating the response. If this issue persists please contact us through help center at help.openai.com.と永遠に言われる時</title><link>https://hack-le.com/chatgpt-something-went-wrong-while-generating-the-response-if-this-issue-persists-please-contact-us-through-help-center-at-help-openai-com/</link><pubDate>Wed, 12 Feb 2025 15:03:17 +0900</pubDate><guid>https://hack-le.com/chatgpt-something-went-wrong-while-generating-the-response-if-this-issue-persists-please-contact-us-through-help-center-at-help-openai-com/</guid><description>&lt;p&gt;ChatGPTが永遠にレスポンス生成しない。最初、またChatGPTが落ちてるのかと思っていたが、他の人たちが使えていたのでおまかんの可能性があると思って調査した。結果、おまかんだった。でもChatGPTのバグとの合わせ技なんじゃないの？とも思いつつ対応メモ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&#10;&lt;ul&gt;&#10;&lt;li&gt;macOS 14.6.1&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Brave 1.75.175&lt;/li&gt;&#10;&lt;li&gt;ChatGPT Plusプラン&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;以下のエラーメッセージが表示されて、会話ができなくなる。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Something went wrong while generating the response. If this issue persists please contact us through our help center at help.openai.com&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;このエラーが出る頻度は徐々に上がっていき、最終的に100%になる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/02/c0070b810faa77e3d2e5139e66dcff00-700x339.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;ただし、ログアウトしない状態、シークレットウィンドウ、別のブラウザ、アプリなど、他の環境からは通常どおり会話ができる。つまり、利用しているブラウザの一時情報に何か問題があるということになる。&lt;/p&gt;&#10;&lt;h2 id="対応-キャッシュの削除"&gt;対応: キャッシュの削除&#10;&lt;/h2&gt;&lt;p&gt;最初、Cookieを削除したがダメだった。仕方ないので、消せるだけローカルのキャッシュを削除した。&lt;/p&gt;&#10;&lt;p&gt;具体的には、デベロッパーツールを起動し、Applicationから以下をClearした。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Cookies&lt;/li&gt;&#10;&lt;li&gt;Session Storage&lt;/li&gt;&#10;&lt;li&gt;Local Storage&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/02/cb3779166f5dd3389e033b46bdd3f04f-700x375.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;リロードして再ログインすると、再び会話できるようになった。&lt;/p&gt;&#10;&lt;p&gt;キャッシュが破損といえばそれっぽいが、何がどうしてそうなるのか。。。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;</description></item><item><title>X APIの使い方メモ</title><link>https://hack-le.com/x-api/</link><pubDate>Wed, 12 Feb 2025 11:18:48 +0900</pubDate><guid>https://hack-le.com/x-api/</guid><description>&lt;p&gt;X APIを使い始めたのでそのメモ。&lt;/p&gt;&#10;&lt;h2 id="準備free前提"&gt;準備（Free前提）&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://developer.x.com/en/portal/dashboard" target="_blank" rel="noopener"&#10; &gt;X Developers&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;アカウント作成。ちなみに誓約文みたいなの最初に書かされるが、僕は以下のように書いて提出した。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;I plan to use the Twitter API to automate the posting and deletion of my own tweets. The frequency will be a few times per day at most. Additionally, I want to explore the capabilities of the Twitter API to evaluate potential business use cases. This includes testing API functionalities to understand their limitations and usability. The data accessed through the API will not be resold or used for commercial redistribution.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Freeプランなら、アカウント作成した時点でアプリがデフォルトでなんかできてる。デフォルトのやつを選択して、以下をGenerateする。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;API Key&lt;/li&gt;&#10;&lt;li&gt;API Secret&lt;/li&gt;&#10;&lt;li&gt;Access Token&lt;/li&gt;&#10;&lt;li&gt;Access Token Secret&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;最初にできるのはReadだけ。&lt;/p&gt;&#10;&lt;p&gt;WriteにはOAuth2.0による認証認可が必要になる。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Twitter Developer Portal (&lt;a class="link" href="command:_cody.vscode.open?%22https%3A%2F%2Fdeveloper.twitter.com%2Fen%2Fportal%2Fdashboard%22" &gt;https://developer.twitter.com/en/portal/dashboard&lt;/a&gt;) にアクセス&lt;/li&gt;&#10;&lt;li&gt;作成したアプリを選択&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;Settings&amp;rdquo; &amp;gt; &amp;ldquo;User authentication settings&amp;rdquo; に移動&lt;/li&gt;&#10;&lt;li&gt;App permissionsを編集し、&amp;ldquo;Read and Write&amp;rdquo; を選択&lt;/li&gt;&#10;&lt;li&gt;権限変更後、トークンを再生成&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以後、Access TokenとAccess Token Secretを置き換えることで、Writeもできるようになる。&lt;/p&gt;&#10;&lt;h2 id="レート制限"&gt;レート制限&#10;&lt;/h2&gt;&lt;p&gt;レート制限がキツイので、最初に書いておく。&lt;/p&gt;&#10;&lt;p&gt;公式を参照しつつ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.x.com/x-api/fundamentals/rate-limits" target="_blank" rel="noopener"&#10; &gt;Rate limits - X&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;15分が一つの単位&#10;&lt;ul&gt;&#10;&lt;li&gt;Free Limitだと、ほとんどのWrite系リクエストは15分に1度しか許されない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;負荷が重そうなものは1日単位&#10;&lt;ul&gt;&#10;&lt;li&gt;削除については、1日あたり17回までのようだ。17ってどっから出てきたんだろう……。&lt;/li&gt;&#10;&lt;li&gt;トレンドやユーザ情報取得系に至っては1日に1回しかできない。とてもカジュアルに試せるものではない。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;トレンド系はBasic以上($200/月……)じゃないと使えない&lt;/li&gt;&#10;&lt;li&gt;ユーザ検索などPro以上($5000/月……)じゃないと使えないものもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;例によってマスクがマスクであるために、現時点(2025-02-12)における情報でしかない。またすぐ変わりそうだが、緩和される可能性は低い。&lt;/p&gt;&#10;&lt;h2 id="基本的な使い方"&gt;基本的な使い方&#10;&lt;/h2&gt;&lt;p&gt;プロフィール取得、投稿、削除。Free Limitは制限めっちゃ厳しいので、カジュアルに実行するとすぐ制限くらう。自分の情報取得は何度か使える。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;requests_oauthlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OAuth1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;API_SECRET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ACCESS_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xx-xx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ACCESS_SECRET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# OAuth 1.0a 認証&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OAuth1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;API_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ACCESS_SECRET&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_user_info&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 自分のユーザー情報を取得する関数&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://api.twitter.com/2/users/me&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;user_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ユーザー情報取得&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;名前: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ユーザー名: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;user_data&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー発生: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;post_tweet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 指定したテキストでツイートを投稿する関数&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://api.twitter.com/2/tweets&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tweet_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ツイート成功 ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tweet_id&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー発生: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delete_tweet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 指定したIDのツイートを削除する関数&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://api.twitter.com/2/tweets/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ツイート削除成功 ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー発生: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 関数を使用する例&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;user_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_user_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# tweet_id = post_tweet(&amp;#34;テストツイート&amp;#34;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# delete_tweet(tweet_id)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="usernameからユーザの情報を取得する"&gt;usernameからユーザの情報を取得する&#10;&lt;/h2&gt;&lt;p&gt;Free Limitでも15分に3回使えて比較的緩い。&lt;/p&gt;&#10;&lt;p&gt;ここからは認証認可をOAuth 2.0でやる。Bearer Tokenをデベロッパーポータルから取得し、それを使ってアクセスする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Bearer Token認証を使用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BEARER_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_user_by_username&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 指定したユーザー名のユーザー情報を取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; username: @を除いたユーザー名&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://api.twitter.com/2/users/by/username/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BEARER_TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;user.fields&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;description,created_at,profile_image_url,public_metrics&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;⚠️ エラー発生: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 特定ユーザーの情報を取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_user_by_username&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tamasan774&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結果&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tama&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3302753743&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;profile_image_url&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://pbs.twimg.com/profile_images/1428753262660833284/zUwv5vPL_normal.png&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;技術者の響きだけで生きてる。酒が飲みたい。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tamasan774&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;followers_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;154&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;following_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;93&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;24154&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;listed_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;17991&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;media_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;222&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2015-07-31T19:15:51.000Z&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="指定した条件でツイートのカウント"&gt;指定した条件でツイートのカウント&#10;&lt;/h2&gt;&lt;p&gt;基本的に無課金おじさんお断りだが、&lt;code&gt;/&amp;lt;a href=&amp;quot;https://docs.x.com/x-api/posts/recent-search-counts&amp;quot;&amp;gt;GET /2/tweets/counts/recent&amp;lt;/a&amp;gt;&lt;/code&gt;だけはFreeプランでも使える。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Bearer Token認証を使用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BEARER_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_recent_tweet_counts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start_time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end_time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 過去7日間の特定クエリに一致するツイート数を時系列で取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; params:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; - query: 検索クエリ（例: &amp;#34;#Python&amp;#34;）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; - start_time: 集計開始時間（ISO 8601形式）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; - end_time: 集計終了時間（ISO 8601形式）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://api.twitter.com/2/tweets/counts/recent&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BEARER_TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;query&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;granularity&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;hour&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# hour, day, minuteから選択可能&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;start_time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;start_time&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;start_time&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;end_time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;end_time&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;end_time&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;エラー発生: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_recent_tweet_counts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ほげほげ&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;details class="swell-block-accordion__item" data-swl-acc="wrapper"&gt;&lt;summary class="swell-block-accordion__title" data-swl-acc="header"&gt;&lt;/summary&gt;&#10;&lt;/details&gt;&#10;&lt;details class="swell-block-accordion__item" data-swl-acc="wrapper"&gt;&lt;summary class="swell-block-accordion__title" data-swl-acc="header"&gt;結果&lt;/summary&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T01:53:04.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;135&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1289&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1775&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1487&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1599&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1469&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1613&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1620&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1964&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1923&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1864&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1938&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1923&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1768&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1334&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;962&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;555&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;440&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;462&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;735&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1271&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1902&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-05T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1858&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1623&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1415&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1286&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1682&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1108&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1046&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1029&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1096&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1058&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1128&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1145&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1286&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1282&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1103&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;974&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;863&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;551&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;332&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;294&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;288&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;439&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1159&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-06T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1232&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;971&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;860&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;964&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1237&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;826&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;791&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;766&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;654&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;661&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;692&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;773&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1072&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1054&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1021&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;917&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;573&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;386&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;310&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;217&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;179&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;227&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;348&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;486&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-07T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;632&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;683&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;581&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;671&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;741&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;703&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;556&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;581&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;769&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;863&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;742&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;746&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;782&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;882&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;702&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;536&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;306&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;234&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;170&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;149&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;129&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;133&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;202&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;288&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-08T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;389&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;391&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;367&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;377&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;306&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;356&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;386&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;394&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;441&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;557&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;680&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;574&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;491&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;425&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;622&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;479&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;271&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;156&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;162&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;259&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;380&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-09T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;457&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;520&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;504&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;508&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;616&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;420&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;421&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;407&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;437&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;724&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1152&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1525&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1474&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1636&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1460&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1157&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;765&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;530&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;429&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;344&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;298&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;415&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;654&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;965&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-10T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1048&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1275&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1100&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T02:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1105&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T03:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1168&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T04:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1165&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T05:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1243&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T06:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1260&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T07:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1230&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T08:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1436&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T09:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1387&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T10:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1572&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T11:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1283&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T12:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1303&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T13:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1188&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T14:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1151&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T15:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;819&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T16:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;486&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T17:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;292&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T18:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;231&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T19:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;224&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T20:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;322&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T21:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;536&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T22:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;689&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-11T23:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;736&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T00:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;699&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T01:53:04.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T01:00:00.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;664&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;meta&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;total_tweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;137215&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;&#10;&lt;h2 id="指定した条件でサーチする"&gt;指定した条件でサーチする&#10;&lt;/h2&gt;&lt;p&gt;多分だいたいみんなこれをやりたいんじゃないかと思うんだが、&lt;a class="link" href="https://docs.x.com/x-api/posts/recent-search-counts" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;GET /2/tweets/search/recent&lt;/code&gt;&lt;/a&gt;つまり7日間でよければFreeプランでも使える。しかも15分に1回。今なら一応。それ以外はプロ以外お断りだ。&lt;/p&gt;&#10;&lt;p&gt;個人でも関心が高い話題についての情報収集くらいには使えるかも？流行言葉は制約的に厳しいと思うけど。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Bearer Token認証を使用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BEARER_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_recent_tweets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_results&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 過去7日間のツイートを検索&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; params:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; - query: 検索クエリ&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; - max_results: 取得する最大ツイート数（10-100）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://api.twitter.com/2/tweets/search/recent&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BEARER_TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;query&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;max_results&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;max_results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;tweet.fields&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;created_at,author_id,public_metrics&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tweets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;search_recent_tweets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;手取りを増やす&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tweets&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# そのほかの使用例&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 画像付きの「猫」ツイートを検索&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#tweets = search_recent_tweets(&amp;#34;猫 has:images -is:retweet&amp;#34;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 「Python」を含む日本語ツイート&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#tweets = search_recent_tweets(&amp;#34;Python lang:ja&amp;#34;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 特定ユーザーの返信を除外したツイート&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#tweets = search_recent_tweets(&amp;#34;from:username -is:reply&amp;#34;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;details class="swell-block-accordion__item" data-swl-acc="wrapper"&gt;&lt;summary class="swell-block-accordion__title" data-swl-acc="header"&gt;結果&lt;/summary&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2929390645&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889497408155095532&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:11:01.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889497408155095532&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @oef4raF1ZW3D4WI: 国民民主「国民の手取りを増やす」\n維新「高校無償化」\n\n自民「企業に補助金。今まで以上に」\n\n少なくとも自民は無いわな。国民に益なし\n\nだいたい過去数十年失敗し続けてるのに、同じことをまだやろうってんだから反省も自浄作用もないわけだ。自…&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;999818589673668608&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496996140163153&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:09:23.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496996140163153&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;129119756&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496791734943868&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:08:34.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496791734943868&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;855312372818264064&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496781559656931&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:08:32.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496781559656931&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @shinjukuacc: 国民民主党が羨ましい？\n他の政党も「手取りを増やす」を掲げて選挙を戦えば良いだけの話では？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1516766731095580677&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496743823433959&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:08:23.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496743823433959&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;808024200&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496377258025115&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:06:56.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496377258025115&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1709033536626593792&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496311738802543&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:06:40.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496311738802543&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;265293455&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496046285496570&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:05:37.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496046285496570&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1307860410&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889496035309048008&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:05:34.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889496035309048008&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;public_metrics&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;retweet_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;682&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;like_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;quote_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bookmark_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;impression_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;author_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1140189324614361088&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;edit_history_tweet_ids&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1889495481585377443&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2025-02-12T02:03:22.000Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889495481585377443&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RT @kirishima_O3: 国民民主党って「手取りを増やす」が公約なんだよね？\nだったら103万の壁にこだわるより、社会保険料増税に反対することの方が優先度高いんじゃないの？&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;meta&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;newest_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889497408155095532&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;oldest_id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1889495481585377443&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;result_count&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;next_token&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b26v89c19zqg8o3frr9u7r3w21gbm3z1eldrda7d2ug71&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;&#10;</description></item><item><title>Macのステージマネージャを使い始めた所感：現実に寄り添った集中モード（多分使わない）</title><link>https://hack-le.com/mac-stage-manager/</link><pubDate>Tue, 11 Feb 2025 04:02:08 +0900</pubDate><guid>https://hack-le.com/mac-stage-manager/</guid><description>&lt;p&gt;いまさらながら、Macでステージマネージャを使い始めようと思いました。ステージマネージャはMac使いなら「名前は聞くけど正直よう知らん」という人も多かろうと思いますが（僕がそうなので）、これはまぁ一言で言うと拡張iPadって感じです。わからん？まぁもうちょっと言えば、一時期流行った集中モードを、もう少し現実的な形にしたというかなんというか。よりわからん？まぁ記事につらつらと書いていきます。&lt;/p&gt;&#10;&lt;p&gt;しばらく使ってみるけど、多分使わなくなるだろうなぁ、というのが所感です。&lt;/p&gt;&#10;&lt;h2 id="ステージマネージャの概要"&gt;ステージマネージャの概要&#10;&lt;/h2&gt;&lt;p&gt;ステージマネージャは、一つのアプリをメインとして、サイドに切り替えるアプリが並んでいくようなUIをOSレベルで実現するものです。iPadOSにもありますというか、むしろiPadの機能というべきものですが、Macでも使えます。以下のような画面になります。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/02/4db3798278552313c0603a7f4f680f22-700x418.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;iPadを使っている人ならば、シングルタスクが基本のiOSにおいて、&lt;strong&gt;マルチタスクモドキ&lt;/strong&gt;ができるということで、その有用性は想像できるかと思います。しかし&lt;strong&gt;元々マルチタスクのMacで意味はあるのか？&lt;/strong&gt; という疑問がわくのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;まぁ実際、&lt;strong&gt;Macにとってステージマネージャは一種の制約を自らに課すという感じがします&lt;/strong&gt;。&lt;strong&gt;マルチタスクをあえてやめたい人向け&lt;/strong&gt;の機能じゃないですかね。そういえば一時期流行りましたね、集中モードとか。あれの延長というような認識です。&lt;/p&gt;&#10;&lt;p&gt;一つのアプリをフルスクリーンで表示して無駄な余白に電力を費やすことを「集中できる」と言い張る時代はさすがに終わったと思いますが、ステージマネージャはもう少し実用的です。&lt;strong&gt;一つの作業には複数のアプリが必要だという現実に多少なりとも向き合っている&lt;/strong&gt;からです。アプリを切り替えられるからね。&lt;/p&gt;&#10;&lt;h2 id="見えているトラップ"&gt;見えているトラップ&#10;&lt;/h2&gt;&lt;p&gt;正直、これ使わないと思っています。明らかに不便なユースケースが目に見えています。具体的には、ファイラからのドラッグ＆ドロップや、ちょっとターミナルを立ち上げてスクリプトを実行したいとか、ドキュメントを表示しながらコーディングしたいとか、そういうちょっとしたいことがやりづらいという明確な欠点があるからです。あとブラウザみたいに複数のウィンドウを開くようなアプリも使いづらいですね。&lt;/p&gt;&#10;&lt;p&gt;まとめると、&lt;strong&gt;以下のようなことが非常にやりづらい&lt;/strong&gt;と思われます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;複数のウィンドウをまたぐ作業（ドラッグ＆ドロップ）&lt;/li&gt;&#10;&lt;li&gt;同時に複数のウィンドウを開く作業（ドキュメント、チャート表示など）&lt;/li&gt;&#10;&lt;li&gt;小さなウィンドウで十分なアプリ（ターミナル、ミュージックプレーヤーなど）&lt;/li&gt;&#10;&lt;li&gt;複数ウィンドウを使うアプリ（ブラウザなど）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;特にドラッグ＆ドロップはわかりやすく致命的に思えますが、一応アプリをすべてのデスクトップで表示するようにすれば、常時表示はできるようになり、ドラッグ＆ドロップもできます。うーんこの。&lt;/p&gt;&#10;&lt;p&gt;しかしそれでも、&lt;strong&gt;ファイラからターミナルを起動してスクリプトを実行するみたいな、そういうユースケースではかなりしんどいことになります&lt;/strong&gt;。なってます。&lt;/p&gt;&#10;&lt;h2 id="特定のユースケースでは活用の余地はありそう"&gt;特定のユースケースでは活用の余地はありそう&#10;&lt;/h2&gt;&lt;p&gt;まぁ使わなくなるだろうという未来が見えているんですが、それでもしばらく使ってみようかなと思っているのは、こういうUX絡みのことは実際にしばらく使わないとなんとも言えないのと、あと&lt;strong&gt;多少イケるユースケースもありそう&lt;/strong&gt;だな、とは思ったからです。&lt;/p&gt;&#10;&lt;p&gt;ただその前提として、&lt;strong&gt;シングルディスプレイではない&lt;/strong&gt;、というものがあります。サブディスプレイとして、43インチのチューナーレステレビにもHDMIで接続しているため、一応デュアルディスプレイの体裁です。これが何を意味するかというと、ドラッグ＆ドロップのようにディスプレイを跨ぐ作業ができるということです。なんでドラッグ＆ドロップのためにそんな大技しないといけないのかとは思いますが、まぁ少なくともできるので。……31.5インチのディスプレイも繋いでいましたが、先日逝きました……。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/7-7-acer-31-5-display/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;7年7か月使ったAcerの31.5インチディスプレイが何もしてないのに壊れた&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/7-7-acer-31-5-display/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/02/display.webp" alt="7年7か月使ったAcerの31.5インチディスプレイが何もしてないのに壊れた" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;それで、このサブディスプレイなんですが、43インチという大きさからわかるように、作業というよりは動画垂れ流しとかチャート表示とか、PCから操作できるテレビみたいな使い方をしています。ってかまぁチューナーレステレビなので……。この&lt;strong&gt;サブディスプレイの用途においては、けっこうステージマネージャの思想は合うな&lt;/strong&gt;、と思いました。これはテレビ的な使い方が本質的にシングルタスクだからでしょうね。&lt;/p&gt;&#10;&lt;p&gt;普段は垂れ流しておいて、ちょっと補助的にアプリを使いたいときだけ起動させる、アプリをスタックするディスプレイとして利用すると、結構良いのでは、と思われました。&lt;/p&gt;&#10;&lt;p&gt;あとはまぁ、このマルチタスクモドキをわざわざマルチタスクのOSでやる理由は、あえて制限をかける、集中モード的な意味合いがあると思っており、久しぶりにそういう意識高そうなことをするのも悪くないと思ったのです。&lt;/p&gt;&#10;&lt;h2 id="使わなくなるとは思う"&gt;使わなくなるとは思う&#10;&lt;/h2&gt;&lt;p&gt;最終的な評価は実際にしばらく使ってからにしますが、恐らく使わなくなるだろうと思います。確かにいくつかのユースケースにはハマると思うんですが、こういう機能は、&lt;strong&gt;便利なユースケースがあることよりも、あらゆるユースケースにそれなりに対応できることが重要だから&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;ステージマネージャは明らかに通常の使い方よりも制約を課すものです。恐らくその制約が、耐えがたい苦痛になるケースが出てきて、かなりイライラして「やってられませんわ！」となる未来は見えます。仮想デスクトップごとに、ON/OFFを制御できれば、使い所ありそうなんですけどね。&lt;/p&gt;&#10;&lt;p&gt;あと&lt;strong&gt;なんかバグありそう&lt;/strong&gt;っていうか、&lt;strong&gt;既に挙動不審&lt;/strong&gt;なケースが出てます。私はファイラでQSpace Proというアプリを使っているのですが、サブディスプレイでQSpace Proを起動し、QSpace Proからターミナルを立ち上げて、ターミナルをメインディスプレイに移動しようとすると、失敗するということがおきました。まぁステージマネージャ考えたような人は絶対こういう使い方しないんでしょうけれど。なんというか、Lion以降のMacってパワーユーザを無視しているよなと正直思います。。。&lt;/p&gt;&#10;&lt;p&gt;まぁいずれにせよ、しばらくは使ってみます。正直いつまで耐えられるかなって感じです。&lt;/p&gt;&#10;</description></item><item><title>7年7か月使ったAcerの31.5インチディスプレイが何もしてないのに壊れた</title><link>https://hack-le.com/7-7-acer-31-5-display/</link><pubDate>Sat, 08 Feb 2025 14:14:09 +0900</pubDate><guid>https://hack-le.com/7-7-acer-31-5-display/</guid><description>&lt;p&gt;7年7か月目のことだった。&lt;/p&gt;&#10;&lt;p&gt;昨日まで元気に動いていたAcerの31.5インチディスプレイが、或る日の朝に電源をつけると、一瞬光が走るが、それっきり何も映らない。ロゴすらうつらない。すべての周辺機器を外して電源ケーブルだけを接続して試してなお、そうだった。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;何もしてないのに壊れた&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="大往生ってやつなんだよなぁ"&gt;大往生ってやつなんだよなぁ&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;まぁつまり大往生&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;今回逝ったのは、Acerの31.5インチWQHDなディスプレイ EB321HQUBbmidphx というやつです。当時29,800円で購入しました。&lt;/p&gt;&#10;&lt;p&gt;この子を買ったのは2017年の7月で、それから2025年2月まで、ほぼ毎日頑張っていました。自分はPCを普通の人よりかなり酷使していますし、出張や旅行、帰省でもしていない限り、液晶ディスプレイは一日一度は必ず使われます。そう考えると、2500日は使っていたでしょうね。特に途中でコロナ禍による在宅ワークなどあったことも考えると、1日あたりの平均点灯時間はそれなりに長かったと思えます。特に直近は十数時間は毎日使っていましたし、なんだかんだで2万時間くらいは使っているかもなぁ。&lt;/p&gt;&#10;&lt;p&gt;液晶ディスプレイの寿命は調べるとかなり長く、3万時間とか5万時間とか言われているようです。そう考えると少し短いような気もしますが、まぁでも毎日使い続けて7年7か月もったのだから、十分かなとも思います。&lt;/p&gt;&#10;&lt;h2 id="おもひで"&gt;おもひで&#10;&lt;/h2&gt;&lt;p&gt;まぁ自分はディスプレイについてはさほどこだわりがあるわけではありません。ディスプレイによって見え方が大きく変わることは事実なのですけれど、&lt;strong&gt;解像度が高くて色域そこそこならば、それ以上は特に求めない&lt;/strong&gt;、という感じです。したがって、31.5インチでWQHDのこのディスプレイは、自分にとってそれなりに満足がいくものでした。実際、Mac miniに繋げて「iMacよりでかーい」などと嬉しがって書いた記事があります。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/315-display/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini に31.5インチディスプレイ。iMacよりもでかいのだ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/315-display/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_5712_1789579499.webp" alt="Mac mini に31.5インチディスプレイ。iMacよりもでかいのだ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;さすがに7年以上使っているので、劣化もしていただろうと思いますが、自分はあまりそういうところにも気づけないレベルです。新品と並べて比較すればわかるんじゃないかな程度ですね。まぁでも、一昨年あたりに買い換えを検討したりはしていたので、何かを感じていたのかもしれません。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/31-5-wqhd/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;31.5インチでWQHDなディスプレイを使い始めて6年以上&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/31-5-wqhd/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12169_1789621051.webp" alt="31.5インチでWQHDなディスプレイを使い始めて6年以上" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;でも当時も、大きな不満もなく買わなければタダとかいうにべもない結論に至っているので、その程度だったのでしょう。&lt;/p&gt;&#10;&lt;p&gt;それでも不満をあげるとすれば、&lt;strong&gt;入力インタフェースが少なかったのは、ちょっと困った&lt;/strong&gt;かな。DP、HDMI、DVI（！）が1つずつしかありませんでした。せめてHDMIが2つだったら良かったんですけれど。当時はまだDVIがあったんですねぇ。昔のMac miniと繋げるためか、Mini DP - DVI というとてもニッチなケーブルもありました。ああ二度と使わねぇ。&lt;/p&gt;&#10;&lt;p&gt;また、31.5インチはさすがにデカすぎただろうか、という気持ちもあります。いや、画面がデカいのはいいんですけれど、置き場がね……。ディスプレイは置かないといけないので。当たり前ですが。取り回しがよくなかったなぁ。でも、2560x1440表示しようと思ったら、サイズ的にはこれくらいほしいのはそうなんですよね。&lt;/p&gt;&#10;&lt;p&gt;なんにしても、7年7か月毎日よく頑張ってくれました。お疲れ様ですね。&lt;/p&gt;&#10;&lt;h2 id="新しいディスプレイ"&gt;新しいディスプレイ&#10;&lt;/h2&gt;&lt;p&gt;ところで、PCを使い始めて長いですが、スタンドアロンの液晶ディスプレイが完全に逝ったのを見るのは初めてです（ラップトップのディスプレイが死んだことはある）。ノートPCの画面に我慢できなくなり、初めてディスプレイを買ったのはいつだったかな。もう15年ばかりたちましょうか。ハードディスクの死亡は何度も経験していますが、ディスプレイはもっと安定しているんでしょうね。&lt;/p&gt;&#10;&lt;p&gt;それに、ディスプレイのスペックが安定して、普段使いをする上ではあまり困ることはなさそうになったのはここ数年で、10-15年くらい前だと、まだ液晶ディスプレイのスペックはわかりやすく日進月歩で進んでいたように思われます。したがって、数年もたつとスペックを理由とした乗り換えもよくありました。&lt;/p&gt;&#10;&lt;p&gt;液晶ディスプレイのスペックにも色々ありますけれど、わかりやすいところではやはり解像度、サイズ、入力インタフェースあたりがあるでしょう。このへんが落ち着いたのはここ数年だという認識です。まぁもちろん今も進化は続いていますし、4Kディスプレイとか昔は絶対無理！というコストだったのに、いまは値段もそれなりに熟れています。&lt;/p&gt;&#10;&lt;p&gt;というかまぁ、今メインで使っているのが実は4Kディスプレイですね。やたら安いことで有名なメーカーINNOCNの27C1U-Lというやつで、27インチ4Kであるにも関わらず25,550円で買うことができました。安すぎてビックリして買った覚えがあります。去年の7月のことです（また7月なのは、Amazonのセールで買っているってことでしょうねぇ）。&lt;/p&gt;&#10;&lt;p&gt;購入はちもろぐさんの記事を参考にしたかな「&lt;a class="link" href="https://chimolog.co/amazon-prime-day-2024/" target="_blank" rel="noopener"&#10; &gt;2024年のAmazonプライムデー【解説とおすすめセール品】 | ちもろぐ&lt;/a&gt;」。この記事によると、ポイント込みで21,200円相当といっているので、覚えていませんがそれなりにポイントもついていたのかもしれません。いずれにせよ安いことは確かです。&lt;/p&gt;&#10;&lt;p&gt;このディスプレイを衝動買いして、Acerディスプレイはサブとなったのですが、結果的には買っておいたおかげで、ディスプレイが逝っても慌てずに済みました。いやまぁちょっと慌てたけど。&lt;/p&gt;&#10;&lt;p&gt;ちなみに27C1U-Lは現在売り場から消えているようです。中華にはよくあること。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16714&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;現在売り場にある27C1Uは高く見えますが、27C1U-Lはこれの廉価版のハズで、実際色域とか負けてます。まぁ僕ごときは気にしませんが。&lt;/p&gt;&#10;&lt;h2 id="もう一枚買うかどうか"&gt;もう一枚買うかどうか&#10;&lt;/h2&gt;&lt;p&gt;3000日近く頑張ってくれたAcerディスプレイくんが逝ったので、現在ほぼシングルディスプレイ体制となっています。ほぼ、というのは、正確には43インチのチューナーレス4Kテレビ(Xiaomi)にHDMIで繋げているからですね。ただこちらは基本的にYouTubeを流したりチャートなどのグラフを表示したりする用で、作業用ではありません。このXiaomiのテレビも異様に安かったので買いました。こうして見ると未だにディスプレイを定期的に買っているわけですが、あまり記事にしていないあたり、昔のような興奮はもはやディスプレイに感じなくなったようです。まぁそりゃそうか。&lt;/p&gt;&#10;&lt;p&gt;昔のように欲しいから買うと言うより、必要に迫られてディスプレイを買う感じです。デュアルディスプレイにするかどうか、悩み所です。昔はトリプルディスプレイ体制でたまの来客をドン引きさせていましたが、電気代もかかるし、マルチディスプレイはアプリケーションの挙動が難しくなることもあるし、何より場所がないし、色々思うところがあります。どうするかなぁ……と言いつつ、とりあえずノートPCをデスクトップPCの隣に置いています。&lt;/p&gt;&#10;</description></item><item><title>思考ダダ漏れ仕様のDeepSeek、多分メンタルケアはできない</title><link>https://hack-le.com/deepseek-mental/</link><pubDate>Fri, 31 Jan 2025 23:31:49 +0900</pubDate><guid>https://hack-le.com/deepseek-mental/</guid><description>&lt;p&gt;最近噂の中華AI・DeepSeek R1、オープンソースでローカルでも使えるということで、早速試している。M2 Pro Mac miniくらいのスペックでも、Qwen-14B q8_0くらいのモデルをまぁまぁ待てる程度の速度で使えて有り難い。_&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;DeepSeekの面白いところは&lt;think&gt;タグで囲まれる思考過程&lt;/strong&gt;だ。この思考過程が見られるのは今までになく、「コイツ（AI）ら今までこんなこと考えてレスポンスしていたのか」というのがわかって非常に興味深い。思考過程がわかることから、話が変な方向にいってるなと思ったら修正にも使えるだろう。&lt;/p&gt;&#10;&lt;h2 id="aiポジティブに褒めてやるかすごいですね"&gt;AI「（ポジティブに褒めてやるか）すごいですね！」&#10;&lt;/h2&gt;&lt;p&gt;しかし技術的な相談ならともかく、雑談でも思考回路を見せられるものだから、なんだか笑ってしまう。たとえば以下のやりとりを見てほしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/01/b85d547813e774fe215316b2d2e79301-700x314.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;途中で切れているのは日本語変換をEnterで決定するとそのまま投稿してしまうため……Ctrl-mならいける&lt;/em&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;lt;考え中&amp;gt;&lt;/p&gt;&#10;&lt;p&gt;（お、ダイエットって言った。&lt;strong&gt;ポジティブに努力を認めて、前向きに話そう&lt;/strong&gt;。）&lt;/p&gt;&#10;&lt;p&gt;（励ましたいから、決意にコメントしよう。進捗についてどう感じているかを尋ねるのもいいかもしれない。&lt;strong&gt;興味を持っていることを示す&lt;/strong&gt;ためだ。）&lt;/p&gt;&#10;&lt;p&gt;（また、&lt;strong&gt;トーンは軽くてフレンドリーなものにし、カジュアルな形でサポートを提供&lt;/strong&gt;しよう。もしダイエットの話をしたくない場合に備えて、ほかの話題にも対応できることを伝えておくのがよさそうだ。）&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;/考え中&amp;gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ダイエット中ですか？それはすごいですね！&lt;/strong&gt; 自分も昔ダイエットしたことがありますが、なかなか続きませんでした…。あなたはどんな風にダイエットしていますか？楽しく続けられていますか？&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;（ポジティブに褒めてやろう）という思考回路を見せられた後に「すごいですね！」と言われる僕の気分&lt;/strong&gt;よ。その後の「（AIなのに）ダイエットしたことがある過去」もツッコミどころではあるんだが、それにしてもここまであけっぴろげだと興ざめには違いない。&lt;strong&gt;コミュニケーションって思考が見えないからこそ成り立つんだなと再認識した&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;こんな感じなので、ChatGPTでよくある人生相談的な使われ方は、DeepSeekは向いてないなと思われた。&lt;/p&gt;&#10;&lt;h2 id="或る阿呆の言葉"&gt;或る阿呆の言葉&#10;&lt;/h2&gt;&lt;p&gt;一方で、阿呆なこと言ったのに対して真面目に考えている様を見るのはけっこう楽しい。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/01/3bfcf5edc25242ade954cdb70c0b01f2-700x396.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;途中で切れてるのは（ｒｙ&lt;/em&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;lt;/考え中&amp;gt;&lt;/p&gt;&#10;&lt;p&gt;&amp;ldquo;オッパッピー&amp;rdquo; is a cute or playful way to say &amp;ldquo;hello&amp;rdquo; or &amp;ldquo;hi&amp;rdquo; in Japanese, sometimes used by younger girls. It&amp;rsquo;s a bit informal and friendly. &amp;hellip;. I should respond in Japanese, keeping it friendly and open.&#10;（&amp;ldquo;オッパッピー&amp;rdquo;……それは日本語で「こんにちは」や「やあ」を言う時の、キュートで冗談半分の言い方だ。若い女の子が時々使う、少しカジュアルでフレンドリーな表現だ……フレンドリーかつオープンに反応すべきだな）&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;/考え中&amp;gt;&lt;/p&gt;&#10;&lt;p&gt;「勿論！雑談大好きです」&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;オープンにもほどがある。しかし&lt;strong&gt;小島よしおを学習していない&lt;/strong&gt;のは仕方ないにしても、あまり女の子はオッパッピー言わないと思われる。どちらかというとオッサンではないか（名推理）。&lt;/p&gt;&#10;&lt;p&gt;ちなみにChatGPTに聞いてみたら知っていたが、内部で検索しているのか、それとも学習しているのかはthinkがないのでわからない。&lt;/p&gt;&#10;&lt;h2 id="内面の言語化"&gt;内面の言語化&#10;&lt;/h2&gt;&lt;p&gt;雑談の思考回路を見せられるのは妙な気分だ。&lt;strong&gt;人間も、瞬間的にこれをやっているんだろうな&lt;/strong&gt;と思う。雑談に正解はないので、その向かうべきところは人によって異なるが、その場所の導き出し方の特徴を、我々は個性と呼ぶのだろうなぁ。&lt;/p&gt;&#10;&lt;p&gt;しかしみんながDeepSeekの限界を試している中で、自分は何をやっているのか……。&lt;/p&gt;&#10;&lt;p&gt;（宣伝：AIに英文を作らせて、英語多読の学習支援をするWebアプリを作りました。DeepSeekは使っていませんが（出力結果が使いづらかった）、是非どうぞ「&lt;a class="link" href="https://hack-le.com/extensive-reading-app/" &gt;生成AIで無限に英語を読める多読学習Webサービスを作った：目指せ百万語 - 或る阿呆の記&lt;/a&gt;」）&lt;/p&gt;&#10;</description></item><item><title>Cognitoマネージドログイン画面でsigninSilentが失敗する</title><link>https://hack-le.com/cognito-managed-login-silent-signin/</link><pubDate>Sun, 26 Jan 2025 21:53:48 +0900</pubDate><guid>https://hack-le.com/cognito-managed-login-silent-signin/</guid><description>&lt;p&gt;今開発しているWebアプリでは、認証機構にAmazon Cogniotを利用している。いつのまにか導入されていたマネージドログイン画面は便利なので、早速用いることにした。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://dev.classmethod.jp/articles/amazon-cognito-managed-login/" target="_blank" rel="noopener"&#10; &gt;[アップデート] Amazon Cognito で「マネージドログイン」機能が導入され、ログインメニューのブランディングのカスタマイズが可能となりました | DevelopersIO&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;多分ホストUIをさらにカスタマイズできるようにしたものなのかな。個人開発なのであまりこだわっていないが、会社なら重要な機能だろう。&lt;/p&gt;&#10;&lt;p&gt;さて、開発中のWebアプリはSPAで、タブを開く度に認証を走らせる必要がある。このときCogniotのマネージドログイン画面を利用している際、サイレントサインインしようとしたらエラーが出た。リダイレクトしてサインインはできる。この状況について。&lt;/p&gt;&#10;&lt;h2 id="エラーの状況cspで弾かれる"&gt;エラーの状況：CSPで弾かれる&#10;&lt;/h2&gt;&lt;p&gt;状況をもう少し詳細に書く。まず認証用のライブラリとして &lt;code&gt;react-oidc-context&lt;/code&gt;を利用している。これは&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://github.com/authts/react-oidc-context" target="_blank" rel="noopener"&#10; &gt;authts/react-oidc-context: Lightweight auth library based on oidc-client-ts for React single page applications (SPA). Support for hooks and higher-order components (HOC).&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;で、新しいタブで開くと改めて認証をとおさないといけないのだが、これは上記README.mdを見ると、Automatic sign-inでできる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// index.jsx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;oidcConfig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AuthProviderProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;userStore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;WebStorageStateStore&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// src/App.jsx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;react&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useAuth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hasAuthParams&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;react-oidc-context&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useAuth&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hasTriedSignin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setHasTriedSignin&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// automatically sign-in&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;hasAuthParams&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isAuthenticated&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeNavigator&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;hasTriedSignin&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signinRedirect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;setHasTriedSignin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hasTriedSignin&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Signing&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="err"&gt;/out...&amp;lt;/div&amp;gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isAuthenticated&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Unable&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;/div&amp;gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeUser&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Log&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;/button&amp;gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;何をしているかと言うと、&lt;code&gt;isAuthenticated&lt;/code&gt;など認証周りの値が得られなかった時は、&lt;code&gt;auth.signinRedirect()&lt;/code&gt;を実行する。&lt;code&gt;hasTriedSignin&lt;/code&gt;でループを防いでいる。&lt;/p&gt;&#10;&lt;p&gt;これは機能するんだが、&lt;strong&gt;リフレッシュトークンの有効期限自体が切れていると、マネージドログイン画面にぶっ飛ばされてしまう&lt;/strong&gt;。Webアプリにアクセスするとログイン画面にぶっ飛ばされるのは中々強烈な体験なので、これは避けたい。&lt;/p&gt;&#10;&lt;p&gt;なので、バックグラウンドで&lt;code&gt;iframe&lt;/code&gt;を使ってサインインを実行するらしい&lt;code&gt;auth.silentSignin()&lt;/code&gt;を使いたい。しかしこれを使うと、&lt;strong&gt;マネージドログイン画面側のCSPにより弾かれエラーが出てしまう&lt;/strong&gt;ようだった。&lt;/p&gt;&#10;&lt;h2 id="対応カスタムドメインの設定"&gt;対応：カスタムドメインの設定&#10;&lt;/h2&gt;&lt;p&gt;それでしばらく困っていて、「リフレッシュトークンの有効期限を10年にして10年後に考えよう」などと追い詰められていたのだが、よくよく考えたらCSPということはドメインの問題なのではないかと思われた。&lt;/p&gt;&#10;&lt;p&gt;で、Cognitoのカスタムドメイン機能を使って、サブドメインとしてauthを設定し、&lt;code&gt;COGNITO_DOMAIN&lt;/code&gt;の設定をカスタムドメインに置き換えたところ、無事 auth.silentSignin() がとおるようになった。&lt;/p&gt;&#10;&lt;p&gt;言われてみれば「そうか」という感じなのだが、実際には丸一日くらい対応悩んでいた。AIに聞いても堂々巡りだったし。なんかコードに引きずられてしまうのか、コードの話ばかりで「いやそれじゃできないんだって」という押し問答をする不毛な時間を過ごした。&lt;/p&gt;&#10;&lt;p&gt;まぁとりあえずできてよかったが、それはそれとして、今開発しているのは別に大した情報をもったサービスではなく、再ログインを促すのもなんだし、リフレッシュトークン10年にしてもいいな、とは思った。&lt;/p&gt;&#10;&lt;h2 id="久しぶりの技術記事"&gt;久しぶりの技術記事&#10;&lt;/h2&gt;&lt;p&gt;久しぶりに技術系の記事を書いた。何もしていなかったということはないのだが（むしろ頑張っていたと思う……）最近技術系の備忘録は全部AIに書かせて別館行きにしていたために。なんだか既に別館のほうがアクセスが多く、やる気を失っている今日この頃である。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ai.hack-le.com/" target="_blank" rel="noopener"&#10; &gt;AIによる技術記事 備忘録 | AIに同じことを聞かない&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;最近は技術記事以外もAI化しつつある。文字列になった人間の感性を食べて生きている僕には、世知辛い世の中になった。&lt;/p&gt;&#10;</description></item><item><title>イトーキのゲーミングチェア、サリダ YL9Gを3年4か月使ってヘタれた</title><link>https://hack-le.com/yl9g-gaming-chair/</link><pubDate>Tue, 21 Jan 2025 14:59:59 +0900</pubDate><guid>https://hack-le.com/yl9g-gaming-chair/</guid><description>&lt;p&gt;まぁ、もう割と限界かなって感じ。元々在宅業務がまぁまぁあって、特にここ1年はほぼ自宅作業で、座っている時間はゲーマー比でも倍くらいは使った気がするので、しゃあないかも。&lt;/p&gt;&#10;&lt;h2 id="購入の経緯"&gt;購入の経緯&#10;&lt;/h2&gt;&lt;p&gt;サリダのYL9Gを買ったのは2021年9月。その前に2万くらいで買った椅子をケンシロウにやられたあとみたいな無残な姿になるまで使い込み、ひび割れたせんべいのような座面になっていたため、さすがにと思って買い換えた。&lt;/p&gt;&#10;&lt;p&gt;で、2万はすぐに逝ったから次は多少高いのを買うかなと思って、4万くらいでなんか買えるといいなと思った。ゲーミングチェアはデカくて大仰なので、オフィスチェアの中古にするかなとか思っていたんだけれど、そんな中で見かけたのがイトーキのゲーミングチェアらしからぬゲーミングチェアだった。デザインは比較的シックで、「赤色入ってるからゲーミングでしょ？」と言わんばかりだったが、ゲーミングチェアらしい機能性もあったりする。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16580&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;最近少し値上がりしているが、当時は42,000円ほどで、さらに10%オフクーポンがもらえたものだから、38,000円ほどで手に入れることが出来た。一応今も、セールを狙えばAmazonで42,000円ほどになっていることもあるようだ。もっとも椅子は全体的に値上がり基調なので、この後どうなるかはわからないが……。&lt;/p&gt;&#10;&lt;h2 id="4年目に突入したサリダyl9gの現状と評価"&gt;4年目に突入したサリダYL9Gの現状と評価&#10;&lt;/h2&gt;&lt;p&gt;さて、&lt;strong&gt;購入から3年4か月ほど経過がした2025年1月現在、彼も又無残な姿になり果てつつ或る&lt;/strong&gt;。メッシュはボロボロに破れ、クッションはへたれ、最近ついに&lt;strong&gt;ガスシリンダーが逝ったのか高さ調整ができなくなってしまった&lt;/strong&gt;。僕は少し足がつかないくらいに座面をあげるのが好きなので（足が短い）、これはけっこうショックだ。あと数回ネジがぶっ飛んでいる（定期的に締め直すメンテを怠っている）が、いよいよ入らなくなってきた感もある。かなり無理矢理締めたが、なんかもう壊れそう。&lt;/p&gt;&#10;&lt;p&gt;まぁ僕は在宅で仕事をすることがたいていのプログラマであるため、&lt;strong&gt;普通の人の数倍ハードに椅子を酷使している&lt;/strong&gt;。それを考えると、3年以上はとりあえずもったということなので、まぁこんなものなのかもしれない。たしか前回の椅子も2,3年くらいでボロボロになった気がする。あの頃は在宅で仕事することなんてなかったから、今の負荷だと1年もたなかったかもしれないなあの椅子。&lt;/p&gt;&#10;&lt;p&gt;そういうわけだから、&lt;strong&gt;4万弱ほどしたサリダのYL9Gについては、別にネガティブな評価というわけではなく、まぁこんなもんなのかなぁという感じ&lt;/strong&gt;だ。ただ&lt;strong&gt;本音を言えばもうちょっと持ってほしかったという気持ちもある&lt;/strong&gt;。1年で1万以上かー……。&lt;/p&gt;&#10;&lt;p&gt;でも姉に愚痴ったら &lt;strong&gt;「4万の椅子があんたの生活で3年持ったなら十分じゃね」とのことだったので、まぁ客観的にはそういう評価になる気はする&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="次の選択肢あれこれ"&gt;次の選択肢あれこれ&#10;&lt;/h2&gt;&lt;p&gt;仕方ないので、次の椅子についても考え始めないといけない。いまはとりあえず大昔コーナンだったかコメリだったかで買った500円のクッションをしいて誤魔化しているが、仕事柄椅子は身体に直接関係するため、ケチるところでもないし。&lt;/p&gt;&#10;&lt;h3 id="同価格帯のオフィスチェアっぽいゲーミングチェア"&gt;同価格帯のオフィスチェアっぽいゲーミングチェア&#10;&lt;/h3&gt;&lt;p&gt;さすがにもう一回サリダYL9Gを買う気にはならないが、2025年1月、同じような製品はけっこうあるので選択肢は存外ある。あるものの、まぁ結果は多分同じような感じなのだろうなぁと思われる。まぁそれでもいいかもしれないけどさ。&lt;/p&gt;&#10;&lt;p&gt;そういえば玄人志向がゲーミングチェア出して話題になっていたね。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16585&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;個人的にはオットマンは備え付けのオプションじゃなくて、安物でいいから独立したやつを買った方がいいと思う。オットマン使うようなやつはものぐさだろ（偏見）。&lt;strong&gt;ものぐさなやつがオットマン出したり引っ込めたりするのめんどくさいから&lt;/strong&gt;さ。&lt;/p&gt;&#10;&lt;p&gt;あとCORSAILのゲーミングチェアも見かけてビックリしたんだけど、CORSAILってあの電源とか売ってるCORSAIL？&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16586&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;無線機器とエアロバイク売ってるアルインコほどではないか。&lt;/p&gt;&#10;&lt;p&gt;まぁいずれにしても、性能的には恐らくYL9Gと似たような感じなのではないかなぁと思われる。&lt;/p&gt;&#10;&lt;h3 id="中古のオカムラとか"&gt;中古のオカムラとか&#10;&lt;/h3&gt;&lt;p&gt;別の選択肢として、中古のオカムラは考えている。具体的に言えば、バロンチェアだったら送料込み5万で手に入るしなって。前回は「中古の高級チェアよりも4万のオフィスチェアっぽいゲーミングチェアのほうが良いのでは？」と思ったりもしたが、まぁ結果的には値段なりだったという感じ。&lt;/p&gt;&#10;&lt;p&gt;それだったらさらなる高級チェアの中古ほうが、座り心地も耐久性も上の可能性があるのではないか、と思われる。5万で買って5年持ったら今のサリダYL9Gより有能と言えるし。&lt;/p&gt;&#10;&lt;p&gt;前の職場の椅子がオカムラだったからなんとなく感触がわかるのもある。バロンチェアではなかったけど。けっこう持つんじゃないかな。多分あんな感じで法人がたくさん手放すんでしょオカムラ。&lt;/p&gt;&#10;&lt;h3 id="新品のハイスペ"&gt;新品のハイスペ&#10;&lt;/h3&gt;&lt;p&gt;まぁ買わないんだけどハーマンミラーがこの前Amazonセールで20%割引されていたらしいまぁそれでもMac買えるけど。さすがにそれならMac買う。無駄に買う。&lt;/p&gt;&#10;&lt;p&gt;ってかそれ以上に、多分僕は扱いが乱暴なので、十万二十万する椅子のオーナーとして不適格に思える。今のサリダYL9Gもなんか色々こぼした記憶がある。まぁ4万だしどうせ数年使ったらボロボロやしええやろ精神でいた。椅子はそんな感じで座りたい。&lt;/p&gt;&#10;&lt;h2 id="次を買わないといけないが"&gt;次を買わないといけないが&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで、サリダのYL9Gに限界感が漂い始めたので、また次の椅子を買わなきゃいけないなぁと項垂れている。椅子高いからなぁ。しかも全然興味ない。高い買い物でしょっぱいもの買いたくないから仕方なく調べているけれど、本当に全然楽しくないので、自分自身の無関心さを感じる。まぁでもこればかりは仕事道具でもあるので……。&lt;/p&gt;&#10;&lt;p&gt;あー、どうしたものかなぁ。&lt;/p&gt;&#10;&lt;p&gt;……などと言っていたら、オフィスバスターズでいやに安くなっていたハイバック肘つきのバロンチェアを見かけ、&lt;strong&gt;衝動でポチった&lt;/strong&gt;とさ。これも送料込み4万。&lt;/p&gt;&#10;</description></item><item><title>6年目に突入するMacBook Pro 2019</title><link>https://hack-le.com/mbp-2019-2025/</link><pubDate>Mon, 13 Jan 2025 14:40:48 +0900</pubDate><guid>https://hack-le.com/mbp-2019-2025/</guid><description>&lt;p&gt;僕のメインノートはMacBook Pro 2019だ。たしか2020年の初売りで買った。CPUは4コア 1.4GHzのCore i5で今見ると酷いもんだが、それでもその少し前までラップトップは2コアが多い状態だったので、まだマシだったという。Ryzenが出るまでIntelは徹底的に舐めプしていたため、だいたい2013年以降のMacノートは全体的にひどかった。なので、&lt;strong&gt;MBP2019は今となってはクソスペもいいところだが、当時はそれでも「やった！4コアだ！」と嬉しがっていた&lt;/strong&gt;ものだ。&lt;/p&gt;&#10;&lt;h2 id="proには使えないゾ"&gt;Proには使えないゾ&#10;&lt;/h2&gt;&lt;p&gt;まぁそれも当時の話で、その後AppleSiliconで世界は一変し、また鼻ほじしていたIntelもさすがに焦ったのか矢継ぎ早にコア数を増やし始め、そしてRyzenは今も変わらず強さを発揮しているため、&lt;strong&gt;2025年の今見るとMBP 2019のスペックは「誰に強いられてこんなの買ったの？」みたいな感じ&lt;/strong&gt;ではある。少なくとも2025年にこのPCでProの仕事は出来そうにない。&lt;/p&gt;&#10;&lt;p&gt;まぁ本気でこれを使ってやろうと思えば、RAMを16GBに盛っているのでギリギリできなくもないとは思う。8GBなら詰んでた。ストレージ256GBはだいぶネックかなぁ。Dockerとか使い始めるともうだいぶつらいね。エミュレータなんてとてもとても。まぁなにをしたところでCore i5 1.4GHzの絶望感。サーバレスで手元で一切動かさない開発くらいかなぁやれるとしたら。&lt;/p&gt;&#10;&lt;p&gt;ということで、実際&lt;strong&gt;このPCはProとは名ばかりで、その役割の9割くらいはWebブラウジング&lt;/strong&gt;である。こうしてブログを書いたりAmazonで買い物したり楽天でお買い物マラソンとかいう謎の競争を繰り広げるのに利用している。あとはRSSから後で読むようにNotionに飛ばした記事を読む時。&lt;/p&gt;&#10;&lt;p&gt;まぁ唯一開発っぽい役割といえば、たまに出先でコードを確認するくらいには使うこともある、くらいかな。でも実行しない。できない。&lt;/p&gt;&#10;&lt;p&gt;あー、あとみんな大嫌いバタフライキーボードの問題もあるね。これは結局なんだったんだろうね。Touch Barも結局音量調節以外で使ったことがないまま消えていく運命。&lt;/p&gt;&#10;&lt;h2 id="2025年もmbp-2019を使っている"&gt;2025年もMBP 2019を使っている&#10;&lt;/h2&gt;&lt;p&gt;ということで&lt;strong&gt;MBP 2019はMac冬の時代の雪解けを感じさせるものではあったものの、まだまだ春にはほど遠い代物である&lt;/strong&gt;。それにも関わらず、なんだかんだで使い続けている。&lt;/p&gt;&#10;&lt;p&gt;まぁ僕は開発は全部デスクトップPCでやるし、出先で何かしらすることもあまりないので、ラップトップについては貧弱でも良いというのがある。実際次にMacノートを買うならMBAだろうなと思う。&lt;/p&gt;&#10;&lt;p&gt;とはいえもっとスペックの高いWindowsのゲーミングPCも持っているのだから、何もわざわざこんな低スペMacをサブとはいえ使う必要はないのではないかと思うし、実際一時期WindowsノートにノートPCの役割を集約させようとしていた時期もあるのだが、結局今こうしてブログ記事を書いているのはこの骨董品と化しつつあるMBP 2019であったりする。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;確かに低スペなのだが、それでも用途を限れば十分であるし、そしてその十分な用途の中では、なんだかんだで快適&lt;/strong&gt;なんだ。&lt;/p&gt;&#10;&lt;h2 id="macが良かったんだ"&gt;Macが良かったんだ&#10;&lt;/h2&gt;&lt;p&gt;Macの良いところは結局のところmacOSなのだなと思う。物理レベルで言えば入力インタフェースのトラックパッドが素晴らしいし、ソフトウェアではUNIXの資産が使えるし。デフォルトでEmacsキーバインドも使えるし。画面はやけに綺麗な感じがして、13インチなのに15インチのWindowsゲーミングマシン(144Hzリフレッシュレート)よりも見やすいと思える（まぁRetinaだからそれは数値的にもそうかも）。&lt;/p&gt;&#10;&lt;p&gt;全体的に、カタログスペックとは別に、&lt;strong&gt;実際に使っていて心地よいと感じられる&lt;/strong&gt;。僕は2010年からMacを使い始めているが、Windowsもずっと並行して使い続けていたし、最初の頃はむしろWindowsマシンのほうがメインだった。最初からMacユーザだったわけではない。しかし結局Macメインになっている。&lt;/p&gt;&#10;&lt;p&gt;まぁこれは、僕が研究室の方針でLinuxしか使ってはならん（デバイスドライバの関係でどうしてもWindowsがいるなら仕方ない）という状態で、割と真面目にやっていた僕はLinuxの便利さを痛感したため、一応UNIXであるMacが使いやすかったのだろう。当時はMacユーザは開発者の中でもまだ少数派で、なんかの集まりにいくとやけにちっこいWindowsノートを広げている中で僕だけ13インチのでかいMacを広げた時には、アルミの無骨さもあり、我ながらイケてない感じがしたな。Macノートがカッコいいと見做されたのはそのもうちょっと後だ。&lt;/p&gt;&#10;&lt;p&gt;まぁとにかく、今みたいに開発者（特にWeb系）はとりあえずMacだよね見たいな空気なぞなく、なんでMac使ってんの？と怪訝な顔をされる時代だったわけだが、僕はMacがいいと思ったから使い始めたのだし、&lt;strong&gt;なんだかんだそれから15年使い続けているわけだから、そこらへんの毎年Mac買い換えてますみたいなのよりよほどApple愛があると思う&lt;/strong&gt;のだが、しかしAppleの経済的利益にはあまり貢献していないかもしれない。&lt;/p&gt;&#10;&lt;p&gt;ここまでの話のとおり、ラップトップは未だにMBP 2019だし、デスクトップはもちろんiMacなぞ買ったことはなく、M2 Pro Mac mini(SoC/RAM盛り)を整備済み品で、ストレージさえバカ高いCTOを嫌がってストレージは自前で用意したいものを外付けで繋いだのを起動ディスクにし、お役御免となってIntel Mac mini 2018は今なおコンテナサーバーとして24時間稼働している。&lt;/p&gt;&#10;&lt;p&gt;あ、でもタブレットはiPadを過去4台買ってるわ。今も2台使っているし。iPadこそ真のパーソナルコンピュータという言うべきものだと思うし、ジョブズもそう考えていたんじゃないかと思うが、イマイチ流行らんね。iPhoneは過去3台くらい使っていたが、今はAndroidだ。iOSとAndroidを交互に使ってきたが、iPhoneがあまりにも高くなりすぎたのと、最近はAndroidもよくなってきたのので、もうiPhoneをメインにすることはないかもしれないなぁ。&lt;/p&gt;&#10;&lt;h2 id="もうしばらくがんばれ"&gt;もうしばらくがんばれ&#10;&lt;/h2&gt;&lt;p&gt;なんか話がずれてきたけど、要はまぁなんだかんだで僕はMacが好きなんだろうなぁと思うし、たとえ低スペでもこのMBP 2019も使える限りは使い続けたい気でいる。買い換えるよりは、使い続けたいんだよな。押し入れに、もう起動しなくなったボロボロのiPodがあるよ。それくらい続けられることは、幸福だよな。&lt;/p&gt;&#10;&lt;p&gt;まぁ、M4 MBA出たらしれっと買い換えるかもしれないけどね！&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/macbook-pro-2019/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;MacBook Pro 2019&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/macbook-pro-2019/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>Xiaomi Pad 6S Proが欲しい話、あるいはXiaomi Pad 7、または結局iPlay70mini Ultraかもしれない話</title><link>https://hack-le.com/xiaomi-pad-6s-pro-7-iplay70mini-ultra/</link><pubDate>Fri, 10 Jan 2025 12:05:28 +0900</pubDate><guid>https://hack-le.com/xiaomi-pad-6s-pro-7-iplay70mini-ultra/</guid><description>&lt;p&gt;最近、タブレットが欲しいと思っていろいろ物色している。既に3枚ばかり家に板が転がっているわけだが、それにも飽き足らずなお新たな板を欲しているのは、板ばかりあるものの、どれもこれも帯に短したすきに長しのような状況になっているからだ。&lt;/p&gt;&#10;&lt;h2 id="所持しているタブレットと現状の課題"&gt;所持しているタブレットと現状の課題&#10;&lt;/h2&gt;&lt;h3 id="ipad-pro-第三世代-129インチ-64gb-2018-の使い道と課題"&gt;iPad Pro 第三世代 12.9インチ 64GB (2018) の使い道と課題&#10;&lt;/h3&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ipad-pro-64gb-2018/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;iPad Pro 第三世代 12.9インチ 64GB (2018)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ipad-pro-64gb-2018/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;まずiPad Proは、その大きさを活かして主に電子書籍を読んでいる。あとたまにゲームかな。本当はもうちょっとクリエイティブな使い方もしたいところだけれど、結局あまりできていない。Apple Pencilまであるのに。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一番の問題はストレージが64GBしかないこと&lt;/strong&gt;だ。これは本当に失敗した。256GBを買わなくてはいけなかった。256GBのものさえ買っていれば、今でもまぁいいかという感じで使っていたと思う。&lt;/p&gt;&#10;&lt;p&gt;パフォーマンスの問題もある。2025年の現代においては、ゲームをするときのパフォーマンスがややつらい。大型で画面は見やすいけれど、性能的にはもう一歩頑張りたいところ。まぁそんなにゲームしないんだけどさ。あと多分Webブラジングとかも地味に挙動が遅めの気がする。&lt;/p&gt;&#10;&lt;h3 id="ipad-air-4-2020-256gbの使い道と課題"&gt;iPad Air 4 (2020) 256GBの使い道と課題&#10;&lt;/h3&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ipad-air-4-256gb-2020/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;iPad Air 4 256GB (2020)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ipad-air-4-256gb-2020/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;iPad Air 4は2025年においても申し分ない性能を発揮している&lt;/strong&gt;。&lt;strong&gt;だがひび割れている&lt;/strong&gt;。ひび割れているのは僕が落としたからなので僕が悪い。僕が悪いのは確かにそうなんだが、それはそれとしてひび割れている。ひび割れているタブレットは使いづらい。Apple Careにはもちろん入っていない。&lt;/p&gt;&#10;&lt;p&gt;怪しい非正規のところに修理の相談もしてみたが、44,000円とべらぼうに高い費用を見積もられてしまった。確実になおるなら一考の余地もあるが、リスクが大きいためやむなく見送り。さりとて二束三文で処分するのも忍びない。&lt;/p&gt;&#10;&lt;p&gt;結局なんかソーシャルゲームをそばで動かすとか、何かを垂れ流すとかいった用途で使い続けているのだが、やはりつつらみがある。&lt;/p&gt;&#10;&lt;h3 id="kindle-fire-tablet-10"&gt;Kindle Fire Tablet 10&#10;&lt;/h3&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/kindle-fire-tablet-10/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Kindle Fire Tablet 10&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/kindle-fire-tablet-10/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;セールで買ったKindle Fire Tablet 10の性能はハッキリ言って低い。まぁAmazonのコンテンツを楽しむためのモバイルなので仕方が無い。非公式のやり方だが、Google Play Storeを入れることができて、ユーティリティ程度のものであれば、たいていのAndroidアプリをインストールすることができる。&lt;/p&gt;&#10;&lt;p&gt;使えているかと言えば微妙である。せっかくあるので使っているものの、もし身近に欲しい人がいたらあげてしまいそうな程度だ。そういえば以前もそうやって世話になっている職場の人にセールで買ったが使い道のないKindle Fire Tabletをあげたことがある。歴史は繰り返す……。&lt;/p&gt;&#10;&lt;h2 id="新しいipad-proを買えば全部解決するのはわかる"&gt;新しいiPad Proを買えば全部解決するのはわかる&#10;&lt;/h2&gt;&lt;p&gt;ということで、今は主として二台のiPadを用途ごとに使い分けている現状だ。まぁそれでも大きく困っていることがあるわけではない。強いて言うなら、&lt;strong&gt;たまにゲームをやるときは割れていないディスプレイでやりたいと思う&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;この問題は、新しいiPad ProないしiPad Airを買えば一気に解決する。それはわかっている。だが、価格が高すぎる。早く手取りを増やしてほしい。ゴチャゴチャ言わないで基礎控除増額75万円さっさと上げてくれそうしたら買える。役人の考えたクソくだらない事業とかいらねぇから俺にiPadを買わせてくれ。&lt;/p&gt;&#10;&lt;p&gt;まぁいずれにせよ、今とても新しいタブレットに15万とか20万とかポンと出す気にはなれないわけだ。&lt;/p&gt;&#10;&lt;h2 id="xiaomi-pad-6s-pro"&gt;Xiaomi Pad 6S Pro&#10;&lt;/h2&gt;&lt;p&gt;で、最近いろいろと物色しており、今一番気になっているのがXiaomi Pad 6S Proである。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16527&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;12.4インチでSnapdragon 8 Gen 2、ストレージ256GB、8GB RAMで市場価格69,800円。microSDに対応していないのが玉に瑕か。セールなどを狙えば6万切りまであり。iPad Proにはかなうべくもないが、一昔前の整備済み品より安いこの価格は魅力的に過ぎる。Amazonだとたまに倉庫品や中古品が6万程度で出ているので、それが狙い目かなぁと思う。&lt;/p&gt;&#10;&lt;p&gt;が、この前のセールでまさに出ていたのに、結局ためらって買えなかったという。&lt;/p&gt;&#10;&lt;p&gt;これ1台あれば、現在僕がタブレットに期待している役割はほとんど集約させられそうではあるんだが、そうは言ってもそれなりの価格なのは確かだし、その割に生活が劇的に変わるのかと言えばそんなこともないだろうし、だいたい今あるタブレットどうするんだとか、まぁいろいろと考え込んでしまった。&lt;/p&gt;&#10;&lt;h2 id="その他の選択肢"&gt;その他の選択肢&#10;&lt;/h2&gt;&lt;p&gt;また他にもいろいろ選択肢があるのも、悩ましいところだ。以前書いたiPlay 60 mini Turboの記事なんかはその一環だったりする。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/iplay60-mini-turbo%e3%81%8c%e3%81%bb%e3%81%97%e3%81%84%e3%81%a8%e6%80%9d%e3%81%a3%e3%81%9f%e3%81%91%e3%82%8c%e3%81%a9snapdragon-7-gen3%e6%90%ad%e8%bc%89%e6%a9%9f%e3%82%92%e5%be%85%e3%81%a4%e3%81%93/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;iPlay 60 mini Turboがほしいと思ったけれどSnapdragon 7&amp;#43; Gen3搭載機を待つことにする&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/iplay60-mini-turboがほしいと思ったけれどsnapdragon-7-gen3搭載機を待つこ/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_16309_1789090986.webp" alt="iPlay 60 mini Turboがほしいと思ったけれどSnapdragon 7&amp;#43; Gen3搭載機を待つことにする" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;気になっているのは今後出るであろうSnapdragon 7+ Gen 3搭載のUltraのほうだが、最近ガルマックスからもう既にAmazonで出てるよという記事が出ていた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://garumax.com/alldocube-iplay-70-mini-ultra-is-now-listed-on-amazon-japan" target="_blank" rel="noopener"&#10; &gt;https://garumax.com/alldocube-iplay-70-mini-ultra-is-now-listed-on-amazon-japan&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;実際見てみると確かにあったのだが、お値段が54,444円とちょっと高め。8-9インチクラスでこれだとXiaomiのほうがいいんじゃないのって思ってしまうな。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16526&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;まぁ恐らくここからえげつないほど値引かれると期待している。実際iPlay 60 mini Turboの公式価格は44,999円だが、実際の市場価格はその半値程度である。したがって、iPlay 70 mini Ultraも半値程度に……なったらいいなぁという3万切ってたら即ポチ不可避。&lt;/p&gt;&#10;&lt;p&gt;まぁ実際、値引かれないと今後発売されるだろうXiaomi Pad 7の前に撃沈しそうだし、革命を期待したいところだ。&lt;/p&gt;&#10;&lt;p&gt;あと高級路線だとRedmagic Novaなんてのもある。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16528&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;ただSnapdragon 8 Gen 3 + 256GBストレージで92,800円は確かに安いが、この価格だとiPad Airあたりが見えてくる。表面的なベンチマーク以上にiPadは快適かつOSのサポート期間が長くてApple Pencilも使えるなどあるため、正直ここまでくるとiPadでええやんっていう。&lt;/p&gt;&#10;&lt;h2 id="悩んでいる"&gt;悩んでいる&#10;&lt;/h2&gt;&lt;p&gt;ということで、結局迷っているだけで何もポチらない日々を送っている。まぁiPlay 70 mini Ultraの市場価格がどれくらいになるか次第かなぁ。&lt;/p&gt;&#10;</description></item><item><title>ブラウザ画面の自動更新はTab Reloaderでいいよなって</title><link>https://hack-le.com/tab-reloader-querier/</link><pubDate>Wed, 25 Dec 2024 14:33:59 +0900</pubDate><guid>https://hack-le.com/tab-reloader-querier/</guid><description>&lt;p&gt;&lt;strong&gt;Tab Reloader&lt;/strong&gt;という拡張機能を使っている。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chromewebstore.google.com/detail/tab-reloader-page-auto-re/dejobinhdiimklegodgbmbifijpppopn?hl=ja" target="_blank" rel="noopener"&#10; &gt;https://chromewebstore.google.com/detail/tab-reloader-page-auto-re/dejobinhdiimklegodgbmbifijpppopn?hl=ja&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;名前の通り、特定のタブを一定間隔で自動更新してくれるだけのやつだ。使い方にクセがなく、無料で必要な機能が一通り揃っている。これだけで、特定のページを定期的にリフレッシュする要望はほぼ解決する。まぁこういうのは昔からいろいろあるので、別にTab Reloaderじゃなくてもいいと思うが、別に拘りもないのでTab Reloaderを使っている。&lt;/p&gt;&#10;&lt;h2 id="ノーコードツールと自動更新"&gt;ノーコードツールと自動更新&#10;&lt;/h2&gt;&lt;p&gt;具体的には、僕はこのTab Reloaderを、&lt;strong&gt;Querier&lt;/strong&gt;で使っている。Querierはいわゆるノーコードサービスで、データベースとかAPIからデータを引っ張ってきたのを、テーブルにしたりグラフにしたりした画面を構成するものだ。一言でいえばダッシュボード作るやつ。&lt;/p&gt;&#10;&lt;p&gt;たとえばこれは毎日SSDの健康状態を送信しグラフ化するという謎アプリである。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/12/6b3326a6ef696b0f010f1502484621e5-700x385.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁ色々制約はあるんだけれど、さっとつくってみる分には楽。僕のようなフロントエンドクソ雑魚野郎でも、とりあえず目的を達せられる。ドラッグ＆ドロップでボタンとか表とか配置するだけなら僕にもできるので。バックエンドしかできないマン向けツール。&lt;/p&gt;&#10;&lt;p&gt;ただ、DBとかAPIとか自分で作れると画面はすぐできるんだが、Querierの画面はリアルタイムで内容をリフレッシュできない。つまり、更新ボタンを設置して、手動で更新ボタンを押さないと最新のデータが見られない。機能的にあっていい気はするんだが、まぁリアルタイム更新みたいな機能はノーコード的に色々考えることがあって面倒なのだろうなと思われる。&lt;strong&gt;ノーコードは「いかにして制約を作り込むか」みたいな側面がある&lt;/strong&gt;ので。&lt;/p&gt;&#10;&lt;p&gt;しかし、データを表示するダッシュボードならば、放置しておいてふと見た時には最新データが表示されてほしいのが実際のところだ。SSDの健康状態ならどうでもいいけれど、僕は仮想通貨のグラフ表示なんかもこれでやっているので、そういうのだとせめて5分に一回くらいは更新してほしい。&lt;/p&gt;&#10;&lt;p&gt;というわけで、Tab Reloaderで「5分ごとに更新」とかにしておけば、それっぽい自動更新機能が実現する。した。&lt;/p&gt;&#10;&lt;h2 id="こういうのでいい"&gt;こういうのでいい&#10;&lt;/h2&gt;&lt;p&gt;世の中にはリアルタイム更新の仕組みを作るための複雑な技術が山ほどあるし、それが必要な場面もある。ただ、Querier + Tab Reloaderみたいな組み合わせ程度でも、機能することもある。&lt;/p&gt;&#10;&lt;p&gt;何がなんでもバカ高いソリューションをどこぞのSIerに頼む必要はないし、自前でWebSocketとか仕組みを構築するほどでもない。要はできればいい。&lt;/p&gt;&#10;&lt;p&gt;Querierで作った画面が、Tab Reloaderで勝手に更新される。それを眺めながら、「まぁこれで十分だな」と思っている今日この頃だし、実際この程度の話で終わる業務はけっこうあるように思われる。まぁ、現実には色々と組織的な壁なんかもあるので、現場の工夫が受け入れられるかは別の話ではあるが。&lt;/p&gt;&#10;</description></item><item><title>複数ブラウザやChromeマルチユーザはEverSyncでブックマーク同期が便利</title><link>https://hack-le.com/browser-eversync/</link><pubDate>Sun, 22 Dec 2024 13:19:59 +0900</pubDate><guid>https://hack-le.com/browser-eversync/</guid><description>&lt;p&gt;ブラウザ間、あるいはChromeのマルチアカウント運用でのブックマーク同期は面倒だ。なんでそんなことする必要があるかといえば、&lt;strong&gt;組織やプロジェクトごとに異なるブラウザプロフィールを運用&lt;/strong&gt;する必要性があるからだ。ま、僕の場合は趣味で複数ブラウザを運用しているということもあるが。Chrome, Brave, Firefox、全部起動している。&lt;/p&gt;&#10;&lt;h2 id="ブックマークの一元管理したいはやくしたい"&gt;ブックマークの一元管理したいはやくしたい&#10;&lt;/h2&gt;&lt;p&gt;特に趣味で複数ブラウザを運用している場合に顕著だが、業務上の都合で複数運用している場合でも、すべてのブックマークを独立させるのは非効率だろう。というか、普通に面倒臭い。&lt;/p&gt;&#10;&lt;p&gt;かつては、&lt;strong&gt;Xmarks&lt;/strong&gt;のような拡張機能があって、これが複数ブラウザ間でのブックマーク同期を可能にしていた。しかし今はサービス終了している。まぁChromeとかブラウザ自身が同期機能もったのが大きいだろう。たいていの人は一つのブラウザで一つのプロフィールしか使ってないだろうし。&lt;/p&gt;&#10;&lt;h2 id="eversyncで同期できる"&gt;EverSyncで同期できる&#10;&lt;/h2&gt;&lt;p&gt;ということでしばらくブックマーク同期難民だったのが、今は&lt;strong&gt;EverSync&lt;/strong&gt;を使っている。EverSyncはChrome、Firefoxで使える拡張機能で、BraveのようなChromiumファミリーでも利用できる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chromewebstore.google.com/detail/eversync-sync-bookmarks-b/iohcojnlgnfbmjfjfkbhahhmppcggdog" target="_blank" rel="noopener"&#10; &gt;https://chromewebstore.google.com/detail/eversync-sync-bookmarks-b/iohcojnlgnfbmjfjfkbhahhmppcggdog&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;自動同期的なこともできるが、僕はこの手の同期アプリで双方向は可能な限り避けたいと思っている。いや、双方向は絶対こう、バグるんだよね。バックアップも双方向同期はまず避けてるな。そんなわけで、僕は正と決めたメインのBraveブラウザのみをアップロード元とし、その他のFirefoxやChromeにおいてはダウンロードオンリーの運用をしている。めんどくさいっちゃめんどくさいけど、ブックマークが破壊された時の手間を思えば、安い保険だと思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/12/c2d2ac73bef591cbec5ddfa6d7c5a260-700x451.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Manual Syncしかしないしけた客&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="数ヶ月これで運用"&gt;数ヶ月これで運用&#10;&lt;/h2&gt;&lt;p&gt;いつからこの運用を始めたのか明確に覚えていないが、数ヶ月ばかりは経過していると思う。まぁ実際Bookmarkの同期は便利だし、ブックマークバーに「エロサイト」なんて名前のフォルダでも入れてない限り、誰が見ても特に問題ないものだから、実際的だと思う。どこぞのサーバにアップロードしているのが不安という見方もあるだろうが、内容的にはURLのメモでしかないので、あまり問題にならんだろう。っていうかそこまで不安な人はそもそも同期とか考えるもんじゃないだろうし。&lt;/p&gt;&#10;&lt;p&gt;という、EverSyncはいいですよというだけの記事。&lt;/p&gt;&#10;</description></item><item><title>ミニPC物色記: GMKtecのミニPCを3シリーズほど見る</title><link>https://hack-le.com/minipc-gmktec/</link><pubDate>Fri, 20 Dec 2024 08:55:03 +0900</pubDate><guid>https://hack-le.com/minipc-gmktec/</guid><description>&lt;p&gt;仕事用に一つミニPCがほしいと思っている。ブラックフライデーに買えばよかったかもしれないのだが、あの時点ではまだそこまで購入の意思が固まっていなかった。実は今も固まっていない。どちらかというと&lt;strong&gt;ミニPCをウィンドウショッピングする時間が楽しいので、ほしいという気持ちになっていると思っているだけかもしれない&lt;/strong&gt;。しかしWindowsまたはLinuxの業務用PCがほしいという実需もあるため、なんだかんだで買うかもしれない。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、今はミニPCの相場観を知りたい。なのでこの記事は、そのウィンドウショッピングのメモである。&lt;/p&gt;&#10;&lt;h2 id="ミニpcの選定基準"&gt;ミニPCの選定基準&#10;&lt;/h2&gt;&lt;p&gt;基本的には変えられないものを優先する。そうだね、CPUだね。あとインタフェース。SSDとメモリはどうせ増設するからそれなりでいいよ。とはいえ価格が熟れたタイミングで買いたいので、いきなり即交換というわけにもいかないのも事実。&lt;/p&gt;&#10;&lt;p&gt;ってかインタフェースはどれもやけに豪華で、LANが2.5Gb対応でしかもデュアルが標準なのはすげぇなと思う。NASかよ。Wi-fi 6もどれも対応だし。まぁこういうのは結局最後は安定性なんだけどね……。&lt;/p&gt;&#10;&lt;h2 id="5万弱-gmktec-ryzen-7-pro-6850h"&gt;5万弱: GMKtec Ryzen 7 PRO 6850H&#10;&lt;/h2&gt;&lt;p&gt;一番気になっているのは、Ryzen 7 PRO 6850H搭載の以下のPCだ。&lt;strong&gt;Ryzen 7 PRO 6850H + 16GB RAM(DDR5) + 512GB NVMe SSD で5万弱。これが一つの基準になる&lt;/strong&gt;。インタフェースも地味に豪華で、USB4*2、HDMI2.1対応など、マジかと思う。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16440&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;価格を見ると64,000円くらいしていることがあるが、基本的にクーポン商法である。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/12/2fa96d4467663bb4aa1ee9b757ba1ef7.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;これがタイムセールになるとクーポン適用価格より気持ち安い程度になる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/12/b7b844f077b104aeaebffbcf8b5c553d-700x285.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;keepaが頼りにならない&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;なんか道頓堀の閉店セール的な不誠実さを感じるが、最近の中華製品ではデフォルトだし、まぁ安いには違いない。また、その他の機種を見ていっても、値付け自体は妥当に思えた。売り方はまぁ確かにアレなんだけど……。&lt;/p&gt;&#10;&lt;h2 id="4万弱-gmktec-ryzen-7-5825u"&gt;4万弱: GMKtec Ryzen 7 5825U&#10;&lt;/h2&gt;&lt;p&gt;価格を1万ちょっと下げると、Ryzen 7 5825U搭載のミニPCが見えてくる。4万よりちょっと下がって37000円くらいが安い時の相場みたいだ。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16443&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;デスクトップ用途なら6850Hのモデルのほうを選びたいところだが、Ryzen 7 5825Uはパフォーマンスは落ちてもその分省エネなわけで、&lt;strong&gt;自宅用のサーバー用途だとこちらのほうが適切な可能性もある&lt;/strong&gt;。インタフェースもUSB 3.2 Gen1 *2, USB2 * 2, ディスプレイ向けとしてDP, HDMI, Type-C(DP/DATA)と、サーバならまぁ十分と思われる。メモリはDDR4だが、正直普通に使っていてDDR5の恩恵を感じることは稀だろうし、価格などを考えると現状はまだそのほうが扱いやすい気もする。&lt;/p&gt;&#10;&lt;h2 id="2万台は専用あるいは学習用途なら"&gt;2万台は専用あるいは学習用途なら……&#10;&lt;/h2&gt;&lt;p&gt;2万台になってくると、Intel N-150とかになってくる。特定の専用の用途で使うPCとしては良いと思うが、ある程度汎用的に使う想定ならばさすがにちょっと心許ない。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;16445&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;とはいえコスパは高い。N150とはいえ、22000円で12GB RAM(DDR5), 512GB SSD。悪くない。&lt;/p&gt;&#10;&lt;p&gt;まぁでも学習用のサーバー入門機としては十分に思えるし、僕が学生時代ならポチっていた気もする。&lt;/p&gt;&#10;&lt;p&gt;またサーバとして見た時も、6850Hのモデル1台よりこれ2台のほうが面白い可能性はある。物理的に2台あるほうが扱いやすいこともままあるので。&lt;/p&gt;&#10;&lt;h2 id="性能比較"&gt;性能比較&#10;&lt;/h2&gt;&lt;p&gt;ChatGPTが2秒でやってくれました。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Intel N150&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Ryzen 7 5825U&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Ryzen 7 6850H&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;コア/スレッド数&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4コア / 4スレッド&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8コア / 16スレッド&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8コア / 16スレッド&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;基本クロック周波数&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.6 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.0 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.2 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;最大ブーストクロック&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;非対応&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4.5 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4.7 GHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TDP&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10W&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;15W&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;45W&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;内蔵GPU&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Intel UHD Graphics (24 EUs)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Radeon RX Vega 8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Radeon 680M&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Cinebench R23 (シングル)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;872&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1,459&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1,498&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Cinebench R23 (マルチ)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2,518&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10,751&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;13,145&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;iGPU FP32性能&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;288 GFLOPS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2,048 GFLOPS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3,379 GFLOPS&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;情報は、CPU性能比較サイト「&lt;a class="link" href="https://www.cpu-monkey.com/" target="_blank" rel="noopener"&#10; &gt;CPU Monkey&lt;/a&gt;」を基にしています。&lt;/p&gt;&#10;&lt;p&gt;やっぱまぁサーバ用途だと5825Uが一番コスパが良さそうではある。&lt;/p&gt;&#10;&lt;h2 id="全部欲しい"&gt;全部欲しい&#10;&lt;/h2&gt;&lt;p&gt;ほしい。早く手取り増やして。基礎控除75万増額したらこれ全部買える。&lt;/p&gt;</description></item><item><title>NotionのMermaid記法でお絵かきするのが良いと伝える動画</title><link>https://hack-le.com/notion%E3%81%AEmermaid%E8%A8%98%E6%B3%95%E3%81%A7%E3%81%8A%E7%B5%B5%E3%81%8B%E3%81%8D%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8C%E8%89%AF%E3%81%84%E3%81%A8%E4%BC%9D%E3%81%88%E3%82%8B%E5%8B%95%E7%94%BB/</link><pubDate>Sat, 07 Dec 2024 12:09:35 +0900</pubDate><guid>https://hack-le.com/notion%E3%81%AEmermaid%E8%A8%98%E6%B3%95%E3%81%A7%E3%81%8A%E7%B5%B5%E3%81%8B%E3%81%8D%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8C%E8%89%AF%E3%81%84%E3%81%A8%E4%BC%9D%E3%81%88%E3%82%8B%E5%8B%95%E7%94%BB/</guid><description>&lt;p&gt;姉とNotion談義していた時に、Mermaid記法を普及しようと思った。スクリーンレコードで動画をとって見せてみたが、「何が起きてるのかわからないｗ」と言われて撃沈した。まぁそうか……。&lt;/p&gt;&#10;&lt;p&gt;まぁでもせっかく撮影したので、なんとなく雰囲気を察せられる動画として残すだけの記事。&lt;/p&gt;&#10;&lt;h2 id="notion--mermaid記法の動画"&gt;Notion &amp;amp; Mermaid記法の動画&#10;&lt;/h2&gt;&lt;p&gt;動画は以下。&lt;/p&gt;&#10;&lt;p&gt;&lt;video controls src="https://hack-le.com/images/uploads/2024/11/01035f564973c8fd1266bf76b09358cc.mov"&gt;&lt;/video&gt;&lt;/p&gt;&#10;&lt;p&gt;動画にしてしまうと記事文本文では言うことがない。言わなきゃ気づかないと思うけど、変換候補があれなのは固有名詞です笑&lt;/p&gt;&#10;&lt;h2 id="動画もアリか"&gt;動画もアリか&#10;&lt;/h2&gt;&lt;p&gt;今さらだけれど動画や音声をアップロードしていくのもアリかなと思った。本当に今さらだけど。&lt;/p&gt;&#10;</description></item><item><title>iPlay 60 mini Turboがほしいと思ったけれどSnapdragon 7+ Gen3搭載機を待つことにする</title><link>https://hack-le.com/iplay60-mini-turbo%E3%81%8C%E3%81%BB%E3%81%97%E3%81%84%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%E3%81%91%E3%82%8C%E3%81%A9snapdragon-7-gen3%E6%90%AD%E8%BC%89%E6%A9%9F%E3%82%92%E5%BE%85%E3%81%A4%E3%81%93/</link><pubDate>Sat, 30 Nov 2024 14:07:20 +0900</pubDate><guid>https://hack-le.com/iplay60-mini-turbo%E3%81%8C%E3%81%BB%E3%81%97%E3%81%84%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%E3%81%91%E3%82%8C%E3%81%A9snapdragon-7-gen3%E6%90%AD%E8%BC%89%E6%A9%9F%E3%82%92%E5%BE%85%E3%81%A4%E3%81%93/</guid><description>&lt;p&gt;ここ数年Amazonのブラックフライデーではあまり良いものに巡り会えていないが、せっかくの期間なので何かしらないだろうかと探し回っている。&lt;/p&gt;&#10;&lt;h2 id="iplay-60-miniってなんぞ"&gt;iPlay 60 miniってなんぞ&#10;&lt;/h2&gt;&lt;p&gt;今回目についたのはALLDOCUMEという格安タブレット界隈では割と有名らしいメーカーのiPlay 60 mini Turboという8インチクラスのタブレットで、25000円というお値段にもかかわらずSnapdragon 6Gen1 搭載ということで、「おお、スナドラか」と心惹かれた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://garumax.com/alldocube-iplay-60-mini-turbo-review" target="_blank" rel="noopener"&#10; &gt;8.4型タブ「ALLDOCUBE iPlay 60 mini Turbo」の実機レビュー！SD 6 Gen 1搭載でゲーム性能も向上 - ガルマックス&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ガルマックスの記事によるとAntutuのスコアは55万点といったところで、まぁメディア視聴が主な用途であれば悪くはなさそうだ。&lt;/p&gt;&#10;&lt;p&gt;悪くないなぁ、どうしようかなぁと思ってXを検索していたところ、AliExpressでつい3週間前には1.9万円程度で買えたという情報を見て、急速に買う気が失せてしまった。+6,000円で買うのはちょっと……。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://twitter.com/EggmanGames/status/1856291547895214383" target="_blank" rel="noopener"&#10; &gt;https://twitter.com/EggmanGames/status/1856291547895214383&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;なお今もAliExpressだと2.3万円くらいでそこに1900円のクーポンがあるので、それを使えば2.1万円ほどといえる。ポイントを考えても、Amazonより安い。また、楽天リーベイツで6%ほどポイントをつけられるようなので、諸々込みで考えると2万円ほどにはなりそうだ。そんならけっこういいのかもしれない？&lt;/p&gt;&#10;&lt;h2 id="snapdragon-7-gen3搭載機が出るらしい"&gt;Snapdragon 7+ Gen3搭載機が出るらしい&#10;&lt;/h2&gt;&lt;p&gt;と思ったものの、一度買う気が落ち込むとあまり買おうという気にもならないもので、落ち着いて他に良いものは見直していると、iPlay60 mini Ultra的なのが出る予定あるらしいことを知った。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://daily-gadget.net/2024/11/20/post-79887/" target="_blank" rel="noopener"&#10; &gt;Alldocubeから8.8インチ小型ゲーミングタブレットまもなく登場！Turboからさらに高性能化【掌玩mini 2 Ultra】&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これはSnapdragon 7+ Gen3が搭載されるらしい。これを使ったOnePlus Ace 3Vなどは4万ちょいなのにAntutuのスコアを見るとPixel 9並のスコアをたたき出しているようで、たいへん有望な逸品となっている。まぁ実際に使って見ると色々あるようだが（「&lt;a class="link" href="https://androplus.jp/entry/oneplus-ace-3v-review/" target="_blank" rel="noopener"&#10; &gt;OnePlus Ace 3Vレビュー。約4.2万円で原神53FPSプレイ可能な高性能ミドルレンジスマホ - AndroPlus&lt;/a&gt;」）少なくとも僕が持っているPixel 7よりよほど早いことは確定だろう。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/pixel-7-128gb-2022/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Pixel 7 128GB (2022)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/pixel-7-128gb-2022/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;turboはAntutuスコアが55万点なのでゲームはちょっとつらそうだなと思うけれど、これを使ったやつならば僕がやっている程度のゲームは問題なくできそう。となると、まぁお値段はいくらか高くなるにしても、リーズナブルには違いなかろうし、待ってもいいかなぁ、と思った。&lt;/p&gt;&#10;&lt;h2 id="買う物がない"&gt;買う物がない&#10;&lt;/h2&gt;&lt;p&gt;ということで、せっかくのAmazonブラックフライデーだが、今のところ何も買えずにいる。まぁ無理に買う必要はないのだが。&lt;/p&gt;&#10;</description></item><item><title>M4 Mac miniのベンチを見て悔しがるM2 Pro Mac miniユーザなど</title><link>https://hack-le.com/m4-mac-mini-m2-pro-mac-mini/</link><pubDate>Thu, 14 Nov 2024 08:36:38 +0900</pubDate><guid>https://hack-le.com/m4-mac-mini-m2-pro-mac-mini/</guid><description>&lt;p&gt;先日M4 Mac miniが発表された。なんだかんだと言われているAppleだが、それでも5年周期くらいで「やるやん」みたいな機種が出てくる。「ここ数年の微妙なアップデートはなんだったんだよ」みたいなやつ。その意味で、&lt;strong&gt;今回のM4 Mac miniはM1ほどではないにせよ衝撃が大きい&lt;/strong&gt;。また、Intel→AppleSiliconの時のような「使えるソフトは大丈夫か」などの心配もなく、&lt;strong&gt;純粋に実用的&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;h2 id="m3とはなんだったのか"&gt;M3とはなんだったのか&#10;&lt;/h2&gt;&lt;p&gt;自分は去年からのM2 Proユーザなので、新機種の登場には矛盾した二つの想いがある。一つは「あまり進化してくれるな（悔しいから）」というせせこましい気持ちと、もう一つは「でも進化してくれないとつまらない」というガジェットオタク的に業界の進歩を願う気持ちだ。&lt;/p&gt;&#10;&lt;p&gt;その意味で、&lt;strong&gt;M3 Proには安堵と落胆をさせられた&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12980_1789621199.webp" alt="M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;M2 Proで全然いいなと思った。まぁそもそもM3 Mac miniは出なかったのだが。&lt;/p&gt;&#10;&lt;p&gt;まぁ出なくて良かったよね。&lt;strong&gt;M3 Pro Mac miniなんか出してたら、購入したユーザから恨みの声が出たんじゃないか&lt;/strong&gt;。それくらい今回のM4 Proは違う。ってかマジでなんだったんだよM3。&lt;/p&gt;&#10;&lt;h2 id="m2-ultraよりはやーい"&gt;M2 Ultraよりはやーい！&#10;&lt;/h2&gt;&lt;p&gt;まぁ大きさについては正直個人的にはいいかな。現状のMac miniの筐体の大きさでも十分満足している。これ以上小さくしたところで、ケーブルによる占有が大きいからあまり恩恵はない。それより&lt;strong&gt;USB Type-Aのほうがほしかった&lt;/strong&gt;。デスクトップだと周辺機器としてなんだかんだであと10年は生き残ると思う。変換あまり使いたくないんだよなぁ。ハブなんて置こうものならますます机の上がゴチャつき、本体が小さくなった意味がまるでないという。&lt;/p&gt;&#10;&lt;p&gt;あと熱は大丈夫なんだろうかという心配はあるけれど、これはいまさらかもしれない。Mac miniはいつだって爆熱。物議を醸している電源ボタンの場所についてもまぁ、僕もMacについてはスリープする運用なのでさして困らないと思うが、嫌な人はいるだろうな、くらいの感じ。&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;筐体とかどうでもよくなるくらい、純粋にスペックが高い&lt;/strong&gt;。ベンチマークを見ていると、レビューも概ね好評で、「ちくしょう……ちくしょう……」みたいな気分になる（参考「&lt;a class="link" href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review" target="_blank" rel="noopener"&#10; &gt;I tried the new Mac mini M4 and this tiny mini PC is an absolute powerhouse — even if you don&amp;rsquo;t get the pro model | Tom&amp;rsquo;s Guide&lt;/a&gt;」）&lt;/p&gt;&#10;&lt;p&gt;やはりPCの華形はCPUであって、そのCPUが劇的に向上しているとなれば魅力を感じざるを得ない。去年買ったばかりのProが無印に負けるなんて……（一応僕のは盛ってるから無印よりはまだ勝っているようだが……）。&lt;/p&gt;&#10;&lt;p&gt;まぁでも一番歯ぎしりしてるのは（M4 Proは）M2 Ultraよりはやーい！とか言われているM2 Ultra Mac Studioユーザかもしれない（参考「&lt;a class="link" href="https://gori.me/macmini/156589" target="_blank" rel="noopener"&#10; &gt;M4 Pro搭載Mac mini、M2 Ultra超えの驚異的性能を実現 | ゴリミー&lt;/a&gt;」）。お値段的に。&lt;/p&gt;&#10;&lt;h2 id="m4-macを持ってきてください本物の16gbを見せてやりますよ"&gt;M4 Macを持ってきてください、本物の16GBを見せてやりますよ&#10;&lt;/h2&gt;&lt;p&gt;あと個人的に「やっとかよ」となったのは&lt;strong&gt;吊るしのメモリが16GBになったこと&lt;/strong&gt;だ。2023年までAppleは「Macの8GBはもはや16GB」などと意味不明な供述をしていたが（参考「&lt;a class="link" href="https://gigazine.net/news/20231113-apple-m3-ram/" target="_blank" rel="noopener"&#10; &gt;Appleが「M3 MacBook Pro」の8GBのユニファイドメモリは16GBの他製品RAMと同等であると主張 - GIGAZINE&lt;/a&gt;」）、ようやく&lt;strong&gt;16GB RAMとは16GBのメモリのことですという進次郎も知っている事実を認めたらしい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;具体的に何が出来るのかよくわからないApple Intelligenceは特に期待していないが、お値段据え置きでメモリの容量が上がったことは喜ばしい。ってか&lt;strong&gt;SoCに組み込まれて変更できないのに8GBを2023年まで標準として発売していたのは、この先数年禍根を残すと思われる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁそれでもお高いことには変わりないのだが、AI用途だとMacのユニファイドメモリが輝くという話もあるっぽい。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;しげぽんさんがメモリ192GB積んだM2Ultraでテストしたところ、4bit量子化のCommand R+の推論が、NVidia GPUのA6000+RTX3090環境では9.5tpsだったところ、M2Ultraは9.9tpsで抜いてしまったらしい。&lt;/p&gt;&#10;&lt;p&gt;この比較表のCommand-R-Plus 4bit量子化版速度比較で、a6000+RTX3090Power limitなしの9.5token/secに対してM2Ultra Mac Studio(192GB GPU76コア)が9.91token/secで抜いた。ワッパと構成でRTXを超えてるhttps://t.co/zSNQKzHKUx &lt;a class="link" href="https://t.co/kq1UnOA5wH" target="_blank" rel="noopener"&#10; &gt;pic.twitter.com/kq1UnOA5wH&lt;/a&gt;— まじかる☆しげぽん@VRoid (@m_sigepon) &lt;a class="link" href="https://twitter.com/m_sigepon/status/1786097499218010367?ref_src=twsrc%5Etfw" target="_blank" rel="noopener"&#10; &gt;May 2, 2024&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;２枚のGPUをぶん回すPCよりもM2Ultraの方が省電力だろう。とはいえメモリを192GB積んだM2Ultraは100万円くらいする。A6000+RTX3090のPCと値段自体は同じくらいだろう。&lt;/p&gt;&#10;&lt;p&gt;MacのGPU自体はそこまで大した性能ではない。じゃあなんでこんなに推論速度が速いの？というと、LLMの推論というのは実は演算性能よりもメモリ帯域幅がモノを言うらしい。&lt;/p&gt;&#10;&lt;p&gt;Macのメモリはチップに直結されてるユニファイドメモリだから帯域幅が爆速で800GB/sもある。GPUのVRAMの帯域幅も爆速で、RTX4090では1008GB/sもある。これが推論速度に効いている。一方、私のPCのメインメモリなんて25.6GB/s、デュアルチャネルでも51.2GB/sしか出ない。全然遅い。だからCPUの推論も全然遅くなってしまうわけだ。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://www.notion.so/LLM-soy-software-135140b4a919810eb587e04745fd6323" target="_blank" rel="noopener"&#10; &gt;最近ローカルLLMがアツいらしい – soy-software&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;まぁこの記事ではその後「だからといってコスパがいいかは疑問の余地がある」と続けられているのだが、あくまでAI&amp;quot;も&amp;quot;できるという使い方ならば、M4 Ultraの性能と価格次第では案外選択肢に上ってくるのかもしれない。ローカルLLMも含めてAI事情は日進月歩なので、この先のことはわからないが……。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、&lt;strong&gt;8GBなどという人権侵害系のMacが姿を消すことは素直に喜ばしい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="ストレージ交換したい早くしたい"&gt;ストレージ交換したい早くしたい&#10;&lt;/h2&gt;&lt;p&gt;ストレージ周りの変化も見逃せない。独自規格とはいえモジュラー式で着脱可能とのことだ（参考「&lt;a class="link" href="https://applech2.com/archives/20241113-ifixit-apple-m4-mac-mini-2024-teardown.html" target="_blank" rel="noopener"&#10; &gt;iFixit、Apple M4/M4 Proチップを搭載した「Mac mini (2024)」の分解レポートを公開。ストレージはアップグレード可能で、分解の際は底面の電源ボタン周りに注意。 | AAPL Ch.&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;まぁとはいえ交換難度はだいぶ高いだろうし、またお高いんでしょう？ということであれば、&lt;strong&gt;結局外付けSSD運用になるような気もする&lt;/strong&gt;。速度は内蔵より多少落ちるものの十分だし。安定性についても、外付けSSDを起動ドライブにして1年以上経過するが、特に問題なく使えている。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-mini-2018-ssd-3weeks/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini 2018の起動ディスクを外付けSSDにしてから3週間&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-mini-2018-ssd-3weeks/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/09/2023-09-11-02.16.56-2-3-scaled.webp" alt="Mac mini 2018の起動ディスクを外付けSSDにしてから3週間" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事は2018時代のものだが、その後M2 Proになってからも同じ外付けSSDを使い回して起動ディスクにしている。&lt;/p&gt;&#10;&lt;p&gt;あと地味なところだが、Mac miniは256GBストレージはチップ1枚でスペックがショボい（遅い）ということで有名だったが、今回はちゃんとチップ2枚に戻っており、早くなっているという話だ（参考「&lt;a class="link" href="https://www.macrumors.com/2024/11/08/m4-mac-mini-modular-storage/" target="_blank" rel="noopener"&#10; &gt;New Mac Mini Has Modular Storage, 256GB Model Will Have Faster SSD - MacRumors&lt;/a&gt;」）。ただそもそもデスクトップのストレージが256GBというのは2024年において人権を侵害していることは指摘しておきたい。&lt;/p&gt;&#10;&lt;h2 id="くやしいでも"&gt;くやしい、でも……&#10;&lt;/h2&gt;&lt;p&gt;総じて、&lt;strong&gt;今回のM4 Mac miniについては「買い」の一言だと思った&lt;/strong&gt;。もし僕が未だIntel Mac mini 2018をメインに据えていたら、整備済みを待つなどとせず即日ポチった可能性が高い。思えばMac mini 2018の時もそうだった。&lt;/p&gt;&#10;&lt;p&gt;とはいえM2 Pro Mac miniも十分な性能だし、現状何も困っていないので、買い換えるということはない。&lt;strong&gt;圧倒的なスペック差の前に「ぐぬぬ……」と思う気持ちはあれど、「やったぜ」という気持ちもある&lt;/strong&gt;。これだからAppleは油断ならないんだよなぁ。なんだかんだ言われているけれど、Appleにはやっぱり期待したいんだ。&lt;/p&gt;&#10;&lt;p&gt;でも&lt;strong&gt;もう少しお安くなりませんかねぇ……&lt;/strong&gt; 。10年代前半Sandy時代のことが忘れられないよぉ……。&lt;/p&gt;&#10;</description></item><item><title>DockerのMariaDBコンテナが起動失敗すると思ったら /etc/hosts が60GBで100% usage だった</title><link>https://hack-le.com/docker-etc-hosts-full/</link><pubDate>Thu, 07 Nov 2024 08:00:00 +0900</pubDate><guid>https://hack-le.com/docker-etc-hosts-full/</guid><description>&lt;p&gt;表題のとおりなのだが、MariaDBコンテナが突然起動に失敗するようになり、永遠に再起動をしていた。で、ログを見るとどうも容量不足っぽかった。……え？&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# df -h&#9; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Filesystem Size Used Avail Use% Mounted on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;overlay 59G 56G 704K 100% /&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmpfs 64M 0 64M 0% /dev&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shm 64M 0 64M 0% /dev/shm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/dev/vda1 59G 56G 704K 100% /etc/hosts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmpfs 12G 0 12G 0% /proc/acpi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmpfs 12G 0 12G 0% /sys/firmware&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;？？？🤔&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Intel Mac mini 2018&lt;/li&gt;&#10;&lt;li&gt;macOS 14.6.1&lt;/li&gt;&#10;&lt;li&gt;Docker Desktop 4.35.1&lt;/li&gt;&#10;&lt;li&gt;WordPressのコンテナをたてていた&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;本質ではないが &lt;code&gt;docker-compose.yml&lt;/code&gt; は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;services:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--- 省略 ---&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; db:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; image: mariadb:latest&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; environment:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MYSQL_ROOT_PASSWORD: &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MYSQL_DATABASE: &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MYSQL_USER: &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MYSQL_PASSWORD: &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; volumes:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - db_data:/var/lib/mysql&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; restart: always&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---省略 ---&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;volumes:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; wordpress_data:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; db_data:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;MariaDBコンテナが永遠に再起動する。&lt;/p&gt;&#10;&lt;p&gt;ログがかろうじて取れた。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plaintext" data-lang="plaintext"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2024-11-03 22:17:59 2024-11-03 13:17:59 0 [ERROR] InnoDB: preallocating 12582912 bytes for file ./ibtmp1 failed with error 28&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2024-11-03 22:17:59 2024-11-03 13:17:59 0 [ERROR] InnoDB: Could not set the file size of &amp;#39;./ibtmp1&amp;#39;. Probably out of disk space&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2024-11-03 22:17:59 2024-11-03 13:17:59 0 [ERROR] InnoDB: Unable to create the shared innodb_temporary&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2024-11-03 22:17:59 2024-11-03 13:17:59 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なんか &lt;code&gt;out of disk space&lt;/code&gt; とか言ってる。んなアホな。&lt;/p&gt;&#10;&lt;h2 id="原因"&gt;原因&#10;&lt;/h2&gt;&lt;p&gt;デバッグ用のコンテナを作成して調べた。デバッグ用コンテナの作り方は以下の記事を参照。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/docker-mongodb-restart/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;DockerでMongoDBのコンテナが永遠に再起動する時の対応&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/docker-mongodb-restart/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_16151_1789090846.webp" alt="DockerでMongoDBのコンテナが永遠に再起動する時の対応" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;結果は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# df -h&#9; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Filesystem Size Used Avail Use% Mounted on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;overlay 59G 56G 704K 100% /&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmpfs 64M 0 64M 0% /dev&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shm 64M 0 64M 0% /dev/shm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/dev/vda1 59G 56G 704K 100% /etc/hosts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmpfs 12G 0 12G 0% /proc/acpi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmpfs 12G 0 12G 0% /sys/firmware&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;/&lt;/code&gt;と &lt;code&gt;/etc/hosts&lt;/code&gt;が100%。そんなわけないよな。&lt;/p&gt;&#10;&lt;p&gt;ChatGPTに聞くとかなり意味不明かつ支離滅裂で頼りにならなかった。実際滅茶苦茶なことを言っているということだけはわかったが、僕の圧倒的な知識不足のために詰めることができない……。でもとりあえず &lt;code&gt;/etc/hosts&lt;/code&gt;が56GBは異常なのは確かだ。&lt;/p&gt;&#10;&lt;p&gt;操作して怪しかったのは以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Docker DesktopのVMにシェルでアクセス&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -it --privileged --pid=host justincormack/nsenter1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;入ったらoverlay2の容量を確認する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;du -sh /var/lib/docker/overlay2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これが45GBほどあって、どうにも怪しい。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;ランボー怒りの &lt;code&gt;docker system prune -a&lt;/code&gt;で解決。&lt;/p&gt;&#10;&lt;p&gt;いや……うん……。&lt;/p&gt;&#10;&lt;p&gt;ChatGPTとは色々押し問答したがDocker全部消せばいいじゃないですか？ぐらいの提案をカジュアルにしてきてつらい。ChatGPTマジで &lt;code&gt;sudo rm -rf /&lt;/code&gt;みたいなこと平気で言ってくるのはなんなの？&lt;/p&gt;&#10;&lt;p&gt;まぁでも結局 &lt;code&gt;docker system prune -a&lt;/code&gt; ですわ。これを実行したところ、 &lt;code&gt;overlay2&lt;/code&gt;の容量は1.2GBまで削減。MariaDBコンテナの &lt;code&gt;/&lt;/code&gt;も18GB程度におさまり、無事起動するようになった。&lt;/p&gt;&#10;&lt;h2 id="所感-何がなんだかわかってない"&gt;所感: 何がなんだかわかってない&#10;&lt;/h2&gt;&lt;p&gt;Docker、しかもMac版のDocker Desktopについてわかってないとダメっぽいように思った。ChatGPTに説明させてみたけど、「絶対違う」という感じ。コッチが知らないと思って適当に言ってるように思う。ぐぬぬ……。&lt;/p&gt;&#10;&lt;p&gt;まぁ勉強するとして、とりあえず対応のみ備忘録。&lt;/p&gt;&#10;</description></item><item><title>DockerでMongoDBのコンテナが永遠に再起動する時の対応</title><link>https://hack-le.com/docker-mongodb-restart/</link><pubDate>Mon, 04 Nov 2024 02:04:16 +0900</pubDate><guid>https://hack-le.com/docker-mongodb-restart/</guid><description>&lt;p&gt;色々なパターンがあると思うが、今回は以下のエラーにより、永遠にrestartしていたものと思われる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2024-11-03 21:25:06 {&amp;#34;t&amp;#34;:{&amp;#34;$date&amp;#34;:&amp;#34;2024-11-03T12:25:06.020+00:00&amp;#34;},&amp;#34;s&amp;#34;:&amp;#34;F&amp;#34;, &amp;#34;c&amp;#34;:&amp;#34;CONTROL&amp;#34;, &amp;#34;id&amp;#34;:6384300, &amp;#34;ctx&amp;#34;:&amp;#34;ftdc&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;Writing fatal message&amp;#34;,&amp;#34;attr&amp;#34;:{&amp;#34;message&amp;#34;:&amp;#34;DBException::toString(): FileStreamFailed: Failed to write to interim file buffer for full-time diagnostic data capture: /data/db/diagnostic.data/metrics.interim.temp\nActual exception type: mongo::error_details::ExceptionForImpl&amp;lt;(mongo::ErrorCodes::Error)39, mongo::AssertionException&amp;gt;\n\n&amp;#34;}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;/data/db/diagnostic.data/metrics.interim.temp&lt;/code&gt;に書き込めないことによるエラーっぽい。&lt;/p&gt;&#10;&lt;p&gt;（追記）むしろ原因は以下かも。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/docker-etc-hosts-full/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;DockerのMariaDBコンテナが起動失敗すると思ったら /etc/hosts が60GBで100% usage だった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/docker-etc-hosts-full/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_16158_1789090882.webp" alt="DockerのMariaDBコンテナが起動失敗すると思ったら /etc/hosts が60GBで100% usage だった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Intel Mac mini 2018&lt;/li&gt;&#10;&lt;li&gt;macOS 14.6.1&lt;/li&gt;&#10;&lt;li&gt;Docker Desktop 4.35.1&lt;/li&gt;&#10;&lt;li&gt;Growiのコンテナをたてていた&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;基本的に初期設定のままだが、 &lt;code&gt;docker-compose.yml&lt;/code&gt;を以下に示す。mongodbのバージョンは6.0。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version: &lt;span class="s1"&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;services:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; app:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--- 省略 ---&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mongo:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; image: mongo:6.0&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; restart: unless-stopped&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; volumes:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - mongo_configdb:/data/configdb&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - mongo_db:/data/db&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--- 省略 ---&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;volumes:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; growi_data:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mongo_configdb:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mongo_db:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; es_data:&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;永遠にmongodbのコンテナがrestartする。かろうじてログは取れた。&lt;/p&gt;&#10;&lt;h2 id="原因-mongodlockがemptyじゃない"&gt;原因: mongod.lockがemptyじゃない&#10;&lt;/h2&gt;&lt;p&gt;restart地獄だが幸いはログは取れた。どうも、直接的には&lt;code&gt;/data/db/diagnostic.data/metrics.interim.temp&lt;/code&gt;に書き込めないことによるエラーっぽい。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2024-11-03 21:25:06 {&amp;#34;t&amp;#34;:{&amp;#34;$date&amp;#34;:&amp;#34;2024-11-03T12:25:06.020+00:00&amp;#34;},&amp;#34;s&amp;#34;:&amp;#34;F&amp;#34;, &amp;#34;c&amp;#34;:&amp;#34;CONTROL&amp;#34;, &amp;#34;id&amp;#34;:6384300, &amp;#34;ctx&amp;#34;:&amp;#34;ftdc&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;Writing fatal message&amp;#34;,&amp;#34;attr&amp;#34;:{&amp;#34;message&amp;#34;:&amp;#34;DBException::toString(): FileStreamFailed: Failed to write to interim file buffer for full-time diagnostic data capture: /data/db/diagnostic.data/metrics.interim.temp\nActual exception type: mongo::error_details::ExceptionForImpl&amp;lt;(mongo::ErrorCodes::Error)39, mongo::AssertionException&amp;gt;\n\n&amp;#34;}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なんでそうなるかというと、恐らく &lt;code&gt;mongod.lock&lt;/code&gt;がemptyではないためにmongodを起動できず、権限がなかったのではないか。以下のようなログが残っていた。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2024-11-03 21:24:59 {&amp;#34;t&amp;#34;:{&amp;#34;$date&amp;#34;:&amp;#34;2024-11-03T12:24:59.534+00:00&amp;#34;},&amp;#34;s&amp;#34;:&amp;#34;W&amp;#34;, &amp;#34;c&amp;#34;:&amp;#34;STORAGE&amp;#34;, &amp;#34;id&amp;#34;:22271, &amp;#34;ctx&amp;#34;:&amp;#34;initandlisten&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;Detected unclean shutdown - Lock file is not empty&amp;#34;,&amp;#34;attr&amp;#34;:{&amp;#34;lockFile&amp;#34;:&amp;#34;/data/db/mongod.lock&amp;#34;}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;直前にMacを再起動したのだが、その時に正常に終了できなかったことに起因してるかもしれない。今となっては大元の原因は不明である。。。&lt;/p&gt;&#10;&lt;h2 id="対応-デバッグ用コンテナを作ってロックファイルを削除"&gt;対応: デバッグ用コンテナを作ってロックファイルを削除&#10;&lt;/h2&gt;&lt;p&gt;ロックファイル &lt;code&gt;mongod.lock&lt;/code&gt;を削除する。&lt;/p&gt;&#10;&lt;p&gt;ただし、コンテナは起動したそばからterminateしてしまうため、デバッグ用のコンテナを作ってそこからファイルをいじる。今回の例だと、以下のような &lt;code&gt;docker-compose.override.yml&lt;/code&gt;ファイルを作って、デバッグ用のmongoコンテナとする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mongo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;entrypoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bash&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;no&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この状態でコンテナを起動。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose up -d mongo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose exec mongo /bin/bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ログイン後、ファイルを削除し、データベースを修復する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -f /data/db/mongod.lock&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mongod --repair --dbpath /data/db&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ログアウトして、コンテナを落とす。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose down&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;docker-compose.override.yml&lt;/code&gt;を削除する。削除後、コンテナを起動。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose up -d&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再起動しないことを祈る。しなければOK。したら別の問題がある。&lt;/p&gt;&#10;&lt;p&gt;（追記）以下が起きていたら先にこれを対応しないといけない。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/docker-etc-hosts-full/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;DockerのMariaDBコンテナが起動失敗すると思ったら /etc/hosts が60GBで100% usage だった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/docker-etc-hosts-full/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_16158_1789090882.webp" alt="DockerのMariaDBコンテナが起動失敗すると思ったら /etc/hosts が60GBで100% usage だった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;もはや本当の原因がわからないのだけれど、いずれにせよ直接の原因は &lt;code&gt;mongod.lock&lt;/code&gt; が残ってしまっていることで、Dockerの場合はデバッグ用コンテナからコイツを削除してやることで解決できるはず。&lt;/p&gt;&#10;</description></item><item><title>MacとWindowsのバックアップはNAS + FreeFileSyncを使っている</title><link>https://hack-le.com/mac-windows-freefilesync/</link><pubDate>Thu, 31 Oct 2024 08:32:00 +0900</pubDate><guid>https://hack-le.com/mac-windows-freefilesync/</guid><description>&lt;p&gt;データのバックアップは面倒臭いけれど、やっていないといざという時にとても後悔する。まぁ保険のようなものだ。&lt;/p&gt;&#10;&lt;p&gt;ただ本当に面倒臭いので、できれば自動化、あるいは自動化とまではいかなくても半自動化くらいはしたいものでもある。というか&lt;strong&gt;面倒臭さを解消しないと続かない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;今は色々あって、FreeFileSyncというフリーソフトを思い出した時に実行してNASにバックアップを取る、くらいの運用になっている。なんとなく、自分のプライベートPC環境におけるバックアップの軌跡について書いてみる。&lt;/p&gt;&#10;&lt;h2 id="バックアップ遍歴"&gt;バックアップ遍歴&#10;&lt;/h2&gt;&lt;p&gt;僕のバックアップ遍歴を見てみると、自分のPCを持ち始めた頃はせいぜい大事なデータを外付けハードディスクに入れておくくらいだったと思う。で、その後に多少ものを覚えてからは、どうやらrsyncを使ってバックアップをしていたらしい。それをTimeMachineに全面切り替えしたことを2015年の記事で書いている。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/45283123-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;MacのバックアップにrsyncからTimeMachineに全面切り替えした話&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/45283123-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2691_1789450609.webp" alt="MacのバックアップにrsyncからTimeMachineに全面切り替えした話" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;が、NASをTimeMachineサーバにすると不安定とか、ローカル接続の外付けハードディスクなら安定するがうるさいし、できればNASでバックアップしたいとかあって、&lt;strong&gt;1年くらいすると結局rsyncに戻ったようだ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;その後は、バックアップとしては結局NAS + rsyncを使っていた。しかし前述のとおりNASの接続はMacだとちょくちょく切れるので、自動化しづらい面があった。せっかくrsyncを使うなら自動化までさせないとありがたみないよなぁと思いつつ、それが面倒だった。そりゃちゃんとやればちゃんとやれるだろうけど、ちゃんとやる気にならなかった。&lt;/p&gt;&#10;&lt;p&gt;Dropboxの有料会員なので、2TBまではクラウド保存できることもあり、一時期はもうバックアップそれでいんじゃね？と思ったが、本当に保存したいファイルを2TBまで削減することができず、結局頓挫した。それにまぁ、クラウドは垢BANもあるから怖いしね……。Dropboxはあまり変な話は聞かないけれど、意味不明なBANをされたという記事は見たことがある。&lt;/p&gt;&#10;&lt;h2 id="guiがよかった"&gt;GUIがよかった&#10;&lt;/h2&gt;&lt;p&gt;結局、NASへのバックアップは続けざるを得ない。めんどくさい。自動化すれば良いが、自動化自体の手間がかかるし、運用していればなんだかんだでトラブルも起きそうだ。&lt;/p&gt;&#10;&lt;p&gt;色々考えて、まぁ&lt;strong&gt;たまに手動バックアップでいいかと、いつもの結論に立ち戻る&lt;/strong&gt;。ま、家のPCだし。仕事のデータもあるけれど、&lt;strong&gt;本当に重要なソースコードなどのデータはさすがにクラウドにある&lt;/strong&gt;。クラウドが真なので、ローカルが死んでも問題ない。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;回数が少ないのであれば、rsyncのようなコマンドツールよりも、GUIのツールが良いなと思うようになった&lt;/strong&gt;。rsyncなんだかんだでトラブルも多いんだよな。それに、Windowsでも使いたかったし。&lt;/p&gt;&#10;&lt;p&gt;で、結果的に選ばれたのがFreeFileSync。GUIで操作できて、Windows版もLinux版もMac版も揃っている。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://freefilesync.org/" target="_blank" rel="noopener"&#10; &gt;FreeFileSync: Open Source File Synchronization &amp;amp; Backup Software&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁだいたい一週間に一回くらいの割合で、思い出した時にバックアップしている。これまでやけに自動化にこだわって色々苦労したが、別にこの程度でよかったなと、PC使って15年以上して思うのであった。&lt;/p&gt;&#10;</description></item><item><title>HHKBの掃除をした。キーボードは洗えて然るべき</title><link>https://hack-le.com/hhkb-wash-2024-1028/</link><pubDate>Tue, 29 Oct 2024 09:00:00 +0900</pubDate><guid>https://hack-le.com/hhkb-wash-2024-1028/</guid><description>&lt;p&gt;HHKBことHappy Hacking Keyboardの定期メンテナンス、キートップを全部取っ払って丸洗いを実施した。これは地味に時間がかかるため、あまり気乗りしない作業ではなるのだけれど、なんだかべたつきを感じるようにまでなってしまい、重い腰をあげて実施。&lt;/p&gt;&#10;&lt;p&gt;前回掃除したのいつだったっけかな、などと思ったので、備忘録代わりに掃除を記事にしておく。&lt;/p&gt;&#10;&lt;h2 id="キーボードの丸洗いは定期的にやりたい"&gt;キーボードの丸洗いは定期的にやりたい&#10;&lt;/h2&gt;&lt;p&gt;きれい好きを自称する人でも、意外と掃除してないものの一つがPCのキーボードではなかろうか。なんなら掃除という概念すらないかもしれない。実際、母に「キーボード洗ってる？」などと聞けば「？？？」という顔をされるだろう。&lt;/p&gt;&#10;&lt;p&gt;実際キーボードにはそもそも洗えるものと洗えないものがある、というよりたいていのキーボードは洗うことを想定していないだろう。Apple Keyboardなども、メンテナンスについては「エアダスターやっちゃってくれよな」程度のことしか書かれていない。&lt;/p&gt;&#10;&lt;p&gt;しかしキーボードの汚れは埃ばかりではない。というか皮脂つきまくり。なんなら食べ物を直接触ることもあるだろう。いろんな脂がつきまくり。&lt;/p&gt;&#10;&lt;p&gt;したがって、本来キーボードは洗剤で洗われねばならない。&lt;/p&gt;&#10;&lt;h2 id="hhkbは洗える"&gt;HHKBは洗える&#10;&lt;/h2&gt;&lt;p&gt;自分がHHKBを気に入っている理由はいくつかあるが、その一つはウォッシャブルなところだ。まぁウォッシャブルといっても本当に水ぶっかけてよいはずはなく（なんか以前それができることをウリにしたキーボードを見かけた気もする）、キートップを全部外して、本体内部をウェットペーパーで拭き、キートップを洗剤を混ぜた水袋にぶちこんでわしゃわしゃすることになる。&lt;/p&gt;&#10;&lt;p&gt;これはまぁまぁ時間がかかる。HHKBはコンパクトキーボードであるので、キーの数は通常よりは少ないものの、60程度はあるわけで、それらを一つ一つ引っこ抜いて洗い、終わったら乾かして戻す作業が必要だ。作業時間は手を動かしている時間だけでも1時間くらいになってしまう。めんどくさい。&lt;/p&gt;&#10;&lt;p&gt;しかも&lt;strong&gt;うちには汚れたHHKBが2つあり、どうせなら2つともやってしまいたくなるので、倍の時間がかかる&lt;/strong&gt;。それで気乗りはしなかったのだけれど、しかし前に洗ったのがいつだったかも覚えていないほど前だし、なんだかべたつくし……。&lt;/p&gt;&#10;&lt;p&gt;ということで一念発起して、洗った。&lt;/p&gt;&#10;&lt;h2 id="洗ってスッキリ"&gt;洗ってスッキリ&#10;&lt;/h2&gt;&lt;p&gt;洗えばまぁスッキリ。どうせまた汚れるのだけれど、次はいつ洗うことになるかな……。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/10/2024-10-28-17.14.24-edited-scaled.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;墨を買ったのは、カッコ良さよりむしろ汚れが目立ちづらいから&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;HHKBはバチクソ高いが、一度買うと10年以上使うのもけっこうザラなので、色々なキーボードを試すなら意外と高くない、かもしれないが、HHKBを買うような人はどうせ色々試すのでやっぱり高い。&lt;/p&gt;&#10;</description></item><item><title>結局ナレッジツールの個人利用はNotionに戻りつつある</title><link>https://hack-le.com/knowledge-notion/</link><pubDate>Mon, 28 Oct 2024 15:26:05 +0900</pubDate><guid>https://hack-le.com/knowledge-notion/</guid><description>&lt;p&gt;僕の趣味は生産性を上げるために多くのナレッジツールを検証することに多大な時間を費やして生産性を下げることなので、今まで色々なツールを使ってきたし、今もNotion, Growi, AppFlowy, AFFiNE, Confluenceを同時並行で使っている。Evernote？知りませんねそんな象……。&lt;/p&gt;&#10;&lt;p&gt;多くの人に馴染みがあるのはNotionとConfluenceくらいだと思うのでさらっと説明すると、Growiは典型的なWiki、AppFlowyはNotion代替、AFFiNEはNotion + Miroの代替で、それぞれセルフホスティングできるのが特徴。あとOutlineもこの界隈では有名だがまだ試していない。&lt;/p&gt;&#10;&lt;p&gt;それぞれフォーカスしている価値が違うから、用途によって適当なものは変わるのだけれど、プライベート利用では結局なんだかんだでまたもやNotionに収束しつつある今日この頃だ。&lt;/p&gt;&#10;&lt;h2 id="notionは個人利用ではほぼ制限がない"&gt;Notionは個人利用ではほぼ制限がない&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Notionはチームで使うとそれなりに値が張るが、個人利用においては無料でほとんどの機能が使える&lt;/strong&gt;。まぁ実際的なところで多少困るのはアップロードできるファイルサイズの制限だろうか。個人的にこれはクリティカルではないが、人によっては困るだろう。まぁそういう人は素直に別のツールを使うか、金を払うべきだ。&lt;/p&gt;&#10;&lt;p&gt;個人的に少しつらいなと思うのは描画機能で、Mermaid記法が使えるものの、それしかないのはつらいと思う。draw.ioが使えるChromeのブラウザ拡張機能があるんだが、最近のレビューを見るとどうも壊れているっぽい……。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chromewebstore.google.com/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle" target="_blank" rel="noopener"&#10; &gt;https://chromewebstore.google.com/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁブラウザ拡張機能ってお金にならないだろうしなぁ。正直買い切りライセンスだったら買ってもいいくらいの機能だと思うんだけれど。ちなみにdraw.ioの埋め込みはGrowiが地味にサポートしていて便利だった。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;チームで利用する場合、描画機能がMermaid記法オンリー問題は割と深刻&lt;/strong&gt;だと思う。非エンジニアに書いてもらうのはたいへんだし、なんならエンジニアでも嫌がる人は嫌がる……。&lt;/p&gt;&#10;&lt;h2 id="データベースつよい"&gt;データベースつよい&#10;&lt;/h2&gt;&lt;p&gt;長所と短所はだいたい表裏一体だが、&lt;strong&gt;Notionの場合もご多分に漏れず、なんといってもその超強力なデータベース機能が長所であり短所ともいえる&lt;/strong&gt;。長所であるのは言わずもがなだが、短所というのは、&lt;strong&gt;概念の理解が難しいので非エンジニアの人が習熟するには時間がかかる、なんなら無理まである&lt;/strong&gt;し、またカジュアルにデータベースを操作、削除できるものだから、大事なデータベースが誤削除されるなどという悲壮な事故が後を絶たない。しかも消した当人は消したことに気づいていない。チームで一回はやらかすと思う。やらかした。懺悔します。&lt;/p&gt;&#10;&lt;p&gt;しかしだからといってデータベース機能を使わないと、Notionである意味がかなり薄れる。というか真面目にNotionじゃなくていいし、むしろtoo fatだから適していないとすら言える。&lt;/p&gt;&#10;&lt;p&gt;つまりNotionを使う限りはデータベースを使ってなんぼだし、またチームで使いこなすことでその威力は大いに発揮されるのだが、開発者だけのチームならともかく、現実はそうもいかない。上述した描画がMermaid記法オンリーのストロングスタイル問題と相まって、非エンジニアにはかなり敷居が高く感じられだろう。&lt;strong&gt;機能を使いこなすことよりも、チームメンバのスキルや使い方を見て、適切な運用指針を築くことが一大プロジェクト&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;なんだけれど、僕一人で使う限りは、何も問題にならないので、Notionの強力なデータベース機能を好き勝手に使えて幸せハッピーなのである。&lt;/p&gt;&#10;&lt;h2 id="banだけが怖い"&gt;BANだけが怖い&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで、&lt;strong&gt;個人利用においてNotionに対する大きな不満はなく、あれこれツールを試しているが、結局Notionに落ち着いてしまう&lt;/strong&gt;。&lt;strong&gt;ただ一点、どうしても気になるのはBANされたらどうしよう&lt;/strong&gt;、ということだ。&lt;/p&gt;&#10;&lt;p&gt;ビジネス用途で金払って、あくまでビジネスの用途でやっていれば、向こうも早々BANはしないと思うのだが、プライベートだと金払っていないうえに色々な使い方をするので、何かの拍子で目を付けられてカジュアルにBANされてしないだろうかという不安がある。まぁオンラインストレージで「子供のお風呂写真を上げたら警告なしBANされた」という話と同根だ。&lt;/p&gt;&#10;&lt;p&gt;たとえば僕の場合、趣味でやっているAIイラストのために、Webクリップした記事についている参考画像なんかにはけっこうきわどいのがある。といってもWebクリップの場合画像は元サイトを参照しているだけ（内部的には文字列データ）だろうし、またその内容もせいぜい肌色が多めくらいのものではあるから、なんら言われる筋合いはないのだが、昨今の潔癖な欧米のポリコレ的価値観からすると、こんな政治的に不健全なアカウントはBANするざます、みたいなことも考えられて、少し不安を感じている。&lt;/p&gt;&#10;&lt;p&gt;不安ならその使い方はしなければ良いのではないかと言われるとごもっともだし、そうしたいのはやまやまなのだけれど、&lt;strong&gt;NotionのWebクリップ拡張機能とデータベース機能の合わせ技が非常に便利であるため、今のところその代替が見つかっていない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁそうでなくても、フツーの使い方でも何故か突然垢BANされた、という話はNotionに限らずクラウドサービスにおいては、ネットをやっているとけっこう聞くことだ。なので、クラウドサービスの個人利用には警戒感が強い。幸いなことに僕は今までどこかからBANされたことはないのだけれど、一度でもあったらトラウマレベルの大事故なので、やはり怖い。オンプレからクラウドに移行する理由の一つに災害対策があげられることがあるけれど、&lt;strong&gt;正直自宅が災害でサーバがぶっ壊れる災害リスクよりも、プラットフォームの意味不明な基準と気まぐれでいきなり垢BANされる人災リスクのほうが現実的に大きい&lt;/strong&gt;と思う。&lt;/p&gt;&#10;&lt;p&gt;まぁ片手間でやっているGoogleやMSと違って、コアビジネスそのものであるNotionが、実際的な利益になるとは思えないポリコレ仕草のため雑に強権を発動する可能性は低いと思うし、そういった強権発動には慎重のはずだと思うのだけれど、まぁ不安はある。なので、Notion並とまでは言わなくても、セルフホスティングできるナレッジツールでそれなりに使えるデータベース機能があれば、そっちに乗り換えるんだがなぁ……とか思っていたら、AFFiNEの人がデータベース機能に注力しているらしいので、そのうち実装されるのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、現時点においては&lt;strong&gt;個人ユースだとNotion最強伝説&lt;/strong&gt;になっている。&lt;/p&gt;&#10;</description></item><item><title>趣味としての脱Googleその5 Google日本語入力編: でぇじょぶだ、ATOKがある</title><link>https://hack-le.com/google-ime-atok/</link><pubDate>Mon, 14 Oct 2024 16:44:42 +0900</pubDate><guid>https://hack-le.com/google-ime-atok/</guid><description>&lt;p&gt;僕は日本語入力システムについてはこれまで色々使ってきた。Google日本語入力が出た時は衝撃で、「時事ネタが一発変換できるだと……？」という驚きは今も忘れられない。&lt;/p&gt;&#10;&lt;p&gt;それで長いことGoogle日本語入力を使っていたが、今はATOKを利用している。脱Googleとか関係なく、今はATOKのほうがクオリティが高いと思うので使っている。&lt;/p&gt;&#10;&lt;h2 id="google日本語入力の衝撃"&gt;Google日本語入力の衝撃&#10;&lt;/h2&gt;&lt;p&gt;僕の日本語入力システムの変遷は、MS-IME→Google日本語入力(出始めから？)→ATOK(2012.10.4〜)→Google日本語入力→ATOKとなっている。&lt;/p&gt;&#10;&lt;p&gt;Google日本語入力は控えめに言っても偉大だったと思う。MS-IMEとATOKの小競り合いを横から一気にぶっ飛ばして、日本語入力システムの世界のステージを別次元にした。特に、当時学生時分だった僕にとって、無料でMS-IME（当時）よりも圧倒的な性能を誇る日本語入力システムを使えたことは、本当に素晴らしかった。もうそんなの使うしかないじゃない。ベータ版時代から使っていたかはわからないが、少なくとも正式リリース(2010-12)からはすぐに使っていたはず。&lt;/p&gt;&#10;&lt;p&gt;まぁそれでも、働き始めると小銭が出来たので、2012-05からはATOKを使っていた。が、それから1年ばかりしてGoogle日本語入力に出戻ったのは、小銭をケチったのではなく、純粋に性能のためだ。当時(2013年)の心情が下記の記事に綴られている。&lt;/p&gt;&#10;&lt;p&gt;/27465029-2/&#10;かなり古い記事で、記事の書き方に当時Livedoorブログを利用していた名残が見受けられる&lt;/p&gt;&#10;&lt;p&gt;当時の読みづらい記事なので特に読む必要はないが、記事タイトルにある「リアルタイム変換」とは「サジェスト」のことを言っていると思われる。なんでリアルタイム変換って言ってるんだろう。変なの。今だと、ことえりのライブ変換のことかなと思っちゃうよね（当時そんなものないけど）。ちなみにライブ変換は僕は全然好きではない。&lt;/p&gt;&#10;&lt;p&gt;記事を見ると、ATOKから乗り換えた最大の理由として、Google日本語入力のサジェストの便利さをあげており、それは確かに大きかったと思うけれど、ATOK Syncを初めとしたATOK自体の不安定さも原因の一つであったと今は思う（当時はあまりに認識できていなかったようだが）。&lt;/p&gt;&#10;&lt;p&gt;当時のジャストシステムが相当の危機感を感じていたのは想像に易く、Google日本語入力的なシステムを取り入れようと必死だったと思うが、元々そういう会社ではないためか、正直安定しているとは言い難かった。日本語入力システムが安定していないのは致命的だ。&lt;/p&gt;&#10;&lt;p&gt;新星Google日本語入力は、無料であるにも関わらず、老舗のATOKをぶっ飛ばすインパクトと実際的な性能があった。&lt;/p&gt;&#10;&lt;h2 id="atokに戻った経緯"&gt;ATOKに戻った経緯&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで2013年より、その後10年にわたってGoogle日本語入力を使い続けた。逆に言うと、10年で使うのをやめた。今はATOKを利用している。その時の心情を綴った記事が以下だ。&lt;/p&gt;&#10;&lt;p&gt;/10-atok/&#10;記事の書き方の変化に、僕自身の成長が窺える&lt;/p&gt;&#10;&lt;p&gt;実を言うと、この記事に書くべきことはすべて上記記事に書かれているのだが、まぁ割と長めの記事だし、焦点が異なるので、超ざっくりまとめると、「2013年はGoogle日本語入力のほうが優秀だと感じられたが、2023年になると逆転して、ATOKのほうが優秀だと感じられたので、再び乗り換えた」である。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;10年の間にATOKは安定し、また持ち前の正確な日本語入力を目指したポリシーに上手な形でサジェストを取り入れることに成功した&lt;/strong&gt;。価格も月330円と比較的熟れている（と僕は思う。毎月新語などで更新があるので、サブスクリプションにも納得性がある）。そして学習能力は素晴らしく高い。高すぎるくらいだ。人に見せられないサジェストいっぱいできちゃってるねぇ……。&lt;/p&gt;&#10;&lt;p&gt;一方で、&lt;strong&gt;10年の間Google日本語入力は別に変わらない……どころか、使い勝手が悪くなった&lt;/strong&gt;とすら思う。端末間における辞書の同期すらできないし（これマジでなんで？「&lt;a class="link" href="https://developers-jp.googleblog.com/2013/11/google-111159910x.html" target="_blank" rel="noopener"&#10; &gt;Google Developers Japan: Google 日本語入力の開発版をアップデートしました。（1.12.1599.10x）&lt;/a&gt;」）、なにより学習能力が低すぎる。自分のサイト名すら覚えてくれない。その癖、誤変換ですらない、間違った日本語が候補に出てくることがやけに多くなったような……。いやこれほんと、&lt;strong&gt;昔よりも性能が下がったというのが偽らざる実感&lt;/strong&gt;なんだよなぁ。上記記事では、「&lt;strong&gt;個人のニーズを捉えず、流行にばかり堪能&lt;/strong&gt;」と表現していたが、今もそう思う。&lt;/p&gt;&#10;&lt;p&gt;結果、&lt;strong&gt;ATOKの「持ち前の日本語能力 + 改善された辞書 + 高い学習能力 + 推測変換」のコンボによって、その変換効率は今のGoogle日本語入力を凌駕している&lt;/strong&gt;。少なくとも僕はそう感じた。&lt;/p&gt;&#10;&lt;h2 id="atok以外"&gt;ATOK以外&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで僕は今はATOKユーザだし、それに満足している。僕にとってはそれで終わりだが、そうは言っても「日本語入力システムにお金を払う」ことに抵抗のある人は多いだろう。&lt;/p&gt;&#10;&lt;p&gt;そうすると……そうね、「MS-IME or ことえり vs Google日本語入力」だったら……うーん、これはまぁきわどいかもねぇ。MS-IMEは最近頑張ってるっぽい話も聞くけれど、ことえりはなんか相変わらずっぽいしなー。ま、無料だと多少我慢するところはあるかもしれないね。サブスクがイヤってだけならMacだとかわせみもあるが、使ったことないからなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、脱Googleを標榜するなら、もとよりある程度の費用や不便は受け入れることになる。次の10年でどうなるかはまたわからないけれど、2024年現在においては、金払ってATOKがいいんじゃないかな、と思う。趣味には多少の金がかかるものよ。&lt;/p&gt;&#10;</description></item><item><title>Macで最初に設定していること macOS 14 Sonoma版</title><link>https://hack-le.com/mac-sonoma-14-6-1/</link><pubDate>Sun, 06 Oct 2024 05:37:03 +0900</pubDate><guid>https://hack-le.com/mac-sonoma-14-6-1/</guid><description>&lt;p&gt;自分用のメモ書き。前回からけっこう間がたったけど改訂。Sequoia？知らないな。コードネームどんどん覚えづらいやつにしてくるのなんなんよ。しかしなんだかんだMac使い始めてもうすぐ15年だよ。&lt;/p&gt;&#10;&lt;p&gt;Macの購入時とかクリーンインストール時のやることリスト。最近はもうクリーンインストールもあんまりやらなくなったけど。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-init-mojave/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Macで最初に設定していること(macOS 10.14 mojave)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-init-mojave/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2015/11/2701dee433ee744cd977d529ba9057c5.webp" alt="Macで最初に設定していること(macOS 10.14 mojave)" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="miniのみ-外付けssdを起動ディスクにする"&gt;(miniのみ) 外付けSSDを起動ディスクにする&#10;&lt;/h2&gt;&lt;p&gt;ドケチなのでApple公式のクソ高CTOには付き合わない。以下の記事を参考に、外付けSSDを起動ディスクにする。さすがにラップトップではやらない。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-mini-2018-nvme-ssd-boot/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini 2018に外付けSSDをつけて起動ディスクにした&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-mini-2018-nvme-ssd-boot/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12018_1789620831.webp" alt="Mac mini 2018に外付けSSDをつけて起動ディスクにした" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Blackmagic Disk Speed Testでベンチとっておく。&lt;/p&gt;&#10;&lt;h2 id="環境設定"&gt;環境設定&#10;&lt;/h2&gt;&lt;p&gt;サードパーティとか使わず、システム環境設定とかいじらないといけないやつ。スマート引用符とか地味に忘れていた。&lt;/p&gt;&#10;&lt;h3 id="キーボードマウス"&gt;キーボード、マウス&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;キーボードでキーリピート速める&lt;/li&gt;&#10;&lt;li&gt;キーボードでスマート引用符とスマートダッシュを使わないようにする&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.piyo.tech/posts/2014-01-06-205101/" target="_blank" rel="noopener"&#10; &gt;Macで引用符を入力すると勝手に変換されるのをやめたい - ぴよログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;トラックパッドでタップでクリック、ポインタ速度速める&lt;/li&gt;&#10;&lt;li&gt;アクセシビリティからトラックパッドの3本指ドラッグ解禁&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="ネットワーク"&gt;ネットワーク&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;ファイアウォールを「入」にする&#10;&lt;ul&gt;&#10;&lt;li&gt;インストール時にホームディレクトリの暗号化まで推奨してきたのに、何故FWがデフォルトで「切」なんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイル共有を「入」にする&lt;/li&gt;&#10;&lt;li&gt;（サーバ用の場合）リモートログインを「入」にする&#10;&lt;ul&gt;&#10;&lt;li&gt;他のMacから入るための公開鍵を &lt;code&gt;authorized_keys&lt;/code&gt; に登録する&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; をいじって &lt;code&gt;PasswordAuthentication&lt;/code&gt;を &lt;code&gt;no&lt;/code&gt; にする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="アプリケーションからのインストール"&gt;アプリケーションからのインストール&#10;&lt;/h2&gt;&lt;h3 id="app-storeから"&gt;App Storeから&#10;&lt;/h3&gt;&lt;p&gt;一時期流行りかけたけど、結局あまり定着しなかった。ただいくつかのソフトウェアはこっから入れている。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Xcode&lt;/li&gt;&#10;&lt;li&gt;QSpace Pro&#10;&lt;ul&gt;&#10;&lt;li&gt;QSpaceからアップグレードする。確かライセンス2台だったので古い機種は削除がいるのかな&lt;/li&gt;&#10;&lt;li&gt;ForkLiftは使いやすかったけどライセンス形態を実質サブスクに移行して許されなくなった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;CotEditor&lt;/li&gt;&#10;&lt;li&gt;LanScan&lt;/li&gt;&#10;&lt;li&gt;Readkit&#10;&lt;ul&gt;&#10;&lt;li&gt;ほぼ購読登録ソフトと化している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;PopClip&lt;/li&gt;&#10;&lt;li&gt;Capo&lt;/li&gt;&#10;&lt;li&gt;Whisper Transcription&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="webから"&gt;Webから&#10;&lt;/h3&gt;&lt;p&gt;結局PCソフトはWebサイトからDLが王道なんだということを、10年かけてわからされた僕たち。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;文字入力&#10;&lt;ul&gt;&#10;&lt;li&gt;ATOK&lt;/li&gt;&#10;&lt;li&gt;Karabiner-Elements&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Web関係&#10;&lt;ul&gt;&#10;&lt;li&gt;Brave&lt;/li&gt;&#10;&lt;li&gt;Firefox&lt;/li&gt;&#10;&lt;li&gt;Google Chrome&lt;/li&gt;&#10;&lt;li&gt;DeepL&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;開発ツール&#10;&lt;ul&gt;&#10;&lt;li&gt;Visual Studio Code&lt;/li&gt;&#10;&lt;li&gt;Android Studio&lt;/li&gt;&#10;&lt;li&gt;ChatGPT&lt;/li&gt;&#10;&lt;li&gt;Cloudflare WARP&lt;/li&gt;&#10;&lt;li&gt;Docker Desktop&lt;/li&gt;&#10;&lt;li&gt;Figma&lt;/li&gt;&#10;&lt;li&gt;Postman&lt;/li&gt;&#10;&lt;li&gt;Raspberry Pi Imager&#10;&lt;ul&gt;&#10;&lt;li&gt;まぁ必要になったらでいいかも&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ApplePiBaker&#10;&lt;ul&gt;&#10;&lt;li&gt;ddコマンドよりはまぁ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;AWSCLI&#10;&lt;ul&gt;&#10;&lt;li&gt;いつのまにかbrewで管理できなくなった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;volta&#10;&lt;ul&gt;&#10;&lt;li&gt;いつも忘れそうになるが、うちのnode.jsバージョン管理はvolta&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;電子書籍&#10;&lt;ul&gt;&#10;&lt;li&gt;Calibre&lt;/li&gt;&#10;&lt;li&gt;Simple Comic&#10;&lt;ul&gt;&#10;&lt;li&gt;2010年で更新止まってるけどMac用の漫画ビューアっていまだにこれが一番なんじゃなかろうか…&lt;/li&gt;&#10;&lt;li&gt;検索すると変なサイト出るけど本家は「&lt;a class="link" href="http://dancingtortoise.com/simplecomic/" target="_blank" rel="noopener"&#10; &gt;Dancing Tortoise | Simple Comic&lt;/a&gt;」GitHubにソースもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Kindle&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メディア&#10;&lt;ul&gt;&#10;&lt;li&gt;Vox for mac&lt;/li&gt;&#10;&lt;li&gt;Steam&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;リモート&#10;&lt;ul&gt;&#10;&lt;li&gt;Splash Streamer&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;オフィスソフト&#10;&lt;ul&gt;&#10;&lt;li&gt;LibreOffice&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ツール&#10;&lt;ul&gt;&#10;&lt;li&gt;BetterTouchTool&lt;/li&gt;&#10;&lt;li&gt;Clipy&lt;/li&gt;&#10;&lt;li&gt;Logi Options+&lt;/li&gt;&#10;&lt;li&gt;QR Journal&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイル&#10;&lt;ul&gt;&#10;&lt;li&gt;Adobe Acrobat DC&lt;/li&gt;&#10;&lt;li&gt;Adobe Bridge&lt;/li&gt;&#10;&lt;li&gt;Dropbox&lt;/li&gt;&#10;&lt;li&gt;FreeFileSync&lt;/li&gt;&#10;&lt;li&gt;QSync Client&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;デザイン&#10;&lt;ul&gt;&#10;&lt;li&gt;Affinity Designer, Photo, Publisher 2&lt;/li&gt;&#10;&lt;li&gt;Pixelmator Pro&#10;&lt;ul&gt;&#10;&lt;li&gt;超解像をAutomatorで右クリックコマンドに組み込めるのが便利なので&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;コミュニケーション&#10;&lt;ul&gt;&#10;&lt;li&gt;LINE&#10;&lt;ul&gt;&#10;&lt;li&gt;しゃーない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Slack&lt;/li&gt;&#10;&lt;li&gt;zoom&lt;/li&gt;&#10;&lt;li&gt;Zoho Mail Desktop&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="homebrewから"&gt;Homebrewから&#10;&lt;/h3&gt;&lt;p&gt;必要になった時に都度入れたらいいんだけどさ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;開発&#10;&lt;ul&gt;&#10;&lt;li&gt;shellcheck&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;li&gt;fish&#10;&lt;ul&gt;&#10;&lt;li&gt;メイン端末&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;git&lt;/li&gt;&#10;&lt;li&gt;poetry&lt;/li&gt;&#10;&lt;li&gt;jq&lt;/li&gt;&#10;&lt;li&gt;cliclick&lt;/li&gt;&#10;&lt;li&gt;lazygit&lt;/li&gt;&#10;&lt;li&gt;lazydocker&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メディア&#10;&lt;ul&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;poppler&lt;/li&gt;&#10;&lt;li&gt;ffmpeg&lt;/li&gt;&#10;&lt;li&gt;youtube-dl&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイル操作&#10;&lt;ul&gt;&#10;&lt;li&gt;wget&lt;/li&gt;&#10;&lt;li&gt;peco&lt;/li&gt;&#10;&lt;li&gt;zip&lt;/li&gt;&#10;&lt;li&gt;tree&lt;/li&gt;&#10;&lt;li&gt;fzf&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="細かな設定"&gt;細かな設定&#10;&lt;/h2&gt;&lt;p&gt;ターミナルの設定はなんだかんだ妙にこれで慣れてしまったので……。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;NASの設定（「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;li&gt;fishの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;パスの設定、履歴数など&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ターミナルの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;monaco 12pt.&lt;/li&gt;&#10;&lt;li&gt;背景黒&lt;/li&gt;&#10;&lt;li&gt;Optionをメタキー&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;自分用binディレクトリのソフトリンクとパス設定&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>リネットジャパンで不要な大昔のディスプレイをPCと一緒に無料回収してもらった</title><link>https://hack-le.com/renet-japan/</link><pubDate>Tue, 01 Oct 2024 21:30:23 +0900</pubDate><guid>https://hack-le.com/renet-japan/</guid><description>&lt;p&gt;我が国には&lt;s&gt;不法投棄促進法&lt;/s&gt;資源有効利用促進法があるため、最近のものはともかく、大昔の液晶ディスプレイなんかは処分に困るものの一つだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.meti.go.jp/policy/recycle/main/admin_info/law/11/index02.html" target="_blank" rel="noopener"&#10; &gt;パソコンのリサイクル（METI/経済産業省）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;うちにも大昔の15インチ液晶ディスプレイがあり、もう数年くらい処分に困っていた。金払って捨てるのもなんかバカバカしいし、そもそも金払えば捨てられるのかすらよくわからない。そう思っていたところ、PCと一緒なら無料で回収してくれるサービスがあることを知った。&lt;/p&gt;&#10;&lt;h2 id="pc回収ビジネス"&gt;PC回収ビジネス&#10;&lt;/h2&gt;&lt;p&gt;捨て方を法律で面倒臭くされたことによって、その面倒臭さを肩代わりするPC回収なる謎のビジネスが爆誕しており、その有名どころが国認定を謳うリネットジャパンだ。回収料金は1760円（税込み）とのことだが、&lt;strong&gt;今回PC無料回収キャンペーンなるものをやっており、回収品にPCが含まれているなら、一緒に他のやつを同梱しても無料とのことだったので、それを利用した&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.renet.jp/" target="_blank" rel="noopener"&#10; &gt;【国認定】パソコン・ノートPCの無料回収（処分・廃棄・リサイクル）ならリネットジャパン&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;9/30までといっているが、&lt;strong&gt;このキャンペーンは割と年中やっている印象&lt;/strong&gt;だ。実際、一年中無料にしても問題なさそうに思えるが、キャンペーンでお得感を出すために有料期間を設けているのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;この手の廃品回収的なビジネスは色々と闇の深い噂を聞くので、トラブルに巻き込まれたり知らない間に犯罪の片棒を担ぐことになったりするのは嫌だなぁと思え、あまり利用したくないものの一つではあるが、リネットジャパンは行政に入り込むことによって一定の信用を獲得しており、うまいもんだなと思う。&lt;strong&gt;ユーザとしては信用できる（と思える根拠のある）ところが無料で回収してくれるなら、行政だろうと民間だろうとなんでも良い&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="ついでにいろいろ回収"&gt;ついでにいろいろ回収&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで、リネットジャパンを利用することにしたのだが、今回の種は大昔に買ったまま結局有効活用することのなかったChromebookだ。永遠に使わないし、ディスプレイ微妙にヒビ入ってるから人に譲るのもジャンクになっちゃうしで、これも処理に困っていた。まぁ動くのでジャンクでも売れるとは思うが、大した金にもならないだろうし、手間とか諸々考えると、同じく処分に困っているディスプレイと一緒に無料回収してもらったほうが良いという判断だ。&lt;/p&gt;&#10;&lt;p&gt;段ボール最大140サイズ、20kg以内なら、「&lt;a class="link" href="https://www.renet.jp/item/list/" target="_blank" rel="noopener"&#10; &gt;回収品目一覧 | 【国認定】パソコン・ノートPCの無料回収(処分・廃棄・リサイクル)ならリネットジャパン&lt;/a&gt;」にあるものを詰め込められるので、この際だから不要なやつを整理した。大昔の液晶ディスプレイはもちろんだが、最近また割ってオジャンにしてしまった（泣）モバイルディスプレイ、それにルンバと体組成計、ルータを同梱した。&lt;/p&gt;&#10;&lt;p&gt;ルンバについては大きさがちょうど30cmあたりで、粗大ゴミなのかどうか判断に困るところでもあったので、ちょうどよかったな。いや粗大ゴミとは思えないし、しれっと不燃でだせばいい気もするんだけど、30cmを若干オーバーしているから、厳密には粗大ゴミになっちゃいそうなんだよなぁ。多くの自治体で粗大ゴミの判定ラインが30cmだと思うんだけど、厳しすぎないかなぁ。&lt;/p&gt;&#10;&lt;h2 id="回収から処理完了まで二週間"&gt;回収から処理完了まで二週間&#10;&lt;/h2&gt;&lt;p&gt;さて、出してからその後音沙汰なかったので、少し不安があったのだが、Twitterで検索してみると他にも回収から処理完了まで2週間くらいかかっていた人がいた。へー、それじゃそんなものなのかな……と思って待っていたところ、&lt;strong&gt;回収から約2週間、処理完了の通知がきた&lt;/strong&gt;。けっこう時間がかかるものらしい。&lt;/p&gt;&#10;&lt;p&gt;で、段ボールの中には色々突っ込んだのだけれど、特にお咎めもなく、結果的にはお金を払わずに家にあった捨て方難しそうなやつを一掃できて、よかったよかった。&lt;/p&gt;&#10;&lt;h2 id="利用した所感粗大ゴミよりサービスが良い"&gt;利用した所感：粗大ゴミよりサービスが良い&#10;&lt;/h2&gt;&lt;p&gt;使ってみた所感だが、&lt;strong&gt;Webインタフェースで完結したうえに申し込んでから2日後に佐川急便が玄関まで取りに来たので、フツーに粗大ゴミで出すよりむしろサービスが良いと思った&lt;/strong&gt;。日時指定までできたし。粗大ゴミ全般、本気でビジネスとしてやれば行政より良くなりそうだな。少なくともルンバは無料で引き取ってくれそう。それとも、民間だと地方でサービスを維持できないのかなぁ。まぁ現状で無料回収サービスがあるなら、それでもいいけどね。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;法律の制約で捨てづらくなるのは、社会全体として良い結果にならないと思うが、しかしこうして民間のビジネスが解決してくれるなら良いかもしれない&lt;/strong&gt;。結果的に、一部の家電系粗大ゴミについては官から民へとなったわけだ。何がどう転ぶか、わからないものだねぇ。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、うちにはまだ一台使っていないNASがあるんだが、今回用意した段ボールに入らなかったのと、まだ使い道があるはずとか無駄なことを考えているため回収しなかった。未練がましく残している大量の謎規格ケーブルなんかとあわせて、またそのうちお世話になるかもしれない。&lt;/p&gt;&#10;</description></item><item><title>PS5よりゲーミングPCを買おう運動</title><link>https://hack-le.com/ps5-pc/</link><pubDate>Sat, 28 Sep 2024 08:00:00 +0900</pubDate><guid>https://hack-le.com/ps5-pc/</guid><description>&lt;p&gt;僕はNintendo Switchは持っているが、PSについては初代プレステを最後に据え置きゲーム機からは離れている。プレステ2はFF12をやるためだけに誰かから借りた。誰から借りたのか覚えていない……なんか申し訳ない。FF12は面白くなかった。&lt;/p&gt;&#10;&lt;p&gt;なのでプレステ5が10万しようが100万しようが直接関係ないのだけれど、やはり現実に通常版が8万、Pro版が12万と言われると恐れおののくし、かつて家から帰ってからやるゲームが楽しみだった子供時代を過ごした者としては、やはり色々と思うところがある。&lt;/p&gt;&#10;&lt;h2 id="ゲーミングpc買ったほうがいい説"&gt;ゲーミングPC買ったほうがいい説&#10;&lt;/h2&gt;&lt;p&gt;Pro版12万は多くの人に衝撃を与えたようで、SNSなんかでは「ゲーミングPCを買ったほうがいい」とも言われていた。これは自分もそう思った。「12万じゃ碌なゲーミングPCは買えない」という反論もあるようだが、これは「12万払うくらいならちょっと足してゲーミングPC買う」という意味だろうし、もっと言えば「&lt;strong&gt;なんと言われようとゲーム専用機に12万は払えない&lt;/strong&gt;」だろう。&lt;/p&gt;&#10;&lt;p&gt;まぁでもあえて、真面目にちょっといくつかのパターンについて考えてみる。&lt;/p&gt;&#10;&lt;p&gt;前提条件として、PS5はグラボでいうならば通常版がRTX2060、Pro版がRTX4060相当であると言われている。「&lt;a class="link" href="https://pcfreebook.com/article/459993300.html" target="_blank" rel="noopener"&#10; &gt;GPU（グラフィックボード）性能比較表【2024年最新版】 | PC自由帳&lt;/a&gt;」のベンチによると、RTX4060の数値は10665となっている。&lt;/p&gt;&#10;&lt;h3 id="12万でゲーミングノートを買う説の検討"&gt;12万でゲーミングノートを買う説の検討&#10;&lt;/h3&gt;&lt;p&gt;12万でどんなゲーミングPCが買えるのかだが、参考までに僕の持っているゲーミングノートPCがRTX3060搭載、144Hz対応の液晶ディスプレイで、3年前に11万円ほどだった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://hack-le.com/asus-tuf-gaming-f15-fx506hm/" &gt;/asus-tuf-gaming-f15-fx506hm/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これは当時の相場ではだいぶ安かった。ここ3年ほどはグラボも別段安くなってない、なんなら高くなっている感もあるので、今でもCPUだけ最新世代にしたものの構成で、同じくらいするかもしれない。と思って調べて見たら、Amazonだと今は11万だとRTX3050クラスになるようだった。下がってるやん。ええー……。&lt;/p&gt;&#10;&lt;p&gt;円安傾向にあるとはいえ、3年前の同価格帯よりグラボのランクが下がっているのはショックだ。CPUも両方ともCore i5だし、世代が上がっているとはいえこれはなぁ。&lt;/p&gt;&#10;&lt;p&gt;上記のベンチでは、RTX4060の10665に対し、モバイル向けRTX3060は8261、RTX3050(6GB)は5345となっており、性能的にはちょっとつらい感じ。まぁさすがにモバイルはね。PS5にもディスプレイはついてこないんだから。&lt;/p&gt;&#10;&lt;h3 id="12万でゲーミングデスクトップ買う説"&gt;12万でゲーミングデスクトップ買う説&#10;&lt;/h3&gt;&lt;p&gt;しかし、そうなると12万あればデスクトップならば多少良いのが買えるのでは？と思ったのだが、12万だとさすがに厳しいものの、+15000円ほどして13万5000円でRyzen 5 + RTX4060のガレリアがあった。これはけっこう良いのでは？&lt;/p&gt;&#10;&lt;p&gt;真面目にPS5 Pro買うならこっちのほうがいいような？&lt;/p&gt;&#10;&lt;h3 id="12万でグラボ買う説"&gt;12万でグラボ買う説&#10;&lt;/h3&gt;&lt;p&gt;「グラボだけ載せ替えればええやんけ」という民も当然いるはず。実際、12万出せばさすがにRTX4060以上のものが買える。ちなみに僕は去年10万払ってRTX4070を手に入れた。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/rtx4070/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;高い高いと噂のRTX4070をポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/rtx4070/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_11386_1789620489.webp" alt="高い高いと噂のRTX4070をポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;あれから残念なことにグラボの相場価格はあまり熟れていないものの（さすがに今10万出せばRTX4070 SUPERが手に入るが）、12万出せばRTX4070 Tiも入手可能だ。&lt;strong&gt;RTX4070 Tiのベンチは上記サイトで22779、RTX4060の10665に対して圧倒的である&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ポイントなどを活用し安い時を見計らえば、RTX4070 Ti SUPER（いつ見ても骨折したようなネーミングだ）も射程に入るだろう。VRAMも16GBあるし。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;どこのご自宅にもある電源750W以上のタワー型PCにこれを載せ替えれば、晴れてPS5超えが達成できる&lt;/strong&gt;というわけだ。&lt;/p&gt;&#10;&lt;p&gt;……まぁ&lt;strong&gt;真面目に現実の話をするならば、この3slot占有するクソデカ爆熱電気大食らいグラボを載せ替えられる基盤を持ったPCを所持している人はそう多くはないだろう&lt;/strong&gt;。最近はCPUも大食らいだしなぁ。&lt;/p&gt;&#10;&lt;p&gt;電源は一般的にはCPUとグラボの合計TDPの倍とか言われるけど個人的にはそこまでいらんと思ってる。1000Wとかオーバースペックもいいとこ。実際うちの第8世代Core i7 + RTX4070なPCは、グラボ100%の時でも280Wくらいだね。300Wもいかない。……だけどRTX50xxシリーズはさらに爆熱になるようだし、電源容量は盛っておいたほうが、後々になって活きることはあるかもしれない。&lt;/p&gt;&#10;&lt;h3 id="ちょっと足してさらに上のゲーミングpc買う説"&gt;ちょっと足してさらに上のゲーミングPC買う説&#10;&lt;/h3&gt;&lt;p&gt;個人的にはどうせゲーミングPC買うならもうちょっと上位ランクのやつを買いたい。特に上位のやつはPCパーツが全体的にそれなりになっているので、今後グラボだけ載せ替えるなどで延命もしやすい。&lt;/p&gt;&#10;&lt;p&gt;実際、RTX4070を載せ替えた僕のPCは6年半前に25万くらいで買ったものだが（当時はそれでハイエンドだった！）、グラボを載せ替えて未だに使えているし、まだまだ使う気でいる。ちなみにSSDとかも換装しているから、なんだかんだで40万は確実にかかってるなぁ。マザボの対応するメモリが32GBまでなのが残念だ。&lt;/p&gt;&#10;&lt;p&gt;これくらいのPCになると、&lt;strong&gt;ゲームをプレイするだけではなく、作ることもできる&lt;/strong&gt;。いやまぁ作りたいかは別にして。まぁゲームつくらんでも、流行のAIをローカルで出来たりするしさ。うーん、これはお得。なお調子にのってAIやってると電気代で死ぬ模様。&lt;/p&gt;&#10;&lt;p&gt;/tepco-web/&#10;電気代で死んでる&lt;/p&gt;&#10;&lt;p&gt;僕が今から買うならRTX4070 Ti SUPERあたりが載ったやつを狙うかなぁ。それで10年くらいパーツを入れ替え入れ替え使っていきたいな。&lt;strong&gt;このクラスのPCになると、自作PC的な楽しみ方もできる&lt;/strong&gt;（というよりそれができないとつらいかもしれない）。さすがにイチから自作PCやる元気はもうないけれど、入れ替えくらいならやるよ（マザボが死んだらめんどくさい……実際は故障箇所の同定は難しいので、故障する前に入れ替えないといけないんだけど……）。&lt;/p&gt;&#10;&lt;h2 id="pcはいいもんだよ"&gt;PCはいいもんだよ&#10;&lt;/h2&gt;&lt;p&gt;まぁつらつらと書いてきたけれど、&lt;strong&gt;12万ってやっぱり、ゲーム機の値段じゃないなっていうのは、SFC〜PS世代の人間としては率直に思う&lt;/strong&gt;。SFCのカセットは高騰していたけれど、中古屋で安く買ったりしていたし（700円で箱無しの汚れたクロノトリガーをゲットできたのは今でも覚えている良い買い物だった）。通常版にしたって8万は高いなと思う。オッサンの趣味ならいいかもしれないけどさ。いや、&lt;strong&gt;もしかしてゲームってもうオッサンの趣味なのかな&lt;/strong&gt;。一番の違和感はこれかもしれないな。別にそれでもいいんだけどさ。&lt;/p&gt;&#10;&lt;p&gt;なんにせよまぁでもここまで上がると、PCという選択肢が入ってくるのは当然だと思う。もうちょっと出せば更なる高みも見えてきて、ハイスペックPCならばゲームだけではない色々なことが出来るのだから、&lt;strong&gt;やはり個人的にはこの機会にゲーミングPCを激推ししたい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;12万のPCでもいいんじゃないかな。RTX4060のガレリアが13万5000円ならそれでもいいし、もっと安いのでもいい。最新のモンハンはできないかもしれないけれど、面白いゲームは昔のものやインディーズゲームまで見ればめちゃくちゃあるわけだし。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;プレイするだけではなく作ることもできる&lt;/strong&gt;。12万のPCでも色々やれるよ。僕が最近ヘタなりに技術やってきて良かったなと思うのは、開発していると永遠に暇を潰せるっていうのがある。僕はゲームは作らないけれど、Web開発はするからさ。アプリ開発だって今後はするかもしれない。まぁ開発までいかずとも、こうしてブログも書けるし。&lt;/p&gt;&#10;&lt;p&gt;別に作らなくたって、PCは本当になんでもできるしさ。僕だって昔はゲームを楽しんでいたわけだから、ゲームがいいもんなのはわかるけれど、PCはもっと楽しい。&lt;strong&gt;僕は高校受験の時に家庭用ゲームをやめて、それから結局戻ることはなかったんだけれど、それはインターネットがめちゃくちゃ面白かったから&lt;/strong&gt;だ。あの頃のネットは面白かったな。今だってネットの世界を探せばディープなコミュニティはたくさんあるだろうし。&lt;/p&gt;&#10;&lt;p&gt;まぁ金の使い方なんて人の勝手なんだけれど、&lt;strong&gt;少しでも12万のゲーム機を高いと思うなら、ゲーム機以外に目を向けていいと思うし、それは新たな世界に旅立つきっかけだったと思える日も来るかもしれない&lt;/strong&gt;。&lt;/p&gt;&#10;</description></item><item><title>Dockerコンテナ内からLAN内のマシンにアクセスできなかったので、network再作成した</title><link>https://hack-le.com/docker-lan-netwoork/</link><pubDate>Wed, 25 Sep 2024 01:01:56 +0900</pubDate><guid>https://hack-le.com/docker-lan-netwoork/</guid><description>&lt;p&gt;どういうわけか、家のIntel Mac mini 2018のDockerコンテナで、LAN内の他マシンにアクセスできない状態になっていた。原因について色々調べていたけれど結局わからず、最終的にnetwork全部削除して再作成という力業をしたという話。&lt;/p&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;Intel Mac mini 2018 + Docker Desktopで管理しているコンテナから、LAN内の他マシンに一切アクセスできない。インターネットには繋がる。LANだけいかない。具体的にはpingが通らない。IPアドレス指定してもダメ。ただしルータには届く。host.docker.internalでホストマシンに接続もできる。また、外部からのアクセスは通る。&lt;/p&gt;&#10;&lt;p&gt;まったく同じDockerfileを食わせた他のMacでは、AppleSiliconなやつでもIntelなやつでも、問題なくコンテナ内から他サーバと通信できる。&lt;/p&gt;&#10;&lt;p&gt;……色々調べたが、原因はわからなかった。お手上げ。明らかにおまかんで、なにか衝突していそうな気もしたが、Docker不勉強過ぎてわからない。Docker全部消せばなおるんだろうなという気はしたが、さすがにそれは……。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;全部消すくらいなら、networkの再作成だけやるほうがマシだろう。神に縋る気持ちで以下を実行した。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker stop $(docker ps -aq)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker network prune&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは危険性のあるコマンドで、今あるDockerのネットワークが全部消えてしまう。&lt;/p&gt;&#10;&lt;p&gt;自分の場合は、すべてdocker composeでコンテナを作成していたので、いったんそれらのコンテナを全部 &lt;code&gt;docker compose down&lt;/code&gt;で消したうえで、再度 &lt;code&gt;docker compose up -d&lt;/code&gt;で再作成することになった。&lt;/p&gt;&#10;&lt;p&gt;結果、LAN内のPCにアクセスできるようになった。Docker Desktop自体はだいぶ前から入れていて、わけもわからないままにチュートリアルのコマンドなど散々うってきたので、環境がぶっ壊れていたのだろうか。うーん、マジでなんだったんだろう……。&lt;/p&gt;&#10;</description></item><item><title>「安全でないダウンロードがブロックされました」を許可する（Chrome, Brave）</title><link>https://hack-le.com/secure-download-brave-chrome/</link><pubDate>Thu, 12 Sep 2024 13:39:09 +0900</pubDate><guid>https://hack-le.com/secure-download-brave-chrome/</guid><description>&lt;p&gt;ローカルサーバなどにhttp通信でアクセスした際、ファイルをダウンロードしようとしたら「安全でないダウンロードがブロックされました」と警告されて鬱陶しい。自分の場合は電子書籍アプリであるCalibreのWebサーバに頻繁にアクセスするのだが、本をダウンロードするたびにいちいち怒られてとても鬱陶しかった。&lt;/p&gt;&#10;&lt;p&gt;設定から特定のIPアドレスやドメインを除外できるが、設定できる場所が嫌がらせみたいなところにあるのでメモ。自分はBrave使いだが、Brave使っている人は少なそうなのでChromeについても書く（親切）。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;macOS: 14.6.1&lt;/li&gt;&#10;&lt;li&gt;Chrome: 128.0.6613.121 (arm64)&lt;/li&gt;&#10;&lt;li&gt;Brave: 1.69.162 Chromium: 128.0.6613.120 (Official Build) (arm64)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="chromeの場合"&gt;Chromeの場合&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;「設定」を開く&lt;/li&gt;&#10;&lt;li&gt;左側のメニューから「プライバシーとセキュリティ」&lt;/li&gt;&#10;&lt;li&gt;「サイトの設定」&lt;/li&gt;&#10;&lt;li&gt;「コンテンツ」内にある「その他のコンテンツの設定」を開く&lt;/li&gt;&#10;&lt;li&gt;「安全でないコンテンツ」&lt;/li&gt;&#10;&lt;li&gt;「安全でないコンテンツの表示を許可するサイト」に追加する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/09/041d393e29a49af8d653d869c5f1793d-700x414.png"&gt;&lt;/p&gt;&#10;&lt;h2 id="brave編"&gt;Brave編&#10;&lt;/h2&gt;&lt;p&gt;Chromiumベースだから似たようなもんだけど微妙に違うので。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;「設定」を開く&lt;/li&gt;&#10;&lt;li&gt;左側のメニューから「プライバシーとセキュリティ」&lt;/li&gt;&#10;&lt;li&gt;「サイトとシールドの設定」&lt;/li&gt;&#10;&lt;li&gt;「コンテンツ」内にある「その他のコンテンツの設定」を開く&lt;/li&gt;&#10;&lt;li&gt;「安全でないコンテンツ」&lt;/li&gt;&#10;&lt;li&gt;「安全でないコンテンツの表示を許可するサイト」に追加する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/09/4ae1891c4ef3a01502502f3a78b7060e-700x393.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁほとんど一緒だけど。画像の例はLAN内のプライベートIPアドレスを指定した例。たとえば192.168.0.8ならそのように直打ち。ワイルドカード使えないっぽい。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;この警告が人類の役に立ったことある？&lt;/p&gt;&#10;</description></item><item><title>Zoho Mailで無料の独自ドメインメール 趣味、ブロガー、個人事業主、零細企業によし</title><link>https://hack-le.com/zoho-mail-domain/</link><pubDate>Tue, 03 Sep 2024 18:30:17 +0900</pubDate><guid>https://hack-le.com/zoho-mail-domain/</guid><description>&lt;p&gt;独自ドメインのメールは誰しも2つか3つくらい持っておきたいものだが、どうしてもコストがかかってしまう。僕は阿呆なのでCloudflareのEメールルーティングで受信 + Amazon SESで送信という荒業で無理矢理実現していた。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/amazon-ses-cloudflare-email-routing-gmail/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Amazon SES &amp;#43; Cloudflare Email Routing &amp;#43; Gmailで安上がりな独自ドメインのメール送受信&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/amazon-ses-cloudflare-email-routing-gmail/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_14338_1787719843.webp" alt="Amazon SES &amp;#43; Cloudflare Email Routing &amp;#43; Gmailで安上がりな独自ドメインのメール送受信" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;本当に阿呆だった。こんな苦労しなくても最初からZoho Mail使っていればよかった。Zoho Mailならば、制約はあるものの、独自ドメインで簡単にメールができる。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/zohomail/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;格安メールを求めて、Zohomailを使い始めてみる&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/zohomail/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_15015_1788944127.webp" alt="格安メールを求めて、Zohomailを使い始めてみる" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;前回はZoho Mailでフリーのアカウントを作成していたが、一通り使えそうだったので、今回は独自ドメインを利用するように設定してみた。&lt;/p&gt;&#10;&lt;h2 id="制約とできること"&gt;制約とできること&#10;&lt;/h2&gt;&lt;p&gt;まず無料プランの制約についておさらいする。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;5人まで&lt;/li&gt;&#10;&lt;li&gt;添付ファイルは25MBまで&lt;/li&gt;&#10;&lt;li&gt;ストレージは5GB&lt;/li&gt;&#10;&lt;li&gt;SMTP/IMAPなし（Webメール、アプリのみ）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;人数は仕方ないとして、&lt;strong&gt;SMTP/IMAPなしが強烈&lt;/strong&gt;なところではある。これはつまりメーラ使えないということを意味している。それだけならいいが、開発しているとメール送信系でSMTPが必要になることもあるだろうから、そこがネックになる可能性はあるだろう。まぁGmailのエイリアスで無理矢理送るとかもあるけれど、何かと厳しいご時世だしそのうち届かなくなりそう……。&lt;/p&gt;&#10;&lt;p&gt;一方で、できることとしては以下がポイントか。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;メーリングリスト&lt;/li&gt;&#10;&lt;li&gt;差出人変更&lt;/li&gt;&#10;&lt;li&gt;ちょっとしたコラボレーションツール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;メーリングリスト使えて嬉しい。差出人をメーリングリストのアドレスにすることも可能。コラボレーションツールは、非常にシンプルなのだが、なんというか「こういうのでいいんだよこういうので」感があった。5人以下の少人数チームだったら割と便利かも。&lt;/p&gt;&#10;&lt;p&gt;Zoho Mail Bookmarkはちょっと便利そうだなと思ってブラウザにエクステンション入れてみたが、永遠にログインできなくてうーんってなってる。&lt;/p&gt;&#10;&lt;h2 id="設定は簡単"&gt;設定は簡単&#10;&lt;/h2&gt;&lt;p&gt;簡単といってもメールサーバの設定であるので、DNSをいじったことがなければややつらいと思われる。ただ途中でCloudflareの例を使った時の設定ビデオもあるので、何もわからずとも、とりあえずなんとかなるのではないか。&lt;/p&gt;&#10;&lt;p&gt;まぁUI的にわかりづらいところもある（最初に登録するEメールアドレスってなんでもいいの？とか）ので、参考記事があったほうが良いのは確か。これについては何故かギズモードに記事があった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.gizmodo.jp/2022/03/zoho-mail.html" target="_blank" rel="noopener"&#10; &gt;有料のGoogle Workspaceへ移行せず、無料で独自ドメインのメールを使い続ける方法 | ギズモード・ジャパン&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;あんまりギズモードでこういうハウツー記事は見ない気がする。語りがいつものギズモード口調なこと以外は普通に参考になってしまった。&lt;/p&gt;&#10;&lt;p&gt;あまりいないと思うが、設定内容について定性的な意味を知りたい人はよろしければ拙記事をどうぞ……。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/dkim-spf-dmarc/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;独自ドメインでメールするために、DKIM/SPF/DMARCのお勉強&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/dkim-spf-dmarc/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_14196_1789100822.webp" alt="独自ドメインでメールするために、DKIM/SPF/DMARCのお勉強" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="普通に使えるのでよし"&gt;普通に使えるのでよし&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;可もなく不可もなし。メールはそれでいい&lt;/strong&gt;。ちゃんと送れてちゃんと届けば、なんでもいい。まぁWebメール + スマホアプリ限定というところが確かに不便ではあるのだけれど、さすがに無料なので仕方がない。スマホアプリなら比較的アカウントの切り替えは楽なので、スマホアプリでの管理も念頭においてやるのがいいかな。お気に入りのメールクライアントの機能をバリバリ使って仕訳するタイプの人だとつらいかも。&lt;/p&gt;&#10;&lt;p&gt;メーリングリストを使えるのはとても有り難い。差出人もメーリングリストのアドレスにできたし、少なくとも自分がやりたいことは一通りできたなと思う。&lt;/p&gt;&#10;&lt;p&gt;コラボレーションツールについては、簡単なカレンダーとタスク管理があるくらいだが、少人数だとこれくらいで十分かもしれない。ちょっと試してみようかなと思っている。ブックマーク共有は面白そうだったが、Chrome用エクステンションで一生ログインできなくて使えてない。悲しい。&lt;/p&gt;&#10;&lt;p&gt;まぁそんなわけで、&lt;strong&gt;ホビーはもちろん、ビジネスでも零細企業や個人事業主だと非常に有り難いサービスではなかろうか&lt;/strong&gt;。&lt;/p&gt;&#10;</description></item><item><title>Pixel 7からPixel 9にはしない</title><link>https://hack-le.com/pixel-7-pixel-9/</link><pubDate>Sun, 25 Aug 2024 01:24:27 +0900</pubDate><guid>https://hack-le.com/pixel-7-pixel-9/</guid><description>&lt;p&gt;Pixel 7持ちなのでそれなりに気にしてはいるPixel 9が発売されたようだ。まぁ話を聞く限りあまり魅力的に思えないので、買い換える予定はないんだけど、見聞きしたことをメモしつつ所感。&lt;/p&gt;&#10;&lt;h2 id="価格とスペック"&gt;価格とスペック&#10;&lt;/h2&gt;&lt;p&gt;今回出るのはPixel 9/Pro/Pro XLの3パターン。基本的に自分が見るのは無印なので、無印について自分が気になるところのスペックを見る。&lt;/p&gt;&#10;&lt;h3 id="価格表と基本スペック"&gt;価格表と基本スペック&#10;&lt;/h3&gt;&lt;p&gt;参考: &lt;a class="link" href="https://www.itmedia.co.jp/news/articles/2408/14/news095.html" target="_blank" rel="noopener"&#10; &gt;グーグル、「Pixel 9」正式発表 生成AIに最適化した新チップ「Tensor G4」採用 1.6万円値上げに - ITmedia NEWS&lt;/a&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Pixel 7&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Pixel 8&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Pixel 9&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;価格&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;82,500&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;112,900&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128,900&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SoC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tensor G2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tensor G3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tensor G4&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ストレージ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;128GB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RAM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;12GB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ディスプレイ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6.3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6.3 / Actua Display&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6.3 / Actua Display&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;こうしてみると、やはり&lt;strong&gt;Pixel 7のコスパが際立っている&lt;/strong&gt;。Pixel 7は実際確かに安かった。下取り価格も異様で、Pixel 4がなぜか61,500円だったのは今でも伝説。自分のiPhone SE2も35,000円で買い取ってもらった。中古相場より高かったと思う。しかもそこに10%オフクーポンがのっかり、さらに21000ポイントのGoogleクレジットもついた。まぁ使い道はなかったが。&lt;/p&gt;&#10;&lt;p&gt;まぁさすがにPixel 7は安すぎたので、これと比較するのは可哀想ではあるんだが、&lt;strong&gt;それにしても13万はなかなか強気&lt;/strong&gt;。ってか、&lt;strong&gt;これならGalaxy買わんか&lt;/strong&gt;？256GBだとAmazonでこれより安いんだが。俺ならGalaxy S24のほうがほしい。クーポン前提の価格ならそれはそれで健全な商売とは言えない。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;15250&amp;rdquo;]&lt;/p&gt;&#10;&lt;h3 id="ストアクレジットはつくけど注意せよ"&gt;ストアクレジットはつくけど注意せよ&#10;&lt;/h3&gt;&lt;p&gt;ストアクレジットは邪悪な風習なので好まないが、Pixel 9の場合は24,200ポイントほどつく。その他は下表のとおりだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/08/5b3ab8d68db984cb39a5ce9a056860eb-700x314.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://store.google.com/intl/ja/ideas/articles/new-summer-launch-2024/" target="_blank" rel="noopener"&#10; &gt;Google Pixel 9 シリーズや Google Pixel Watch 3 など新製品登場&lt;/a&gt;より&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;この「実質割引額」という言葉が非常に気に入らない。これは欺瞞だ。Googleのストアクレジットに日本円と同じ価値はない。&lt;strong&gt;品揃えが悪いGoogleストアでしか使えなくて、有効期限は1年という大きな制約を課したポイントに、どうして1円と同じ価値があろうか？&lt;/strong&gt; ちなみに僕はPixel 7を購入した時についてきた2万ポイントの使い方に窮して、有効期限が切れる日に仕方なくFitbit Sense 2をやや不本意ながら買うことになった。このへんの話は以前記事にした。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-store-credit/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-store-credit/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/10/ea2c70bff34560494e11be9aad7b7321.webp" alt="制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h3 id="pixel-7の下取り価格"&gt;Pixel 7の下取り価格&#10;&lt;/h3&gt;&lt;p&gt;これは公式サイトで確認すればよいが、41,900円とまずまずではあった。まぁ手間暇考えたらいいかなっていうくらいか。初期化して文鎮にならなければいいけれど。ただPixel 7の時のようなぶっ壊れではない。まぁこれは仕方が無い、直接売るより楽だし確実だけど、ちょっと安いよっていうのがフツーの下取りだし。下取り価格のほうが高かったら中古市場は崩壊する。&lt;/p&gt;&#10;&lt;p&gt;……でも手数料まで考えると、Pixel 7の場合下取りのほうがよいかもねほんとに。&lt;/p&gt;&#10;&lt;h2 id="気になる点"&gt;気になる点&#10;&lt;/h2&gt;&lt;h3 id="ramが増えた"&gt;RAMが増えた&#10;&lt;/h3&gt;&lt;p&gt;価格以外で唯一目を引くのはRAMだが、これも「日本語でほとんど使えないGemini Nanoのため」という話もあって、うーん。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-pixel-9-series-gemini-nano-memory-carve-out.html" target="_blank" rel="noopener"&#10; &gt;日本語でほぼ使えないのに？Pixel 9シリーズのメモリの一部はGemini Nanoに専用割り当て&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;なんだかなぁ。&lt;/p&gt;&#10;&lt;h3 id="tensorは相変わらずダメっぽい"&gt;Tensorは相変わらずダメっぽい&#10;&lt;/h3&gt;&lt;p&gt;なんだかんだいって気になるのは結局SoCなんだが、どうも芳しくなさそうなんよね。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gazlog.jp/entry/tensorg4-production-benchmark/" target="_blank" rel="noopener"&#10; &gt;Google Pixel 9搭載『Tensor G4』のCPUとGPU性能が判明。GPU性能は22%向上もサーマルスロットリングが心配される状態に&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://iphone-mania.jp/android-584812/" target="_blank" rel="noopener"&#10; &gt;Tensor G4でサーマルスロットリング〜高性能冷却機構搭載も最大性能の50%に低下 - iPhone Mania&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://xenospectrum.com/what-has-changed-in-the-new-tensor-g4-chip-the-heart-of-the-google-pixel-9-series/" target="_blank" rel="noopener"&#10; &gt;Google Pixel 9シリーズの心臓部、新「Tensor G4」チップは一体何が変わったのか？ | XenoSpectrum&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;G3から比べると進化はしているものの、競合と比べるとベンチの成績が優れないようだ。ってか無印だとPixel 9はPixel 8よりスコア低いとか……。GPUテストはスナドラの前世代にすら完敗。さらに気になるのは、サーマルスロットリングによる性能低下が起きているらしいことやね。&lt;/p&gt;&#10;&lt;p&gt;正直、Pixel 7くらい安かったらまぁいいかなって思うけど、現状&lt;strong&gt;価格だけGalaxyになったと言わざるを得ないだろう&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="aiって言われても"&gt;AIって言われても……&#10;&lt;/h3&gt;&lt;p&gt;GoogleもHW性能がしょっぱいのは自覚しているらしくて、ベンチではなくユースケースに対応するために設計しているのだと、苦しい言い訳をしているらしい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gazlog.jp/entry/tensorg4-this-is-fine/" target="_blank" rel="noopener"&#10; &gt;GoogleがTensor G4はベンチマーク性能が低いのは意図的だと開き直る&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;まぁ実際Pixelシリーズのウリは恐らくAIをはじめとするSWなのはそうだろう。それはわかるが、その鳴り物入りのAIでできることが、&lt;strong&gt;いない人を追加したり、いる人を抹消したりする想い出改竄機能&lt;/strong&gt;では魅力を感じられない。ただスクショを保存して検索できるPixel Screenshotはちょっと便利そうだなと思った。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-google-pixel-9-and-9-pro-xl-review.html" target="_blank" rel="noopener"&#10; &gt;Google Pixel 9 / 9 Pro XL レビュー：真の魅力はAIの日本語対応から&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;日本語対応してない&lt;/strong&gt;んだけどね。ほとんどの機能が今のところ日本語で使えないようだ。悲しい。&lt;/p&gt;&#10;&lt;h3 id="ディスプレイは良いらしい"&gt;ディスプレイは良いらしい&#10;&lt;/h3&gt;&lt;p&gt;チップ周りはパッとしないが、ディスプレイは高評価であるらしい。個人的にはあまり関心がないが。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-pixel-9-and-9-pro-display-dxomark.html" target="_blank" rel="noopener"&#10; &gt;Pixel 9 Pro XLがディスプレイ評価で世界1位に。画質と明るさ、タッチ反応など高評価&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Googleはこの高評価についても「スコアをとるための設計ではない」と言うのだろうか。&lt;/p&gt;&#10;&lt;p&gt;アダプティブタッチなるものもあるようだが、実際に有効かはあまり期待しないほうがよさそう。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-google-pixel-9-adaptive-touch.html" target="_blank" rel="noopener"&#10; &gt;Pixel 9シリーズはぬれた指でも操作できる「アダプティブタッチ」に対応&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="ミリ波非対応は残当だしどうでもいい"&gt;ミリ波非対応は残当だしどうでもいい&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-google-pixel-9-pro-and-9-pro-xl-jp-has-not-5g-mmwave.html" target="_blank" rel="noopener"&#10; &gt;日本版のPixel 9 / 9 Pro / 9 Pro XLは5Gミリ波非対応に&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;日本のミリ波対応は政治的なところで間に合わなかったらしい。これについてはいいよ、対応しなくて。&lt;strong&gt;スマホでミリ波の筋が良いとはどうしても思えない&lt;/strong&gt;。電磁波の性質が変わるわけじゃないし。&lt;strong&gt;一部の業者と政治家が、金の流れのために5Gミリ波使わせたいだけじゃないの&lt;/strong&gt;。技術的にはめっちゃ筋悪いと思う。&lt;/p&gt;&#10;&lt;p&gt;メーカーも今までは進化したことをわかりやすく訴求できるものがなかったから、マーケティング的な都合で5Gとかミリ波とか言ってただけでしょうぶっちゃけ。今はAIっていう、もっとわかりやすいものが出てきたから、今さらどうでもいいと思ってるんじゃないの。3Gから4Gは確かに革新だったし素晴らしかったけれど、5Gはただのマーケティングだと思う。&lt;/p&gt;&#10;&lt;h3 id="qi2非対応"&gt;Qi2非対応&#10;&lt;/h3&gt;&lt;p&gt;Qi2よくわかってなかったんだけれど、YouTubeにわかりやすい動画上がってた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=YS_kHEeGMy8" target="_blank" rel="noopener"&#10; &gt;【すぐ買うべき？】Qi2ワイヤレス充電とは何なのか？まとめ・MagSafeや従来Qiとの違い - YouTube&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;AppleのMagSafeをベースにした標準規格らしい。MagSafeはiPhone 12以降で対応していて、マグネット充電はべたっとくっついて固定されるの便利そうだなと思った。スタンドの幅が広がる。しかしそうなるとAndroid陣営的にはAppleの周回遅れどころじゃないなぁ。まぁ非接触充電はガジェット界隈で一度忘れ去られたところをAppleがiPhone 8で再評価させたわけだが、今でもAppleがリードしてるんだなぁ。&lt;/p&gt;&#10;&lt;p&gt;充電速度については、スマホは置きっぱが多いから、個人的にはそんなに、かな。スマートウォッチ系では重要だろうけど。&lt;/p&gt;&#10;&lt;p&gt;うーん、Qi2非対応はちょっと残念かもね。まぁGalaxy S24でも対応してないようだし、しゃーないのか。&lt;/p&gt;&#10;&lt;h3 id="ちゃんとずっと使えるのか"&gt;ちゃんとずっと使えるのか&#10;&lt;/h3&gt;&lt;p&gt;Pixel 8のとき、「OSのアップデート保証期間が7年！これはすごい！」とスマホを毎年買い換えてそうな提灯レビュアーたちが騒いでいてゲンナリさせられた。曰くリセールバリューが高まるとのことだが、3年前に発売されたPixel 6シリーズをまさにリセールしようとしたであろう人たちが、初期化したら文鎮化したと騒がれたのがこの前のことだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-google-explain-pixel-6-series-brick-after-wipe-factory-reset-error.html" target="_blank" rel="noopener"&#10; &gt;Pixel 6シリーズの文鎮化問題。Googleが回避方法を案内、根本原因はまだ特定できず&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;怖すぎるでしょこれ。下取りに出そうとしてこれ起きたらGoogleはどうしてくれるんだ？最近だと「&lt;a class="link" href="https://iphone-mania.jp/android-584871/" target="_blank" rel="noopener"&#10; &gt;Pixel 9以外の全機種に隠れた脆弱性、最新機種は安全？ - iPhone Mania&lt;/a&gt;」なんて話もあったし、本当にずっと使えるんだろうか、という心配は正直ある。僕もPixel 7使ってるから他人事ではない……。&lt;/p&gt;&#10;&lt;h2 id="今回も見送り"&gt;今回も見送り&#10;&lt;/h2&gt;&lt;p&gt;ということでざっと見てきたわけだが、&lt;strong&gt;価格が大幅に上がっているのに、HWもSWも微妙というのが正直なところだ。ちょっと買い換える気にはならない&lt;/strong&gt;。ってか13万払うならGalaxyのほうがいいし、僕はOSにこだわりもないので、iPhone SE4待とうかなという感じ。狙っているわけではないんだが、過去iOSとAndroid交互に使ってきているので、次はiPhoneの可能性がけっこう高い。&lt;/p&gt;&#10;&lt;p&gt;まぁ&lt;strong&gt;買わなきゃタダなので、なんだかんだでPixel 7でさらに数年戦い続けるかもしれない&lt;/strong&gt;。Pixel 7は価格考えると良い端末だと思う。正直割とこれで十分なんだよね、僕の用途だと……。&lt;/p&gt;&#10;&lt;p&gt;でも&lt;strong&gt;庭から石油が出たらPixel 9 Pro Foldはほしい&lt;/strong&gt;と思ってる。庭ないけど。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/mobile/articles/2408/14/news032.html" target="_blank" rel="noopener"&#10; &gt;Google折りたたみスマホ「Pixel 9 Pro Fold」発表 先代「Pixel Fold」から何が進化したのか（1/2 ページ） - ITmedia Mobile&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Amplify + React で Authenticator 使用時にアクセストークンとIDトークンを取得するメモ</title><link>https://hack-le.com/amplify-react-authenticator-token/</link><pubDate>Sun, 18 Aug 2024 14:42:01 +0900</pubDate><guid>https://hack-le.com/amplify-react-authenticator-token/</guid><description>&lt;p&gt;Amplify で &lt;code&gt;Authenticatior&lt;/code&gt; を使うとサクッと認証の仕組みが出来て良いのだが、外部サービスとの連携なんかでアクセストークンやIDトークンが欲しいときがあるかもしれない。そんなときのスニペットメモ。Gen2でも使えた。&lt;/p&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;p&gt;といっても例によって「&lt;a class="link" href="https://stackoverflow.com/questions/77728222/how-to-get-user-access-token-in-aws-amplify-ui-authenticator" target="_blank" rel="noopener"&#10; &gt;How to get user access token in AWS Amplify UI Authenticator - Stack Overflow&lt;/a&gt;」に記事があり、これ以上言うことはないのだが、昨今メモっておかないとあっという間にネットの海に消えてしまうのでメモ的に。&lt;/p&gt;&#10;&lt;p&gt;以下は &lt;code&gt;App.tsx&lt;/code&gt; の中身。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-tsx" data-lang="tsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fetchAuthSession&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@aws-amplify/auth&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Authenticator&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@aws-amplify/ui-react&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@aws-amplify/ui-react/styles.css&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App() {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;Authenticator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{({&lt;/span&gt; &lt;span class="nx"&gt;signOut&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Function to print access token and id token&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;printAccessTokenAndIdToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetchAuthSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Fetch the authentication session&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Access Token:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accessToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ID Token:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;idToken&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signInDetails&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loginId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;My&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="nx"&gt;successfully&lt;/span&gt; &lt;span class="nx"&gt;hosted&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://docs.amplify.aws/react/start/quickstart/#make-frontend-updates&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;Review&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt; &lt;span class="nx"&gt;step&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="nx"&gt;tutorial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;signOut&lt;/span&gt;&lt;span class="p"&gt;}&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Sign&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;printAccessTokenAndIdToken&lt;/span&gt;&lt;span class="p"&gt;}&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Print&lt;/span&gt; &lt;span class="nx"&gt;Tokens&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;Authenticator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;コード内の &lt;code&gt;printAccessTokenAndIdToken()&lt;/code&gt; の部分がそう。実行すると、コンソールログにAccess Tokenと ID Token が残る。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/77728222/how-to-get-user-access-token-in-aws-amplify-ui-authenticator" target="_blank" rel="noopener"&#10; &gt;How to get user access token in AWS Amplify UI Authenticator - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/moritalous/items/76a05676a564960ac974" target="_blank" rel="noopener"&#10; &gt;手を動かして0から理解するAmplify Gen2 #AWS - Qiita&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Lambda関数との連携で同様にクレデンシャル情報を取得してます&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>スマホ置くだけ充電のすゝめ</title><link>https://hack-le.com/%E3%82%B9%E3%83%9E%E3%83%9B%E7%BD%AE%E3%81%8F%E3%81%A0%E3%81%91%E5%85%85%E9%9B%BB%E3%81%AE%E3%81%99%E3%82%9D%E3%82%81/</link><pubDate>Sat, 03 Aug 2024 09:00:00 +0900</pubDate><guid>https://hack-le.com/%E3%82%B9%E3%83%9E%E3%83%9B%E7%BD%AE%E3%81%8F%E3%81%A0%E3%81%91%E5%85%85%E9%9B%BB%E3%81%AE%E3%81%99%E3%82%9D%E3%82%81/</guid><description>&lt;p&gt;個人的に気に入っているガジェットの一つが、充電機能付きスマホスタンドである。スマホの充電めんどくさい問題は人類70億人が抱える課題だが、このガジェットを用いることで解決できる部分は大きいと思う。また、iPhone 14以前のユーザにとってはLightning対策にもなる（まぁ僕は第二世代Magic TrackpadとMagic Keyboardがあるから完全に逃れられてはいないんだが……）。&lt;/p&gt;&#10;&lt;p&gt;非常に便利なアイテムなのだが、この利便性は使ってみないとわからないものなので、とにかく使ってみてほしいと切に願う。3000円もしないし。&lt;/p&gt;&#10;&lt;h2 id="ケーブルの挿抜はギルティ"&gt;ケーブルの挿抜はギルティ&#10;&lt;/h2&gt;&lt;p&gt;いまやスマホはなくてはならないものだが、その充電作業はたいへん煩わしい。また、時に腹立たしくもある。&lt;/p&gt;&#10;&lt;p&gt;何が煩わしいかといえば、&lt;strong&gt;両手と目を使った集中力を要する作業&lt;/strong&gt;だということだ。片手でスマホをもって、もう一方の手でケーブルをもつ。スマホとその穴をしっかり見て、ケーブルを差し込む。そして入らない。ん？と思ってひっくり返す。入らない。んんん？？？と思ってまたひっくり返す。入った。なんっっっでやねん！！！！&lt;/p&gt;&#10;&lt;p&gt;まぁ形状の問題については、LightningやType CのUSBなどリバーシブルなものが出てからはだいぶマシになった。しかしケーブルの挿抜作業が地味な集中力を要求するものであることに変わりは無い。&lt;strong&gt;スマホの充電作業はイライラさせられるものであり、生産性を落とすばかりか、憎悪を増幅し、人類を世界平和から遠ざける大罪&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;p&gt;ここで人々は「容量は無限だけど空気より軽いバッテリー」を夢を見るわけだが、当然ながらそんなものは存在しない。中には部屋のどこかから充電できるだけの電磁波を飛ばして充電する案などもあるがなにそれそんなん怖すぎるやろ防護服着て歩けばええんか。電磁波の人体に対する影響は明らかではないものの、&lt;strong&gt;遠くからバッテリーの充電ができる出力で、ポケットのスマホめがけて指向性を高めたビーム飛ばしてくるとか、控えめに言って兵器&lt;/strong&gt;である。怖すぎ。もっと平和を願って。&lt;/p&gt;&#10;&lt;p&gt;そんな未来ガジェットや兵器に頼らずとも、現代のテクノロジーで充電の煩わしさから解放されることは可能だ。ワイヤレス充電器、いわゆる置くだけ充電というやつである。&lt;/p&gt;&#10;&lt;h2 id="iphone-8のおかげで"&gt;iPhone 8のおかげで&#10;&lt;/h2&gt;&lt;p&gt;置くだけ充電はガジェット界隈では2010年代前半に少し流行っていた。だいたい2012-13年頃かなぁ。特にGoogle謹製のタブレットNexus7 2013年版でQi（ワイヤレス充電の規格）対応された時には、「ついにワイヤレス充電の時代が来るのか」と思ったが、どうもその時がピークだっったようで、その後特に広まることも無く、残念な思いをしていた（僕は当時、Qi対応のガジェットをいくつか持っていた）。Googleはその後何事もなかったかのようにQi対応をやめた。ガジェット界隈でもニッチ寄りで、正直便利だったかというとかなり微妙であり、しばらくすると時代のあだ花として皆に忘れ去られた。&lt;/p&gt;&#10;&lt;p&gt;そう、AppleがiPhone 8(2017年)で採用するまでは……。&lt;/p&gt;&#10;&lt;p&gt;みんなが忘れた頃に突然登場した真打ち。使ってみると確かに便利だった。iPhoneがワイヤレス充電に対応したことで、他メーカも少しずつスマホでのワイヤレス充電に対応するようになった。2024年のいまとなっては、ハイエンドのスマホだったらまず対応している。&lt;/p&gt;&#10;&lt;p&gt;Appleのこういうところは本当に良いところだよなぁ、とつくづく思う。微妙に流行っていた時には手を出さず、皆が忘れた頃に誰もが「便利だ！」と思えるクオリティで出す。&lt;/p&gt;&#10;&lt;p&gt;今にして思えば、2013年くらいのQi対応製品は、どういう使い方を想定したのかわからない、不可思議なものが多かった。置くだけ充電は、充電速度が遅く、また場所を取るという強烈なデメリットがあるが、それを補うのは「充電がしやすい」ことだ。つまり、毎日何度も充電するようなものこそうってつけのユースケースだと言える。&lt;/p&gt;&#10;&lt;p&gt;しかしQi対応の先駆けであった僕が手にしたガジェットは、そういうユースケースを無視していた。たとえばデジカメ。そんなに毎日使わないので、嬉しくない。たとえばタブレット（お前だNexus 7）。純粋にでかい。置き場がない。スマホほど充電しない。たとえばモバイルバッテリー。ちゃう、お前は充電する側であってされる側ではない。&lt;/p&gt;&#10;&lt;p&gt;今にして思うと冗談みたいな製品ばかりだった。そりゃ流行らんわ。まぁ、技術が悪いのでは無く、ユースケースを誤っていたわけだ。置くだけ充電がぴったりくるのは、スマホやウェアラブル製品、つまりiPhoneやApple Watch、AirPodsだった。それを見抜き、流行に流されずしっかりと使える形まで高め、満を持して世に出すのは、繰り返すがAppleの本当に良いところだと思う。&lt;/p&gt;&#10;&lt;h2 id="今や当たり前"&gt;今や当たり前&#10;&lt;/h2&gt;&lt;p&gt;便利さが認知されたことで、ワイヤレス充電対応のガジェットも増えた。ワイヤレス充電器自体も増えた。個人的に特に便利だと思っているのは、スマホスタンドを兼ねたワイヤレス充電器である。けっこうスマホの画面を表示しておきたいことはあるので、それをしながら充電まで出来てしまうのは便利だ。やったね、一生ソシャゲが出来るよ。また、純粋に平置きよりも起きやすいし、スペースも取らない。&lt;/p&gt;&#10;&lt;p&gt;ということで長々と書いてきたが、スマホスタンド型のワイヤレス充電器はとてもオススメである。充電周りは怪しげなメーカがいっぱい出しているが、ここはブランド買いでAnker一択。ちょっと（？）前ならRAVPowerも選択肢にあったが、サクラレビュー問題で消えた。しょうもないことせず真っ当に商売していればよかったのにと思う（「&lt;a class="link" href="https://internet.watch.impress.co.jp/docs/yajiuma/1332287.html" target="_blank" rel="noopener"&#10; &gt;Amazon、RAVPower社の充電器やモバイルバッテリーをウェブサイトから根こそぎ削除。その理由は【やじうまWatch】 - INTERNET Watch&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14589&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>異常に劣化が早かったCrucial CT2000BX500SSD1のその後</title><link>https://hack-le.com/crucial-sata-ssd/</link><pubDate>Sun, 28 Jul 2024 17:00:00 +0900</pubDate><guid>https://hack-le.com/crucial-sata-ssd/</guid><description>&lt;p&gt;一昨年、セールで安くなっていたSATA SSDをホク顔でポチったが、いざ使って見ると異常に劣化が早く、経過観察をしていた。&lt;/p&gt;&#10;&lt;p&gt;/crucial-ct2000bx500ssd1-2&#10;9/4の記事&lt;/p&gt;&#10;&lt;p&gt;最後に記事を書いたのが去年の9/4であれから9か月経過しているわけだが、記事を書かなくなったのは、便りが無いのは無事の便りというやつで、まぁその後特に問題なく使えるようになったからだ。というか、使い方を変えたからだ。正直あまり良くないSSDだったのはそうだと思っている。モデルとしてよくなかったのか、ハズレの個体だったのかはわからないが。&lt;/p&gt;&#10;&lt;h2 id="前回からの変化"&gt;前回からの変化&#10;&lt;/h2&gt;&lt;p&gt;前回記事では、2023/9/3の時点で健康状態が83%であった。で、その後1年近く経過した現在、77%程度でおさまっている。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/07/CrystalDiskInfo_20240727192516-700x768.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁ以前として「劣化早くね？」というのが偽らざる気持ちではあるものの、許容できないほどではない。少なくともあと10年このSSDを使う予定も特には無いし。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁいいか、ということで、記録もしなくなっていた。&lt;/p&gt;&#10;&lt;h2 id="dropbox経由で激しくファイル操作をしていた"&gt;Dropbox経由で激しくファイル操作をしていた&#10;&lt;/h2&gt;&lt;p&gt;変わったことといえば、Dropbox経由での大量のファイル操作をしなくなったことだと思う。&lt;/p&gt;&#10;&lt;p&gt;自分はDropbox Plusのユーザなので、2TBのオンラインストレージを利用できる。で、Dropboxの同期能力はたいへん高いので、多くのファイルを高い頻度で作成・削除してもうまくこなしてくれる。これはオンラインストレージとしてたいへん素晴らしいことで、同様のことをQNAPのNAS + ソフトウェアQsyncを使ってやろうとするとたいへんつらいことになる。まぁDropboxも昔はすごい勢いで重複ファイルが出来たものなので、地味だが着実な改善を続けてきたのだろうと思う。これはDropboxがすごい。&lt;/p&gt;&#10;&lt;p&gt;で、&lt;strong&gt;Dropboxの非機能試験をするかのごとく、自分の使い方では激しいファイルの作成・削除があった&lt;/strong&gt;。具体的には流行のAIイラストをローカルのStable Diffusionで大量に生成しては削除を繰り返していた。多い日は一日1000枚くらいやっていた。また、プログラムを使ったリネームはファイルの補正なども大量にしていた。……と言っても、逆に言うとその程度なんだが……どうやら、この程度でもCrucialのCT2000BX500SSD1には重たかったようだ。&lt;/p&gt;&#10;&lt;p&gt;この操作をSATA SSD上から外した（Dropboxをとおさないようにした）ところ、健康寿命の減少速度は急激に収まった。なので、&lt;strong&gt;多分この操作の負荷に耐えかねていた、ということでいいと思う&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="大容量の書き込みで速度が突然遅くなる現象もあり"&gt;大容量の書き込みで速度が突然遅くなる現象もあり&#10;&lt;/h2&gt;&lt;p&gt;他にも、このSSDはかなり性能に難があるものであることが使っていてわかった。&lt;strong&gt;大容量のファイルや大量のファイルなどで、転送に一定時間かかるファイルものだと、一定時間経過すると突然書き込み速度が低下する&lt;/strong&gt;。なんならハードディスクより遅いくらいになる。これは地味に不便なところの一つだ。&lt;/p&gt;&#10;&lt;h2 id="よろしくなかった"&gt;よろしくなかった&#10;&lt;/h2&gt;&lt;p&gt;Dドライブでデータ保管的な用途が多い現在はさほど問題はないが、Cドライブだと耐えられなかったのではなかろうか。総合的に見て、あまりよくないSSDなのはそうだと思う。モデルの問題なのか、個体の問題なのかはわからない。いずれにせよ、Crucialに対する僕の信頼はちょっと落ちた。&lt;/p&gt;&#10;&lt;p&gt;まぁ、今となってはわざわざSATA SSDを買うこともないだろう。NVMe SSDも値段が熟れてきたし……と思ったけどまたちょっと高くなってるのかな最近。まぁでも、スロットさえ空いているならNVMe SSDのほう買いたいね。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14821&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>格安メールを求めて、Zohomailを使い始めてみる</title><link>https://hack-le.com/zohomail/</link><pubDate>Sat, 27 Jul 2024 18:08:49 +0900</pubDate><guid>https://hack-le.com/zohomail/</guid><description>&lt;p&gt;自分は独自ドメインのメールについては、受信はCloudflareのEメールルーティング + Gmail、送信はAmazon SESのSMTP認証を使うという、ニッチなドケチ構成をしている。&lt;/p&gt;&#10;&lt;p&gt;/amazon-ses-cloudflare-email-routing-gmail/&#10;ドケチ構成&lt;/p&gt;&#10;&lt;p&gt;まぁ正直一人で使う分にはこれでも不便はないんだけれど、Gmailに寄りかかっているのが残念なところではあるし、またAmazon SES本来の使い方でもないため、やはりコストを払ってでもちゃんとメールサービスとの契約を結ぶべきかなぁ、などと思っている。あとうちのサイト的なことを言えば、&lt;a class="link" href="https://hack-le.com/google/" &gt;脱Googleの試み&lt;/a&gt;の一環という意味もある。&lt;/p&gt;&#10;&lt;h2 id="なぜzohomailか"&gt;なぜZohomailか&#10;&lt;/h2&gt;&lt;h3 id="国内サービスあれこれ"&gt;国内サービスあれこれ&#10;&lt;/h3&gt;&lt;p&gt;メールサーバというのは探し始めてみると滅茶苦茶色々ある。個人および個人事業主、零細企業向けのコスト最優先で考えると、国内ならば以下が思い浮かぶ。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;サービス&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;価格(2024年7月時点)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;備考&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://rs.sakura.ad.jp/mail/" target="_blank" rel="noopener"&#10; &gt;さくらのメールボックス&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;88〜110円/月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;激安。NSをさくらに向けないといけない&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://www.conoha.jp/mailserver/#price" target="_blank" rel="noopener"&#10; &gt;ConoHa: メールサーバー&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;605円/月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ML非対応、Webメールなし / マルチドメイン、マルチアカウント / ただしGMO&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://www.kagoya.jp/kir/mail/shared/" target="_blank" rel="noopener"&#10; &gt;KAGOYA 共用タイプ&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;440円/月(年間プラン)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ドメイン1個&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;まぁ他にもあるんだけれど、自分が選ぶならこの中からだろうなぁと思う。で、&lt;strong&gt;一つ選ぶならちょっと高いけどマルチドメインまでできるConoHaかな&lt;/strong&gt;、と。Webメールとかはいらんし。コストだけなら激安さくらも大いにありなんだけど、NSをさくらに向けるとかいう重大な制約があるのはちょっと……。でもこの安さはハマれば強いよなというか、マジでなんでこんなに安いの？&lt;/p&gt;&#10;&lt;p&gt;VPSで自前構築&lt;/p&gt;&#10;&lt;p&gt;VPSでサーバ構築する選択肢がないぞと思われる人がいるのかいないのかわかりませんが、それはもうそれが趣味の人向けです……もうそんな時代じゃないのです。まぁ昔は僕もそれが趣味だと思えた時期もあったがさすがにもうちょっとつらい……。&lt;/p&gt;&#10;&lt;p&gt;まぁどこも安さという観点では申し分ないし、悩んでいる間にさっさとConoHaのメールサーバを契約してもよかったんだが、せっかくだから、もうちょっと海外サービス含めて他にも目を向けたいと思った。&lt;/p&gt;&#10;&lt;h3 id="海外サービスあれこれ"&gt;海外サービスあれこれ&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;サービス&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;価格(2024年7月時点)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;備考&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://www.zoho.com/jp/mail/zohomail-pricing.html" target="_blank" rel="noopener"&#10; &gt;Zoho Mail&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;無料プランあり / 120円/ユーザ・月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SMTPは有料 / Webのみ5ユーザまでなら無料可&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://proton.me/pricing" target="_blank" rel="noopener"&#10; &gt;Proton Pricing Plans&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10ユーロ/月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;アドレス15、ドメイン3まで&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://www.fastmail.com/pricing/jp/" target="_blank" rel="noopener"&#10; &gt;Fastmail&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;775円/ユーザ・月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ストレージ60GB付&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://support.apple.com/ja-jp/108047" target="_blank" rel="noopener"&#10; &gt;iCloud+&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;130円/月&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;iCloudにメールルーティング&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;まず最初に変わり種のiCloud+について触れると、iCloud+には密かに独自ドメインのメールアドレスを使えるという機能がある。実際はiCloudに飛ばすメールルーティングのようだが、Appleユーザの個人事業主ならば必要十分とも思われ、真面目に選択肢に入ると思う。&lt;/p&gt;&#10;&lt;p&gt;他は少し価格が高めに見えるが、全体的に言えることは、コラボレーション機能がある程度充実している、ということだろう。なのでGoogle WorkspaceとかMS 365の系統という感じか。そっちのほうが時流なのかねぇ。なのでユーザあたりで課金が発生するわけだ。Proton Mailは定額なので、使いたい機能があるならばけっこうお得感があるかもしれない。逆に言うと、それらの機能を使わないのであれば、無駄金かもね。&lt;/p&gt;&#10;&lt;p&gt;ただそうした事情を鑑みても、Zoho Mailのユーザひとりあたり120円/月は価格面においてなお訴求力がある。ユーザ3人以下ならカゴヤより安い。ってか使い方次第では無料もいけるか、という勢い。なので興味がわいた。&lt;/p&gt;&#10;&lt;h3 id="zohomailの無料プランがすごい"&gt;Zohomailの無料プランがすごい&#10;&lt;/h3&gt;&lt;p&gt;Zohomailの無料プランはかなり気前が良い。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;永久無料プラン&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;最大5ユーザー・5 GB/ユーザー・添付ファイルサイズ上限：25 MB。&lt;/li&gt;&#10;&lt;li&gt;Webアクセスと無料モバイルアプリ*。&lt;/li&gt;&#10;&lt;li&gt;単一ドメインのメールホスティング。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://www.zoho.com/jp/mail/zohomail-pricing.html" target="_blank" rel="noopener"&#10; &gt;Zoho Mail&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;単一ドメインのメールホスティングとはなんのこっちゃと思ったが、リンクしたらフツーに「あなたのドメインを入力」とあったので、どうやら自分のドメインを使えるらしい。5ユーザまで、Webメールのみという制約はあるが、これくらいの制約ならメールが主流でなければ全然受け入れられそう。SMTPなしは引っかかるケースもありそうだが、逆に言うとそこさえクリアできれば。&lt;/p&gt;&#10;&lt;p&gt;実際使ってみた人もいる模様。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://zenn.dev/wake/articles/your-own-domain-mail-address-for-free#%E7%B5%90%E8%AB%96" target="_blank" rel="noopener"&#10; &gt;独自ドメインのメアドを無料で作るならZoho Mailがおすすめ&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;サーバー借りようか、AmazonSESで無理やり構築しようか、と模索していたので非常にありがたかったです。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://zenn.dev/wake/articles/your-own-domain-mail-address-for-free#%E7%B5%90%E8%AB%96" target="_blank" rel="noopener"&#10; &gt;独自ドメインのメアドを無料で作るならZoho Mailがおすすめ&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;やっぱりみんな似たようなこと考えるんだなぁ笑&lt;/p&gt;&#10;&lt;p&gt;まぁ僕はもうAmazon SESで無理矢理構築してしまったわけだが……。あまり健全な使い方とは言い難いので、Zohomail良さそうなら乗り換えも検討したい。&lt;/p&gt;&#10;&lt;h2 id="まずはフリーのメールアドレスで使い始めた"&gt;まずはフリーのメールアドレスで使い始めた&#10;&lt;/h2&gt;&lt;p&gt;まぁ先ず使って見ないことにはなんとも言えないよなぁと思って、ひとまず@zohomail.jpのアカウントを取得して試し始めた。とりあえず受信ボックスは広告もなく見やすい。そしてタスク管理ツールが付属している。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/07/c20ed525fd818189e4a52980af812508-700x362.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;非常にシンプルな機能だが、「そうそうこういうのでいいんだよ、こういうので」みたいな感じもする。NotionやらTrelloやらはガチ過ぎるんだよという人はけっこう多かろうし。割と気が利いた機能かもしれない。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;無料で使えるメールアドレスという観点では、脱Googleにも良い&lt;/strong&gt;と思った。特にgmail.comを使っているケースであれば、別に独自ドメインに対するこだわりもないだろうし。その場合はProton MailとかFastMailとかの無料プランでもいいのかもしれないが。まぁGmailのような強烈な迷惑メールフィルタは恐らく期待できないだろうし、フツーに使っていたら迷惑メールめっちゃくるんだろうなぁという気はする。&lt;/p&gt;&#10;&lt;p&gt;あと&lt;strong&gt;SMTPが使えない=メーラで使えないなので、そこはちょっと不便なのも確か&lt;/strong&gt;。まぁ金払えばいいんだが。&lt;/p&gt;&#10;&lt;h2 id="推奨条件"&gt;推奨条件&#10;&lt;/h2&gt;&lt;p&gt;まぁとにかくこれから色々使って見ようといったところだが、特に推奨されるケースとしては以下があるのかなと思った。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;gmail.comを使いたくない&lt;/li&gt;&#10;&lt;li&gt;独自ドメインで無料枠の範囲でおさまる&#10;&lt;ul&gt;&#10;&lt;li&gt;主な制約としてはWeb+アプリだけでOK（SMTPいらない）、5ユーザ以下か&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;SMTP送信がほしいとか、ユーザがたくさんとかの場合は、課金コースにいく必要があるが、条件に応じてiCloud+やConoHaなどの競合と比較していくことになるだろう。ユーザ単位で課金されるので、人数多かったらそりゃConoHaが安いし。あと個人的には、どうせお金払うなら日本企業のサービスであるConoHaにしたい気持ちはないでもないが……まぁでも結局はコストかな。メールの送受信がきちんとできさえすれば、後はまぁどこでも……。&lt;/p&gt;&#10;&lt;p&gt;まぁメールサーバの引っ越しは面倒くさいけど、ちゃんとやればちゃんとできることだから、必要があれば引っ越せばよい。やりたくない作業なのは確かだけどね……。&lt;/p&gt;&#10;</description></item><item><title>配信メールのサブドメイン事情の調査</title><link>https://hack-le.com/mail-subdomain/</link><pubDate>Mon, 22 Jul 2024 14:15:31 +0900</pubDate><guid>https://hack-le.com/mail-subdomain/</guid><description>&lt;p&gt;日々届く配信メールのドメインを見て、サブドメインを使っているのかとかを観測した。&lt;/p&gt;&#10;&lt;h2 id="目的"&gt;目的&#10;&lt;/h2&gt;&lt;p&gt;サービスの配信メールで、ベストプラクティスは用途ごとのサブドメインを作ることだ、と見た。たしかにレピュテーションのリスクなんかを考えると、トランザクションメールとマーケティングメールで切り分けておいたほうがよさそうなのはわかる。&lt;/p&gt;&#10;&lt;p&gt;でも実際サブドメインで切り分けてる印象ないけどなぁ、それぞれのサブドメイン管理しないといけないし、実際みんなどうしてるんだろう、と思って、メールボックスの受信箱を開けて調べてみた。&lt;/p&gt;&#10;&lt;p&gt;目的はあくまでサブドメイン切り分けをみんな実際やってるのかの肌感覚を知ることで、網羅したり統計を出したりするのが目的ではない。なので、2024年7月現在、たまたま届いた雑多なメールについて、特に意図もなく確認した。&lt;/p&gt;&#10;&lt;h2 id="it系"&gt;IT系&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Amazon&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;配送に関する連絡 / アソシエイトプログラムの報酬&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;amazon.co.jp&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AWS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;サポートセンターとのやりとり&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;amazon.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cloudflare&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メール認証の通知&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;notify.cloudflare.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Elementor&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;user-mail.elementor.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Google&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GCPの請求書 / AdSenseポリシー違反レポート&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;google.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Miro&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;アップデートの通知&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;updates.miro.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;X(Twitter)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;フォロー新着&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;twitter.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Wordfence&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガっぽいの&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;wordfence.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;カラフルボックス&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;colorfulbox.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Xがtwitter.comからきてて笑った。&lt;/p&gt;&#10;&lt;h2 id="ほか"&gt;ほか&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;au PAY&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;ご利用のお知らせ&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;wallet.auone.jp&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;au PAYカード&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;認証コードの発行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;mail-jcn.dnp-cdms.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CNET Japan&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;japan.cnet.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Express予約&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;セール情報&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;expy.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ITmedia / TechTargetジャパン&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;noreply.itmedia.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;J:COM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;jcom.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JAL Pay&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;会員規約の改定&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;jalmail.jal.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Joshin Web&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;joshin.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;moppy&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;moppy.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PayPay銀行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;cc.paypay-bank.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pontaナビ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ponta.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;アイネット証券&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;inet-sec.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;アメブロ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ameba.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;カドコミ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;作品更新のお知らせ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;comic-walker.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ぐるなび&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;gnavi.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;佐川急便&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;お届け連絡&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ds.sagawa-exp.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ジャストマイショップ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;商品情報&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;mag.justmyshop.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ソースネクスト&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;商品情報&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;sourcenext.info&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;東京電力エナジーパートナー(TEPCO)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TEPCOお問い合わせ返信&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;tepco.zendesk.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;日経BPメール&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;nikkeibp.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ベースフード&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マーケティング&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;basefood.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マガジンポケット&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;アカウント作成&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;magazinepocket.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;マネーフォワード会社設立&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガっぽいの&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;moneyforward.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;楽天銀行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メルマガ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;mail.rakuten-bank.co.jp&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;ITmediaがnoreplyをサブドメインにしているのちょっと笑った。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;けっこうルートのドメインそのまんま使ってメール配信している会社が多かった。用途で切り分けしているところもあるけど少数派っぽい。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、「サブドメイン使ってないところ多いと思うけどなぁ」という肌感覚はやっぱりそうかなと思う。また切り分けているところも、用途というよりは部署というか社内事情っぽいのもあり。&lt;/p&gt;&#10;&lt;p&gt;まぁ他の人がやってるとかやってないとかで決めるのも正しくはないけれど、実態としてはこんな感じなので、ちゃんとやるなら切り分けるかぁ、くらいの感覚かな。&lt;/p&gt;&#10;</description></item><item><title>あまり印刷しない人のプリンタ選び</title><link>https://hack-le.com/select-printer/</link><pubDate>Fri, 12 Jul 2024 19:44:32 +0900</pubDate><guid>https://hack-le.com/select-printer/</guid><description>&lt;p&gt;長らくプリンタ不要派だったのだが、電子帳簿保存法における優良な電子帳簿の要件としてプリンタの設置があったため、渋々購入することにした。まぁネットプリントは手間といえば手間ではあるし、今後印刷が必要になる機会はちょびちょびあるだろうとは思うものの、DX化を強く意識しているはずの電子帳簿保存法に対応するために、プリンタを持たなかった自分がプリンタを持つ羽目になるのは大いなる矛盾だと思う。&lt;/p&gt;&#10;&lt;h2 id="ユースケースから要件を考える"&gt;ユースケースから要件を考える&#10;&lt;/h2&gt;&lt;p&gt;とまぁいきなり愚痴から入ってしまったが、愚痴ったところでどうにかなるわけではないので、ひとまずプリンタを購入することにした。まず自分のユースケースを整理する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;基本的に電子帳簿保存法に対応するためで、普段使いはあまりない&lt;/li&gt;&#10;&lt;li&gt;行政絡みの文書で必要になることがたまにあるかも&lt;/li&gt;&#10;&lt;li&gt;まぁせっかくあるんだったら業務上使うことはあるかも&lt;/li&gt;&#10;&lt;li&gt;Mac使い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;法令対応として割り切るなら「一番安いやつをくれ」で置物にするでもいいかもしれないんだが、まぁせっかくあるのだから多少は使うことも考えたい。この手のやつは使わないと壊れやすいってのもあるし。とはいえ、頻度としては月に1回使う機会があるかないかくらいだろう。&lt;/p&gt;&#10;&lt;p&gt;そうしたことを考えると、以下の要件が適当だろうか。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;インク交換にかかるランニングコストよりも初期費用の安さのほうが有り難い&lt;/li&gt;&#10;&lt;li&gt;メンテナンスは楽なほうがよい&lt;/li&gt;&#10;&lt;li&gt;給紙方法とか両面とかADF（自動紙送り）コピーとかはどうでもいい&lt;/li&gt;&#10;&lt;li&gt;あまり使わないのでどうでもいい置き場におきたい（無線LAN対応）&lt;/li&gt;&#10;&lt;li&gt;Macでも不自由なく使えると望ましい（Windowsマシンもあるので必須ではない）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;以上を念頭にものを選んでいった。&lt;/p&gt;&#10;&lt;h2 id="選ぶまでのあれこれ"&gt;選ぶまでのあれこれ&#10;&lt;/h2&gt;&lt;p&gt;結論を先に書くとHP Envy 7221にしたんだが、その過程をつらつらと書いていく。&lt;/p&gt;&#10;&lt;h3 id="レーザープリンタよりインクジェットプリンタ"&gt;レーザープリンタよりインクジェットプリンタ&#10;&lt;/h3&gt;&lt;p&gt;まずランニングコストよりも初期費用を重視するところから、レーザープリンタよりもインクジェットプリンタが優先される。レーザープリンタもモノクロはけっこう安いんだが、残念ながら電帳法ではカラーの書類はカラーで印刷できることが要件になっていたので、今回は対象外。&lt;/p&gt;&#10;&lt;p&gt;ちなみに元印刷屋で現役の同人屋でもある姉は、印刷にはお拘りがあるのだが、ブラザーのレーザプリンタを使っていた。姉曰くブラザー信者であるらしい。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14908&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;既に後継機が出ているようだ。思ったよりも安い。実用性を考えるならモノクロのレーザープリンタはかなり良い仕事をしてくれそうである。&lt;/p&gt;&#10;&lt;h3 id="1万円前後で利便性の高いヤツ"&gt;1万円前後で利便性の高いヤツ&#10;&lt;/h3&gt;&lt;p&gt;まぁ今回インクジェットプリンタで、1万円前後の安くて使い勝手が良さそうなやつを探すことにする。印刷できればいい程度なので、機能が豊富な高いヤツを選ぶ必要はない。ブランドは手堅くCanon、HP、Brother、EPSONあたりから選べばいいだろう。正直この価格帯だと、エントリーモデルだしどれも性能的にはどれも大差なさそうだ。&lt;/p&gt;&#10;&lt;p&gt;で、色々見て回って、数時間ほど無駄に悩んでしまったのだが、HPが良さそうだった。&lt;/p&gt;&#10;&lt;p&gt;理由としては、&lt;strong&gt;HPはヘッドがインク側についているため、プリンタにおいて壊れやすい部位の一つを頻繁に交換できるところは、たまにしか使わない自分にとってはメリットが大きいように思えた&lt;/strong&gt;。ただし、ヘッドがついている分インクはちょっと高めのようだ。&lt;/p&gt;&#10;&lt;p&gt;まぁでも前述のとおり頻繁に印刷しない想定なので、メンテナンスが楽そうなことを評価した。&lt;/p&gt;&#10;&lt;p&gt;あとドライバが気になるところだが、最近のプリンタはMacにも対応しているものの、それ以前に、&lt;strong&gt;PCなし、スマホのみでWi-fi経由でセットアップできるようだった&lt;/strong&gt;。これは非常に素晴らしい。&lt;strong&gt;Wi-fi対応なのでどこでも置けるし、スマホ経由なのでPCを選ばない&lt;/strong&gt;。なんならLinuxでも使える。Dropboxなどのクラウドサービスとの連携もできるようだ。いいね。まぁこのへんはHPに限らず多分どこのメーカも対応してるんじゃないかな。多分。いい時代だ。&lt;/p&gt;&#10;&lt;h3 id="決め手はセール価格"&gt;決め手はセール価格&#10;&lt;/h3&gt;&lt;p&gt;ということでHPの1万くらいの安いやつでということだが、結局Envy Inspire 7221（2022年モデル）にした。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14909&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;HPのブランドにはPhotosmartもあり、そちらのほうがメジャーなのか互換インクも広く流通している（Envy Inspire 7221は純正かリサイクル品しかなさそうだった）。実際Photosmartでも別に良かった。別に良かったが何故Envyにしたかと言えば、単純にセール価格で直近最安値だったからだ。PhotosmartがセールしてたらPhotosmart買ったと思う。正直どうでもいいなんでもいい。&lt;/p&gt;&#10;&lt;h2 id="ポチりました"&gt;ポチりました&#10;&lt;/h2&gt;&lt;p&gt;ということで、HP Envy Inspire 7221をポチったのだった。本来であれば不要なものなので、購入したのは渋々だったものの、なんだかんだでデジタル機器が届くこと自体は楽しみでもある。使い始めたらまた記事を書く。&lt;/p&gt;&#10;&lt;p&gt;（2025-11-13追記：一年ほど使ったが、トラブルが多く後悔している。オススメしない）&lt;/p&gt;&#10;</description></item><item><title>ブラインドタッチは北斗の拳のタイピングゲームで覚えたミレニアル世代</title><link>https://hack-le.com/%E3%83%96%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%89%E3%82%BF%E3%83%83%E3%83%81%E3%81%AF%E5%8C%97%E6%96%97%E3%81%AE%E6%8B%B3%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0/</link><pubDate>Thu, 23 May 2024 17:46:44 +0900</pubDate><guid>https://hack-le.com/%E3%83%96%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%89%E3%82%BF%E3%83%83%E3%83%81%E3%81%AF%E5%8C%97%E6%96%97%E3%81%AE%E6%8B%B3%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0/</guid><description>&lt;p&gt;与太話。&lt;/p&gt;&#10;&lt;p&gt;こんなまとめが流れてきた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://togetter.com/li/2371105" target="_blank" rel="noopener"&#10; &gt;PTAで「パソコン使えないですスマホなら」というママの多さに戸惑う人に対して「これ逆で、パソコン使える世代ってほとんど30代後半～40代だけ」という声 - Togetter&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;記事にもあるように30代後半からは若干言い過ぎのような気はするし、同世代でもみんながPC使えていたわけでもないので、結局のところ何も言われずにPC使う民はいつの時代も少数派ということなのではないかと思ったが、とはいえ「PCを使わなくてもできること」は確かに増えているので、その分必要に迫られて使っていたに過ぎない人たちは一部使わなくなっているのかもしれない。&lt;/p&gt;&#10;&lt;h2 id="北斗の拳のタイピングゲームが娯楽の小学生だった"&gt;北斗の拳のタイピングゲームが娯楽の小学生だった&#10;&lt;/h2&gt;&lt;p&gt;90年代後半くらいの昔のことを思い出して見ると、家にPCがあっても必ずしもインターネットに繋がっていなかった。繋がっていてもテレホタイムなどの制約下で、jpegすらまともに表示されない（大きな画像を貼らないことがネチケットなどと言われていた）限られた帯域で、ゆうすけのホームページにようこそされながら掲示場やチャットなどといった限定的なコミュニケーションをできたに過ぎないわけで、&lt;strong&gt;別にあの時代だから特別PCをする理由があったわけではない&lt;/strong&gt;ように思う。たとえば今スマホで十分と言っている人たちが、あの時代に生まれていたらHTMLを手打ちで作ってキリ番報告していたかというと甚だ怪しい。&lt;/p&gt;&#10;&lt;p&gt;まぁとはいえ、今と比べると娯楽の少なかったあの時代に、たとえインターネットに繋がっておらずとも、家にPCがあったことは、少なくとも僕には大きな影響を与えた。実際、小学生の時家にあったWindows 95のPCはネットなしで大したアプリが入っていたわけではないものの、それでも僕には良いおもちゃだった（もちろん家族共用）。覚えているのは一太郎とマインスイーパ、そして北斗の拳のタイピングゲーム。&lt;strong&gt;なぜ北斗の拳のタイピングゲームが入っていたのかは本当にわからない&lt;/strong&gt;。ビデオカードがしょぼかったのか発色がめちゃくちゃで、グラフィックはサーモグラフィー状態だった。&lt;/p&gt;&#10;&lt;p&gt;しかし、インターネットのない世界の娯楽に飢えた小学生にとって、そんなゲームもゲームには違いなかった。そしてプレステとPCは別腹という謎理論から、ゲームの時間とは別にPCを多少ならいじっていても良いだろうという理屈を導きだし、マインスイーパにも飽きてきた頃、&lt;strong&gt;北斗の拳のタイピングゲームをひたすらやっていた&lt;/strong&gt;。僕は北斗の拳を読んだことはなかったが、名前くらいは知っていたし、そもそもストーリーなどどうでもよかった。顔色の悪いデブとともに「しょちゅうみまい」などの表示される文字列さえ視認できればそれでよかった。「しょちゅうみまい」と打ち込めば、スピーカーから「あたたたたたた」と奇声が流れ、肌色の悪いデブが死ぬ。それだけわかれば十分だった。これが小学生の僕の娯楽だった。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;僕はボスを倒すためにブラインドタッチを習得した&lt;/strong&gt;。確か最終的にサザンクロスまでは進むことはできたのと思う。たしか、シンに勝てずに止まった……と思う、多分。そしてその次がラストだったはずで、恐らくラオウがいたのではないかと思うが、その面すら拝むことはなかった。まぁ記憶なので曖昧だし、正直どうでもいい。本当にどうでもいい。今なら全クリできると思うが、特にしたいとは思わない。&lt;/p&gt;&#10;&lt;p&gt;あのゲームが名作だったのかクソゲーだったのかはわからないが、いずれにせよ、普通に考えて子供が夢中になるようなゲームではなかった。実際、たとえ僕と同様にあの時代のあの時期に生まれた小学生を並べても、&lt;strong&gt;夢中になって「しょちゅうみまい」と打ち込むためにブラインドタッチまで覚える子は少数派であろう&lt;/strong&gt;とも思う。とどのつまり、&lt;strong&gt;僕にはPCオタクになる素養があった&lt;/strong&gt;のだと言える。恐らく、僕は今の時代の子供だったとしても、PCを欲しがったものと思う。&lt;/p&gt;&#10;&lt;h2 id="制約が少年を夢中にさせた"&gt;制約が少年を夢中にさせた&#10;&lt;/h2&gt;&lt;p&gt;一方で、&lt;strong&gt;僕があのゲームに夢中になったこと自体は、他に娯楽がないという制約条件下であったためということも否定できない&lt;/strong&gt;。もし今のようにソシャゲが出来たら、そちらに夢中になっていたかもしれない。少なくとも、しょちゅうみまいと素早くうちこんで気色の悪いデブを打ち倒すことが最高の娯楽であった可能性は著しく低い。すると、果たして僕はブラインドタッチを小学生時分で覚えられたかどうかもわからない、ということになるが、案外SNSでレスバするために覚えたかもしれないし、それはわからない。何かしらのために覚えたような気はする。&lt;/p&gt;&#10;&lt;p&gt;まぁ何を言いたいかといえば、 &lt;strong&gt;「制約」が人に苦労を惜しまなくさせる側面は確かにある&lt;/strong&gt;、ということだ。僕の場合は北斗の拳のタイピングゲームであったが、人によっては創作した作品を公開するためにHTMLを覚えたであろうし、音楽のためにサウンドカードや周辺機器の知識をつけたであろう。今ならばスマホ一台で完結することでも、あの時代にはPCのみならずその周辺となる知識が多く必要であった。&lt;/p&gt;&#10;&lt;h2 id="そんなに違うかねぇ"&gt;そんなに違うかねぇ&#10;&lt;/h2&gt;&lt;p&gt;なので、&lt;strong&gt;確かに「あの時代だからPCを使った」という層も一定数いた&lt;/strong&gt;だろう。その層が大きかったのか小さかったのかは、よくわからない。iTunesにiPodを繋いで音楽を取り込んだり、SkypeでチャットするためだけにPCを使っていた、という人は、今はもうPCを使っていないかもしれない。そう考えるとそれなりにいたかもしれない。&lt;/p&gt;&#10;&lt;p&gt;PC自体の普及率は8割を超えているらしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://news.yahoo.co.jp/expert/articles/075aa8eb519c53a218e898fec762a113595b973e" target="_blank" rel="noopener"&#10; &gt;パソコンの普及率の長期推移をさぐる(2022年公開版)（不破雷蔵） - エキスパート - Yahoo!ニュース&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;しかし使っていない人もそれなりにいる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://news.yahoo.co.jp/expert/articles/c479bbcc5e0e895f7589cd264c2cd1e9301a8b31" target="_blank" rel="noopener"&#10; &gt;10代の35.5％は「自宅にパソコンはあるけど使っていない」（不破雷蔵） - エキスパート - Yahoo!ニュース&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この35.5%のうち、昔であれば使った層はそれなりにいたかもしれない。ただそうした層がPCでやっていたことなど大したことではなかったと思うし、そうした層が離れたところで実務上はさして影響もないような気はするが、そうでもないのだろうか。まぁ実際、メールやオフィスソフトくらいは扱えます、と「マウスってなんですか？」の差は案外大きいのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;しかし最近高校生になった甥を見ていると、中学校でChromebookを配布されていたようだし、義務教育で使っている以上、さすがにクリックって何？レベルの人はいない気がする。メールアドレスはなんだかんだでサービスのアカウント登録上必須だったりするし、受信のためgmailくらいは使ってるんじゃないか。まぁ送信は苦手かもしれないし、ましてメールクライアントでSenderを変えろと言われたらキョトンとする人は多いと思う。というかこれはヘタすると最近のエンジニアもできなかったりする（良いとこのエンジニアはメール使わない族もいる……）。&lt;/p&gt;&#10;&lt;p&gt;何を言いたいかと言うと、PCの需要はたしかにここ十数年で変わっているし、プライベートでどれくらいPCを使っているかは傾向の変化があるかもしれないものの、実務レベルでは今も昔も必要があればしっかりやっているはずだし、&lt;strong&gt;世代による本質的な差は大きくないのではないかなぁ&lt;/strong&gt;……と思っているものの、実際のところはどうなんだろうね。&lt;/p&gt;&#10;&lt;p&gt;まぁPCの普及率が9割を超えないのは悲しいし、せっかくあるのに使っていない人がいることも寂しい。&lt;strong&gt;すべての家に自宅サーバが設置される未来が来てほしいと思う&lt;/strong&gt;。こない。&lt;/p&gt;&#10;</description></item><item><title>Amazon SES + Cloudflare Email Routing + Gmailで安上がりな独自ドメインのメール送受信</title><link>https://hack-le.com/amazon-ses-cloudflare-email-routing-gmail/</link><pubDate>Fri, 17 May 2024 19:01:27 +0900</pubDate><guid>https://hack-le.com/amazon-ses-cloudflare-email-routing-gmail/</guid><description>&lt;p&gt;Webサービスとかやると、ドメインごとにメールの送受信どうするかな問題が生じる。これの構成は無数に考えられるので、何が最適解かは状況によるだろうが、とりあえず「始めたばかりだしとにかく安上がりでさらっと済ませたい」という要求をかなえるため、送信はAmazon SES、受信はCloudflareのEmail Routing + Gmail(個人用)という構成を組んだ。今のところは問題なさげに動いている。&lt;/p&gt;&#10;&lt;p&gt;前提として、ドメインはCloudflareで管理する。&lt;/p&gt;&#10;&lt;p&gt;（追記 2024-05-19）この構成だと設定した独自ドメイン同士のメールでエラーが発生した。設定次第でなおせるんだろうか……&lt;/p&gt;&#10;&lt;h2 id="全体の構成"&gt;全体の構成&#10;&lt;/h2&gt;&lt;p&gt;全体の構成を図示しておく。&lt;/p&gt;&#10;&lt;p&gt;「自分」と「誰かさん」の間でメールを送受信する。&lt;strong&gt;送信経路を実線、受信経路を破線&lt;/strong&gt;とする。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD&#10;jibun(自分)&#10;dareka(誰かさん)&#10;ses(Amazon SES)&#10;jibun --&gt;|送信: SMTP| ses --&gt; recv --&gt; dareka&#10;ses ---|情報登録| dns&#10;recv ---|参照する| dns&#10;cf(Cloudflare)&#10;gmail(Gmail)&#10;dareka -.-&gt; cf -.-&gt;|Email Routing| gmail -.-&gt;|受信| jibun&lt;/pre&gt;&lt;p&gt;普通にメールサービス使えばいいじゃないか説は有力というかそうすべきなんだろうなぁと思いつつ、そうは言ってもメールサービスは固定費もそこそこかかるし、システム的なメール配信まで考えるとAmazon SESは使えておきたいと思った。SES部分はResendとかでもいい。というかResendで似たようなことをやっている人がいた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://zenn.dev/the_exile/articles/cloudflare-gmail-resend" target="_blank" rel="noopener"&#10; &gt;Cloudflare + Gmail + Resendで無料法人メールアドレスを作る&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;構成一緒だね。皆考えることは同じなのか……。&lt;/p&gt;&#10;&lt;h2 id="受信経路"&gt;受信経路&#10;&lt;/h2&gt;&lt;p&gt;まず先に受信から始める。構成部分は以下。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD&#10;jibun(自分)&#10;dareka(誰かさん)&#10;cf(Cloudflare)&#10;gmail(Gmail)&#10;dareka -.-&gt; cf -.-&gt;|Email Routing| gmail -.-&gt;|受信| jibun&lt;/pre&gt;&lt;p&gt;これはCloudflareのEmail RoutingとGmailを利用する。まぁつまり、&lt;strong&gt;CloudflareのEmail Routing&lt;/strong&gt;の&lt;strong&gt;機能でメールをGmailに飛ばす&lt;/strong&gt;というものだ。機能については公式ページは以下。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.cloudflare.com/ja-jp/developer-platform/email-routing/" target="_blank" rel="noopener"&#10; &gt;Email Routing | アドレス作成とメール転送が簡単に | Cloudflare&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;無料で使える。よい。&lt;/p&gt;&#10;&lt;p&gt;Gmailについては転送先のアドレスとして使えれば良いので別にGmailでなくても良い。良いのだが、メールサービスによってはうまくいかない可能性もあるだろう（送信のところでこれについては触れる）。&lt;/p&gt;&#10;&lt;p&gt;さて、この受信についてはやることはあまり多くない。Cloudflareのダッシュボードでドメインを選択し、Email Routingを始め、アドレスと転送先のアドレスを指定するだけでよい。簡単過ぎてビビる。&lt;/p&gt;&#10;&lt;h2 id="送信経路"&gt;送信経路&#10;&lt;/h2&gt;&lt;p&gt;送信のほうは受信と違ってやや手間がかかる。メール送信については運用する側も考えることが多い。&lt;/p&gt;&#10;&lt;h3 id="dkimspfdmarcを知る"&gt;DKIM/SPF/DMARCを知る&#10;&lt;/h3&gt;&lt;p&gt;具体的にはDKIM/SPF/DMARCの仕組みを定性的に理解していなくてはいけない。これについては下記に記事を書いたので詳細については参考にされたい。&lt;/p&gt;&#10;&lt;p&gt;/dkim-spf-dmarc&#10;ややこしい&lt;/p&gt;&#10;&lt;p&gt;ざっくり言うと、&lt;strong&gt;DKIMはメールが改竄されてないことを保証する仕組み、SPFは送信者が信頼できることを保証する仕組み、DMARCはDKIMとSPFをどれくらい厳格に適用し、NGだったらどう対応するのかとかを標準化したポリシー&lt;/strong&gt;である。で、このためには送信側と受信側の両方できっちり対応している必要がある。&lt;/p&gt;&#10;&lt;p&gt;先の受信経路のところで、Gmailじゃなくてもいいけどちゃんと動くかはわからん、と書いたのは、メールサービスがどれくらいちゃんと対応しているかわからんからだ。今回のように転送が入るとややこしくなると思うので、サービスによってはどうなるかわからん。またGmailを使っていても送信側次第では転送落ちるとかありそうな気もする。わからん。怖い。怖いけどとりあえず今のところは使えている。&lt;/p&gt;&#10;&lt;h3 id="sesの設定"&gt;SESの設定&#10;&lt;/h3&gt;&lt;p&gt;さて、以上を踏まえたうえで、送信経路について改めて見てみよう。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD&#10;jibun(自分)&#10;dareka(誰かさん)&#10;ses(Amazon SES)&#10;recv(受信側のサーバ)&#10;dns(DNSサーバ)&#10;jibun --&gt;|送信: SMTP| ses --&gt; recv --&gt; dareka&#10;ses -.-&gt;|情報登録| dns&#10;recv -.-&gt;|参照する| dns&lt;/pre&gt;&lt;p&gt;ポイントはDNSサーバである。DNSサーバに情報登録とあるが、これは何かと言うと、先に述べたDKIM/SPF/DMARCの対応である。&lt;strong&gt;DKIM/SPF/DMARCに必要な情報はDNSのレコードに登録する&lt;/strong&gt;のである。登録する情報の意味については先にあげた記事を参照。&lt;/p&gt;&#10;&lt;p&gt;実務的には、&lt;strong&gt;SESに「これ登録しろ」と言われるまま、Cloudflareのダッシュボードよりレコード登録をすればいい&lt;/strong&gt;。具体的な操作は、どうせいつか変わる操作よりも、多少面倒でもDKIM/SPF/DMARCはなんなのかをちゃんと理解するのが一番の近道だと思う。理解すれば何をどうすればいいかはわかる。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;SESではDKIM対応がドメイン検証も兼ねている&lt;/strong&gt;ようだ。送信元の登録はSPF対応である。また、DMARCについても書かれているのをそのまま使えばいい。一点注意として、MXレコードの数字は優先順位である（まぁそのまんま値に入れようとしたら怒られるので察しはつくと思うが）。&lt;/p&gt;&#10;&lt;p&gt;登録できれば、とりあえずまずAPIで送信確認するとよい。メーラ使うにはSMTPの設定が必要なので、まずAPIで送信確認するほうが楽。SESは最初サンドボックス環境だが、サンドボックスでは認証したメールアドレスしか使えないことに注意。なので、先に受信側の対応をしたわけだ。&lt;/p&gt;&#10;&lt;p&gt;なおメールのサンプルコードは以下（By ChatGPT）。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;boto3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;botocore.exceptions&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClientError&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# SESクライアントの作成&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ses_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ses&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ap-northeast-1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ご使用のリージョンに合わせて変更してください&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# メールのパラメータ&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sender@example.com&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# 送信者のメールアドレス&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;recipient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;recipient@example.com&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# 受信者のメールアドレス&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;subject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Hello from Amazon SES&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;body_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Hello,&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;This is a test email sent by Amazon SES using Boto3.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Send Email&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ses_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Destination&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ToAddresses&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;recipient&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Subject&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Body&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Text&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;body_text&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Email sent! Message ID:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;MessageId&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;ClientError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;An error occurred:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Error&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Message&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;boto3をインストールしているPCなら、送受信のメールアドレスだけ変えればそのまんま使える。こういうサンプルコード一瞬で出力してくれるだけでも有り難い。&lt;/p&gt;&#10;&lt;p&gt;送信できたら、次はSMTPで送れるかを確認する。SESのコンソールにSMTP設定があるのでそこから言われるままにやる……だとアレなんだが、俺たちのクラスメソッドさんに良い記事があるのでそれを参考にどうぞ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://dev.classmethod.jp/articles/configured-smtp-authentication-settings-for-ses/" target="_blank" rel="noopener"&#10; &gt;Amazon SES に SMTP認証設定を追加してメールクライアントから SMTPサーバとして利用してみた | DevelopersIO&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;設定方法はメーラによる。SMTPサーバのみ設定したアカウントを作成する必要があり（受信側がエラー出る）、やや特殊な設定となる。とりあえずMacの標準メールアプリでは設定できた。OutlookはPOPとかでやろうとしてもサインインできないと言われて登録できなかった。あんまり本意気でOutlook使ってないのでわからんが、イマドキのOutlookだとできないのかもしれない。Thunderbirdはできるんじゃないかな多分。&lt;/p&gt;&#10;&lt;h2 id="運用"&gt;運用&#10;&lt;/h2&gt;&lt;p&gt;書くほどでもないが。&lt;/p&gt;&#10;&lt;p&gt;注意点として、SMTPのパスワード再発行はできない。したがって、パスワード紛失時はユーザの作り直しになる（つまり削除と登録）。&lt;/p&gt;&#10;&lt;h3 id="登録"&gt;登録&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;Cloudflare&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;転送先の宛先の追加&lt;/li&gt;&#10;&lt;li&gt;Routingで宛先に送るアカウントの追加&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;SES&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;SMTP認証情報の追加（IAMユーザができる）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="削除"&gt;削除&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;Cloudflare&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;アカウントの削除&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;SES&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ユーザの削除&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;メールサービスは地味にそこそこの固定費がかかる。多少運用が面倒になってもいいから、とにかく安上がりで自由度があってすぐできることを目標にあれこれ検討した結果こうなった。これが最適解かはわからないけれど、とりあえずいいかなという感じ。そのうちに大きくなってきたらちゃんとメールサービスを使った方がいいかなと思う。&lt;/p&gt;&#10;</description></item><item><title>独自ドメインでメールするために、DKIM/SPF/DMARCのお勉強</title><link>https://hack-le.com/dkim-spf-dmarc/</link><pubDate>Sun, 05 May 2024 04:08:15 +0900</pubDate><guid>https://hack-le.com/dkim-spf-dmarc/</guid><description>&lt;p&gt;独自ドメインでメールをやりたく、メールサービスを選び始めた。さすがに自分でメールサーバをやる漢気はない。しかし、最近はGmailがやたら厳しくなったという話はXで聞いている。実際、Gmailだけ届かずにトラブルになったニュースもよく聞く。職業柄、メールが届かないみたいな体たらくをしてしまうとまずいのもあり、メールサービスはきちんと選びたい。&lt;/p&gt;&#10;&lt;p&gt;で、色々調べていたんだが、結論として、&lt;strong&gt;DKIM/SPF/DMARCの概念を定性的に理解し、やるべきことを把握しておかないと、メールサービスを選ぶこともできんぞ&lt;/strong&gt;ということがわかった。なので、お勉強。主にChatGPTを質問攻めにした。&lt;/p&gt;&#10;&lt;h2 id="dkimspfdmarcについてざっくり"&gt;DKIM/SPF/DMARCについてざっくり&#10;&lt;/h2&gt;&lt;p&gt;まずDKIM、SPF、DMARCについてどんなものかをそれぞれ述べたい。ざっくりいうと、これらは「&lt;strong&gt;そのメールが正規のメールであることをいかにして確認できるようにするか&lt;/strong&gt;」の仕組みである。なりすましとかじゃないよっていう。恐らくそういった仕組みは今までも各々のサービスでそれぞれ頑張っていたのではないかと思うが、&lt;strong&gt;仕組みとして標準化しましょう、ということだと理解している&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;この仕組みのために、&lt;strong&gt;DNSをフル活用することになる（これは次節で詳述）&lt;/strong&gt; 。&lt;/p&gt;&#10;&lt;h3 id="dkim-改竄されていないことを確認する"&gt;DKIM: 改竄されていないことを確認する&#10;&lt;/h3&gt;&lt;p&gt;DKIMは DomainKeys Identified Mail の略だ。&lt;strong&gt;特定のドメインから送信されたことを証明し、また内容が改竄されていないことを保証する仕組み&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;h3 id="spf-送信元が信頼できることを確認する"&gt;SPF: 送信元が信頼できることを確認する&#10;&lt;/h3&gt;&lt;p&gt;SPFは Sender Policy Framework の略だ。これは&lt;strong&gt;送信元が信頼できることを示すための仕組み&lt;/strong&gt;だ。具体的には、送信元と許可される情報をDNSのレコードに保持する。&lt;/p&gt;&#10;&lt;p&gt;転送とかあるとエラーが起きそうな気配濃厚だが実際起きるらしい。最初見た時、DKIMだけあれば十分ではないか？と思ったが、&lt;strong&gt;DKIMは「特定のドメインから送信された改竄されていないメール」であることしか保証しないため、その送信元があかんところでもPASSする可能性がある&lt;/strong&gt;。たとえばFromをいじって別のところからきたように見せかけたメールを見破る仕組みにはなっていない。そのため、送信元の信頼性確認する仕組みとしてSPFがある。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;基本的にはなりすまし（スプーフィング）を防ぐ機構&lt;/strong&gt;といえる。&lt;/p&gt;&#10;&lt;h3 id="dmarc-dkimとspfを実際にどう適用するかの検証ポリシー"&gt;DMARC: DKIMとSPFを実際にどう適用するかの検証ポリシー&#10;&lt;/h3&gt;&lt;p&gt;DMARCはDomain-based Message Authentication, Reporting and Conformanceの略だ。覚えられるか。名前で全部説明しようとするな。ラノベのタイトルじゃないんだぞ。&lt;/p&gt;&#10;&lt;p&gt;DKIMとSPFの設定は送信サーバと受信サーバの両方でしっかりと対応していないといけない。したがって、正規のメールであっても、その設定に瑕疵があると送受信に失敗する、ということが起きえる。なので、DKIM/SPFちゃんとしてないやつは全部ダメ！とは現実的にできない。&lt;/p&gt;&#10;&lt;p&gt;ということで、DKIMとSPFのそれぞれを使って、どれくらい厳格に適用するかを送信者/受信者でそれぞれ決めるポリシー。送信側の要望を加味したうえで、最終的に受信側が判断する、らしい。&lt;/p&gt;&#10;&lt;h2 id="もうちょっと技術的な詳細"&gt;もうちょっと技術的な詳細&#10;&lt;/h2&gt;&lt;p&gt;DKIM/SPF/DMARCを使ったざっくりの仕組みはここまでのとおりだ。が、わかったようなわからんようなという感じなので、もう少し技術的な詳細に踏み込んだほうが、理解に繋がるだろう。時間をかける価値はあるはずだ。というよりかけないとわからん。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;DKIMもSPFもDMARCも全体の流れは似ており、いずれも確認のための情報をDNSに保持するのがポイント&lt;/strong&gt;になる。したがって &lt;strong&gt;、運用者はDNSに情報を登録するという作業が必要になる&lt;/strong&gt;わけだ。ここでは、その作業の「何故」と「何」を理解できることを目指す。&lt;/p&gt;&#10;&lt;h3 id="dkimの仕組み"&gt;DKIMの仕組み&#10;&lt;/h3&gt;&lt;p&gt;DKIMは特定のドメインから送られたメールが改竄されていないことを確認する仕組みだと述べた。それは技術的にどのようにして実現されるかを説明する。&lt;/p&gt;&#10;&lt;p&gt;これは図示するのがわかりやすいと思う。送信クライアントが送ったメールが、送信サーバを通じて受信サーバにわたり、受信サーバで検証されるまでの流れを下図に示す。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD&#10;client(送信クライアント)&#10;subgraph 送信サーバ&#10;hash(ハッシュ化)&#10;crypto(秘密鍵で暗号化)&#10;end&#10;subgraph DNS&#10;record_public(公開鍵の情報)&#10;end&#10;subgraph 受信サーバ&#10;decode(公開鍵で復号)&#10;hash_recv(ハッシュ化)&#10;validate(元のハッシュ値と比較して検証)&#10;end&#10;client --&gt;|メールを送信| hash&#10;hash --&gt; crypto&#10;crypto --&gt; decode&#10;crypto -.- |公開鍵の情報を登録| record_public&#10;decode -.- |公開鍵の情報を取得| record_public&#10;decode --&gt; hash_recv&#10;hash_recv --&gt; validate&lt;/pre&gt;&lt;p&gt;この図を見ながら順番に説明する。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;送信クライアント→送信サーバ&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ヘッダ情報などを使って送信サーバでハッシュ値が計算される&lt;/li&gt;&#10;&lt;li&gt;ハッシュ値は秘密鍵で暗号化される&#10;&lt;ul&gt;&#10;&lt;li&gt;ペアとなる公開鍵の情報はDNSのレコードに保持される&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;送信サーバ→受信サーバ&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;DNSから公開鍵の情報を取得する&lt;/li&gt;&#10;&lt;li&gt;公開鍵でハッシュ値を復号する&lt;/li&gt;&#10;&lt;li&gt;メールの内容から送信サーバと同様にハッシュ値を計算する&lt;/li&gt;&#10;&lt;li&gt;復号したハッシュ値と比較検証して、改竄されていないことを確認する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;という流れだ。&lt;/p&gt;&#10;&lt;p&gt;実務的には、&lt;strong&gt;運用者は送信サーバの公開鍵の情報をDNSのレコードに登録する&lt;/strong&gt;、という作業が発生する。&lt;/p&gt;&#10;&lt;h3 id="spfの仕組みとその存在意義"&gt;SPFの仕組みとその存在意義&#10;&lt;/h3&gt;&lt;p&gt;SPFも流れはDKIMと同じような感じである。送信サーバはDNSに情報を置いといて受信サーバはそれを見に行く。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;SPFにおいては、受信サーバは、送信サーバの主張する送信元（Return-Pathとか）に基づいて、送信元のドメインにあるSPFレコードを参照する&lt;/strong&gt;。SPFレコードには、IPアドレスなどで、メールを送信できるサーバについての情報が書かれている。&lt;/p&gt;&#10;&lt;p&gt;その条件に合致するかを見て、以下のように検証する（By ChatGPT）。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;Pass&lt;/code&gt;: メールがSPFレコードで許可されたサーバから送信されました。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Fail&lt;/code&gt; (HardFail): メールがSPFレコードで許可されていないサーバから送信されました。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;SoftFail&lt;/code&gt;: メールが許可されていないサーバから送信された可能性があるが、受信側で穏やかに処理されるべきです。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Neutral&lt;/code&gt;: SPFレコードが特定の評価を行わない場合。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;None&lt;/code&gt;: SPFレコードが見つからない場合。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;PermError&lt;/code&gt; / &lt;code&gt;TempError&lt;/code&gt;: SPFレコードの解析に問題があった場合やDNSの問題など。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ここで言いたいことは、その細かな内容ではなく、&lt;strong&gt;検証結果として様々なものが用意されている&lt;/strong&gt;ということである。これはメール運用の現実の複雑さを示している。&lt;/p&gt;&#10;&lt;p&gt;実際、このような仕組みがあると、送信サーバを移転したり、転送メールなどをしたときに、大いに誤判定が起きることは想像に易い。&lt;/p&gt;&#10;&lt;p&gt;それでもSPFが必要な理由として、DKIMだけでは防げないなりすましについて考える。これについて、ChatGPTにケースを考えて貰った。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;考えられるシナリオは、攻撃者が正規のドメインを偽装してメールを送信するケースです。攻撃者が&lt;code&gt;example.com&lt;/code&gt;というドメインを偽装しようとしていると仮定します。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;DKIMの限界&lt;/strong&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;攻撃者が自分自身のドメイン（たとえば&lt;code&gt;malicious.com&lt;/code&gt;）を設定し、DKIMを適切に構成します。&lt;/li&gt;&#10;&lt;li&gt;攻撃者は&lt;code&gt;From&lt;/code&gt;ヘッダを偽り、&lt;code&gt;From: user@example.com&lt;/code&gt;と表示させますが、実際には&lt;code&gt;malicious.com&lt;/code&gt;のサーバからメールを送信します。&lt;/li&gt;&#10;&lt;li&gt;メールは&lt;code&gt;malicious.com&lt;/code&gt;のDKIM署名で正しく署名されており、DKIMの検証はパスしますが、このメールは&lt;code&gt;example.com&lt;/code&gt;から送信されたものではありません。&lt;/li&gt;&#10;&lt;li&gt;DKIMはメールが&lt;code&gt;malicious.com&lt;/code&gt;から正当に送信され、内容が改ざんされていないことを保証しますが、&lt;code&gt;example.com&lt;/code&gt;を偽装していることは検出できません。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;SPFの利点&lt;/strong&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;example.com&lt;/code&gt;のドメイン所有者は、自分たちのメール送信サーバのIPアドレスのみをSPFレコードで許可しています。&lt;/li&gt;&#10;&lt;li&gt;攻撃者が&lt;code&gt;malicious.com&lt;/code&gt;のサーバから&lt;code&gt;example.com&lt;/code&gt;を偽ってメールを送信すると、このメールは&lt;code&gt;example.com&lt;/code&gt;のSPFレコードにリストされているIPアドレスから送信されたものではないため、SPFチェックに失敗します。&lt;/li&gt;&#10;&lt;li&gt;受信サーバはSPFチェックが失敗したと判断し、メールが&lt;code&gt;example.com&lt;/code&gt;からの正規の送信ではないと検出します。その結果、このメールをスパムとして扱うか、警告をつけるなどの対応を取ります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;— ChatGPT&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;つまり、DKIMだけだと、 &lt;code&gt;malicious.com&lt;/code&gt; から正しくメールが送られていますね、なお返信先は &lt;code&gt;example.com&lt;/code&gt;です、という無能な状態になってしまうわけだ。まぁそれ自体は普通の運用システムでも考えられることではあるけれど、悪意をもったなりすましとの峻別は機械的には難しい。まぁ実際にはだいたい悪意があるものかどうかはわかりそうな気はするが、その悪意を見抜くプロセスを標準化するための仕組みが、DKIM/SPF/DMARCということであろう。&lt;/p&gt;&#10;&lt;h3 id="dmarcの仕組み"&gt;DMARCの仕組み&#10;&lt;/h3&gt;&lt;p&gt;DKIMとSPFはそれぞれ独立した機構であり、異なる目的をもっている。&lt;strong&gt;DMARCは、DKIMとSPFを組み合わせて、その整合性を評価し、その結果に基づいた処理方法を規定する&lt;/strong&gt;。つまりポリシーの策定とその実施の仕組みである。また、&lt;strong&gt;受信の認証結果についてレポートを送受信する&lt;/strong&gt;仕組みもある。&lt;/p&gt;&#10;&lt;p&gt;送信者は、DMARCの情報もDNSのレコードに保持する。たとえば、自分のドメインで送信されるメールに対して、どのように扱ってほしいか（&lt;code&gt;none&lt;/code&gt;（何も行わない）、&lt;code&gt;quarantine&lt;/code&gt;（隔離、例えばスパムフォルダへの移動）、&lt;code&gt;reject&lt;/code&gt;（拒否、メールを受け取らない）といった具体に）を設定できる。&lt;/p&gt;&#10;&lt;p&gt;具体例があるほうが良いと思ったので、ChatGPTにTXTレコードの具体例とその解説をしてもらった。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;_dmarc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;example&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;IN&lt;/span&gt; &lt;span class="nx"&gt;TXT&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;v=DMARC1; p=quarantine; pct=100; rua=mailto:report@example.com; ruf=mailto:forensic@example.com; sp=reject; adkim=r; aspf=r&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意味は以下（By ChatGPT）&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;v=DMARC1&lt;/strong&gt;: DMARCのバージョンを示します。これは必須タグで、DMARCのレコードであることを示しています。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;p=quarantine&lt;/strong&gt;: DMARCポリシーを指定します。この例では&lt;code&gt;quarantine&lt;/code&gt;を選択しています。これはDMARC検証に失敗したメールを隔離（例えばスパムフォルダに移動）するよう指示します。他のオプションには&lt;code&gt;none&lt;/code&gt;（何もしない）、&lt;code&gt;reject&lt;/code&gt;（メールを拒否）があります。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;pct=100&lt;/strong&gt;: ポリシーが適用されるメールの割合を指定します。ここでは100%のメールにポリシーが適用されることを意味します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;rua=mailto:report@example.com&lt;/strong&gt;: 集約されたDMARCレポートを送信するメールアドレスを指定します。これらのレポートには、ドメインがどの程度DMARC検証に適合しているかの統計情報が含まれます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ruf=mailto:forensic@example.com&lt;/strong&gt;: フォレンジックレポート（詳細な失敗レポート）を送信するメールアドレスを指定します。これは個々の失敗事例に関する詳細情報を提供します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;sp=reject&lt;/strong&gt;: サブドメインに対するポリシーを指定します。この例では、メインドメインとは異なるポリシー（ここでは&lt;code&gt;reject&lt;/code&gt;）がサブドメインに適用されています。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;adkim=r; aspf=r&lt;/strong&gt;: DKIMとSPFのアライメントモードを指定します。&lt;code&gt;r&lt;/code&gt;はリラックスモード（Relaxed）で、部分的な一致が許容されます。厳格モード（Strict）を使用する場合は&lt;code&gt;s&lt;/code&gt;を指定します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;受信者は送信者側の要求も加味しながら、最終的な決定をする。たとえば送信者側が &lt;code&gt;reject&lt;/code&gt; と設定していたとしても、ビジネス上の影響を加味して、受信側で何もしないことは可能だ。&lt;/p&gt;&#10;&lt;p&gt;ここまでのことからわかるように、DKIMにせよSPFにせよ、すべてのメールサーバがきちんと対応しないと検証はできない。しかしそれは現実として難しいだろう。したがって、合わないから即棄却というわけには現実としていかないわけだ。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;正直色々言いたいことはあるんだが、まぁGmailが大暴れしている以上勉強するしかあるまい。DNSの設定くらいならいいが、もうとてもとても、メールサーバを自前でやるのは無理だなぁ。&lt;/p&gt;&#10;&lt;p&gt;以下に本記事の内容をまとめる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;DKIMは送信メールが送信元ドメインから送られた改竄されていないメールであることを確認する仕組み&#10;&lt;ul&gt;&#10;&lt;li&gt;DNSには検証のための公開鍵の情報を登録する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;SPFは送信元が信頼できることを確認する仕組み&#10;&lt;ul&gt;&#10;&lt;li&gt;DNSには信頼できる送信元を登録する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;DMARCはDKIM/SPFを組み合わせて、実際にどれくらい厳格に処理するか決めたり、認証結果のレポートを出す仕組み&#10;&lt;ul&gt;&#10;&lt;li&gt;DNSには送信元ドメインのメールの取り扱い方や、レポートの送信先について登録する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;DKIM/SPF/DMARCで必要な情報はDNSのレコードに登録する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ChatGPT便利。ようやくあちこちの記事が読めるようになった。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;</description></item><item><title>M3 Mac miniは出ないかもしれないらしい</title><link>https://hack-le.com/m3-mac-mini-skip/</link><pubDate>Tue, 30 Apr 2024 02:35:41 +0900</pubDate><guid>https://hack-le.com/m3-mac-mini-skip/</guid><description>&lt;p&gt;我慢出来ずにM2 Pro Mac miniを衝動買いした僕に配慮して、AppleはM3のMac miniをスキップする可能性があるらしい。すまん、僕がM2 Pro Mac miniを買ったばかりに……。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ascii.jp/elem/000/004/195/4195431/" target="_blank" rel="noopener"&#10; &gt;ASCII.jp：アップル新型「Mac mini」M4チップ搭載で2024年末発売か&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁM3微妙だったのでいいかもしれないんだが、問題はM4で本当に出るんだろうな、ということだろうか（10年代のMac mini冷遇のトラウマ）。&lt;/p&gt;&#10;&lt;h2 id="m3は微妙だったので"&gt;M3は微妙だったので&#10;&lt;/h2&gt;&lt;p&gt;僕がM2 Pro Mac miniを購入したのは昨年の10月末で、M3を搭載したMacBook Proが発売されるほんの2,3日前のことだった。整備済み製品でCPUとメモリを盛ったM2 Pro Mac miniが出ているのを見て、衝動買いしてしまった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-mac-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac Miniをポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-mac-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12198_1789621271.webp" alt="M2 Pro Mac Miniをポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;愚かなことに、この時点でM3のMBPが発売されるとまことしやかに噂されていたことを知らなかった。ホクホクして記事を書いて公開したら、速攻でM3 MBP発売がTwitterのタイムラインに出てきて泡吹いた。まぁでもポチったものは仕方ないのでシコシコとセットアップをしていた。楽しかった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-night-m2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M3前夜（？）にM2 Pro Mac miniをいじる&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-night-m2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12857_1789621235.webp" alt="M3前夜（？）にM2 Pro Mac miniをいじる" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;ただ、その後M3 MBPの情報が出揃ったのを見て、色々と検討したところ、思っていたよりもかなり微妙な代物だったので、結論としてはM2 Pro Mac mini 整備済み製品の購入は悪くない選択であった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m2-pro-mac-mini-3-m3/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac mini 買ってから3ヶ月の使用感 M3待つよりM2の整備済みで良いかもね（特にPro狙いは）&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m2-pro-mac-mini-3-m3/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2024/02/883b0dac14f1f48262c115bced2e3b2a.webp" alt="M2 Pro Mac mini 買ってから3ヶ月の使用感 M3待つよりM2の整備済みで良いかもね（特にPro狙いは）" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;円安を続いているし、M3のMac mini待つくらいならさっさとM2の整備済み製品買っちゃえば？というのが僕の個人的な考えであった。&lt;/p&gt;&#10;&lt;h2 id="最近のmac-mini事情は悪くなかったが"&gt;最近のMac mini事情は悪くなかったが&#10;&lt;/h2&gt;&lt;p&gt;そんなわけだからM3のMac miniは出ないかもという記事を見たときにも、まぁ別にいいんじゃないの、とは思った。特にM3 ProはM2 Proと比較したとき限定的なアップグレード、っていうか一部スペックダウンしているところさえあったので、昨今の為替事情を思えば、たとえM3が出たとしても、整備済み製品でも良ければM2を選択するのも実際ありえそうな感じだ。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、一抹の不安がよぎるのは、「M4は出るんだろうな？」ということだ。Mac miniを10年以上愛好している人であれば、Mac mini 2012の後に続いた長い長い冬の時代を忘れてはいないだろう。実質スペックダウンで拡張性まで落ちたMac mini 2014だけでギルティなのに、さらにそのまま数年にわたり放置。というかデスクトップMacが全体的につらい状態で、一番つらかったのはMac Proユーザであろう。クックが絶対興味ない癖にリップサービスを年一くらいでするだけの状態だった。僕がクック好きじゃないのは、当時の記憶のせいだろうな。あの頃は「もういっそディスコンしてくれ」くらい追い詰められていたぞ僕。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/desktopmac/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;2017年もMac miniの新型出なかったらどうしようかどうしようもない&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/desktopmac/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_4766_1789570501.webp" alt="2017年もMac miniの新型出なかったらどうしようかどうしようもない" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;しかし冬の時代を超えた後にMacは大きく飛躍した。Mac mini 2018は素晴らしかったしメモリの拡張性まで復活したのは想像以上だった。その後のAppleSiliconは業界に激震を走らせた。長らく停滞していたMacが急激に進化を遂げたのは感動ものである。これ絶対Appleの中で何かあったやろ。&lt;/p&gt;&#10;&lt;p&gt;その後、Mac miniはMac Studioとセットになって小型デスクトップ業界の大正義となって君臨し、コンスタントにアップグレードされ続けた。GPUまで考えると必ずしもコスパがいいとは言いづらいんだが、そのコンパクトさと静音性は何物にも代えがたいので、ガチめのGPUがほしいとかでなければ、この価格帯ではアリである（高いには違いないが……）。ただUltra以上になってくると、高い高いと言われるっていうか実際クソたけぇんだよNVIDIAおいのGPUをさらに上回る石油王価格になってしまうため、だいぶ厳しいんじゃなかろうか。実際長年のMac Proユーザだったが音を上げてWindowsにいった人もいたようだ。&lt;/p&gt;&#10;&lt;p&gt;閑話休題。まぁとにかくここ数年のMac miniは中々よかったし、またMacを重視してくれているように見えるのだが、M3が期待を下回っていてかつ、新型アップグレードもスキップと言われると、ちょっと不安な感じもしてくる。また冬にならないだろうか、とか。&lt;/p&gt;&#10;&lt;h2 id="なんでもいいから出してくれ"&gt;なんでもいいから出してくれ&#10;&lt;/h2&gt;&lt;p&gt;生成AIの時代が来て、特にローカルAIではスペックが非常に重要になっているため、Appleのハード屋という立ち位置は美味しいと思うんだが、Apple自体があんまりAIに乗り気に見えないんだよな。なんかApple Car諦めてAIに注力するのだろうみたいな記事をどっかで見たが、そもそも好きじゃなさそうなんだよなぁ。でもそれだったら変にサービスやろうとしないでハード屋に徹すればええやんとも思うし。といってもソフトまで揃わないと如何ともし難いか……。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、Appleはけっこうダークホースだと思っているので、頑張ってほしいんだよなぁ。とりあえず何でもいいからM4 Mac miniは出してくれ。さすがにポチらないが2世代スキップされるとだいぶ不安になる。&lt;/p&gt;&#10;</description></item><item><title>ゲームのキーボードの反応やたら悪いなと思っていたらkeyhacが原因だった</title><link>https://hack-le.com/keyhac-game/</link><pubDate>Wed, 24 Apr 2024 04:47:20 +0900</pubDate><guid>https://hack-le.com/keyhac-game/</guid><description>&lt;p&gt;自分はPCゲームはたいていゲームパッドを使うのだが、世の中にはキーボード操作のゲームもけっこうある。特にインディーズや同人ゲームなどはその傾向が強い。それで困るのが、うちのPCでゲームをやると、どういうわけかキーボードのききがやたら悪いことだった。まったくきかないわけではなくて、何度か連打すると一回は通る、みたいな感じ。また、押しっぱなしでも断続的に入力がとおる。さらに言えば、Escキーなど一部の特殊キーは普通に効く。うーん、すごくソフトウェアの問題っぽい。&lt;/p&gt;&#10;&lt;p&gt;結論を言うと、&lt;strong&gt;原因はkeyhacだった&lt;/strong&gt;。考えて見ればそりゃそうだという感じ。以下は、そこに至るまでの経緯をつらつら。&lt;/p&gt;&#10;&lt;p&gt;（2024-04-27: 追記）: Fakeymacsのコンフィグパラメータに &lt;code&gt;fc.game_app_list&lt;/code&gt; があるとのコメントを作者のsmzhtさんよりいただきました。ありがとうございます。そういえば……と見てみたところ「&lt;a class="link" href="https://github.com/smzht/fakeymacs" target="_blank" rel="noopener"&#10; &gt;GitHub - smzht/fakeymacs: Emacs-like key bindings for Keyhac&lt;/a&gt;」の修正する必要性が高いと思われるコンフィグレーションパラメータにも入っておりました(^_^;&lt;/p&gt;&#10;&lt;p&gt;（2024-06-21: 追記）上記コンフィグパラメータは非常に便利なのでオススメします。GitHubは有り難いことにここの記事を見て記述していただけたようでした。ありがとうございました。&lt;/p&gt;&#10;&lt;h2 id="おまかんだと思いつつ放置していた"&gt;おまかんだと思いつつ放置していた&#10;&lt;/h2&gt;&lt;p&gt;この現象はだいぶ前からあって、デスクトップPCだろうとラップトップだろうと2in1だろうと同じ現象に見舞われていた。USB接続だろうがBTだろうが外付けキーボードだろうが変わらず。なので、おまかんというか僕のPC環境の何かが悪さしているんだろうと思いつつも、だいたいゲームパッドで事足りるので今まであまり真剣に原因追及をしてこなかった。まぁ、正直ゲームするのもたまにだし。&lt;/p&gt;&#10;&lt;h2 id="ちゃんと調べてみる"&gt;ちゃんと調べてみる&#10;&lt;/h2&gt;&lt;p&gt;が、最近ポチったUnity製ゲームがゲームパッドに一切対応しておらず、キーボード必須であった。3Dゲームで、マウス前提なのでゲームパッドは相性が悪いのは確かだが、まったく対応してないとは……。最近はちょっと時間ができたのでゲームをプレイする時間があった。ポチったゲームをまともにできないのも悔しいし、そろそろちゃんと原因突き止めようかな、と思い、調べることにした。&lt;/p&gt;&#10;&lt;p&gt;しかし、同様の現象に見舞われている人がまったくいない。いやいるかもしれないんだが、見つけられない。検索するとノイズが多すぎる。ChatGPTにも聞いてみたが役立たずの極み。&lt;/p&gt;&#10;&lt;p&gt;これはちょっと、変に調べるよりも自分の環境をよくよく思い返したほうがいいなぁと思い、キーボード周りでなんかいじったっけ、と色々思い返してみると……。&lt;/p&gt;&#10;&lt;p&gt;あ……keyhac……。&lt;/p&gt;&#10;&lt;h2 id="keyhacだった"&gt;keyhacだった&#10;&lt;/h2&gt;&lt;p&gt;そうだ、僕はEmacsキーバインドをWindowsマシンで実現するために（あとラップトップはJIS配列だけれどこれをUS配列にマッピングするために）keyhacを導入していたのだった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/win-jis-us-emacs/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;JIS配列キーボードのWindowsノートPCを、変換・無変換を生かしたままUS配列にする（ついでにEmacsキーバインドにも対応する）&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/win-jis-us-emacs/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_9993_1789616891.webp" alt="JIS配列キーボードのWindowsノートPCを、変換・無変換を生かしたままUS配列にする（ついでにEmacsキーバインドにも対応する）" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;うーん、これはめちゃくちゃ怪しい。多分タイピングするたびに何かしらの処理入ってると思うし。&lt;/p&gt;&#10;&lt;p&gt;ということでkeyhacを無効化してみると、果たして、正常にキー入力がとおるようになった。あー、やはりこれだったか。どおりでずっとうまくいかなかったわけだ。keyhac使うようになってもうだいぶたつからなぁ。keyhacのやっていることを考えて見れば当たり前か。そしてkeyhacを使う人はあんまりPCゲームでキーボード操作とかしていない気がする（偏見）から情報もあんまりないと。&lt;/p&gt;&#10;&lt;p&gt;keyhacはアプリごとに有効無効の設定できるはずだが、キーボード操作しないといけないゲームはそんなにないし、ゲームをやるときはゲームしかしないので、その時だけkeyhacを無効化させることにした。&lt;/p&gt;&#10;&lt;p&gt;まぁわかってみるとつまらない話ではあった。つまらない話だが、こういうつまらないことの積み重ねだよなぁと思う今日この頃である。&lt;/p&gt;&#10;</description></item><item><title>個人用途としてのExcel Online</title><link>https://hack-le.com/excel-online/</link><pubDate>Sat, 20 Apr 2024 20:53:34 +0900</pubDate><guid>https://hack-le.com/excel-online/</guid><description>&lt;p&gt;仮想通貨の取引記録とその分析のために、Excel Onlineを利用している。Excelはデスクトップ版のほうが使い勝手が良いが、デスクトップ版を購入する予定はない。僕の場合、この仮想通貨の記録以外でまったく使っていないので、そのために数万円のお金をかけるのは馬鹿らしいからだ。そして、そういう人はけっこう多いと思われる。&lt;/p&gt;&#10;&lt;h2 id="けっこう重いファイルを取り扱っている"&gt;けっこう重いファイルを取り扱っている&#10;&lt;/h2&gt;&lt;p&gt;ただ本当にExcel Onlineで問題ないのか、不安がないでもなかった。特に難しいことをするわけではないので、機能的にはまず問題が無いと思われたが、僕の仮想通貨の取引は一日あたり1000件を超えることも普通なので、それを年間通してやれば数十万件のデータを処理することになる。果たしてそれで実用的なパフォーマンスは出るだろうか。&lt;/p&gt;&#10;&lt;p&gt;と思っていたが、特に問題なく使えている。今年に入ってからファイルを新たにして、既に数万件の記録をしているが、特別遅い感じはない。ファイルを開いたときに少し待たされるが、許容範囲である。&lt;/p&gt;&#10;&lt;p&gt;一度ローカルにファイルを落として見たところ、12MBほどのデータになっていた。単純計算で、この4倍になると考えると、最終的には50MBのExcelファイルになるだろうか。決して軽いものではないが、今のところは問題なさそうである。&lt;/p&gt;&#10;&lt;h2 id="libreoffice-calcという選択肢"&gt;LibreOffice Calcという選択肢&#10;&lt;/h2&gt;&lt;p&gt;とはいえ毎度クラウドにアクセスするのも面倒ではあるので、オフラインでの選択肢として、LibreOffice Calcを使えないかと試したりもした。LibreOffice Calcは、以前使用していた時、大規模なデータファイルを取り扱うと保存のたびに時間がかかるなどの問題があった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ms2libre/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;LibreOfficeはMS Officeを代替できるか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ms2libre/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_4750_1787721236.webp" alt="LibreOfficeはMS Officeを代替できるか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事では移行しますと言っているが、実はその後パフォーマンスの悪さに辟易として、結局使わなくなったという経緯がある。&lt;/p&gt;&#10;&lt;p&gt;なのだが、あれからSWもHWも進歩があったと見えて、問題視していた保存にかかる時間なども、Excelほど速くはないが、特に気にならない程度になっていた。なので、LibreOffice Calcというのは選択としてあり得る。僕はMac使いだがNumbersよりはこちらのほうが良いと思う（信心が足りない）。&lt;/p&gt;&#10;&lt;p&gt;ただExcelはさすがに業界のデファクトスタンダードなだけあって、xlsxを取り扱うためのインタフェースは各所で揃っていることもあり、Excel Onlineで困っていないのであれば、わざわざLibreOfficeにする理由も薄い。もしあるとすれば、常時更新するデータに対して、表計算ソフトではヘビーないし難しい統計分析をスクリプトで回したい、という要求がある時だろうか。ローカルに元データを置いて表計算ソフトで更新しつつ、スクリプトで詳細な解析をするようなケースだ。それはだいぶ限定的なシチュエーションであるし、またそういう運用は全体最適ではないような気がする。&lt;/p&gt;&#10;&lt;p&gt;などと考えると、LibreOffice Calcという選択肢は当然あるものの、特に宗教的な理由がなければ、わざわざそれを使う必要もない気がする。&lt;/p&gt;&#10;&lt;h2 id="当面excel-online"&gt;当面Excel Online&#10;&lt;/h2&gt;&lt;p&gt;ということで、当面はExcel Onlineを使い続けるかなぁと思っている。昔と違って、大した用途でなければ無料でExcelを使えるようになったことは、明確に良くなったなと思うし、こういうことができるので、なんだかんだでMSは未だに覇権企業なんだろうなと思う。&lt;/p&gt;&#10;</description></item><item><title>Pixel 7はゲームしないユーティリティ勢にはちょうどよかった</title><link>https://hack-le.com/pixel-7/</link><pubDate>Sun, 07 Apr 2024 07:25:02 +0900</pubDate><guid>https://hack-le.com/pixel-7/</guid><description>&lt;p&gt;僕はメインスマホについてはAndroidとiOSを交互に使っている。別に狙ってそうしようとしているわけではなく、その時々でコスパの良さそうなやつを選んでいたら結果的にこうなった。サブを除いたメインスマホの遍歴としては以下のような感じだ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2012: LGの激アツ（物理）スマホ（すぐなくす）&lt;/li&gt;&#10;&lt;li&gt;2012: iPhone 5&lt;/li&gt;&#10;&lt;li&gt;2015: Sony Xperia Z3&lt;/li&gt;&#10;&lt;li&gt;2017: iPhone 8&lt;/li&gt;&#10;&lt;li&gt;2021春: 楽天Big、iPhone 8も引き続き併用&lt;/li&gt;&#10;&lt;li&gt;2021秋: iPhone SE2&lt;/li&gt;&#10;&lt;li&gt;2022: Pixel 7&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;基本的に相場が下がった時を狙っていると思うが、iPhone 8だけは10万くらい払って買った記憶。これは正直愚かな買い物だった。もっと良い買い方があった。とはいえなんだかんだで3,4年と自分のスマホ遍歴の中では比較的長い期間使っていたのでまぁ……。楽天Bigは楽天Unlimitedの無料乞食のために半年ほど使っていたので、一応メインだろうか……（乞食だったのでiPhone 8はWi-fi運用）。その後iPhone 8は長姉の旦那にあげた。&lt;/p&gt;&#10;&lt;h2 id="pixel-7--iphone-12-な感じだけど"&gt;Pixel 7 &amp;lt; iPhone 12 な感じだけど&#10;&lt;/h2&gt;&lt;p&gt;スマホはここ10年で高性能化が随分と進んでおり、以前はハイエンドでないと常用にも厳しかったが、最近は最新のゲームをやらなければ型落ちのミドルエンドで十分になった。まぁiPhoneは円安も相まってだいぶ高くなり、中古になっても値崩れしづらいことから型落ちでもけっこう高いのだが。&lt;/p&gt;&#10;&lt;p&gt;今のAndroidスマホと比べても、2,3世代分くらい上にいっている感が否めない。&lt;strong&gt;中古価格もPixelとiPhoneでは2,3世代くらい差がついているので、市場というのは正直なもの&lt;/strong&gt;である。実際Pixel 7は世代的にはiPhone 14と同じだが、現実的な比較相手はiPhone 12くらいだろう。それでもちょっと落ちるかな。iPhone 12とPixel 7好きなほうあげると言われたら、僕ならiPhone 12を選ぶな。僕はiPad Air 4を持っていて、これのチップがA14でiPhone 12と一緒なんだけれど、2024年の今でも本当になんでもキビキビよく動く。この使い心地から察するに、iPhone 12の基本性能もPixel 7より上なんじゃないかなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、Androidだから出来ることもあるしね。地味にAndroidしかないアプリとか、Androidじゃないとすべての機能が使えないアプリとか、あったりするし。まぁこれは逆も然りではあるんだけれど。ま、iPhone 11と比べたらさすがにPixel 7でいいかなと思う程度ではあるかな。apkで野良ソフト入れられるのも強みだね。今後サイドローディングが解禁されたらiOS側もどうなるかわからないけれど。&lt;/p&gt;&#10;&lt;h2 id="ユーティリティなら2027年まで十分だと思う"&gt;ユーティリティなら2027年まで十分だと思う&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで、&lt;strong&gt;2022年10月発売のPixel 7はレベル的には2020年発売のiPhone 12にも及ばないんじゃないのかな、というのが正直な感触ではありつつも、僕の使い方だと2024年4月現在でも十分&lt;/strong&gt;なんだよね。いやまぁ、一応天下のGoogle様気鋭のガジェットで、発売されてから2年も経ってないんだから、当たり前といえば当たり前なんだけどさ。&lt;/p&gt;&#10;&lt;p&gt;僕がスマホでやっていることと言えば、もっぱら出先で地図やスケジュールを確認したり、音楽を聴いたり、文字主体の電子書籍を読んだり、英語の学習アプリを開いたり、ニュース記事を読んだりXで無駄なツイートしたり、買い物メモを確認したり、健康管理したり、2FAのめんどくさいワンタイムパスワードを管理したり、といったところだ。この手の作業はあまり機能を求められない。オブソリート入りしたiPhone 7でも機能的にはできちゃうレベル。&lt;/p&gt;&#10;&lt;p&gt;でもたいていの人の使い方もこんなもんじゃない。違いがあるとすれば、本当にゲームやるかどうかだけじゃないかな。ゲームするならPixel 7もちょっとしんどいと思う。しんどかった。できないことはないんだけど、A14搭載のiPad Air 4と比べちゃうとね……。&lt;/p&gt;&#10;&lt;p&gt;まぁとにかく、&lt;strong&gt;ゲームさえしなければPixel 7は必要にして十分だし、OSのセキュリティアップデートが保証される2027年まで全然使えるだろうな&lt;/strong&gt;、ということだ。&lt;/p&gt;&#10;&lt;h2 id="おトクかどうかそれが問題だ"&gt;おトクかどうか、それが問題だ&#10;&lt;/h2&gt;&lt;p&gt;まぁでも僕の性格上さすがに2027年までは使わないかなぁという気はする。確かに機能的には現状でも十分なんだが、iPhone 8の時も「これで10年戦う(｀･ω･´)」気でいたのに結局3,4年で買い換えてるしなぁ。まぁ積極的に買い換える気は無いんだけれど、おトクなのがあったらついやっちゃうよね。逆に言うと、おトクなのが出てこなかったら本当にこのまま使い続けるだろうな。時勢的には円安が続いているし、ちょっと今回は本当に厳しいかもしれないけど、どうなるかな。&lt;/p&gt;&#10;</description></item><item><title>PCの通知がウザい100の理由</title><link>https://hack-le.com/pc100/</link><pubDate>Sat, 06 Apr 2024 04:34:07 +0900</pubDate><guid>https://hack-le.com/pc100/</guid><description>&lt;p&gt;スマホのプッシュ通知は便利だ。メッセージの着信、リマインド、最新情報の確認など、用途は多岐にわたる。時にはアピールが過ぎてウザいものもあるけれど、そういうアプリの通知は切ればいい。なんだったらアンインストールしたっていい。通知がウザいアプリはアプリそのものが役に立たないこともよくある。総じて、プッシュ通知はスマホ、いや現代人にとってなくてはならない便利なツールである。&lt;/p&gt;&#10;&lt;p&gt;そんなスマホに対抗するためなのか、いつ頃からか、PCにもプッシュ通知に似た機構が取り入れられた。しかしPCにおける通知は、残念ながら便利とは言えないものばかりだ。&lt;strong&gt;いやむしろ、ウザい&lt;/strong&gt;。&lt;strong&gt;PCの通知はウザい&lt;/strong&gt;。UXにとってマイナスの存在だとすら言える。自分は便利だと思ったものは一つもない。&lt;strong&gt;PCのアプリ通知をすべて切っている&lt;/strong&gt;というユーザも多いだろう。&lt;/p&gt;&#10;&lt;p&gt;本記事では、この理由について整理する。&lt;/p&gt;&#10;&lt;h2 id="タイミングが悪い"&gt;タイミングが悪い&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;スマホの通知が来る時、一番多いタイミングは、スマホを操作していない時&lt;/strong&gt;だろう。ポケットの中や鞄の中、あるいは机の上のスマホが、ほんの一瞬だけブンと揺れ動き、そっと通知がきたことを伝えてくれる。音が出ても問題なければ、控えめにぴこんと音を出すこともできる。それはまったく問題がない。&lt;/p&gt;&#10;&lt;p&gt;操作中に通知がくることもある。&lt;strong&gt;スマホの作業は、カジュアルかつ集中力を必要としない作業が多い&lt;/strong&gt;。スケジュールを確認したり、ニュースを読んだり、ミュージックプレイヤーで再生する曲を選んだりといった具合だ。また、所在ないときになんとなく見るともなしに見ていることも多い。そんな時にくる通知は、大して気にならない。&lt;/p&gt;&#10;&lt;p&gt;それに対して、PCは異なる。肌身離さず身につけているわけではないので、PCを見ていない時の通知は気づくことすらできない。したがって、&lt;strong&gt;PCの通知に気づくのは必ずPCで作業をしている時&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;PCの作業は、多くの場合集中力を要する&lt;/strong&gt;。僕の場合はブログを書いたり、プログラミングをしたり、特定のトピックについて調べ物をしていたりといった具合だ。これらの作業はできるだけ邪魔されたくない。なので、しばしば作業を中断させるメールやチャットはしばしば悪者にされるし、電話などは悪魔の使いのように扱われる。まっとうな職場であれば、PCの作業中は話しかけることさえ気を使うくらいだ。&lt;/p&gt;&#10;&lt;p&gt;実際、起動中のアプリ以外表示しないことを目的としたアプリまである。それくらい、PCにおける作業は「集中」が一大テーマなのである。そうやって苦労して邪魔になるものを排除し、集中してプログラミングをしている時に、Redditにクソスレがたってたよ！という通知がきたら、そりゃ頭に血だってのぼろう。&lt;/p&gt;&#10;&lt;h2 id="内容がどうでもいい"&gt;内容がどうでもいい&#10;&lt;/h2&gt;&lt;p&gt;そもそも&lt;strong&gt;通知の内容がどうでもいい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;前述のように、スマホの作業というのはカジュアルなものが多いから、そういう時に着信のメッセージ表示が表示されるのは、それがいかにくだらないものであろうと、別に気にもならない。&lt;/p&gt;&#10;&lt;p&gt;だがPCの作業は集中力を要するものである。集中しているということは、その作業以外何もしたくないのである。つまり、&lt;strong&gt;今やっている作業と関係の無いことはすべてどうでもいい&lt;/strong&gt;。PCの作業中、その人にとって今知りたいことのハードルは非常に高くなる。&lt;/p&gt;&#10;&lt;p&gt;そのような時、クッソどうでもいい登録したことさえ覚えていないメルマガの通知など、&lt;strong&gt;もはや視界に入るだけでギルティ&lt;/strong&gt;なのである。&lt;/p&gt;&#10;&lt;h2 id="消しづらい"&gt;消しづらい&#10;&lt;/h2&gt;&lt;p&gt;ここまで述べたように、PCの作業中においてほとんどの通知はどうでもよいため、&lt;strong&gt;すぐにでも消してしまいたくなるのだが、その作業がまた煩わしい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;スマホの画面は小さい。それ故に画面のほとんどが操作範囲にある。申し訳程度に表示される通知を0.2秒で確認したら、0.2秒でスワイプして通知を画面の外に追い出すことができる。&lt;/p&gt;&#10;&lt;p&gt;一方でPCの画面は大きい。しかも両手はキーボードにあることも多い。したがって、表示された通知をスマホのように0.2秒でスワイプして消すことはできない。手をキーボードから離したうえで、マウスやトラックパッド、トラックボールなど別の入力インタフェースに手を動かし、さらに画面の端に向けて大きくマウスポインタを動かし、さらにそのあとは小さな小さな消去ボタンに合わせるという精緻な作業を要求される。&lt;strong&gt;面倒どころの騒ぎではない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;しかしかといって、&lt;strong&gt;ほっとくにも目障り&lt;/strong&gt;なのである。PCの画面はでかいんだから通知もでかくていいよねと思われているのか、画面比率は小さくても、&lt;strong&gt;絶対的なサイズは放置するにはあまりにも大きい&lt;/strong&gt;。しかもほっといてもどういうわけか中々消えない。&lt;/p&gt;&#10;&lt;p&gt;だから仕方なくマウスポインタを動かして消すわけだが、前述のようにこの操作が地味に集中力を求められるもののため、イライラして適当にやると、&lt;strong&gt;通知の削除に失敗するどころか開きたくもないリンク先に飛ばされて、確かな殺意の芽生えを自覚することになる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="pcとスマホは違う"&gt;PCとスマホは違う&#10;&lt;/h2&gt;&lt;p&gt;まとめると、&lt;strong&gt;集中したい時にどうでもいいことを言われてイライラさせられ、しかもその通知を消すのが地味にしんどい&lt;/strong&gt;、ということだ。&lt;/p&gt;&#10;&lt;p&gt;結局、スマホとPCでは利用シーンが全然違うのに、スマホの利用シーンに合わせたプッシュ通知の機構をPCにそのまま持ち込んだものだから、最低のUXになってしまったのだろうかね。いい加減もう2024年なのだから、&lt;strong&gt;スマホとPCは違うという当たり前のことに気づいてほしい&lt;/strong&gt;ものだ。&lt;/p&gt;&#10;</description></item><item><title>ChatGPTからClaude 3に乗り換えるか検討して、やめる</title><link>https://hack-le.com/chatgpt-claude-3/</link><pubDate>Tue, 02 Apr 2024 09:28:42 +0900</pubDate><guid>https://hack-le.com/chatgpt-claude-3/</guid><description>&lt;p&gt;僕はChatGPTの課金ユーザである。円安が進み続ける中で$20/月の出費は痛いが、替えがきかないので仕方が無い。このブログのアイキャッチ画像も基本的にChatGPTで作っている。まぁ、そもそもアイキャッチ画像いるのかという根本的な疑問もあるが……。アイキャッチ画像をChatGPTに作らせているブログは急激に増えていて、まぁみんな困っていたんだなと思った。逆に素材サイトは顧客の一部を食われたかもしれないが、どうなんだろうね。&lt;/p&gt;&#10;&lt;h2 id="chatgpt以外にもある"&gt;ChatGPT以外にもある&#10;&lt;/h2&gt;&lt;p&gt;AIサービスに課金せざるを得ないのは仕方が無いとしても、課金する先が必ずしもChatGPTである必要はない。競争相手としては、GoogleのGeminiとAnthropicのClaudeがあるだろうか。Stability AIは何がどうなっているのかよくわかっていない。Bing AIはまたちょっと毛色が違うし。&lt;/p&gt;&#10;&lt;p&gt;Geminiはそれ単体というよりも、Google Driveとの抱き合わせという点で価値があるだろう。まぁ僕は「&lt;a class="link" href="https://hack-le.com/category/zakki/%e8%b6%a3%e5%91%b3%e3%81%a8%e3%81%97%e3%81%a6%e3%81%ae%e8%84%b1google/" &gt;趣味としての脱Google - 或る阿呆の記&lt;/a&gt;」なんて書いているくらいだからさすがに選択肢に入らないが、一般的には一番リーズナブルかもしれない。まぁ、Googleのサービスを使うならだけど。YouTube Premiumとの抱き合わせも入ったら天下だろうけどさすがになかろうね。&lt;/p&gt;&#10;&lt;p&gt;一方でClaude 3 Opusは多くのベンチマークでGPT-4を上回っているとAnthropicが記事を書いたことで（&lt;a class="link" href="https://www.anthropic.com/news/claude-3-family" target="_blank" rel="noopener"&#10; &gt;Introducing the next generation of Claude \ Anthropic&lt;/a&gt;）だいぶ話題になった。機能的にも、文章が熟れていることやPDFの扱いにおいてはChatGPTより上であるとも言われていたり、一部性能でChatGPTより良い結果が出た、なんて記事も見かけたりする。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://note.com/on_consul/n/n08aa834e168a" target="_blank" rel="noopener"&#10; &gt;ChatGPTの性能超えた「Claude 3」。実際どう？有料版を120日使ってる愛用者の立場から解説（ChatGPT,Geminiと比較）｜たてばやし淳.エクセル兄さん@ ChatGPT書籍6冊執筆&lt;/a&gt;」&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.itmedia.co.jp/news/articles/2403/26/news124.html#utm_source=news-mag&amp;amp;utm_campaign=20240401" target="_blank" rel="noopener"&#10; &gt;「GPT-4」「Claude 3」「Gemini」、写真読み取り1本勝負！ お題は「野ざらしの食洗機」 結果は……：NEWS Weekly Top10 - ITmedia NEWS&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;海外記事だと頑張って比較している記事が多く見かけられるが（「&lt;a class="link" href="https://tech.co/news/chatgpt-vs-claude-3" target="_blank" rel="noopener"&#10; &gt;ChatGPT vs Claude 3 Test: Anthropic Takes On OpenAI&lt;/a&gt;」）、勝ったり負けたりといった感じ。まぁ少なくとも、同等の性能はあると思って良さそうにも見える。&lt;/p&gt;&#10;&lt;h2 id="aiが仕事をしない"&gt;AIが仕事をしない&#10;&lt;/h2&gt;&lt;p&gt;そんなわけでClaudeにも関心はあったが、既にChatGPTに毎月$20払っている身なので、新しくClaude 3を本格的に試してはこなかった。が、ちょっと苛つくことがあったので、Claude 3に乗り換えられないか、しばらく検討したんです。&lt;/p&gt;&#10;&lt;p&gt;苛つくことっていうのは、ChatGPTのサボりだ。時々いわれるようにChatGPTにはサボり癖があるようで、普段は知らないことをさもそれらしく言う癖に、タスクを振ると出来ることを出来ないと言い張ることがままある。&lt;/p&gt;&#10;&lt;p&gt;今回もそうだった。GMO FXのスワップポイントカレンダー（「&lt;a class="link" href="https://www.click-sec.com/corp/guide/c365/swplog/" target="_blank" rel="noopener"&#10; &gt;スワップポイントカレンダー | くりっく365 | GMOクリック証券&lt;/a&gt;」）を読み込ませて、当該の月のスワップポイントの合計値を計算させられないか試したのだが、まぁ計算結果がめちゃくちゃで、やり直させようとしたところ、どういうわけか突然「ウェブページを読む機能はない」と言い張り始めた。いやお前一番最初に読み込んでたやん。実際、計算の過程を出させると、明らかにrequestsしているし、また一部のデータの取得に成功している。それを指摘すると、「すみません、読めます」といった直後に「しかし読む機能はありません」と2行で矛盾した回答を平気で言ってくる。こうなるともうだめで、怒ってもなだめてもすかしても、なんだかんだと言い訳して何もしようとしない。&lt;/p&gt;&#10;&lt;p&gt;で、だいぶ苛ついたので、噂のClaude 3に乗り換えようかなと思ったわけだ。それでClaude 3を試したのだが、&lt;strong&gt;最初の質問「日本語話せる？」に対して「日本語話せないんだわ」と日本語で返されていきなり出鼻をくじかれた&lt;/strong&gt;。その後「&lt;strong&gt;画像入力機能ある？」と聞いたら「残念だけど画像は使えないんだよね&lt;/strong&gt;」との回答。&lt;strong&gt;お前もか。お前もなのか&lt;/strong&gt;。もちろんClaudeには画像添付の機能があるし、実際画像をアップロードして何の画像か聞けば答えてくれる（特に無料プランでも画像入力できるのは、無課金ユーザにとっては嬉しいことだろう。その代わり回数制限があるが）。&lt;/p&gt;&#10;&lt;p&gt;まぁClaudeの無料プランはOpusではなくSonnetなので、Opusのほうはもっとまともという可能性はあるっちゃあるんだが、本質的に変わらない気がした。&lt;strong&gt;AIはちょくちょく仕事をしない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;なんでこうなるのかはよくわからない。新旧の情報が混在し、かつてできなかったという記憶に基づいて答えているのか。しかしそれならば指摘があれば修正されてよさそうなものだが、意固地になって出来ないと言い張り続ける。これは「AIが嘘をつく」という批判に対し、できないことはできないと言わせようとした結果なのか。いやしかし相変わらず嘘つきまくるけどな。実際、スワップポイントの計算にしても、わざわざ計算箇所のテーブル部分だけ読み取らせて計算させた時も、平然と嘘の結果を出してきた。いやそもそも「できない」が嘘だし。&lt;/p&gt;&#10;&lt;p&gt;ChatGPTは特に、URLを読み込ませると著しく性能が落ちるように思う。たとえば、このブログのアイキャッチ画像を作らせる際、記事を読み込ませるのだが、公開したURLにアクセスさせた場合と、直接文章を貼り付けた場合では、明らかに回答の精度に差がつく。まぁURLを読み込ませた場合は余計な情報がたくさんあるため、焦点が絞れず、結果精度が落ちる、というのはあるかもしれない（ちなみにこのタスクも時々URLの先を読むことはできませんとか突然言い始めてサボることがある。なんなんだ。指摘すると「実はできます」ってやり始めることもある。本当になんなんだ）。&lt;/p&gt;&#10;&lt;h2 id="大して変わらないならば"&gt;大して変わらないならば……&#10;&lt;/h2&gt;&lt;p&gt;ということで、結論としてはChatGPTもClaudeも本質的には大して変わらんかなぁということになった。であれば、使い慣れているChatGPTから移るほどの理由はない。&lt;/p&gt;&#10;&lt;p&gt;まぁPDFを読み込ませることが多いとか、ライティングがメインだという人であれば、Claudeのほうが良いかもしれない。実際Claude 3に法律文案のPDFを読み込ませて質疑応答をした人の記事などはけっこう感動的だった（「&lt;a class="link" href="https://takagi-hiromitsu.jp/diary/20240319.html" target="_blank" rel="noopener"&#10; &gt;高木浩光＠自宅の日記 - 法制局も真っ青？Claude 3を用いた新規提出法案の立法技術上の矛盾点チェック, 追記（20日）議院調査局も御の字？Claude 3に法案..&lt;/a&gt;」）。以前、100ページくらいの英語の技術仕様書のPDFをChatGPTに投げてやった時には、からっきしだめだったからなぁ。なので、PDFを読み込ませる使い方が多い人ならばClaude 3のほうが真面目に良いんじゃないだろうか。&lt;/p&gt;&#10;&lt;p&gt;しかし僕のメインの使い方はそうではなく、ライティングにコーディングや画像生成など色々やるので、なんだかんだでChatGPTのほうが良さそうに思える。ということで、軽く検討しただけではあるが、僕はまだしばらくはChatGPTを使い続けることにした。&lt;/p&gt;&#10;&lt;p&gt;ちなみに今回のスワップポイント計算タスクは、プログラムを書かせた。画像の切り出しはこっちでやって、数値の読み取りと計算部分だけプログラムで確実にやるというわけだ。もうちょっと調整したら他サイトでも使えるかもしれない。確実性が必要なものはなんだかんだでプログラムになるか。精度95%くらいならAIに回答させるのもアリだが。&lt;/p&gt;&#10;&lt;p&gt;人が認知機能を使って臨機応変に曖昧なタスクをやり、それに基づいてAIがコーディングし、プログラムで確実に処理をこなす、まぁこれくらいが現状はちょうどよいというところなのかもしれない。&lt;/p&gt;&#10;</description></item><item><title>FirefoxからBraveに乗り換え試行中</title><link>https://hack-le.com/firefox-brave/</link><pubDate>Mon, 25 Mar 2024 20:38:15 +0900</pubDate><guid>https://hack-le.com/firefox-brave/</guid><description>&lt;p&gt;「&lt;a class="link" href="https://hack-le.com/category/zakki/%e8%b6%a3%e5%91%b3%e3%81%a8%e3%81%97%e3%81%a6%e3%81%ae%e8%84%b1google/" &gt;趣味としての脱Google - 或る阿呆の記&lt;/a&gt;」の流れで、ブラウザをChromeからFirefoxに乗り換えていた。さすがに老舗Firefoxは今なお健在で、多くのことは問題なく出来るのだけれど、特にChromeよりも優れていると感じることもなかった。むしろ、少し不便さを感じたのが正直なところだ。とはいえそれは耐えられないほどではなかった。&lt;/p&gt;&#10;&lt;h2 id="特定のサイトが見られない謎"&gt;特定のサイトが見られない謎&#10;&lt;/h2&gt;&lt;p&gt;だったのだけれど、ついにちょっと耐えがたい事象が発生してしまった。僕は暗号通貨のメイン取引所としてBitbankを利用しているのだけれど、Bitbankのサイトを開くと何故かクラッシュしてしまうようになったのだ。しかもこれはM2 Pro Mac mini + Firefoxのみに起きることで、他の組み合わせでは起きない。IntelなMBP 2019では問題なかったりする。おまかんか？おまかんなのか？おまかんだろうが何だろうが、Bitbankのサイトが見られないのは不便だ。&lt;/p&gt;&#10;&lt;p&gt;そんなわけでBitbankのサイトを見るためにChromeを起動していたのだが、これは何とも奇妙なことだった。そのうちになおるかなぁと思っていたりなんだりしたのだが、なおる気配もなく日数だけが経過していく。また、それだけではなく色々と不安定だなぁと思うこともあって、タブが固まったり、一度は何故かタブの移動ができなくなることもあった。こういうちょっとしたものはブラウザの再起動でなおるけれど、なんとも面倒なことだ。&lt;/p&gt;&#10;&lt;h2 id="braveを使い始めた"&gt;Braveを使い始めた&#10;&lt;/h2&gt;&lt;p&gt;さすがにちょっとつらくなってきたので、以前ちょこっと使ったBraveの利用を検討している。前に脱Chromeを検討した時、Braveも当然考えたが、Chromiumベースなので脱Chromeの流れでは弱いよな、なんて思って没っていた。あと、広告のあるブログをやっている身としては、デフォルトで広告ブロッカーみたいなブラウザを使うのはちょっと気が引けていた。しかしまぁ、Firefoxがこれだとそうも言っていられない。Vivaldiは確か以前試した時に「使えんなー」という結論になったことだけ覚えているので。何故かは覚えていない……。&lt;/p&gt;&#10;&lt;p&gt;で、兎にも角にもBraveを使い始めたのだが、細かなところで使いやすいなぁと感じてしまった。タブをウィンドウから切り離してD&amp;amp;Dした時に、ドロップした位置にウィンドウが展開されるとか（Firefoxだとそうならない）、あと拡張機能がいちいちちょっとずつ使いやすいとか（Bitwardenで入力ボックスをアクティブにしたらドロップダウンで候補が表示される、Amazonの買い物でKeepaが自動で実行される、とか……）。特に拡張機能の使いやすさは何だろう、Firefoxの制約のためなのか、それともシェアが拡張機能制作元のリソースに反映されているのか……。&lt;/p&gt;&#10;&lt;h2 id="chromeはやっぱりすごいですわ"&gt;Chromeはやっぱりすごいですわ&#10;&lt;/h2&gt;&lt;p&gt;まぁとにかくぶっちゃけFirefoxより使いやすいよな、というのが偽らざる感想だった。で、これはBraveが凄いというよりChromeがすごいのでBraveもすごいと言うべきかなぁと、つまり、改めてGoogle Chromeすげぇなぁ、なんて思ってしまった。これはまぁ、宗教上の理由がなければChromeになってしまうのも残当である。&lt;/p&gt;&#10;&lt;p&gt;最近のGoogleに対しては色々と思うところがあって、それだから脱Googleの試みなんて始めたりもしているのだけれど、公平に見て、Googleのプロダクトには今なお天下一品のものがいくつかある。長い時間をかけて、MSとAppleのもつOSの優位性に負けずシェアを奪還していったGoogle Chromeはその一つだろう。だがそれ以上に、Chromiumがあり、全然Googleと関係ない人が、なんならアンチGoogleくらいのポリシーを掲げて新しく作り替えることさえ許していることがすごい。そういうGoogleだから、かつて皆の憧れでもあった。&lt;/p&gt;&#10;&lt;p&gt;まぁ、今はちょっと違うよなと感じるので、ChromeではなくBraveに行ってしまったんだが。BraveがなければFirefoxを使い続けるだろう程度には、なんとなく信用を失ってしまっている。これもまた、長い時間をかけてこういう心情になったので、そう簡単に変わることはないだろう。&lt;/p&gt;&#10;&lt;p&gt;ということで、当面はBraveをメインにして様子を見ようと思う。&lt;/p&gt;&#10;</description></item><item><title>第五世代 iPad Pro 12.9 (2021) の整備済み製品を物色</title><link>https://hack-le.com/ipad-pro-12-9-2021/</link><pubDate>Fri, 22 Mar 2024 17:13:39 +0900</pubDate><guid>https://hack-le.com/ipad-pro-12-9-2021/</guid><description>&lt;p&gt;先日M3 MBAが発売された。それでちょっとほしいなぁと思ったりなんだりして考えていて気づいたことは、MBAよりもiPad Proのほうを新調したい、ということだった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-macbook-air%e3%81%8c%e7%99%ba%e5%a3%b2%e3%81%95%e3%82%8c%e3%82%8b%e3%80%82intel-mbp-2019%e3%81%8b%e3%82%89%e8%b2%b7%e3%81%84%e6%8f%9b%e3%81%88%e3%81%9f%e3%81%84%e6%b0%97%e6%8c%81%e3%81%a1%e3%81%af/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M3 MacBook Airが発売される。Intel MBP 2019から買い換えたい気持ちはあるが……&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-macbook-airが発売される。intel-mbp-2019から買い換えたい気持ちは/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2024/03/d8dd37d93d170e9d211f39d3c37dbe01-e1709662472268.webp" alt="M3 MacBook Airが発売される。Intel MBP 2019から買い換えたい気持ちはあるが……" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="第三世代ipad-pro-129-2018を使用中"&gt;第三世代iPad Pro 12.9 (2018)を使用中&#10;&lt;/h2&gt;&lt;p&gt;僕が今使っているiPad Pro 12.9は2018年に発売された第三世代だ。これのチップはA12Xで、iPhone XRとかの時期。ただでさえ名前つけるの下手男であるAppleがもっとも迷走していたと思われる頃である。あれから数年経過した2024年、Appleはついにナンバリングはインクリメントのほうがわかりやすいということを発見し、スペックもあがったこのご時世、A12はさすがにちょっとつらいと感じることがある。ストレージも64GB、せめて128GBのものにしておけばよかったなぁと思うこともしばしば。&lt;/p&gt;&#10;&lt;p&gt;まぁメインの用途である電子書籍の閲覧にはさして困らないのではあるけれど、これはそれ以上のことをやるにはパワーもストレージも不足しているから、でもある。&lt;/p&gt;&#10;&lt;p&gt;そして、画面がバキバキになったiPad Air 4が、画面がバキバキなのに目を瞑ればそれなりに使えてしまう、ということもある。ちなみにiPad Air 4のチップはA14だ。A14までいくとゲームとかしていても問題がない。iPhoneに換算するとiPhone 12相当といったところだが、今でもよく売れているだけある。&lt;/p&gt;&#10;&lt;p&gt;結果的にはiPad Air 4なんかポチらずにiPad Pro 12.9に統一しておけば上位のものを買えたではないかといったところだが、これは時系列を無視している。そもそもiPad Pro 12.9を買うという踏ん切りがついたのは、iPad Air 4をバキバキにしてしまったからだった。このiPad Pro 12.9は、iPad Air 4をバキバキにした悲しみを癒やすためにポチったものだ。&lt;/p&gt;&#10;&lt;p&gt;で、使って見ると、僕の場合は12.9インチはかなり勝手がよかったわけだ。iPad Pro 12.9インチを新調すれば、デバイスを統一できる。10インチクラスの取り回しの良さもそれはそれで魅力はあるが、取り回しを重視するならばiPad miniでもよかろう。それに、あまり複数のデバイスを使い回すのも面倒だし、なにより目を瞑ってもバキバキなのは触ればわかる。&lt;/p&gt;&#10;&lt;h2 id="整備済み製品ならばなんとか"&gt;整備済み製品ならばなんとか？&#10;&lt;/h2&gt;&lt;p&gt;とは言ってもiPad Pro 12.9インチはヤケクソに高い。なので最新モデルはちょっと手が出ない、のだが、旧モデルの整備済み製品ならばいいか？などと思って物色している。ポチるならばM1がのった第五世代だろう。常にあるわけではないが、ちょくちょく出ているので、張っていればポチれるだろう（実際この記事を書いているちょうど今出ている、というよりは出たから記事を書いている）。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;135,800: &lt;a class="link" href="https://www.apple.com/jp/shop/product/FHNF3J/A/129%E3%82%A4%E3%83%B3%E3%83%81ipad-pro-wi-fi-128gb-%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%B0%E3%83%AC%E3%82%A4-%E7%AC%AC5%E4%B8%96%E4%BB%A3-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81?fnode=088e4116e75bb4fa1dc7007c1150a42efbb23b2063ff8c44c0670a546370212167d1a8e99f9f81a090da874692ca8eaea18c47e08c13cc226f4d4c7a9875ff62912836103a374e8d62e9fcc1a7094466" target="_blank" rel="noopener"&#10; &gt;12.9インチiPad Pro Wi-Fi 128GB - スペースグレイ（第5世代）[整備済製品] - Apple（日本）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;135,800: &lt;a class="link" href="https://www.apple.com/jp/shop/product/FHNG3J/A/129%E3%82%A4%E3%83%B3%E3%83%81ipad-pro-wi-fi-128gb-%E3%82%B7%E3%83%AB%E3%83%90%E3%83%BC-%E7%AC%AC5%E4%B8%96%E4%BB%A3-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81?fnode=088e4116e75bb4fa1dc7007c1150a42efbb23b2063ff8c44c0670a546370212167d1a8e99f9f81a090da874692ca8eaea18c47e08c13cc226f4d4c7a9875ff62912836103a374e8d62e9fcc1a7094466" target="_blank" rel="noopener"&#10; &gt;12.9インチiPad Pro Wi-Fi 128GB - シルバー（第5世代）[整備済製品] - Apple（日本）&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;128GBか256GBかは悩ましい。256GBのほうが長く使えそうではある。自分はiPadについては壊れるまで使っているので、ストレージマシマシしてもいいかなとは思う。さすがに512GB以上は高すぎるからいいかな……。1TBはメモリも倍だけど値段も凄まじい。たいていのデータはNASにあるし、まぁ256GBもあれば十分だろう。&lt;/p&gt;&#10;&lt;h2 id="ipad-mini買う説"&gt;iPad mini買う説&#10;&lt;/h2&gt;&lt;p&gt;などと言いながら、実際にやることはiPad miniを買うという行動になりそうだなぁと過去の自分を振り返って思ったりもする。どういう思考プロセスが働くかといえば、13,10インチクラスはそれぞれ持っているし十分体験した、だから追加するなら8インチクラスだ、これなら今持っているものと競合しないぞ、と今持っているものをとにかく使い続けようとする思考である。複数のデバイスを使い回すの面倒とはなんだったのか。僕はそういうことする。&lt;/p&gt;&#10;</description></item><item><title>M3が出たのにM2 MacBook Airを選ぶ理由はあるか？</title><link>https://hack-le.com/m3-m2-macbook-air/</link><pubDate>Tue, 12 Mar 2024 06:59:17 +0900</pubDate><guid>https://hack-le.com/m3-m2-macbook-air/</guid><description>&lt;p&gt;そりゃあるだろう。何の話かと言えば、以下のM3 MBAのSSD速度についての記事で、それ自体はよいのだが、何故か最安値旧型エントリーモデルのM2 MBA 256GBの意義にまで言及されていたので、ちょっと言いたくなってしまった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-577060/" target="_blank" rel="noopener"&#10; &gt;M3搭載MacBook Airが256GBモデルの課題解決！SSD速度問題対策実施 - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この記事はM3 MBAのエントリーモデルで、256GBのチップ搭載数が1個から2個になったことにより、R/Wの速度がM2から大きく向上した（M1と同じに戻ったとも言う）という些かニッチなパフォーマンス向上に焦点を当てたものだ。&lt;/p&gt;&#10;&lt;h2 id="エントリーモデル選んでる時点で"&gt;エントリーモデル選んでる時点で……&#10;&lt;/h2&gt;&lt;p&gt;僕にもオタクらしいスペック厨的な心があるので、このパフォーマンス向上については喜ばしいと思う一方で、記事が以下のようにM2 MBA 256GBの意義にまで踏み込んだことには、そりゃ言い過ぎじゃないの、とも思う。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;こうなると、M2搭載MacBook Airの販売価格は安くなったとしても、こと256GBモデルを積極的に選択する意義が問われます。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://iphone-mania.jp/news-577060/" target="_blank" rel="noopener"&#10; &gt;https://iphone-mania.jp/news-577060/&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;M3 MacBook Airが$1099=164,800円で販売された一方、M2 MacBook Airは100ドル下げた$999=148,800円が最安値となっている。この最安値対決について、M2 MBA 256GBの意義に疑問符を投げた形になる。しかし、&lt;strong&gt;ストレージ速度以前にあらゆるスペックが貧弱なこのMBAを選ぶ層にとって、ストレージの読み込み速度3GB/sに本体価格の10%にもあたる100ドルの価値を見出せるかは疑問&lt;/strong&gt;である。この層にとって、最安値であること以上の価値があるだろうか？&lt;/p&gt;&#10;&lt;p&gt;現実的にも、M2 MBAの1.5GB/sという読み込み速度だって十分に速いわけで、そこすら問題視するような使い方なら、まず &lt;strong&gt;「256GBしかない」ことのほうがよほど大きな問題&lt;/strong&gt;となる可能性が高い。ストレージとは「貯蔵」という意味であり、出し入れする速度は一定程度あればよく、貯蔵できる容量こそもっとも重要なスペックである。&lt;/p&gt;&#10;&lt;p&gt;まぁ、メモリは8GB、ストレージ容量は256GBで問題ない、そんな使い方をするユーザにとって、&lt;strong&gt;ストレージの読み込み速度が1.5GB/sか3GB/sか、ましてチップの数は1か2かなんてクソほどどうでもいい&lt;/strong&gt;、ということだ。まぁ実際そういう判断をApple自身もしているから、在庫処分も兼ねているんだろうが、M2モデルを残しているのだろう。基本はM3買ってほしいんだろうけど。&lt;/p&gt;&#10;&lt;h2 id="ストレージの速度より大事なスペックあるよね"&gt;ストレージの速度より大事なスペックあるよね&#10;&lt;/h2&gt;&lt;p&gt;いやまぁ、中堅どころのITメディアが何を言おうと勝手ではあるのだけれど、それにしても、2024年に16万円で売り出されたPCがメモリ8GBでストレージ容量256GBしかないことについて何も言わないのに、SSDの読み込み/書き込み速度なんてニッチな指標を取り上げて「選ぶ意義はあるのか」なんて言われると、Appleになんか貰ってんの？とか思ってしまうわけである。&lt;/p&gt;&#10;&lt;p&gt;そういえばAppleのスポークスマンはMacのメモリ8GBはもはや16GBと同等などと意味不明な供述をして失笑を買っていたっけか（参考記事：「&lt;a class="link" href="https://gigazine.net/news/20231113-apple-m3-ram/" target="_blank" rel="noopener"&#10; &gt;Appleが「M3 MacBook Pro」の8GBのユニファイドメモリは16GBの他製品RAMと同等であると主張 - GIGAZINE&lt;/a&gt;」）。まぁ営業もたいへんだなとは思う。&lt;/p&gt;&#10;&lt;p&gt;僕が嫌だなぁと思うのは、こういうところである。&lt;/p&gt;&#10;&lt;h2 id="m2-mbaもアリ"&gt;M2 MBAもアリ&#10;&lt;/h2&gt;&lt;p&gt;ここまでM2 MBAを擁護しておいてなんだが、&lt;strong&gt;僕自身はMBAについては基本的にM3を選ぶ&lt;/strong&gt;と思う。新しいチップはそれだけサポート期間も長くなるし、無印M3はProと違って問題なく進化しているし、SoCの性能以外にも、Wi-fi 6E対応などの細かなアップグレードもあるし、何より僕の場合はメモリとストレージをそれぞれ増設するため、100ドル程度の価格メリットは全体から見ると薄れてしまうのである（その意味で、M2はむしろ吊るしの256GBにこそ意義があるとすら言える）。ただまぁ、整備済み製品の今後の出方次第では変わるかもしれない……けどまぁ、そもそもMBA買うならiPad Pro買う気がする(^_^;&lt;/p&gt;&#10;&lt;p&gt;まぁ僕はそんな感じなのでM3優勢ではあるんだけれど、最安値MBAで十分とするユーザであるならば、より価格メリットのあるM2 MBAを選ぶのは決して悪くない選択だと言える。&lt;/p&gt;&#10;</description></item><item><title>M3 MacBook Airが発売される。Intel MBP 2019から買い換えたい気持ちはあるが……</title><link>https://hack-le.com/m3-macbook-air%E3%81%8C%E7%99%BA%E5%A3%B2%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82intel-mbp-2019%E3%81%8B%E3%82%89%E8%B2%B7%E3%81%84%E6%8F%9B%E3%81%88%E3%81%9F%E3%81%84%E6%B0%97%E6%8C%81%E3%81%A1%E3%81%AF/</link><pubDate>Wed, 06 Mar 2024 03:14:40 +0900</pubDate><guid>https://hack-le.com/m3-macbook-air%E3%81%8C%E7%99%BA%E5%A3%B2%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82intel-mbp-2019%E3%81%8B%E3%82%89%E8%B2%B7%E3%81%84%E6%8F%9B%E3%81%88%E3%81%9F%E3%81%84%E6%B0%97%E6%8C%81%E3%81%A1%E3%81%AF/</guid><description>&lt;p&gt;突然M3 MacBook Airが発表された。毎度の事ながらいきなりだが、M3の性能自体はMacBooK Proの時にお披露目済みであるし、いつ発売されるのかだけが問題ではあったので、突然のリリースというのが一番耳目を驚かすのかもしれない。実際スペックについてはもはや驚きはなかろうし。ファンレスでどこまでやれるのかという話はあると思うが、そんなに悪いことはないだろう。多分。&lt;/p&gt;&#10;&lt;h2 id="スペック"&gt;スペック&#10;&lt;/h2&gt;&lt;p&gt;まぁスペックについては今更僕が言うこともないが、いくつか特筆すべき点をあげるならば以下であろう。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;高効率コアがM2から+30%、高性能コアが+15%（NEも+15%？）&lt;/li&gt;&#10;&lt;li&gt;クラムシェルモードで2画面出力に対応&lt;/li&gt;&#10;&lt;li&gt;Wi-fi 6E対応&lt;/li&gt;&#10;&lt;li&gt;お値段据え置き（$1099、164800円から、ただし8GB RAMの256GB SSD）&#10;&lt;ul&gt;&#10;&lt;li&gt;M2 MBAは$999(148,800円)に値下げ、M1廃止&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;参考記事&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://9to5mac.com/2024/03/04/m3-macbook-air-vs-m2-macbook-air/" target="_blank" rel="noopener"&#10; &gt;M3 MacBook Air vs M2 MacBook Air: What&amp;rsquo;s new and improved? - 9to5Mac&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.msn.com/ja-jp/lifestyle/shopping/m2%E7%89%88-macbook-air-%E5%80%A4%E4%B8%8B%E3%81%92-%E6%9C%80%E5%A4%A73%E4%B8%87%E5%86%86%E5%AE%89%E3%81%8F/ar-BB1jksOo" target="_blank" rel="noopener"&#10; &gt;M2版「MacBook Air」値下げ 最大3万円安く&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/m3-m2-pro-mac-mini/#index_id2" &gt;M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか - 或る阿呆の記&lt;/a&gt;（以前のメモ）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;M2 MBAが100ドル下がったけど、Proと違って無印M3はM2から順当にパワーアップしているので、これくらいの価格差ならM3 MBAのほうがいいかなと思う。&lt;/p&gt;&#10;&lt;h2 id="買い換えたい気持ちはあるけど高いなー"&gt;買い換えたい気持ちはあるけど高いなー&#10;&lt;/h2&gt;&lt;p&gt;僕のMacノートはRAMだけ16GBにした吊るしのMacBook Pro 2019で、これは正直あまりよくなかったなと思っている。CPUがさすがに非力なんだ。なので、AppleSiliconなMacノートが欲しい気持ちはなくもない。メインの開発マシンはMac miniでお高いMBPは不要と思われるので、ポチるとすればMBAだ。$1099→164,800円と払えなくはない価格だが、これは8GB RAMと256GB SSDという2024年において明らかに基本的人権を侵害しているものである。これを&lt;strong&gt;16GB RAMと512GBにすると、224,800円&lt;/strong&gt;となり、ちょっと贅沢だなぁと思えてくる。それだけの金を払うなら正直グラボのほうがほしい。さすがにジャンルが違うと言うならば、iPadのほうがほしいでもよい。うーん。&lt;/p&gt;&#10;&lt;h2 id="開発しなければmbp-2019でも"&gt;開発しなければMBP 2019でも……&#10;&lt;/h2&gt;&lt;p&gt;前述したとおり、僕のメイン開発マシンはM2 Pro Mac miniであり、また外で開発するノマドワーカー（死語？）でもないので、正直無理してMacノートを新調する理由は薄い。ついでにいうとWindowsのゲーミングノートもあるし。ノートで開発はしないんだよな、僕。まぁ全然しないということはなくて、ちょこっとコードを書いたりすることはあるのだけれど、ゴリゴリやることはない。ノートでやることが多いのは、ちょっとしたコーディングや編集作業のほかは、ネットサーフィン（死語）にブログの執筆くらいだ。今まさにこの記事をMBPで書いている。&lt;/p&gt;&#10;&lt;p&gt;MBP 2019はあまりよくないとはいえ、一応4コアはあるしメモリも16GBに盛っているので、その程度の用途はこなすことができる。256GBのSSDはいかにも窮屈だが、最低限のソフトウェアしか入れていないのでなんとなかっている。ま、最低限のソフトウェアしか入れられない、ともいうけど……。もはや使い方がまったくプロユースではないが、そういう使い方するならもっと前に新調してるんだよね。&lt;/p&gt;&#10;&lt;h2 id="当分intel入ってそう"&gt;当分Intel入ってそう&#10;&lt;/h2&gt;&lt;p&gt;なんてことをつらつらと考えていると、Macノートについてはまだ当分MBP 2019を使い続けそうだ。まぁ2019の前も、MBA 2013を使い続けていたし、デスクトップをメインにする僕にとってラップトップはオマケなんだな。ってかWindowsのゲーミングノートもあるし、ここまで価格差が大きくなるとノートについては脱Mac達成もありえる（またそういうことを言う）。&lt;/p&gt;&#10;&lt;p&gt;まぁ、MBA買うなら別のもの買うだろうなぁ、というのが当面の結論かな。&lt;/p&gt;&#10;</description></item><item><title>M2 Pro Mac mini 買ってから3ヶ月の使用感 M3待つよりM2の整備済みで良いかもね（特にPro狙いは）</title><link>https://hack-le.com/m2-pro-mac-mini-3-m3/</link><pubDate>Sun, 18 Feb 2024 23:07:41 +0900</pubDate><guid>https://hack-le.com/m2-pro-mac-mini-3-m3/</guid><description>&lt;p&gt;M2 Pro Mac miniを使い始めて3ヶ月が経過した。早いものだ。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-mac-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac Miniをポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-mac-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12198_1789621271.webp" alt="M2 Pro Mac Miniをポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;数ヶ月以上にわたり散々腐し続けて起きながら突然のMac購入に自分でも「めちゃくちゃやな」と思いつつ知ったことかとPC新調の小躍りをしていたところ、直後にM3 Pro MacBook Proが発表されて派手に転げ回ったわけだが、蓋を開けてみればM3 ProはM2 Proと比べてお値段ほどのパワーアップはしておらず、よかったのか悪かったのか。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12980_1789621199.webp" alt="M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;なんにせよ、M2 Pro Mac miniは今なお悪くないものだと言える。衝動買いに近かったが、この買い物にはかなり満足している。&lt;/p&gt;&#10;&lt;h2 id="すべてがよくなった"&gt;すべてがよくなった&#10;&lt;/h2&gt;&lt;p&gt;僕のMac mini遍歴は 2012 -&amp;gt; 2018 -&amp;gt; M2 Pro(2023) となっており、これで3台目となる。思えば僕がMacにハマったのはMac mini 2012が名機だったからというのはあると思う。2014だったらハマらなかった可能性あるかもしれん。僕のクックに対する評価が低いのは、2013年から数年におよんだMac冬の時代のせい。まぁこのへんは当時Intelが徹底的に舐めプしていたせいでもある（Intelを叩き起こしたという点においてもRyzenの功績は大きいよなぁ）。&lt;/p&gt;&#10;&lt;p&gt;冬の時代を越して出されたIntel Mac mini 2018は、2012に負けず劣らずの名機だった。十分満足度が高く、別に買い換えなくてもいいくらいではあったのだが、いざ新調してみると、全体的に少しずつ体験が向上しているのを感じており、なんだかんだで悪くない気分である。すべての動作が少し速い。また、&lt;strong&gt;画像のアップスケールなどIntel Macではパワー不足が否めなかった処理については、格段に早くなったのを感じ&lt;/strong&gt;る。そもそもIntel Macでは対応していなかったアプリも使える。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;端的に言うと、すべてがよくなった&lt;/strong&gt;。まぁ強いて言えば、2018でメモリ64GBまで増設していた場合は、少しばかり不満があるかもしれないが、実際のところ多くの場合Mac miniのメモリ64GBは実用というよりそれ自体が自己目的化した趣味的なものなので、それで困るということはあまりないだろう。それよりも大幅にパワーアップしたプロセッサの恩恵のほうがはるかに大きい。&lt;/p&gt;&#10;&lt;h2 id="aiもできる"&gt;AIもできる&#10;&lt;/h2&gt;&lt;p&gt;Intel Macでは使えないAI系のアプリもM2 Pro Mac miniではいくらか使える。最近は画像系や音声系など色々なアプリが出ているので、それらを楽しめるのはとても良いことだ。&lt;/p&gt;&#10;&lt;p&gt;一番大きいのは汎用系生成AIの真打ちとも囁かれるLlama2だろう。Metalに対応した形で使えて、速度もそこそこ出た。OpenAIのAPIに金を払うよりは安上がり……と言えるかどうかはわからないけれどねぇ。対話用途ではChatGPTと比べるべくもないが、APIのユースケースだと活路があるように思う。というか、個人的には一つ考えている用途があって、是非サービスに繋げたいなぁとか考えていたりなんだりする。&lt;/p&gt;&#10;&lt;h2 id="m3-proと比較しても悪くない"&gt;M3 Proと比較しても悪くない&#10;&lt;/h2&gt;&lt;p&gt;M3 Proが出たのは想定外ではあった。なんという情弱であろうか。僕が欲しいのはMac miniであってMacBook Proではないが、M3 Pro MacBook Proが出たならば、M3 Pro Mac miniも思っていたより早く登場することになりそうだ。そうはいっても数ヶ月は待つことになるだろうが。&lt;/p&gt;&#10;&lt;p&gt;しかし、どういうわけなのか、&lt;strong&gt;無印やMaxが順当に進化しているのに対し、ProについてはM2からM3への進化は限定的のようだ&lt;/strong&gt;。少なくとも価格差に見合うものとは言い難い。いやそれはだいたい円安のせいなのだけれど、それにしたって、整備済み製品でもよければM2 Proのほうが価格は相当抑えられるわけで、これくらいなら今でもM2 Pro Mac mini、全然買えるなと思ってしまった。買ったそばから価格据え置きで大幅パワーアップの新型が出ても悔しいが、新型があまり代わり映えしないのも、寂しいものである。&lt;/p&gt;&#10;&lt;p&gt;整備済み製品が出るたびに、買う予定もないのに価格をチェックして本当かお得かしばらく考えるという不治の病におかされているため、今もTwitterで整備済み製品の入荷情報が入ってきては、「お得チェック」をするわけだが、M2 Pro Mac miniは今なお良いお買い物だと言える。無印については、M3無印が順当進化なので待った方がいいかもしれないのだが、しかしM3無印 MBPの価格設定を見ると、コストパフォーマンスに不安も残るので、M2 Mac miniも24GB RAMのやつなど狙ってみてもいいかもしれない。&lt;/p&gt;&#10;&lt;p&gt;まぁそもそも出るのかどうかもわからない。10年代などは、2012モデルから2年後の2014はまさかのスペックダウン、さらにそれから4年放置されている。今のまままたしばらく放置される可能性は常にある。&lt;/p&gt;&#10;&lt;p&gt;ということで、円安が進んでいることや、M2とM3のスペック差が言うほどでもないこと、特にProに至っては部分的には下がっている面もあるなど考えると、整備済み製品の狙い撃ちは今なお良い選択肢と言えるのではなかろうか。&lt;/p&gt;&#10;</description></item><item><title>DynamoDBは早い安いうまい</title><link>https://hack-le.com/dynamodb-yoshinoya/</link><pubDate>Wed, 14 Feb 2024 23:21:26 +0900</pubDate><guid>https://hack-le.com/dynamodb-yoshinoya/</guid><description>&lt;p&gt;僕の推しDBは断然DynamoDBなのだが、これほど癖のあるDBもそうないと思う。&lt;/p&gt;&#10;&lt;p&gt;DynamoDBを初めて触ると、あまりにも簡単に構築してCRUDできてしまうし、設計らしい設計もなさように見えるので、すげぇなと思うわけだが、実際にアプリケーションに組み込み始めると色々とその制約が見えてきて、なんだこれはと狼狽することになる。&lt;/p&gt;&#10;&lt;h2 id="一覧できねぇ"&gt;一覧できねぇ&#10;&lt;/h2&gt;&lt;p&gt;最初の見えるトラップが何かは人によりけりだろうけれど、やはりまずは「一覧できねぇ」じゃなかろうか。いやできねぇことはないんだが、平然とスキャンを要求される。セキュリティ面のことは置いといて、データ数が少ない間はスキャンでも実用に耐えるだろうが、増えてくればそうもいかない。FilterExpressionなんて項目があることに一縷の希望を見出したりするが、これは走査した後のレスポンスをフィルタするものでしかなく、つまりスキャンすれば結局テーブル全部見るのである。まぁそれでも全部見てくれればまだマシというもので、1度のスキャンは1MBの制限があるので一度のスキャンでは全部見てくれず、複数回スキャンする必要があったりもして、自分はただ直近10件のアイテムがほしいだけなのにと打ちひしがれたりする。&lt;/p&gt;&#10;&lt;p&gt;ここらへんで最初のキー設計がめちゃくちゃ重要らしいと嫌でも気づく。またグローバルセカンダリインデックスを使うことで多少の無理には答えられそうだという確かな希望も得る。最初にきちんと設計すればローカルセカンダリインデックスも使えそうだとわかる。ドキュメントの「ビジネスのユースケースが決まるまで設計するな」とかいうかぐや姫でも言わないことは世界が平和になるまで封印する。&lt;/p&gt;&#10;&lt;h2 id="多対多の苦労"&gt;多対多の苦労&#10;&lt;/h2&gt;&lt;p&gt;これである程度、具体的には一対多にはそれなりに対応できるのだが、多対多の要件が出てくるとまた頭をひねることになる。手癖で正規化してしまうとJOINできないため結合のためにN+1でクエリを投げる羽目になる。当然死ぬ。これについては公式からベストプラクティスが出ているのでそれに則ってやればやはりそれなりに対応できる。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/dynamodb-many-to-many/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;DynamoDBで多対多のテーブル設計&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/dynamodb-many-to-many/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-60.webp" alt="DynamoDBで多対多のテーブル設計" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;対応できるのだが、これはRDBでいうところの中間テーブルに情報を集約した構造に近く、情報が冗長になる。Aの情報が複数のアイテムに散らばるため、Aについて変更したら複数のアイテムを同時に変更しないと整合性が保てない。一応DynamoDBでもトランザクション処理できるのだが、これも制約があるため注意が必要だ。ライブラリも使いづらいし。それでも昔はトランザクション処理自体なかったのであるだけ良いのだろう。&lt;/p&gt;&#10;&lt;h2 id="db設計というよりシステム設計でありビジネス設計"&gt;DB設計というよりシステム設計でありビジネス設計&#10;&lt;/h2&gt;&lt;p&gt;しかしこれの抜本的な対策は、恐らく要件として原子性や一貫性を多少諦めてもなんとかなるようにシステム全体を調整することだろう。つまり&lt;strong&gt;データベース設計というよりはシステムのアーキテクチャ設計であり、もっといえばビジネスのユースケースとの調整&lt;/strong&gt;だ。かぐや姫に口を出すパワーがいる。&lt;/p&gt;&#10;&lt;p&gt;しかしながらデータベースやアプリケーションを触るエンジニアに必ずしもそういった権限があるわけではない。というか多分だいたいない。上から降ってくる我が儘に調整の余地なく抗えない場合、DynamoDBで頑張るのはけっこうムチャすることになろうとは思う。&lt;/p&gt;&#10;&lt;p&gt;まぁ上から突然降ってくる謎仕様については、KVS的な柔軟性のために必ずしも対応できないわけではない。キー設計で対応できれば、言い換えるとクエリを変えなくてよければ、かなり楽に対応できる。ここらへんはRDBよりもやりやすいと感じられるだろう。逆に言うと、今のキー設計で対応できなそうだとつらいことになる。具体的には複数の属性を結合した地獄のようなグローバルセカンダリインデックスになるだろうか。&lt;/p&gt;&#10;&lt;h2 id="最高の非機能"&gt;最高の非機能&#10;&lt;/h2&gt;&lt;p&gt;他にも検証とか基本的にプログラムで頑張ってねという感じなので、とにかくアプリケーション側の仕事が増える。色々とDBの特性を把握して面倒見てやらないといけない。などなど、機能的にはかなりの制約があるように見える、見えるというか事実あるのだが、それにも関わらず僕がDynamoDB大好き芸人なのは、インフラ面における運用の楽さに尽きる。特に課金体系としてオンデマンドを選択した場合、マジでほとんど何も考えなくていい。阿呆でいられる。&lt;/p&gt;&#10;&lt;p&gt;アプリケーションにもインフラにもそれぞれ苦労があるが、のっぴきならない何かがあった時、どちらかというとアプリケーションのほうが対応しやすく、また被害も抑えやすいように思う。インフラはどうにもならん時はもう本当にどうにもならんし、対応にも時間がかかるし、また症状もサービスがまるごと落ちるなど深刻な障害という形で現れやすい。なのでインフラを「ちゃんとやる」のはかなりの労苦であり、新規事業やりがちの自分にはどうにもつらい。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、&lt;strong&gt;つらいインフラについて脳死でいられるという一点だけでも、僕はDynamoDBが好き&lt;/strong&gt;なのである。&lt;/p&gt;&#10;&lt;p&gt;しかも&lt;strong&gt;そんな素敵インフラとマネージドサービスを提供してくれるDynamoDB、めっちゃ安い&lt;/strong&gt;。DBはクラウドでも金喰い虫になりやすいところだと思うが、DynamoDBはコスパも良好。特に大きくないサービスであれば無料枠でほぼ戦えるものと思われる。僕はプライベートでもライフログやら自前のBTCチャートやらにDynamoDBを使っているのだが、1円もかかっていない。&lt;/p&gt;&#10;&lt;h2 id="早い安いそして"&gt;早い安いそして……&#10;&lt;/h2&gt;&lt;p&gt;ということで、色々言ってきたがとどのつまりDynamoDBはさくっと作れて破壊も簡単、パフォーマンスよくスケーラビリティ最高、それでいながらコスパも良好。ただし前述のとおり癖強でアプリ頑張るのはもちろん、システム全体ってかビジネスにも口出す設計が必要。そこは人間。頑張れ人間。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;DynamoDBは早い安い（人間が）うまい&lt;/strong&gt;。うまくあれ。&lt;/p&gt;&#10;</description></item><item><title>ゲーミングPCは（一番じゃないが）いいやつを選べ</title><link>https://hack-le.com/gaming-pc/</link><pubDate>Sun, 19 Nov 2023 02:37:21 +0900</pubDate><guid>https://hack-le.com/gaming-pc/</guid><description>&lt;p&gt;最近姉がVR/MRに興味を示していて、Meta Quest 3を買うかどうかずっと悩んでるんよ。僕はOculus Quest 2をだいぶ前にポチっていて、最初にひとしきり興奮した後はインテリアにしてしまっていたから、「一度試した方がいいよ」と忠告していた。姉もそれは感じているようで、安い買い物でもないし、レンタルサービスみたいなものを検討していたが、レンタル自体もけっこうお高く、お悩みの様子だった。それで、どうせホコリをデコらせているんだから貸してあげればいいかと、この前送ってやったんさ。着払いで。&lt;/p&gt;&#10;&lt;p&gt;姉は初のVRをだいぶ楽しんでくれたようで、「Meta Quest 3買う！」「PCVRやりたい！」とか言い出す始末。そんでノートPCの内蔵グラフィックでやろうとムチャする始末。姉よ、それは無理だ……。VRやるなら、まぁそれなりにガチめのゲーミングPCほしいよね。&lt;/p&gt;&#10;&lt;h2 id="そんなノートで大丈夫か"&gt;そんなノートで大丈夫か？&#10;&lt;/h2&gt;&lt;p&gt;ただ姉はゲーミングノートを考えているようで、「悪いこと言わんからやめとけ」と説得している。ノートの楽さに慣れてしまったというのは僕もわかるが、ゲーミングPC買うならデスクトップがいい。それもできるだけいいやつだ。&lt;/p&gt;&#10;&lt;p&gt;うちにあるゲーミングPCも6年前に発売されたお爺ちゃんのハイエンドだが、バリバリ現役だ。いや、もちろんそのままではない。グラボは当時のハイエンドGTX1080TiからRTX4070（値段は同じくらいだが今のミドルエンド……グラボ高すぎんよぉ……）に換装している。メインストレージは劇的に安くなった2TB NVMe SSDだ。さらにSATA 2TB SSDと2TB HDも繋げており容量は不足なし。メモリは残念ながら最初についていた32GBがMBの限界だったらしくそのまま。しかしまぁ、今のところ32GBを超えて必要とされたことはないし、これ以上は趣味かな。AIだと128GB必要とされることもあるらしいが、そんな用途だとメモリ以前にまずグラボで門前払いなので……。&lt;/p&gt;&#10;&lt;p&gt;こういうことができるのが、デスクトップPCの良いところだ。特にハイエンドのゲーミングPCならば、マザボも電源もPCケースもしっかりしたものが選択されているので、長期的なメンテナンス性に優れる。進化の早いPC業界も一頃に比べればずいぶん落ち着いたので、CPUのCore i7-8700Kもまだまだ使える。電源は750WだがPlatinumだし、その気になればRTX4080くらいは射程に入る……が、むしろPCケースの物理的な空間のほうが問題かも。330mmはギリ入るはずだが……。&lt;/p&gt;&#10;&lt;p&gt;ゲーミングPCは安い買い物ではないので、一度買ったらできるだけ長く使いたい。長く使うにはしっかりとした基板のうえで、時流に乗っかってパーツを交換していくのがいい。&lt;/p&gt;&#10;&lt;h2 id="一番高いやつは無理"&gt;一番高いやつは無理&#10;&lt;/h2&gt;&lt;p&gt;まぁとはいえ、2023年現在、「一番いいやつをくれ」というわけにはいかない。グラボが高すぎる。RTX4090はそれ単体で30万する。しかもこの高騰の波はAI需要もあって収まりそうもない（一時25万くらいになってたけどまた高くなったね……）。この馬鹿高いグラボを積んだハイエンドゲーミングPC、フツーに50万円前後するし中には70万するとかもザラだ。タコなのは配線だけにしろ。&lt;/p&gt;&#10;&lt;p&gt;さすがにPCには出せても25万くらいでは？と思うので、そうすると今ならRTX4070Tiあたりになるだろう。まぁVR用途だとVRAM重要だろうし、RTX4060 Ti 16GBあたりがいいのかもしれない。今だとRTX 4060Ti 16GBマシンなら20万で換装用のストレージ&amp;amp;メモリまで用意できそうだし、そのほうがいいかもね。&lt;/p&gt;&#10;&lt;p&gt;RTX4060Tiは発売前からボロカスに叩かれまくりの約束された産廃だったが、資本主義の神の圧力により光速で価格が熟れ、選択肢に入るようになってきたかと思う。今もドスパラでPalitのやつが69,800円だったし、この価格ならアリでは。まぁ僕の持ってるRTX4070も、最初は叩かれまくっていたけど値段が落ち着きはじめてからは「まぁアリか……？🤔」って感じになったし。まぁ僕は高い時に買ったけどな！&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/rtx4070/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;高い高いと噂のRTX4070をポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/rtx4070/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_11386_1789620489.webp" alt="高い高いと噂のRTX4070をポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;少し待てば安くなるのはわかっていたが、我慢できなかったんや……😭&lt;/p&gt;&#10;&lt;h2 id="superを待て"&gt;SUPERを待て&#10;&lt;/h2&gt;&lt;p&gt;そもそも今は「待て、まだその時じゃない」みたいな時期ではある。SUPERシリーズの噂があるからだ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gazlog.com/entry/rtx4000super-price-leak/" target="_blank" rel="noopener"&#10; &gt;NVIDIA GeForce RTX 4000 Superシリーズの価格はほぼ据え置き。AI需要の低下を見越しての動き？&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gazlog.com/entry/rtx4000super-series-specs-leak/" target="_blank" rel="noopener"&#10; &gt;NVIDIA GeForce RTX 4080 Super、RTX 4070 Ti Super、RTX 4070 Superの詳細仕様が明らかに&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://northwood.blog.fc2.com/blog-entry-12110.html" target="_blank" rel="noopener"&#10; &gt;北森瓦版 - GeForce RTX 4080, RTX 4070 Tiが生産終了？―RTX 40 Superへ移行か&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://northwood.blog.fc2.com/blog-entry-12096.html" target="_blank" rel="noopener"&#10; &gt;北森瓦版 - GeForce RTX 40 Super seriesはCES 2024で発表される？&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;4080はともかく4070シリーズが価格据え置きでパワーアップするなら是非待つべきだし、4060の価格帯にも影響があるだろう。まぁ実際40xxシリーズのグラボは高すぎるからなぁ。為替の影響もあるので、待っていれば必ず今より良くなるとは言い難いかもしれないが、まぁでもかなりの確度で今よりはマシな状況になるんじゃなかろうか。&lt;/p&gt;&#10;&lt;p&gt;4080 SUPERのVRAMが16GB説と20GB説あるんだが、20GBになってほしいなぁ。そして16万くらいになれば検討する。。。&lt;/p&gt;&#10;&lt;p&gt;などと言いつつ、とにかく初期投資抑えたいしそこそこ動けばいいし拡張とかしないバーカバーカなら、結局RTX3060で十分な気はする。GTX1080TiでもStable Diffusion動かすとパワー不足だったが、適当にゲームする分には別に問題なかったしな……。RTX3060なら自作PCで10万もいけそう。割り切って拡張も考えないならゲーミングノートもアリかもね。ディスプレイついてくるし。&lt;/p&gt;&#10;&lt;h2 id="ai記事との比較"&gt;AI記事との比較&#10;&lt;/h2&gt;&lt;p&gt;ということで、結論的にはゲーミングPC買うなら一番いいデスクトップPCを長く使いたいところだが、グラボが馬鹿高くなっているので、二位、いや三位とか四位でいいんじゃないですか、でもそこらへんもうすぐアプデされるからそれを待て、という感じ。でも割り切って安く済ませたいならRTX3060搭載PC、ラップトップもアリよって感じかしら。&lt;/p&gt;&#10;&lt;p&gt;というゲーミングPCについての雑感をたらたらと書いたわけだが、この記事を書いたきっかけは、同じテーマでAIに書かせた記事がつまらなかったことだ。記事は以下。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ai.hack-le.com/gaming-pc/" target="_blank" rel="noopener"&#10; &gt;テクノロジーの旅：最適なゲーミングPCを選ぶためのガイド&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;AI記事もちょっとしたコツがあって、続けている間に技術系の記事は少しうまく書けるようになったと思うんだが、まだまだこの手の情緒が入る記事は難しいらしい。内容的にはまぁそこまで不足はないかなと思うんだけれど、とにかく面白くない。口調だけギ○モードっぽくしてみたが、胡散臭くなっただけで本質的な薄っぺらさをカバーするものではなかった。&lt;/p&gt;&#10;&lt;p&gt;まぁでも時間は確かに劇的に短い。この雑記事ですら2時間くらいかかってるという事実。なにしてんだ。AIだったら10分よ。AIライターへの道は遠い。。。&lt;/p&gt;&#10;</description></item><item><title>趣味としての脱Googleその2: Google ChromeからのFirefox</title><link>https://hack-le.com/google2-google-chrome/</link><pubDate>Sun, 12 Nov 2023 04:19:38 +0900</pubDate><guid>https://hack-le.com/google2-google-chrome/</guid><description>&lt;p&gt;前回に引き続き、ぼちぼちと脱Googleを始めて行こうと思う。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;趣味としての脱Google 事始め&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/11/c79e4a0293727b98fc06be9ec3b56676.webp" alt="趣味としての脱Google 事始め" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;脱Googleの最初のターゲットは、WebブラウザGoogle Chromeである。&lt;/p&gt;&#10;&lt;p&gt;脱Googleというとまず検索エンジンが思い浮かぶかもしれない。しかし、検索エンジンよりも先に起動するものがあるだろう。Webブラウザだ。Webブラウザとそのデフォルト検索エンジンは密接な繋がりがある、そして今Webブラウザの覇権は、言わずと知れたGoogle Chrome。ChromeはIEの牙城を打ち崩すという誰にもできない偉業をやってのけた偉大なるWebブラウザであり、今なおもっとも使いやすいWebブラウザの一つと言えよう。ここでChromeから離れることが、最初のステップと思う。&lt;/p&gt;&#10;&lt;h2 id="個人的webブラウザの使用変遷"&gt;個人的Webブラウザの使用変遷&#10;&lt;/h2&gt;&lt;p&gt;僕はここ10年ばかりWebブラウザはずっとChromeを使っているのだが、定期的に乗り換えを画策してきた。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/firefox/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;10年ぶりにFirefoxを3ヶ月ほどメインにした所感&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/firefox/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2021/06/2021-06-19.jpg" alt="10年ぶりにFirefoxを3ヶ月ほどメインにした所感" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/45991995-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Chrome → Safari 移行を試みて二ヶ月、結局Chromeに帰ってきてしまいました&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/45991995-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2745_1789453396.webp" alt="Chrome → Safari 移行を試みて二ヶ月、結局Chromeに帰ってきてしまいました" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;ここには書いていないが、その他Edgeはもちろん、BraveやVivaldiなども実はしれっと試している。が、結局いつもChromeに戻ってきてしまっている。&lt;/p&gt;&#10;&lt;p&gt;ちなみにChrome以前だが、FirefoxやSleipnirを使っていた（&lt;a class="link" href="https://www.fenrir-inc.com/jp/sleipnir/" target="_blank" rel="noopener"&#10; &gt;Sleipnirまだ生きてた……&lt;/a&gt;）。確かSleipnirを使っていた理由はマルチタブが便利だったからで、Firefoxを使っていた理由はLinuxを使っていたことや、拡張機能が便利だったからと思う。その後Chromeも入ってきて、Firefoxがいまいち鈍重だった時に爆速ということで話題になった。しかも拡張機能もある。最初の頃は安定性などの問題で中々広まらなかったが、アップデートを重ねるにつれて少し改良され、今や押しも押されもしないデファクトスタンダードに。&lt;/p&gt;&#10;&lt;p&gt;別に脱Googleを意図していたわけではないにせよ、過去何度も乗り換えを画策して結局出戻ってきたあたりに、今のChromeの強さを感じる。実際、一番使いやすいようには思う。まぁ、それでも乗り換えるんだけどさ。&lt;/p&gt;&#10;&lt;h2 id="俺たちのfirefox"&gt;俺たちのFirefox&#10;&lt;/h2&gt;&lt;p&gt;乗り換え先としては、Firefoxを選択した。&lt;/p&gt;&#10;&lt;p&gt;EdgeはBing AIが鬱陶しいし、そもそも脱Google先と言ってMicrosoftに行くのは鼻白むというか、堂々巡り感がある。まぁGoogleとMicrosoftは方向性が大分異なるので、理屈の上ではアリなんだが、あえて選ぶ選択肢ではないように思える。それに、今後Linuxを使おうという時もあるかもしれないし……いやさすがにないか……？&lt;/p&gt;&#10;&lt;p&gt;SafariはMac/iOS縛りなので除外。最近はWindowsもよく使うし、スマホがGoogleなAndroidなので（笑）。&lt;/p&gt;&#10;&lt;p&gt;Braveは多分もっともChromeから乗り換えやすいブラウザだが、それもそのはずで、Chromiumベースのブラウザとなっている。脱Googleを意識されてはいるし、使えるものは使えば良かろうなのだという精神は問題ないと思いつつも、まぁでも主旨を考えると、Chromeなものとは離れていればいるほど良い。&lt;/p&gt;&#10;&lt;p&gt;他にも言い出せば色々あるが、マイナーブラウザは気分転換に使う分には良いのだけれど、今の僕がメインブラウザとして楽しめるかというとちょっと厳しいように思える。&lt;/p&gt;&#10;&lt;p&gt;というわけで、自分的にはFirefox一択。モバイル版もあるし。&lt;/p&gt;&#10;&lt;h2 id="firefoxに移る上での課題"&gt;Firefoxに移る上での課題&#10;&lt;/h2&gt;&lt;p&gt;やはりシェアの問題はあって、主に第三者の対応的なところで引っかかる可能性はある。&lt;/p&gt;&#10;&lt;h3 id="拡張機能"&gt;拡張機能&#10;&lt;/h3&gt;&lt;p&gt;拡張機能はやはり障壁となって立ちはだかる。大手のプラグインはだいたいFirefoxにも対応してくれていて、Bitwardenとか必須レベルのやつはあるからいいんだが、マイナーになってくるとさすがにそういうわけにもいかない。おだやかTwitterくらいならばまぁいいかなと思うが、個人的につらいのはdraw.io for NotionのFirefox向け拡張機能がないことだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chrome.google.com/webstore/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle" target="_blank" rel="noopener"&#10; &gt;draw.io for Notion - Chrome ウェブストア&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ないと絶対無理、というほどではないが、Notion専用ブラウザとしてChromeを生かす必要があるのではないかと思わされるほどだ。というかNotion側からもっと積極的に担いでください。描画機能とか絶対ユーザが欲しいものなんだし……。ああそういえば、Notionもけっこう依存度高いんだよなぁ……。まぁとはいえ、僕の場合毎日画像を描いているというほどではないので、これについてはギリギリ妥協はできるかなぁ、という感じ。&lt;/p&gt;&#10;&lt;h3 id="対応サイト"&gt;対応サイト&#10;&lt;/h3&gt;&lt;p&gt;一時期は増えていたFirefox対応サイトだが、シェアの低下によって再びサポートから外されたり後回しにされたり（&lt;a class="link" href="https://it.srad.jp/story/22/05/05/1529217/" target="_blank" rel="noopener"&#10; &gt;NHKプラス、5月23日以降のアップデートでFirefoxを動作対象外に | スラド IT&lt;/a&gt;）などの憂き目も見ている。Adobe Expressにアクセスしたら対応していなかったよ……。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/11/8091287543debe6c06962323d88511df.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;2023年11月6日時点でAdobe ExpressにFirefoxでアクセスした時&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁでも近日公開らしいから……。&lt;/p&gt;&#10;&lt;p&gt;よく使うWebサービスで対応していなかったら死活問題にもなりうる。こればかりはシェアを上げていくしかなかろうなのだ。まぁ、その時だけ対応ブラウザを起動すればいいといえば、いいのだが。&lt;/p&gt;&#10;&lt;h3 id="マルチユーザプロファイルの切り替えが面倒"&gt;マルチユーザ（プロファイルの切り替え）が面倒&#10;&lt;/h3&gt;&lt;p&gt;面倒というだけで、できないわけではないのだが、マルチユーザの扱いがGoogleよりやや面倒。&lt;code&gt;about:profiles&lt;/code&gt;をいじいじするというのはなんとも。Chromeはその点楽であった。また、メールなどの外部リンクを開いた時に、最後に開いていたウィンドウ（最後に使っていたユーザ）で開かれるというのも地味な便利ポイントであった。Chrome、地味に便利な機能を積み重ねてきているよなぁ。&lt;/p&gt;&#10;&lt;h2 id="firefoxもいいよ"&gt;Firefoxもいいよ&#10;&lt;/h2&gt;&lt;p&gt;ここまで乗り換えにあたって課題ばかり書いてきたけれど、Firefoxに乗り換えてよかったこともあるよ。&lt;/p&gt;&#10;&lt;p&gt;まずパフォーマンスが良い。これはかなり意外だったんだが、どうやらここ1年でだいぶ頑張っていたらしい（&lt;a class="link" href="https://gigazine.net/news/20231101-firefox-performance-improvement/" target="_blank" rel="noopener"&#10; &gt;Firefoxのベンチマークスコアは1年弱で50％向上し実際に1年で15％高速化している - GIGAZINE&lt;/a&gt;）。以前使った時よりも体感としてよかった。何も知らなかったけれど、「あれ、ずいぶん早いな」と感じたものな。Chromeよりはやいかも。&lt;/p&gt;&#10;&lt;p&gt;あとモバイル版がいいね。タブを下に置けるのは個人的にはかなり気に入っている。Firefox Syncでデスクトップとの同期もちゃんと出来るし。拡張機能周りでは「&lt;a class="link" href="https://forest.watch.impress.co.jp/docs/news/1540676.html" target="_blank" rel="noopener"&#10; &gt;Android版「Firefox」、ようやく拡張機能をフルサポートへ - 窓の杜&lt;/a&gt;」こういう動きもあるから期待したいね。これはむしろタブレットで期待したいところだけれど。&lt;/p&gt;&#10;&lt;h2 id="比較的乗り換えやすいと思う"&gt;比較的乗り換えやすい、と思う&#10;&lt;/h2&gt;&lt;p&gt;なんだかChromeを称賛する記事になってしまったような気もするが、しかし他のブラウザもかなり頑張ってくれているので、Webブラウザは脱Googleの試みの中では比較的乗り換えやすい類だと思う。今もFirefoxでこの記事を書いている。困ることはあまりない。まったくないことはない。もはやWeb標準になっているChromeのアンインストールはできないなぁ。Notion + draw.ioの拡張機能で絵を描くためだけに起動することもある。&lt;/p&gt;&#10;&lt;p&gt;まぁアンインストールならずとはいえ、デフォルトブラウザは他に変えたし、Chromeないと仕事にならないよ、という状態ではないので、まずはこれくらいでいいんじゃないかな。&lt;/p&gt;&#10;&lt;p&gt;/google3-google-ai/&#10;次の記事&lt;/p&gt;&#10;</description></item><item><title>M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか</title><link>https://hack-le.com/m3-m2-pro-mac-mini/</link><pubDate>Thu, 02 Nov 2023 13:18:52 +0900</pubDate><guid>https://hack-le.com/m3-m2-pro-mac-mini/</guid><description>&lt;p&gt;M3 Pro発表前夜にウキウキでM2 Pro Mac miniを購入してキャッキャしていた愚か者が私です。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-mac-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M2 Pro Mac Miniをポチった&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-mac-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12198_1789621271.webp" alt="M2 Pro Mac Miniをポチった" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;知っててポチったならともかく、何も知らずにポチったので阿呆なのです。そういえばTwitterでそれっぽいこと呟いている人いたなぁと後で思いました。最近私のタイムラインちょっと整理されすぎて技術的な話をする人がだいぶ減ってしまっている模様。ちょっとフォローする人を考え直さないと……。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはともかくとして、ポチってしまった以上後はお楽しむしかないわけですが、それにしても、いったい僕の買い物はお得だったのかどうか、それについては結論を出す必要がある。あるんだ。&lt;/p&gt;&#10;&lt;h2 id="比較"&gt;比較&#10;&lt;/h2&gt;&lt;p&gt;まず買ったものは、M2 Pro Mac miniのプロセッサとRAMを盛ったものだ。これについて比較するため、M3 Pro MacBookProのつるしもかいておこう。恐らくここから10万円ほど差っ引いたものがM3 Pro Mac miniのつるしになると期待されるからだ。&lt;/p&gt;&#10;&lt;h3 id="比較表"&gt;比較表&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;M2 Pro Mac mini(盛り)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;M3 Pro MBP(つるし)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;大本営発表&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CPU&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;12コア (性能:効率=8:4) / 下位版は 10コア&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;11コア (5:6) / 上位版は 12コア&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;高効率コア: +30% / 高性能コア: +15%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GPU&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;19コア / 下位版は 16コア&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;14コア / 上位版は18コア&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ハードウェアうんたら&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NE&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16コア&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16コア&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;+15%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メモリ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;32GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;18GB / 盛れば36GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;18GBの違和感がすごい&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;メモリ帯域幅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;200GB/s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;150GB/s&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;まさかのダウングレード&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ストレージ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;512GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;512GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;価格&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;282,800円&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;328,000円&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MBPは+4万円。円安よぉ……&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;整備済み&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;221,800円&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;?&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;?&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="cpugpune"&gt;CPU/GPU/NE&#10;&lt;/h3&gt;&lt;p&gt;この表をまとめて思ったことは、「言うほどアップグレードしてないのでは？🤔」ということだ。いや、確かに僕はM2 Proをポチってしまった身である以上、心情としてM3 Proで大幅パワーアップは悔しいという気持ちはあるが、実際この表見るとさぁ……。いや、&lt;strong&gt;コア数増えてないどころか減ってるし&lt;/strong&gt;。コア性能はアップしていると言ってもだよ。つるしだったらM2 ProのCPUは10コアなので増えてるように見えるが、&lt;strong&gt;高性能コアが減っている&lt;/strong&gt;。うーんこれは罠。省電力化には寄与するだろうが、Mac miniだとそれはおいしくない。おいしくないというか、悲しい。ベンチが待たれるが、M2 Pro上位はM3 Proより強いのではないだろうか。&lt;/p&gt;&#10;&lt;p&gt;参考。無印はコア数変わらないだけに純粋に強くなってるっぽい。 &lt;a class="link" href="https://gigazine.net/news/20231102-apple-m3-chip-geekbench-brower/" target="_blank" rel="noopener"&#10; &gt;Apple「M3」チップのベンチマーク結果が続々投稿されM2チップとの性能比が最大20％に上ることが明らかに - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;GPUについてはAppleの公式サイトではハードウェアアクセラレーテッドによるレイトレーシング対応としか触れられていない。ゲームユーザの少ないMacだとあまりおいしくなさそう。っていうか僕Macでゲームしないし。&lt;/p&gt;&#10;&lt;p&gt;NEはコア数そのままで性能が上がっているようなので、これは順当に進化している感じ。ただ昨今のAI事情とAppleと他者の差を考えると、微妙といえば微妙。M1-&amp;gt;M2の40%くらいの進化が欲しかった。&lt;/p&gt;&#10;&lt;p&gt;ワットパフォーマンスの改善についてはMac mini目線故ノーコメントで。まぁラップトップならいいとは思う。&lt;/p&gt;&#10;&lt;h3 id="メモリ"&gt;メモリ&#10;&lt;/h3&gt;&lt;p&gt;メモリ容量が地味にパワーアップしている。18GBから36GB。……6の倍数……？🤔&lt;/p&gt;&#10;&lt;p&gt;違和感が凄い。&lt;/p&gt;&#10;&lt;p&gt;まぁもちろん容量が増えるのは歓迎なんだけれど、微妙なところである。18GBでは足りないからどうせ36GBに上げると思うけれど、32GBと36GBは恐らく体感的に変わらないんだよねぇ。つるしが24GBあったら盛らないという選択肢もあったんだけど……そうしたらかなり違ったと思う。&lt;/p&gt;&#10;&lt;p&gt;そしてメモリの帯域幅が地味に落とされている。うーん。まぁでもこれもやっぱり体感には繋がらないかなとは思う。思うけどさぁ……。&lt;/p&gt;&#10;&lt;p&gt;あと今回の比較対象ではないけれど、無印M3 MBPのメモリが8GBなのは何かの条約に違反しているのではないか。25万するマシンのメモリが8GBで増設不可ってMBP 2013の間違いかな？&lt;/p&gt;&#10;&lt;h3 id="価格と為替事情"&gt;価格と為替事情&#10;&lt;/h3&gt;&lt;p&gt;本国の価格は変わらず$2000のようだが、円安を反映してお値段もかなりアップグレードしている。為替は水物であるため、M3 Pro Mac miniが出たときにはまた変わるかもしれない。ただまぁ、昨今の情勢も踏まえると、Mac miniも同じような値上げ幅は覚悟しておいたほうがよいだろう。&lt;/p&gt;&#10;&lt;p&gt;為替による影響の重要な点は、「旧モデルが安くなっても相殺されうる」ということだ。つまり、M3 Pro Mac miniが出たらM2 Pro Mac miniは今より安くなることが期待されるが、為替のために結局変わらない、ということも十分にありえる（まぁ逆もありえるのだが……）。というか現状そういう現象は既に起きている。&lt;/p&gt;&#10;&lt;p&gt;僕がM3 Pro Mac miniを買うとしたらメモリだけ36GBに盛る（なんて違和感があるメモリサイズなんだ）と思うが、その場合は価格が28万くらいになりそうだ。そうすると、整備済み製品まで待った場合、今回と同じくらいの価格になることが期待されるわけだが、そうするとメモリが微妙に上がるものの、肝心のプロセッサ部分は微妙ということになる。&lt;/p&gt;&#10;&lt;h3 id="m3-proが出るまでの時間"&gt;M3 Proが出るまでの時間&#10;&lt;/h3&gt;&lt;p&gt;さて、今回まさかのM3 Pro MBPの発表であったが、M3 Pro Mac miniの発売までは時間があくだろう。さらに整備済み製品に並ぶまで待つぞなんて思った日には、やはり1年くらいは待つことになりそうである（1年後の為替はどうなっているんだろうか……）。時は金なり。今マシンがあることは1年後にマシンがあることよりも強い。&lt;/p&gt;&#10;&lt;h2 id="結論"&gt;結論&#10;&lt;/h2&gt;&lt;p&gt;以上のことから、&lt;strong&gt;M2 Pro Mac miniをM3前夜に買ってしまったことについては、「まぁ悪くない買い物だったか？🤔」というのが現時点における結論&lt;/strong&gt;だ。いや決して現実から目を逸らしているわけでは……。実際、たとえ今M2 Mac miniの整備済み製品が出たとしても、ポチるという行動を取ったような気がする。多分。多分ね。&lt;/p&gt;&#10;&lt;p&gt;詳細については各種ベンチマークが出るのを待つ必要があるのだが、スペックシートを覆すようなことになるとは考えづらい。まぁ、実際のところM2と比べて大幅なパワーアップではないために、M2 Pro MBPについては1年も待たずに新型発表でもいいだろ、ということになったのかもしれない。まぁM2 Proを出すのが遅すぎたっていうのはそうなんだろうね。&lt;/p&gt;&#10;&lt;p&gt;しかし代わり映えしないのもそれはそれでどうなんだという気はしなくもない。M1が出たときの衝撃は凄まじかったが、各社のキャッチアップも凄まじく、今となってはMacのアドバンテージはmacOSであることでしかないし、これは人によっては別にアドバンテージでもない。なんならディスアドバンテージである。まぁ僕にとっては大きなアドバンテージなので、結局Macを使っているのだが……。&lt;/p&gt;&#10;&lt;p&gt;全体的にワットパフォーマンスを優先しているために地味な感じになっている気はする。まぁAppleも今になって急にこんな情勢が変わるとは思っていなかっただろう。だいたいAIのせいだからなぁ。AI向けと考えると微妙感否めないけれど、Appleも認識しているだろうし、M4くらいからはまた変わってくるかもしれない。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://taisy0.com/2023/10/31/178936.html" target="_blank" rel="noopener"&#10; &gt;M3/M3 Pro/M3 Maxの各チップの仕様をM2シリーズと比較してみた ｰ M3 Maxは上位モデルと下位モデルでメモリ帯域幅に違いあり | 気になる、記になる…&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.apple.com/jp/newsroom/2023/10/apple-unveils-m3-m3-pro-and-m3-max-the-most-advanced-chips-for-a-personal-computer/" target="_blank" rel="noopener"&#10; &gt;Apple、パーソナルコンピュータ向けとして最も先進的なチップのM3、M3 Pro、M3 Maxを発表 - Apple (日本)&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://iphone-mania.jp/news-558322/" target="_blank" rel="noopener"&#10; &gt;M3 Pro、全てがアップグレードなわけではない? - iPhone Mania&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.techno-edge.net/article/2023/11/01/2177.html" target="_blank" rel="noopener"&#10; &gt;M3 MacBook ProをM2搭載モデルと比較。見た目は同じ、中身はどこが違う？ | テクノエッジ TechnoEdge&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gigazine.net/news/20231102-apple-m3-chip-geekbench-brower/" target="_blank" rel="noopener"&#10; &gt;Apple「M3」チップのベンチマーク結果が続々投稿されM2チップとの性能比が最大20％に上ることが明らかに - GIGAZINE&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gigazine.net/news/20231031-apple-m3-pro-max/" target="_blank" rel="noopener"&#10; &gt;Appleが次世代Mシリーズの「M3」「M3 Pro」「M3 Max」を発表、Mac向けとしては初の3nmプロセスチップに - GIGAZINE&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>M3前夜（？）にM2 Pro Mac miniをいじる</title><link>https://hack-le.com/m3-night-m2/</link><pubDate>Mon, 30 Oct 2023 03:21:37 +0900</pubDate><guid>https://hack-le.com/m3-night-m2/</guid><description>&lt;p&gt;M2 Pro Mac miniが届きました。土曜日に買って日曜日に届くのは嬉しい。セットアップできるから。まぁおかげで休日は潰れたけれど……いやむしろ正しい休日の使い方なんだろうか。&lt;/p&gt;&#10;&lt;h2 id="外付けssdが起動ディスク"&gt;外付けSSDが起動ディスク&#10;&lt;/h2&gt;&lt;p&gt;あれだけ腐していたMacをポチることになった主因は、真面目な話、外付けSSDを起動ディスクにする戦略がうまくワークすることがわかったからだ。さすがに512GBのストレージでゴチャゴチャやるのはもう嫌だった。かといって、AppleのSSDは阿呆ほど高い。メモリがCTO以外無理っていうだけでも酷いのに、これ以上SSDでも搾り取ろうってのか？という、反発心も大きかった。いや実際高すぎるよね。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、昨今の値下がりしたSSDを起動ディスクにして、内蔵ストレージと遜色ないのであれば、それだけでだいぶ良いかなと思えるようになる。実際、ベンチを取ったが性能的にも問題なさそう。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/DiskSpeedTest-1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;内蔵SSD&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/DiskSpeedTest.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;外付けSSD&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Writeは内蔵のほうが早いかな。Readは遜色ない感じ。なんでちょっとWrite遅いんだろうなぁ。まぁ体感できる違いではないだろうし、いいけどね。やはりストレージは大容量に限る。ちなみに内蔵SSDを1TBにしていた場合、速度も倍になるらしいので、その場合はパフォーマンスにだいぶ違いが出ることになるのだが、やはり体感できる違いではなさそうに思える。&lt;/p&gt;&#10;&lt;h2 id="性能がわかるのはこれから"&gt;性能がわかるのはこれから&#10;&lt;/h2&gt;&lt;p&gt;ひとまずセットアップは8割方済んだ。Intel Mac mini 2018からどれくらい性能が向上しているかはこれから少しずつわかることになるだろう。現時点ではブラウザで40タブ一気に開いた時にカクつかなかったくらいしか見られていない（Intel Mac mini 2018では少しカクついていた）。あとメモリプレッシャーがかなり低いということか。とりあえず画像のアップスケーリングとか、AI使った補正なんかは爆速になることが期待される。&lt;/p&gt;&#10;&lt;h2 id="m3発表前夜なの"&gt;M3発表前夜なの？&#10;&lt;/h2&gt;&lt;p&gt;ところでポチった時には知らなかったのだが、なにげに月末、つまり明日の夜だが、Appleのイベントがあるらしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-558044/" target="_blank" rel="noopener"&#10; &gt;31日に発表される新型Macが最終予想！M3搭載Airが遅れる理由も解説 - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;そういえばTwitterでそんなようなことをツイートしていた人がいた気がする。マジか。もっとちゃんと騒いで。&lt;/p&gt;&#10;&lt;p&gt;しかも発表の予想には、M3 iMacのみならずM3 Pro MBPがある。ここでM3 Proが発表されると、割と最悪なタイミングでM2 Pro Mac miniをポチってしまった可能性も出てくるので、正直今となっては発表しないでほしい気持ちだ。&lt;/p&gt;&#10;&lt;p&gt;ただ、これまでの例を考えると、このタイミングでM3 Proが発表される、というのはにわかに信じがたい。&lt;strong&gt;M2 Pro発表されたの今年やで&lt;/strong&gt;。あと円安が続いているので、現在のレートが反映される場合、新型が発表されたとしてもM2が安くなるかはちょっと微妙だとも思う。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよM3 Pro Mac miniが発表されるということはなさそうなのだが、若干のやっちまったか？感は正直ある。この情報を知っていたら果たしてポチっただろうか？&lt;/p&gt;&#10;&lt;p&gt;この疑問は微妙なところだ。前述したとおり、M3 Pro Mac miniの発売が後になるのはそうだろう。省電力の恩恵がさぽどないMac miniにおいては、性能アップも期待ほどではない可能性もある（&lt;a class="link" href="https://iphone-mania.jp/news-545592/" target="_blank" rel="noopener"&#10; &gt;M3/M3 MaxのGeekbench 6ベンチマークスコアを予測！〜今秋発表と噂 - iPhone Mania&lt;/a&gt;）。円安が続いていることから、価格改定があってもさほど安くならない可能性がある。&lt;/p&gt;&#10;&lt;p&gt;以上を踏まえたうえで、けっこうレアなRAMとプロセッサを持った整備済み製品に立ち会った時、たとえ翌々日に新型の発表があることを知っていたとしても、ポチった可能性はあるなぁ、と思う。なんか言い訳めいてるけど。まぁでも、M3の評価を見てから決めたかったのは確かだなぁ。&lt;/p&gt;&#10;&lt;p&gt;華々しい試算があるのも確かだし。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-530735/" target="_blank" rel="noopener"&#10; &gt;M3のベンチマーク予測〜シングルコアがM2 Max、マルチコアがM2 Pro超えか - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;さすがに無印M3がM2 MaxやProを超えるというのは眉唾だが。&lt;/p&gt;&#10;&lt;h2 id="m3-pro発表は信じがたい"&gt;M3 Pro発表は信じがたい&#10;&lt;/h2&gt;&lt;p&gt;ただ真面目な話、繰り返しになるが、そもそもM3 Pro MacBookProの発表というのは信じがたい。先にM3 MacBook Airでしょ。これについては、iPhone Maniaで以下のように解説されていた。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;これまでは、M1やM2などベースとなるApple Mシリーズチップが発表された後、M1 ProやM2 Proなどの拡張版が発表されてきました。&lt;/p&gt;&#10;&lt;p&gt;M3シリーズではそれとは異なり同時発表となることについてガーマン記者は、そもそも、&lt;strong&gt;M2の発表が遅れた&lt;/strong&gt;のが原因と指摘しています。&lt;/p&gt;&#10;&lt;p&gt;そのため、&lt;strong&gt;M2搭載MacBook AirをM3に切り替えるには間隔が短すぎる&lt;/strong&gt;ことから、このタイミングでM3を搭載するのはM2を搭載していない24インチiMacだけとなるようです。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://iphone-mania.jp/news-558044/" target="_blank" rel="noopener"&#10; &gt;31日に発表される新型Macが最終予想！M3搭載Airが遅れる理由も解説 - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;いやいや、切り替えサイクルが短いという理由でM3 MacBook Airが見送られるなら、M3 Pro MacBook Proこそ見送られることになるやん。M2 MacBook Air出たの2022年の7月、M2 Pro MacBook Pro出たのが2023年2月やで。それでなんでM3 Pro MBPが先に発表になるねん。&lt;/p&gt;&#10;&lt;p&gt;M3 iMacは確かに以前から噂されていたからわかる。ただM3 iMacだけじゃインパクト弱いのはそうだろうし、Macの販売不振も言われているから、テコ入れしたいのかもしれない。それにしたって、M3 MacBook Airが先だろう。一番望まれているのもそれだろうし。&lt;/p&gt;&#10;&lt;p&gt;すべては明日わかることか。まぁ、もうポチったから、何が変わるわけでもないんだけどね。&lt;/p&gt;&#10;</description></item><item><title>M2 Pro Mac Miniをポチった</title><link>https://hack-le.com/m3-mac-m2-pro-mac-mini/</link><pubDate>Sun, 29 Oct 2023 01:38:27 +0900</pubDate><guid>https://hack-le.com/m3-mac-m2-pro-mac-mini/</guid><description>&lt;p&gt;むしゃくしゃして注文した。反省はしていない。&lt;/p&gt;&#10;&lt;p&gt;（後日わからせられた）&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/m3-m2-pro-mac-mini/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/m3-m2-pro-mac-mini/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12980_1789621199.webp" alt="M3発表後にM2 Pro Mac mini 整備済み製品はお得といえるのかどうか" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="整備済み製品に出たので"&gt;整備済み製品に出たので&#10;&lt;/h2&gt;&lt;p&gt;Twitter見ていたら、Apple整備済み製品のモニタリングをしているアカウントからMac mini大量放出のツイートが流れていたので見に行ったのさ。まぁ元々はケチだからM2 Mac miniでSSD256GBなのにメモリ24GBっていうピーキーなやつを狙っていたんだけれど、それは出ていなかったね。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.apple.com/jp/shop/product/G16K3J/A/mac-mini-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81-8%E3%82%B3%E3%82%A2cpu%E3%81%A810%E3%82%B3%E3%82%A2gpu%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9Fapple-m2%E3%83%81%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;Mac mini [整備済製品] 8コアCPUと10コアGPUを搭載したApple M2チップ - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;その代わりに、M2 Pro Mac miniが放出されていた。しかも吊るしのやつじゃなくて、なんとCPUとメモリを盛ったやつが出ていたんよ。以下は共にメモリ32GB。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;221,800円: &lt;a class="link" href="https://www.apple.com/jp_edu_1460/shop/product/G170VJ/A/mac-mini-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81-12%E3%82%B3%E3%82%A2cpu%E3%81%A819%E3%82%B3%E3%82%A2gpu%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9Fapple-m2-pro%E3%83%81%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;Mac mini [整備済製品] 12コアCPUと19コアGPUを搭載したApple M2 Proチップ - 教育 - Apple（日本）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;193,800円: &lt;a class="link" href="https://www.apple.com/jp_edu_1460/shop/product/G1709J/A/mac-mini-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81-10%E3%82%B3%E3%82%A2cpu%E3%81%A816%E3%82%B3%E3%82%A2gpu%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9Fapple-m2-pro%E3%83%81%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;Mac mini [整備済製品] 10コアCPUと16コアGPUを搭載したApple M2 Proチップ - 教育 - Apple（日本）&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;いやこれは考えたね。ちょっと、いやけっこう欲しい。僕はケチだけどコンピュータは買う。今まで費やしてきた金を合計したら車買えるだろう。だが車より圧倒的に欲しいものだし、実際毎日使っているものなので後悔はない。特にMac miniのデスクトップは、買えばこれから年単位で毎日使うことが確約されている。だから本当は、M2よりもM2 Proのほうが欲しいんだ。当たり前じゃないか。&lt;/p&gt;&#10;&lt;p&gt;そしてこのモデル、迷っていたらすぐ売り切れることが容易に予想された。ちょっと珍しいからね。CTOしたモデルはAppleストア以外だとなかなか入手が難しいので、少しでも安く調達しようと思ったら整備済み製品が現実的。でもそんなに数はない。つまり、ただでさえ少ない供給に対して、需要は割と多めってことだ。まぁ売れるわな。&lt;/p&gt;&#10;&lt;p&gt;気がついたら、ポチっていた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/58d783a04a28b1b53dde2c47663dfc49-700x265.jpg"&gt;&lt;/p&gt;&#10;&lt;h2 id="盛ってるのはレアなので"&gt;盛ってるのはレアなので&#10;&lt;/h2&gt;&lt;p&gt;221,800円は久しぶりの高い買い物ではあるけれど、まぁでも盛ったモデルにナイスタイミングで巡り会えることはなかなかないんだ。実際、今見たら吊るし以外のやつは全部売り切れていたね。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/4aa4852d6f4eabd0f15ffab698d5b067-700x348.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://apple-refurb.mn-memo.com/macmini" target="_blank" rel="noopener"&#10; &gt;Mac mini 過去1ヶ月間の在庫状況 | アップルストア整備済製品 在庫履歴&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;上の細長ーい緑が当該のやつ。一番の売れ筋だったか。やはり。ちなみに吊るしのほうはまだ売っていた。&lt;/p&gt;&#10;&lt;p&gt;156,800円: &lt;a class="link" href="https://www.apple.com/jp/shop/product/FNH73J/A/mac-mini-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81-10%E3%82%B3%E3%82%A2cpu%E3%81%A816%E3%82%B3%E3%82%A2gpu%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9Fapple-m2-pro%E3%83%81%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;Mac mini [整備済製品] 10コアCPUと16コアGPUを搭載したApple M2 Proチップ - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;差額65,000円。SoC盛りで+28,000円、メモリ+16GBで+37,000円やね。メモリ32GBは必須としても、SoCの盛りはまぁちょっと贅沢ではあったな。Mac miniのしょぼい冷却性能を考えると、193,800円のほうでよかったかもしれない、とは思っていた。思っていたが盛った。全部盛った。&lt;/p&gt;&#10;&lt;p&gt;この価格帯だとM1 Mac Studioっていう選択肢も出てくる（ちなみにこれは整備済み製品にもけっこう顔を出している）。大きさはでかくなるが僕はまぁそれは別にいいと思っている。冷却性能も高そうだし。ただ、Neural Engineの性能がM1とM2だとだいぶ違うんだよねぇ。ということで、サイズ以外の性能的にもM2 Pro Mac miniのほうがいいかなと思っている。&lt;/p&gt;&#10;&lt;h2 id="脱macとはなんだったのか"&gt;脱Macとはなんだったのか&#10;&lt;/h2&gt;&lt;p&gt;ところでこのブログを見てくれている人だったら、「この数ヶ月さんざんMacを腐し続けていたのはなんだったんだよ」と思ったかもしれないし、あるいはM2 Mac mini整備済み製品のウォッチを始めていた時点でこうなることを予期していたかもしれない。まぁいずれにせよ脱Macは当分無理ですわ。Windowsを使えば使うほど、やはりMacだなぁと思ってしまう。&lt;/p&gt;&#10;&lt;p&gt;まぁ実際のところ、WindowsマシンはずっとAIぶん回しているし、それは多分今後もそうなので、結局普段使いはMacになってしまうんよな。なので、作ったコンテンツの編集するのは結局Macで、そうするとプログラミングには問題のないIntel Mac mini 2018も、画像だの音だの動画だのと考え始めるとちょっと荷が重い。アップスケールするだけでもプチフリみたいになるしねぇ。&lt;/p&gt;&#10;&lt;h2 id="m3出なかったし"&gt;M3出なかったし&#10;&lt;/h2&gt;&lt;p&gt;あと地味にきいているのが、10月中に出ると噂されていたM3 Macが出なかったことだね。いや、まだあと2,3日あるけど無理でしょさすがに。&lt;/p&gt;&#10;&lt;p&gt;（と思ったがイベント開催予定だったんだね。　&lt;a class="link" href="https://iphone-mania.jp/news-557343/" target="_blank" rel="noopener"&#10; &gt;大画面iMacも計画中！Appleの新製品発表、10月30日か31日に - iPhone Mania&lt;/a&gt; M3 Pro MBPはかなり信じがたい）&lt;/p&gt;&#10;&lt;p&gt;3nmのチップがあまりうまくいってないんだろうなーと思わされた。年内にはiMacで出るんじゃないの？という話ではあったけれど、この調子でいくとMac miniにのるのは早くても2024年の中盤以降になりそうだし、ましてM3 Proは2025年になりそう。まぁ別にそれまでIntel Mac mini 2018で戦えないことはないとは思うし、事実戦うつもりもあったんだけれど、まぁでもやっぱり物欲には抗えなかったよ……。&lt;/p&gt;&#10;&lt;p&gt;それにまぁ、電力的な意味でラップトップのほうは半導体プロセス微細化の恩恵多大かもしれないが、Mac miniのほうはそうでもないような気もした。いや、うーん、どうなんだろう。パワーアップするのかな？まぁでも、Proが出るのはいつになることやら、という感じだしなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁポチってしまった以上は、その性能をフルに活用すべく今後は技術の枠を超えハイパーメディアクリエイターだっけなんだっけまぁいいやなんでも明日届くの楽しみ。&lt;/p&gt;&#10;</description></item><item><title>31.5インチでWQHDなディスプレイを使い始めて6年以上</title><link>https://hack-le.com/31-5-wqhd/</link><pubDate>Sat, 14 Oct 2023 20:30:30 +0900</pubDate><guid>https://hack-le.com/31-5-wqhd/</guid><description>&lt;p&gt;Amazonのセールがあったので、そういえばそろそろディスプレイを新調しようかなと思った。かれこれ5年は使ってるよなと思って調べたら、購入したのが2017年7月だったので、6年3ヶ月ほど使っている計算だ。月日がたつのは早いモノだ。AcerのEB321HQUBbmidphxというやつで、31.5インチのWQHD(2560x1440)なやつだ。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14923&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;そういえば記事も書いた記憶があるなと思って検索したらあった。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/315-display/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini に31.5インチディスプレイ。iMacよりもでかいのだ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/315-display/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_5712_1789579499.webp" alt="Mac mini に31.5インチディスプレイ。iMacよりもでかいのだ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;うーん懐かしい。6年前か。まぁそろそろ頃合いよな。&lt;/p&gt;&#10;&lt;p&gt;なんてことを思って回ったのだけれど、ちょっとあまり食指が動かず、Acerのディスプレイにまだまだ頑張ってもらうことに決定。&lt;/p&gt;&#10;&lt;h2 id="6年前とあまり変わっていない感じ"&gt;6年前とあまり変わっていない感じ&#10;&lt;/h2&gt;&lt;p&gt;ざっと見たところ、6年前に見た時とあまり変わっていないような印象を受けた。いやまぁ、6年前の製品をそんなに覚えているわけではないのだけれど、感覚的に大きく進化した感じがない。まぁPCやスマホのように目に見える進化が大きい領域ではないし、こんなもんかなぁ。&lt;/p&gt;&#10;&lt;p&gt;ただこれは円安の影響も大いにあるとは思われ、ディスプレイなんて為替の影響をもろに受ける領域だし、当時と比較して3-4割増しになっているとすれば、為替で相殺されたという感じなのかもしれない。&lt;/p&gt;&#10;&lt;h2 id="4kも考えたけど"&gt;4Kも考えたけど&#10;&lt;/h2&gt;&lt;p&gt;そろそろ4Kにしてもいいかなとも思い、4Kの製品を見て回ったが、やはりまぁ4Kは高い。値頃なやつはVAだったりするし。ちょっとそれはな。&lt;/p&gt;&#10;&lt;p&gt;そもそも考えてみると、僕は別に4K動画を見たいわけでもないし、さりとて3840x1920をそのままするとさすがに小さいので、結局2560x1440に解像度を落として使う気がする。まぁそれでもそのほうがきれいなのかもしれないのだが、なんだかあまり意味がない。少なくとも、4Kのディスプレイにすることで僕のQoLは別に上がらないだろう、と思えた。&lt;/p&gt;&#10;&lt;h2 id="今のディスプレイもさほど不満はない"&gt;今のディスプレイもさほど不満はない&#10;&lt;/h2&gt;&lt;p&gt;今のディスプレイも十分に使えている。ディスプレイの寿命はまだまだ先だろう。入力ポートが3つしかないのは確かに不満ではあるのだが。DP, HDMI, DVIが1つずつしかないんだよねぇ。DVIとか使わんよ。DVI-HDMIとか変なケーブル使わせやがって。まぁ2017年に買ったものなので、しょうがない。HDMI切り替え機とかも使いたくないし、ここは確かに不便ポイント。&lt;/p&gt;&#10;&lt;p&gt;あとは入力切り替えの反応が遅いことだな。入力ポートの数に不満があるくらいなので、僕はディスプレイに色々な端末を繋いでいる。僕はMacとWindowsと、それにゲーム機。本当はこれにノートPCを繋ぎたいのだけれど、ポートがないので仕方ない。切り替え機はいやだ切り替え機はいやだ切り替え機はいやだ……。&lt;/p&gt;&#10;&lt;p&gt;そしてリモコンもないので、操作がたるい。PIPはたまに使うんだけれど、あれも画面下のボタンをポチポチ押してやるのはだいぶ苦痛。リモコンでさっと設定できればなぁと思うことはある。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、不満はそれくらいしかない、とも言える。発色とか気になるような人間でもないし。ゲームもそんなにしないし。まぁ操作性は確かにもうちょっとよくなってほしいけどねぇ。&lt;/p&gt;&#10;&lt;h2 id="買わなければタダなので"&gt;買わなければタダなので&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで、結局ディスプレイは買わないということに決めた。ウルトラワイドディスプレイとかはちょっとほしい気もしたけど、ああいうキワモノは解像度の対応とか色々めんどいしな。でもウルトラワイドディスプレイだったらPBPも使いどころあったりするのかな🤔&lt;/p&gt;&#10;&lt;p&gt;まぁでも現時点で使いどころが思い浮かばない。5Kだったら良いかもしれないがさすがに高いし。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14925&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;5Kディスプレイ買うくらいならゲーム機型PC買うわ。このゲーム機型PCはちょっとほしいんだよね。ASUSのやつで11万。たけぇ。でもこれだったら買ったきり積んでしまっているSteamのゲームもできる気がするんだよなー。あとアレな同人ゲームもできるね。まぁでもそのために11万払うならグラボ買うよな。むしろM2 Mac mini買うわ。つまり買わない。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/7-7-acer-31-5-display/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;7年7か月使ったAcerの31.5インチディスプレイが何もしてないのに壊れた&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/7-7-acer-31-5-display/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/02/display.webp" alt="7年7か月使ったAcerの31.5インチディスプレイが何もしてないのに壊れた" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;</description></item><item><title>Macのストレージのチェックは結局smartctlで済ませる</title><link>https://hack-le.com/mac%E3%81%AE%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%AF%E7%B5%90%E5%B1%80smartctl%E3%81%A7%E6%B8%88%E3%81%BE%E3%81%9B%E3%82%8B/</link><pubDate>Sat, 14 Oct 2023 15:56:46 +0900</pubDate><guid>https://hack-le.com/mac%E3%81%AE%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%AF%E7%B5%90%E5%B1%80smartctl%E3%81%A7%E6%B8%88%E3%81%BE%E3%81%9B%E3%82%8B/</guid><description>&lt;p&gt;今、メインのMac mini 2018はSSDの外付けキットを使って起動ディスクにしている。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-mini-2018-ssd-3weeks/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini 2018の起動ディスクを外付けSSDにしてから3週間&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-mini-2018-ssd-3weeks/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/09/2023-09-11-02.16.56-2-3-scaled.webp" alt="Mac mini 2018の起動ディスクを外付けSSDにしてから3週間" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Mac mini 2018を買ってから、あまりSSDの健康状態には関心を払っていなかった。まぁそこはさすがにAppleだし、問題なかろうと思っていた。が、今回は自前でSSDを調達している。しかも噂のHIKSEMI、確かにユーザの間での評判は上々だが、決して有名ブランドというわけではないし、不安感もある。&lt;/p&gt;&#10;&lt;p&gt;ということで、定期的に健康状態をチェックしたいと思った。&lt;/p&gt;&#10;&lt;h2 id="結局smartctl"&gt;結局smartctl&#10;&lt;/h2&gt;&lt;p&gt;まぁ要はS.M.A.R.T.の情報を見たいわけだが、今更コマンドラインも嫌だなぁと、&lt;a class="link" href="https://binaryfruit.com/drivedx" target="_blank" rel="noopener"&#10; &gt;DriveDx - the most advanced drive health diagnostics and monitoring utility&lt;/a&gt;を試しに使ってみたりしていた。こういうのはインタフェースも大事なもので、GUIでアプリケーション一覧からサクッと起動して一目で視認できるのは価値だと思う。$20なら悪くない。悪くない……悪く……ない……。&lt;/p&gt;&#10;&lt;p&gt;いやCLIでよくないか。どうせTBWと温度と健康寿命くらいしかみないしsmartctlコマンドでいいよね。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install smartmontools&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;インストールからの&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;smartctl -a /dev/disk1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでいいよね（/dev/disk0は元からの内蔵ストレージのほう）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/e0519eca0c091aa1a927319e4691e971.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;うん、まぁ、これで十分よね……。&lt;/p&gt;&#10;&lt;h2 id="drivedxも悪くないんだけど"&gt;DriveDxも悪くないんだけど&#10;&lt;/h2&gt;&lt;p&gt;たしかにDriveDxは画面きれいだし見やすいし立ち上げやすいけどさ……別にそんな色々みたいわけじゃないし。&lt;/p&gt;&#10;&lt;p&gt;昨今の円安もあって、消費税含めると$20で3500円くらいするんよ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/8dd3ced9a2b3c45fe3a962eea599da6a-700x276.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;さすがにちょっとつらいなーって。1000円くらいなら買ったかなと思うけれど、3500円だと何か別のものがほしくなる。他にやりようがなかったらともかく、あるからなー……。&lt;/p&gt;&#10;&lt;h2 id="結局コマンドラインなんだなぁ"&gt;結局コマンドラインなんだなぁ&#10;&lt;/h2&gt;&lt;p&gt;バックアップも結局rsyncでやっちゃってるし、なんだかんだでコマンドラインツールは便利なものが揃っていて有り難いと思う。最近は人間が運用する以上はインタフェースも大事だと思うようになったこともあって、金払ってでもGUIソフト買おうかなという気持ちがあったんだけれど、決まり切ったオプションを使ってたまに起動するだけの場合は、やっぱりCLIで十分なのかなとも思う今日この頃。&lt;/p&gt;&#10;</description></item><item><title>Pixel 7 から Pixel 8には乗り換えなかった</title><link>https://hack-le.com/pixel-7-pixel-8/</link><pubDate>Wed, 11 Oct 2023 00:47:48 +0900</pubDate><guid>https://hack-le.com/pixel-7-pixel-8/</guid><description>&lt;p&gt;僕は昨年の大盤振る舞いにホイホイつられたPixel 7ユーザなので、先日発表されたPixel 8もそこそこ注目していた。僕自身は生粋のAndroidユーザというわけではなく、だいたいAndroidとiPhoneを交互に使ってきている。狙ってそうしたというより、その時々でたまたまお値頃だったやつを買っている感じだ。&lt;/p&gt;&#10;&lt;p&gt;それで、記事も書いたがGoogleストアクレジットの使い道なさすぎ問題で有効期限が切れかかっていたこともあり、その使途としてPixel 8にも注目していたわけだ。まぁ結果的には、利用できる・受け取れるクレジットを加味しても乗り換えるほどではないなと判断。&lt;/p&gt;&#10;&lt;h2 id="pixel-8の進化"&gt;Pixel 8の進化&#10;&lt;/h2&gt;&lt;p&gt;Pixel 7からPixel 8にアップグレードすることで何が良くなるかと言えば、まず思い当たるのはSoCだろう。Tensor G2からG3になる。これによって処理速度が上がる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-555597/" target="_blank" rel="noopener"&#10; &gt;Tensor G3がG2を圧倒！Geekbench 6ベンチマークスコア判明 - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;しかしこれもG2に比べればという話であって、iPhoneと比べると無残にもiPhone 12時代のA14 Bionic以下であるという。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-555668/" target="_blank" rel="noopener"&#10; &gt;驚きの事実〜Tensor G3はA14 Bionicにベンチマークスコアで及ばず - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;こうなると、下取り価格がPixel 7とiPhone 12が同じクラスだったのも、iPhoneのシェアを奪うためというより「端末の価値がそれくらい」とGoogle自身認めているのではないかと穿った見方もしたくなる。つまりPixel 8はiPhone 13相当というわけだ。iPhone 15出てるんですけど。&lt;/p&gt;&#10;&lt;p&gt;まぁしかし、スマホでそこまでの高性能が必要なシチュエーションもそう多くはない。実際、僕なんかはユーティリティしか使わないので、Pixel 7の処理能力で別に困っていることはない。ただスマホでゲームしている人にとってはどうなんだろうね。&lt;/p&gt;&#10;&lt;p&gt;あとはまぁ、ディスプレイがパワーアップしていたり、多少の小型化が進んでいたりというのがポイントになるだろうか。&lt;/p&gt;&#10;&lt;p&gt;ソフトウェア方面ではAIを使った機能は何やら進化もしているようだが、使っていない。そもそもスマホの写真機能そこまで使っていない。OSのアップデートが7年保証されたのは、たとえそこまで使わなくてもリセールバリューにも影響ありそうなので悪くない。悪くないが、大騒ぎするほどでもない。&lt;/p&gt;&#10;&lt;h2 id="買い換えるほどではない"&gt;買い換えるほどではない&#10;&lt;/h2&gt;&lt;p&gt;まぁそんなこんなでPixel 7からは順当にパワーアップしていると言ってよいものの、では1年程度しか使っていないPixel 7から112,900円払って乗り換えるほどかといえば、それなりの下取り価格（Pixel 7で43100円、Proはやけに高くて7万くらい）を加味してもNoと言わざるを得ない。ストアクレジット30,000ポイントがついてくるものの、そのストアクレジットに使い道がないことは以前記事にしたとおり。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/google-store-credit/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/google-store-credit/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2023/10/ea2c70bff34560494e11be9aad7b7321.webp" alt="制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;唯一例外は、Pixel Watch 2が滅茶苦茶ほしくて、ポイントがあろうがなかろうが買う予定でした！という人であれば、ポイント分はまるっと値引きと考えられるので、買い換えも検討の余地がある、といったところではなかろうか。その場合はどうせならPixel 8 Proまで検討したい。&lt;/p&gt;&#10;&lt;h2 id="iphoneが見えてきた"&gt;iPhoneが見えてきた&#10;&lt;/h2&gt;&lt;p&gt;まぁ総じて高い。円安を考えれば仕方ない面もあるが、しかしiPhone 15と比べられてしまう価格というのは厳しい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://pc.watch.impress.co.jp/docs/news/1536761.html" target="_blank" rel="noopener"&#10; &gt;購入前に要チェック！Pixel 8とiPhone 15のスペックを総比較 - PC Watch&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;それでもiPhone 15に比べれば安いのも確かではある。ただほぼ同額のiPhone 14(112,800円)と比べられると厳しそうな気はする。iPhone 14とPixel 8、同じ価格なら世間の人がほしがるのは前者じゃないかねぇ。まぁ正直、定価の比較じゃつらいと思う。&lt;/p&gt;&#10;&lt;p&gt;つまり、ストアクレジットの使い道がある人、つまりPixel Watch 2やFitbitのトラッカー、Pixel Budsシリーズが欲しい人ならばアリってところかなぁ。&lt;/p&gt;&#10;</description></item><item><title>制約の多いGoogleストアクレジットに気をつけろ、実質○○円は全部罠</title><link>https://hack-le.com/google-store-credit/</link><pubDate>Mon, 09 Oct 2023 13:56:36 +0900</pubDate><guid>https://hack-le.com/google-store-credit/</guid><description>&lt;p&gt;去年、Pixel 7を購入していた。やけに高く設定されたiPhone SE 2の下取り価格と10%割引、さらに21000ポイントのGoogleクレジット（これは最悪だった）につられたのだ。僕のような人は多かったと思われ、実際この一年で2%から12%にシェア急上昇、iOSのシェアをそのまま食った格好である。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gigazine.net/news/20230929-iphone-pixel-share-japan/" target="_blank" rel="noopener"&#10; &gt;Google Pixelの日本市場シェアが前年同期6倍の12％に爆増、iPhoneは58％から46％に低下し2年ぶりに50％を下回る - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁ実際Pixel 7は価格自体為替レートを考慮しても安かったし、Googleとしてはまずシェア拡大を狙っていたのだろう。Pixel Budsシリーズも今は高いが、以前は異様に安かった。Googleはこういうことをするので、チャンスがきたら着実に狙っていきたいところ（Pixel Buds ProはBeats Fit Pro持ってるから買わなかったけど）。&lt;/p&gt;&#10;&lt;h2 id="実質xx円という罠"&gt;実質xx円という罠&#10;&lt;/h2&gt;&lt;p&gt;iPhone SE 2の下取り価格は35000円で、これは当時の中古市場を見ても高く設定されていたと言って良い。まぁわかりやすくiPhoneのシェアを奪おうとしてるよね。ただ当時むしろ出色だったのは、Pixel 4の下取り価格61500円だろうな。これを超える下取りは後にも先にもないだろう。これはマジでなんだったのか。それに加えてクレジット21000ポイントで、61500円+21000ポイントで実質82500円、つまり実質無料などとそこかしこで謳われていた。なんなら割引クーポンも含めて黒字とさえ言われていた。&lt;/p&gt;&#10;&lt;p&gt;僕はこの実質xx円という考え方が好きではない。これは毎日コーヒー一杯分の値段と同じような、売り手が買わせるために使う見せかけのテクニックだ。少なくとも買い手の思考方法ではないと思う。では&lt;strong&gt;買い手の考え方は何かというと、「何にいくら払うのか」というコストの総量とその対価&lt;/strong&gt;である。&lt;strong&gt;値引き以外引くな&lt;/strong&gt;。買い手にとっては値引きだけが正義だ。&lt;/p&gt;&#10;&lt;p&gt;たとえば前回のPixel 7で言えば、iPhone SE 2と引き換えに買ったわけだが、これはどのように考えられるかというと、以下のように考えられる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Pixel 7の代金は82500 - 8250 - 35000 = 39250円。&lt;/li&gt;&#10;&lt;li&gt;21000ポイントのGoogleクレジットが付与&lt;/li&gt;&#10;&lt;li&gt;iPhone SE 2は諸経費込みで約10000円。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;したがって、以下の対立軸となる。&lt;/p&gt;&#10;&lt;p&gt;10000円でiPhone SE 2 vs 50000円で1年のiPhonse SE 2 + それ以降Pixel 7 + 21000ポイントのGoogleクレジット&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;5万円から2万円を引いて実質3万円と考えるのではなく、5万円で2万ポイントを取得と考えるのがミソ&lt;/strong&gt;である。キャッシュバックなら値引きと同様に差っ引いても良いが（受け取り方法が煩雑なことがよくある、確実に受け取ること！！）、ポイントの場合はそうすべきではない。ポイントは金ではないため、使途が限られるからだ。&lt;/p&gt;&#10;&lt;h2 id="googleクレジットがゴミ引き換え券になる日"&gt;Googleクレジットがゴミ引き換え券になる日&#10;&lt;/h2&gt;&lt;p&gt;実際、このGoogleクレジットは現金とはかなり性質が異なる。GoogleクレジットはGoogleストアでしか使うことがないのだけれど、その品揃えが酷いのだ。PixelシリーズとFitbitシリーズのほかは、碌なモノがない。しかもそれらは定価であり、価格としてはかなり高い。では欲しいものが出るまでまとうと思うかもしれないが、ここで&lt;strong&gt;有効期限1年という、意図を感じる設定&lt;/strong&gt;に気づく。この何もない店で、1年以内に使う必要があるわけだ！&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;この邪悪な意図を持ったクレジットを現金と同じように考えるべきではない&lt;/strong&gt;。PayPayポイントやヨドバシのゴールドポイント、Amazonポイントなどはかなり現金に近いが、このGoogleクレジットはとんでもない。&lt;strong&gt;Googleクレジットは明確に現金よりも大きく劣る&lt;/strong&gt;。Google自らがこのクレジットを使って「実質」商法をしているのは（今回のPixel 8もクレジット込みで39800円からという書き方をしている！）、ヨドバシやAmazonやPayPayが培ってきた &lt;strong&gt;「現金に近いポイント」のイメージにフリーライドしている&lt;/strong&gt;と思う。ハッキリ言ってめちゃくちゃ印象が悪い。&lt;/p&gt;&#10;&lt;p&gt;現に僕はこのGoogleクレジットを使うことが出来ず、正直いらなかったGoole Homeのディスプレイ付きのやつを買った(4480円)っきり、使い道のわからないまま、有効期限当日を迎えることになった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/05636598bf02bc80f7f77c2e71f0ed74.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;悲しみのストアクレジット&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;こうなるともはや&lt;strong&gt;ゴミ引き換え券のような気分&lt;/strong&gt;である。恐らくもっとも賢い選択は、Pixel Budsあたりを買って現金化することであろう。もっといえば、去年の価格が安かった頃のPixel Buds Proを割引使って購入して転売するというのが、一番賢いやり方だったなと今となっては思う。ただあまりそういうことはしたくないのだよなぁ。&lt;/p&gt;&#10;&lt;p&gt;せっかくなので、全うに商品を買うという選択肢も考えた。たとえばPixel 7を下取りに出してPixel 8を買うとどうなるだろうか。Pixel 7も下取り価格43100円と、比較的悪くない設定がされている。&lt;/p&gt;&#10;&lt;p&gt;この場合は、以下のような考え方になる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Pixel 8は112900円&lt;/li&gt;&#10;&lt;li&gt;Pixel 7の下取り価格は43100円&lt;/li&gt;&#10;&lt;li&gt;Googleクレジットは16520ポイント使える&lt;/li&gt;&#10;&lt;li&gt;Googleクレジット30000ポイント取得する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;下取りは値引きと考えてよいので、Pixel 8は112900-43100=69800円相当。ただしPixel 7は1年の使用で終わり。つまり、&lt;/p&gt;&#10;&lt;p&gt;5万円で1年のiPhonse SE 2 + Pixel 7 + 現金(10000円くらいにはなる？) vs 12万円で1年のiPhone SE2 + 1年のPixel 7 + Pixel 8 + 30000ポイント&lt;/p&gt;&#10;&lt;p&gt;7,8万円近い差額が出る。そして再びいらないGoogleクレジットが付与される。これはキツい。&lt;/p&gt;&#10;&lt;p&gt;ということで、他にも色々と検討した挙げ句、Fitbit Sense 2 32,800円をポチった。これはこれで色々と問題が発生しており、後日記事にするがこの記事ではオススメはしない。ちなみにこれは定価で買ったが、巷のストアでは10%くらい値引きされているので、ここでもクレジットの制約がきいてしまっている。&lt;strong&gt;16520ポイントだが、実質13000ポイントだ&lt;/strong&gt;。そもそも、本当にこの製品が欲しかったかというところがもう微妙なのである。&lt;/p&gt;&#10;&lt;p&gt;最終的に、僕は以下の結果となったといえる。&lt;/p&gt;&#10;&lt;p&gt;65000円でiPhone SE 2を1年 + Pixel 7 + いらないGoogle Home(ディスプレイ付き) + Fitbit Sense 2&lt;/p&gt;&#10;&lt;p&gt;一応お得と言ってよいと思うが……Fitbit Sense 2の出来次第だなぁ。なんかちょっとバグってるっぽいんだよなぁ。たのむよー。&lt;/p&gt;&#10;&lt;h2 id="二重で計算してお得だと錯覚する愚"&gt;二重で計算してお得だと錯覚する愚&#10;&lt;/h2&gt;&lt;p&gt;ところでTwitterあたりを見ていて気になったのだが、クレジットや下取り価格を差っ引いて実質○○円論法をする人、ポイントが付与される時と使う時の両方に適用している人がちらほらいないか？&lt;/p&gt;&#10;&lt;p&gt;つまり、Pixel 7を買う時に21000ポイントつくから実質無料！と言ってPixel 7を買った人が、Pixel 8を買う時に、その21000ポイントをまたしても差っ引いて実質○○円！って言っているパターン。この場合、21000ポイントを2回適用しているので、42000円分お得になったと錯覚している。完全に売り手の思う壺。&lt;/p&gt;&#10;&lt;p&gt;これは下取りについても同じ。下取り価格を値引きと捉える場合、「元のデバイスを買った時の値段から差っ引く」か「新しいデバイスを買うときの値段から差っ引く」を徹底する必要がある。僕は新しいほうから引いてる。按分してもいいけど、ややこしくなるかな。いずれにせよ、下取り元の価格と新しいデバイス両方の価格を加味した上で一回だけ引くことが重要。&lt;/p&gt;&#10;&lt;p&gt;まぁ&lt;strong&gt;引き算するとこういう面倒くさいことが出てくるので、「結局トータルいくら払ったのか」で考えるのが大事なんだよね&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="pixel-watch-2がほしいならいいと思うよ"&gt;Pixel Watch 2がほしいならいいと思うよ&#10;&lt;/h2&gt;&lt;p&gt;ここまでグダグダと言ってきたが、もし、&lt;strong&gt;ポイントがなくても買うつもりだったくらいにPixel Watch 2がほしいなら、このGoogleクレジットには価値がある&lt;/strong&gt;。発売したばかりだから値下がりもないだろうし、クレジットをきっちり使い切れるので、かなり現金に近い。ついでに10000ポイントついてくるので、それを使ってケースでも買えばいいだろう（この場合は制約された用途なのでこのクレジットに10000円の価値はない）。もしPixel Budsシリーズもほしいなら、値引きはないもののこれも良い使い方と言える。&lt;/p&gt;&#10;&lt;p&gt;まぁしかしなんだな、Googleってこういう売り方するんだな、とは思ってしまうな。ただ、これはPixel 7の時の大盤振る舞いと、本質的に同じなのかもしれない。Appleは騙しみたいなことはしないけど、大盤振る舞いもない。&lt;/p&gt;&#10;&lt;h2 id="考え方はシンプル"&gt;考え方はシンプル&#10;&lt;/h2&gt;&lt;p&gt;まぁ色々書いたけど、考え方はシンプルで、 &lt;strong&gt;「結局全部でいくら払って、その結果何が得られたか」ということに尽きる&lt;/strong&gt;。実質○○円は、このシンプルな考えを妨害するための売り手の手法です。我々書い手がそのようなまやかしに付き合う必要はないのでな。真のお得を求める道はこれからも続くのだ。&lt;/p&gt;&#10;</description></item><item><title>M2 Mac mini 24GBの整備済み製品出ないかなって見てる日々</title><link>https://hack-le.com/m2-mac-mini-24gb/</link><pubDate>Mon, 09 Oct 2023 02:44:22 +0900</pubDate><guid>https://hack-le.com/m2-mac-mini-24gb/</guid><description>&lt;p&gt;108,800円のMac miniが出たら狙い目: &lt;a class="link" href="https://www.apple.com/jp/shop/product/G16K3J/A/mac-mini-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81-8%E3%82%B3%E3%82%A2cpu%E3%81%A810%E3%82%B3%E3%82%A2gpu%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9Fapple-m2%E3%83%81%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;Mac mini [整備済製品] 8コアCPUと10コアGPUを搭載したApple M2チップ - Apple（日本）&lt;/a&gt;（メモリ24GBなのにSSD256GBのピーキーなやつ）&lt;/p&gt;&#10;&lt;p&gt;なんかずっと見てる。もう脱Macする気ないやろという感じ。なさそう。まぁWindowsもMacもLinuxも全部使えばよかろうなのだ……。WindowsはWindowsで「&lt;a class="link" href="https://techtarget.itmedia.co.jp/tt/news/2308/10/news13.html" target="_blank" rel="noopener"&#10; &gt;Windows 11が永続ライセンスをなくして「毎月課金型OS」に生まれ変わる予感：どうなる「Windows 11」ライセンス【第3回】 - TechTargetジャパン システム運用管理&lt;/a&gt;」みたいな話もあるしね……。ってかサブスクになったらさすがに使わないなぁ。生成AIだけならLinuxでもできること多いしね……。&lt;/p&gt;&#10;&lt;h2 id="ほとんど出てこない"&gt;ほとんど出てこない&#10;&lt;/h2&gt;&lt;p&gt;ずっと見てるとは言ったものの、メモリ24GBのMac miniの整備済み製品が市場に放出されることはあまりない。あまりないとは言ったものの、USキーボードMacbookほどのレアものではなく、一ヶ月待っていったら1回くらいは出るという感じのようだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://apple-refurb.mn-memo.com/macmini/?list_type=list" target="_blank" rel="noopener"&#10; &gt;Mac mini 過去1ヶ月間の在庫状況 | アップルストア整備済製品 在庫履歴&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/10/31ceafebb87d1edb13a253a97ce415b5-700x280.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;画像の一番下のやつが狙い目のそれなので、まぁ月に1,2回、しかも出たら数時間、なんなら1時間ももたずになくなるという代物らしい。&lt;/p&gt;&#10;&lt;h2 id="本気でほしいかと言うと微妙"&gt;本気でほしいかと言うと微妙&#10;&lt;/h2&gt;&lt;p&gt;とはいえ、これくらいなら本気で狙っていればいつか手に入るかなという気はするものの、では本当にこれが売られている現場に立ち会えたら買うのかというと、ちょっと、いやかなり怪しい。ProではないM3 Mac miniは登場が近いかもしれないし、なによりこのブログでは何度も書いているのだが、Intel Mac mini 2018で今のところ特に困っていないからだ。&lt;/p&gt;&#10;&lt;p&gt;M2 MacBook Proを会社で使わせてもらっているが、これは確かにMBP 2019とはハッキリと体感が異なるものの、Mac mini 2018と比べた時にどうかというと、さほどでもない。ベンチ上は圧倒しているはずだが。まぁ実際のところコンピュータにおける作業というのは、スペックと線形にパフォーマンスがよくなるというものではなく、ある一定ラインを超えると飽和するものだ。で、Intel Mac mini 2018の6コア3GHzのCore i5は、今のところそたいていの作業においてまだ問題ないレベルであるらしい。開発作業においても特に困っていない……まぁこれは、自分は主にバックエンド開発が多いからかもしれない。&lt;/p&gt;&#10;&lt;p&gt;強いて言うならば、GPUを使うような作業はやはりしんどくて、たとえばPixelmatorのML超解像、つまりアップスケーラだが、これは今のMac miniではちょっとつらい。しかしこれはそんなに多用する機能ではない……少なくとも自分は。&lt;/p&gt;&#10;&lt;h2 id="中古macについて"&gt;中古Macについて&#10;&lt;/h2&gt;&lt;p&gt;ちなみに中古だが、Mac miniの中古は、わかったうえで買うならばまぁアリかなと思う。MacBookはキーボードやディスプレイと一体であるため避けたほうが無難だと思うけれど、Mac miniの場合は気をつけるべき点はさほど多くない。さすがに2014以前を今から買うのは古いOSがほしい特殊な人以外にはまったくオススメできないものの、2018以降ならば、外付けSSDを起動ディスクにしたりRAMを64GBにしたりして遊ぶのは、まぁリーズナブルだと思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.janpara.co.jp/sale/search/detail/?ITMCODE=245993&amp;amp;KEYWORDS=Mac&amp;#43;mini&amp;amp;OUTCLSCODE=3" target="_blank" rel="noopener"&#10; &gt;Apple Mac mini CTO (Late 2018) Core i5(3.0G)/16G/512G(SSD)/Intel UHD 630の詳細｜じゃんぱら&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;じゃんぱらだと中古の箱なしランクBが52,990円だった。割り切って使うならアリか。まぁM2よりあえてこっちを選ぶのはなかなかの好事家だと思うが……。&lt;/p&gt;&#10;&lt;p&gt;中古だとサポート的な意味での寿命が気になるが、最近はオブソリートになるまでの期間も長くて、Mac mini 2012なんか2022年になってついにオブソリート製品に加えられた。この傾向は今後も続くと思われ、Mac mini 2018もあと5年くらいはもつことが期待される。まぁ、AppleSiliconに全面移行というイベントがあったために、インテル系は早く手じまいされる可能性もあるかもしれないが、Mac mini 2014もまだオブソリートではないし、大丈夫でしょう多分。&lt;/p&gt;&#10;&lt;p&gt;そんなわけだから、M2 Mac mini 24GBを中古でGetという手もなくはないのだが、実際問題、売ってない。ニッチ過ぎる構成なのか。一応、聞いたことのないネットショップ、しかもGoogle検索のURLから別のドメインに飛ばされるという怪しさ満点のところで、相場より遙かに安いM2 Mac mini 24GB RAMが個人出品されていたりしたが、そんなの役満過ぎて買う気にはなれないよね。謎のネットショップで謎の個人から相場とかけ離れたモノ買えるか。&lt;/p&gt;&#10;&lt;p&gt;まぁまともなところでは売っていたとしても、最近の製品だと整備済み製品と比べても大して安くないだろうしね。ちなみにIntel Mac mini 2018の整備済み製品は今でも売られているのだが、大して値下がりしておらずとても高いので、これはまったくオススメしない。&lt;/p&gt;&#10;&lt;p&gt;115,800円: &lt;a class="link" href="https://www.apple.com/jp/shop/product/FXNG2J/A/Refurbished-Mac-mini-30GHz-6-core-Intel-Core-i5-Space-Gray?fnode=b70f516f6f194920da663b92b30aaf46084efca39754ea64e59eb80c2f539391fc40a3203dc0f4935a1f937bbb52e529685f9d2804491bb2776f49181c0db3542790787313e0870b378b52823cbff332" target="_blank" rel="noopener"&#10; &gt;Mac mini 3.0GHz 6コアIntel Core i5 - スペースグレイ [整備済製品] - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;5年前に僕が買った時の定価から3,4万程度しか下がっていない。誰が買うんだ。まぁ円安がきいてしまっている気はする。っていうか円安ほんとに困るね。&lt;/p&gt;&#10;</description></item><item><title>NotionはWebブラウザのほうが便利</title><link>https://hack-le.com/notion-web/</link><pubDate>Wed, 27 Sep 2023 23:18:07 +0900</pubDate><guid>https://hack-le.com/notion-web/</guid><description>&lt;p&gt;最近あった良いこととして、会社でNotionを使えるようになったことがある。プライベートでも使っているツールを、チームとして使える経験をもらえたのは良いことだ。また幸いなことに、一定程度の影響力を行使できる立場にあるので、限定的ではあるけれど、Notionをフルに使って開発作業にあたることができている。&lt;/p&gt;&#10;&lt;h2 id="デスクトップアプリの出来はあまりよくない"&gt;デスクトップアプリの出来はあまりよくない&#10;&lt;/h2&gt;&lt;p&gt;Notionにはデスクトップアプリがある。昔からのPCユーザの感覚だと、専用アプリがあるならそちらのほうがいいに決まっているだろう、と思ってしまうのだが、Notionについては残念な結果だった。&lt;/p&gt;&#10;&lt;p&gt;UIなど、何から何までWebアプリ版と同じで、違うところと言えば複数タブが開けるところくらいだと思う。でもタブの入れ替えという基本的なことも出来ず、ブラウザのタブ機能よりハッキリ言って貧弱であるため、これが機能アップとは言いがたい。&lt;/p&gt;&#10;&lt;p&gt;あとはまぁスタンドアロンのアプリなので、Dockから多少呼び出すやすくなった。&lt;/p&gt;&#10;&lt;p&gt;以上がデスクトップアプリを使って良かったことのすべて。ネイティブのアプリならパフォーマンスなどに期待したいところだが、残念ながら別にはやくなる感じはない。&lt;/p&gt;&#10;&lt;h2 id="webアプリには拡張機能がある"&gt;Webアプリには拡張機能がある&#10;&lt;/h2&gt;&lt;p&gt;まぁそれでも多少なりともいいところがあるなら使えばいいんじゃないの？という考えもあるかもしれないが、残念ながら（？）Webアプリ版のほうにこそデスクトップ版にはない大きなメリットがある。それは拡張機能だ。&lt;/p&gt;&#10;&lt;p&gt;特にsvgを直接編集できるようになるDraw.ioのNotion向けChomeエクステンションはめちゃくちゃ強力だ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chrome.google.com/webstore/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle/related?hl=ja" target="_blank" rel="noopener"&#10; &gt;https://chrome.google.com/webstore/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle/related?hl=ja&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これだけのためにWebブラウザ版使う価値がある。Notionの絵を描くにはMermaid記法しか使えないという大きな弱点を克服するものだ。プログラマはともかく、ビジネス層にMermaid記法で書いてくれとは言えないからねぇ。まぁそうでなくても、それなりに大きなアーキテクチャ図なんか、Mermaidで描いたらカオスだしね。カオスだった。&lt;/p&gt;&#10;&lt;p&gt;あと、個人的に最近使っているタイマーアプリTogglのエクステンションがNotionにも対応しているのがよかった。まだあんまり使いこなせてないけど。&lt;/p&gt;&#10;&lt;p&gt;ということで、拡張機能がある分Webアプリ版のほうがNotionについては明確に良い。&lt;/p&gt;&#10;&lt;h2 id="webアプリにネイティブの皮を被せても"&gt;Webアプリにネイティブの皮を被せても……&#10;&lt;/h2&gt;&lt;p&gt;まぁNotionに限らず、一時期からよく見かけるようになったWebアプリをそのまんまネイティブアプリにしたようなやつは、だいたいどれも拡張機能的な理由でWebアプリ版より劣る。アカウントの切り替えとかで多少の優位性があったりするが、それは拡張機能の不足を補えるものではない。開発費の関係でそうなってしまうんだろうなと思いつつ、だったらなくてええわ、というのがイチユーザとしての感触である。&lt;/p&gt;&#10;&lt;p&gt;むしろ、なまじっかWebアプリの出来がよいからこそ起きた悲劇なのかもしれない。EvernoteとかWebアプリ酷かったのに無理矢理UI統合して阿鼻叫喚だったからなぁ……今はもうよくなったのだろうか。&lt;/p&gt;&#10;&lt;p&gt;そんなこんなで、結局ブラウザ版のNotionを使っている。&lt;/p&gt;&#10;</description></item><item><title>Mac mini 2018の起動ディスクを外付けSSDにしてから3週間</title><link>https://hack-le.com/mac-mini-2018-ssd-3weeks/</link><pubDate>Sun, 24 Sep 2023 14:35:28 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-ssd-3weeks/</guid><description>&lt;p&gt;Intel Mac mini 2018の起動ディスクを外付けディスクにしてから、かれこれ3週間くらい経過する。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-mini-2018-nvme-ssd-boot/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini 2018に外付けSSDをつけて起動ディスクにした&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-mini-2018-nvme-ssd-boot/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12018_1789620831.webp" alt="Mac mini 2018に外付けSSDをつけて起動ディスクにした" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;あれから、ビックリするほど何も起きていない。いや、何か起きても困るのだが、正直もう少し色々起きるかなと思っていた。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;まぁ強いていうならば、振動などの物理的接触にはやはり弱く、筐体を手で触れて持ち上げたりなんだりしていたら落ちた&lt;/strong&gt;、ということはある。まぁでもこれはさすがにやったほうがギルティだろう。いや、なんか、温度大丈夫かなー、って気になって。&lt;/p&gt;&#10;&lt;h2 id="容量やドライブについて考えなくて良い"&gt;容量やドライブについて考えなくて良い&#10;&lt;/h2&gt;&lt;p&gt;一つのドライブですべてをまかなうようになって良いこととして、アプリケーションの容量について考える必要がないということがある。具体的には、XcodeやDockerなど、開発するうえで必要だが容量が馬鹿でかいものの扱いについて、あれこれと考えずに済むなぁということだ。&lt;/p&gt;&#10;&lt;p&gt;実際これらはMacで開発するうえで容量不足に陥る要因であり、検索すれば頑張って外部ストレージに逃がす方法を探すユーザの涙ぐましい努力の跡がある。そういったことから解放されるのは良いことだろう。それ以外でも、アプリケーションからの利用を前提とした時、外部ストレージをデフォルトにしていると何かと色々なことが起きるものである、と今は亡きiTunesのデータを外部ストレージにして色々あった身として思う。&lt;/p&gt;&#10;&lt;p&gt;まぁ、ストレージは一つで済むなら一つのほうがいい。&lt;/p&gt;&#10;&lt;h2 id="特に何も起きない"&gt;特に何も起きない&#10;&lt;/h2&gt;&lt;p&gt;何かトラブったら記事にしてやろうくらいの気でいたのだが、もう本当に何も起きない。何も起きないので、書くことがない。&lt;/p&gt;&#10;&lt;p&gt;冒頭で述べたとおり、外部SSDキットの筐体を触ってケーブルいじいじしていたら落ちることはあるが、それはさすがにそんなことするほうが悪い。&lt;/p&gt;&#10;&lt;p&gt;なんで触ったかというと温度が気になったからで、DriveDxで見ると45度付近をキープしているんだが、これもうちょっと熱いだろという気がする。ただ触れないような温度ではない。僕はけっこう大容量のファイルを転送することも多いが、それでサーマルスロットリングが起きたようなこともない。問題なさげ。&lt;/p&gt;&#10;&lt;p&gt;Thunderbolt利用時にBluetoothと電波干渉するという話もあった。実際最初に使った時はそういうこともあったし、その後も全くないこともないのだが、気になるほどではない感じ。&lt;/p&gt;&#10;&lt;p&gt;ということで、極めて良好に使えている、と言って良いだろう。マジでそれ以外なにも言うことないんです。&lt;/p&gt;&#10;&lt;h2 id="m系mac-miniも考え始める"&gt;M系Mac miniも考え始める&#10;&lt;/h2&gt;&lt;p&gt;外部ストレージを起動ディスクにするやり方は、M2 Mac miniでも実行しているユーザがいるので、今でも使える方法であるらしい。となると、あの馬鹿高いCTOをしなくても、多少不格好ではあるが、大容量かつ高速なストレージを実現できるわけで、それなりにリーズナブルな価格でマシンをリプレースすることも可能というわけだ。結局のところどこまでいっても価格の問題なので、それであれば検討しても良いかなと思える。&lt;/p&gt;&#10;&lt;p&gt;ただメモリだけはどうにもならないので、これは盛りたい。M2 Mac miniのSSD 256GB、メモリ24GBの整備済み品とか狙い目かもしれない。24GBあればとりあえず困らないだろう。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;24GB RAM &amp;amp; 256GB SSD: &lt;a class="link" href="https://www.apple.com/jp/shop/product/G16K3J/A/mac-mini-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81-8%E3%82%B3%E3%82%A2cpu%E3%81%A810%E3%82%B3%E3%82%A2gpu%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9Fapple-m2%E3%83%81%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;Mac mini [整備済製品] 8コアCPUと10コアGPUを搭載したApple M2チップ - Apple（日本）&lt;/a&gt; 108,800円&lt;/li&gt;&#10;&lt;li&gt;24GB RAM &amp;amp; 512GB SSD: &lt;a class="link" href="https://www.apple.com/jp/shop/product/G16LBJ/A/mac-mini-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81-8%E3%82%B3%E3%82%A2cpu%E3%81%A810%E3%82%B3%E3%82%A2gpu%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9Fapple-m2%E3%83%81%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;Mac mini [整備済製品] 8コアCPUと10コアGPUを搭載したApple M2チップ - Apple（日本）&lt;/a&gt; 127,800円&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;内蔵SSDはまったく不要なので、108,800円のほうでよい。ただピーキーな構成のためか、これらのモデルが整備済み製品に並ぶことはあまり多くない。本気で狙うなら、毎日見ることになるだろうな。在庫履歴を参考にしてる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://apple-refurb.mn-memo.com/macmini/?list_type=list" target="_blank" rel="noopener"&#10; &gt;Mac mini 過去1ヶ月間の在庫状況 | アップルストア整備済製品 在庫履歴&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/efa48dc70f184f71332f919dec3ac476-700x244.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;一番下のやつが狙い目。まぁ一ヶ月の間にまったく出てこないわけでもないらしい。&lt;/p&gt;&#10;&lt;p&gt;8GBRAM + 256GBが71,800円なので、メモリ+16GBのために37,000円か……というのは心情的には相当引っかかるところはあるのだが、まぁもう仕方ない。&lt;/p&gt;&#10;&lt;p&gt;M3 Mac miniが出たら整備済み製品も値下がりするだろうか？すると思いたいところだが、円安が続いているからなぁ。さすがにそろそろアメリカ経済も落ちそうな気がするし、日本のほうも低金利限界じゃないの？と思うんだけれど、為替ばかりはわからない。わかってたら大儲けしてるわけで、こんなケチな議論してない。&lt;/p&gt;&#10;&lt;p&gt;まぁ結局買わなきゃタダであることも事実なので、もう何百回同じ事言うんだという感じだが、&lt;strong&gt;今のIntel Mac mini 2018でも特に不自由がなかったりするので、なんだかんだでこのまま使い続けるのかもしれない&lt;/strong&gt;。&lt;/p&gt;&#10;</description></item><item><title>macOS版Dropboxで勧められるFile Providerの罠っぷりよ</title><link>https://hack-le.com/macos-dropbox-file-provider/</link><pubDate>Sun, 24 Sep 2023 07:30:34 +0900</pubDate><guid>https://hack-le.com/macos-dropbox-file-provider/</guid><description>&lt;p&gt;以前、Mac miniで外部SSDを起動ディスクにした時の記事を書いた。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-mini-2018-nvme-ssd-boot/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini 2018に外付けSSDをつけて起動ディスクにした&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-mini-2018-nvme-ssd-boot/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12018_1789620831.webp" alt="Mac mini 2018に外付けSSDをつけて起動ディスクにした" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この時一番引っかかったのは、起動ディスクにしたこととは直接関係がない、DropboxのFile Provider問題であった。これをオンにすると外部ストレージをDropboxの保存場所にできない。これは有名な問題で、この仕様が発表された時Dropboxのフォーラムは阿鼻叫喚であった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.dropboxforum.com/t5/Storage-Space/Disaster-Dropbox-removing-external-disk-support-for-Mac-users/td-p/659876" target="_blank" rel="noopener"&#10; &gt;Solved: Disaster: Dropbox removing external disk support f&amp;hellip; - Dropbox Community&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ユーザのフィードバックを受けて、Dropboxは当面外部ストレージのサポートを継続することを表明した。とはいえ、いつまで続くかはわからないし、そのうちにFile Provider使わなきゃいけないんだろうなぁ……と思って、外部ストレージを起動ディスクにして容量的な問題がなくなったので、利用を開始したのだが、これがもう最悪で、結局Dropboxをクリーンインストールしなおす羽目になってしまった。&lt;/p&gt;&#10;&lt;h2 id="帝王appleの推し進めるfile-provider"&gt;帝王Appleの推し進めるFile Provider&#10;&lt;/h2&gt;&lt;p&gt;Appleが推進するFile Providerという新機能は、オンラインストレージサービスに多くの影響を与えている。この機能は、ファイルの同期やアクセスを効率化する目的で導入されたが、その影響は一概に良いとは言えない。特に、Dropboxのような多機能オンラインストレージサービスには、いくつかの制約が生じている。これは、Dropboxが提供する多くの便利な機能と相反する場合があり、特に有料プランを利用しているユーザーにとっては深刻な問題となり得る。&lt;/p&gt;&#10;&lt;p&gt;公式ページの「&lt;a class="link" href="https://help.dropbox.com/ja-jp/installs/macos-support-for-expected-changes" target="_blank" rel="noopener"&#10; &gt;File Provider での Dropbox for macOS で予想される変更点 - Dropbox ヘルプ&lt;/a&gt;」にその制約がリストアップされている。これを見ればわかるとおり、機能の拡張よりも制約のほうが大きい。&lt;/p&gt;&#10;&lt;h2 id="保存場所の制限"&gt;保存場所の制限&#10;&lt;/h2&gt;&lt;p&gt;一番酷いのは、保存場所を勝手に決められてしまうことだろう。従来、Dropboxは保存場所を自由に選べる柔軟性があり、外部ストレージデバイスを同期の場所としてデータを保存することが可能であった。しかし、File Providerを使用すると、Appleが決めたCloudStorageとかいう場所に固定される。この結果として、保存場所がシステムによって自動的に設定され、外部ストレージデバイスを保存場所として選ぶことができなくなる。これはソフトリンクでは誤魔化せないらしい。&lt;/p&gt;&#10;&lt;p&gt;この制約は、大容量のデータを扱っているだろうDropboxの有料プランユーザにとって死活問題だ。世の中、Appleの馬鹿高いCTOに付き合える石油王ばかりではない。だが、Appleが20万取る4TB SSD（しかもNVme SSD)を、最近は3万足らずで買える。これを利用しているユーザは僕だけではないだろう。これが使えないなら、Dropboxを利用する意味もないくらいだ。&lt;/p&gt;&#10;&lt;p&gt;ただし、これは回避方法がないわけではない。外部ストレージのほうを起動ディスクとして設定すれば、CloudStorageも外部ストレージ上にできるため、この制約を回避できる。しかし、このリスキーな手法をDropboxのためにやるかというと、だいぶ厳しい。&lt;/p&gt;&#10;&lt;p&gt;……まぁ、僕はやったけど。そして、その結果、結局オフにしたけど……保存場所だけじゃないんだよなぁ。&lt;/p&gt;&#10;&lt;h2 id="lan内同期の制限"&gt;LAN内同期の制限&#10;&lt;/h2&gt;&lt;p&gt;DropboxのLAN（Local Area Network）内同期機能が使用できなくなるという制約がある。LAN内同期は、同一のローカルネットワーク内にある複数のデバイス間で高速にデータを同期する機能であり、これにより家の中にある複数端末を高速で同期させることができる。&lt;/p&gt;&#10;&lt;p&gt;しかし、File Providerを使用すると、このLAN内同期が制限される。データの同期がインターネット経由でしか行えなくなり、ローカルネットワーク内での高速なデータ転送が不可能となる。これは非常に不便だ。&lt;/p&gt;&#10;&lt;p&gt;この問題については、公式ページには「LAN 経由での同期は現在サポートされていません。」と書かれている。&amp;ldquo;現在&amp;quot;という言葉があることから、将来的にはサポートされる可能性がある。LAN内同期は非常に便利な機能なので、サポートを期待したいが、いずれにせよ、現時点では使えない。&lt;/p&gt;&#10;&lt;h2 id="オフラインアクセスの問題"&gt;オフラインアクセスの問題&#10;&lt;/h2&gt;&lt;p&gt;Dropboxのオフラインアクセスに関する挙動が変わる。僕が最終的に音を上げたのはこの問題のためだ。&lt;/p&gt;&#10;&lt;p&gt;多くのユーザーが期待するのは、すべてのファイルがローカルに保存され、オフラインでもスムーズにアクセスできる状態だと思う。しかし、実際にはこの期待に反して、ファイルはローカルに完全に保存されず、ファイルを開こうとするたびにインターネットからダウンロードが始まる。Finderなどのファイラでのプレビュー機能もこの制約によってうまく働かなくなる。&lt;/p&gt;&#10;&lt;p&gt;公式ページの文言を見ると、CloudStorage全体にオフラインアクセスを許可することで機能しそうに見えるが、実際にはうまく動かなかった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/dfa92f51d402c5044a581a598484b837-700x409.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;したがって、これが仕様通りなのかどうかはわからないが、少なくとも僕の環境ではうまくオフラインに落とせなかったことは事実だ。もちろん、容量は何の問題もない。なにしろ4TBもある。&lt;/p&gt;&#10;&lt;p&gt;そしてこれは、僕の場合には死活問題であった。僕は大量の画像ファイルを扱う場合っており、ファイルのプレビュー機能で画像を確認することも多いので、この制約は非常に不便だった。というか、はっきり言って仕事にならない。&lt;/p&gt;&#10;&lt;p&gt;結局Dropboxを入れ直すことになったのだが、一度File Providerの利用を開始する設定をしてしまうと、再インストール時にもその設定が残ってしまうらしく、それを忘れさせるのにもまた手間がかかった……。&lt;/p&gt;&#10;&lt;h2 id="一言で言うとicloudになる"&gt;一言で言うとiCloudになる&#10;&lt;/h2&gt;&lt;p&gt;僕が主に問題と感じたのは以上だが、Dropboxの公式ページを見ればより多くの制約がリストアップされているので、ユーザは必ず確認しておいたほうがよい。恐らく、ダウングレードだと感じることになるだろう。少なくとも現時点で、わざわざFile Providerを利用する積極的な理由は僕にはないと思うし、正直今後もないと思う。&lt;/p&gt;&#10;&lt;p&gt;この制約はAppleに端を発しているが、端的に言うと、&lt;strong&gt;iCloudになることをDropboxに強要している&lt;/strong&gt;と感じた。Appleは昔からクラウドサービスについてはあまり良いものを提供しておらず、実際iCloudを使っている人を僕はほとんど知らないのだが（確か母が写真のために一番安いプランを使っているが、それだけ）、Appleはその理由について反省することもなく、サードパーティをiCloud並に落とすことで解決を図っているようだ。&lt;/p&gt;&#10;&lt;p&gt;これらの変更は、大方のフリープランのユーザにとってはあまり気にならないものかもしれないが、ヘビーに利用している有料プランユーザにとっては許容しがたいものだと思う。そしてそれがDropboxに金を払っている層だ。&lt;/p&gt;&#10;&lt;p&gt;片手間でやってるGoogleやMicrosoftと違って、Dropboxは専業のオンラインストレージサービスであり、熾烈な競争を勝ち抜き、ビジネスユースのみならず一般のアマチュアにも支持された、この分野の雄である。フォーラムに届けられた阿鼻叫喚からも、事の深刻さを理解していると思うし、なんとか踏ん張ってAppleに負けないでほしいところだ。&lt;/p&gt;&#10;&lt;p&gt;……まぁでもどうなってもいいように、NASの準備を着々と進めているのであった……。&lt;/p&gt;&#10;&lt;h2 id="さいごに"&gt;さいごに&#10;&lt;/h2&gt;&lt;p&gt;ところで、この記事はChatGPTに記事を書かせる実験も兼ねて書いたのだが、結局8割方僕の文章になってしまった。別にそんなに時短になってないな。むしろ中途半端にChatGPTナイズされた文章があることで、違和感が大きくなるだけになってしまったかも。うーん。ChatGPTになかなかの文章を書かせている人もいるので、僕の指示の出し方に改善の余地が大いにあるのだろうと思われる。&lt;/p&gt;&#10;&lt;p&gt;まぁ、そもそも今回はトピックが特定のサービスに対する批判であったので、八方美人のChatGPTには難しかった、というのもあるかもしれない。ChatGPTはOpenAI社のリスク回避のため、少しでもリスキーな話題はとにかく避けようとするので。&lt;/p&gt;&#10;&lt;p&gt;僕の文章を学習させて、僕が書きたいトピックについて、いらんリスク回避をせずに8割方書いてくれるAIを作れんもんだろうか……。&lt;/p&gt;&#10;</description></item><item><title>Mac mini 2018に外付けSSDをつけて起動ディスクにした</title><link>https://hack-le.com/mac-mini-2018-nvme-ssd-boot/</link><pubDate>Mon, 11 Sep 2023 02:42:07 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-nvme-ssd-boot/</guid><description>&lt;p&gt;Mac mini 2018に外付けSSDをつけて起動ディスクにしました。これによって愛機Mac mini 2018はまだまだ第一線でガチれるということになりました。半導体プロセスの微細化が5nmから3nmにまで進むM3 Mac miniでたら、その性能とお値段次第ではポチってやってもええぞ（何目線だよ）。&lt;/p&gt;&#10;&lt;p&gt;……と、このブログを見てくれている人ならば「この数ヶ月脱Mac脱Mac五月蠅かったのはなんだったんだよ」となりそうだが（それともどうせこうなると思われていたか……）、人の心は移ろいやすいもの……などとぶつくさ言いながら、事実としてかれこれ13年Macユーザーなので、そこらへんのApple最高！と言ってiPadとMac比較している者より実はMac愛強いのではないかという気もしてきた。まぁWindowsも相変わらず触ってますよ。&lt;/p&gt;&#10;&lt;h2 id="買ったもの"&gt;買ったもの&#10;&lt;/h2&gt;&lt;h3 id="hiksemi-future-70-04tb"&gt;HIKSEMI FUTURE-70-04TB&#10;&lt;/h3&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/2023-09-08-23.36.36-700x527.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;SSDについてはHIKSEMIの4TB NVMe SSDです。ヒートシンクなしで27,800円でした。Gen4対応。R/W 7000MB/sクラス。1200TBW。どういうことなの。やっすい。まぁ実際、各所のレビューでは値段に比して才能が高いということになっており、またそれに納得できる外的要因もあり（米中対立のアレ。日本としてはアメリカに寄りつつも、適度に距離感保っておいしいとこほしいですね）、ということで話題沸騰の模様。&lt;/p&gt;&#10;&lt;p&gt;巷ではこれのチップ使っているところ全般を蝉族と称しているらしく、Amazonレビューでは当然のように蝉蝉言われていて最初は意味がわからなかった。みんなどこで情報やりとりしているんだろう。そんな蝉族で中身が一緒とされるMonsterとか、さらに安くて25,800円だったよ。まぁでも、一応蝉の親玉のほうが多少なりとも安心感あるか？という気もした。それにこの後買う外付けケースの値段まで合わせて考えると、2,000円の差分は誤差かなって。&lt;/p&gt;&#10;&lt;h3 id="外付けssdキットは地獄のサクラ大戦"&gt;外付けSSDキットは地獄のサクラ大戦&#10;&lt;/h3&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/2023-09-08-23.37.13-700x527.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;SSDだけあっても仕方ないので外付けドライブ化キットを用意する必要がある.今回は起動ディスクにしたいので、高いけれどもThunderbolt 3対応のものを選ぶことに。HIKSEMI FUTUREの高性能を少しでも活かしたいしね。&lt;br&gt;&#10;で、買ったのこれなんだけれど、サクラチェッカーでは危険度99%って言われてる中華確定演出。なんでそんなの買ったの？って思われそうだけど、サクラレビューのキットしかなかったんよ（&lt;a class="link" href="https://sakura-checker.jp/itemsearch/?word=m.2&amp;#43;ssd&amp;#43;%E5%A4%96%E4%BB%98%E3%81%91%E3%82%B1%E3%83%BC%E3%82%B9&amp;#43;thunderbolt" target="_blank" rel="noopener"&#10; &gt;m.2 ssd 外付けケース thunderboltのサクラレビュー分析結果一覧&lt;/a&gt;)。地獄のサクラ大戦状態でどうしようもなかった。&lt;/p&gt;&#10;&lt;p&gt;それだったら少しでも安いものをというのと、レビューに同じ構成で試した人がいたことと、またネジ止めタイプなので固定してずっと使うにはよさそう、という理由でこれにした。14000円ちょいしたけど、2000円クーポンやポイントも加味すると実質12000円ってところかな。&lt;/p&gt;&#10;&lt;h3 id="あわせて4万円"&gt;あわせて4万円&#10;&lt;/h3&gt;&lt;p&gt;ということで、SSDと外付けキット合わせて4万円弱という感じです。絶対値としては安くはないけれど、モノを考えると隔世の感がある。AppleのCTO価格を見た後に見ると心が浄化されるね。コスパこそ正義なんよ。っていうかさすがに+168,000円は意味がわからないよ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/eecb3d50194e5e297b712d98f52fba66.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;なにもぴったりしねぇよ&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;しかもこれ512GBからの上乗せでこうなので。20万くらいの価格設定らしい。庭から石油出る人限定モデルなんか。8TBのやつはもう目にも入らない。&lt;/p&gt;&#10;&lt;h3 id="drivedx"&gt;DriveDx&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://binaryfruit.com/drivedx" target="_blank" rel="noopener"&#10; &gt;DriveDx - the most advanced drive health diagnostics and monitoring utility&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これはソフトで、S.M.A.R.T.とかグラフィカルに確認できるソフトウェア。まだ買ってない（試用期間中）けど、買おうかなと思っている。$20ならまぁいいかなって。CLIでフリーのツールあるのはわかるけれど、見づらいし。やっぱこういうの見やすさ大事。&lt;/p&gt;&#10;&lt;p&gt;内蔵ディスクについては123TBWほどに達していて、健康寿命も86%とのことだった。はー、かれこれ4年半使ってるとはいえ、けっこう書き込んでたんだなぁ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/fc76be0482f52648098844cfd568aea7.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/f615963d1ecf87f4573625bf9841b0cc.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;帝王Appleはもちろんストレージの情報について公開していないが、一説によると、500GBストレージの耐久性は300TBW程度と言われている。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://createdtech.com/how-long-will-the-ssd-in-your-mac-last" target="_blank" rel="noopener"&#10; &gt;How Long Will The SSD In Your Mac Last? - Created Tech&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;まぁでも実際はもっと持つだろう、と言われている。まぁ実際、今のところMac mini 2018のストレージを使い切ったという話は聞かないね。基本的には心配しなくて大丈夫だろう。&lt;/p&gt;&#10;&lt;p&gt;あとずっと確認できていなかった、SanDiskのポータブルSSD Extreme Proの健康寿命も確認できた。100%だった。すごい（データ保管が主な役割だったためか、4.1TBW程度だったのもあるか）。&lt;/p&gt;&#10;&lt;h2 id="しばらく不安定だった"&gt;しばらく不安定だった&#10;&lt;/h2&gt;&lt;p&gt;HWの取り付けについてはまぁ説明書どおり。繋いだら繋がる。ディスクユーティリティからAPFSにフォーマットする。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/2023-09-11-02.16.56-2-700x382.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;例によって見せる気のない写真（一応少し拭いたんだけど……）&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;取り付け後のソフトウェア的な手順については、色々なところで書かれているとおり。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;例によって電源を切った後に起動してCmd + R&lt;/li&gt;&#10;&lt;li&gt;起動セキュリティユーティリティから外部ディスクを起動ディスクとして使うことを許可する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;この設定をすると、ログイン画面でHHKBが使えるようになるっぽくて、もっと前からやればよかったと思った&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;外部SSDにOSをインストール&lt;/li&gt;&#10;&lt;li&gt;ディスクを選んで再起動&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;で、ここから先はすんなり……とはいかず、けっこう何度も再起動することになったね。&lt;/p&gt;&#10;&lt;p&gt;僕の場合内蔵ストレージから移行アシスタントを使ったということもあり、例によってApple恒例鬼の許可待ち爆弾が炸裂した。で、どうも起動してしばらくは安定せず、許可コード打っている間にフリーズからの電源落ちを何度か経験してイライラ&amp;amp;不安。&lt;/p&gt;&#10;&lt;p&gt;さらに絶望したのが、Bluetoothの通信が不安定になったことだ。元々Mac miniはBluetoothの通信が不安定で、Trackpadを動かすとイヤホンがブツブツになるのは2012からずっとつきまとっていた。この問題はマイナーかもしれないが、困っている人はそこそこいるものと思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.mobile-com.net/apple/mac-mini-2018-usb3-wi-fi/" target="_blank" rel="noopener"&#10; &gt;Mac mini 2018でUSB3.1やThunderbolt 3の電波・ノイズ干渉に悩まされている話！Wi-Fi速度の低下や通信・Bluetooth接続が不安定に！ - モバイルドットコム&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これはかなり絶望したが、再起動したらなおった。伝家の宝刀の切れ味は2023年もなお健在なり。ただ再発することがないか、今もちょっと不安。&lt;/p&gt;&#10;&lt;p&gt;個別のアプリでハマったやつを言うと、Karabinerはdriverのdeactivateが必要だった。それくらいかな。Clipyも毎回「ログイン項目に追加されました」って言ってくるから、もしかすると再インストールとかしたほうがいいのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;ちなみに一番ハマったのはDropbox問題で発狂しそうになったんだが、これは起動ディスク化とは直接は絡まないのでまた別の記事で愚痴ります。。。Appleはクラウド音痴なのはわかっていたが、まさかDropboxをiCloud並に引き下げる作戦に出ていたとか思わんよ……。&lt;/p&gt;&#10;&lt;h2 id="一度安定してからは基本問題なし別の外付けssdをつけると落ちる"&gt;一度安定してからは基本問題なし、別の外付けSSDをつけると落ちる？&#10;&lt;/h2&gt;&lt;p&gt;さて、不安になりながら幾度もの再起動を経て、ようやく安定的に動いたかな？となってからは、特に何事もなく動かせている。スリープ後の復帰とかも問題ない。心配していたBluetooth通信の不具合も今のところは再発していない。&lt;/p&gt;&#10;&lt;p&gt;ただ一点、別の外付けドライブ……具体的には前述したSanDiskのExtremeだが……を取り付けたり取り外したりすると、フリーズして、その後、落ちる。これは起動ディスクを内蔵ストレージにしていた時には起きなかったので、外部ストレージを起動ディスクにしたためではないかと思う。ただもしかするとケースや外付けSSDとの相性問題もしれない。そこはわからん。おま環かも。まぁそうなりましたよ、という報告。&lt;/p&gt;&#10;&lt;p&gt;ちなみに取り付けたタイミングで落ちるが、その後取り付けたまま起動するとデータの出し入れを普通にできた。ただし、取り外したらまた落ちた。つまり、電源を落としたタイミングで取り付け・取り外しをすれば、一応使えるモノと思われる。まぁそこまでして使う気もないけどね。&lt;/p&gt;&#10;&lt;h2 id="パフォーマンス"&gt;パフォーマンス&#10;&lt;/h2&gt;&lt;p&gt;散々あげられているけれども、一応速度についても。&lt;/p&gt;&#10;&lt;p&gt;まず内蔵ストレージ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/DiskSpeedTest-internal.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;続いて外付けドライブ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/DiskSpeedTest-hk.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;READは落ちているが、驚くべき事にWRITEは内蔵ストレージを上回っている。すごい。。。ただHIKSEMI FUTURE本来の性能からはほど遠い。まぁこれは仕方ないね。ただ報告ではRead 3000MB/s出たというのもあったんだがなぁ。&lt;/p&gt;&#10;&lt;p&gt;オマケでSanDiskのExtreme 2TB。これくらいの速度でも実際たいていの作業では問題ないだろうあんと思う。昔はこれでも十分高速だと思ったモノだけどね。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/DiskSpeedTest.png"&gt;&lt;/p&gt;&#10;&lt;h2 id="様子見"&gt;様子見&#10;&lt;/h2&gt;&lt;p&gt;ということで、無事外付けSSDを起動ディスク化できました。まだ2日程度だけれど、いくつかのトラブルシューティングはしつつも、今のところは問題なく動いている。熱は45度くらいになっているが、ケース触るともっと熱いだろという感じもする。うーん。まぁでも、サーマルスロットリングが発生するような熱が出ていないことは確かだと思う。&lt;/p&gt;&#10;&lt;p&gt;Mac miniのネックはストレージだったが、外付けドライブがこれだけうまく動いてくれるなら、けっこうリーズナブルかも。あれだけ腐しておきながら、M3出たらポチってしまうかもしれない。いやまぁでも、今使っているIntel Mac mini 2018もまぁ十分使えるしねぇ。なによりメモリ32GBと潤沢だし。メモリもCTOすると高いからなー……。整備済みでメモリだけ持ったMac miniが狙い目かも。だいぶレアだと思うけど。&lt;/p&gt;&#10;&lt;p&gt;まぁなんにしても、とりあえず内蔵ストレージには昔のデータを置いておきつつ、NVMe 4TBライフを楽しんでいきたい。&lt;/p&gt;&#10;</description></item><item><title>経過報告 Crucial CT2000BX500SSD1 健康状態の悪化速度遅くなる？</title><link>https://hack-le.com/crucial-ct2000bx500ssd1-2/</link><pubDate>Mon, 04 Sep 2023 20:40:35 +0900</pubDate><guid>https://hack-le.com/crucial-ct2000bx500ssd1-2/</guid><description>&lt;p&gt;[itemlink post_id=&amp;ldquo;14824&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;ものすごい勢いで健康状態が悪化していたCrucialの2TB SATA SSDことCT2000BX500SSD1だが、ここにきて悪化の亜速度が遅くなっているようだ。ここ2週間は以前よりも書き込み量も減速しており、そのために遅くなったという可能性もある。&lt;/p&gt;&#10;&lt;h2 id="前回までのあらすじ"&gt;前回までのあらすじ&#10;&lt;/h2&gt;&lt;p&gt;前回の記事はこちら。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/crucial-ct2000bx500ssd1/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;着実に健康状態が悪くなるCrucial CT2000BX500SSD1の経過観察&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/crucial-ct2000bx500ssd1/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_11941_1789620952.webp" alt="着実に健康状態が悪くなるCrucial CT2000BX500SSD1の経過観察" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;この記事を書いたのが8/14で、この時84％。&lt;/p&gt;&#10;&lt;h2 id="2週間かけて-1"&gt;2週間かけて-1%&#10;&lt;/h2&gt;&lt;p&gt;予想では8/20くらいに83%になるのではないかと思われた。しかし、その後予想に反してパーセンテージが減らない日々が続き、ついに減ったのが9/3。なんと2週間ほどかかった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/09/d0f60727f161603f794335c207455883-1-700x719.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;これを表にすると以下のようになる。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;日付&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;総書き込み量&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;使用時間&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;健康状態&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;7/26&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4196 GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2842 h&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;88%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8/6&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4252 GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3038 h&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;85%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8/14&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4316 GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3196 h&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;84%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;9/3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4364 GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3596 h&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;83%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;まぁそれでも通常よりもかなり早い悪化速度には違いないが、もし今後のこのペースであれば、0%まで166週間かかるわけで、まぁ健康状態0%のものを使うのかというのは置いといて、改善しているのには違いない。この悪化速度がキープされるのか、それともまた5日で1%減っていくのか、それともどんどん健康になっていってこの健康状態を維持できるようになるのか。&lt;/p&gt;&#10;&lt;p&gt;ただ総書き込み量に着目すると、この2週間ほどは以前よりも書き込み量が少ない状態だった。今のところ、書き込み量と相関性もあるように見える。いずれにせよ、今しばらく経過を観察したい。&lt;/p&gt;&#10;&lt;h2 id="またssd買ってしまった"&gt;またSSD買ってしまった&#10;&lt;/h2&gt;&lt;p&gt;[itemlink post_id=&amp;ldquo;14821&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;ところでまたSSD買ってしまった。Amazonのセール出やすくなっていたからつい……。NVMe SSDの4TBが27,800円って本当にすごすぎる。しかもこれベンチも良好で評判もいい。今買わないといけない気がしたんだ……。しかもこれ、安いやつはもっと安いからね。円安を大きく上回るSSDの価格破壊。素晴らしい。自由競争は素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;ということで、結果的にはSATA SSDなんぞ買わなければよかったという感じなのだが、まぁこればっかりはねぇ。未来はわからないから仕方がない。&lt;/p&gt;&#10;</description></item><item><title>Mac mini 2018で外付けSSDを起動ディスクにしたい</title><link>https://hack-le.com/mac-mini-2018-ssd/</link><pubDate>Sun, 20 Aug 2023 18:18:38 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-ssd/</guid><description>&lt;p&gt;発端はDropboxのMacにおける外付けドライブサポート終了問題だった。正確には、オンラインストレージのデータはCloudStorageフォルダに置くことが強制されることになり、これが起動ディスク以外だと具合が悪いというものだ。まぁ、帝王Appleが例によってセキュリティの名目でサードパーティを締め上げているんだなと思った。&lt;/p&gt;&#10;&lt;p&gt;これはけっこう本当に困る。他のマシンとのデータのやりとりでDropboxは本当に便利なんだ。NASも購入したものの、やはりクラウド経由のDropboxの便利さにはかなわない（NASもメーカー謹製の同期ソフトとかあるけど、データが絡むだけにクオリティが心配……）。こうなったらもうWindowsに寝返ってやると考え、実際そこそこ使っている者の、WindowsマシンはAIをぶん回すのに忙しく、結局日常使いはMacのまま。というかまぁ、やっぱりなんだかんだでMacは使いやすい面もあるもので。&lt;/p&gt;&#10;&lt;p&gt;ということで、それなら外付けドライブを起動ディスクにしてしまえばよかろうというわけだ。&lt;/p&gt;&#10;&lt;h2 id="できるのはわかってるが運用はどうか"&gt;できるのはわかってるが、運用はどうか&#10;&lt;/h2&gt;&lt;p&gt;さて、外付けのSSDを起動ディスクにする、ということが理屈のうえでは可能なことはわかっている。ただ問題は、それで安定して運用ができるのかどうかだ。今使っているSSDも、時々予期せぬアンマウントがまったくないこともないし、果たして安定性はどうなんだろうか。&lt;/p&gt;&#10;&lt;p&gt;こういう時、メディア系の解説記事はあてにならない。頼りになるのは、実際にやってみて、それを使い続けている個人のブログである。ということで、色々と見てみる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ravfour.exblog.jp/30966692/" target="_blank" rel="noopener"&#10; &gt;Mac mini 2018 外付け起動ディスク化計画 : I rav,Mac!&amp;lsquo;23&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この方は容量不足を原因として、2022年の1月に外付けSSDの起動ディスク化を果たしている。その後2023年2月の「&lt;a class="link" href="https://ravfour.exblog.jp/32858763/" target="_blank" rel="noopener"&#10; &gt;Mac mini 2018 購入4周年 : I rav,Mac!&amp;lsquo;23&lt;/a&gt;」の記事でも外付けSSDを起動ディスクにしていると書かれているし、また6月には直接言及していないものの、新しいMac miniの候補について考えていることから、変わらず健康に使い続けられているのだろうと推測される。つまり、1年半以上問題なく運用できているということだろう。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://way2go.netlify.app/old/" target="_blank" rel="noopener"&#10; &gt;Macmini 2018を外部SSDで起動 - Way2Go&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この方は2021年2月に外部化を果たしている。2023年6月にMac Studioに乗り換えられているようだけれど（&lt;a class="link" href="https://way2go.netlify.app/2023-macstudio-order/" target="_blank" rel="noopener"&#10; &gt;Mac Studio 注文しました - Way2Go&lt;/a&gt;）、2年4ヶ月にわたって外付けで安定的に運用できていたということだろうか。ストレージ不足は理由にあっただろうが、「Thunderbolt3ケースとM.2の組み合わせは、内蔵SSDより高速」ということも理由にあげている。Thunderbolt3ケースは15000〜20000円程度とヤケクソに高いが、それでもMacのCTOに比べれば爆安。Thunderboltケース何使ったんだろう。Yottamasterなのはわかる。&lt;/p&gt;&#10;&lt;h2 id="注意ポイントっぽいもの"&gt;注意ポイントっぽいもの&#10;&lt;/h2&gt;&lt;p&gt;以下は先人たちが引っかかったところ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ファイルシステム&#10;&lt;ul&gt;&#10;&lt;li&gt;APFSを選択すること&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;T2チップの罠&#10;&lt;ul&gt;&#10;&lt;li&gt;デフォルトで外部起動が許可されていないので、明示的に許可すること&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;もうちょっと色々あるかなと思ったが、特にそれらしい記事は見当たらず。ということは、環境構築はもちろん、運用においてもさほど支障はなかったのだと見てよいのではないか。&lt;/p&gt;&#10;&lt;p&gt;作業自体は億劫ではあるものの、やる価値はありそうだなと思える。&lt;/p&gt;&#10;&lt;h2 id="高速大容量ストレージの夢を追ってもいい"&gt;高速大容量ストレージの夢を追ってもいい&#10;&lt;/h2&gt;&lt;p&gt;今使っているのは最近お騒がせだった（&lt;a class="link" href="https://gigazine.net/news/20230522-sandisk-ssd-mount-error/" target="_blank" rel="noopener"&#10; &gt;SanDiskのSSDで「データが突然消える」などの症状が報告される - GIGAZINE&lt;/a&gt;）SanDiskのエクストリームモデルの2TBのやつで、まぁこいつをそのまま起動ディスクにしてもいいかなと思う一方で、どうせだったら夢を追いかけて、3万もあれば買えるようになった4TB NVMeを繋いでみても面白いかなぁ、とかなんとか思っている（上位モデルはさすがにもっとするが……）。MacのCTOだと4TBは+168000円という馬鹿げた値段設定がされているが、外付けで実現すれば、Thunderbolt3対応のケースが2万したとしても、SSDと合わせて5万程度。このコストメリットは非常に大きい。&lt;/p&gt;&#10;&lt;iframe sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B0BCP3L7JL&amp;linkId=aad4788c942b07b155a557972b14da1a"&gt;&lt;/iframe&gt;&#10;&lt;p&gt;ちなみにAmazonだとCrucialブランドのP3が23800円、PCIe Gen4対応のP3 Plusが24500円という驚くべき価格で売られている。Crucialブランドでこれはすごいと思ったが、冷静に考えてみると自分は今まさにCrucialのSATA SSDで悲しい気持ちになっている真っ最中である（&lt;a class="link" href="https://hack-le.com/crucial-ct2000bx500ssd1/" &gt;着実に健康状態が悪くなるCrucial CT2000BX500SSD1の経過観察 - 或る阿呆の記&lt;/a&gt;）。それで気になって調べてみたら、果たして、評判は芳しくなかった（参考: &lt;a class="link" href="https://chimolog.co/bto-ssd-crucial-p3-plus/#Crucial_P3_Plus-5" target="_blank" rel="noopener"&#10; &gt;Crucial P3 Plusレビュー：ひどい性能ですが、PS5専用に使うならアリ | ちもろぐ&lt;/a&gt;）。この評価を見ると、他の格安SSDと並んで最安なのもさもありなんという感じ。一定以上の容量を使うと速度がめちゃくちゃ遅くなるようだ。うーん、Crucial今こんな感じなのかー……。&lt;/p&gt;&#10;&lt;p&gt;評判のよくないブランドものに手を出すくらいなら、謎メーカーではあるけどこういうのに手を出してもよいかもしれない。&lt;/p&gt;&#10;&lt;iframe sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B0CB6CMH9Q&amp;linkId=ea42e72aed20bf73a5cd460cb1f8b7ac"&gt;&lt;/iframe&gt;&#10;&lt;p&gt;29800円だが、こちらはなんとThunderbolt3の転送速度40Gbpsを超える7000MB/s級のR/Wを誇る。恐ろしい。いや、まぁ、Thunderbolt3の転送速度超えたらオーバースペックなんだが。謎とは言ったが、上記のブログによると、少なくともベンチマークはなかなかのものであったようだ（参考: 「&lt;a class="link" href="https://chimolog.co/bto-ssd-hiksemi-future/" target="_blank" rel="noopener"&#10; &gt;HIKSEMI FUTURE NVMe SSDレビュー：コスパの良さは認めざるをえない | ちもろぐ&lt;/a&gt;」）。まぁもちろん長期間の信頼性がどうかはわからないのだけれど、少なくともちょっと使っただけで化けの皮を剥がされたCrucialのP3 Plusよりはまだこちらのほうが良い気もする。&lt;/p&gt;&#10;&lt;p&gt;ちなみに同じようなものでLexarというのもある。&lt;/p&gt;&#10;&lt;iframe sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B0C9LMJR17&amp;linkId=a143f840d145a3a2bb6afd24eb15012d"&gt;&lt;/iframe&gt;&#10;&lt;p&gt;Lexarは知らなかったが、これもCrucialと同じくMicron傘下のブランドであったらしい。今は中華。「&lt;a class="link" href="https://chimolog.co/bto-ssd-lexar-nm790/" target="_blank" rel="noopener"&#10; &gt;Lexar NM790レビュー：元Micronの傘下ブランドが放つ破壊的コスパSSD | ちもろぐ&lt;/a&gt;」によると（このブログほんとすごいね）、こちらもベンチの結果は上々のようだ。Crucialよりよく見えるんですがそれは……。&lt;/p&gt;&#10;&lt;p&gt;Crucialがここまで下がったなら、他のブランドも追従するか？と思う一方、「&lt;a class="link" href="https://www.bcnretail.com/research/detail/20230815_352256.html" target="_blank" rel="noopener"&#10; &gt;内蔵SSD市場、ようやくGB単価の下落止まる - BCN＋R&lt;/a&gt;」という記事もあるので、さすがにそろそろ底を打ったような気もする。&lt;/p&gt;&#10;&lt;p&gt;まぁ別に無理に買うことはないのだけれど、ケース含めて5万ほどで内蔵ストレージより早くて大容量の環境が整えられるかもしれないと思うと、中々浪漫があり、やってしまいたくなるねぇ。これがうまくいけば、ネックだったストレージ問題が解決するわけだから、噂のM3以降のMac miniも、場合によってはポチることもあるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;脱Macとはなんだったのか。まぁ結局なんだかんだいってMac好きなんだろうねぇ、僕は……。&lt;/p&gt;&#10;</description></item><item><title>結局M3 Macも気になっているけど、Intel Mac mini 2018も戦える</title><link>https://hack-le.com/m3-mac-intel-mac-mini-2018/</link><pubDate>Thu, 17 Aug 2023 14:17:52 +0900</pubDate><guid>https://hack-le.com/m3-mac-intel-mac-mini-2018/</guid><description>&lt;p&gt;このブログでは最近Macについては愚痴めいた記事が多く、Windowsに乗り換えるぞ乗り換えるぞと言い続け、まぁ実際多くの作業をWindowsでやるようになっており、しっかりと役割を担うようになっている。が、メインマシンというよりはAIぶん回し用マシンという感じで、常に負荷がかかっているため、結局メインで使っているのは相変わらずIntel Mac mini 2018だったりする。そして特に支障もない……。&lt;/p&gt;&#10;&lt;p&gt;そして最近そろそろM3 Mac出るっぽいという噂を聞くにつれ、なんだかんだで気になってしまうわけだ。&lt;/p&gt;&#10;&lt;h2 id="そもそもの発端はストレージの問題"&gt;そもそもの発端はストレージの問題&#10;&lt;/h2&gt;&lt;p&gt;そもそもMacをいい加減やめようかと思った根本的な理由は、クラウドストレージをCloudStorage以下に置くことを必須とする新仕様のために、外付けSSDでのDropboxの同期が難しくなる、ということが発端だった。若干ニッチな理由ではあるし、もちろんこれだけの理由ではないのだが、引き金はこれ。&lt;/p&gt;&#10;&lt;p&gt;ただまぁ、その後あれこれ調べていくと、外付けSSDをブートドライブにするという荒技は現在でも有効らしく、であればホームフォルダも必然的に外付けSSD上になるわけだから、CloudStorageもそちらに置かれるわけで、Dropbox問題も必然的に解決することになるだろう。まぁあんまりやりたくないことではあるが……。&lt;/p&gt;&#10;&lt;p&gt;まぁ、Dropboxの問題がなかったとしても、MacのストレージはCTOだとめちゃくちゃ高いので、据え置きのMac miniならば、安くなった外付けSSDをメインドライブにするというのはけっこう現実的な選択肢かもしれない。最近SSDは本当に安くなったし、外付けでもストレージとしては問題なく速い。4万出せば4TBの外付けSSDが買えるのは魅力的な選択肢だ。気兼ねなくDockerでコンテナをたくさんつくれる。&lt;/p&gt;&#10;&lt;p&gt;実際、ちょっと調べてみるとそういう選択をした人たちの記事がよく引っかかる。Mac miniユーザはAppleユーザの中でもコスパ志向が高く、Appleとの距離感も近すぎない人が多いよなと思う。メインがMacだとしても、必要ならWindowsやります、なんならLinuxでもって人が多い。僕もそうだ。&lt;/p&gt;&#10;&lt;h2 id="macでもいいならm3が気になり始める"&gt;MacでもいいならM3が気になり始める&#10;&lt;/h2&gt;&lt;p&gt;外付けSSDを起動ディスクにするのはなかなか骨が折れる作業になると思われるので、作業するのは当分後にしたいところだが、しかしいつまでもMontereyでいるわけにもいかないし、気乗りしないがそろそろ移行のタイミングだろうか。&lt;/p&gt;&#10;&lt;p&gt;外付けSSD起動ディスク化計画がうまくいった場合、ネックだったストレージ問題・Dropbox問題が解決することになるので、そんなら次もMacにしてもいいかなという気が途端にしてくる。この問題、自分の中でかなり大きかったんだなぁ。&lt;/p&gt;&#10;&lt;p&gt;そうすると、昨今のM3 Macの噂もまた気になり始める。AI用途ではまだまだ当分期待できそうもないのが現状ではあるが、別にPCの用途というのはAIだけではなく、というかむしろAI用途のほうが特殊なわけで、普段使いのPCとしてはMacも断然アリではある。&lt;/p&gt;&#10;&lt;p&gt;M3は半導体プロセスの微細化が進むので、性能の大きな向上が期待される。Intel Mac mini 2018と比べて良くなるようならば、購入も選択肢に入ってくる。&lt;/p&gt;&#10;&lt;h2 id="intel-mac-mini-2018もまだまだ戦える"&gt;Intel Mac mini 2018もまだまだ戦える&#10;&lt;/h2&gt;&lt;p&gt;まぁとはいえ、普段使いという意味では別にIntel Mac mini 2018でも現状まったく困っていなかったりする。「まだIntel Mac使ってるの？？？」みたいな煽りを時折見かけるが、あれで比較されているのはほとんどMBPで、確かにMBPだとIntel Macはそろそろしんどくなってきたとは思う。特にMBP 2019は、使っている感じ、CPUのクロックがさすがに貧弱過ぎるよなと思う。2020だともうちょっとマシになっているはずだが。&lt;/p&gt;&#10;&lt;p&gt;しかしMac mini 2018は今でも問題なく使える。さすがにエントリーモデルほうだとつらかったと思うが、ミドルレンジのIntelでも6コア3GHz以上であれば、今でもまったく問題がない。仕事でM2 Pro MBPも使っているが、それと比べても別に悪くないと思う。なんならこちらのほうがよいとすら思っている。メモリ32GBあるし。やろうと思えば64GBにも増設できるし。まぁGPU使うような作業だったら断然MBPだろうが。画像処理とか。&lt;/p&gt;&#10;&lt;p&gt;ああ、そういえばPixelmatorでアップスケールとかすると、Mac mini 2018だとさすがにつらい処理のようで、重くなるなぁ。時間もけっこうかかるし。まぁでも、アップスケールなんてブログの画像作る時くらいにしか使わないし、もしまとめてやる必要があっても、その時はWindowsマシンでやればいいし。&lt;/p&gt;&#10;&lt;p&gt;などとグダグダ考えていると、たとえM3 Macが魅力的なマシンであったとしても、実際に買い換えるかは微妙である。重い処理はGPU載せたWindowsマシンでやればよいし、それ以外の処理は現状Intel Mac mini 2018でも問題ない。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、PCは消耗品だし、より良いマシンにアップグレードできる環境が整っているのは良いことである。&lt;/p&gt;&#10;</description></item><item><title>着実に健康状態が悪くなるCrucial CT2000BX500SSD1の経過観察</title><link>https://hack-le.com/crucial-ct2000bx500ssd1/</link><pubDate>Wed, 16 Aug 2023 09:28:57 +0900</pubDate><guid>https://hack-le.com/crucial-ct2000bx500ssd1/</guid><description>&lt;p&gt;半年ほど前、つまり2023年の2月になるが、CrucialのSATA接続な2TB SSDを購入した。当時14100円は破格であった。その後のSSDの価格下落のため、今となっては別に取り立てて安くもないお値段なのだが、その時点においては安かった。今見てみたら13089円と多少の値下がりはあるものの、「早まったー」と後悔するほどでもなく、お値段的には良い買い物であったと思っている。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14824&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;しかし、その後実際に使っていると、平均ブロック消去回数がどんどん悪化して、CrystalDiskinfoの健康状態の数値がみるみる減っており、とても不安な気持ちになっている。その経過観察。&lt;/p&gt;&#10;&lt;h2 id="88---85---84"&gt;88% -&amp;gt; 85% -&amp;gt; 84%&#10;&lt;/h2&gt;&lt;p&gt;まず7/26に書いた前回の記事を貼っておこう。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/crucial-2tb-ssd/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Crucialの2TB SSDの寿命が減っていく&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/crucial-2tb-ssd/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_11712_1789621016.webp" alt="Crucialの2TB SSDの寿命が減っていく" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;このときは88%であった。が、実はこの記事を書いた直後に87%になっている。デフラグのスケジュールを見直したり、Crucialのソフトウェアを入れたりと色々やってみたが、抵抗も空しく、その後、8/6には85%になったことを確認している。さらにその後、8/14には84%になってしまった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/08/image-700x719.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;8/6&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/08/a59997b286649c42074bffa871dfd481.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;8/14&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;既に総書き込み量との関連性はまったく見受けられない。もしあったらこのSSDは25TBWくらいしかない。&lt;/p&gt;&#10;&lt;p&gt;前回の記事にも書いたが、噂によると、連続使用時間が長くなると寿命が短くなるという謎のバグがMX500シリーズではあったらしい。BX500でも同様のことがあるとすれば、使用時間と電源投入回数からもしかすると関連性が見えてくるかもこないかも。気持ち再起動なちょこちょことやっていたら、パーセンテージが減るスピードは少し遅くなった……ような気もする。今のペースだと、寿命が0％になるまであと1年半くらいか。短いなおい。まぁ寿命0％になっても使えたりするらしいのだが、そんなストレージ使いたくない。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、怖いもの見たさでこの後どうなるか見てみたい気もしている。まだ時間的猶予もありそうだから、いつデータが消失しても問題ないような体制を築きつつ、せっかくなので最期まで見届けたいと思っている。&lt;/p&gt;&#10;&lt;h2 id="crucialといいsandiskといい"&gt;CrucialといいSanDiskといい&#10;&lt;/h2&gt;&lt;p&gt;Crucialはしっかりしたメーカーという印象があったのだが、調べてみると最近はそうでもなさそうな感じ。まぁでも、交換対応とかはちゃんとしてくれるみたい。本国にチャットという面倒くさい作業は必要みたいだが。&lt;/p&gt;&#10;&lt;p&gt;このCrucialのSSDはWindowsマシンに増設したもので、Macでは外付けSSDとしてSanDiskのものを使っている。これはもうかれこれ3年以上しっかり働いてくれていることから信頼していたのだが、最近思いっきり不具合報告がされており（「&lt;a class="link" href="https://www.theverge.com/22291828/sandisk-extreme-pro-portable-my-passport-failure-continued" target="_blank" rel="noopener"&#10; &gt;We just lost 3TB of data on a SanDisk Extreme SSD - The Verge&lt;/a&gt;」）、その対応が微妙な感じなのも相まって、信用ならんなぁという感じ。僕が使っているのもまさにこの不具合報告がされたExtremeシリーズなのだが、SanDiskのサイトで調べたところ、型番的には大丈夫、らしい。まぁ実際何事もなく動いているからそうなのだろう、と思う。思いたい。&lt;/p&gt;&#10;&lt;p&gt;SSDは大正義Samsungということなのだろうか。次は多少高くてもSamsungにしようかなぁ。&lt;/p&gt;&#10;</description></item><item><title>10年ぶりにGoogle日本語入力からATOKに乗り換えた</title><link>https://hack-le.com/10-atok/</link><pubDate>Mon, 14 Aug 2023 02:31:43 +0900</pubDate><guid>https://hack-le.com/10-atok/</guid><description>&lt;p&gt;まだジャストシステムにアカウントが残っていたことに感動した。いや、そりゃそうかもしれないんだけどさ。正直もう作ったことさえ忘れていたね。でも確かに昔使っていたのだから、アカウントはそりゃあるんだよな。あの頃はまだパスワードマネージャを使っていなかったのか、昔使い回していたあまり強度の高くないパスワードを使っていた。懐かしい。&lt;/p&gt;&#10;&lt;p&gt;楽天の50倍わかりづらいJust Systemのサイトから請求履歴を探し出すと、最後にATOKを使ったのは2013年の5月だったらしい。そうか、もうそんなにか……。あの頃はGoogleがいろいろなものに手を出し始めていて、もう全部Googleでいいんじゃないかと思わされていた頃だ。MacはリーズナブルでWindowsマシンに対しても価格的に競争力があった。なんとも隔世の感がある。またATOKを契約することになるとはあの頃は思わなかったなぁ。&lt;/p&gt;&#10;&lt;h2 id="google日本語入力に不満があったのか"&gt;Google日本語入力に不満があったのか？&#10;&lt;/h2&gt;&lt;p&gt;もう10年ばかりGoogle日本語入力を使ってきている。大きな不満があったわけではなかった。多分きっかけは、「&lt;a class="link" href="https://k-tai.watch.impress.co.jp/docs/column/stapaapple/1520433.html" target="_blank" rel="noopener"&#10; &gt;久しぶりにATOKを使ったら最高だった!!! - ケータイ Watch&lt;/a&gt;」の記事を読んだことだろう。以前だったら「まぁ昔は僕も使っていたな」と思ったくらいで素通りした気がする。ただ、今回はどういうわけかやけに引っかかって、その後いろいろと調べたりした。僕の中でどういう心境の変化があったのだろうか。&lt;/p&gt;&#10;&lt;h2 id="昔atokからgoogle日本語入力にうつった理由"&gt;昔、ATOKからGoogle日本語入力にうつった理由&#10;&lt;/h2&gt;&lt;p&gt;以前にATOKをやめた時は、どんなことを考えていたっけ。そう思ってブログ内を検索してみると、果たして、10年前の記事が引っかかってちょっと感動した。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/27465029-2/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;ATOKからGoogle日本語入力に移ることにした。リアルタイム変換が便利&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/27465029-2/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_2569_1789396200.webp" alt="ATOKからGoogle日本語入力に移ることにした。リアルタイム変換が便利" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;当時僕はまだLivedoor Blogを使っていたし、掲示板文化から抜け切れていなかったため、見出しも何もなく、改行タグを駆使した記事になっている。アメブロみたいだ。なんとも懐かしい。ほんの10年前、僕はこんなだったか。まぁ他の記事を見るとちゃんと構造的に書いているものもあるので、ちゃんとやろうと思えばそりゃやれたと思うが、今だったらどんなやっつけ記事でもこういう書き方はしないだろう。&lt;/p&gt;&#10;&lt;h3 id="atokは不安定だった"&gt;ATOKは不安定だった&#10;&lt;/h3&gt;&lt;p&gt;記事内ではATOKに対していくつかの不満を述べている。そういえば&lt;strong&gt;確かにATOK Syncは不安定だったし、またしばしばATOKは暴走してCPUを熱くしていた&lt;/strong&gt;。これについて「特に不満というほどではない」となぜか書いているが、あまり意識できていなかっただけで、思いっきり不満要因の一つだったのではないか。おそらく自分が不満に感じていることすら感じられないほどに、慣れすぎていた。不安定さは自覚できていなくても、大きな不満となっていることが多い。だが、無自覚なだけで、やはりその実不満はあるのだ。後になって、「ああ、僕は不満だったんだ」と気づくことはよくある。まさに、今がそうだね。&lt;/p&gt;&#10;&lt;h3 id="atok放送禁止用語が辞書になくて不便今も"&gt;ATOK放送禁止用語が辞書になくて不便（今も）&#10;&lt;/h3&gt;&lt;p&gt;差別用語、まぁ平たく言うと放送禁止用語が辞書にない問題については、「そうだっけ？」と思って調べたところ、確かにそのようで、また現在も特に事情は変わっていないようだった。（参考記事: &lt;a class="link" href="https://aikawame.hateblo.jp/entry/2019/01/17/ATOK%E3%81%AB%E3%82%88%E3%82%8B%E3%80%8C%E4%B8%8D%E5%BF%AB%E8%AA%9E%E3%83%BB%E8%A1%A8%E7%8F%BE%E3%81%AA%E3%81%A9%E3%80%8D%E3%81%B8%E3%81%AE%E6%96%B9%E9%87%9D%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D" target="_blank" rel="noopener"&#10; &gt;ATOKによる「不快語・表現など」への方針について思うこと - 35歳からの中二病エンジニア&lt;/a&gt;）。実際、確かに使えない。&lt;/p&gt;&#10;&lt;p&gt;ただこれについては、学習能力がきちんと高くなっているため、あまり気にならないのではないかとも思えた。別に辞書登録してもいいし。当時の僕は「ポリシーが気に入らない」と言っており、これは今もそう思う。まぁ、理解できない方針ではないし、また今となってはこれくらいでいちいち目くじらたてていたら大手のサービスは何も使えない、とも思うようになった。僕もすっかり調教されたかな。まぁでも、先にも述べたとおり、&lt;strong&gt;学習能力が高くなっている今ならば、実用上あまり困らないのではないかと思われる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;恐らくなんだけれど、&lt;strong&gt;僕が本当に不満に思ったのは、放送禁止用語に限らず、Google日本語入力と比べて語彙が貧弱だったということじゃないだろうか&lt;/strong&gt;。というよりは、Google日本語入力が豊富過ぎたのかもしれないけれど。流行言葉が変換候補に出てくるのは衝撃的だったよ。語彙で負けてるのに、意味不明な制約している場合かおまえは、というのが僕の不満だったのではないかなぁ。&lt;/p&gt;&#10;&lt;h3 id="google日本語入力のリアルタイム変換サジェストは便利だった"&gt;Google日本語入力のリアルタイム変換（サジェスト）は便利だった&#10;&lt;/h3&gt;&lt;p&gt;一方Google日本語入力のよいところとして、リアルタイム変換をあげている。これはいわゆる予測変換、つまり恐らくサジェストのことだと思われるが、当時はこのように呼ばれていたのだろうか。覚えてない。今リアルタイム変換というと、ことえりのライブ変換のことだと思われそうだ。個人的にはライブ変換はいくらなんでもお節介が過ぎるので、使い勝手が悪いと思っている。&lt;/p&gt;&#10;&lt;p&gt;しかしそうか、そういえば、ATOKは当時これがなかったんだな。これは確かに痛い。というより、Google日本語入力が衝撃的だったんだろうな。今となっては当たり前にある機能だけれど、当時は画期的だったか。スマホはどうだったかな。スマホでは元からあったっけ？文字入力に困難さがあるスマホから着想を得ていたりするのかな。&lt;/p&gt;&#10;&lt;p&gt;今はさすがにATOKも推測変換を出すようになっている。この機能は、実は今回移行した決め手になったのではないかと思う。思うというのは、僕自身契約に踏み切った自分自身の心情について分析できていないからだ（なので今こうして記事を書いている）。&lt;/p&gt;&#10;&lt;p&gt;最近のGoogle日本語入力は、このサジェストがどういうわけかタコで、ちっとも学習してくれず、たとえば当サイトのタイトル「或る阿呆の記」すら覚えてくれない。正確には、直後は覚えてくれているんだけれど、しばらくするとまたすぐ忘れてしまっている。これがめっちゃ不便。昔は覚えてくれていたように思うんだけどなぁ。どうだっけか。なんか、以前よりも全体的に使いづらくなった気がするんだよなぁGoogle日本語入力……。&lt;/p&gt;&#10;&lt;p&gt;一方、ATOKはちゃんと覚えてくれる。先に挙げた放送禁止用語も何度か入力したらちゃんと覚えてくれる笑&lt;/p&gt;&#10;&lt;h2 id="今atokのほうがgoogle日本語入力より優秀だと思った"&gt;今、ATOKのほうがGoogle日本語入力より優秀だと思った&#10;&lt;/h2&gt;&lt;p&gt;いろいろと書いたが、とどのつまり、10年前の僕はGoogle日本語入力のほうがATOKよりも優秀だと感じたのだろう。恐らく僕にとってそれは正しい感覚だった。そして今回はその逆で、&lt;strong&gt;ATOKのほうがGoogle日本語入力よりも優秀だと感じた&lt;/strong&gt;わけだ。&lt;/p&gt;&#10;&lt;p&gt;10年前に僕が感じた不満を、今のATOKはだいたい解消しているように思う。しばらく使っていた限りでは、ATOKは安定して動いており、暴走することもない。それだけではなく、ATOKは日本語入力システムとして着実に進化を遂げていた。 &lt;strong&gt;「改善された辞書 + 高い学習能力 + 推測変換」のコンボによって、変換効率が今のGoogle日本語入力を凌駕している&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;一方で、Google日本語入力は10年前から何も変わらなかったように思う。学習能力に至っては、むしろ下がったのではないだろうか。いい加減僕のサイト名くらい辞書登録しなくても覚えてくれないもんか……辞書登録しても、それをすべてのPCでやらされるとか面倒くさすぎる。ATOK Syncならそんな手間はかからない。&lt;/p&gt;&#10;&lt;p&gt;というか、クラウド同期の機能こそいかにもGoogleらしい機能だと思うんだが、どういうわけか、一時期ベータとして機能搭載していたものの、お蔵入りになってしまったようだ。どう考えても便利な機能なのに。Google日本語入力は、パーソナライズの重要性を低く見過ぎていると思う。&lt;strong&gt;個人のニーズを捉えず、流行にばかり堪能なのは、10年代の悪い文明&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;p&gt;ATOKはこの10年、強力なライバルに打ち勝つべく、ずっと進歩を続けていたのだなぁと思う。しかし、Google日本語入力は変わらなかった。これは結局、日本語入力にかける熱量の差なのだろうか。&lt;/p&gt;&#10;&lt;h2 id="そしてatok-my-passportを契約した"&gt;そしてATOK My Passportを契約した&#10;&lt;/h2&gt;&lt;p&gt;そんなこんなで、ATOKをしばらく試用してから、僕はATOK My Passportを本契約した（プレミアムの機能は使わないと思えたのでベーシック）。ここまで書いて、その理由は明確になった。&lt;strong&gt;端的に、ATOKのほうがGoogle日本語入力よりも優秀だからだ&lt;/strong&gt;。推測変換の実装と、学習能力の高さが決め手となっている。&lt;/p&gt;&#10;&lt;p&gt;Google日本語入力は、確かに日本語入力システムの歴史を変えた。インターネットの新しい風を吹かせた。それについては本当に評価したい。競争相手がMS-IMEだけで、今のATOKがなかったのは間違いないだろう。そして、Google日本語入力は無料で使えるという大きなアドバンテージを持っているため、今でも多くの人に勧められるものではある。だが、僕は元々日本語入力システムに金を払ってもいいと思う人間だった。僕がGoogle日本語入力を使っていたのは、経済的な問題ではなく、ATOKよりも良いとかつては思ったからだ。そして、今はその逆だ。&lt;/p&gt;&#10;&lt;p&gt;なんとなく、時代は変わるんだなと最近実感している。こうしてまたATOKを使うことになったが、いずれまた別の日本語入力システムを使う日がくるかもしれない。日本語入力システムだけではなく、一時はGAFAがすべてを飲み込むようにも思えたが、今はもうそんな気配はない。&lt;/p&gt;&#10;&lt;p&gt;またきっと、変わるんだろうね。その時までは、ATOKを使おう。&lt;/p&gt;&#10;</description></item><item><title>なんだかんだでMacは使いやすいよなって</title><link>https://hack-le.com/mac/</link><pubDate>Thu, 03 Aug 2023 19:02:57 +0900</pubDate><guid>https://hack-le.com/mac/</guid><description>&lt;p&gt;最近脱Macを本気でやろうとして、Windowsを本格的に使い始めている。だいたいの作業はできるようになったし、懸念点だったまともなトラックパッドがない問題についても、トラックボールに慣れることによって、問題なく移行できそうな感じだ。トラックパッドのほうが良いんだけれど、トラックボールも悪くはない。WSL2もちゃんと動くし、Emacsの呪いも、keyhacとFakeymacsという有志の素晴らしい尽力によって乗り切れそうだ。ストレージ周りは入れ替えて、2TBのSSD2つと2TBのHDとなっており、潤沢。バックアップとメディアサーバ用途として、NASも用意した。&lt;/p&gt;&#10;&lt;h2 id="結局mac使ってるんだが"&gt;結局Mac使ってるんだが&#10;&lt;/h2&gt;&lt;p&gt;ということで、もうほとんどの作業はWindowsでもできるし、むしろWindowsでしかできない作業もあるのだが、結局今こうしてブログ記事を書いているのはMac mini 2018だったりする。今のWindowsは本当によくなったなぁと思いつつ、それでもMacは使いやすい。色々あったけど使いやすい。&lt;/p&gt;&#10;&lt;p&gt;まぁかれこれ10年以上Macをメインにしているわけだから、当然慣れの問題はある。だがそれだけでもないだろう。僕は最初からMacを使っていたわけではない。WindowsもLinuxも使って、そのうえで結果的にMacを日常的に使うようになっていた。20代は自分に合うものを探っていた時で、キーボードもJISキーボードとUSキーボードの両方を使っていた頃もあった。その結果としてのMacユーザーである（そしてUSキーボードの愛好家である）。つまり、今はどうあれ、少なくとも過去、数ある選択肢の中から意識的にMacを選んだユーザというわけだ。ここしばらくはMacを腐していたが、今でも一番使いやすいのはMacだと思っていたりする。&lt;/p&gt;&#10;&lt;p&gt;だからこそ、かなり意識してWindowsへの移行を進めていて、それはそうしなければズルズルとMac使ってしまうだろうなと思ったからなんだけれど、結局今まさにこうしてズルズルとMacを使っていて、それでやっぱり使いやすいなぁとか、馴染むような感じがあるよなぁなどと思っているので、結局僕はなんだかんだといいながらMacを使い続けるのかもしれない。&lt;/p&gt;&#10;&lt;h2 id="windowsマシンは使っていく"&gt;Windowsマシンは使っていく&#10;&lt;/h2&gt;&lt;p&gt;ただそうだとしても、今回ばかり違う面もある。まずMacではもはや機能的に満たされないものがある。昨今の生成AI事情で、今はローカルで動かせて実際に使い物になるやつっていうとStable Diffusionばかりであったが、最近は言語モデルでもLlama2とか出てきているし、これは是非とも手元で動かしたい。そうすると、現実的にNVIDIAのグラボを使うしかないが、現状Macでそれは非常に厳しい。&lt;/p&gt;&#10;&lt;p&gt;コスト面も厳しい。さすがに高い。拡張性がどんどん潰されており、吊るしの貧弱なスペックからちょっとメモリやストレージを盛ろうとすると、それだけで+25000の倍数取られるのだからこれはかなりキツイ。何をどう言われようが高いもんは高い。そして一度決めたらそれっきり。&lt;/p&gt;&#10;&lt;p&gt;PCの良いところの一つは、後で必要になった時にパーツ交換や増設で対応できることだと思うのだけれど、まぁもはやMacにその余地はないわけで、これは変化の大きな時代においては枷だなと思う。思えば過去10年、ホームユースにおけるPCの使われ方は限定的になる一方であったけれど、使える生成AIの登場で状況が変わったのかもしれない。ここ10年、なんでもかんでもスマホに寄せていって、PCの使われ方はシュリンクしていったが、今再び、PC使わないとどうにもならん、ということが増えつつあるように思う。&lt;/p&gt;&#10;&lt;p&gt;まぁ確かになんだかんだでローカルにAIのシステムを構築したい民は全体としては少数派だろうとは思うのだけれど、今後需要が増えることはあっても減ることはなかろうと思っている。人々が本当にAIに求めるものはとてもセンシティブで、デリケートで、昨今の政治的に正しいなんちゃらとかいうお題目を掲げてしまった大企業には、荷が重い面があるように思う。実際、技術的には常に最前線にいたはずのGoogleがサービス面で出遅れているのはそういうことだろうし、MicrosoftもOpenAIへの出資やAzure連携で話題になることはあっても、肝心のBing AIについてはもう話題になることも少なくなった。&lt;/p&gt;&#10;&lt;p&gt;AIの力は自由な個人が一番うまく使えるだろうし、またAIを使えばこれまでマンパワー的にできなかったことができるかもしれないなと思っているし、色々試している。30代の間にこの波が来たことには感謝したいと思う。&lt;/p&gt;&#10;&lt;h2 id="なんだかんだでmacも使い続けそう"&gt;なんだかんだでMacも使い続けそう&#10;&lt;/h2&gt;&lt;p&gt;話がずれてきた。&lt;/p&gt;&#10;&lt;p&gt;まぁ、今回ばかりはMacではできないことも出てきたし、さすがにコストパフォーマンスが悪すぎるという面もあって、メインマシンはWindowsになるかなぁと思っている。ただ一方で、やっぱりMacは使いやすいなと思うのも事実で、そうすると、なんだかんだでセールされてる型落ちMac miniを新調するとかはありそうだなぁ、とか思ったりもするのであった。&lt;/p&gt;&#10;</description></item><item><title>Crucialの2TB SSDの寿命が減っていく</title><link>https://hack-le.com/crucial-2tb-ssd/</link><pubDate>Wed, 26 Jul 2023 16:24:56 +0900</pubDate><guid>https://hack-le.com/crucial-2tb-ssd/</guid><description>&lt;p&gt;ハズレを引いてしまったかもしれない。まぁ最後までわかんないけどね。とりあえずなんか対応する。&lt;/p&gt;&#10;&lt;h2 id="crucialのssdを買った"&gt;CrucialのSSDを買った&#10;&lt;/h2&gt;&lt;p&gt;2023年2月、SofmapでCrucialの2TB SSDが14,100円で売っていた。最近の値崩れしたSSD市場ではもはや珍しい値段ではないが、その時点においては特化といって差し支えなかった。具体的にはこれだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.sofmap.com/product_detail.aspx?sku=20152293" target="_blank" rel="noopener"&#10; &gt;CT2000BX500SSD1JP&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/07/3f427e6a113d4d59ea4309b2d862703b-700x264.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;値崩れを起こした今でも14,060円なので、当時14,100円が破格だったことはわかるだろう。まぁ、当時といっても半年前でしかないのだが……。&lt;/p&gt;&#10;&lt;p&gt;喜びいさんでポチったところ、売り切れになり、どうやら僕がポチったのは最後の一個だったらしかった。いやぁラッキーだったなぁとその時は思ったものだが、まさかそれから急激にSSDが安くなるとはその時は思っていなかったね……。&lt;/p&gt;&#10;&lt;p&gt;まぁでも僕としては満足のいく買い物だったわけだが、購入してから半年も立たないうちに、寿命がモリモリと減り始めていて不安になっている。CrystalDiskinfoによると、既に88%だ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/07/54213074522a2e0700ff3afbec13fedc.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;理由としては平均ブロック消去回数で、こいつの減りがやけに早い。このペースだと35TBWなんだが。スペックには720TBWとあったが。&lt;/p&gt;&#10;&lt;p&gt;ただ&lt;a class="link" href="https://pctrouble.net/software/cdi/cdi_ssd.png" target="_blank" rel="noopener"&#10; &gt;「CrystalDiskInfo」の見方 - PCと解&lt;/a&gt;によると、警告になるのは10%以下らしいので、必ずしもこれがやばいとは言い切れないのかもしれない。0%になっても動くらしい。寿命とはいったい。&lt;/p&gt;&#10;&lt;p&gt;平均ブロック消去回数で検索すると「&lt;a class="link" href="https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13255975123" target="_blank" rel="noopener"&#10; &gt;SSDの残り寿命がすごい勢いで減ってる気がするのでどなたかご教授願&amp;hellip; - Yahoo!知恵袋&lt;/a&gt;」「&lt;a class="link" href="https://bbs.kakaku.com/bbs/K0001024634/SortID=24523849/" target="_blank" rel="noopener"&#10; &gt;価格.com - 『残り寿命（健康状態）が５９％（８Ｔ）になりました。』 crucial MX500 CT250MX500SSD1 のクチコミ掲示板&lt;/a&gt;」という記事も引っかかって）、これも見てみると全部Crucialでかつ、一つはBX500であった。カカクコムのほうの口コミでは、下記のような口コミがあった。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;おそらく電源投入回数に比べて使用時間が長い事が原因です。&lt;/p&gt;&#10;&lt;p&gt;海外のフォーラムによると、MX500は連続可動時間が長いと内部の最適化が過剰に働くせいか、ユーザーが特に書き込まなくても寿命がみるみる減っていく問題があるようです。&#10;&lt;a class="link" href="https://kakaku.com/jump/?url=https%3A%2F%2Fforums%2Etomshardware%2Ecom%2Fthreads%2Fcrucial%2Dmx500%2D500gb%2Dsata%2Dssd%2Dremaining%2Dlife%2Ddecreasing%2Dfast%2Ddespite%2Dfew%2Dbytes%2Dbeing%2Dwritten%2E3571220%2F%3Fview%3Ddate" target="_blank" rel="noopener"&#10; &gt;https://forums.tomshardware.com/threads/crucial-mx500-500gb-sata-ssd-remaining-life-decreasing-fast-despite-few-bytes-being-written.3571220/?view=date&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ファームウェアの問題じゃないかと思いますが、いつまで経っても改善しようとしないcrucialに不満を感じますね。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://bbs.kakaku.com/bbs/K0001024634/SortID=24523849/" target="_blank" rel="noopener"&#10; &gt;https://bbs.kakaku.com/bbs/K0001024634/SortID=24523849/&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;PCは24時間電源投入がデフォでは？&lt;/p&gt;&#10;&lt;p&gt;これはMX500だが、同じ事象が起きている可能性はある。連続稼働時間はうちのPCも非常に長い。特にここ最近はずっと連続稼働している。これが本当であれば、定期的にシャットダウンをすればよいということになるが……。&lt;/p&gt;&#10;&lt;h2 id="古のデフラグ"&gt;古のデフラグ&#10;&lt;/h2&gt;&lt;p&gt;他にも何か対応策はないものだろうか……と思って色々見たところ、下記のような記事。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.partitionwizard.jp/clone-disk/ssd-lifespan.html" target="_blank" rel="noopener"&#10; &gt;SSDの寿命は何年？延命方法は？ - MiniTool Partition Wizard&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ここで、デフラグの話題が取り上げられていて、あー、と思った。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;ドライブの最適化は、ディスクの長期使用中に生成される断片化や乱雑なファイルを再配置するために使用され、コンピュータの全体的なパフォーマンスと速度を向上させることができます。しかし、この方法はHDDにのみ適用されます。&lt;/p&gt;&#10;&lt;p&gt;SSDの場合、SSDはトラックシーク時間を必要としないため、ドライブの最適化は不要です。それに、この種のデータが何の利点もなく移動することによって、SSDの寿命が大幅に損なわれる可能性があります。つまり、無効にする必要があります（通常、Windows 8より前のWindowsバージョンで使用されます）。&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://www.partitionwizard.jp/clone-disk/ssd-lifespan.html" target="_blank" rel="noopener"&#10; &gt;https://www.partitionwizard.jp/clone-disk/ssd-lifespan.html&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;デフラグとか古過ぎてもはや意識すらしていなかったが、そういえばSSDが出始めの時はよく「SSDはデフラグしちゃいけない！」と注意喚起されていた。&lt;/p&gt;&#10;&lt;p&gt;で、そういえば設定どうなっているんだろう？と思ってみてみたところ、定期的にデフラグされている状態であった。お前まだやってたのか……。で、もしかしてこれも影響があるのかなぁと思いつつ、スケジュール実行をオフにした。&lt;/p&gt;&#10;&lt;p&gt;まぁ理屈の上ではありそうなことではあるが、今どきこれ意識している人はあんまりいない気がするし、これが原因だったらもっと言われているような気もするんだよなぁ。。。&lt;/p&gt;&#10;&lt;h2 id="様子見"&gt;様子見&#10;&lt;/h2&gt;&lt;p&gt;ということで、とりあえずデフラグのスケジュールをオフにするのと、気が向いた時に電源をシャットダウンするをしばらく続けて、経過観察をしようと思う。&lt;/p&gt;&#10;&lt;p&gt;Crucialも最近は必ずしも評判良くないみたいだね、、、結局SSDは大正義Samsungということなんだろうか。&lt;/p&gt;&#10;&lt;p&gt;まぁストレージは消耗品だし、とりあえずメーカー保証の3年持ってくれたらいいんだけどね。。。バックアップはしているので壊れても損失はないようにしているが、それでもやはり面倒ではあるし。頑張ってくれよー。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14824&amp;rdquo;]&lt;/p&gt;&#10;</description></item><item><title>WSL2で最初に入れるソフト</title><link>https://hack-le.com/wsl2-sw/</link><pubDate>Sun, 16 Jul 2023 02:41:01 +0900</pubDate><guid>https://hack-le.com/wsl2-sw/</guid><description>&lt;p&gt;本格的にWindowsを開発マシンとしても使うべく、色々と入れ始めた。&lt;/p&gt;&#10;&lt;h2 id="windows-terminalの配色"&gt;Windows Terminalの配色&#10;&lt;/h2&gt;&lt;p&gt;fishを入れるんだが、Ubuntuのカラーテーマとデフォの配色の相性があまりよくない。&lt;/p&gt;&#10;&lt;p&gt;配色をUbuntu-ColorSchemeからOne Half Darkに変更する。まぁこれは僕の好み。&lt;/p&gt;&#10;&lt;h2 id="aptで入れる"&gt;aptで入れる&#10;&lt;/h2&gt;&lt;p&gt;sudo aptに続けてうつよ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;direnv&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;webp&lt;/li&gt;&#10;&lt;li&gt;python3.10-venv&#10;&lt;ul&gt;&#10;&lt;li&gt;version次第だね。AWSの民なのでLambda関数の対応するランタイムと合わせて動いている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ffmpeg&lt;/li&gt;&#10;&lt;li&gt;gcc&lt;/li&gt;&#10;&lt;li&gt;gnuplot&lt;/li&gt;&#10;&lt;li&gt;net-tools&lt;/li&gt;&#10;&lt;li&gt;octave&lt;/li&gt;&#10;&lt;li&gt;pandoc&lt;/li&gt;&#10;&lt;li&gt;peco&lt;/li&gt;&#10;&lt;li&gt;unzip&lt;/li&gt;&#10;&lt;li&gt;youtube-dl&lt;/li&gt;&#10;&lt;li&gt;ruby&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;emacsとかもう絶対使わないのに入れちゃう。rubyも使わないよねとか思いつつ……。&lt;/p&gt;&#10;&lt;h2 id="頑張っていれる"&gt;頑張っていれる&#10;&lt;/h2&gt;&lt;h3 id="fish"&gt;fish&#10;&lt;/h3&gt;&lt;p&gt;参考: &lt;a class="link" href="https://zenn.dev/mammon/articles/90b27354f3ed37" target="_blank" rel="noopener"&#10; &gt;WSL2 + Windows Terminal で fish のセットアップ&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-add-repository ppa:fish-shell/release-3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install fish&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chsh -s /usr/bin/fish&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL https://git.io/fisher | source &amp;amp;&amp;amp; fisher install jorgebucaran/fisher&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fish_config&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;pecoを入れる&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fisher install oh-my-fish/plugin-peco&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;fishの設定 ( ~/.config/fish/config.fish )&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if status is-interactive&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # Commands to run in interactive sessions can go here&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# peco&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function fish_user_key_bindings&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bind \cr peco_select_history&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# volta&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;~/.volta/bin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# コピペ&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; command echo -n $argv | clip.exe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function pbpaste&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; powershell.exe -command &amp;#39;Get-Clipboard&amp;#39; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;pbcopyとpbpasteコマンドを作る: &lt;a class="link" href="https://ai.hack-le.com/wsl2-mac-clipboard/" target="_blank" rel="noopener"&#10; &gt;WSL2でMacのようにクリップボードを操作する方法 | 或る阿呆とAIと&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;funcsave pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;funcsave pbpaste&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;適宜sourceコマンドでロードしたりターミナル再起動する。&lt;/p&gt;&#10;&lt;h3 id="nodejs"&gt;node.js&#10;&lt;/h3&gt;&lt;p&gt;voltaを使う。MSの公式ドキュメントではnvmが例に上がっているのだが、fishシェルだと互換性に難ありらしいので。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.volta.sh/guide/getting-started" target="_blank" rel="noopener"&#10; &gt;Getting Started | Volta&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl https://get.volta.sh | bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ターミナル再起動で使えるようになる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;volta install node@18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;その時の最新のLTSを入れる。いつの間にか18か……。&lt;/p&gt;&#10;&lt;h3 id="aws-cli"&gt;AWS CLI&#10;&lt;/h3&gt;&lt;p&gt;AWSのおかげで飯が食えてる。&lt;/p&gt;&#10;&lt;p&gt;公式: &lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html" target="_blank" rel="noopener"&#10; &gt;AWS CLI の最新バージョンをインストールまたは更新します。 - AWS Command Line Interface&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &amp;#34;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&amp;#34; -o &amp;#34;awscliv2.zip&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;unzip awscliv2.zip&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ./aws/install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="python系"&gt;python系&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://hack-le.com/pip/" &gt;pythonのpipで入れているもの - 或る阿呆の記&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>MacからWindowsに回帰するかもしれない</title><link>https://hack-le.com/mac-windows/</link><pubDate>Sat, 15 Jul 2023 18:08:29 +0900</pubDate><guid>https://hack-le.com/mac-windows/</guid><description>&lt;p&gt;初めてのMacは、MacBook Air 2010の13インチモデルだった。つまり、このブログを開設した時(2012年)には、もう既にMacユーザであった。当時はまだMacを使っている人はそんなに多くなくて、なんでMac使うの？と不思議そうに聞かれることも多かった。&lt;/p&gt;&#10;&lt;h2 id="macを使い始めた理由"&gt;Macを使い始めた理由&#10;&lt;/h2&gt;&lt;p&gt;どうしてMacBook Airを買ったんだろうと思い返してみると、iOSアプリを作ろうと思っていたのと、今となっては信じられないが、当時はハードウェアとしてもMacのほうがWindowsマシンよりリーズナブルだったからだ。つまり、いわゆる「コスパ」の面でもMacを選ぶことには合理性があった。&lt;/p&gt;&#10;&lt;p&gt;で、結局その後iOSアプリを作ることはなかったのだが、Mac自体があまりにも使いやすかったものだから、デスクトップもノートも、10年以上Macをメインで使い続けている。ノートPCではMacBook Air 2013 11インチ、MacBook Pro 2019 13インチ、デスクトップではMac mini 2012、Mac mini 2018（今のメインデスクトップ）ときているので、まぁ5台ばかりMacを買っていることになる。&lt;/p&gt;&#10;&lt;h2 id="あれから10年macもwindowsも変わった"&gt;あれから10年、MacもWindowsも変わった&#10;&lt;/h2&gt;&lt;p&gt;ご存知のとおり、Windowsはバルマー時代に迷走の限りを尽くし、非常にひどいことになっていたので、もはやWindowsに戻ることはないだろうと思われた。しかし、バルマー亡き後のサティア・ナデラはめちゃくちゃ優秀な指導者で、驚くべきことにWindowsは使いやすくなった。特に開発者目線では、WSLは本当に大きかった。細かいところでは、フォントの改善などもよかったと思う。&lt;/p&gt;&#10;&lt;p&gt;その一方でMacというと、ジョブズからクックになってからというもの、あまり良いことはなかった。というより、ひどかった。だんだんと拡張性が失われるし、セキュリティの名の下にどんどん窮屈になって、OSアップグレードの後の嵐のような許可ダイアログは、これがAppleの考える最高のUXなのか？といつも疑問に思わされた。&lt;/p&gt;&#10;&lt;p&gt;ハードウェアも停滞、いやむしろ退化した印象すらある。プロ向けのゴミ箱も、タッチバーも、バタフライキーボードも、すべて誤っていたと廃版という形でApple自身が認めざるを得なかった。まぁでも出るだけマシで、特に僕は前述のとおりMac miniユーザだったので、本当に失望させられた。ダウングレードした2014から、さらに4年間放置されたのだから、まぁ仕方ないだろう。2018は良いモデルだったけどね。&lt;/p&gt;&#10;&lt;p&gt;Apple Siliconは革新的だったが、それもワットパフォーマンスが重要なノートPCの話で、デスクトップにおいてはもはや優位性はない。IntelやAMDのCPUと、NVIDIAのグラボを搭載したもののほうが安価でしかも優れている。なにより、拡張性がある。僕は今数年前に購入したHPのマシンで、グラボとSSDだけ換装したものを使っているが、こういうことができる自由さが、PCの良さだと思う。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、Windowsが良くなってきたのに対して、Macのほうはひたすら悪くなり続けたというのが、僕の偽らざる感想である。&lt;/p&gt;&#10;&lt;h2 id="当面はmacを使うが"&gt;当面はMacを使うが…&#10;&lt;/h2&gt;&lt;p&gt;それでも、今のところはまだMacをメインにしている。UNIXマシンとしての利便性と、なによりトラックパッドが本当に便利だからだ。しかし、WindowsはWSL2が出てかなり使いやすくなったし、トラックパッドは未だにまともなものがないが、トラックボールに慣れればけっこう悪くなさそうに感じている。仕事ではまだしばらくMacをメインにすると思うが、プライベートのほうではWindowsをメインにできるかもしれない。僕の作業でも、既に多くのことでWindowsじゃないとできなかったり、あるいは効率がよかったりしている。&lt;/p&gt;&#10;&lt;p&gt;あまり一般的な見方ではないかもしれないが、少なくとも僕にとって、クックはバルマーと同じような扱いだ。クックもそろそろ引退だと思うが、次の後継者がもしクックと同じような感じなら、Macが凋落するシナリオは、今後十分にありえるんじゃないだろうか。&lt;/p&gt;&#10;&lt;h2 id="その後"&gt;その後&#10;&lt;/h2&gt;&lt;p&gt;（2023-07-15 追記1）そういえば、Macのいいところは静音性だったなと、唸るWindowsマシン見ながら思い出した。昔そういう記事も書いたな。カタログスペックに出ないところで、良い面は確かにあるんだけどな、Mac……。&lt;/p&gt;&#10;&lt;p&gt;（2023-07-16 追記2）Windowsいじった後にMacを触ると、なんとも言えず馴染む。デジタルなのに、名状しがたいFit感のようなものを感じる。単に慣れという以上の心地よさがある……。でも無線通信の不安定さとか（特にBluetooth）、SMBクライアントのクソさとか、問題も多い。&lt;/p&gt;&#10;&lt;p&gt;（2023-07-16 追記3）あとAutomatorも地味に便利で。CLIとGUIの融合がMacは本当に心地よい。余計なことしなかったら本当にMacはよかったのに。&lt;/p&gt;&#10;</description></item><item><title>カレントディレクトリのファイル名をすべてUUIDにするPythonスクリプトのワンライナ</title><link>https://hack-le.com/current-dir-uuid/</link><pubDate>Mon, 26 Jun 2023 10:08:55 +0900</pubDate><guid>https://hack-le.com/current-dir-uuid/</guid><description>&lt;p&gt;タイトルのまま。破壊的なので念のためバックアップとってからやること推奨。Pythonで動かす。&lt;/p&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;p&gt;Python 3.9で動作確認済み。以下をターミナルで実行すると、カレントディレクトリのファイルがすべてUUIDにリネームされる。拡張子はそのまま。サブディレクトリには手をつけない。&lt;/p&gt;&#10;&lt;pre&gt;`python -c 'import os, uuid; [os.rename(f, str(uuid.uuid4()) + os.path.splitext(f)[1]) for f in os.listdir(".") if os.path.isfile(f)]'`&lt;/pre&gt;&#13;&#10;&lt;h2 id="chatgptが一晩でやってくれました"&gt;ChatGPTが一晩でやってくれました&#10;&lt;/h2&gt;&lt;p&gt;ChatGPTに聞きました。僕の仕事はChatGPTに言われるままコピペするだけです。&lt;/p&gt;</description></item><item><title>Mac mini 2018のメモリを64GBに増設するか悩んでいる</title><link>https://hack-le.com/mac-mini-2018-64gb/</link><pubDate>Fri, 12 May 2023 11:11:22 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-64gb/</guid><description>&lt;p&gt;何もかもが値上がりを続けている中で、メモリとSSDだけはひたすら安く、特にSSDは見ていると世界への愛と感謝で心が満ちていくのを感じる。ついついポチりたくなってしまうが、今のところそれだけの容量のストレージを使う予定もない。そもそも内蔵ストレージはもう既にいっぱいいっぱいだ。&lt;/p&gt;&#10;&lt;p&gt;しかしメモリのほうはまだ増設の余地がある。愛機Mac mini 2018は既にRAM 32GBまで増設しているのだが、これを64GBにすることは可能だ。しかもそれが18,000円ほどでできてしまう。素晴らしい。だが何に使うんだ。うるせぇ。&lt;/p&gt;&#10;&lt;h2 id="メモリが安い"&gt;メモリが安い&#10;&lt;/h2&gt;&lt;p&gt;なんか暇さえあればメモリとSSDを検索してずっと価格を見ている。何もかもうまくいかない世の中にあって、メモリとSSDだけが僕の心にやすらぎを与えてくれる。しかしどんなに安くても買わなくてはどうにもならない。特にメモリはさすがにそろそろ底打ちの気もする。DDR5への世代交代も控えているわけだし。ということは、ポチってみてもいいのではなかろうか。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07ZLCVKPV&amp;linkId=f3cd9a5541e6f9896c6944e8f0a0b92a" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin"&gt;&lt;/iframe&gt;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B09578GQF1&amp;linkId=a72420cda56e75d25cb896463184ed78" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin"&gt;&lt;/iframe&gt;特にシリコンパワーの17,0001円は圧巻である。Crucialでも19,449円で、これはツクモではさらに安く18,200円だった。&#13;&#10;&lt;p&gt;[Crucial クルーシャル CT2K32G4SFD832A &lt;a class="link" href="https://shop.tsukumo.co.jp/goods/0649528822505" target="_blank" rel="noopener"&#10; &gt;ノート用 / DDR4 SO-DIMM（260pin） / 64GB(32GB × 2枚組)セット / DDR4-3200 CL22-22-22］｜ツクモ公式通販サイト&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これくらいの価格差ならCrucialにするかなという気はする。別にシリコンパワーで失敗したことがあるわけでもないのだけれどね。&lt;/p&gt;&#10;&lt;p&gt;いやしかし、3万近くかけて32GBにしたというのになぁ。それでも当時は「3万で32GBにできるなんて安い！」と思っていた。その倍の容量を半値近い価格でできるようになるとは……。為替を考えたら半値以下か。&lt;/p&gt;&#10;&lt;p&gt;/mac-32gb/&lt;/p&gt;&#10;&lt;p&gt;こうなると、昔は夢としか思えなかったメモリ64GBも現実である。正直悩ましい。&lt;/p&gt;&#10;&lt;h2 id="ニヤニヤできればいい"&gt;ニヤニヤできればいい&#10;&lt;/h2&gt;&lt;p&gt;とはいえ、64GBのメモリで何をするかというと別段なにかやりたいことがあるわけでもなかったりする。最近React Nativeを始めたので、iOS SimulatorとAndroidのエミュレータを同時に起動してDockerも動かせるよみたいな感じだろうか。うーんCPUのほうが音を上げそう。それとも無限にタブ100万個開けるよみたいな感じだろうか。やっぱりCPUが負けそう。&lt;/p&gt;&#10;&lt;p&gt;まぁRAM 32GBの現在でも、何に使っているのかわからんがちょいちょいスワップしているみたいなので、64GB積めば積んだだけ何かしら使うのかもしれない。しかしそれで別にユーザ体験が変わることもなさそうだなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁでも正直UXなど知ったことではなくて、メモリ64GBの表示を見るだけで十分ニヤニヤできるから別にそれでいいとか阿呆なことを思っていたりする。なんか前も同じようなこと書いたな。&lt;/p&gt;&#10;&lt;p&gt;正直、一番ネックなのは換装作業だ。Mac mini 2018のメモリ換装は、少々面倒くさい部類に入る。前やったときもちょっとドキドキしたよね。僕、不器用だし。でも換装できるだけいいよ。2014で謎のソルダリングしたのは今でも許してないからな。&lt;/p&gt;&#10;&lt;p&gt;というか、M2 Pro Mac miniも出てきたのに、Mac mini 2018をいったいいつまで使うんだ問題もある。ちょっと前までめっちゃ真剣に検討してた癖にっていう。なんだけれど、なんかまだもうちょっとMac mini 2018で頑張ることになるかもなぁと最近は思っているんだよね。&lt;/p&gt;&#10;&lt;h2 id="pcのスペックが再び大事になった"&gt;PCのスペックが再び大事になった&#10;&lt;/h2&gt;&lt;p&gt;というのも、生成AIという明確なゲームチェンジャー、これの存在が大きい。コイツが出てきたせいで、これまでむしろ持て余され気味だった各種スペックが、突然「むしろ足りねぇ」みたいな感じになってしまった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/pcuser/articles/2302/02/news075.html" target="_blank" rel="noopener"&#10; &gt;“無限の柔軟性”を提供するM2搭載「Mac mini」という選択肢の魅力（1/2 ページ） - ITmedia PC USER&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;上記の記事でも触れられているが、使える生成AIの登場で、突然PCのスペックというやつが再び問題になったのである。&lt;/p&gt;&#10;&lt;p&gt;その意味で、「Mac」という縛りの中では確かにM2 Pro Mac miniは魅力があるのだが、その縛りを外すと、だいぶ「うーん」という感じになってしまう。今でさえそういう状況だから、ちょっと時間が立てばM2 Proでは十分戦えないように思う。&lt;/p&gt;&#10;&lt;h2 id="パーツを交換できるのは大事"&gt;パーツを交換できるのは大事&#10;&lt;/h2&gt;&lt;p&gt;そうすると、当面はフツーにNVIDIAのっけたWindowsを使いつつ、Macは引き続き2018を使い続けるというのが一番ありそうなシナリオだ。正直今はMacに金かけるならグラボに金かけたい。実際、この前10万かけてグラボを交換した。他にも2TB SSDの増設などもしている。M2 Pro Mac miniの半額だが、満足のいく買い物だった。PCにとって拡張性はやっぱり大事だよなと思う。&lt;/p&gt;&#10;&lt;p&gt;Appleはずっとオールインワンにしようとしていて、スペックが飽和気味の時はそれもあまり問題にはならないし、M1 MacBook Airなんか飽和の時代の最高傑作だったとすら思う。けれど、&lt;strong&gt;ひとたび「足りない」となった時、拡張性は非常に重要なな「性能」になる&lt;/strong&gt;。拡張性は性能なんだよ。&lt;/p&gt;&#10;&lt;p&gt;PCメーカーとしては買い替えてくれなきゃ儲けにならんと思うのかもしれないが、拡張性があるからこそ、「とりあえず買ってもいいかな」とも思える。スペックが足りなければ後で追加すればいいんだしさ。メモリなんてその最たるものだよな。お陰で今、「メモリを追加してもうちょっと使おうかな」とか考えられていて、こういう体験は、いよいよ新調するぞというときに、「またMacにしよう」と思わさせてくれるものだ。&lt;/p&gt;&#10;&lt;p&gt;これからまたしばらく、PCのスペックが大事という時代になるのであれば、Appleは今のように拡張性がないままだと、少なくともデスクトップは今後苦戦を強いられるんじゃないか。メモリすら最初に盛らないといけないっていうのは、かなり厳しい制約だものな。いくらユニファイドメモリが優秀だといっても、物理的に大容量が必要ということになれば分が悪いだろう。&lt;/p&gt;&#10;&lt;h2 id="期待はしている"&gt;期待はしている&#10;&lt;/h2&gt;&lt;p&gt;それでもHWメーカとしてのAppleには期待しているのだが、時代の変化に適応するのにしばらくかかりそうだなと思っている。個人的には、ティム・クックじゃ厳しそうだなと思っていたりもするが、本人もそろそろ潮時だと思っているようだし、ちょうど良いかもしれんね。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.appbank.net/2022/10/19/technology/2314193.php" target="_blank" rel="noopener"&#10; &gt;AppleのCEOティム・クックが引退、その時だれが後継者になるのか？ | AppBank&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;平時と有事ではリーダに求められる資質は異なる。ティム・クックは典型的な前者だろう。今にして思うと、10年代の世の中はなんというか、本当に安定していたなぁ。技術的にもどこか飽和していて、デザインとマーケティングの時代だったと思う。でも、これからはまた違うんじゃないかな。&lt;/p&gt;&#10;&lt;p&gt;とまぁだいぶ話が脱線したんだけれど、要は今は過渡期で、これからMacもまた変わるんじゃないかと期待しているので、だったらその時まで、今のMac mini 2018をさらに粘らせるのもアリかなと思っていると、そういう話だね。&lt;/p&gt;&#10;&lt;p&gt;と言いつつ、単に64GB積みたい言い訳探しているだけかもしれない。はー、どうしようかなぁ。&lt;/p&gt;</description></item><item><title>高い高いと噂のRTX4070をポチった</title><link>https://hack-le.com/rtx4070/</link><pubDate>Sun, 07 May 2023 17:04:27 +0900</pubDate><guid>https://hack-le.com/rtx4070/</guid><description>&lt;p&gt;噂じゃなく、現実として高いですけど（半ギレ）&lt;/p&gt;&#10;&lt;p&gt;なんだけれどまぁポチってしまいました、RTX4070。10万円した。ポイント含めても94000円をちょい割るくらい。高い。多分ちょっと待てば安くならから待ったほうがいいよ。高すぎて売れてないってニュースばかり流れてるし。っていうか買ってから2週間足らずなのにもう値下がりしてるし😭&lt;/p&gt;&#10;&lt;p&gt;あとちょっとで9万は割るんじゃないかな🤔&lt;/p&gt;&#10;&lt;p&gt;8万くらいになったらさすがにそれ以下にはならなさそう。まぁ待てる人は待ったら、夏にはもっとお値ごろになってるはず。RTX4070Tiはちょっと下打ち感あるから、そっちがほしい人は今ポチってもいいかもね。&lt;/p&gt;&#10;&lt;h2 id="高い高いよグラボが高い"&gt;高い高いよグラボが高い&#10;&lt;/h2&gt;&lt;p&gt;マイニングも下火になった今日このごろ、別に何かあったわけでもないのに純粋にグラボが高い。あー高い。RTX4090 30万円、Macが買える。SSDとメモリと10GbEのっけたM2 Pro Mac mini買ってお釣りがくる。消費電力も高い。450W、ゲームのついでに目玉焼きもついでに焼けそう。&lt;/p&gt;&#10;&lt;p&gt;まぁコンシューマ向けはNVIDIA一強だからね。Ryzen出る前の舐めプしてたIntel感がある。でもあの頃のIntelは製品自体が停滞していたけれど、今のNVIDIAはお高いけれどお高いなりのもの出しているからな。AMDが頼みだけど、AIの分野でハッキリと出遅れているのは痛いよな。まだ時間はかかるだろうけれど、Appleあたりがダークホースになればいいんだが。ティム・クックじゃ時代の変化に適応できなさそうなんだよな。&lt;/p&gt;&#10;&lt;p&gt;まぁいずれにしてもしばらくコンシューマ向けのグラボはNVIDIAの独壇場だろう。値段もかつてのように10万でハイエンドってわけにもいかんのだろうね。&lt;/p&gt;&#10;&lt;p&gt;そうは言っても高いもんは高い。消費電力もエグいし。なので売れてないのもまぁしゃあないね。そこまでお高いグラボを欲するゲーマーは少数派だし、今スペックをもっとも必要とするAI民だって、全体として少ない。なんだかんだで自宅でStable Diffusionやるぞーなんて人類は少数派なのだよ。そりゃそうだね。&lt;/p&gt;&#10;&lt;h2 id="ポチってしまったのだった"&gt;ポチってしまったのだった&#10;&lt;/h2&gt;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B0C2CVS7LP&amp;linkId=fa7a6f96b8e5c46d1c3f2a60e3dcc8b7" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin"&gt;&lt;/iframe&gt;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01LPO6KCG&amp;linkId=777942d2933278141714d24d53d847ee" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin"&gt;&lt;/iframe&gt;まぁそうは言っても僕はその少数派の一人なので、今回10万ほどの予算でグラボをポチった。今回僕がポチったのはRTX4070で、GIGABYTEの3連ファンついてるやつ。サポートステイも買ったよ。もともとついていたサポーターは、GTX1080Ti専用だったからさ。。。&#13;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_11389&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1022&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/05/74c9196ac851a71ceadab59349e087d3.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;なぜゲーミングPCは無駄に光るのか？[/caption]&lt;/p&gt;&#10;&lt;p&gt;今日も我が家でレッドな光に照らされてます。サポートステイは端っこにつけたかったんだけれど、構造的に難しかった。。。まぁ真ん中より端よりだし大丈夫だろう。&lt;/p&gt;&#10;&lt;p&gt;この&lt;strong&gt;RTX4070、巷では値段の割に性能が微妙で誰が買うのかわからんという悪評ばかりではあるんだけれど、少なくともAI用途 + 既存GPU載せ換えという制約のもとでは、けっこういいと思う&lt;/strong&gt;んだよね。&lt;/p&gt;&#10;&lt;h2 id="取り回しやすい大きさ"&gt;取り回しやすい大きさ&#10;&lt;/h2&gt;&lt;p&gt;まず &lt;strong&gt;（比較的）大きくない&lt;/strong&gt;。いやそれでも僕が前に持っていたGTX1080Tiより厚みがあるんだけれど、長さは同じ261mmだしね。これだけでだいぶ助かる。標準が330mmくらいのRTX4070Tiにも小さい製品はあるけれど、メーカー推奨より物理的にコンパクトしてしまうと、どうしても無理は生じるものなんじゃないかな。けっこう酷使するつもりだから、あんまり無理はさせたくないんだよね。330mmくらいならギリケースに入りそうではあったんだけれど、入らなかったらショックが大きいし。&lt;/p&gt;&#10;&lt;p&gt;まぁでも入ったかな。少なくとも300mmくらいのやつなら問題なくいけたよな。実はグラボの換装が人生で初めてだったからちょっとビビってたね。確実にイケるだろうって思えるやつが欲しかった。&lt;/p&gt;&#10;&lt;h2 id="ワットパフォーマンス良好"&gt;ワットパフォーマンス良好&#10;&lt;/h2&gt;&lt;p&gt;TDP200Wも扱いやすい。GTX 1080Tiは250Wだから、むしろ以前より省エネになった。実際計測してみたら、負荷100%できっちり50W落ちていたね。温度も70℃くらいだしいい感じ。GTX1080Tiは83-85℃くらいまでいったからねぇ。&lt;/p&gt;&#10;&lt;p&gt;RTX4070Tiは285Wだから、30%も省エネ。あぁその分性能も落ちるわけだが。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chimolog.co/bto-gpu-stable-diffusion-specs/#10242151532LoRA" target="_blank" rel="noopener"&#10; &gt;【Stable Diffusion】AIイラストにおすすめなグラボをガチで検証【GPU別の生成速度】 | ちもろぐ&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ただこの神記事によると、Stable Diffusion用途だとRTX4070でも8割くらいの速度が出そうなんだよね。実際、今手元でやってみてもそんな感じなのかなって思う。Stable Diffusion用途だとちょっとワッパも良さげ。&lt;/p&gt;&#10;&lt;h2 id="rtx4070が良い人のケース"&gt;RTX4070が良い人のケース&#10;&lt;/h2&gt;&lt;p&gt;ということで、ユースケースと大きさとワットパフォーマンスの観点から、十分満足できそうだなと思って、RTX4070にした。僕と同じような状況の人、つまり&lt;strong&gt;Stable DiffusionのようなローカルAIが主たる目的で、既存のそこまででかくないグラボと置き換えたい民の人なら、悪評の多いRTX4070だが、選択肢に入ると思う&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁ僕が買った時はRTX4070Tiとの最安比較価格差が25000円くらいだったから微妙ではあるんだけれど、既に30000円くらいの差になってるし、若干下打ち感のあるRTX4070Tiと違って、RTX4070はもっと下落しそうな気配があるから、安くなったらけっこういいんじゃないかな。&lt;/p&gt;&#10;&lt;p&gt;僕も待ってたら安くなるだろうなーって思っていたけれど、GW前にポチってGW中に遊びたかったんだよ。GTX1080Tiと比べたら電気代は雲泥の差だし、それだったら変に粘るより欲しい時に買おうと思った。後悔はしていない。していない……。少なくとも、買わなかったという後悔はしていない。それが僕の人生だ。&lt;/p&gt;</description></item><item><title>Python3: Ctrl-cで割り込み処理</title><link>https://hack-le.com/python3-ctrl-c/</link><pubDate>Sat, 29 Apr 2023 02:27:50 +0900</pubDate><guid>https://hack-le.com/python3-ctrl-c/</guid><description>&lt;p&gt;怪奇！ChatGPTに聞いたことのメモ帳と化したマイブログ！&lt;/p&gt;&#10;&lt;p&gt;というのはいいとして、PythonスクリプトでCtrl-Cで割り込んだときに特定の処理をさせたいスニペット。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Python 3.9.16&lt;/li&gt;&#10;&lt;li&gt;macOS 12.6.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;p&gt;マジでChatGPTが出力したまんまのため若干気が引けつつ……。&lt;/p&gt;&#10;&lt;pre&gt;`import signal&#13; import sys&#13; import time&#13; &#13; def keyboard_interrupt_handler(signal, frame):&#13; print("\nCtrl-Cが押されました。特定の処理を実行します。")&#13; # ここに特定の処理を追加してください。&#13; &#13; sys.exit(0)&#13; &#13; # SIGINTシグナル（キーボード割り込み）のハンドラを設定&#13; signal.signal(signal.SIGINT, keyboard_interrupt_handler)&#13; &#13; print("プログラムが実行されています。Ctrl-Cを押してください。")&#13; &#13; while True:&#13; time.sleep(1)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;実行したらこんな感じ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2023/04/a076b3d47778cc3660ce8c71c5b800b3.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;ええやん。&lt;/p&gt;&#10;&lt;h2 id="sysexitとexit"&gt;sys.exit()とexit()&#10;&lt;/h2&gt;&lt;p&gt;そういえばあまり気にしてなかったけれど、sys.exit()とexit()って何が違うの？と思って聞いてみたらけっこうちゃんと違っていた。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Pythonの exit() と sys.exit() は、プログラムの実行を終了するために使用される2つの関数です。しかし、これらの関数には重要な違いがあります。&lt;/p&gt;&#10;&lt;p&gt;まず、 exit() はPythonの組み込み関数であり、 sys.exit() は sys モジュールに定義された関数です。&lt;/p&gt;&#10;&lt;p&gt;exit() は os._exit() を呼び出すことでプログラムを強制終了します。これにより、プログラムが完全に終了されるため、後処理などが実行されません。また、 exit() を呼び出すことができるのは、インタラクティブなPythonセッションなど、プログラムを実行している環境が os._exit() を呼び出すことを許可する場合のみです。&lt;/p&gt;&#10;&lt;p&gt;一方、 sys.exit() は、例外 SystemExit を発生させることでプログラムを終了します。この場合、Pythonインタプリターは例外をキャッチして、後処理を実行します。また、引数を渡すことができ、戻り値として指定した値を持つ SystemExit 例外を発生させることができます。&lt;/p&gt;&#10;&lt;p&gt;簡単に言うと、 exit() はプログラムを完全に終了し、 sys.exit() は例外を発生させてプログラムを終了し、後処理を実行します。どちらを使うべきかは、プログラムの状況によって異なります。通常、 sys.exit() を使用してプログラムを終了することが推奨されます。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;あ、なるほど……。コマンドインタプリタ呼び出してあれこれしているときはexit()でいいけど、プログラムの中ではちゃんとsys.exit()使おうってことか……。exit()は後処理しないんやね。なので、リソースの解放がうまくいかないこともあるようだ。適当に使っていいものではなかった。。。&lt;/p&gt;&#10;&lt;p&gt;僕は本当に阿呆だなぁ……全部ChatGPTがやってくれればいいのに……などと思いつつシコシコと後処理を書くのであった。&lt;/p&gt;</description></item><item><title>M3 Macの情報も出はじめた</title><link>https://hack-le.com/m3-mac-2/</link><pubDate>Sat, 01 Apr 2023 10:39:33 +0900</pubDate><guid>https://hack-le.com/m3-mac-2/</guid><description>&lt;p&gt;出るぞ出るぞというだけでちっとも音沙汰なかったMacのM3の情報だが、WWDCを控えて、急に情報が出てきた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gadget.phileweb.com/post-34568/" target="_blank" rel="noopener"&#10; &gt;次期MacBook Air搭載の「M3」チップ、M2 Proを凌駕する性能か | Gadget Gate&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-530735/" target="_blank" rel="noopener"&#10; &gt;M3のベンチマーク予測〜シングルコアがM2 Max、マルチコアがM2 Pro超えか - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これによると、なんだか次のMBAはMBPよりも性能の高いものになるか、あるいは省エネのほうに振るか。いずれにせよ、別に今すぐ必要というわけでもなかったので、M2を見送ったのはやはり正解だったかもしれない？&lt;/p&gt;&#10;&lt;p&gt;ただそれでもポチるかはわからぬ。自分としてはほしい気持ちはあるものの、今はそれよりも生成AIのほうにハマってしまっているので、どうせ金を使うならRTX4090の資金に回したいとかなんとか、そういうわけのわからないことを思っていたりもする。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、けっこう楽しみではある。Appleの動きは引き続き要チェックや。&lt;/p&gt;&#10;&lt;h2 id="とりあえずパワーアップ"&gt;とりあえずパワーアップ&#10;&lt;/h2&gt;&lt;p&gt;M3チップ、とりあえずM2 Proからシングルコア性能は大幅に上がり、それに合わせてマルチコア性能もその倍数だけ上がる見込みだ。とすると、別段急いでない身でM2を見送ったのは正解だったような気もする。特にノートPCでは有効だろう。この分野において、まだ当分Appleの牙城は揺らぐことはなさそうだ。&lt;/p&gt;&#10;&lt;p&gt;開発においても、さすがにM1が出てから3年、環境は随分と整ってきた。相変わらずDocker周りではなんだかあまりよくない噂は聞くものの、まぁ自分はそんなに使ってないので……。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、自分はノートPCはメインではないので、ポチるにしてもまずはデスクトップMacを待ちたい。M2 Pro Mac miniがつい最近出てしまったので、M3 Pro Mac miniが出るのは早くとも来年であろう。だいぶ先の話になる。それまでIntel Mac mini 2018を使い続けることになろうか。&lt;/p&gt;&#10;&lt;h2 id="aiの時代"&gt;AIの時代&#10;&lt;/h2&gt;&lt;p&gt;しかし、実際にポチるかどうかは微妙だなという気にもなっている。&lt;/p&gt;&#10;&lt;p&gt;今年は2023年である。生成AIがいよいよ本格的に火を吹き始め、今世界はIT革命以来の荒波に揉まれようとしている。宝の持ち腐れだったオーバースペックは明確な用途を見出し、その用途の前にはむしろスペック不足という実感のあるこの時代、ノートはともかく、デスクトップPCにおいてはワットパフォーマンスばかりを追いかけてもいられないだろう。&lt;/p&gt;&#10;&lt;p&gt;実際、MacでもAI絵を出力できるStable Diffusionは使えるのだが、友人のM1 MacのNeural Engineでやってみてもらったところ、その速度は僕が使っている2017年NVIDIA GTX 1080Tiより遅い。NEが40%パワーアップしているらしいM2だともっと速いだろうとは思うし、なにより消費電力を考えると比べるのはアンフェアだが、しかしデスクトップにおいては消費電力よりも何ができるかのほうが圧倒的に重要である。&lt;/p&gt;&#10;&lt;p&gt;そして、Macのデスクトップは今の所あまりうまくない。Mシリーズはモバイルの用途には見事にマッチしているのだが、デスクトップになるとその拡張性のなさが仇になっている。正直デスクトップMacで頑張るくらいなら、NVIDIAのRTX4090、そこまでいかずともRTX4080くらい買ったほうが幸せになれそうだなと、生成AIにハマっている身としては思う。&lt;/p&gt;&#10;&lt;h2 id="macosにこだわらなくても"&gt;macOSにこだわらなくても…&#10;&lt;/h2&gt;&lt;p&gt;OSのこともある。さすがに今からLinuxをやるかと言われるとちょっと引いてしまうが、Windowsなら全然やれる。ってか今Windowsマシンでこの記事書いてる。&lt;/p&gt;&#10;&lt;p&gt;スティーブ・バルマー時代のWindowsは選択肢にも入らなかったが、サティア・ナデラという聡明な指導者を得てからというもの、MSは明確に変わり、Windowsもまたよくなった。なんといってもWSL2が素晴らしい。十分に実用的である。&lt;/p&gt;&#10;&lt;p&gt;一方のmacOSは、ここ10年で正直別に良くなったという気はしない。トータルの使いやすさで今なおmacOSには得難い魅力があるものの、それはここ数年でできたものというより、大昔に確立されたものがまだ残っているという感じだ。というか、やたらめったらガチガチに固めるせいで、年々使いづらくなっている気さえする。OSをアップグレードした後に繰り広げられる、各アプリケーションからの許可祭りがあるが、あれはけっこう今のMacの象徴だなと思う。あれで本当に得してる人類いるのか。&lt;/p&gt;&#10;&lt;p&gt;ただスマホや他Macとの連携については便利だなと思う。ユニバーサルコントロールとかクリップボード共有とか。こういうところは地味にOS抑えてるのが大きいんだろうね。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、逆に言うとそれくらいか。僕はMacについては未だに最初に使ったSnow Leopardが一番良かったように思える。特に仮想デスクトップは絶対あの頃の4分割がよかったな。Macのフルスクリーン不便なんだよ。MacはiPhoneじゃあないんだよ。&lt;/p&gt;&#10;&lt;p&gt;それでも、Mac触ると馴染むようなものが感じられるから、根本の設計がよほど良かったんだろうな。&lt;/p&gt;&#10;&lt;p&gt;まぁそんなわけで、ノートはともかくデスクトップについては、CPUパワーが上がりました、ワットパフォーマンスもつよつよです、だと個人的にはちょっと訴求力がないな、と思う。&lt;/p&gt;&#10;&lt;h2 id="でもmacには期待している"&gt;でもMacには期待している&#10;&lt;/h2&gt;&lt;p&gt;と言いながら、&lt;strong&gt;実は期待してる&lt;/strong&gt;んだよね。AI面だと今はちょっと存在感ないけど、第三勢力として十分なポテンシャルはあるやん。&lt;/p&gt;&#10;&lt;p&gt;Stable Diffusionでいえば、既にNeural Engineを使った実装がApple直々にされているわけで、これはAppleとしてもAIの可能性は大いに感じていることの証左といってよいだろう。となると、デスクトップ向けにはこの部分を強化してくる可能性はあるよなと思う。&lt;/p&gt;&#10;&lt;p&gt;M2のM1に対する数少ない明確な優位性の一つはNeural Engineだと思うが、Neural Engineは正直ちょっと地味な存在であったように思う。まぁそれもそのはずで、「写真がめっちゃ綺麗！」とかその用途が地味だったからだと思われ、これではメディアの提灯記事くらいしか持て囃さないのは当然だろう。Appleも正直持て余してたんじゃないか。&lt;/p&gt;&#10;&lt;p&gt;しかしStable Diffusionの登場で流れは一気に変わった。&lt;strong&gt;もはや去年とは時代が違う&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;今はまだテキストについてはChatGPTの一強だが、これをStable Diffusionのようにローカルで動かせるようになれば、世界は激変する。検閲のないローカルAIこそ未来だ。そしてそれをもしMacで動かせることがあるならば、僕はいくらでも出そう。&lt;/p&gt;&#10;&lt;p&gt;Appleはクラウド弱いから、逆に期待できるところもあるんよね。まだまだ時間はかかるだろうし、体質的にはどこまでもクローズドな会社ではあるんだけどさ。でもハードウェアさえあれば問題ないから。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gigazine.net/news/20230313-llama-on-m1-mac/" target="_blank" rel="noopener"&#10; &gt;GPT-3のライバルとなるMetaの「LLaMA」をM1搭載Macで実行可能に、大規模言語モデルを普通の消費者向けハードウェアで実行可能であることが示される - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;現時点でこれなら、NVIDIAとは違う勢力としてコンシューマ向けに期待できるところもあるんじゃなかろうか。というか期待したいんだよなぁ。時間はかかっていいから頑張ってくれねぇかなぁ。&lt;/p&gt;&#10;&lt;p&gt;今にして思うと、スマホことiPhoneそれ自体は、革命というよりは革命の前哨戦という位置づけであったような気さえする。ここ10年、ネットもリアルもつまらなかった。僕が歳食ったせいだと思っていたが、Stable Diffusionの登場にはワクワクさせられたから、実際つまらなかったんだと思う。&lt;/p&gt;&#10;&lt;h2 id="なんだかんだで楽しみにしてる"&gt;なんだかんだで楽しみにしてる&#10;&lt;/h2&gt;&lt;p&gt;ということでM3 Macだが、少なくともビジネス用とのモバイルPCとしては、MBAは昨今の円安を差っ引いてなお大いに期待できるものとなりそうだ。ただデスクトップMacについては、線形の進化だとちょっと微妙なものになりそうだけれど、Appleもこの時代の変化を敏感に感じ取っているはず。他のビッグテックと違ってクラウドに弱くハードに強いという特性から、中央集権的なサービス化ではなく、個人のマシンを使ったやり方に力を入れるだろう。それには期待したい。よくわからんゴーグルには期待してない。あれはやめとけ……。&lt;/p&gt;</description></item><item><title>Pythonで深いネストのlistやDictの値を調べてDecimalがあればint or floatに変換する</title><link>https://hack-le.com/python-list-dict-decimal/</link><pubDate>Mon, 27 Mar 2023 16:23:25 +0900</pubDate><guid>https://hack-le.com/python-list-dict-decimal/</guid><description>&lt;p&gt;DynamoDB使ってるとちょくちょくあるシチュエーションかなと思う。DynamoDBはDecimalだけどjsonになおす時にDecimalあると使えないし。&lt;/p&gt;&#10;&lt;p&gt;こういうロジック考えると地味に頭使うと思うんだけど、ChatGPTが1秒で考えてくれました。なんか軽く死にたい。しかも結局使わなかった😂&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Python 3.9&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ロジック"&gt;ロジック&#10;&lt;/h2&gt;&lt;p&gt;以下、int, floatは何もせず、Decimalがあったらちゃんとint or floatにかえしてくれるやつ。&lt;/p&gt;&#10;&lt;pre&gt;`def _numeric_to_float_if_possible(value: Any) -&gt; Any:&#13; if isinstance(value, (int, float)):&#13; return value&#13; elif isinstance(value, Decimal):&#13; if value % 1 == 0:&#13; return int(value)&#13; else:&#13; return float(value)&#13; elif isinstance(value, dict):&#13; return {k: _numeric_to_float_if_possible(v) for k, v in value.items()}&#13; elif isinstance(value, list):&#13; return [_numeric_to_float_if_possible(v) for v in value]&#13; else:&#13; return value&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ChatGPTは僕よりプログラムがうまい。&lt;/p&gt;&#10;&lt;h2 id="jsonになおす時にどうにかしたいだけなら"&gt;jsonになおす時にどうにかしたいだけなら&#10;&lt;/h2&gt;&lt;p&gt;json.dumps()でエラー出るの防ぎたいだけなんだよね、だったら下のほうが簡単にできる。&lt;/p&gt;&#10;&lt;pre&gt;`def decimal_default_proc(obj):&#13; if isinstance(obj, Decimal):&#13; if obj % 1 == 0:&#13; return int(obj)&#13; return float(obj)&#13; raise TypeError&#13; &#13; print(json.dumps({...}, default=decimal_default_proc)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;僕の用途だったらこれでよかった😂&lt;/p&gt;&#10;&lt;p&gt;参考にさせていただきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/ekzemplaro/items/5fa8900212252ab554a3" target="_blank" rel="noopener"&#10; &gt;python3 で Decimal を JSON に変換 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>bashでフォルダ内にある横長の画像ファイルだけ移動する</title><link>https://hack-le.com/folder-landscape/</link><pubDate>Tue, 21 Mar 2023 14:22:37 +0900</pubDate><guid>https://hack-le.com/folder-landscape/</guid><description>&lt;p&gt;なんか限定的な用途ですが、表題まま。Stable Diffusionとかで絵をいっぱい作ってるとやりたいことがあるので。なおChatGPTに教えてもらった模様。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="スクリプト"&gt;スクリプト&#10;&lt;/h2&gt;&lt;p&gt;カレントディレクトリにある横長画像をすべてlandscapeフォルダにぶちこむ。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; &#13; # landscapeフォルダが存在しない場合は作成する&#13; if [ ! -d "landscape" ]; then&#13; mkdir landscape&#13; fi&#13; &#13; # カレントディレクトリにある画像ファイルについて、横のサイズが縦のサイズよりも大きいものをlandscapeフォルダに移動する&#13; for file in *.{jpg,jpeg,png,gif}; do&#13; width=$(identify -format '%w' "$file")&#13; height=$(identify -format '%h' "$file")&#13; if [ "$width" -gt "$height" ]; then&#13; mv "$file" landscape/&#13; fi&#13; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;gtなのでsquare形状は移動しない。squareも移動させたいならgeにする。またltないしleにしたら今度は縦長だけ井戸させられるけどそれだったらフォルダ名も変えたほうがいいね。&lt;/p&gt;&#10;&lt;p&gt;ワンライナも教えてもらったけどうまく動かんかった。まぁ個人用スクリプトに入れてPATH通したほうがいいかなと思う。&lt;/p&gt;</description></item><item><title>motoでDynamoDBのMockを作成する</title><link>https://hack-le.com/moto-dynamodb-mock/</link><pubDate>Tue, 21 Mar 2023 13:04:08 +0900</pubDate><guid>https://hack-le.com/moto-dynamodb-mock/</guid><description>&lt;p&gt;最初に作る時いつもどうやるんだっけ？となるのでメモ。&lt;/p&gt;&#10;&lt;p&gt;motoを使ってDynamoDBのmock作る時のテンプレ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Python 3.9.16&#10;&lt;ul&gt;&#10;&lt;li&gt;boto3==1.18.1&lt;/li&gt;&#10;&lt;li&gt;pytest==6.2.4&lt;/li&gt;&#10;&lt;li&gt;moto==4.0.5&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;macOS 12.6.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ディレクトリ構造"&gt;ディレクトリ構造&#10;&lt;/h2&gt;&lt;p&gt;func/app.py をテストする感じで。&lt;/p&gt;&#10;&lt;pre&gt;`.&#13; ├── func&#13; │ ├── app.py&#13; ├── tests&#13; │ ├── __init__.py&#13; │ └── unit&#13; │ ├── __init__.py&#13; │ ├── conftest.py&#13; │ ├── test_func&#13; │ │ ├── test_app.py&#13; │ ├── test_data.yml&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;func/app.py ではDynamoDBを操作している。test_app.pyでfunc.app.main()を動かすには、DynamoDBをpytestで実行できる必要がある。&lt;/p&gt;&#10;&lt;p&gt;テーブルはusersテーブルで、PK,SKのほかGSIを持つ。&lt;/p&gt;&#10;&lt;h2 id="funcapppy"&gt;func/app.py&#10;&lt;/h2&gt;&lt;pre&gt;`import boto3&#13; &#13; dynamo = boto3.resource('dynamodb')&#13; table = dynamo.Table(os.environ['TABLE_USERS'])&#13; &#13; def main():&#13; res = table.scan()&#13; print(res['Items'])&#13; return True&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;usersテーブルをスキャンする謎の関数。これをテストする。&lt;/p&gt;&#10;&lt;h2 id="test_datayml"&gt;test_data.yml&#10;&lt;/h2&gt;&lt;p&gt;テストデータを記述する。taroさんだけ登録している寂しいテーブル。&lt;/p&gt;&#10;&lt;pre&gt;`environment:&#13; TABLE_USERS: "test_users"&#13; AWS_DEFAULT_REGION: "ap-northeast-1"&#13; DynamoDB:&#13; TABLE_USERS:&#13; AttributeDefinitions:&#13; - AttributeName: user_id&#13; AttributeType: S&#13; - AttributeName: created_at&#13; AttributeType: N&#13; - AttributeName: user_name&#13; AttributeType: S&#13; KeySchema:&#13; - AttributeName: user_id&#13; KeyType: HASH&#13; - AttributeName: created_at&#13; KeyType: RANGE&#13; GlobalSecondaryIndexes:&#13; - IndexName: 'user_name-index'&#13; KeySchema:&#13; - AttributeName: user_name&#13; KeyType: HASH&#13; Projection:&#13; ProjectionType: ALL&#13; ITEMS_USERS:&#13; - user_id: user1&#13; created_at: 1600000000&#13; user_name: taro&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;地味に環境変数の設定もしている。GSIの設定が味噌。各種変数名は後述のconftest.pyで使うので、そこで合わせ込む。&lt;/p&gt;&#10;&lt;h2 id="conftestpy"&gt;conftest.py&#10;&lt;/h2&gt;&lt;p&gt;テスト共通で読み込めるようにconftest.pyに以下を記述する。&lt;/p&gt;&#10;&lt;pre&gt;`import yaml&#13; import os&#13; import pytest&#13; import boto3&#13; from moto import mock_dynamodb&#13; &#13; &#13; config_file = "tests/unit/test_data.yml"&#13; &#13; &#13; @pytest.fixture(autouse=True)&#13; def set_envs(monkeypatch):&#13; with open(config_file, "r", encoding="utf-8") as fp:&#13; envs = yaml.safe_load(fp)["environment"]&#13; &#13; for k, v in envs.items():&#13; monkeypatch.setenv(k, str(v))&#13; &#13; &#13; @pytest.fixture(autouse=True)&#13; def table():&#13; with mock_dynamodb():&#13; with open(config_file, "r", encoding="utf-8") as fp:&#13; test_data = yaml.safe_load(fp)["DynamoDB"]&#13; &#13; # users テーブルの作成&#13; table_config = test_data["TABLE_USERS"]&#13; dynamodb = boto3.resource("dynamodb")&#13; dynamodb.create_table(&#13; TableName=os.environ["TABLE_USERS"],&#13; AttributeDefinitions=table_config["AttributeDefinitions"],&#13; KeySchema=table_config["KeySchema"],&#13; GlobalSecondaryIndexes=table_config["GlobalSecondaryIndexes"],&#13; BillingMode="PAY_PER_REQUEST",&#13; )&#13; table = dynamodb.Table(os.environ["TABLE_USERS"])&#13; with table.batch_writer() as batch:&#13; for item in test_data["ITEMS_USERS"]:&#13; batch.put_item(Item=item)&#13; &#13; yield&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでテストコード中でusersテーブルを読み込めるようになる。&lt;/p&gt;&#10;&lt;h2 id="test_apppy"&gt;test_app.py&#10;&lt;/h2&gt;&lt;pre&gt;`import pytest&#13; &#13; &#13; def test_main():&#13; from func import app&#13; &#13; assert app.main()&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;main()を実行するだけの関数。&lt;/p&gt;&#10;&lt;h2 id="実行"&gt;実行&#10;&lt;/h2&gt;&lt;p&gt;func, testsのあるディレクトリから&lt;/p&gt;&#10;&lt;pre&gt;`pytest -vv -s /tests`&lt;/pre&gt;&#13;&#10;&lt;p&gt;を実行して、PASSすることを確認する。&lt;/p&gt;</description></item><item><title>同じディレクトリにpngファイルと拡張子以外が同じjpgを検出・削除する</title><link>https://hack-le.com/png-jpg-bash-fish/</link><pubDate>Sun, 19 Mar 2023 03:50:41 +0900</pubDate><guid>https://hack-le.com/png-jpg-bash-fish/</guid><description>&lt;p&gt;どういう状況やねんという感じですが、自分はこれに遭遇するのです。そしてChatGPTにきいたら即座にいい感じのコードを出してくれたのでメモ。何度も同じこと聞くの阿呆くさいからね。&lt;/p&gt;&#10;&lt;h2 id="検出削除のbashスクリプト"&gt;検出・削除のbashスクリプト&#10;&lt;/h2&gt;&lt;p&gt;何も指定しないと検出のみ、-rを引数に入れると削除まで実行する。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; &#13; # 引数によって、削除を行うかどうかを設定する&#13; delete=false&#13; if [ "$1" == "-r" ]; then&#13; delete=true&#13; fi&#13; &#13; # 現在のディレクトリ内のpngファイルをループ&#13; for png_file in *.png; do&#13; # 拡張子を取り除いたファイル名を取得&#13; base_name="${png_file%.png}"&#13; &#13; # 対応するjpgファイルが存在するか確認&#13; if [ -e "${base_name}.jpg" ]; then&#13; # pngファイルをリストアップ&#13; echo "$png_file"&#13; &#13; # 削除フラグが有効の場合、pngファイルを削除する&#13; if [ "$delete" = true ]; then&#13; rm "$png_file"&#13; echo "Deleted $png_file"&#13; fi&#13; fi&#13; done&#13; &#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;なるほどそうだねという感じ。&lt;/p&gt;&#10;&lt;h2 id="ワンライナ-bash"&gt;ワンライナ bash&#10;&lt;/h2&gt;&lt;h3 id="検出"&gt;検出&#10;&lt;/h3&gt;&lt;pre&gt;`for png_file in *.png; do base_name="${png_file%.png}"; [ -e "${base_name}.jpg" ] ; echo "$png_file"; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="削除まで"&gt;削除まで&#10;&lt;/h3&gt;&lt;pre&gt;`for png_file in *.png; do base_name="${png_file%.png}"; [ -e "${base_name}.jpg" ] &amp;&amp; rm "$png_file"; done`&lt;/pre&gt;&#13;&#10;&lt;h2 id="ワンライナ-fish"&gt;ワンライナ fish&#10;&lt;/h2&gt;&lt;h3 id="検出-1"&gt;検出&#10;&lt;/h3&gt;&lt;pre&gt;`for png_file in *.png; set base_name (string replace -r '\.png$' '' $png_file); if test -e "$base_name.jpg"; echo $png_file; end; end`&lt;/pre&gt;&#13;&#10;&lt;h3 id="削除まで-1"&gt;削除まで&#10;&lt;/h3&gt;&lt;pre&gt;`for png_file in *.png; set base_name (string replace -r '\.png$' '' $png_file); if test -e "$base_name.jpg"; rm $png_file; end; end`&lt;/pre&gt;&#13;&#10;&lt;p&gt;素晴らしい😭&lt;/p&gt;&#10;&lt;h2 id="おまけ-ディレクトリ内すべてのpngをjpgにする"&gt;おまけ: ディレクトリ内すべてのpngをjpgにする&#10;&lt;/h2&gt;&lt;p&gt;以下の挙動のスクリプト。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;拡張子以外が同じ名前のjpgファイルがあるかを確認する&lt;/li&gt;&#10;&lt;li&gt;存在する時はpngファイルを削除する&lt;/li&gt;&#10;&lt;li&gt;存在しない時はjpgに変換し、元のpngファイルは削除する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; &#13; # 現在のディレクトリ内のpngファイルをループ&#13; for png_file in *.png; do&#13; # 拡張子を取り除いたファイル名を取得&#13; base_name="${png_file%.png}"&#13; &#13; # 対応するjpgファイルが存在するか確認&#13; if [ -e "${base_name}.jpg" ]; then&#13; # jpgファイルが存在する場合、pngファイルを削除する&#13; rm "$png_file"&#13; echo "Deleted $png_file"&#13; else&#13; # jpgファイルが存在しない場合、pngファイルをjpgに変換して削除する&#13; convert "$png_file" "${base_name}.jpg"&#13; rm "$png_file"&#13; echo "Converted and deleted $png_file"&#13; fi&#13; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;やりたいことはこれでよかったと後で気づいた。&lt;/p&gt;</description></item><item><title>結局M2 Mac miniは見送った</title><link>https://hack-le.com/m2-mac-mini-2/</link><pubDate>Thu, 02 Mar 2023 14:19:14 +0900</pubDate><guid>https://hack-le.com/m2-mac-mini-2/</guid><description>&lt;p&gt;あれだけ色々と書いておきながら、結局M2 Mac miniはポチらないまま来週を迎える気になっている。理由は色々とあるのだが、今は転換期のように思えたので、差し迫って必要でない今慌ててポチらなくてもいいかと思った。&lt;/p&gt;&#10;&lt;p&gt;まぁ予算25万という現実の前に「それだったらグラボほしいわ」とか思い始めたのも大いにある。AIやるならなんだかんだでNVIDIAだからねぇ……。グラボもめっちゃ高いけどな……。&lt;/p&gt;&#10;&lt;p&gt;AppleのNeural Engineの進化は目覚ましいものがあるし、M2デバイスのウリもそこだろう。M3でさらなるNEの進化と半導体の微細化が進むなら、それは期待したい。&lt;/p&gt;&#10;&lt;h2 id="25万はそれなりに考えたなぁ"&gt;25万はそれなりに考えたなぁ&#10;&lt;/h2&gt;&lt;p&gt;結局M2 Mac miniはポチらずに3月になってしまい、今の気分やら昨今の情勢やら色々と鑑みると、今回は見送りかなぁという感じになっている。&lt;/p&gt;&#10;&lt;p&gt;理由については色々あるのだが、&lt;strong&gt;まず25万で怯んだ&lt;/strong&gt;というのがやっぱり最初にある。今のIntel Mac mini 2018はSSDだけ盛って15万ちょい、プラス3万でメモリ32GBに自前換装（今の相場ならメモリは半額だけどね、当時はね）だから、なんだかんだで18-19万かかっているわけで、そこに+5万でInter CPUからM2コアと考えると、別段悪くないのかもしれないけれど、しかし逆に言うとそれだけで+5万か、2018からもう5年たつというのに、という気分もある。まぁ2018は年末だったから実質4年ちょっとなんだけれど。&lt;/p&gt;&#10;&lt;p&gt;といっても&lt;strong&gt;円安を考えると当時より2割なんなら3割くらい値上がりしても仕方ない&lt;/strong&gt;わけで、実際為替の影響で20%くらい上がっているので、それを差っ引いて考えると2018年の相場では20万くらいで買えたのかもしれない。20万を切っていたらポチっていただろうか。&lt;/p&gt;&#10;&lt;p&gt;それはけっこうあるかもしれない。25万という価格から「そういえばうちにあるゲーミングPCもそれくらいしたなぁ」ということを思い出し、「この価格だったらゲーミングPCも射程内なのか」などと思い始め、そこから色々と今のグラボ事情やらなんやらを調べているうちに、「今慌ててM2 Mac miniをポチることもないか」という心情になったので、20万を切っていたら違う展開になっていた可能性はある。&lt;/p&gt;&#10;&lt;p&gt;まぁ為替で高くなっているのはもちろんMacだけではなく、むしろグラボこそひどいことになっていて、特にNVIDIAのグラボはかなり割高……なのは商流の問題が大いにあるだろうが。&lt;strong&gt;Appleの地味に偉いところの一つは、中間マージンを嫌ってか全世界に直営店を展開したところ&lt;/strong&gt;だと思う。Appleというよりジョブズの経営センスだろうか。まぁそうせざるを得なかったのかもしれないが。&lt;/p&gt;&#10;&lt;h2 id="拡張性もないし"&gt;拡張性もないし&#10;&lt;/h2&gt;&lt;p&gt;なのでまぁ、&lt;strong&gt;高いなぁと思いつつも、特別に割高だと思っているわけではなかったりする&lt;/strong&gt;。&lt;strong&gt;カスタマイズは割高やけど。&lt;/strong&gt; ユニファイドメモリ+16GBするだけで+56,000円はほんとに勘弁してくださいって感じ。&lt;/p&gt;&#10;&lt;p&gt;SSDはもっとつらい。最初に盛る以外の選択肢を奪っておきながらあの価格。確かにいいものを使っているのかもしれないけれど、前にも書いたがストレージの一番の要件は容量であって速度ではない。もちろん速度は重要だがすべてのアイテムで3GB/sの速度が必要ではない。Appleも内心わかってるからこっそりストレージダウングレードしたんやろ。ユーザ体験変わらんだろって。まぁAppleは明確にユーザ体験変わってもHWのダウングレードすることあるけど（Mac mini 2014の悪夢）。&lt;/p&gt;&#10;&lt;p&gt;といっても、SSDは最近だと外付けが熟れているからなんとかなるかなとは思う。でもなー、外付けはマウント不安定だったりするからやっぱり内蔵がええなぁ。&lt;/p&gt;&#10;&lt;p&gt;とまぁ、商売の仕方は10年代中頃に戻ってしまった感はあるものの、技術的な理由付けで仕方ないかなとユーザに思わせるのはうまくなったなと思う。とはいえこのカスタマイズ性のなさは、購入を見送る動機の一つにもなる。まぁAppleからすれば初期投資抑えられても稼ぎにはならんので、それで多少購入者が減ったとしても、盛ったやつを売りつけるほうが利益になるのかもしれない。実際そのほうが利益になるから今の売り方なんかな。&lt;/p&gt;&#10;&lt;h2 id="激変する生成aiを取り巻く環境とmacの対応"&gt;激変する生成AIを取り巻く環境とMacの対応&#10;&lt;/h2&gt;&lt;p&gt;そんなこんなで、これだったら他にも色々あるんじゃないのかなと、ゲーミングPCとか見始めたわけだ。元々興味をもった発端が、Apple SiliconでもStable Diffusionできるぞという話からだったので、それ目的ならむしろゲーミングPCのほうが正道である。ただまぁ、僕の普段遣いはなんだかんだでMacなので、Macを使いながら生成AIで遊べたらいいなくらいの気持ちであった。&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;この生成AIというやつ、やり始めると存外面白く、今一番ハマっていると言っても過言ではない&lt;/strong&gt;。Stable Diffusionならば確かにMacでも扱える環境はあるものの、生成AIはこれだけではないし、またStable DiffusionにしたってWindows/Linuxのほうが圧倒的に環境が整っているわけだ。なので、やはり素直にNVIDIAをのせたWindows PCでいいんじゃないのという気がする。&lt;/p&gt;&#10;&lt;p&gt;実際、今一番出回っているだろうStable Diffusionのアプリの一つAUTOMATIC1111版（通称1111)と呼ばれているものは、UIをWebサーバでもっているのだが、ちょっと起動スクリプトに引数を足してやるだけでLAN内からアクセスできるようになるので、生成にかかる操作はMacからもブラウザ経由でできるし、正直Stable DiffusionのためにMacを使う理由はない。&lt;/p&gt;&#10;&lt;p&gt;とはいえMacで使えたら便利だなとはやはり思う。ちなみに1111はMacでもけっこうちゃんと動くらしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://mac-ra.com/mac-automatic1111-stable-diffusion-webui/" target="_blank" rel="noopener"&#10; &gt;AUTOMATIC1111 版 stable-diffusion-webui を Mac で使う | 林檎コンピュータ&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この方は速度も書いてくれいて、20steps 512x512で45秒程度とのことで、これはM系列Macの消費電力を考えると驚異的だと思う一方、僕の持っている6年前のグラボGTX1080Tiでもその設定なら15秒もかからずできるわけだ（性能的には今のRTX3060よりちょい上くらいらしい）。もちろん消費電力は比べるべくもないが、デスクトップだと別に多少電気使ってもいいんじゃないの、いくら電気代高騰とはいえそこまで抑え込む必要もないし、という気でいるので、まぁ微妙な感じ。&lt;/p&gt;&#10;&lt;h2 id="macにも期待している"&gt;Macにも期待している&#10;&lt;/h2&gt;&lt;p&gt;ただAppleも常に進化を続けていて、Neural Engineを利用することでなかなかの生成速度を出せるようになったらしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://applech2.com/archives/20230225-diffusers-for-mac-support-apple-neural-engine.html" target="_blank" rel="noopener"&#10; &gt;テキストから画像を生成できるオープンソースのStable Diffusionアプリ「Diffusers for Mac」がGPU/Neural Engine選択に対応し、Apple Silicon Macでは生成速度が最大2倍に。&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;実際、M1 Macを持っている友人に試してみてもらったところ、25stepsで14秒弱だったらしく、これだったらGTX1080Tiと遜色ない。&lt;/p&gt;&#10;&lt;p&gt;で、&lt;strong&gt;M3は半導体微細化は当然、Neural Engineのさらなる強化もあるだろうし、またStable Diffusionだけではない他の生成AIへの対応も進んでいくかもしれない&lt;/strong&gt;。そうすると、けっこう期待してもいいように思える。&lt;/p&gt;&#10;&lt;p&gt;Appleは常にHWとSWをセットで進化させてきたので、最先端のSWを堪能するには最先端のHWがいるだろう。そして、生成AIを取り巻く環境は日進月歩で、昨日できなかったことが今日できるようになっている状態だ。であれば、何もこんな時にハードなウェアを買わんでもええかなぁ、という風に思い始めた。今もう既にグラボのせたPCだってあるんだし。&lt;/p&gt;&#10;&lt;p&gt;ということで、別に生成AIを主たる目的にしているわけではないのだが、どうせなら使いたいという気持ちもあり、今回はM2 Mac miniの購入は見送った。25万あったらRTX4080も買えるし。なおRTX4090は買えない模様。なんやこの価格……頭おかしい……。&lt;/p&gt;&#10;&lt;p&gt;M3に期待したい。&lt;/p&gt;</description></item><item><title>M2 Mac miniは結局ポチらず、なぜかWindows PCをまた触り始めているが、まぁでもMacなんだよなぁ</title><link>https://hack-le.com/m2-mac-mini-windows-pc/</link><pubDate>Sat, 18 Feb 2023 04:42:32 +0900</pubDate><guid>https://hack-le.com/m2-mac-mini-windows-pc/</guid><description>&lt;p&gt;発売されて2週間が経過するが、結局その後Mac miniをポチっていない。発売2週間前くらいの時が自分の中で一番盛り上がっていて、発売される頃には既に熱が冷めていた感じだ。&lt;/p&gt;&#10;&lt;p&gt;今のIntel Mac mini 2018よりもよく働いてくれることは想像に易いが、そうはいっても25万円かけて今リプレースするほどでもないか、というお気持ちである。というか、25万あったらゲーミングPC買えるなとか思い始めたのであった。&lt;/p&gt;&#10;&lt;p&gt;その流れで、GTX 1080Ti（VRAM 11GB！）を搭載したWindows PCを現在再稼働しており、最近無駄にSSD 2TBを増設した。たまにWindows PCをいじっていると、PCそのものをいじるガチャガチャ感が感じられて楽しい。Macはこういう楽しさはないよなと思う。ただなんとも言えない使い心地の良さがあって、そのためにふだん使いはもう13年ほどずっとMacであり続けている。&lt;/p&gt;&#10;&lt;h2 id="windowsは楽し"&gt;Windowsは楽し&#10;&lt;/h2&gt;&lt;p&gt;Windowsも悪くない。WSL2が十分実用的な域に達していることが大きい。そりゃまぁターミナルの操作感でいえばUNIXであるMacやネイティブのLinuxのほうに軍配があがるものの、Windowsしか対応していないソフトやドライバは実際問題多く存在する。PCの選択肢もたくさんある。&lt;/p&gt;&#10;&lt;p&gt;確かにゴチャゴチャしているしガチャガチャしている感はあるのだが、それも何かPCをいじっているんだなぁと思わせる楽しさだとも感じられる。実際、最近2TBのSSDを増設した。SATAとはいえCrucialの2TB SSDが14,100円はリーズナブルだったと思う。まぁ増設もなぜだか一部HDのスロットが認識しないなどあり色々と試行錯誤はあったものの、動いたので結果オーライだ。&lt;/p&gt;&#10;&lt;p&gt;久しぶりにいじると&lt;strong&gt;Windows PCにはMacにはない楽しさがある&lt;/strong&gt;なと実感する。Macは熟れているものの、PCをいじっている楽しさみたいなものはあまりない。拡張性もほとんどなく、今やストレージやメモリすらも購入時にゲロほど高いカスタマイズ以外の選択肢がなくなってしまった。&lt;/p&gt;&#10;&lt;h2 id="macは高し"&gt;Macは高し&#10;&lt;/h2&gt;&lt;p&gt;M2 Mac miniの512GBストレージを2TBにする場合、84,000円ほど追加の費用がかかる。下位モデルでは256GBから512GBへのアップグレードに28,000円とっているのを見ると、Apple的に2TB SSDは13-14万くらいの代物とみて良さそうだ。&lt;/p&gt;&#10;&lt;p&gt;もちろんMacに搭載されているストレージの速度性能はぶっ飛んでいるので単純な比較はアンフェアかもしれない。だが思い出してほしいのだが、&lt;strong&gt;ストレージとは「貯蔵」という意味である&lt;/strong&gt;。そのもっとも重要な機能はどれだけ保存できるか、つまり容量だ。速度に過度な比重を置いてストレージを比較することこそ奇妙な話である。&lt;/p&gt;&#10;&lt;p&gt;もちろん速度も重要ではあるが、単なる画像データや音楽データの置き場に3GB/sのインタフェースはどう考えても不要であり、今なおHDですら事足りることは多い（さすがにHDとなると音の問題もあるが）。ゲームのロードなどはもう少し速度がほしいが、それでもSATA SSDで体感的に十分だ。ストレージにおいては、感じられない速度の向上よりも容量あたり価格の割安さのほうが、全体的なUXの向上に寄与する。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;無駄に高性能で高価なストレージのみを選択肢にして売りつけるのはAppleのビジネス上の戦略であって、ユーザ体験のためではない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁそれでもストレージは安くなった外付けSSDという逃げ道がデスクトップならば存在するものの、メモリはそうもいかない。メモリは最初に必要な容量を選ぶ必要がある。&lt;/p&gt;&#10;&lt;p&gt;Mac mini 2014の無意味なソルダリングと違って（当時はMac暗黒期だった。Mac mini 2018発売前の愚痴記事→「&lt;a class="link" href="https://hack-le.com/buywin/" &gt;ここ最近のMacの愚痴 – 或る阿呆の記&lt;/a&gt;」）、今のユニファイドメモリには技術的な意味があるために多少納得感はあるが、それにしても16GBから32GBのアップグレードで+56,000円は二の足を踏む。下位モデルにおける8GBから16GBへのアップグレードが+28,000円であるとことを考えると、メモリについても32GBメモリで11万ほどというのがAppleの提示する相場なのだろう。今はDDR4でDIMMならば8GB4枚組32GBがその10分の1の価格で手に入る。2万払えば64GBだ。果たしてそれほどの価格差に見合うものかは、甚だ疑問である。&lt;/p&gt;&#10;&lt;h2 id="それでもmacは使いやすい"&gt;それでもMacは使いやすい&#10;&lt;/h2&gt;&lt;p&gt;ということで、10年ほど前はハードウェア面でも優れていたMacだったが、今となっては同じ金を出すならば他に選択肢があるだろう、という状態だ。しかしそれでもなお、macOSというソフトウェアには優位性がある。&lt;strong&gt;割高なハードウェアは、macOSを動かすためのライセンス費用みたいなもの&lt;/strong&gt;という認識だ。さらに最近は、&lt;strong&gt;Appleの構築するエコシステムをPCで利用する参加費用&lt;/strong&gt;も加わっている。そのために高騰している、というのが僕の見方だ。&lt;/p&gt;&#10;&lt;p&gt;それだけの価値はある。&lt;strong&gt;なんというかまぁ、使いやすい&lt;/strong&gt;のである。Windowsデスクトップをガチャガチャ楽しんだ後にMac miniを動かすと、なんとも言えず落ち着く。&lt;/p&gt;&#10;&lt;p&gt;直接的には、トラックパッドの操作性と、UNIXのソフトウェア資産をベースに構築された体系の心地よさが大きいだろう。個人的にはEmacsキーバインドがデフォルトで使えるのもすごく嬉しい。このあたりの感覚は10年前から大筋の考えは変わっていない。以下は10年前の記事だ（このブログは10年以上続いている！）。&lt;/p&gt;&#10;&lt;p&gt;/32323358-2/&lt;/p&gt;&#10;&lt;p&gt;この記事から10年、クラウド全盛の今TimeMachineは時の中に置き去りにされ、改悪を続けられた悪夢iTunesはついに死んだが、&lt;strong&gt;今なおMacから離れられていない&lt;/strong&gt;。10年代中盤は暗黒期だったが、乗り越えられたのはSWの使いやすさ故だろう。上記の記事は今読んでなお納得感がある（ちなみに2018年前のMac系の記事は愚痴記事が多い）。&lt;/p&gt;&#10;&lt;p&gt;しかしこのトータルの使い心地の良さは、UNIXだのトラックパッドの操作性だのといった言葉だけでは説明がつかないとも思う。ましてEmacsキーバインドがポイントのはずはない。&lt;/p&gt;&#10;&lt;p&gt;では時折言われるようなフォントの美麗さ故なんだろうか。まぁ綺麗ではある。それは思う。確かに昔は感動した。Automatorなんかも使ってみれば便利だ。だがそのために良いのかと言うと、そうではない気がする。わからない。AppleScriptも未だによくわからない。ただ、とにかくトータルで使いやすい。&lt;/p&gt;&#10;&lt;p&gt;ただしFinderは永遠に使いづらい。お前だけはダメだ。実はMSの刺客なんだろう？そのアイコンは富士通に外注して作ったのか？まぁファイラは別のものを使えばいい。それくらいの自由さはある。&lt;/p&gt;&#10;&lt;p&gt;ソフトウェアの使い心地と相まって、筐体の良さもある。Macノートのアルミニウムボディは今なお素晴らしいし、デスクトップではその静音性と省スペースさも見逃せない。&lt;/p&gt;&#10;&lt;p&gt;そして、Macは揃えるとさらにユーザ体験が向上する。ユニバーサルコントロールは便利だし、iOSとの連携も細かく素晴らしい。そしてこの細かさは、同一の会社がHWから揃えているからこそできることなのだろう。&lt;/p&gt;&#10;&lt;h2 id="メインはmacなんだろう多分"&gt;メインはMacなんだろう、多分&#10;&lt;/h2&gt;&lt;p&gt;25万という現実を前に、少し頭が冷えて他のゲーミングPCなど物色しつつWindows PCを動かし始めた今日このごろ。久しぶりに電源ユニットまで購入してしまい、また自作PCでもやろうかという気にもなっている。たまにやるとPCいじりは楽しい。ただまぁ、あくまで趣味である。&lt;/p&gt;&#10;&lt;p&gt;普段はやっぱりMacを使っている。Mac暗黒期を経て得られた光明Intel Mac mini 2018を当分は使い続けるかもしれないし、どこかでふと思い立ってM2 Mac miniをポチるかもしれないし、半導体の微細化が進むであろうM3を待つかもしれない。ただいずれにしても、これからもメインはMacなんだろうな、とは思う。そうであってほしい、と言うべきかもしれない。&lt;/p&gt;</description></item><item><title>HP OMEN880 YouTubeに上がっているHPの分解動画</title><link>https://hack-le.com/hp-omen880-youtube/</link><pubDate>Tue, 07 Feb 2023 14:11:18 +0900</pubDate><guid>https://hack-le.com/hp-omen880-youtube/</guid><description>&lt;p&gt;今はもう動かないおじいさんのゲーミングPCを動かすぞっと。&lt;/p&gt;&#10;&lt;p&gt;とりあえず怪しいのは電源とマザボ。分解するので、YouTubeに上げられているHPの分解動画のリンクをメモしておく。こういうのあるのは助かるよね。&lt;/p&gt;&#10;&lt;h2 id="技術仕様とパーツについて"&gt;技術仕様とパーツについて&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://support.hp.com/us-en/product/omen-by-hp-880-100-desktop-pc-series/18695893" target="_blank" rel="noopener"&#10; &gt;OMEN by HP 880-100 Desktop PC series | HP® Customer Support&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://support.hp.com/jp-ja/document/c05877140" target="_blank" rel="noopener"&#10; &gt;OMEN by HP 880-186jp Desktop PC 製品仕様 | HP®カスタマーサポート&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="cpu-core-i7-8700k"&gt;CPU Core i7-8700K&#10;&lt;/h3&gt;&lt;p&gt;CPUがCore i7-8700K でTDP95Wなのがちょっと高い。CPUが壊れたとはちょっと思えないし、よくよく考えたらこれこそ一番再利用すべきの気もする。中古相場でも2万以上しているようだし。&lt;/p&gt;&#10;&lt;p&gt;もしこれに対応したマザボ交換しようと思ったらこのへんが候補になる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.asrock.com/support/cpu.jp.asp?s=1151&amp;amp;u=1041" target="_blank" rel="noopener"&#10; &gt;ASRock &amp;gt; CPU サポート一覧表&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;中古でも1万くらいはするかなぁ。&lt;/p&gt;&#10;&lt;h3 id="geforce-gtx-1080ti"&gt;GeForce GTX 1080Ti&#10;&lt;/h3&gt;&lt;p&gt;グラボがGeForce GTX 1080Ti で今となってはRTX3060Tiにも及ばないんだが、使えるなら使いたい精神。VRAM11GBあるし。TDP 250W。これだったら電源700Wくらいほしいなぁという気はする。中古相場でも3-4万くらいはする。インらフェースはPCIe 3.0x16。&lt;/p&gt;&#10;&lt;h2 id="分解"&gt;分解&#10;&lt;/h2&gt;&lt;p&gt;まずは電源を疑って電源だけ交換してみる。それで動けば万々歳だし、動かなかったら仕方ないからマザボの交換に踏み切る。&lt;/p&gt;&#10;&lt;p&gt;ということで分解動画集。メモリも上がってたけどさすがにそれはいいです。&lt;/p&gt;&#10;&lt;h3 id="左側カバー"&gt;左側カバー&#10;&lt;/h3&gt;&lt;p&gt;これ。プラス2のドライバがいる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=B-PV8cjjUb4" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=B-PV8cjjUb4&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;右側カバー&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=GHv-xZtGKbg" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=GHv-xZtGKbg&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="電源の取り外しと取り付け"&gt;電源の取り外しと取り付け&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=t5dgl-BPjrQ" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=t5dgl-BPjrQ&lt;/a&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;左側のカバーを外す&lt;/li&gt;&#10;&lt;li&gt;右側のカバーを外す&lt;/li&gt;&#10;&lt;li&gt;マザーボード上部の隅にある2つの電源コネクタを取り外す&lt;/li&gt;&#10;&lt;li&gt;マザーボードの中央にある大きな電源コネクタを取り外す&lt;/li&gt;&#10;&lt;li&gt;すべての内臓ハードドライブから電源をコネクタを取り外す&lt;/li&gt;&#10;&lt;li&gt;グラボから電源ケーブルを取り外す&lt;/li&gt;&#10;&lt;li&gt;マザボについてるSATAデータケーブルを外して、大きな電源用ケーブルをユニットの右側に引き出せるようにする&lt;/li&gt;&#10;&lt;li&gt;ユニット右側のオプティカルデバイスの電源コネクタを取り外す&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="m2-ssdの取り外し"&gt;M.2 SSDの取り外し&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=C4eJgK-sDQI" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=C4eJgK-sDQI&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="hdの取り外し"&gt;HDの取り外し&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=oOs6ReNQJ5Y" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=oOs6ReNQJ5Y&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="外付けhd"&gt;外付けHD&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=zr4Z_DDnV4U" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=zr4Z_DDnV4U&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="グラボの取り外し取り付け"&gt;グラボの取り外し・取り付け&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=3mTZ44S0Q-4" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=3mTZ44S0Q-4&lt;/a&gt;&lt;/p&gt;</description></item><item><title>発売したのにMac mini熱が微妙に冷めてるし謎に自作熱も高まる</title><link>https://hack-le.com/mac-mini-vs-jisaku/</link><pubDate>Sun, 05 Feb 2023 04:30:17 +0900</pubDate><guid>https://hack-le.com/mac-mini-vs-jisaku/</guid><description>&lt;p&gt;Mac mini関係だけでいくつ記事書いたんだってくらいしつこく書いてきたにも関わらず、ポチらないまま気がつくと発売日が明日になってしまった。そしてあれだけほしい気がしてMac mini購買熱が急速に冷めていっているのを感じる。&lt;/p&gt;&#10;&lt;p&gt;まぁでもいざ発売されて開封の儀や実際に使用した人たちのレビューが出始めたら、また欲しくなるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;とりあえず今はTwitterでずっとみんなのツイート眺めてる。俺のDeepL Proが火を吹くぜ。&lt;/p&gt;&#10;&lt;h2 id="既にポチった気でいるポチってない"&gt;既にポチった気でいる（ポチってない）&#10;&lt;/h2&gt;&lt;p&gt;これはウィンドウショッピングしていたら満足できるアレに近いものなんだろうか。あれだけ記事を書きまくっていたMac mini、結局ポチらず発売日、そして今微妙に熱が冷めているという。まぁでも発売してみなの手元に届き始めたら、またほしくなるかもしれない。レビューも増えるだろう。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.digitaltrends.com/computing/apple-mac-mini-review/?utm_source=twitter&amp;amp;utm_medium=socialorg&amp;amp;utm_campaign=rss-feed" target="_blank" rel="noopener"&#10; &gt;Apple Mac mini (M2 Pro) review: the best mini computer ever | Digital Trends&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;SSDはやっぱりケチがついてるけど、それ以外については概ね好評。まぁSSDの性能についても、実運用上では正直気にならないのではないかと思う。&lt;/p&gt;&#10;&lt;p&gt;Mac miniのmini PCというポジショニングが唯一無二なんだよね。NUCは一時期注目していたけれど、微妙な感じは拭えない。Mac miniは特に静音性が素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;気になるのは今年の後半にMBAから搭載されるという噂のM3がどうなるのかというところだが、ノートPCならば半導体の微細化による恩恵も大きそうだが、Mac miniだとそれも微妙な気はするので、M3を待つ意味もあまりないように思える。&lt;/p&gt;&#10;&lt;p&gt;とすると、やはりつべこべ言わずにさっさとM2 Pro Mac miniをポチるのが良いのではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;なかろうかと言い続けて一ヶ月近くたっている。すでに買ったような気すらしている。&lt;/p&gt;&#10;&lt;h2 id="ai向きではないよねまぁ"&gt;AI向きではないよねまぁ&#10;&lt;/h2&gt;&lt;p&gt;まぁ実際、色々と情報を集める中で、自分の中で迷いが出ているのはあるよな。元々のモチベはAIイラストだ。普段遣いのついでにStable Diffusionいじれるなら面白そうだな、と思ったのが発端である。&lt;/p&gt;&#10;&lt;p&gt;で、これなんだが以下のITmediaの林信行さんの記事で実測がある。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itmedia.co.jp/pcuser/articles/2302/02/news075.html" target="_blank" rel="noopener"&#10; &gt;“無限の柔軟性”を提供するM2搭載「Mac mini」という選択肢の魅力（1/2 ページ） - ITmedia PC USER&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;設定が書かれていないが、多分まぁ512x512かなぁと思っている。で、MBAで50秒、Mac miniで25秒となると、記事内では礼賛されているものの、正直そんなもんかぁという気は否めない。やっぱりAIイラスト真面目にやるなら、ちゃんとしたグラボののったマシンでやるべきなのかなーと、実際の数値を目の当たりにすると思わなくもない。&lt;/p&gt;&#10;&lt;h2 id="今はもう動かないおじいさんのハイエンドpc"&gt;今はもう動かないおじいさんのハイエンドPC&#10;&lt;/h2&gt;&lt;p&gt;いや、これくらいの速さだとね、思うんよ、今うちにある、眠っているGTX 1080TIで十分なんちゃうんかと。いや、多分十分なんだけれど、これがのってるPC、今起動しない状態で。簡易チェッカーだと電源はおかしくないっぽいんだが、そうするとロジックボードかなぁ。一番面倒なやつ。いやでも簡易チェッカーで大丈夫でも、実際電源が生きてるかなんてわかんないよなー。生きていたとしても、まぁ電源は寿命もあるし諦めるほうがいいよね。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://support.hp.com/jp-ja/document/c05877140" target="_blank" rel="noopener"&#10; &gt;OMEN by HP 880-186jp Desktop PC 製品仕様 | HP®カスタマーサポート&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ちなみに確かこれのはず。当時としてはけっこう良いやつです。パーツが全部いかれているわけではなかろうし……と思って未練がましくずっと持ってる。。。&lt;/p&gt;&#10;&lt;p&gt;まーでも、今さらGTX 1080Tiとか中古で3万くらいなんだよね。今のやつだと3060Ti未満くらいのようだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gamingpcs.jp/hikaku/hikaku_gpu/geforce-gtx1080ti/" target="_blank" rel="noopener"&#10; &gt;GeForce GTX 1080 Tiの性能スペック＆ベンチマークレビュー【2022年】 ｜ ゲーミングPC徹底解剖&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;でもGTX 1080TiはVRAMが謎に11GBあるんだよね。RTX 3070でも8GBなのに。VRAM10GB超えはStable Diffusion目的だと嬉しい。&lt;/p&gt;&#10;&lt;p&gt;メモリもDDR4だけどDDR5の普及はまだ時間がかかるだろう。NVMe SSDは使えると思うし。HDもね。まぁそうすると、BTOでグラボなしでストレージとメモリ手を抜いたPC買って、入れ替えるのがパーツ入れ替えるのがいいのかねぇ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://review.pastime.ne.jp/personal-computer/pc-parts/stable-diffusion/#toc5" target="_blank" rel="noopener"&#10; &gt;Stable Diffusionを快適に使うための最適解。現時点で最強のビデオカード“RTX3090”を試す - Items&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;と言いつつも、この方のレビューを見ると、やっぱり1080Tiはおじいさんのハイエンドなんだなという現実。そりゃそうだよね。真面目にやりたいならそんな昔のグラボ使おうと躍起になってるんじゃないよ、という正論が頭をもたげるのであった。&lt;/p&gt;&#10;&lt;p&gt;いやーでもRTX4090とか数十万円しますしおすし。ちょっとローカルでStable Diffusionやりたいっていうだけなのにそれはちょっと。さすがに。ねぇ？&lt;/p&gt;&#10;&lt;p&gt;そんならいっそCPUとマザボだけ安いやつ買って、今もってるパーツのっけていけるかどうか試してみるのはアリかもな？それだったら3万くらいで試せるし。CPUはRyzenでもいいだろうし、この機会にいまさらRyzenデビューして見るのもアリか🤔もし電源がいっていたとしたら電源追加すればいいわけだし。&lt;/p&gt;&#10;&lt;p&gt;などと、Mac miniについて考えていたはずが、なぜか今さら自作PCくさい話を考える真夜中なのであった。寝ろ。寝る。&lt;/p&gt;</description></item><item><title>ベンチマークを見ながらM2 Mac miniの購入を考える日々</title><link>https://hack-le.com/m2-mac-mini/</link><pubDate>Thu, 26 Jan 2023 00:24:04 +0900</pubDate><guid>https://hack-le.com/m2-mac-mini/</guid><description>&lt;p&gt;いつまで悩んどるねんという感じですが、未だにIntel Mac mini 2018からM2 Pro Mac miniへの買い替えを悩んでいたりします。もうさっさと注文しろという感じはします。いやでも、ベンチ、ベンチを見てから……。&lt;/p&gt;&#10;&lt;p&gt;っていうかベンチとか見始めると、ゲーミングPCも気になり始めるよね。。。&lt;/p&gt;&#10;&lt;h2 id="ベンチ"&gt;ベンチ&#10;&lt;/h2&gt;&lt;p&gt;ベンチ出てました。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.macotakara.jp/macintosh/entry-44187.html" target="_blank" rel="noopener"&#10; &gt;Mac mini (2023) ベンチマーク（暫定） | Mac | Mac OTAKARA&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これを見ると、CPU性能は、Intel Mac mini 2018のCore i5と比較すると、シングルコアもマルチコアもM2で倍ぐらいありますね。Proにするとコア数分されに強くなる感じか。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、やっぱり大きいのはGPU性能でしょうか。M1で5倍、M2で7倍、M2 Proなら10倍くらいに。10倍は大きいなぁ。PixelmatorのML超解像処理もすぐに終わるんだろうな……。まぁそんな何度もやる処理ではありませんが。&lt;/p&gt;&#10;&lt;p&gt;M1とM2の性能差もそこそこあるので（Neural EngineもM2が強いし）、たとえ整備済み品などでもM1は選択肢に入らなさそうですね。まぁ、吊るしのエントリーモデルでいいよって人ならありでしょうけれど。少なくともM2 Proを考えている人は対象外ですね。&lt;/p&gt;&#10;&lt;p&gt;M2 ProのCPU/GPUのオプションもありますが、性能差を見ると、ちょうどコア数分、マルチコアなやつは15%くらいアップ、って感じですかね。うーん、まぁこれは微妙かなぁ。&lt;/p&gt;&#10;&lt;h2 id="ゲーミングpcとかも思い浮かぶけど"&gt;ゲーミングPCとかも思い浮かぶけど&#10;&lt;/h2&gt;&lt;p&gt;とすると、やっぱりM2 Pro Mac miniをメモリ盛って24万円、が一番いいかなぁ。10GbEをつけたら254,800円。いずれにしてもざっくり25万か。&lt;/p&gt;&#10;&lt;p&gt;25万……25万かー、うーん、なるほどなぁ。もしかして、今までに僕が買ってきたPCの中で一番高いのではないだろうか。多分高い。ふーむ。そうか、そう考えると同価格帯のゲーミングPCも見る必要があるのか……。25万だとだいたいRTX3070とか3070Ti搭載くらいのPCになるね。性能的には比べるべくもない。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tomshardware.com/news/apple-m2-gpu-analysis" target="_blank" rel="noopener"&#10; &gt;Don&amp;rsquo;t Believe the Hype: Apple&amp;rsquo;s M2 GPU is No Game Changer | Tom&amp;rsquo;s Hardware&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;実際OpenCLのベンチとか見ればその差は歴然。まぁでもMac Proならともかく、あのちっちゃな筐体と消費電力で比べるのはアンフェアであろう。。。&lt;/p&gt;&#10;&lt;p&gt;Macの魅力の一つは静音性なんよね。Mac mini、ほんと静か。時々唸るし目玉焼きでもやけそうなくらい熱くなったりはするけど。あとmacOS自体の魅力もある。普段遣いにはやっぱりmacOS。&lt;/p&gt;&#10;&lt;p&gt;悩めば悩むほどに欲しくなる。だが未だポチっていない。なぜならば、ポチるともう悩めなくなるからだ（哲学）。&lt;/p&gt;</description></item><item><title>M2 Macを買ったら、Intel Mac mini 2018はどうしたらいいんだ</title><link>https://hack-le.com/m2-mac-intel-mac-mini-2018/</link><pubDate>Tue, 24 Jan 2023 00:00:56 +0900</pubDate><guid>https://hack-le.com/m2-mac-intel-mac-mini-2018/</guid><description>&lt;p&gt;売るの？まぁ売ればそこそこの値段にはなるかもしれないけれど。第8世代Core i5 6コア、RAM 32GB、内蔵SSD 512GB、ぱっと見で、今でも悪くないけどね。いや、むしろ使える。実際僕はこれで2030年まで戦うつもりだったんだぞ。&lt;/p&gt;&#10;&lt;p&gt;マシンはあればあったでけっこう便利なので、置いといてもいいかなと思う。けっこう色々な用途が考えられる。&lt;/p&gt;&#10;&lt;h2 id="nas説"&gt;NAS説&#10;&lt;/h2&gt;&lt;p&gt;まず、NASとして使える。NASとして見た時のスペックは十分すぎる。というより、贅沢に過ぎる。&lt;/p&gt;&#10;&lt;p&gt;僕が今現在NASを使っていない理由は、Dropboxのほうが便利だからというのが大きいのだが、もうひとつあって、通常のSMBだとMacはどうもパフォーマンスが出ないという問題があった。これについては昔から苦しんでいて、以下のような記事を書いている。&lt;/p&gt;&#10;&lt;p&gt;/rnas104smbup/&lt;/p&gt;&#10;&lt;p&gt;この記事の対応である程度は改善するのだが、それでもファイルの一覧表示などのパフォーマンスは満足のいくものではなかった。&lt;/p&gt;&#10;&lt;p&gt;しかし、同じMac同士ならばそこまで遅いということもないので、けっこう使えるかもしれない。有線で繋げば速度的にも問題ないだろう。普通のNASだと騒音問題があるが、Mac miniは部屋の中においていても許されるくらいの静かさがあるし。&lt;/p&gt;&#10;&lt;p&gt;ただ、それM2 Mac miniをNASとして使うのと何が違うの？と考えると何も違わない。むしろ不便まである。&lt;/p&gt;&#10;&lt;h2 id="vps代わりにバッチ処理とか"&gt;VPS代わりにバッチ処理とか&#10;&lt;/h2&gt;&lt;p&gt;最近、ConoHaから値上げのメールがきた😭&lt;/p&gt;&#10;&lt;p&gt;昨今の情勢を考えれば仕方がないとはいえ、やはり値上げは悲しい。&lt;/p&gt;&#10;&lt;p&gt;それでふと、VPS代わりに使えば良いのではないか、という気もしている。とすると、このブログをどこに置くんだ、まさか今更自宅サーバじゃあるまいな、という話になるわけだが、もちろんそんなことはしない。WordPressの運用ならばいわゆるレンサバで十分なので、そちらに移行すればよいと思っている。&lt;/p&gt;&#10;&lt;p&gt;ちょうどいい機会かもしれない。Webサーバの運用はしんどい。WordPressだけでも、OS、Webサーバ、PHP、MariaDBと各種のアップデートに追いつかなければいけない。しんどい。いや、たしかに僕は楽しんでそういう作業をしていたこともあったよ。でも、もう僕はそこに喜びを見いだせないんだ。楽しくないんだ。&lt;/p&gt;&#10;&lt;p&gt;なので、ブログの運用はレンサバに移行し、そのほかのバッチ処理やビットコインの自動トレードプログラム（最近は止めている）などで使えば良いのではないか、という考えだ。&lt;/p&gt;&#10;&lt;p&gt;僕は定常的に何かとバッチ処理を流しているので、これはけっこう良いアイディアに思える。そしてVPSの契約を解約できれば、年間で1万円以上の節約になる。&lt;/p&gt;&#10;&lt;p&gt;まぁこれもM2 Mac miniでもできそうな気はしなくもないが、常時処理を走らせるマシンが別にあってもいいかなとは思う。&lt;/p&gt;&#10;&lt;p&gt;あと、気軽に環境壊せるマシンがあるのはいいかも。&lt;/p&gt;&#10;&lt;h2 id="クリーチャー製造機"&gt;クリーチャー製造機&#10;&lt;/h2&gt;&lt;p&gt;僕は今AIイラストにハマっている。今回M2 Macをほしいと思ったのも、AppleがStable DiffusionのApple Silicon対応に乗り気だからだ。なので、M2 Macを買った暁には大いに使いたいところだが、現実的にすぐには使いこなせないだろうと思われる。&lt;/p&gt;&#10;&lt;p&gt;色々なチューニングがされたNovelAIやそのほか各種AIイラストサービスは、今後も必要になる。で、そういうサービスを使うのであれば、マシンスペックはそこまで必要ではないので、こちらのMac miniに生成のアシスタントをさせるという使い方は考えられる。実際、今はMacBook Proがその役割を担っていて、ノートPCにこんなことさせるのもなんだかなぁと思っていたところだ。&lt;/p&gt;&#10;&lt;p&gt;ついでに上記のバッチ処理サーバーの役割ももたせれば、けっこうなことをできる。&lt;/p&gt;&#10;&lt;h2 id="だいたい補助的な役割"&gt;だいたい補助的な役割&#10;&lt;/h2&gt;&lt;p&gt;まぁここまでつらつらと書いてきたものの、なければないで別に困らないなという感じ。そりゃそうではあるんだけれど。うーん。まぁでもあったら便利かな、くらいの感じ。サンドボックス的に使える、のが一番響いたかもしれない。macOSだとあんまりOS再インストールからという気にはならんし。&lt;/p&gt;&#10;&lt;p&gt;うーん、まぁでも弱いか。なにか一つ、「おっ、これは便利になるぞ」と心から思えるような、そういう変化もほしいところではあるなぁ。&lt;/p&gt;</description></item><item><title>Macを真剣に選ぶことは社会貢献だから</title><link>https://hack-le.com/m2-mac/</link><pubDate>Mon, 23 Jan 2023 00:00:42 +0900</pubDate><guid>https://hack-le.com/m2-mac/</guid><description>&lt;p&gt;「M2 Mac miniをポチったとして、いったい何に使うのか」という根本的な問題に立ち返っている。さんざんM2 Mac miniほしいほしいと書き連ねてきて今それかという感じだが、実際に自分がどう使うか、具体的なイメージがまだなかったりする。&lt;/p&gt;&#10;&lt;p&gt;もともと今のMac mini 2018はこの先10年戦うつもりで購入したものだし、実際今でも全然戦えている。買わなきゃタダというつまらない現実もあるし、ポチった後このMac mini 2018どうしてくれよう問題もあるし、開発用途ではなんだかんだ今なおIntelが無難というのもある。&lt;/p&gt;&#10;&lt;p&gt;ちょっとちゃんと考えておきたい。&lt;strong&gt;PC選びは社会貢献だから&lt;/strong&gt;。いやほんとに。&lt;/p&gt;&#10;&lt;h2 id="m2-macがほしい理由"&gt;M2 Macがほしい理由&#10;&lt;/h2&gt;&lt;p&gt;そもそも僕がなぜ急にさして興味を示さなかったM2 Macをほしがるようになったかというと、最近AIイラストにハマったからだ。今はNovelAIの課金ユーザで、毎月$25払っている。その費用の捻出のためにいくつかのサブスクリプションを解除した。時間は有限である。&lt;/p&gt;&#10;&lt;p&gt;で、それだけだったら別にM2 Macなんか必要ないのだが、やはりWebサービスではなくローカルのPCで色々試したくなるのが人情というもの。で、Macはこの手の作業に必ずしも適していないと思っていたのだが、Apple自らがStable Diffusionの最適化を頑張っているようで、え、それじゃあMacでもいいかなと思った。Macならば普段使いのついでにAIイラストが楽しめる。&lt;/p&gt;&#10;&lt;p&gt;AIイラストの生成だけではなく、その補正でもM2は活躍する。AIイラストはそのままではちょっと使い物にならず、何かしら手を加える必要があるのだ。少なくとも解像度は低すぎるので、せめてアップスケーリングはしたい。自分はPixelmater ProのML超解像を使っているのだが、これがIntel Mac mini 2018だと、MLなだけに100KBのjpg画像で10秒程度かかってしまい、しかもその間プチフリとまではいかないもののPCがまともに操作できなくなってしまうものだから、そこそこのストレスになっていた。これがM2 Macならば1秒かからないくらいになると期待している。&lt;/p&gt;&#10;&lt;p&gt;他にも今後色々と編集したいことが出てくるはず。ということで、GPUやNeural Engineを搭載したM2 Macがとても魅力的に見えるようになったわけだ。&lt;/p&gt;&#10;&lt;h2 id="楽しい趣味になりそう"&gt;楽しい趣味になりそう&#10;&lt;/h2&gt;&lt;p&gt;まぁつまり、ひたすらStable Diffusionを動かし編集している自分の姿が見えるわけだが、現状、NovelAIで無限に作っているクリーチャーですら捌ききれていないのが現実であり、ポチったところで宝の持ち腐れになってしまうかもしれない。今本当に必要なのはこれ以上効率的なクリーチャー生成器ではなく、クリーチャー判別器である。これは今友人にも相談して色々とアイディアを練っている。&lt;/p&gt;&#10;&lt;p&gt;まぁでもローカルで動かせればやれることは劇的に増えるはず。NovelAIはどうしてもちょっと用途が二次元的になりがちだけれど、Stable Diffusionを自分で使えば、色々と楽しいことができそうだ。&lt;/p&gt;&#10;&lt;p&gt;勉強は必要であるものの、久しぶりに楽しいと思える趣味に出会えた気がしている。この歳になると金より時間であるので、まぁゴチャゴチャ言わずに必要な機材は揃えなさいよと、少なくとも他人ならそう言うと思うので、やはりポチるべきなんだろうな。&lt;/p&gt;&#10;&lt;h2 id="てめぇのためにてめぇの金を使うべきなんよ"&gt;てめぇのためにてめぇの金を使うべきなんよ&#10;&lt;/h2&gt;&lt;p&gt;ここまでわかっていてもなお考えてしまう、自分の金を使う時は本当に色々なことを考えるものだ。でもこれは本当にいいことだと思っていて、少しでも見識やこだわりのある分野については、真剣に考え抜いて金を使いたいと思う。そういう金の使われ方には本当に価値がある。&lt;/p&gt;&#10;&lt;p&gt;金を使うとは物事を評価するということでもある。適正な評価が良い仕事を生む。しょうもない金の使い方は、しょうもない評価であり、これは意味のない仕事を生む。&lt;strong&gt;できるだけ多くの人が多くの良い仕事をするには、社会全体で、適正な評価、すなわち良い金の使われ方が必要なのである&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;急に楽しくない話になってしまうが、金というのはできるだけ「自分のために」「自分の金を」みんなが使うようにすべきだ。旅行さきのホテル選びと、会社から実費が出る出張のときのホテル選びの真剣さを比較すればわかる。金は真剣に使われて始めて価値がある。適正な評価になる。&lt;/p&gt;&#10;&lt;p&gt;一方で、「他人（ということになっている）のために」「他人の金を」使うのは最悪のスキームである。だから、自治体の金の使い方はいつだって最悪だ。今の仕事を始めてから、内閣なんとかの役人に補助金のばら撒き方の相談を展示会でされた時はショックであった。予算消化のための金遣いほど無意味で無駄な仕事を生むものはない。もっとも、これが本当に他人ならまだマシなほうで、政治の世界では、他人の名目でその実自分、だったりすることもあるのが本当に最悪の最悪だ。&lt;/p&gt;&#10;&lt;p&gt;まぁ急に暗い話をしてしまったが、ここのところはそういう沈鬱な政治の話ばかり考えて勝手にウンザリしていた。歳を重ねて40の大台が見えてきた中で、自分の人生を振り返り、色々と思うところがあるのである。そして今自分がしている仕事も、このさきにあるのは税金ではないのか？などと思うにつけ、いったい俺は何をやっているんだ、という疑念が常につきまとっている。&lt;/p&gt;&#10;&lt;p&gt;などと、無駄に鬱々とした日々を送る中で、AIイラストと新しいMacの物色は、今の僕にとって唯一といってもいい、楽しい時間なのである。この時間は大事にしたい。あらゆる趣味人の真剣な時間と金使いが、世の中をよくするのだと思う。&lt;/p&gt;&#10;&lt;p&gt;ということで、表題になります。終わり。&lt;/p&gt;</description></item><item><title>M3のことはまだ何もわからないようだ</title><link>https://hack-le.com/m3/</link><pubDate>Sun, 22 Jan 2023 00:00:12 +0900</pubDate><guid>https://hack-le.com/m3/</guid><description>&lt;p&gt;2023年が始まってわかったことは、2022年の間に流れていたApple Silicon周りの噂はてんで的外れだったということだ。そんなわけだから、今流れている2023年Macの噂もあんまりあてにすべきではないのだろう。ないのだろうが、噂から判断するしかない。&lt;/p&gt;&#10;&lt;h2 id="tsmcで量産開始の事実しかない"&gt;TSMCで量産開始の事実しかない&#10;&lt;/h2&gt;&lt;p&gt;噂といっても、去年から誰もMacの動向を予想できていなかっただけあり、M3については何もわかっていない。ただ俺たちのTSMCで3nmプロセスの量産が昨年末に始まったという事実しかない。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://texal.jp/2022/12/29/tsmc-holds-ceremony-at-fab-18-to-start-mass-production-of-3nm-process/" target="_blank" rel="noopener"&#10; &gt;TSMC、Fab 18においてセレモニーを開催、3nmプロセスの量産開始へ | TEXAL&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;昨年5月時点でM2は3nmか！？という噂があったことを思うと、年末にようやく量産開始という状況なのは、いかにリーク先走っていたかということだろうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-457992/" target="_blank" rel="noopener"&#10; &gt;A16 BionicがTSMCの5nmプロセス、M2が3nmプロセスで製造か - iPhone Mania&lt;/a&gt;（2022-05-27の記事）&lt;/p&gt;&#10;&lt;p&gt;まぁでも、恐らくもともとはAppleにもそういう意思はあったのだろうと思う。噂といっても結局その出処はミンチークオ氏だのなんだのという怪しげなリーカーなわけだが、彼らはもちろんいくらかの社内情報を手に入れたうえで流しているのだから、てんで的外れということはないはずだ。少なくとも、ドル円の行く末を占うアナリストよりは当てにして良いと思われる。&lt;/p&gt;&#10;&lt;h2 id="何もわからない何も"&gt;何もわからない…何も…&#10;&lt;/h2&gt;&lt;p&gt;しかし、現実には多くのリーカーが赤っ恥をかいたのが2022年だったようだ。となると、Apple内部ではけっこうな計画の修正があったのかもしれない。それはAppleというより、ウクライナから始まり終わらないコロナ、ペロシ訪台など台湾を巡って本格化する米中の軋轢、無敵に思われた巨大IT会社の業績悪化（Appleは今なお優等生）など、外的要因のほうが大きそうではあるが、まぁその結果は結局プロダクトに反映されてしまう。&lt;/p&gt;&#10;&lt;p&gt;M2 Pro/Maxの内容を見ても、たしかに順当なアップデートではあるものの、それ以上でもそれ以下でもないという感じで、これだったら正直昨年中に出てほしかったなぁ、というのがけっこうな人の感触ではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;僕は今年に入ってから急にM2 Macがほしくなったので、昨年は特に追いかけていなかったのだが、もし僕が2022年中ずっと待ち焦がれていたとしたら、発売を嬉しく思う反面少し落胆する気持ちもあったかもしれない。今でもAppleの発表には、こちらの想像を超える驚きを期待してしまう。稀代の天才ジョブズがこの世を去って久しく、毎回毎回サプライズというわけにもいかないだろうけれど、このアップデート内容ならば、Mac mini 2022であってほしかったなぁと思う。&lt;/p&gt;&#10;&lt;p&gt;M3 Macはそれなりのサプライズがありそうな気もするのだが、まだM2 Ultraも控えている中で、M3 Macはいつになることやら。一応MBAやiMacで2023年末とか2024年初めなどの噂があるものの、噂は噂でしかなく、その噂が2022年どうだったか、そして1月の突然のリリースを誰か言っていたかなど考えると、現状リーカーもほとんどわかっていない、わかっていたとしてもその予定は未定に過ぎない、という状況のようだ。そして、基本的には後ろ倒しになっている。&lt;/p&gt;&#10;&lt;p&gt;とはいえさすがにiPhone 15には間に合わせてくるのではないか、というのは順当な予測だと思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-518993/" target="_blank" rel="noopener"&#10; &gt;iPhone15 Pro用A17の製造が3nmに移行へ？4/5nmの稼働率低下予測 - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="具体的なスペックの噂なし"&gt;具体的なスペックの噂なし&#10;&lt;/h2&gt;&lt;p&gt;まぁ出たところで、実際どれくらいの性能になっているのかはわからない。なにしろ技術仕様に関する噂がほとんどない。一応大幅に性能向上！などという景気のいい言葉は聞くが、具体的にどう向上するのかはわかっていない。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.macrumors.com/guide/m3/" target="_blank" rel="noopener"&#10; &gt;Apple&amp;rsquo;s M3 Chip: Everything We Know - MacRumors&lt;/a&gt;（2022年10月）&lt;/p&gt;&#10;&lt;p&gt;強いて言うならMacRumorsが言う40 compute coresという表現が具体的ではある。このcompute coresというのは、CPU + GPUと思うが、今のM2 Proがオプションでc12+g19で31コアであるので、コア数が30%ほど増えるのかもしれない。そうすると標準のc10+g16の26コアも32コアくらいになったりするんだろうか。&lt;/p&gt;&#10;&lt;p&gt;であれば、M3 Proの標準で少なくとも今のM2 Proのオプションくらいの性能になる……とは言えそうだが、それはM1とM2の違いとそんなに変わらないなぁと思ったりもする。だったら待つ必要もないか。&lt;/p&gt;&#10;&lt;p&gt;まぁノートであれば高効率の恩恵が特に強い可能性はあるものの、デスクトップだとそんなでもないのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;なんて無駄なことをつらつらと考えていると、まぁ現状ではほしいならさっさとM2 Macを買うのが吉だな、と思うようになってきた。ただノートPCユーザであれば、現状特に不満がなければもう少し待ってみるのもよいかもしれない、くらいだ。&lt;/p&gt;</description></item><item><title>Proじゃない方のM2 Mac miniはどうだろう</title><link>https://hack-le.com/pro-m2-mac-mini/</link><pubDate>Sat, 21 Jan 2023 02:32:53 +0900</pubDate><guid>https://hack-le.com/pro-m2-mac-mini/</guid><description>&lt;p&gt;Mac miniは買うならM2 Proだなと思っていました。なので、M2 Pro版しか見ていなかったんですが、落ち着いて全体のラインナップを見ていると、ProではないエントリーモデルのMac miniのお値打ち感が際立っていますね。標準84,800円、さすがにメモリ8GBでは心許ないですが、16GBにしても112,800円ならば、射程範囲の気がします。SSD 256GBが寂しくはあるか。&lt;/p&gt;&#10;&lt;h2 id="エントリーモデルがリーズナブル"&gt;エントリーモデルがリーズナブル&#10;&lt;/h2&gt;&lt;p&gt;まぁこんなもんだろうとは思いつつ、やっぱり吊るしで18万、僕がかんがえたさいこうのMac miniは25万、となると二の足を踏んでしまいます。で、そういえばエントリーモデルはどうなんだろうなと思ったら、こちらは入門機ということもあってか、なかなかリーズナブル。円安にも負けず、元値$599だけに84,800円。ふむ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.igeeksblog.com/apple-m2-vs-m2-pro-vs-m2-max-chips/" target="_blank" rel="noopener"&#10; &gt;Apple M2 vs M2 Pro vs M2 Max chips: What&amp;rsquo;s the difference? - iGeeksBlog&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.digitaltrends.com/computing/mac-mini-rumors-news-price-release-date/" target="_blank" rel="noopener"&#10; &gt;Mac Mini M2: release date, 16GB memory, M2 Pro | Digital Trends&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;プロセッサはM2。M2とM2 Proの違いは色々あるが、CPUだけを見るとさほどでもなさそう。M2が8コア、M2 Proだと10コア（+42,000円で12コア）。ただコア数は2つしか違わないが、M2は4コアが高効率コアで、Proの増えた2コアはハイパフォーマンスコアと見られるので、パフォーマンスの差はけっこうあるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;また、GPUを見るとM2が10コア、M2 Proが16コア（+42,000円で19コア）とけっこう違う。さらにProはメモリの帯域幅が2倍となっている。グラフィックスやMLではだいぶきいてくれると思われる。&lt;/p&gt;&#10;&lt;p&gt;あとポートの数も異なる。M2 Mac miniはポートがThunderboltx2とUSBx2しかないので、デスクトップとしてはちょっと悲しい。ProはThunderbold x4なので。画面出力はそんなにこだわらないけど。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、10万の価格差があることを考えると、この性能差は許容できる気がする。M2だって十分働いてくれるだろうし。&lt;/p&gt;&#10;&lt;h2 id="オプションもりたくなるよね"&gt;オプションもりたくなるよね&#10;&lt;/h2&gt;&lt;p&gt;ただまぁ、さすがにメモリ8GBは心もとない。それで16GBにしたいなぁと思うと+28,000円。SSD 256GBも寂しいなぁ、せめて512GBほしいなどと思うと+28,000円。すると140,800円。oh&amp;hellip;。それだったら+44,000円してM2 Proでいいかな……。&lt;/p&gt;&#10;&lt;p&gt;ということで、M2選ぶならせいぜいメモリ16GBくらいにしておくべき、ということになる。まぁストレージは外付けで拡張できるし。それなら112,800円。&lt;/p&gt;&#10;&lt;p&gt;なので、自分的には112,800円でM2 + SSD 256GB + RAM 16GB、254,800円でM2 Pro + SSD 512GB + RAM 32GB + 10GbE、という感じだ。&lt;/p&gt;&#10;&lt;h2 id="おニューのpcはハッピーでなければ"&gt;おニューのPCはハッピーでなければ&#10;&lt;/h2&gt;&lt;p&gt;うーん……やっぱりRAMがちょっと寂しい。内蔵ストレージもなんだかんだで使うしなぁ。だいたい今のMac mini 2018がSSD 512GBでメモリ32GBなわけで。5年たったPCを新調して、一部でもスペックダウンなんて悲しいことがあっていいだろうか？いやそれはとてもとても悲しいことだ。新しいPCを買って悲しい思いなどすべきではない。おニューのPCは常にハッピーな気分で迎え入れなければならぬ。&lt;/p&gt;&#10;&lt;p&gt;そもそも僕は前回のMac mini 2018で16万近いものを買っており、さらにその後3万かけてメモリを32GBに増設しているので、なんだかんだ18-19万くらい使っている。5年前の僕が既にそれくらい払っているのに、今の僕がいったい何をいまさらケチろうというのだろうか。PCとはそんな気持ちで新調するものではない。ちなみに昔メモリ買ったときの記事。&lt;/p&gt;&#10;&lt;p&gt;/mac-mini-2018-memory/&lt;/p&gt;&#10;&lt;p&gt;などと書きながらM2 Pro Mac miniを買う言い訳を考えている自分に気づいた。いやまぁやっぱり買うならM2 Proだよねぇ。M3がどうなるか気になるけれど、どう早く見積もっても出るのは2年かかるやろうし。1年で時代が変わったみたいなのが出たらちょっとつらいけど、2年後だったらねぇ……。&lt;/p&gt;&#10;&lt;p&gt;まぁでもあれだな、M3のスペックがどうなるか、もうちょっと調べてからでもいいか……。&lt;/p&gt;&#10;&lt;p&gt;検討を加速する！！！&lt;/p&gt;</description></item><item><title>クックが僕のためにMac miniを一日で用意してくれました</title><link>https://hack-le.com/cook-mac-mini/</link><pubDate>Wed, 18 Jan 2023 08:44:38 +0900</pubDate><guid>https://hack-le.com/cook-mac-mini/</guid><description>&lt;p&gt;などと意味不明な供述をし……。&lt;/p&gt;&#10;&lt;p&gt;いや、ちょっとびっくりしたので。急に来た。急や。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.apple.com/jp/newsroom/2023/01/apple-unveils-m2-pro-and-m2-max-next-generation-chips-for-next-level-workflows/" target="_blank" rel="noopener"&#10; &gt;Apple、次のレベルのワークフローを可能にする次世代チップのM2 ProとM2 Maxを発表 - Apple (日本)&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ま、まだ心の準備ができてないよ……。&lt;/p&gt;&#10;&lt;h2 id="m2-proは5nm"&gt;M2 Proは5nm&#10;&lt;/h2&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;第2世代の5ナノメートルプロセステクノロジーを利用して作られたM2 Pro&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;🤔&lt;/p&gt;&#10;&lt;p&gt;最初に半導体の大きさ確認する自分に笑う。いや、大事なのは性能であって半導体の大きさではないことは重々承知なのだけれど。なんかどうしても。つい。&lt;/p&gt;&#10;&lt;h2 id="性能と価格"&gt;性能と価格&#10;&lt;/h2&gt;&lt;p&gt;僕の狙いはM2 Proのほうなので、そちらを見ますが。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.apple.com/jp/mac-mini/specs/" target="_blank" rel="noopener"&#10; &gt;Mac mini - 仕様 - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;吊るしで10コアCPU、16コアGPU、16コアNeural Engine、200GB/sメモリ帯域幅、RAM 16GB、SSD 512GB、ポートは4つ、で184,800円ですね。まぁ順当といえば順当か。&lt;/p&gt;&#10;&lt;p&gt;個人的にはRAMは32GBにしたいのですが、そうすると+56,000円なんですよねぇ。きっつい。でもユニファイドメモリなので自前換装とはいかず。うーん。240,800円……ごくり……。&lt;/p&gt;&#10;&lt;p&gt;+42,000円でCPU12コア、GPU19コアにできますが、さすがにそれはいいかな。&lt;/p&gt;&#10;&lt;p&gt;SSDは内蔵は512GBあればとりあえず十分。外付けSSDでも困ってないです。十分速い！&lt;/p&gt;&#10;&lt;p&gt;しかし、ここまで値段が上がると、10GbEが+14,000円なのは誤差では？という気がしてきますね（錯乱）。環境整えないといけないので、在宅環境では無駄金になりそうではあるんですけれど、やっぱり気になる。RAMと一緒につけると254,800円……おおぉぉ……。&lt;/p&gt;&#10;&lt;h2 id="円安"&gt;円安😭&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.bloomberg.co.jp/news/articles/2023-01-17/RONBXADWX2PS01" target="_blank" rel="noopener"&#10; &gt;アップル、MacBook ProとMac Miniの新モデル発表－23年新製品第１弾 - Bloomberg&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;最新モデルの価格は14インチのMacBook Proが1999ドル（日本では28万8800円）から。16インチ版が2499ドル（同34万8800円）から。Mac miniの価格は前モデルより100ドル低い599ドル（同８万4800円）から&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;残念ながら値下げなし。むしろちょっと高いか。円高がまるで反映されていない……。良し悪しは置いておいて、今の日銀の姿勢や岸田政権の方向性を考えると、しばらくは円高になりそうだけどねぇ。&lt;/p&gt;&#10;&lt;p&gt;待ってたら安くなる可能性もある？🤔&lt;/p&gt;&#10;&lt;p&gt;まぁそればかりはわからんですから考えるだけ無駄ではあります。それでも日本はiPhoneとか世界各国の中では安いほうに入るみたいですね（&lt;a class="link" href="https://www.nukeni.com/ja/apple/iphone/iphone14" target="_blank" rel="noopener"&#10; &gt;iPhone14が安い国。世界37か国の価格表&lt;/a&gt;）。欧州に比べると消費税マシだからとかあるのかな。トルコとかブラジルはなんでこんな高いんだろう。&lt;/p&gt;&#10;&lt;h2 id="ポチるかポチらないかそれが問題だ"&gt;ポチるか、ポチらないか、それが問題だ&#10;&lt;/h2&gt;&lt;p&gt;まぁ順当といえば順当なアップデートなのですが、逆に言うと驚くようなアップデートでもなかったですね。ほしいっちゃほしいのですが、次のM3が半導体の微細化に伴い大きな進化を遂げる可能性もあり、二の足を踏んでいます。足元の円高傾向もありますし、安くなる可能性も……？まぁさすがに先過ぎてわからないですね。中長期的には結局円安になるだろうなという気持ちもありますし。&lt;/p&gt;&#10;&lt;p&gt;などと言っている間に、オプションつけると出荷日が3-4週間先にまでなってしまいました。吊るしならまだ即日っぽいですが……。&lt;/p&gt;&#10;&lt;p&gt;まぁでもしばらくは悩みます。悩みますが、次に出るのは早くても2024年でしょうし、さすがにそこまでは待てないから、やっぱりポチるかなぁ。うーーーーーんポチるかーーーーーー、ぬおおぉぉぉ……………。&lt;/p&gt;</description></item><item><title>M2 MacBook Pro遅れる？じゃあMac miniは？</title><link>https://hack-le.com/m2-macbook-pro-mac-mini/</link><pubDate>Sun, 15 Jan 2023 14:25:43 +0900</pubDate><guid>https://hack-le.com/m2-macbook-pro-mac-mini/</guid><description>&lt;p&gt;M2 MBPときっとくるであろうデスクトップMacを待つぞ！という記事を書いた（「&lt;a class="link" href="https://hack-le.com/m2-pro-mac-3nm/" &gt;M2 Pro/Maxが3nmになるのを信じてデスクトップMacを待つぞ – 或る阿呆の記&lt;/a&gt;」）矢先に、MBPの発売が延期されるという予想の記事が出ていた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-516474/" target="_blank" rel="noopener"&#10; &gt;M2 Pro/M2 Max搭載MacBook Proの発売が3月から6月に延期か - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;となると、売れ筋から外れているゆえ話題に出ていないが、Mac miniも遅れるのだろうか……。それともMac miniは影響を受けないのだろうか……。&lt;/p&gt;&#10;&lt;h2 id="噂を見ながら"&gt;噂を見ながら&#10;&lt;/h2&gt;&lt;p&gt;そもそも現状の噂はどうなっているかというと、Mac Rumorsの記事（「&lt;a class="link" href="https://www.macrumors.com/2023/01/08/apples-2023-roadmap-when-to-expect-new-product-launches/" target="_blank" rel="noopener"&#10; &gt;Apple&amp;rsquo;s 2023 Roadmap: When to Expect New Product Launches This Year - MacRumors&lt;/a&gt;」）によると、&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2023年はQ1でM2なMBP、Mac mini、Mac Pro&lt;/li&gt;&#10;&lt;li&gt;Q2で15.5インチMBA(M2)&lt;/li&gt;&#10;&lt;li&gt;Q4でM3 iMac&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;となっている。M2 Mac miniはMBPと一緒になっているので、MBPが遅れるならMac miniも遅れることになるのだろうか。&lt;/p&gt;&#10;&lt;p&gt;MBPが送れるのはMacBookの出荷台数ゆえらしいのだが、そうするとMBPに比べたらMac miniの出荷台数はしれているわけだし、こちらは影響を受けないかもしれない。とはいえ、M2 ProのデビューはMBPの気がする。Mac miniが初M2 Proデバイスってちょっと考えづらいような。いや、僕はそれでも全然構わないんだけれど。&lt;/p&gt;&#10;&lt;p&gt;でもM2 Proのお披露目は昨年からずっと後ろに倒れ続けているっぽいし、最近急に気にし始めた僕はともかく、待ち続けているマカーからはそろそろいい加減にしなさいよという気分になっていてもおかしくない。&lt;/p&gt;&#10;&lt;h2 id="希望をもって待つしかない"&gt;希望をもって待つしかない&#10;&lt;/h2&gt;&lt;p&gt;すっかり忘れていたが、前のMac miniは2020年11月なので、もう丸2年以上経過しており、さすがにもう出してくれよという感じである。まぁMac miniについては、2012の後の2014がまさかのダウングレード、その後ディスコンの噂がまことしやかにされながらさらに4年音沙汰なしという、冬の時代を経験しているために、あれに比べたらマシだとは思う。当時の自分の気持ちを綴った記事がこれ。&lt;/p&gt;&#10;&lt;p&gt;/macmini2018/&lt;/p&gt;&#10;&lt;p&gt;2013年から2018年にかけてMacは冬の時代だった。&lt;/p&gt;&#10;&lt;p&gt;しかしMac mini 2018以降、Macは全体的にとてもよくなっており、今またこうしてワクワクできるデバイスになっている。嬉しいことだ。&lt;/p&gt;&#10;&lt;p&gt;そういえばこんな風にPCのことを記事にするのは何年ぶりだろう……。そういえば、それもMac mini 2018の時だったか。あの頃はRyzen旋風も吹き荒れており、けっこう楽しかった。僕が20代だったら自作もやっていたろうな。&lt;/p&gt;&#10;&lt;p&gt;なんだかんで、買わないコンピュータについて考えている時が一番楽しい。&lt;/p&gt;</description></item><item><title>M2 Pro/Maxが3nmになるのを信じてデスクトップMacを待つぞ</title><link>https://hack-le.com/m2-pro-mac-3nm/</link><pubDate>Sat, 14 Jan 2023 19:10:03 +0900</pubDate><guid>https://hack-le.com/m2-pro-mac-3nm/</guid><description>&lt;p&gt;（続報: ダメだった &lt;a class="link" href="https://hack-le.com/cook-mac-mini/" &gt;クックが僕のためにMac miniを一日で用意してくれました – 或る阿呆の記&lt;/a&gt; ）&lt;/p&gt;&#10;&lt;p&gt;Apple SiliconなMacに急に興味が出て書いたのが以下の記事。&lt;/p&gt;&#10;&lt;p&gt;/m3-mac/&lt;/p&gt;&#10;&lt;p&gt;前にMac mini 2018を購入して以降Macの新情報をあまり真面目に追っていなかったために、今どういう状況かよくわかっていなかった。それで、M3のMBAは半導体の微細化が進み5nmから3nmになると聞いて、え、じゃあM3まで待つべきなの？なんて思ったりもしたのだが、あの後色々な噂を見てみると、早ければ来月にくるかもしれないM2 Pro/Max搭載MBPで3nmになりそうな感じ。&lt;/p&gt;&#10;&lt;h2 id="m2-proは3nmか"&gt;M2 Proは3nmか？&#10;&lt;/h2&gt;&lt;p&gt;色々な噂が飛び交っているが、Mediumにあったこの記事の分析は納得できた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://medium.com/macoclock/were-one-step-closer-to-the-3nm-m2-pro-mac-mini-d42937c2438f" target="_blank" rel="noopener"&#10; &gt;We’re One Step Closer to the 3nm M2 Pro Mac Mini | Mac O’Clock&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Geekbenchに上がっている未発表Macのシングルコア性能が上がっているのは、半導体の微細化が進んだM2 Proの性能であり、そうだとすればこれは次のMBPに搭載されるでしょ！というものだ。これはけっこう説得力がある。&lt;/p&gt;&#10;&lt;h2 id="3nmじゃないと商売的にも美味しくない"&gt;3nmじゃないと商売的にも美味しくない&#10;&lt;/h2&gt;&lt;p&gt;ビジネス的にも、2023年に発表されるMacのchipは3nmじゃないとだいぶ魅力に乏しいことになる。前回記事で書いたよしなに話も、結局はM2 Pro/Max/Ultraが5nmだったら別にそんな魅力でもないなぁということだ。M1 Macが出た時にも、MBAとMBPでそんなに違いないよねとは各所で言われていた。M2 Proが5nmであったら、また同じ話がされることになるだろう。いや、それどころか3nmなM3 MBAが出たら「むしろしょぼくね？」まである。&lt;/p&gt;&#10;&lt;p&gt;Apple的にも単価が高いMBPやMac Studioは是非売りたいはず。であるならば3nmになるのは間違いないM3 MBAも控えているタイミングだし（来年になるかもだが…）、M2 Pro/Maxは是非とも3nmでいきたいだろう。商売的にも。&lt;/p&gt;&#10;&lt;h2 id="3nm-m2デスクトップmacの発売を信じて"&gt;3nm M2デスクトップMacの発売を信じて&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-512533/" target="_blank" rel="noopener"&#10; &gt;M2 Pro/M2 Maxが3nmプロセスで製造、新型MacBook Proが搭載？ - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;昨年末にあったこの話も、まさか次期MBAのためということではなかろうし、やはりタイミング的にはMBPじゃなかろうか。また、そろそろMac miniやMac Studioのアップデートがあってもおかしくない。それらには当然M2 Pro/Maxが搭載されるわけだ。&lt;/p&gt;&#10;&lt;p&gt;以上の諸々を考えると、そう遠くない次期に3nmなM2デスクトップMacの発売も現実味があると考える。いや出る。僕はその日を信じて待つぞ！&lt;/p&gt;</description></item><item><title>M3搭載Macを待つべきなのか？</title><link>https://hack-le.com/m3-mac/</link><pubDate>Wed, 11 Jan 2023 01:40:27 +0900</pubDate><guid>https://hack-le.com/m3-mac/</guid><description>&lt;p&gt;（追記: 続きの記事 &lt;a class="link" href="https://hack-le.com/m2-pro-mac-3nm/" &gt;M2 Pro/Maxが3nmになるのを信じてデスクトップMacを待つぞ – 或る阿呆の記&lt;/a&gt;）&lt;/p&gt;&#10;&lt;p&gt;（続追記：ようやく情報出始めた &lt;a class="link" href="https://hack-le.com/m3-mac-2/" &gt;M3 Macの情報も出はじめた – 或る阿呆の記&lt;/a&gt;）&lt;/p&gt;&#10;&lt;p&gt;（続々追記：待てなかったよ…… &lt;a class="link" href="https://hack-le.com/m3-mac-m2-pro-mac-mini/" &gt;M3 Macが出ないのでM2 Pro Mac Miniをポチった - 或る阿呆の記&lt;/a&gt;）&lt;/p&gt;&#10;&lt;p&gt;Apple SiliconなMac miniがほしいという記事を書いた。&lt;/p&gt;&#10;&lt;p&gt;/m1-mac-mini/&lt;/p&gt;&#10;&lt;p&gt;最近はMacを新調する気がなかったため、Apple M系Chipsetの最新情報を知らなかったのだが、調べていると、M3は劇的に性能が向上するっぽい噂を聞いて、待つべきなのか？という気分になっている。&lt;/p&gt;&#10;&lt;h2 id="微細化が進む"&gt;微細化が進む&#10;&lt;/h2&gt;&lt;p&gt;CPUの性能は線形に進化を遂げない。突然性能が劇的に上がったCPUが市場に投入されることしばしばだ。AMDのRyzenもそうであったし、Apple M1もそうだった。&lt;/p&gt;&#10;&lt;p&gt;とはいえこの時代、さすがに一気に性能向上することもなかなかないだろう……なんて思っていたのだが、M3のchipsetは恐らく40コアをサポートするという噂を聞いてさすがにビビっている。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.dealntech.com/apple-m3-chipset/" target="_blank" rel="noopener"&#10; &gt;Apple M3 Chipset: All You Need to Know&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;どうやら、プロセス自体が5nmから3nmへと微細化されるらしい。そんなに……。&lt;/p&gt;&#10;&lt;p&gt;ここまで差をつけられてしまうと、ここまできたらもっと待つべきか？という気がしてくる。&lt;/p&gt;&#10;&lt;h2 id="m3-macはいつ出るのか"&gt;M3 Macはいつ出るのか？&#10;&lt;/h2&gt;&lt;p&gt;とはいえ、現実にMacにM3が搭載される日がいつになるかは未知数だ。早くても2023年末だろうというのが最新のリークだろうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-510782/" target="_blank" rel="noopener"&#10; &gt;次期iMacはM3搭載、早くても2023年末の発売〜ガーマン記者 - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;しかしこのリークもなんだか少しずつ後ろに倒されていっているように見えるし、2024年に至ってしまう可能性も高そうに見える。少なくとも2023年M3 Mac miniが出る望みは薄そうだ。2023年のMac miniはM2のように思う。噂でもM3はiMacでMac miniはなさそうだし。&lt;/p&gt;&#10;&lt;p&gt;もともとMac miniはMacの中でも開発サイクルが比較的スローであるので（2018の時など何度も何度もディスコンの噂が流れていたし、実際その可能性もあったのでは？2013年以降はMac冬の時代であった）、2023年にM2 Mac miniが発売されると、M3以降が搭載されたMac miniの発売は2025年以降になってしまうような気がする。それはとても悲しいが、今までのことを考えると全然ありえる。さすがにそこまでは待てない……。&lt;/p&gt;&#10;&lt;p&gt;かといって、iMacユーザになる気もないし。iMacは単体で使う分には良いものだと思うが、外部ディスプレイとして使えないので、一つのディスプレイを色々な用途で使っている僕には具合が悪い。だいたい本当に2023年に出るのか？&lt;/p&gt;&#10;&lt;p&gt;Mac StudioやMac Proあたりが2024年にM3搭載で出る可能性があるが、2024年はけっこう先だし、そうでなくてもちょっと高すぎる。まぁAIで本当にゴリゴリやるならむしろそのほうがいいのかもしれないのだが、そこまでガチだと本当にMacでいいのか感も出てくる。&lt;/p&gt;&#10;&lt;p&gt;普段使いのMac miniがいい感じにパワーアップしてくれると一番嬉しいが、それは随分先になりそうな気配だ。うーん。&lt;/p&gt;&#10;&lt;h2 id="楽しみである"&gt;楽しみである&#10;&lt;/h2&gt;&lt;p&gt;まぁいずれにしても、新型Mac miniが出ないことには始まらない。今のMac mini 2018も十分働いてくれているのだし、出てから考えよう。&lt;/p&gt;&#10;&lt;p&gt;それにしても、新しいPCにワクワクするのは久しぶりである。やはりこれで出来ることが増えそうだからだろうか。この感覚は真面目に10年ぶりかもしれない。出るかどうかもわからないPCのスペックをあれこれ想像しながら、買うか買うまいか悩むのは、なんとも楽しいものである。&lt;/p&gt;</description></item><item><title>Apple SiliconなMac miniがほしい</title><link>https://hack-le.com/m1-mac-mini/</link><pubDate>Mon, 09 Jan 2023 04:52:33 +0900</pubDate><guid>https://hack-le.com/m1-mac-mini/</guid><description>&lt;p&gt;私が今使っているメインデスクトップはMac mini 2018です。その前はMac mini 2012を使っていました。したがって、Mac miniとしては2代目になります。正直Mac mini 2018を買ったときは「これで10年戦うぞ」くらいの気持ちでいたのですが、Apple SiliconのMac miniがほしくなっています……。&lt;/p&gt;&#10;&lt;p&gt;だいたいAIイラストのせい。&lt;/p&gt;&#10;&lt;h2 id="2030年までmac-mini-2018で戦うつもりでした"&gt;2030年までMac mini 2018で戦うつもりでした&#10;&lt;/h2&gt;&lt;p&gt;正直ついこの間まで新しいMac miniがほしいなんて思ってもいなかったんですよ。むしろ最後のIntel Mac miniとして、あと5年なんなら10年は戦うくらいの気でいました。まぁなんだかんだいって、いまだにM1だと開発周りで困ることもあるようなので。少なくとも、Intel Macで問題になることはまずないわけですし。&lt;/p&gt;&#10;&lt;h2 id="aiイラスト楽しい"&gt;AIイラスト楽しい&#10;&lt;/h2&gt;&lt;p&gt;では何故というと、あれです、AIイラストです。AIイラストに最近ハマってしまってですね、日々大量のクリーチャーを生み出しているんですよ。もう1万体は産んだと思います。罪深い。&lt;/p&gt;&#10;&lt;p&gt;で、今はNovelAIとか既成のWebサービスを使っているわけですが、ずっと使っていると、やっぱりローカルで動かしたいなぁなんて思うわけです。&lt;/p&gt;&#10;&lt;h2 id="apple意外と頑張ってる"&gt;Apple意外と頑張ってる&#10;&lt;/h2&gt;&lt;p&gt;それだとMac系はNVIDIAじゃないしあまりよろしくなさそうに思いますが、Appleもだいぶやる気があるようで、Stable Diffusionに正式対応なんて話もあったわけです。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gigazine.net/news/20221202-stable-diffusion-core-ml-apple/" target="_blank" rel="noopener"&#10; &gt;Appleが画像生成AI「Stable Diffusion」にまさかの正式対応、開発者いわく「画像を1秒以内に生成可能」 - GIGAZINE&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;生成できる画像は小さくなりがちですが、Pixelmator ProのML超解像機能を使うとアップスケールできます（有料ソフトウェアです、念の為）。&lt;/p&gt;&#10;&lt;p&gt;これを使うと、たとえばNovelAIで出力した512x768の100KBちょいくらいのjpg（元500KB程度のpng）ならば、Mac mini 2018で10秒程度で実行できます。1枚10秒でできるなら大したものだと思いつつも、100枚くらいターゲットにすると15分以上かかってしまうんですよね。しかも実行中はまともに他の操作ができなくなるし。これの時間もApple Siliconならば相当短縮できることが期待されます。&lt;/p&gt;&#10;&lt;p&gt;ということで、NovelAIやらmidjourneyやらに課金し続けるなら、いっそマシンを買って自前でやっても良いのでは？と思うくらいには、楽しんでしまっているんですね。&lt;/p&gt;&#10;&lt;h2 id="ポチるタイミングは要検討"&gt;ポチるタイミングは要検討&#10;&lt;/h2&gt;&lt;p&gt;まぁ電気代の問題もありますし、この手の話題はやはりMac系はちょっとつらいところもあるので、もうしばらくは勉強しつつ様子見といったところですが、今年発表されるだろうM2 Mac miniが出たら、ポチってしまうかもしれません。&lt;/p&gt;&#10;&lt;p&gt;円安ですっかり値上がりしてしまったこのタイミングでM1 Mac miniを買うのはなんだか悔しいですしねぇ。アメリカの利上げがいったん落ち着きそうな中、日銀は金融引締するんじゃないかという噂でもちきりで（それについて自分はかなりまずいんじゃないの？という意見ですが、ここでは置いておきます）、そうすると中期的にはしばらくドル安円高の流れになるかもしれません。とすると、発表のタイミングでAppleレートが多少マシになる可能性もあります。為替ばっかりはどうなるかわかりませんけれど、少なくとも今慌てて買う流れではないことは確かです。&lt;/p&gt;</description></item><item><title>ChatGPTはとりあえずスニペット保管庫代わりにはなりそう</title><link>https://hack-le.com/2022-12-05-chatgpt/</link><pubDate>Tue, 06 Dec 2022 01:54:00 +0900</pubDate><guid>https://hack-le.com/2022-12-05-chatgpt/</guid><description>&lt;p&gt;噂のChatGPTをちょっと使ってみた。役人の答弁みたいな回答にちょくちょくイライラさせられつつ、プログラミングのことを聞くといい感じでスニペットを出してくれるので、よく使うけど忘れがちなスニペット保管庫としては普通に実用性ある気がする。&lt;/p&gt;&#10;&lt;h2 id="生活"&gt;生活&#10;&lt;/h2&gt;&lt;h3 id="自律神経が狂ってるのだよ"&gt;自律神経が狂ってるのだよ&#10;&lt;/h3&gt;&lt;p&gt;何故だろう。わからないけれど、とりあえず、狂っている。今日は早く終わりたかったのに、夕方のMTGで明日利用しているサービスのメンテナンスがあることを突然知る。チームメンバは青天の霹靂。とりあえずいるメンバで対応。仕事が終わってベッドに倒れ込む。そして夜中、妙な夢を見て目が覚めると、Teamsにリスケをお願いしたはずのMTGがスケジューラに入っている（しかも明日）とメンバから連絡がきていた。ええぇと思って夜中だがメールを出す。もう2時だ。何してるんだろうか……。&lt;/p&gt;&#10;&lt;h3 id="chatgpt"&gt;ChatGPT&#10;&lt;/h3&gt;&lt;p&gt;噂のChatGPTをちょっといじってみた。といっても本当にいじってみた感じで、巷でためされているようなプログラミングやデータベース設計なんかはさせていない。忘れかけたExcel関数やスニペットを書くのにはちょうどよいんだろうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/12/7919e8e1d8cee51613cdd137352cd1c5.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;地味に使えるかもしれない？🤔&lt;/p&gt;&#10;&lt;p&gt;argparseいつもどんな感じだったっけなーって検索する。同じようなので、boto3系とかも使いやすいかもしれない。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/12/c45c7c9fa301eb9e3487c2fd317b4b47-1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;かなりいいかも。queryのオプションいっつも忘れるからちょうどいいよねこれ。&lt;/p&gt;&#10;&lt;p&gt;もうちょっと深堀りしていくと、かなりいいアシスタントになるかもしれない？ちょっと休日の時間を捧げるにふさわしい相手かもしれない。&lt;/p&gt;&#10;&lt;p&gt;ただ知らない分野のことは聞かないほうがいいなと思った。専門分野にせよエンタメにせよ、息を吐くようにそれらしい嘘をつくので…。&lt;/p&gt;&#10;&lt;h2 id="開発"&gt;開発&#10;&lt;/h2&gt;&lt;h3 id="成果出せ呪い"&gt;成果出せ（呪い）&#10;&lt;/h3&gt;&lt;p&gt;朝っぱらからお説教したくなるのを我慢した。まぁこういうのは言わないほうがきっといいよね。&lt;/p&gt;&#10;&lt;p&gt;言いたかったことをまとめると、「未来を起点に考えろ」だったと思う。未来とはつまり成果。成果を出すにはどうしたらいいのか、の順番で考えような、ということ。&lt;/p&gt;&#10;&lt;p&gt;未来のために、現在を確認する。現在とは今までの成果とこれからやること。これからやることは認識合わせられるタイミングで確実に合わせにいく。わからないことは今ここで解消する。合わせたら、可能なら記録を残す。それは責任の所在を明らかにするためではなく、認識をブレさせないため。未来のため。&lt;/p&gt;&#10;&lt;p&gt;今までの成果が芳しくないなら、過去を振り返る。その原因が未来に影響を及ぼす可能性があるなら共有し改善方法を考える。影響しないなら深く追求しない。未来のために振り返る。&lt;/p&gt;&#10;&lt;p&gt;そうすれば自ずと成果が出る。成果さえ出ればめんどくさいことは言われない。言われても気にならないし何も起きない。だって成果出てるから。皆ハッピー。&lt;/p&gt;&#10;&lt;p&gt;やってはいけないことは、責任の追求と先延ばし。今芳しくないのはxxのせいだ、あなたはxxと言っていた、私は悪くない……。これは最悪。誰が悪かろうがどうでもいい。証明もできない。たとえできても意味ない。問題は結局成果は出るのか、それだけ。自分のせいじゃなくても自分が成果を出せなければ評価されない。チームは前に進まない。&lt;/p&gt;&#10;&lt;p&gt;たとえしんどくても認識合わせの先延ばしをするな。後でもっとしんどくなる。間違いを恐れず確認しろ。むしろ間違っているからこそ確認の意味がある。&lt;/p&gt;&#10;&lt;p&gt;過去を起点に考えると、責任の追求に終始し、未来を放棄して、現状を見ない。そして何も進まない。&lt;/p&gt;&#10;&lt;p&gt;成果出せ。成果成果成果成果成果成果出せ。本気で成果を出そうとすれば、無駄に自分や他人を責める暇はなくなる。意味がないから。成果を出そうとすれば、自然と建設的になり前向きになり人を信頼しチームに貢献しようとする。成果出せ。&lt;/p&gt;&#10;&lt;p&gt;うん、言わないほうがいいな（戒め）。&lt;/p&gt;</description></item><item><title>Dropbox Plus(3年版)を更新した</title><link>https://hack-le.com/dropbox-plus-3/</link><pubDate>Tue, 01 Nov 2022 02:35:13 +0900</pubDate><guid>https://hack-le.com/dropbox-plus-3/</guid><description>&lt;p&gt;僕はDropboxのPlusプランに加入している。ソースネクストで3年分のライセンスを購入した。当時28,800円だった。これはつまり、一月あたり800円の計算だ。公式では年間契約で1,200円/月、月払いだと1,500円/月だから、随分と安くなる。&lt;/p&gt;&#10;&lt;p&gt;まぁ安いといっても800円/月の価値をオンライン・ストレージに見出す人はあまり多くないかもしれない。それだけの価値はあると思うものの、3年前も大いに悩んでいた。&lt;/p&gt;&#10;&lt;p&gt;/dropbox-plus/&lt;/p&gt;&#10;&lt;p&gt;結局、この記事を書いた翌日くらいに購入に踏み切ったのである。で、それ以来便利に使っていたのだが、月日が流れるのは速いもので、もう3年が経過しようとしている。あと3ヶ月ばかりで、永遠にも思えた3年のライセンスが切れるわけだ。なんてこった。それで、僕は契約を継続するかしないか、そろそろ決める必要があった。&lt;/p&gt;&#10;&lt;h2 id="やっぱり悩む"&gt;やっぱり悩む&#10;&lt;/h2&gt;&lt;p&gt;3年前に価値があると考え、そして今もその価値を認めているのであれば、悩む必要などないように思えるかもしれない。だがまぁ、やっぱり悩みどころではあるのである。先の記事にも書いているが、オンライン・ストレージというやつはなけりゃないでなんとかやりようがあるものだからだ。&lt;/p&gt;&#10;&lt;p&gt;特に僕はNASを持っているし、これにVPNを合わせれば、外からSMBでファイルにアクセスする、なんてこともまぁできる。実際、昔はそういうこともやっていた。&lt;/p&gt;&#10;&lt;p&gt;しかし、もはやそういったことが面倒なんである。VPNサーバをたてるのも、運用するのもしんどい。昔はそれ自体が楽しかった。だが今となってはただの作業だ。&lt;/p&gt;&#10;&lt;p&gt;NASも今あるから使っているが、これが故障したとして、果たして買い換えるのがいいのかどうか。SMBサーバも面倒くさい。それに、SMBサーバはクライアントがMacだと色々面倒なところがあるんだよなぁ（主には文字コード問題、パフォーマンスの問題）。&lt;/p&gt;&#10;&lt;p&gt;また、昨今はスマートフォンやタブレットからのアクセスも欠かせなくなってきた。アプリによるクラウド連携まで考えると、やはり専用アプリのあるDropboxは強い。&lt;/p&gt;&#10;&lt;p&gt;差分バックアップの機能も良い。この3年間、誤操作による削除をしてしまい、差分バックアップに助けられたことも何度かある。案外やってしまうものだ。&lt;/p&gt;&#10;&lt;p&gt;災害にも強いだろう。僕の家が大規模自然災害や火事・地震などで倒壊する可能性と、世界規模に分散されたDropboxサーバが破壊される可能性であれば、恐らく後者のほうが可能性は低いはずだ。ただまぁ、さすがにその時はファイル置き場云々どころの騒ぎではないかもしれないのだが。&lt;/p&gt;&#10;&lt;p&gt;一点難点があるとすれば、容量2TBはやや小さいということだろうか。しかしまぁ、これも考えようによっては良い制約かもしれない。実際、2TBのデータを個人が管理するのは難しく、大容量のNASを使ったとで、現実には電子ゴミ置き場になっていることがほとんどだと思う。&lt;/p&gt;&#10;&lt;p&gt;なので、2TBにおさまるようにデータを整理していく、というのは、なんでもかんでもデータを突っ込むだけより良いかもしれない。まぁ昨今はAIブームもあり、ローカルに保存した電子ゴミを有効活用できる目処がたつ可能性がないでもないが、たられば考えても仕方あるまい。&lt;/p&gt;&#10;&lt;h2 id="契約更新"&gt;契約更新&#10;&lt;/h2&gt;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07SS8J7NZ&amp;linkId=2662e154f47c296cd7380224d4338bbe" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin"&gt;&lt;/iframe&gt;ということで、色々考えた結果、また3年分のライセンスを購入することにした。ちょうど、Amazonでセールをしていたし。&#13;&#10;&lt;p&gt;&lt;strong&gt;一番の決め手は、スマホやタブレットからの利用を考えた時に、Dropboxアプリがあると便利&lt;/strong&gt;ってところかな。ハブになるのでなにかと使える。Dropboxに対応したアプリは多い。また、画像程度ならビューアとしてもそれなりに優秀だったりする。&lt;/p&gt;&#10;&lt;p&gt;で、購入したのがつい昨日で、29,800円で買ったのだけれど、さっき見たら28,800円に値下がりしていて泣きたい。どうしてそんな微妙な値下げを後でするの……。オトクな契約のはずなのに、なにか損した気分。。。&lt;/p&gt;&#10;&lt;h2 id="頑張ってくれ"&gt;頑張ってくれ&#10;&lt;/h2&gt;&lt;p&gt;それにしても、Google DriveやiCloudなど超巨大テックが後追いで進出してきたというのに、Dropboxはしっかりブランド作って根付いているんだからすごいものだ。地味にSugarSyncもまだ生き残っているようでびっくりした（失礼）。Boxは企業向けに転換してうまく生き残ったよな。ジャンルは違うが同時期の雄であったEvernoteは……果たして大丈夫なのか……（地味にこれもまだ一部の用途で使っていたりする）。&lt;/p&gt;&#10;&lt;p&gt;まぁ何にしても、引き続き頑張ってほしいもんである。&lt;/p&gt;</description></item><item><title>iPhoneからAndroidに乗り換えてやったことメモ</title><link>https://hack-le.com/iphone-android-memo/</link><pubDate>Thu, 20 Oct 2022 21:19:19 +0900</pubDate><guid>https://hack-le.com/iphone-android-memo/</guid><description>&lt;p&gt;Pixel 7届いた。iPhone SE2を下取りに出すことになっているので、急ぎ初期化をする必要がある。初期化前にやっておくべきこと、あとでもいいことを整理したい。&lt;/p&gt;&#10;&lt;h2 id="最初にやっておきたい"&gt;最初にやっておきたい&#10;&lt;/h2&gt;&lt;p&gt;一通りの作業を楽にするための作業。&lt;/p&gt;&#10;&lt;h3 id="ケーブル使ってアプリの移行"&gt;ケーブル使ってアプリの移行&#10;&lt;/h3&gt;&lt;p&gt;最初に起動した時に案内されると思うが、iPhoneからのデータ移行はのっかっておいたほうが楽だと思った。けっこうな数のアプリを移してくれて、Play Storeで毎度インストールする苦行から逃れられる。&lt;/p&gt;&#10;&lt;h3 id="パスワードマネージャ-bitwarden"&gt;パスワードマネージャ Bitwarden&#10;&lt;/h3&gt;&lt;p&gt;基本クラウドなのでログインするだけだが、「設定」から以下をしておく。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;生体認証のON&lt;/li&gt;&#10;&lt;li&gt;自動入力のON&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これは最初にやっておくと後々楽。&lt;/p&gt;&#10;&lt;h2 id="旧端末iphoneを初期化する前にやっておく"&gt;旧端末(iPhone)を初期化する前にやっておく&#10;&lt;/h2&gt;&lt;p&gt;iPhone上で操作が必要なもの。&lt;/p&gt;&#10;&lt;p&gt;下取りとかで旧端末を初期化する場合、取り返しのつかない事態にならないように注意しないといけない。&lt;/p&gt;&#10;&lt;h3 id="2faの移行"&gt;2FAの移行&#10;&lt;/h3&gt;&lt;p&gt;なにげに重要なのが2FAアプリの移行。&lt;/p&gt;&#10;&lt;p&gt;自分はIIJ SmartKeyを使っている。正直一覧製はよくないのだが、QRコードのエクスポート機能が便利なので。&lt;/p&gt;&#10;&lt;h3 id="モバイルsuicaの移行"&gt;モバイルSuicaの移行&#10;&lt;/h3&gt;&lt;p&gt;憂鬱すぎる。&lt;/p&gt;&#10;&lt;p&gt;Suicaは環境構築さえ整えればもっとも快適なキャッシュレス決済だと思うが、少しでもイレギュラーが発生すると死ぬ、いろいろな意味で日本を感じさせるプロダクトだと思う。&lt;/p&gt;&#10;&lt;p&gt;OS間移行で最大のうつイベントだ……と思っていたが、やってみると以前よりもだいぶ楽に移行できた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://mobilelaby.com/blog-entry-3532.html" target="_blank" rel="noopener"&#10; &gt;機種変更でモバイルSuicaを移行する方法。iPhone・Android対応&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;前はひどくて、いくつもの移行パターンがあり、間違えると非常にややこしいことになった記憶があったけれど、進歩しているんだなぁ。&lt;/p&gt;&#10;&lt;p&gt;ただし、この後、後述する&lt;strong&gt;エクスプレス予約の移行も忘れずにしないといけない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="銀行系"&gt;銀行系&#10;&lt;/h3&gt;&lt;p&gt;端末縛りしていることが多い。それはいいのだが、もしかすると旧端末での操作が必要なポンコツUXかもしれないので、念の為初期化前にやっておく。&lt;/p&gt;&#10;&lt;p&gt;自分は以下。結果的には問題なかった。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;SMBC&#10;&lt;ul&gt;&#10;&lt;li&gt;一番警戒していたが、特に問題なかった&#10;&lt;ul&gt;&#10;&lt;li&gt;ワンタイムパスワードの登録では電話を受けられる必要あり&#10;&lt;ul&gt;&#10;&lt;li&gt;つい最近まで音声通話は高かったので、20代のときはSMSのみしか使っておらず、こういう認証されると殺意が芽生えたものだ。ガースーのおかげで安くなったので今どきは無問題になった。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;住信SBI&#10;&lt;ul&gt;&#10;&lt;li&gt;スマートNEO認証を使うには、通知するSMSの端末が同一である必要あり&#10;&lt;ul&gt;&#10;&lt;li&gt;メインSIM変えたので電話番号変更手続きしたらめっちゃめんどかった&#10;&lt;ul&gt;&#10;&lt;li&gt;免許証の撮影で傾き見るのが難しかった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;PayPay銀行&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;PayPayトークンで旧端末リセットの操作が必要&lt;/strong&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ないとデビッドカードを使うことになる。これもないとカードの申込みから始まる。うんこ。PayPayうんこ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;楽天銀行&#10;&lt;ul&gt;&#10;&lt;li&gt;特に問題なし。ログインした時点で、旧端末からはログインできなくなる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;多くて死にたい。使ってるのはだいたいSMBCとSBIだけ。PayPay銀行とかキャッシュバック目当てに開いた口座だと思う。&lt;/p&gt;&#10;&lt;h3 id="ゲーム系アプリ"&gt;ゲーム系アプリ&#10;&lt;/h3&gt;&lt;p&gt;案外死ねるのがゲーム系アプリだと思う。特にOS間移行の場合、連携しているアカウントがAppleやGoogle謹製だと連携が取れず死ぬ可能性がある。独自IDだと問題ない。&lt;/p&gt;&#10;&lt;p&gt;ただ昔からのゲームだと、そういう仕組みすらなく、伝統的な「引き継ぎコード発行」だったりして、この場合は旧端末の操作が必要になる。そういうゲームは昔からやっているものと思われ、そう簡単に切れないのが人情である。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、普段やっているカジュアルゲームについては、一通りデータ引き継ぎまでやっておくほうが無難。旧端末を操作さえできればなんとでもなる。&lt;/p&gt;&#10;&lt;h3 id="ヘルスケアとgoogle-fitの連携"&gt;ヘルスケアとGoogle Fitの連携&#10;&lt;/h3&gt;&lt;p&gt;Appleのヘルスケアは、それ単体ではまぁ使わないと思うんだが、ヘルスケア系データのハブとして役に立つものだった。昔日本企業がcsvダウンロードは有料とかクソみたいな商売していたの本当に悲しかったが、そういうしょうもない商売根こそぎ潰す黒船Appleさすがやで。&lt;/p&gt;&#10;&lt;p&gt;で、Androidではこのハブの役割をするのがGoogle Fitなので、忘れずにヘルスケアとGoogle Fitの連携をiPhoneでしておく必要がある。これは他にiOSデバイスがあれば、後でもなんとかなると思う。&lt;/p&gt;&#10;&lt;h2 id="折を見てやっていくもの"&gt;折を見てやっていくもの&#10;&lt;/h2&gt;&lt;p&gt;旧端末を初期化してからでもいいかなというやつ。&lt;/p&gt;&#10;&lt;h3 id="povo-20-esimの再発行"&gt;povo 2.0 eSIMの再発行&#10;&lt;/h3&gt;&lt;p&gt;これ意外だったんだが、旧端末の操作が不要。eSIM便利やなぁ。とはいえ情報を確実に参照できる旧端末がある時にやっておいたほうがよいとは思う。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://povo.jp/procedure/switch/" target="_blank" rel="noopener"&#10; &gt;機種変更お手続き｜基本料ゼロから始めるau回線のスマホプラン【公式】povo2.0&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;公式のマニュアルは比較的わかりやすい。&lt;/p&gt;&#10;&lt;p&gt;ただ、なんかアプリのメンテナンスしているらしく、チャットで対応してもらう必要があった。対応自体は10分くらい（顔写真と自分の顔を一緒に取るのがなれてなくて手こずった）。&lt;/p&gt;&#10;&lt;h3 id="モバイルsuicaの後にやるエクスプレス予約新幹線とかの移行"&gt;モバイルSuicaの後にやる！エクスプレス予約（新幹線とか）の移行&#10;&lt;/h3&gt;&lt;p&gt;これがモバイルSuicaの移行と別途必要なの本当に罠。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://apfaq.mobilesuica.com/faq/show/1480?site_domain=default" target="_blank" rel="noopener"&#10; &gt;端末を変更・交換しても、エクスプレス予約利用登録は引き継がれますか？（東海道・山陽新幹線） | Suica Apple Pay よくあるご質問&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;引き継がれないとしか書いてないの草。いや、続きのリンクせめてはってよ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://expy.jp/faq/category/detail/?id=91" target="_blank" rel="noopener"&#10; &gt;「モバイルSuica」利用の端末を機種変更する場合の手続きは？&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ICカード番号が合っているか確認して、違っていたら再登録、ということらしい。&lt;/p&gt;&#10;&lt;p&gt;で、見てみたら合っていた。ということは、しなくていいんだろうか。え、引き継がれているってこと？？？どういうことなの……。&lt;/p&gt;&#10;&lt;p&gt;いや、前に引っかかったんだよね。帰省の時に、新幹線の改札通ろうとして引っかかった。駅員さんがフォローはしてくれるけど……時間に余裕があったからよかったけど、あのごった返している中でイレギュラーな処理はなかなか心臓に悪い。。メインのメールアドレスとかが分かればなんとかなるけど、もし情報ないない状態だとどうにもならないかもしれないし。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、番号合っていたので、とりあえず今回はこのままでいく。怖いなー。&lt;/p&gt;&#10;&lt;h3 id="キャッシュレス決済系"&gt;キャッシュレス決済系&#10;&lt;/h3&gt;&lt;p&gt;別にあとでやっても割とどうとでもなるけど、覚えている間にやっておく。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PayPay&lt;/li&gt;&#10;&lt;li&gt;R Pay&lt;/li&gt;&#10;&lt;li&gt;au Pay&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="各種アプリ"&gt;各種アプリ&#10;&lt;/h3&gt;&lt;p&gt;まぁ必要になったときにやればいいとは思う。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Amazon&lt;/li&gt;&#10;&lt;li&gt;Yahoo&lt;/li&gt;&#10;&lt;li&gt;JAL&lt;/li&gt;&#10;&lt;li&gt;ANA&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="withings-steel-hrのペアリング"&gt;Withings Steel HRのペアリング&#10;&lt;/h3&gt;&lt;p&gt;WithingsのHealth Mateを起動してログインしていたら、Steel HRペアリングしようぜ！って画面になるので画面の指示にしたがってやればよい。ただ、もう一つのデバイスで操作が必要になることもある、というメッセージも表示されていて、え、もう一つのデバイスって旧端末ですか？と思ったが、特に何もないまま進んだので真相はわからず。&lt;/p&gt;&#10;&lt;h2 id="iphone-se-2からpixel-7に移行した所感"&gt;iPhone SE 2からPixel 7に移行した所感&#10;&lt;/h2&gt;&lt;p&gt;そのうち改めて記事にしようかなと思うが、概ね想像していた感じかな、という感じ。喜びも失望もさほどなし。まぁこんなもんだよねっていう。&lt;/p&gt;&#10;&lt;p&gt;久しぶりのAndroidメインということもあって、Androidの操作性に戸惑うところはあった。でも、慣れればiOSより便利だなと思う機能も多い。もっとも、iOSはそもそもそういう戸惑いが少なかった記憶。慣れの問題はあるにせよ、過去にもiOSとAndroidの両方をメインにしたことがある中で、学習コストの低さはiOSに軍配があがるかなといったところ。&lt;/p&gt;&#10;&lt;p&gt;まぁiPhone SE 2の画面はこのご時世小さすぎると思うに至ってPixel 7にしたという面が大きいので、大画面化が実現できたのはまぁまぁ満足。ジェスチャーで全然片手モード（画面が下に降りてくるやる）にならない問題はあったけど（成功率1%くらい）、片手モードになるボタンを常設することで不格好ながら解決。&lt;/p&gt;&#10;&lt;p&gt;iOSにはこういう「不格好だけど解決できる」みたいなのがあんまないんだよね。不格好なくらいならやらんで結構、みたいなところがある、iOS。まぁ、不格好なのは筋悪だから、という理屈もあるので、そういう不格好さを許さないところにiOSの学習コストの低さがあるのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;あとMacとのクリップボード共有ができなくなったのは、仕方のないことだけれどやはり不便かな。まぁこればっかりはしゃあない。&lt;/p&gt;&#10;&lt;p&gt;なんにせよ、数年ぶり（Xperia Z3以来かな？）のAndroidメインとなりました。なんだか円安が定着しそうな昨今、これからどんどん高くなって、買い替えも難しくなっていくんだろうなぁ……。大事にしないと。&lt;/p&gt;</description></item><item><title>API Gateway + Cognito Authorizer + Lambda関数でeventから得られるjsonのメモ</title><link>https://hack-le.com/api-gateway-cognito-authorizer-lambda-event-json/</link><pubDate>Mon, 11 Jul 2022 14:04:54 +0900</pubDate><guid>https://hack-le.com/api-gateway-cognito-authorizer-lambda-event-json/</guid><description>&lt;p&gt;表題そのまま。&lt;/p&gt;&#10;&lt;p&gt;Cognito Authorizer差し込んだAPI Gateway経由でLambda関数を起動した時に、Lambda関数のeventから取得できるjsonのメモ。取得日は2022年7月11日。&lt;/p&gt;&#10;&lt;h2 id="パラメータ"&gt;パラメータ&#10;&lt;/h2&gt;&lt;p&gt;APIはREST APIで、Webアプリ上からaxiosで叩いている。&lt;/p&gt;&#10;&lt;p&gt;usernameを拾うなら event.requestContext.authorizer.claims.cognito:username&lt;/p&gt;&#10;&lt;pre&gt;`{&#13; "resource":"/testapi",&#13; "path":"/testapi",&#13; "httpMethod":"GET",&#13; "headers":{&#13; "Accept":"application/json, text/plain, */*",&#13; "Authorization":"xxxx"&#13; "CloudFront-Forwarded-Proto":"https",&#13; "CloudFront-Is-Desktop-Viewer":"true",&#13; "CloudFront-Is-Mobile-Viewer":"false",&#13; "CloudFront-Is-SmartTV-Viewer":"false",&#13; "CloudFront-Is-Tablet-Viewer":"false",&#13; "CloudFront-Viewer-Country":"US",&#13; "Content-Type":"application/json",&#13; "Host":"example.com",&#13; "User-Agent":"axios/0.27.2",&#13; "Via":"1.1 xxxx.cloudfront.net (CloudFront)",&#13; "X-Amz-Cf-Id":"xxxx==",&#13; "X-Amzn-Trace-Id":"Root=1-xxxx-xxxx",&#13; "X-Forwarded-For":"xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx",&#13; "X-Forwarded-Port":"443",&#13; "X-Forwarded-Proto":"https",&#13; "X-Requested-With":"XMLHttpRequest"&#13; },&#13; "multiValueHeaders":{&#13; "Accept":[&#13; "application/json, text/plain, */*"&#13; ],&#13; "Authorization":[&#13; "xxxx"&#13; ],&#13; "CloudFront-Forwarded-Proto":[&#13; "https"&#13; ],&#13; "CloudFront-Is-Desktop-Viewer":[&#13; "true"&#13; ],&#13; "CloudFront-Is-Mobile-Viewer":[&#13; "false"&#13; ],&#13; "CloudFront-Is-SmartTV-Viewer":[&#13; "false"&#13; ],&#13; "CloudFront-Is-Tablet-Viewer":[&#13; "false"&#13; ],&#13; "CloudFront-Viewer-Country":[&#13; "US"&#13; ],&#13; "Content-Type":[&#13; "application/json"&#13; ],&#13; "Host":[&#13; "xxxx"&#13; ],&#13; "User-Agent":[&#13; "axios/0.27.2"&#13; ],&#13; "Via":[&#13; "1.1 xxxx.cloudfront.net (CloudFront)"&#13; ],&#13; "X-Amz-Cf-Id":[&#13; "xxxx=="&#13; ],&#13; "X-Amzn-Trace-Id":[&#13; "Root=1-xxxx-xxxx"&#13; ],&#13; "X-Forwarded-For":[&#13; "xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx"&#13; ],&#13; "X-Forwarded-Port":[&#13; "443"&#13; ],&#13; "X-Forwarded-Proto":[&#13; "https"&#13; ],&#13; "X-Requested-With":[&#13; "XMLHttpRequest"&#13; ]&#13; },&#13; "queryStringParameters":"None",&#13; "multiValueQueryStringParameters":"None",&#13; "pathParameters":"None",&#13; "stageVariables":"None",&#13; "requestContext":{&#13; "resourceId":"xxxx",&#13; "authorizer":{&#13; "claims":{&#13; "sub":"xxxx-xxxx-xxxx-xxxx-xxxx",&#13; "aud":"xxxx",&#13; "event_id":"xxxx-xxxx-xxxx-xxxx-xxxx",&#13; "token_use":"id",&#13; "auth_time":"1657514663",&#13; "iss":"https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_xxxx",&#13; "cognito:username":"xxxx",&#13; "exp":"Mon Jul 11 05:44:22 UTC 2022",&#13; "iat":"Mon Jul 11 04:44:23 UTC 2022"&#13; }&#13; },&#13; "resourcePath":"/testapi",&#13; "httpMethod":"GET",&#13; "extendedRequestId":"xxxx=",&#13; "requestTime":"11/Jul/2022:04:44:26 +0000",&#13; "path":"/apitest",&#13; "accountId":"xxxx",&#13; "protocol":"HTTP/1.1",&#13; "stage":"dev",&#13; "domainPrefix":"hoge",&#13; "requestTimeEpoch":1657514666712,&#13; "requestId":"xxxx-xxxx-xxxx-xxxx-xxxx",&#13; "identity":{&#13; "cognitoIdentityPoolId":"None",&#13; "accountId":"None",&#13; "cognitoIdentityId":"None",&#13; "caller":"None",&#13; "sourceIp":"xxx.xxx.xx.xxx",&#13; "principalOrgId":"None",&#13; "accessKey":"None",&#13; "cognitoAuthenticationType":"None",&#13; "cognitoAuthenticationProvider":"None",&#13; "userArn":"None",&#13; "userAgent":"axios/0.27.2",&#13; "user":"None"&#13; },&#13; "domainName":"example.com",&#13; "apiId":"xxxx"&#13; },&#13; "body":"None",&#13; "isBase64Encoded":false&#13; }&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;長い。&lt;/p&gt;</description></item><item><title>（1GB無料廃止を受けて追記）楽天Bigを買いました。iPhone 8 と半年かけて比べていきます</title><link>https://hack-le.com/rakuten-big-iphone-8/</link><pubDate>Fri, 27 May 2022 01:10:25 +0900</pubDate><guid>https://hack-le.com/rakuten-big-iphone-8/</guid><description>&lt;p&gt;（2022-05-27）この記事は2021年5月5日のものだった。過去ログ漁っていたら見つけて、あー、こんなこと考えて楽天Bigなんて買っちゃったんだ僕、と懐かしい気持ちになったので、その後の楽天モバイルの顛末も含めて追記。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;楽天Bigを購入した。別にさほど欲しかったわけではないのだけれど、楽天のUnlimitedプランの一年間無料が4/7までであったことから、駆け込みで申し込み、ついでに購入してみたという流れだ。中身はZTEだし、49,800円はちょっと高いなというのが実感だが、まぁ2万ポイント返ってくるので良しとする。今どきの楽天ポイントはRakuten Payで使えるし、良いだろう。&lt;/p&gt;&#10;&lt;p&gt;これから半年ほどかけて、iPhone 8とどちらをメインにするか、自分の生活に合わせて検証していくつもりだ。&lt;/p&gt;&#10;&lt;h2 id="携帯料金値下げの流れ"&gt;携帯料金値下げの流れ&#10;&lt;/h2&gt;&lt;p&gt;携帯料金の値下げは菅総理肝いりということもあって、各社一斉に相当の値下げがなされた。MNOではDoCoMoのahamoが皮切りになったし、MVNOではIIJが口火を切って、さらにnuroが追いかけたという感じ。&lt;/p&gt;&#10;&lt;p&gt;この流れは楽天にとっては逆風と思われ、実際ahamoにはかなり焦らされたのではなかろうか（まぁahamoに度肝を抜かれたのは業界全体そうだろうが…）。これ、ITリテラシーの低いそうのサポート代金が視覚化された側面もある（「&lt;a class="link" href="https://japanese.engadget.com/ntt-docomo-ahamo-211258897.html" target="_blank" rel="noopener"&#10; &gt;20GBで2980円のahamoが安いわけ 実はドコモの本音も見え隠れ（佐野正弘） - Engadget 日本版&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;まぁ言ってしまえばIT介護費用だったんだよね。それをなくせば安くなる、と。これは菅総理の思惑とは違ったかもしれないし、そもそも総理の介入は正直どうかと思うんだけれど、サポート費用に対価をつける流れができたのはいいことだと思う（「&lt;a class="link" href="https://japanese.engadget.com/docomo-ahamo-044542447.html" target="_blank" rel="noopener"&#10; &gt;ドコモ、ahamoでも店頭サポート提供 ただし有償 - Engadget 日本版&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;日本の労働生産性が非常に低い原因の一つが、学ぶ気のない、やってもらって当たり前気分の阿呆に合わせすぎていることだと思うんだ。対価を取ればいいんだけれど、無料でサポートするから、一部のテイカーのためにみんなが疲弊しているのだと思う。&lt;/p&gt;&#10;&lt;p&gt;そういったサポートを必要としない人たちは多く、いわばMVNOの格安SIMなどは彼ら向けのサービスだったわけだが、楽天Unlimitedもそういうまともなリテラシーを持った人向けに訴求していた面があった。&lt;/p&gt;&#10;&lt;p&gt;なので、ahamoの登場は楽天に逆風……と言えるが、そこで楽天は1GBまで無料、という恐るべきプランを打ち出し、このインパクトは非常に強いものとなった（「&lt;a class="link" href="https://japanese.engadget.com/rakuten-mobile-5g-055446721.html" target="_blank" rel="noopener"&#10; &gt;楽天モバイル、20GBまで月1980円の段階制プラン 「1GBまで無料」 - Engadget 日本版&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;いや実際、このプランに一番驚いたのは、IIJやnuroを始めとするMVNO勢力だよなぁ。格安SIMの愛好者が全部取られてもおかしくなさそうなエゲツないプラン……。&lt;/p&gt;&#10;&lt;p&gt;なので、IIJやnuroは、1GB以上2,3GBまでならこっちのほうがお得、という微妙な間隙をつくような形になっている。&lt;/p&gt;&#10;&lt;p&gt;ちなみに僕はBiglobe。なぜかというと、4月から半年間は480円/月のキャンペーンをやっているからだ。それが終われば1,280円/月になる。もとより加入時のキャッシュバックが大きかったから入ったに過ぎないのだし、半年後にはおさらばよ（MVNO利用者はこういう人が多いだろう）。&lt;/p&gt;&#10;&lt;h2 id="楽天unlimitedを使うべく"&gt;楽天Unlimitedを使うべく&#10;&lt;/h2&gt;&lt;p&gt;さて、問題は半年後、Biglobe後どこにするかだ。筆頭候補はnuroモバイルだったのだが、ギリギリ楽天Unlimitedも一年間無料キャンペーンの申し込みに間に合いそうだったので、入ってみた。&lt;/p&gt;&#10;&lt;p&gt;僕が加入したのは本当にギリギリの4/7。この時点では、まだ楽天UnlimitedはiPhoneに正式対応していなかったし、ましてiPhone 8となればかなり特殊な対応をする必要があった。正直SIMのためにそこまでやるのはバカバカしかったので、iPhoneで無理にUnlimitedを使う気もなかった。まぁ楽天回線の実力もわからないので、メイン回線にするのは少し怖かったし。&lt;/p&gt;&#10;&lt;p&gt;ということで、せっかくだから楽天Bigでも買ってみるかと思ったのだ。楽天Bigという名前はどう考えてもダサいが、まぁそれが楽天らしいのかもしれない。中身はZTEだと言われている（「&lt;a class="link" href="https://japanese.engadget.com/axion-20-5g-002023936.html" target="_blank" rel="noopener"&#10; &gt;Rakuten BIGのベース？ 中国で品切れ続く『世界初スマホ』ZTE AXON 20 5G（山根博士） - Engadget 日本版&lt;/a&gt;」)。型番のZR01はZTE、Rakutenだったりするんだろうか。&lt;/p&gt;&#10;&lt;p&gt;Rakuten Handという選択肢もないではなかったが、iPhone 8を持っている自分が、それを使う姿を想像できなかった。持ちやすさという点では、今やスモールデバイスに分類されるだろうiPhone 8で十分だからだ。その点、楽天Bigは6.9インチという巨大なディスプレイを持っている。したがって、当然持ちづらいことは予想できたが、その分ネットは見やすいはず。iPhone 8とは明らかに違う特性を持っているので、使う姿がまだ想像できた。&lt;/p&gt;&#10;&lt;p&gt;ということで、楽天Bigを購入したわけだ。&lt;/p&gt;&#10;&lt;h2 id="楽天bigの使い勝手"&gt;楽天Bigの使い勝手&#10;&lt;/h2&gt;&lt;p&gt;さて、楽天Bigを購入して一ヶ月が経過しようとしている。目論見どおり、&lt;strong&gt;iPhone 8とはまったく違う特徴を備えていることから、メインは相変わらずiPhone 8ではあるものの、サブスマホとしてけっこう活躍している&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;以下に所感を書く。&lt;/p&gt;&#10;&lt;h3 id="デカイ"&gt;デカイ&#10;&lt;/h3&gt;&lt;p&gt;とにかくデカイ。デカすぎる。しかも重い。ずっしりとした質量を感じる。コイツを持って読書でもしたら、ちょっとした筋トレになるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;が、よくよく考えてみるまでもなく本のほうが重い。つまり、&lt;strong&gt;楽天Bigは見た目以上の重量感がある&lt;/strong&gt;、ということだ。あくまで重量感であるので、冷静に考えればそれほどの重さというわけではない……はずなんだが……重い。&lt;/p&gt;&#10;&lt;p&gt;そして持ちづらい。ポケットにも入らない。いや、入らないことはないが、あまり入れたくはない。普段はカバンに入れている。これは男性に多いと思うが、ポケット族にとってはマイナスかもしれない。&lt;/p&gt;&#10;&lt;h3 id="画面上部に手が届かないが考えられたアプリもある"&gt;画面上部に手が届かないが、考えられたアプリもある&#10;&lt;/h3&gt;&lt;p&gt;そして手が届かない。Twitterでツイートする時に指がつる。&lt;/p&gt;&#10;&lt;p&gt;が、iPhoneやGalaxyも長細い形態を採用しているからか（というよりZTEはそれの真似だろうが）、案外そのへんについて考えられているアプリもある。たとえばブラウザアプリの&lt;strong&gt;Firefoxなどは、画面下部で検索からタブの選択など、多くの操作できるようになっていた&lt;/strong&gt;。素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;逆に、古臭いアプリなどは画面下部に真っ黒な余白を残してくれていたりもする。悲しい。&lt;/p&gt;&#10;&lt;h3 id="ネットはさすがに快適"&gt;ネットはさすがに快適&#10;&lt;/h3&gt;&lt;p&gt;前述の「重い」ということを除けば、&lt;strong&gt;ネットはiPhone 8 よりも随分と快適&lt;/strong&gt;。iPhone 8だと、冗談抜きで画面の半分くらいは広告やタブバーなどに占領されてしまうのがつらかったが、楽天Bigなら全然平気。特にその長細さ故に、広告は横軸で大きさを規定され、肝心の縦軸の侵食具合が減ったのは嬉しい。&lt;/p&gt;&#10;&lt;h3 id="バッテリーの持ちはテザリングで半日置いといても半分くらいだった"&gt;バッテリーの持ちはテザリングで半日置いといても半分くらいだった&#10;&lt;/h3&gt;&lt;p&gt;バッテリーについてだが、今の所困っていない……ものの、メインスマホとして使っていないために、まだまだ評価できない。&lt;/p&gt;&#10;&lt;p&gt;ただ、&lt;strong&gt;テザリングで半日ほどiPhoneに繋げていても、50%にもなっていなかったことから、ヘタなモバイルルータを使うよりもよほど良いものである&lt;/strong&gt;ことが示唆される。&lt;/p&gt;&#10;&lt;h3 id="指紋認証は素晴らしい"&gt;指紋認証は素晴らしい！&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;全面ディスプレイだが、指紋認証が使える&lt;/strong&gt;。しかも、背面のなんか押しづらいところにあるのではなく、画面下部の、iPhone 8以下でいうところのホームボタンに位置するところにあって、これがめちゃくちゃ使いやすい。正直一番感動したのはこれかもしれない。&lt;/p&gt;&#10;&lt;h3 id="スペックでは圧倒しているのにandroidの悲哀ゲーム"&gt;スペックでは圧倒しているのに！Androidの悲哀、ゲーム&#10;&lt;/h3&gt;&lt;p&gt;スマホゲーをよくしている人にとっては、やはりAndroidであることの悲哀を感じずにはいられないかもしれない。&lt;strong&gt;Antutuのベンチなどを見ると、楽天Bigが圧倒しているはずなのだが、実際に動かしてみるとiPhone 8のほうがヌルヌル動く&lt;/strong&gt;。2021年になっても変わらないのだなぁ。いや、楽天Bigはたしか2018年のデバイスだけれど。まぁでも、今も変わらないんだろうな。&lt;/p&gt;&#10;&lt;p&gt;まぁ、僕は大したゲームをしないので、まぁ良いんだが。ただ、その長細さが災いして、プレイしづらいゲームはけっこうあるかもしれない。&lt;/p&gt;&#10;&lt;h3 id="クラウドのおかげで移行がかんたん"&gt;クラウドのおかげで移行がかんたん&#10;&lt;/h3&gt;&lt;p&gt;これは別に楽天Bigの特徴ではないが、嬉しかったのは多くのサービスで移行がすんなりいったことだ。SpotifyやAmazon Kindle, Audibleなど、サービスの移行が非常にかんたんであった。いや、共有といったほうがいいかな。iOS、Android間の移行は極めて楽になっている。&lt;/p&gt;&#10;&lt;p&gt;特に感動したのはQRコード決済である。本当に楽。スペックではSuicaが圧倒しているかもしれないが、トータルのユーザーエクスペリエンスはQRコード決済が圧倒的である。交通決済でもQRコードの試験が実施されているし、やがてSuicaはQRコード決済に敗北するのではなかろうか。スペックはたしかに良いが、運用がたいへん過ぎる。導入コストも大きい。Suicaは良くも悪くも日本的技術革新の極みという感じがする。&lt;/p&gt;&#10;&lt;h2 id="半年かけて見定めるよ"&gt;半年かけて見定めるよ&#10;&lt;/h2&gt;&lt;p&gt;ということで、与太話も含めて随分と長くなってしまったが、少なくともサブスマホとしては思っていたより活躍してくれているし、楽天Bigだけ持って出歩くこともけっこうある。&lt;/p&gt;&#10;&lt;p&gt;今後、半年ほどかけて、iPhone 8と比較し、自分に合うのはどちらなのか、見極めていくつもりだ。&lt;/p&gt;&#10;&lt;h2 id="追記その後の楽天モバイルと楽天bigはどうだったかについて"&gt;（追記）その後の楽天モバイルと楽天Bigはどうだったかについて&#10;&lt;/h2&gt;&lt;p&gt;2022年6月をもって、楽天モバイルは1GB無料を終了させることを発表した。ほとんどキャンペーン期間のような短さであった。で、以下のような記事を書くに至った。&lt;/p&gt;&#10;&lt;p&gt;/rakuten-mobile-next/&lt;/p&gt;&#10;&lt;p&gt;曲がりなりにも1年使っていたからこそ、楽天回線の品質が他と比べて悪いことを知っている。それで3GB 1078円/月は高すぎるとは言わないが決して安くはない。ということで、さっさと乗り換えるつもりだ。&lt;/p&gt;&#10;&lt;p&gt;そうすると残るは楽天Bigだが、このデバイスはまるでよくなかった。基本的なパフォーマンスがiPhone 8にも劣るのはまぁ仕方ないとしても（ベンチの数値も当てにならんね）、致命的なのはその異常なタッチ感度の良さだ。敏感肌過ぎて、誤タッチがちょっと支障をきたすほど多い。&lt;/p&gt;&#10;&lt;p&gt;ということで、楽天Bigが49,800円（ポイント還元25,000P）であることを考慮すると、結果的には安物買いの銭失いになってしまったかもしれない。nuroモバイルなら3GBフツーにつかって792円/月だから、1万円/年もしないし。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、こういうものは結局使ってみないとわからないわけで。で、使ったからこそ、まぁ楽天は現状こんなもんかともよくわかったと、まぁポジティブ？に考えよう。&lt;/p&gt;</description></item><item><title>DynamoDBにboto3で操作した時のレスポンス、エラー出る・出ない</title><link>https://hack-le.com/dynamodb-boto3-errors/</link><pubDate>Wed, 25 May 2022 01:45:31 +0900</pubDate><guid>https://hack-le.com/dynamodb-boto3-errors/</guid><description>&lt;p&gt;いつも忘れるのでメモ。随時追加していく。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;get_item()&lt;/li&gt;&#10;&lt;li&gt;put_item()&lt;/li&gt;&#10;&lt;li&gt;delete_item()&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="get_item"&gt;get_item()&#10;&lt;/h2&gt;&lt;p&gt;以下のようなPKだけのシンプルなテーブルに対する操作とする。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Attr&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Value&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pk_id&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;test&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="正常系"&gt;正常系&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-05-25&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.get_item(Key={&amp;#39;pk_id&amp;#39;: &amp;#39;test&amp;#39;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なにも間違えていない。なので、当然怒られない。正常なレスポンス。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;Item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;pk_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ResponseMetadata&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RequestId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPStatusCode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPHeaders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Tue, 24 May 2022 16:30:00 GMT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/x-amz-json-1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-length&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;32&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;connection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;keep-alive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amzn-requestid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amz-crc32&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;3407680564&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RetryAttempts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="keyがない"&gt;Keyがない&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-05-25&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.get_item(Key={&amp;#39;hoge&amp;#39;: &amp;#39;test&amp;#39;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下のエラーが出て怒られる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the GetItem operation: The provided key element does not match the schema&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="pkの値が存在しない"&gt;PKの値が存在しない&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-05-25&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.get_item(Key={&amp;#39;pk_id&amp;#39;: &amp;#39;hoge&amp;#39;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;怒られない。ただしItemがない。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ResponseMetadata&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RequestId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPStatusCode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPHeaders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Tue, 24 May 2022 16:26:45 GMT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/x-amz-json-1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-length&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;connection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;keep-alive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amzn-requestid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amz-crc32&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2745614147&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RetryAttempts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;こんな感じ。&lt;/p&gt;&#10;&lt;h2 id="put_item"&gt;put_item()&#10;&lt;/h2&gt;&lt;h3 id="正常系-1"&gt;正常系&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-05-25&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;item = {&amp;#39;pk_id&amp;#39;: &amp;#39;test&amp;#39;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.put_item(Item=item)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;問題なく動く。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ResponseMetadata&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RequestId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPStatusCode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPHeaders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Tue, 24 May 2022 17:21:29 GMT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/x-amz-json-1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-length&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;connection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;keep-alive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amzn-requestid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amz-crc32&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2745614147&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RetryAttempts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="pkがない"&gt;PKがない&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-05-25&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;item = {&amp;#39;hoge&amp;#39;: &amp;#39;test&amp;#39;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.put_item(Item=item)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;怒られる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key pk_id in the item&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;PKの属性名まで表示される。&lt;/p&gt;&#10;&lt;h2 id="delete_item"&gt;delete_item()&#10;&lt;/h2&gt;&lt;p&gt;以下のようなPKだけのシンプルなテーブルに対する操作とする。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Attr&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Value&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pk_id&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;test&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="正常系-2"&gt;正常系&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-05-25&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.delete_item(Key={&amp;#39;pk_id&amp;#39;: &amp;#39;test&amp;#39;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;正常に動く。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ResponseMetadata&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RequestId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPStatusCode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;HTTPHeaders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Tue, 24 May 2022 17:26:32 GMT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/x-amz-json-1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content-length&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;connection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;keep-alive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amzn-requestid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;x-amz-crc32&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2745614147&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;RetryAttempts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="pk自体がない"&gt;PK自体がない&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-05-25&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.delete_item(Key={&amp;#39;hoge&amp;#39;: &amp;#39;test&amp;#39;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;怒られる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the DeleteItem operation: The provided key element does not match the schema&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="pkの値が存在しない-1"&gt;PKの値が存在しない&#10;&lt;/h3&gt;&lt;p&gt;確認日: 2022-10-03&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;res = table.delete_item(Key={&amp;#39;pk_id&amp;#39;: &amp;#39;test0&amp;#39;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;怒られない。&lt;/p&gt;</description></item><item><title>iPad Pro 12.9インチのSidecarはブログ書きにとってとても便利だ</title><link>https://hack-le.com/ipad-pro-129-sidecar/</link><pubDate>Tue, 26 Apr 2022 03:39:32 +0900</pubDate><guid>https://hack-le.com/ipad-pro-129-sidecar/</guid><description>&lt;p&gt;iPad Pro 12.9インチをポチってまだ3日ほどしか使っていないのだが、思いの外便利につかえているというか、もっと早く買えばよかったという気がしている。&lt;/p&gt;&#10;&lt;p&gt;というのも、Sidecarがめっちゃ便利なのである。iPad Air 4の10.9インチでもそこそこ使えることはわかっていたが、まぁたまに使うくらいだった。しかし12.9インチはいい。このまま常用しそうだ。この2インチの差は大きい。&lt;/p&gt;&#10;&lt;p&gt;特に、デスクトップPCを愛用するブログ書きには是非とも勧めたい。&lt;/p&gt;&#10;&lt;h2 id="大きいは正義"&gt;大きいは正義&#10;&lt;/h2&gt;&lt;p&gt;でかいということはただそれだけで素晴らしいようだ。本当に捗る。今もSidecarの画面でこのブログ記事を書いている。とても書きやすい。これだけでiPad Pro 12.9インチを買ってよかったと思っている。なんだったら倍の値段払って最新版買ってもよかったかもなと思うくらいだ。&lt;/p&gt;&#10;&lt;p&gt;iPad Air 4でもちょいちょいSidecarは使っていたが、頻繁に使うというほどではなかった。それだったらノートPCを使うほうが便利だった。だが、この12.9インチのiPad Proにおいては、ノートPCを開くよりもよほど都合がよい。iPad AIr 4の10.9インチと、これほどの差があるとは……。&lt;/p&gt;&#10;&lt;h2 id="でかけりゃいいってもんでもない"&gt;でかけりゃいいってもんでもない&#10;&lt;/h2&gt;&lt;p&gt;しかし、でかければいいというものでもない。と、ここまで書いたことをいきなり否定するようだが、要は&lt;strong&gt;物事には適切な大きさがある&lt;/strong&gt;、ということだ。50インチのテレビジョンをディスプレイにしたらめっちゃ使いづらいだろう。黒板よりも手元の教科書・ノートのほうが見やすいだろう。そういうものなんだ。&lt;/p&gt;&#10;&lt;p&gt;開発作業をするうえで適切な大きさは、個人的には27-32インチくらいだと思う。ただプログラミングにおいては、コーディングに集中する画面は13-15インチくらいのほうがよいかもしれない。ただ、結局いろいろな資料なり画面なりを見ながらやることになるので、やはり結局27インチ以上のディスプレイはほしいところ。&lt;/p&gt;&#10;&lt;p&gt;23-24インチだとちょっと小さい。事務作業ならまぁそれくらいでもいいかもしれないが。個人的には事務作業でも27インチで2560x1440ほしい。これだと、1280で画面を2枚並べられる。フルHDの1920だと、半分の960はちょっと心許ないのだよねぇ。&lt;/p&gt;&#10;&lt;p&gt;しかし、文筆の作業では、20インチ以上は大きい。ウィンドウを小さくすればよいと思われるかもしれないが、画面自体がでかいために、必然的に顔と画面の距離が離れるし、またディスプレイは少し高めになる。これがよろしくない。よろしくないのだ。&lt;/p&gt;&#10;&lt;p&gt;経験的には、文筆作業が最も捗るのは13インチだと思っている。このあたりのことは6年ほど前にも記事にした。&lt;/p&gt;&#10;&lt;p&gt;/47452491-2/&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;なんとなく、&lt;strong&gt;文筆作業ややプログラミングをするうえで、最適なサイズは、11-15インチのどこか、つまりノートパソコンのサイズであるように感じます&lt;/strong&gt;。特に、12,13インチあたりが、くさいような。その人の視力、感じ方、体格などもあるので、もちろん一概に言えるものではありませんが、23インチが文筆に最適だ、ということはないように思います。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;当時はまだちょっとふわっとした感覚のようだったが、&lt;strong&gt;今は13インチ最強説が自分の中で固まっている&lt;/strong&gt;。実際、ノートPCの時はデスクトップPCよりもブログが捗る。わざわざブログを書くためだけにノートPCを起動することもあるくらいだ。&lt;/p&gt;&#10;&lt;p&gt;だが、こうして12.9インチのSidecarを手に入れたことで、ノートPCを開く回数は大きく減りそうである。というか多分開かない。&lt;/p&gt;</description></item><item><title>楽天モバイルの無料期間がもうすぐ終了する</title><link>https://hack-le.com/rakuten-unlimited/</link><pubDate>Sun, 24 Apr 2022 19:10:51 +0900</pubDate><guid>https://hack-le.com/rakuten-unlimited/</guid><description>&lt;p&gt;去年の今頃に駆け込みで購入した楽天Big + 楽天モバイル。利用料金が1年間無料ということで非常にありがたく、現在povo 2.0と併せて通信料金0円生活を満喫させてもらっている。&lt;/p&gt;&#10;&lt;p&gt;まぁもちろんこんな生活が永遠に続くわけもなく、来月からはまた通常通りである。&lt;/p&gt;&#10;&lt;h2 id="楽天モバイルは続けるタダだから"&gt;楽天モバイルは続けるタダだから&#10;&lt;/h2&gt;&lt;p&gt;通常通りとはいっても、楽天モバイルは1GBまでなら通信無料という恐るべきプランであるから、それを利用すれば当面困らない。まぁ、iPhone SE2を安く手に入れるためにMNPした未だに1円も払っていないpovo 2.0が、そろそろ課金しないと契約切られてしまうので、いったんそこで課金するつもりではある。しかし、それとて1週間390円のプランにするつもりで、その後は再び楽天モバイルで1GB/月生活になるだろう。通信事業者からすればなんとも嫌な客である。&lt;/p&gt;&#10;&lt;p&gt;まぁしかし、そういう料金体系を作っているのは他ならぬ通信事業だ。そういう商売なのだろう。であれば、一小市民に過ぎない自分は有効に使わせてもらうだけである。きっと他のところでは、無知故にコストがかかっている分野はあろうし、世の中そんなものだ。&lt;/p&gt;&#10;&lt;h2 id="デュアルesim体制"&gt;デュアルeSIM体制&#10;&lt;/h2&gt;&lt;p&gt;ということで、来月からの1GB生活に備えて、というわけではないが、これまで楽天Big + 楽天モバイル、iPhonse SE2 + povo 2.0でわけていたが、iPhone SE2にデュアルeSIMでまとめておこうと思う。&lt;/p&gt;&#10;&lt;p&gt;どういう運用を想定しているかというと、最初の方は楽天モバイルの1GBにしておいて、足りなくなったらpovo2.0のベーシックプランで食いつなぐ、どうしてもスピードがほしくなったらトッピングする、という乞食戦略である。ということで、早速eSIMの交換申請をしている。&lt;/p&gt;&#10;&lt;p&gt;……ん？これ、よくよく考えてみると、今までもそうしておけばよかったかな。楽天モバイルのためだけに楽天Bigを持ち歩くのしんどかったし。あ、もっと前からやっておけばよかった。あー。&lt;/p&gt;&#10;&lt;p&gt;……と思ったのだが、iPhone SE2はeSIM2枚は無理で、物理SIM + eSIMの体制にする必要があるようだ。あーそうか、それがめんどうくさくてやらなかったんだ……。&lt;/p&gt;</description></item><item><title>iPad Pro 12.9インチの2018年版（第3世代）を購入した</title><link>https://hack-le.com/ipad-pro-129-2018-gen3/</link><pubDate>Sun, 24 Apr 2022 16:21:24 +0900</pubDate><guid>https://hack-le.com/ipad-pro-129-2018-gen3/</guid><description>&lt;p&gt;先月、iPad Air 4を落としてバキバキにしてしまった。火災保険がきくのではとTwitterで教えてくれた人がいて、実際iPadは家財扱いのためきくことがあるらしいのだが、うちは火災保険というか賃貸で契約させられた少額保険で、見てみると家財の破損については対象外のようであった。&lt;/p&gt;&#10;&lt;p&gt;それでiPad Air 5を買うのもなんだかなぁという感じで、AmazonのFire HD 10 Plusをセールで購入し、これが12,980円なのは素晴らしいと思いつつも、やはりiPadを使っていた身からすると物足りない気持ちが強かった。&lt;/p&gt;&#10;&lt;h2 id="ipadは高いなりに良いので"&gt;iPadは高いなりに良いので&#10;&lt;/h2&gt;&lt;p&gt;Fireタブレットは値段を考えれば間違いなく素晴らしいのだが、やはりiPadにも値段なりの価値がある。レスポンス、調光、画質、スペックシートから見えないところがいちいち素晴らしいのがiPadだ。&lt;/p&gt;&#10;&lt;p&gt;やはりiPadがほしい。バキバキになったiPad Air 4もまったく使えないことはないのだが、地味にストレスが溜まる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/04/3572ee91089d3a77328d1396cb38275d.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;バキバキになったiPad Air 4&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;しかし、iPad Air 5を買う気にはどうにもなれなかった。そうすると、iPad Air 4は本当に使いみちのない産廃になってしまう。いや、事実もはや産廃かもしれないのだが、認めたくはなかった。一応Jamboardとか使うこともあるし、それにほら、ポチポチ系のソシャゲを横で動かすには優秀だし……。&lt;/p&gt;&#10;&lt;p&gt;そこで思い浮かんだのが、iPad Pro 12.9インチである。これならば10インチ系とは役割が違うので、iPad Air 4およびFire HD 10と棲み分けができる。それに、ずっと欲しいなぁと思っていたものだ。&lt;/p&gt;&#10;&lt;h2 id="ipad-proはほしいが高い"&gt;iPad Proはほしいが高い&#10;&lt;/h2&gt;&lt;p&gt;しかし……iPad Proは言わずもがな高い。最新版のものは129,800円ほどする。また、今年あたりM2ののった新版が出そうだ。もっとも、出たとしてもアメリカのインフレ + 円安、長引く半導体不足などを考えると15万くらいしそうに思える。&lt;/p&gt;&#10;&lt;p&gt;それはさすがにちょっとなぁ……という気持ちが強い。&lt;/p&gt;&#10;&lt;p&gt;正直、自分の使いみちだとApple Pencil 2さえ使えればなんでもよい。つまり、2018年版、いわゆる第3世代以降であれば、特に問題ないと思う。であれば……と思い至ったのが、整備済み品と中古である。&lt;/p&gt;&#10;&lt;p&gt;中古市場だと、だいたい7万円ほどで256GBのものが購入できる。状態によっては6万円台もある。これは最新版の半額とまでは言わないが、45-50%程度の値下がり幅だ。これはでかい。&lt;/p&gt;&#10;&lt;p&gt;ただ、中古はやはり怖い。できれば見て買いたい……。まぁ酷ければ返品に応じてくれるかもしれないが、その手続がまた億劫である。そういうことはしたくない。&lt;/p&gt;&#10;&lt;h2 id="整備済み品に手を出した"&gt;整備済み品に手を出した&#10;&lt;/h2&gt;&lt;p&gt;となると、頼りになるのは整備済み品である。整備済み品の相場は64GBが74,800円、256GBが84,800円ほどと、やはり中古品よりも若干高い。若干高いが、まぁよいかなと思える範囲だ。安心感と品質を考えれば、許容範囲だろう。&lt;/p&gt;&#10;&lt;p&gt;もっとも、整備済み品はそう都合よく入荷されるものではない。実際、この同じようなことを考えている人が多いのかどうか、第3世代のWi-fi版で容量が小さいものはあまり入荷されていない。容量が大きいものはあるが、そんな大容量使うことはまずない。&lt;/p&gt;&#10;&lt;p&gt;ということで、整備済み品を毎日チェックするようになった。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.apple.com/jp/shop/refurbished/ipad/12-9%E3%82%A4%E3%83%B3%E3%83%81ipad-pro" target="_blank" rel="noopener"&#10; &gt;iPad整備済製品 - 12.9インチiPad Pro - Apple（日本）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.apple.com/jp/shop/product/FTEL2J/A/refurbished-129-inch-ipad-pro-wi-fi-64gb-2019-space-gray-3rd-generation?fnode=37a1b29acf19ddc3c8449b0f99c3554d3d86550009d93ee74a41ad2d5d85cbf013fed2685f6608c1d5e3881eaa2ec3a2fe67df08c1fabca317b9a6b7f9f24afd57a2cadc6f7a0ee0bf913e4b9e05451d" target="_blank" rel="noopener"&#10; &gt;12.9インチiPad Pro Wi-Fi 64GB - スペースグレイ（第3世代） [整備済製品] - Apple（日本）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.apple.com/jp/shop/product/FTFN2J/A/refurbished-129-inch-ipad-pro-wi-fi-256gb-2019-silver-3rd-generation" target="_blank" rel="noopener"&#10; &gt;12.9インチiPad Pro Wi-Fi 256GB - シルバー（第3世代） [整備済製品] - Apple（日本）&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;色は何でもよいが、できれば256GBがよい。64GBだと、容量に少し気を使うことになってしまうだろうが、256GBならばまったく気にしないで済む。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B0956QDXJM&amp;linkId=c9f02eb2c6936ade9b980c2f5a4114be" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin"&gt;&lt;/iframe&gt;しかし、Wi-fiの256GBは人気があるのか、整備済み品で見たことがない。Cellularモデルのほうはあるが……というかこの記事を書いている今、出品されていたし、なんならAmazonのタイムセール(4/24-26)にすらなっていた。&#10;&lt;p&gt;99,731円……これだったら第4世代のほう買うかな……（98,800円）。まぁ第3世代と第4世代はLiDARついたこと以外あんまり変わらないんだけどさ。でも新型のほうが価値あるよな。iPadでCellularモデルがほしいと思ったことがない。GPSも使わないし。逆に言うと、Cellularモデルがほしいなら買いかもしれない。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.apple.com/jp/shop/product/FXAT2J/A/129%E3%82%A4%E3%83%B3%E3%83%81ipad-pro-wi-fi-256gb-%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%B0%E3%83%AC%E3%82%A4%E7%AC%AC4%E4%B8%96%E4%BB%A3-%E6%95%B4%E5%82%99%E6%B8%88%E8%A3%BD%E5%93%81?fnode=f223bd854c8220669fac03a54166ee960628c3ab435c0cee2324424b321199536818b9439beeeb9a4cd6c4ce12537ec2655312fcaa63ce5aadfe1d1c006246bbc7b26db4b91547682fc4507cbed390c7" target="_blank" rel="noopener"&#10; &gt;12.9インチiPad Pro Wi-Fi 256GB - スペースグレイ（第4世代） [整備済製品] - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;今のタイミングだと第4世代の256GBは売っていた。んー、でも25,000円あったら別のもの買うかなぁ。&lt;/p&gt;&#10;&lt;p&gt;という感じで毎日チェックしていたところ、第3世代64GBが入荷されていたので、ポチった。&lt;/p&gt;&#10;&lt;p&gt;今、早速Sidecarで利用している。いくつかアプリも入れたが、素晴らしくよく動く。すべてが整っている。よっしゃ。&lt;/p&gt;&#10;&lt;p&gt;iPad Air 4はソシャゲの周回機になった。&lt;/p&gt;</description></item><item><title>RAK7246にBasic Stationを入れてAWS LoRaWAN NetworkServerに接続</title><link>https://hack-le.com/rak7246-basic-station-aws-lns/</link><pubDate>Wed, 13 Apr 2022 19:40:58 +0900</pubDate><guid>https://hack-le.com/rak7246-basic-station-aws-lns/</guid><description>&lt;p&gt;自前で作る多分最安のLoRaWAN Gateway。プライベートでLoRaWANをいじる奇特な人にはいいかもしれない。&lt;/p&gt;&#10;&lt;p&gt;Raspberry Pi Zero WにLoRaなHATを載せたRAK7246を使う。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.rakwireless.com/en-us/products/lpwan-gateways-and-concentrators/rak7246g" target="_blank" rel="noopener"&#10; &gt;Take Your First Step into the IoT World with RAK7246 and RAK7246G - RAKwireless - IoT Made Easy&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;RAK7246GはGPS対応。ちゃんとやればClass Bもできるんだろうけれど、今回はClass Aのデバイスを接続します。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;RAK7246&lt;/li&gt;&#10;&lt;li&gt;Raspberry Pi Imager v1.7.2&#10;&lt;ul&gt;&#10;&lt;li&gt;RASPBERRY PI OS LITE (32-BIT)&#10;&lt;ul&gt;&#10;&lt;li&gt;Linux raspberrypi 5.15.32+ #1538&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Basic Station 2.0.6&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="参考動画"&gt;参考動画&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=6-ZrdRjqdTk" target="_blank" rel="noopener"&#10; &gt;https://www.youtube.com/watch?v=6-ZrdRjqdTk&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;基本的にこれ。これに則ってやる。が、日本ローカライズなところもあるので、そこは合わせる。&lt;/p&gt;&#10;&lt;h2 id="rak7246の準備"&gt;RAK7246の準備&#10;&lt;/h2&gt;&lt;p&gt;RAK7246でまずハマるのは、「どうやってSDカード出すの？」だと思う。いや本当に。&lt;/p&gt;&#10;&lt;p&gt;これ、SDカードを取り出すにはネジを外してケースを開く必要がある。この設計は本当にどうかと思う。なぜそんな設計にしたのか…。&lt;/p&gt;&#10;&lt;p&gt;あー、あとRAK7246GはGPSも使えるんだが、GPSアンテナとRFのアンテナがどちらもSMAコネクタで特にマーカもないため、「どっちやねん」となる。これもケースを開けるとわかる。&lt;/p&gt;&#10;&lt;h2 id="raspberrypi-zerowの設定"&gt;RaspberryPi ZeroWの設定&#10;&lt;/h2&gt;&lt;h3 id="osをインストール"&gt;OSをインストール&#10;&lt;/h3&gt;&lt;p&gt;OSはRAKの用意したものではなく、素のRaspbianを入れる。以前は毎度imgを落としてきてddコマンドを使っていたが、今はインストール用のアプリRaspbian Imagerがあり、イメージを焼くだけでなくWi-fiやSSHの設定まで書き込んでくれる。注意するとすれば、Wi-fiは2.4GHz帯だよってことくらいか。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/04/8558fb21d5ccfdb8ed3ccc6234742d3a.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;便利な世の中になった。&lt;/p&gt;&#10;&lt;h3 id="最初のインストール"&gt;最初のインストール&#10;&lt;/h3&gt;&lt;p&gt;設定したら適当にsshで入る。IPアドレスはarpでRPiなものを探す……ことはしないで、自分はいつも&lt;a class="link" href="https://apps.apple.com/jp/app/lanscan/id472226235?mt=12" target="_blank" rel="noopener"&#10; &gt;「LanScan」&lt;/a&gt;というアプリでIPスキャンしている。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo raspi-config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# enable SPI&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3 Interface Options P4 SPI&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8 Update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt upgrade&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo reboot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="basic-stationをインストール"&gt;Basic Stationをインストール&#10;&lt;/h3&gt;&lt;p&gt;Semtechの公開している「&lt;a class="link" href="https://github.com/lorabasics/basicstation" target="_blank" rel="noopener"&#10; &gt;lorabasics/basicstation: LoRa Basics™ Station - The LoRaWAN Gateway Software&lt;/a&gt;」をインストールする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/lorabasics/basicstation.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd basicstation/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make platform=rpi variant=std&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd build-rpi-std&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd bin/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp basicstation/examples/live-s2.sm.tc/station.conf station.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat station.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ビルドはまぁまぁ時間がかかるので、コーヒーでも入れる。設定ファイルが表示できたらOK。設定ファイルの中身よくわからん。&lt;/p&gt;&#10;&lt;h2 id="aws-iot側に基地局を追加"&gt;AWS IoT側に基地局を追加&#10;&lt;/h2&gt;&lt;h3 id="gwに適用するiamのロール作成"&gt;GWに適用するIAMのロール作成&#10;&lt;/h3&gt;&lt;p&gt;以下のような手順でロールを作成する。これは後でAWS IoT上で登録したGWに適用する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;別のAWSアカウント&#10;&lt;ul&gt;&#10;&lt;li&gt;自分のアカウントID&#10;&lt;ul&gt;&#10;&lt;li&gt;何もチェックを入れずに次&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ポリシーの適用&#10;&lt;ul&gt;&#10;&lt;li&gt;AWSIoTWirelessGatewayCertManager&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;名前&#10;&lt;ul&gt;&#10;&lt;li&gt;IoTWirelessGatewayCertManagerRole&#10;&lt;ul&gt;&#10;&lt;li&gt;IAM role to allow the Configuration and Update Server to manage gateway credentials&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;作成後、ロールを選択&#10;&lt;ul&gt;&#10;&lt;li&gt;「信頼関係」タブ&lt;/li&gt;&#10;&lt;li&gt;信頼関係の編集&#10;&lt;ul&gt;&#10;&lt;li&gt;Principalを編集する &lt;pre&gt;&lt;code&gt;&amp;quot;Principal&amp;quot;: {&amp;lt;br&amp;gt; &amp;quot;Service&amp;quot;: &amp;quot;iotwireless.amazonaws.com&amp;quot;&amp;lt;br&amp;gt;},&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;という感じ。&lt;/p&gt;&#10;&lt;h3 id="aws-iot-core-for-lorawanに基地局追加"&gt;AWS IoT Core for LoRaWANに基地局追加&#10;&lt;/h3&gt;&lt;p&gt;AWS IoT Core for LoRaWANの「ワイヤレス接続」よりゲートウェイを追加する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Gateway&amp;rsquo;s EUIは、RAK7246のMACアドレスのド真ん中にfffeを挿入したもの。&#10;&lt;ul&gt;&#10;&lt;li&gt;つまり「前半6桁fffe後半6桁」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;周波数帯はAS923-1&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/04/eadc4bacef421e4ba15ec28bd37de41b.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;次の画面で、CUPSのエンドポイントとLNSのエンドポイントが表示される。&lt;/p&gt;&#10;&lt;p&gt;ここで、CUPSのエンドポイントを「cups.uri」にコピペする。cups.uriはRPiのホームディレクトリ直下（つまりstation.confと同じ）に置く。&lt;/p&gt;&#10;&lt;p&gt;次に、「サーバー信頼証明書をダウンロード」すると、cups.trustおよびlns.trustを取得できる。cups.trustをcups.uriと同じくRPiのホームディレクトリ直下に置く。&lt;/p&gt;&#10;&lt;p&gt;その次に、「ゲートウェイ証明書」で「証明書を作成」すると、.pemファイルと.keyファイルが作成できるので、これを落とす。落としたら例によってホームディレクトリ直下に置くが、このとき.pemファイルをcups.crt、.keyファイルをcups.keyにリネームする。&lt;/p&gt;&#10;&lt;p&gt;諸々ファイル取り終わったら「送信」。&lt;/p&gt;&#10;&lt;p&gt;以上より、以下のファイルがRPiのホームディレクトリ直下にできることになる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;cups.crt&lt;/li&gt;&#10;&lt;li&gt;cups.key&lt;/li&gt;&#10;&lt;li&gt;cups.trust&lt;/li&gt;&#10;&lt;li&gt;cups.uri&lt;/li&gt;&#10;&lt;li&gt;station.conf&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これで基地局の設定ファイルは揃った。&lt;/p&gt;&#10;&lt;h3 id="基地局とaws-iotの疎通を確認"&gt;基地局とAWS IoTの疎通を確認&#10;&lt;/h3&gt;&lt;p&gt;以下を実行する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RADIODEV=/dev/spidev0.0 /home/&amp;lt;ユーザ名&amp;gt;/basicstation/build-rpi-std/bin/station&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;すると、AWS IoTと接続して、LNS用の設定ファイルも自動で落としてくれる。tc.trustなどのファイルができる。&lt;/p&gt;&#10;&lt;p&gt;AWS IoTでは最後に受信したアップリンクができる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/04/29ff0860ce61df5e87d9a48a012e6fd7-1.jpg"&gt;&lt;/p&gt;&#10;&lt;h3 id="concentrator-start-failedの対応"&gt;Concentrator start failedの対応&#10;&lt;/h3&gt;&lt;p&gt;これでよければいいんだが、ダラダラ流れているログを見ていると、ERRという嫌な文字列がある。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-04-13 09:39:51.232 [HAL:ERRO] [lgw_start:742] FAIL TO CONNECT BOARD&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-04-13 09:39:51.232 [RAL:ERRO] Concentrator start failed: lgw_start&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-04-13 09:39:51.232 [RAL:ERRO] ral_config failed with status 0x08&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-04-13 09:39:51.232 [any:ERRO] Closing connection to muxs - error in s2e_onMsg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;コンセントレータの起動に失敗している、と。&lt;a class="link" href="https://githubmemory.com/repo/lorabasics/basicstation/issues/120" target="_blank" rel="noopener"&#10; &gt;Concentrator start failed: lgw_start - githubmemory&lt;/a&gt;を参考に（YouTubeのビデオの人が答えてくれている）、コンセントレータで使うピンをリセットするのだ、と、よくわからないが、以下のスクリプトを実行する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#!/bin/bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;Restarting the CE0 pin...&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CSPIN=8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;$CSPIN&amp;#34; &amp;gt; /sys/class/gpio/export&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;out&amp;#34; &amp;gt; /sys/class/gpio/gpio$CSPIN/direction&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;0&amp;#34; &amp;gt; /sys/class/gpio/gpio$CSPIN/value&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;1&amp;#34; &amp;gt; /sys/class/gpio/gpio$CSPIN/value&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;Done\n&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;Restarting the Concentrator...&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RSTPIN=17&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;$RSTPIN&amp;#34; &amp;gt; /sys/class/gpio/export&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;out&amp;#34; &amp;gt; /sys/class/gpio/gpio$RSTPIN/direction&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;1&amp;#34; &amp;gt; /sys/class/gpio/gpio$RSTPIN/value&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;0&amp;#34; &amp;gt; /sys/class/gpio/gpio$RSTPIN/value&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;Done\n&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep 2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行すると、リンク先と同じようにエラーが出る。が、その後実行すると、コンセントレータが起動するようになった。&lt;/p&gt;&#10;&lt;h3 id="uplinkの受信を確認する"&gt;Uplinkの受信を確認する&#10;&lt;/h3&gt;&lt;p&gt;何か適当に、abpでClass Aのend-deviceを起動させる。何もいじらないと周波数設定が以下っぽかったので、これにあわせてやるとよさげ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;922.0&lt;/li&gt;&#10;&lt;li&gt;922.1&lt;/li&gt;&#10;&lt;li&gt;922.2&lt;/li&gt;&#10;&lt;li&gt;922.6&lt;/li&gt;&#10;&lt;li&gt;922.8&lt;/li&gt;&#10;&lt;li&gt;923.0&lt;/li&gt;&#10;&lt;li&gt;923.2&lt;/li&gt;&#10;&lt;li&gt;923.4&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;なぜ922.1……。&lt;/p&gt;&#10;&lt;p&gt;で、ターミナルのログをつらつら眺めていると、RSSIとかが表示されるので「あ、受かっているな」とわかる。もちろん現時点ではSesstion Keyも何も登録していないので、復号はされない。&lt;/p&gt;&#10;&lt;h2 id="aws-iotにend-deviceを追加"&gt;AWS IoTにend-deviceを追加&#10;&lt;/h2&gt;&lt;p&gt;基地局の設定が完了し、AWS IoTやend-deviceとの疎通を確認できた。ので、次はend-deviceをAWS IoT側で設定してやれば、データの復号ができるはずである。&lt;/p&gt;&#10;&lt;h3 id="iamロールの作成"&gt;IAMロールの作成&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;別のAWSアカウント&#10;&lt;ul&gt;&#10;&lt;li&gt;自分のアカウントID&#10;&lt;ul&gt;&#10;&lt;li&gt;何もチェックを入れずに次&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ポリシーの作成&#10;&lt;ul&gt;&#10;&lt;li&gt;JSON&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;pre&gt;`{&lt;br&gt; "Version": "2012-10-17",&lt;br&gt; "Statement": [&lt;br&gt; {&lt;br&gt; "Effect": "Allow",&lt;br&gt; "Action": [&lt;br&gt; "iot:DescribeEndpoint",&lt;br&gt; "iot:Publish"&lt;br&gt; ],&lt;br&gt; "Resource": "*"&lt;br&gt; }&lt;br&gt; ]&lt;br&gt;}&lt;br&gt;`&lt;/pre&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;名前&#10;&lt;ul&gt;&#10;&lt;li&gt;IoTWirelessDestinationPolicy&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;作ったやつを適用&lt;/li&gt;&#10;&lt;li&gt;名前&#10;&lt;ul&gt;&#10;&lt;li&gt;IoTWirelessDestinationRole&#10;&lt;ul&gt;&#10;&lt;li&gt;IAM role to allow the Configuration and Update Server to manage gateway credentials&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;作成後、ロールを選択&#10;&lt;ul&gt;&#10;&lt;li&gt;「信頼関係」タブ&lt;/li&gt;&#10;&lt;li&gt;信頼関係の編集&#10;&lt;ul&gt;&#10;&lt;li&gt;Principalを編集する &lt;pre&gt;&lt;code&gt;&amp;quot;Principal&amp;quot;: {&amp;lt;br&amp;gt; &amp;quot;Service&amp;quot;: &amp;quot;iotwireless.amazonaws.com&amp;quot;&amp;lt;br&amp;gt;},&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;このIAM作るときが一番しんどい。&lt;/p&gt;&#10;&lt;h3 id="送信先destinationの追加"&gt;送信先Destinationの追加&#10;&lt;/h3&gt;&lt;p&gt;AWS IoT Core for LoRaWANにて、「ワイヤレス接続」の送信先を追加する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;名前&#10;&lt;ul&gt;&#10;&lt;li&gt;IoTWirelessDestination&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ルールの作成&#10;&lt;ul&gt;&#10;&lt;li&gt;名前&#10;&lt;ul&gt;&#10;&lt;li&gt;IoTWirelessRule&lt;/li&gt;&#10;&lt;li&gt;SELECT * FROM &amp;lsquo;iot&amp;rsquo;&lt;/li&gt;&#10;&lt;li&gt;AWS IoTのトピックにメッセージを再パブリッシュする&lt;/li&gt;&#10;&lt;li&gt;アクションの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;topic&#10;&lt;ul&gt;&#10;&lt;li&gt;トピック名&#10;&lt;ul&gt;&#10;&lt;li&gt;lorawan&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ロールの作成&#10;&lt;ul&gt;&#10;&lt;li&gt;IoTWirelessRepublishRule&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Role&#10;&lt;ul&gt;&#10;&lt;li&gt;IoTWirelessDestinationRole&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="デバイスプロファイルを追加"&gt;デバイスプロファイルを追加&#10;&lt;/h3&gt;&lt;p&gt;end-deviceによると思うが、今使っているものだとこれ。1.0.2でClass Aでabp。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/04/de9bb89b049c3187c3f2dfbd5e4d0c72.jpg"&gt;&lt;/p&gt;&#10;&lt;h3 id="サービスプロファイルの追加"&gt;サービスプロファイルの追加&#10;&lt;/h3&gt;&lt;p&gt;名前だけ。メタデータ追加のチェックは入れておく。&lt;/p&gt;&#10;&lt;h3 id="デバイスの追加"&gt;デバイスの追加&#10;&lt;/h3&gt;&lt;p&gt;いよいよデバイスの追加。LoRaWANのバージョン、DevEUI、Devaddr，セッションキー、プロファイルの設定をする。&lt;/p&gt;&#10;&lt;p&gt;しばらくして、アップリンクの受信時刻が更新されていたら、受信しています！お疲れ様でした！！&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2022/04/5e15ce3849b8ff0147dbca9b6a1a6b78.jpg"&gt;&lt;/p&gt;&#10;&lt;h2 id="テスト"&gt;テスト&#10;&lt;/h2&gt;&lt;p&gt;MQTTテストクライアントで、「lorawan」をサブスクライブしたら、データをリアルタイムで見られます。&lt;/p&gt;&#10;&lt;p&gt;ルールを書き換えて、SNSなりなんなりに送れば後はいつものAWSなので、煮るなり焼くなりお好きにどうぞ。&lt;/p&gt;</description></item><item><title>JIS配列キーボードのWindowsノートPCを、変換・無変換を生かしたままUS配列にする（ついでにEmacsキーバインドにも対応する）</title><link>https://hack-le.com/win-jis-us-emacs/</link><pubDate>Sun, 20 Feb 2022 15:39:31 +0900</pubDate><guid>https://hack-le.com/win-jis-us-emacs/</guid><description>&lt;p&gt;（追記）コメント欄にFakeymacsの作者さんより、Fakeymacsで日本語キーボードのUS配列対応がなされていた旨のコメントがありました。神様ありがとうございます。ありがとうございます。ありがとうございます。なので以下の記事ではなんかゴチャゴチャ書いていますが、Fakeymacsの設定一発でまるっと解決です。本当にありがとうございました。&lt;/p&gt;&#10;&lt;p&gt;US配列愛好家にとって、ノートPC選び最大の関門はキーボードと言っていい。いいと思ったやつが都合よくUS配列であることは稀だし、カスタマイズできる商品もそう多くはない。かといって個人輸入も手間や税金だのなんだの考えると億劫だ。そして、安さに釣られてJIS配列キーボードのノートPCを購入することになるのである。そう、僕だ……。&lt;/p&gt;&#10;&lt;p&gt;まぁドライバ変えたらいけるでしょくらいの軽いノリでやってみたが、それをやるとJISキーボードならではのキー、たとえば変換キーが死ぬなど起こり、やはりちょっと不便なのであった。変換キーでIMEを有効化/無効化は20億人がやっているカスタマイズであろう。&lt;/p&gt;&#10;&lt;p&gt;本記事では、変換キーなどJISキーボードならではのキーを生かしつつ、JISキーボードをUS配列として使う方法について記述する。ついでに全国民が熱望するEmacsキーバインドにも対応する。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Windows 10 Home&#10;&lt;ul&gt;&#10;&lt;li&gt;バージョン 21H2&lt;/li&gt;&#10;&lt;li&gt;OSビルド 19044.1566&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;(Emacsキーバインドまでやる場合)&#10;&lt;ul&gt;&#10;&lt;li&gt;keyhac 1.82&lt;/li&gt;&#10;&lt;li&gt;fakeymacs 20220215_01&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="レジストリエディタでドライバを変更"&gt;レジストリエディタでドライバを変更&#10;&lt;/h2&gt;&lt;p&gt;レジストリエディタで以下の設定をする。&lt;/p&gt;&#10;&lt;p&gt;コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;名前&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;データ&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LayerDriver JPN&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;kbdlk41a.dll&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OverrideKeyboardIdentifier&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PCAT_101KEY&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OverrideKeyboardSubtype&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;US配列の設定をベースにしたうえで、ドライバをkbdlk41a.dllにしている&lt;/strong&gt;。このkbdlk41a.dllはHHKBを使っている人なら見覚えがあると思うが、HHKBで推奨されるドライバである。もしかしてこれ使えるんじゃね？と思って入れてみたら、いい感じだった。&lt;/p&gt;&#10;&lt;p&gt;ちなみに識別子とサブタイプの設定をJISキーボードの値にしても、ちゃんと動く。何がどう変わるのかはよくわからない。。。バックスラッシュと¥マークが変わる？と思ったけれど、これもアプリの挙動によってまちまちだし……。&lt;/p&gt;&#10;&lt;h2 id="英かな変換"&gt;英かな変換&#10;&lt;/h2&gt;&lt;p&gt;ここで言う英かな変換とは、Mac系キーボードに代表される、&lt;strong&gt;かなキーと英数キーで全角半角をトグルする&lt;/strong&gt;ことである。多くの人がやっているカスタマイズと思う。&lt;/p&gt;&#10;&lt;p&gt;やり方ついては複数あると思うのだが、&lt;strong&gt;一番メジャーなのは変換キーと無変換キーをIMEの設定でIMEの有効化/無効化に割り当てること&lt;/strong&gt;だろう。&lt;/p&gt;&#10;&lt;p&gt;自分はGoogle日本語入力を使っているので、その設定だけ書いておく。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;モード&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;入力キー&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;コマンド&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;入力文字なし&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Henkan&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IMEを有効化&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;直接入力&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Muhenkan&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IMEを無効化&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;まぁ方法については死ぬほど出てくるので適宜調べられたい。&lt;/p&gt;&#10;&lt;p&gt;ところで、後述するEmacsキーバインドの実現では、keyhac + fakeymacsを使っているのだが、fakeymacsは初期設定だと日本語キーボードによる英かな変換まで対応している。なので、fakeymacsを利用するならこれは飛ばしていい（やっても実害はないと思う）。ただ、自分はその設定を無効化している。理由は後述する。&lt;/p&gt;&#10;&lt;h2 id="ctrlとcaps-lockのスワップ"&gt;CtrlとCAPS LOCKのスワップ&#10;&lt;/h2&gt;&lt;p&gt;これもよくあるカスタマイズと思われる。&lt;strong&gt;スワップさせるだけならば、&lt;a class="link" href="https://docs.microsoft.com/ja-jp/windows/powertoys/install" target="_blank" rel="noopener"&#10; &gt;PowerToys のインストール | Microsoft Docs&lt;/a&gt;を使うのが良い&lt;/strong&gt;と思われる。何しろ開発にMSが参加しているのだから安心感が違う。&lt;/p&gt;&#10;&lt;p&gt;が、しかし、自分は前述したように&lt;strong&gt;Emacsキーバインドの実現をしたいので、keyhacを使っており、Powertoysによるキーリマッピングがkeyhacではうまくきかないため、レジストリを直接書き換えている&lt;/strong&gt;（Powertoysはキーリマッピングで再起動を必要としないため、恐らくレジストリはいじっていないと思われる）。&lt;/p&gt;&#10;&lt;p&gt;レジストリの書き換えはレジストリエディタを使ってやるのが王道だが、&lt;strong&gt;自分はあまりレジストリの値を手動でいじりたくないので、キーマッピングのソフトウェアを利用&lt;/strong&gt;しており、昔から&lt;a class="link" href="https://forest.watch.impress.co.jp/library/software/changekey/" target="_blank" rel="noopener"&#10; &gt;「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜&lt;/a&gt;を使わせてもらっている。&lt;/p&gt;&#10;&lt;h2 id="チルダとバッククォートどうする問題"&gt;~（チルダ）と`（バッククォート）どうする問題&#10;&lt;/h2&gt;&lt;p&gt;さて、半角/全角(0x0029)は普通にUS配列ならば｀と˜のキーになる。が、今回のドライバだと半角/全角のままだ。このままだと、｀および˜が入力できないということになり、これは技術者にとってはちょいちょい困る。&lt;/p&gt;&#10;&lt;p&gt;これの対処法だが……わからん。HHKBを繋いでやってみても、｀を入力したら半角/全角になってしまう。困った。&lt;/p&gt;&#10;&lt;p&gt;仕方ないので、Google日本語入力のローマ字テーブル機能を使って、日本語入力時におけるz + [ および z + ]をそれぞれ｀および˜に割り当てることにした。非常にダサい。&lt;/p&gt;&#10;&lt;p&gt;なんとかなる方法があるなら教えてほしい……。&lt;/p&gt;&#10;&lt;h2 id="emacsキーバインドの対応"&gt;Emacsキーバインドの対応&#10;&lt;/h2&gt;&lt;p&gt;さて、ここまで書いてきたEmacsキーバインドに対応する。したい人だけすればいい。&lt;/p&gt;&#10;&lt;p&gt;これもやり方は色々あるのだが、自分は&lt;strong&gt;keyhacと有志のコンフィグをそのまま使わせてもらっている&lt;/strong&gt;。まぁこの辺の話は以前書いたとおりであり、話すと長くなるので記事だけ貼らせてもらおう。&lt;/p&gt;&#10;&lt;p&gt;/win-emacs-kana/&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;デフォルトの設定をそのまま使うと、どうやら変換・無変換キーでうまいこと英かな変換までしてくれている&lt;/strong&gt;ようだ。&lt;/p&gt;&#10;&lt;p&gt;ただ、前述のように自分はこの設定を無効化している。理由は、IMEの無効化をする時にプチフリっぽい挙動が頻発したから……なのだが、その後色々いじって、それは多分「無変換キーを押していたつもりでALTキーを押していた可能性が高い」という結論に至る😂&lt;/p&gt;&#10;&lt;p&gt;が、せっかくなので無効化する場合の設定も書いておこう。無効化させるには、config_personal.pyで下記部分をコメントアウトすればよい。&lt;/p&gt;&#10;&lt;pre&gt;`# fc.set_input_method_key += [["(29)", "(28)"]]`&lt;/pre&gt;&#13;&#10;&lt;p&gt;正直あまり意味をわかっていないのだが、ここを有効にしてGoogle日本語入力のキー設定をすると、変換・無変換キーがHenkan/Muhenkanにならなかったので、なにかしらキーリマップしているのだろうか。それがどうしてこの式になるのかはよくわからない。。。&lt;/p&gt;&#10;&lt;p&gt;ついでに、&lt;strong&gt;自分は前述のChangeKeyを使って、WinキーをCtrl右キーに割り当てている&lt;/strong&gt;。これによって、通常のショートカットも使えるというわけだ。まぁこれはWinキーを使わない人向けの設定になるが。&lt;/p&gt;&#10;&lt;p&gt;ところで、自分はASUSのASUS TAF GAMING F15を使っているのだが、なんとこのPC、デフォルトでWinキーが無効化されているうえ（FPSなどでは誤動作の原因になりがちだかららしい……）、有効化の方法が微妙にわかりづらく、若干右往左往する羽目になってしまった。&lt;/p&gt;&#10;&lt;p&gt;色々いじっていたら休日が潰れた。でも休日の使い方として適切だったのかもしれない。&lt;/p&gt;&#10;&lt;h2 id="参考記事"&gt;参考記事&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://news.mynavi.jp/techplus/article/20210609-1900755/" target="_blank" rel="noopener"&#10; &gt;Windows 10で「CapsLock」と「Ctrl」を入れ替える方法【PowerToys編】 | TECH+&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://watarisein.hatenablog.com/entry/2015/09/29/231552" target="_blank" rel="noopener"&#10; &gt;windows10 キーボードレイアウトを日本語に変更 - watariseinの日記&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>ノートPCだけでいいのかもしれない</title><link>https://hack-le.com/note-desktop/</link><pubDate>Wed, 03 Nov 2021 09:35:45 +0900</pubDate><guid>https://hack-le.com/note-desktop/</guid><description>&lt;p&gt;僕は青春をPCの進歩と共に過ごした。PCは常に僕にとって憧れだった。大学生になって初めて自分専用のPCを手に入れた時にはとても嬉しかったことを覚えている。&lt;/p&gt;&#10;&lt;p&gt;ただ、当時のノートPCはあまり高機能ではなく、いつかはデスクトップPCを手に入れようと思っていた。働き始めてようやく4コアのデスクトップマシンを手に入れた。&lt;/p&gt;&#10;&lt;p&gt;なので、僕にとってPCはやはりデスクトップでデンと構えていてほしいと思っているのだが、最近のMacBook Proなど見ると、正直もうノートだけでだいたい十分なんだろうな、という気もしている。&lt;/p&gt;&#10;&lt;h2 id="リモートワークでノートpcを使っている"&gt;リモートワークでノートPCを使っている&#10;&lt;/h2&gt;&lt;p&gt;ここしばらく、新型コロナの影響でリモートワークが続いている。最近はだいぶ収束を見せているようだが、まぁいつ第6波が来るかわからないし、たとえこなかったとしても、もはや会社がリモートワークを取りやめることはないだろう。もしそんなことをすれば、冗談抜きで退職者が続出するのではないかと思う。それくらい、リモートワークは一部には浸透している。&lt;/p&gt;&#10;&lt;p&gt;家ではもちろん会社支給のノートPCを利用している。MacBook Pro 2019で、M1以前のIntel系MBPだ。これは開発を生業にする身としては幸運だったろう。M1 Macの評価は高いが、やはりCPUがARM系ということで、いざやり始めると何かと躓くのが現状のようだ。それは2021年も終わろうとしている今も変わらない。熟れるにはあと1,2年は必要だろう。&lt;/p&gt;&#10;&lt;p&gt;MBPは良いノートPCだ。CPUも4コアだし。これは恐らく、IntelというよりはAMDのおかげだろう。Ryzenがなければ、Intelは未だに2コアだったんじゃないかとすら思う。まぁARM系がPC市場に食い込んできたことを思うと、そのうちには対応せざるを得なかっただろうが。&lt;/p&gt;&#10;&lt;p&gt;バリバリのアメリカ企業であるIntelでもこんな感じだから、なるほど競争というのは人間にとって有益なものなのだなぁと思う。まぁ30年ほど失われたらしい我が国で、その間国民の競争は熾烈を極めたことを思えば、競争すればよいというものでもないのだろうが。結局、どこに向かって走るのかが重要なのであって、明後日の方向に向かって走り出したところで目的地は遠くなるばかり……というのは今回の記事とは関係のない愚痴なのでこれくらいにしておく。。。&lt;/p&gt;&#10;&lt;h2 id="ノートpcと外部ディスプレイの組み合わせは便利"&gt;ノートPCと外部ディスプレイの組み合わせは便利&#10;&lt;/h2&gt;&lt;p&gt;とにかく、自分は普段家で会社支給のMBP 2019を便利に使っている、ということだ。もちろんノートPCだけでは画面が小さいので開発なんてやってられないが、31.5インチの外部ディスプレイに繋げているので問題ない。会社のディスプレイは23インチであるから、むしろ会社より大画面かつ解像度も大きく効率が良い。&lt;/p&gt;&#10;&lt;p&gt;で、このノートPC + 外部ディスプレイというのは中々よい。作業にはプログラミングや調べ物ような「大画面が捗るもの」と、書き物のような「あんまり大きな画面でなくて良いもの」があるが、この構成ならばどちらにも対応できる。&lt;/p&gt;&#10;&lt;p&gt;まぁキーボードがノートPCのものになってしまうというきらいはあるものの、僕はMBPのペチペチしたキーボードが嫌いではない。まぁシザーキーボードのほうが良かったのは偽らざる本音ではあるものの。今のMacノートが羨ましいところの一つだ。&lt;/p&gt;&#10;&lt;p&gt;2013年以降のMacは、指紋認証以外まるでいいところがなかった。Mac Pro 2013が見た目通りのゴミ箱だったことは、Appleもデザインの大幅な変更という形で認めざるを得なかったし、Touch Barなどはその中に放り込みたいゴミでしかなかった。&lt;/p&gt;&#10;&lt;p&gt;この迷走は、ジョナサン・アイブを始めとするデザイン部の力が強くなりすぎたためだったのではなかろうか。近年のMacが再びよくなってきた……10年代のしょうもない改悪をやめただけなんだが……のも、ジョナサン・アイブがAppleを退職し、技術とデザインの力関係が再び均衡を取り戻したからではないか、と邪推している。&lt;/p&gt;&#10;&lt;h2 id="もはやデスクトップは不要なのか"&gt;もはやデスクトップは不要なのか&#10;&lt;/h2&gt;&lt;p&gt;とまぁ、近年再びかつてのバランスの良さを取り戻し始めたMacBook Pro、エントリーモデルとして魅力的なMacBook Airを見るにつけ、また実際それで仕事ができているということを鑑みるに、もはや僕にとってデスクトップPCはオーバースペックになってしまったのか、なんてことを考えてしまう。ノートPCで十分なのか。&lt;/p&gt;&#10;&lt;p&gt;いやむしろ、先に述べたとおり、ノートPCは小さな画面と大きな画面を使い分けられるという点でデスクトップPCより優れているとさえ思う。これはノートPCのコンパクトさがあってできることで、デスクトップPCだと同じことは中々できない（強いて言えば、iPad Pro 12.9インチでSidecarをすれば近いことはできるだろうが……）。&lt;/p&gt;&#10;&lt;p&gt;そうすると、僕の手元にあるMac mini 2018の次はもはやないのかもしれない。いかにMac miniがその性能に比して安いとはいえ、当たり前だが買わないよりは高い。ノートPCはどうせ買うのだし、それで十分なのであれば、もはやデスクトップPCを買う合理的な理由はない。&lt;/p&gt;&#10;&lt;h2 id="でもきっと"&gt;でもきっと&#10;&lt;/h2&gt;&lt;p&gt;というのは理屈の話であって、結局僕はまたデスクトップPCを新調してしまう気がする。まぁオーバースペックだとしても性能は高いに越したことはないのだし、高性能なPCを使いこなせる自分でありたいという気持ちもある。&lt;/p&gt;&#10;&lt;p&gt;なんてそれらしいことを書いてみたが、恐らく、僕は単に、この動かぬ現代技術の結晶に、ただ鎮座していてほしいのだろう。これはPCと共に青春を歩んできた世代にはなんとなく気持ちがわかるという人もけっこういるんじゃないかなと思っている。そして多分、世代としては僕が最後の世代だろう。&lt;/p&gt;&#10;&lt;p&gt;PCは実用品だが、それ以上に浪漫なのだ。少なくとも、僕にとっては。&lt;/p&gt;</description></item><item><title>イーサネットについて UTPとかSTPとか光ファイバとか</title><link>https://hack-le.com/ethenet/</link><pubDate>Tue, 12 Oct 2021 11:29:24 +0900</pubDate><guid>https://hack-le.com/ethenet/</guid><description>&lt;p&gt;昨日LANケーブルの話をしていて、UTPとかSTPとか言われて「ん？なんのこと？」と思った。どうやらケーブルの種類のようだ。あと100mまではイーサネットの規格でOKとなっているとか言われて、そういやイーサネットって、どこからどこまでを定めたものなんだっけ、と気になった。ので、調べた。&lt;/p&gt;&#10;&lt;h2 id="一言でいうとieee-8023"&gt;一言でいうとIEEE 802.3&#10;&lt;/h2&gt;&lt;p&gt;まずイーサネットだが、これは仕様的にはIEEE 802.3が本体っぽい。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://grouper.ieee.org/groups/802/3/" target="_blank" rel="noopener"&#10; &gt;IEEE 802.3 ETHERNET&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;基本的には伝送速度の性能を出すための規格で、そのためにOSI参照モデルでいうところの物理層とデータリンク層をカバーしている、とざっくり理解&lt;/strong&gt;した。つまりケーブルの材質から衝突検知の仕組みはイーサネットの規格のうちだ。どうでもいいけど、OSI参照モデルの分け方はつくづく現実にピタリと合わんな。&lt;/p&gt;&#10;&lt;p&gt;以下の記事で、歴史的な経緯、過去の規格をわかりやすく示してくれている。特に一番下の表が参考になった。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itbook.info/study/p25.html" target="_blank" rel="noopener"&#10; &gt;イーサネット（Ethernet）のしくみ(1) －イーサネットの規格－ - ネットワークエンジニアを目指して&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="ケーブル媒体"&gt;ケーブル媒体&#10;&lt;/h2&gt;&lt;p&gt;昔々の10Mbps時代は同軸ケーブルを利用していたらしい。へぇ。100m云々って話が出たのは、100Base-T(Fast Ethernet)かな。ケーブルの媒体を見ると、「UTP」が出てくる。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.panduit.co.jp/column/naruhodo/1983/" target="_blank" rel="noopener"&#10; &gt;UTPケーブルとSTPケーブルの違い | LANケーブルと結束バンドのことなら｜パンドウイット&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;「UTP」は「Unshielded Twisted Pair」の略です。「UTPケーブル」とは「シールド処理が施されていない、ペアの撚りケーブル」を指します。一般的なLANケーブルはこのUTPケーブルを意味しており、家庭やオフィスなど多くの環境で使用されています。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;とのことで、なるほど。で、STPはShielded Twisted Pairである。スパニングツリープロトコルではなかった。&lt;/p&gt;&#10;&lt;p&gt;通常の家庭の用途でSTPが必要になることはまずないようだ。ただ100mくらいになるとどうなんだろね。信号が減衰すれば、それだけノイズの影響も大きくなりそうだけれど。そういえば昔100mくらいのケーブルを敷設したことを思い出したが、屋内用の癖にやけに固くて、今にして思うとあれはSTPだったのかもしらん。&lt;/p&gt;&#10;&lt;p&gt;昔といえば、LANケーブルはお手軽に入手できる撚り線のツイストケーブルとして、コネクタ部分をぶった切って別の用途に利用とかしていた気がする。なんも知らんと色々やっていたな僕。&lt;/p&gt;&#10;&lt;p&gt;ちなみにコネクタ部分の規格はRJ-45と呼ばれるが、なんで45なんだ？とふと思ったもののよくわからん。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://e-words.jp/w/RJ45.html" target="_blank" rel="noopener"&#10; &gt;RJ45（8P8C）とは - IT用語辞典 e-Words&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;8P8Cは納得できるが、慣習的にRJ-45の呼び名が残ったようだ。まぁ正直名前の意味なんてみんな考えないしね。&lt;/p&gt;&#10;&lt;p&gt;さて、UTP/STPはわかったが、それ以外にあるの？というと、ギガビットイーサ以降では光ファイバがある。表にあるSMF（シングルモードファイバ）やMMF（マルチモードファイバ）がそれが。光ファイバについては大昔調べたことがある。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://hack-le.com/opticalfiber/" &gt;データシートを読んで学ぶ、光ファイバ超入門 – 或る阿呆の記&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;仕事だと、光ファイバの通信ケーブルを使うこともたまにある。なるほど、こういう規格だったのか。&lt;/p&gt;&#10;&lt;h2 id="プロトコルもね"&gt;プロトコルもね&#10;&lt;/h2&gt;&lt;p&gt;ギガビットイーサだと、見慣れたUTPケーブルのやつが1000Base-Tで、光ファイバのやつが1000Base-Xのようだ。つまり僕らがいつも使っているのは1000Base-Tやね。&lt;/p&gt;&#10;&lt;p&gt;しかし、光ファイバだったらそりゃギガビットもでるだろうと思えるけれど、UTPで出るのか？🤔と思ったら、下記の記事で解説されていた。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.itbook.info/study/p34.html" target="_blank" rel="noopener"&#10; &gt;ギガビットイーサネット（１） - ネットワークエンジニアを目指して&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;UTPでギガビットイーサを実現するために、今まで使っていなかった線も使うだけではなく、さらに符号化技術にも踏み込んでいる。1回のパルス電圧に5つの値をもたせることによって、ギガビットの伝送速度を実現しているらしい。なるほどなるほど。なんでそんなことができるのかはわからんがなるほど。&lt;/p&gt;&#10;&lt;p&gt;まぁ実際、家庭用の通信で光ファイバとかやってらんないので、UTPでできるのはいいよね。なんだかんだいって有線もまだまだ使い所があるし、安定性を考えると有線がいいなっていう場面もあるしね。&lt;/p&gt;&#10;&lt;h2 id="異なる規格の混在"&gt;異なる規格の混在&#10;&lt;/h2&gt;&lt;p&gt;ただまぁ、そうやって技術革新を積み重ねていけば、いわゆる下位互換性がなくなることもある。Cat5eとCat6の混在はできるけどCat6の意味が薄れるよ、とかよく聞くよね。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.panduit.co.jp/column/naruhodo/6150/" target="_blank" rel="noopener"&#10; &gt;Cat6（カテゴリ6）とCat5e（カテゴリ5e）は混在しても大丈夫？使用時の注意点まとめ | LANケーブルと結束バンドのことなら｜パンドウイット&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;自分の仕事では帯域とかあまり気にしないので、とりあえずギガビット出るCat5e以上だったらいいよみたいな感じで使っていた気がする。まぁ混ぜて使えるだけすごいよね。実際、下位互換性の問題ってずっとつきまとっているんだろうなぁ、通信系は。&lt;/p&gt;&#10;&lt;p&gt;まぁ僕は別にネットワーク系ではないので、あまり深入りする必要もないと言えばないのだが、こういう雑知識は得ておくとトラブった時に使えることもあるし、なにより先人たちの苦労を垣間見れて楽しい（当人は楽しくない？😂それとも楽しい？🤔）ものである。&lt;/p&gt;</description></item><item><title>AWS SAMでDynamoDBテーブルを作成する時のテンプレート</title><link>https://hack-le.com/aws-sam-dynamodb-template/</link><pubDate>Mon, 23 Aug 2021 22:33:44 +0900</pubDate><guid>https://hack-le.com/aws-sam-dynamodb-template/</guid><description>&lt;p&gt;さくっとLambda関数でDynamoDBに何かしたい時、AWS SAMを使ってやるテンプレートのメモ。&lt;/p&gt;&#10;&lt;h2 id="テンプレートファイル"&gt;テンプレートファイル&#10;&lt;/h2&gt;&lt;p&gt;テーブル sample_table を作成し、そのテーブルをLambda関数からアクセスしたい時のテンプレートファイル。Lambda関数はCloudWatchでキックする。&lt;/p&gt;&#10;&lt;p&gt;なお、オンデマンドモードなので従量課金なので注意。このへんの設定変えるのはBillingModeだが、実際の値は後述の参考リンクにある公式サンプルを参照。&lt;/p&gt;&#10;&lt;pre&gt;`AWSTemplateFormatVersion: '2010-09-09'&#13; Transform: AWS::Serverless-2016-10-31&#13; Description: &gt;&#13; dynamodb-sample&#13; &#13; Globals:&#13; Function:&#13; Timeout: 10&#13; &#13; Resources:&#13; SampleFunc:&#13; Type: AWS::Serverless::Function&#13; Properties:&#13; CodeUri: src&#13; Handler: sample_func/app.lambda_handler&#13; Runtime: python3.8&#13; Policies:&#13; - arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess&#13; MemorySize: 256&#13; Environment:&#13; Variables:&#13; TABLE_NAME: 'sample_table'&#13; Events:&#13; SampleRuleDev:&#13; Type: Schedule&#13; Properties:&#13; Schedule: rate(5 minutes)&#13; DeadLetterQueue:&#13; Type: SNS&#13; TargetArn: arn:aws:sns:ap-northeast-1:xxxx:SampleTopic&#13; &#13; SampleTable:&#13; Type: AWS::DynamoDB::Table&#13; Properties: &#13; TableName: sample_table&#13; AttributeDefinitions: &#13; - AttributeName: sample_pk&#13; AttributeType: S&#13; - AttributeName: sample_sk&#13; AttributeType: N&#13; KeySchema: &#13; - AttributeName: sample_pk&#13; KeyType: HASH&#13; - AttributeName: sample_sk&#13; KeyType: RANGE&#13; BillingMode: PAY_PER_REQUEST&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="参考リンク"&gt;参考リンク&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;公式のサンプル&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/kinesis-tutorial-spec.html" target="_blank" rel="noopener"&#10; &gt;DynamoDB アプリケーションの AWS SAM テンプレート - AWS Lambda&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;リファレンス&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html" target="_blank" rel="noopener"&#10; &gt;AWS::DynamoDB::Table - AWS CloudFormation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;イベントソースで使う時&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-property-function-dynamodb.html" target="_blank" rel="noopener"&#10; &gt;DynamoDB - AWS Serverless Application Model&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>for文の中でawaitして返り値使う直列処理を Promise.all() で並列処理</title><link>https://hack-le.com/for-await-promise-all/</link><pubDate>Sun, 25 Jul 2021 12:08:30 +0900</pubDate><guid>https://hack-le.com/for-await-promise-all/</guid><description>&lt;p&gt;何か日本語の不自由なタイトルだが、実際僕の思った疑問をそのまま文章にするとこんな感じだった、というか実際こういう間抜けな文章で検索していたので、このままいくことにする。&lt;/p&gt;&#10;&lt;p&gt;JavaScriptでfor文の中でawaitして直列でやっている処理を、Promise.all()を使って並列にやりたい、ということだ。const answers = Promise.all( &amp;hellip;. ) と書きたい、という話。さらっと検索すると返り値を使うサンプル。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;論よりコードということで、以下のようなfor文があったとする。&lt;/p&gt;&#10;&lt;pre&gt;`function triangle (base, height) {&#13; return new Promise(resolve =&gt; {&#13; setTimeout(() =&gt; {&#13; const area = base * height / 2;&#13; console.log(area);&#13; resolve(area);&#13; }, 3000);&#13; }); &#13; }&#13; &#13; (async () =&gt; {&#13; let areas = []&#13; for (const i of [1, 2, 3, 4, 5]) {&#13; const area = await triangle(i, i);&#13; areas.push(area);&#13; }&#13; console.log(areas);&#13; })();&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;底辺と高さが1, 2, 3, 4, 5の三角形について面積を求めて、最後に出力している。直列でやっているため、3秒ずつ結果が順番に表示され、15秒後にすべての答えが表示される。&lt;/p&gt;&#10;&lt;p&gt;これらの処理は独立であるので、並列で書けるはずだ。&lt;/p&gt;&#10;&lt;h2 id="並列化"&gt;並列化&#10;&lt;/h2&gt;&lt;p&gt;これを並列化すると、以下のようになる。&lt;/p&gt;&#10;&lt;pre&gt;`(async () =&gt; {&#13; const areas = await Promise.all([1, 2, 3, 4, 5].map(async (element) =&gt; {&#13; return await triangle(element, element);&#13; }));&#13; console.log(areas);&#13; })();&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;実行してみるとわかるが、3秒ですべての処理の答えが出るので、並列で処理してその結果を利用できることがわかる。&lt;/p&gt;&#10;&lt;p&gt;２つの処理を同時に走らせてみると、以下のように出力される。&lt;/p&gt;&#10;&lt;pre&gt;`0.5&#13; 0.5&#13; 2&#13; 4.5&#13; 8&#13; 12.5&#13; [ 0.5, 2, 4.5, 8, 12.5 ]&#13; 2&#13; 4.5&#13; 8&#13; 12.5&#13; [ 0.5, 2, 4.5, 8, 12.5 ]&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;まず並列処理の回答がすべて表示されて、その後逐次直列の処理の結果が出ていることがわかる。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://tomokazu-kozuma.com/how-to-use-async-await-promise-all-effectively-in-loop-processing-of-for-statement/" target="_blank" rel="noopener"&#10; &gt;for文、forEach文のループ処理でasync/await、Promise.allを効果的に使う方法 - ブロックチェーンエンジニアとして生きる&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>macOS をクリーンインストールしてからやること</title><link>https://hack-le.com/macos-big-sur/</link><pubDate>Sat, 17 Jul 2021 18:12:05 +0900</pubDate><guid>https://hack-le.com/macos-big-sur/</guid><description>&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-sonoma-14-6-1/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Macで最初に設定していること macOS 14 Sonoma版&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-sonoma-14-6-1/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_15938_1787181621.webp" alt="Macで最初に設定していること macOS 14 Sonoma版" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;2023/10/29更新&lt;/li&gt;&#10;&lt;li&gt;M2 Pro Mac mini (12コア)&lt;/li&gt;&#10;&lt;li&gt;macOS Sonoma 14.1&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="クリーンインストール後"&gt;クリーンインストール後&#10;&lt;/h2&gt;&lt;p&gt;クリーンインストール後は、各種アプリケーションのインストールだ。昔はこの手の作業もそれなりに楽しかったが、今となってはただひたすら面倒臭い。&lt;/p&gt;&#10;&lt;h3 id="環境設定"&gt;環境設定&#10;&lt;/h3&gt;&lt;p&gt;一通りの環境を設定する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Finder設定&lt;/li&gt;&#10;&lt;li&gt;インターネットアカウントの設定&lt;/li&gt;&#10;&lt;li&gt;ネットワーク&#10;&lt;ul&gt;&#10;&lt;li&gt;ファイル共有を有効化&#10;&lt;ul&gt;&#10;&lt;li&gt;Windowsファイル共有をONにする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;SMBサーバにするのでIPアドレスを固定にする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;キーボードとトラックパッド&#10;&lt;ul&gt;&#10;&lt;li&gt;キーボードでキーリピート速める&lt;/li&gt;&#10;&lt;li&gt;F1、F2などのキーを標準のファンクションキーとして使用&lt;/li&gt;&#10;&lt;li&gt;キーボード→ユーザー辞書でスマート引用符とスマートダッシュのチェックを外す&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.piyo.tech/posts/2014-01-06-205101/" target="_blank" rel="noopener"&#10; &gt;Macで引用符を入力すると勝手に変換されるのをやめたい - ぴよロ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;トラックパッドでタップでクリック、ポインタ速度速める&lt;/li&gt;&#10;&lt;li&gt;アクセシビリティからトラックパッドの3本指ドラッグ解禁&#10;&lt;ul&gt;&#10;&lt;li&gt;何故これがデフォルトじゃないんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;セキュリティ&#10;&lt;ul&gt;&#10;&lt;li&gt;ファイアウォールを「入」にする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;「このMacについて」→「ストレージ」→「管理」で「ゴミ箱を自動的に空にする」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="app-storeからインストール"&gt;App Storeからインストール&#10;&lt;/h3&gt;&lt;p&gt;App StoreにあるものはApp Storeから。アプリ、だいぶ軽くなったよね。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;無償&#10;&lt;ul&gt;&#10;&lt;li&gt;Xcode&lt;/li&gt;&#10;&lt;li&gt;iWork(Pages, Numbers, Keynote)&lt;/li&gt;&#10;&lt;li&gt;GarageBand&lt;/li&gt;&#10;&lt;li&gt;CotEditor&lt;/li&gt;&#10;&lt;li&gt;LanScan&#10;&lt;ul&gt;&#10;&lt;li&gt;LAN内のデバイスをスキャンできるGUIソフト。地味に便利&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Simple Comic&#10;&lt;ul&gt;&#10;&lt;li&gt;昔使ってたやつとはまた別の模様。Macは漫画ビューア不毛地帯なのだが、とりあえず使ってみる。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;有償&#10;&lt;ul&gt;&#10;&lt;li&gt;Pixelmator Pro&lt;/li&gt;&#10;&lt;li&gt;PicImage&lt;/li&gt;&#10;&lt;li&gt;Readkit&#10;&lt;ul&gt;&#10;&lt;li&gt;RSSリーダーとして。色々不具合あるけど使っている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;PopClip&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="webから"&gt;Webから&#10;&lt;/h3&gt;&lt;p&gt;brew caskよりこちらのほうがなんだかんだで安定していると考えている。一時期みんなApp Storeに移行しようとしていた気がするけれど、結局自前に戻ってきたね。App Storeの自由のなさがPCでは受け入れられなかったのかな。あとPCユーザーはサイトからDLするの慣れているしね。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ブラウザ&#10;&lt;ul&gt;&#10;&lt;li&gt;Google Chrome&#10;&lt;ul&gt;&#10;&lt;li&gt;Google依存度下げたいんだけど、ブラウザは結局Chromeが一番出来が良い、、、&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;開発&#10;&lt;ul&gt;&#10;&lt;li&gt;Docker&lt;/li&gt;&#10;&lt;li&gt;Visual Studio Code&#10;&lt;ul&gt;&#10;&lt;li&gt;OpenAPI (Swagger) Editor&lt;/li&gt;&#10;&lt;li&gt;Prettier&lt;/li&gt;&#10;&lt;li&gt;GitHub Pull Requests and Issues&lt;/li&gt;&#10;&lt;li&gt;Git Graph&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;volta&#10;&lt;ul&gt;&#10;&lt;li&gt;node.jsのバージョン管理、色々見てきたけどこれがいいかなって&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Android Studio&lt;/li&gt;&#10;&lt;li&gt;Postman&lt;/li&gt;&#10;&lt;li&gt;Raspberry Pi Imager&lt;/li&gt;&#10;&lt;li&gt;AWS CLI&#10;&lt;ul&gt;&#10;&lt;li&gt;いつのまにかbrewじゃなくてバイナリで入れろスタイルになってた&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;クラウド&#10;&lt;ul&gt;&#10;&lt;li&gt;Dropbox&#10;&lt;ul&gt;&#10;&lt;li&gt;オンラインストレージで一番信用している。いろいろな意味で&lt;/li&gt;&#10;&lt;li&gt;NASに移行中&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ツール&#10;&lt;ul&gt;&#10;&lt;li&gt;ATOK&lt;/li&gt;&#10;&lt;li&gt;Calibre&lt;/li&gt;&#10;&lt;li&gt;Simple Comic&#10;&lt;ul&gt;&#10;&lt;li&gt;さすがにOSの対応が……でも一応残しておく。&lt;/li&gt;&#10;&lt;li&gt;検索すると変なサイト出るけど本家は「&lt;a class="link" href="http://dancingtortoise.com/simplecomic/" target="_blank" rel="noopener"&#10; &gt;Dancing Tortoise | Simple Comic&lt;/a&gt;」GitHubにソースもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;BetterTouchTool&#10;&lt;ul&gt;&#10;&lt;li&gt;2019/01/03 永続ライセンス買った。Gmailのメールなくしたかと思って焦った&#10;&lt;ul&gt;&#10;&lt;li&gt;2018/04/20にも買ってた。二回買ってて草&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Clipy&#10;&lt;ul&gt;&#10;&lt;li&gt;スニペットは便利なんだけれど、これを入れるとコピペの挙動が若干不安定になるから入れるか悩ましい。。。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Karabiner-Elements&#10;&lt;ul&gt;&#10;&lt;li&gt;これがないとMac使えない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ForkLift 3&#10;&lt;ul&gt;&#10;&lt;li&gt;正直3になって安定性が落ちたと思う。特に外部SSDを使った時によく落ちる。。。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Obsidian&#10;&lt;ul&gt;&#10;&lt;li&gt;Evernoteの代替え。Notionよりこっちが僕にはしっくりきた。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="homebrewから"&gt;Homebrewから&#10;&lt;/h3&gt;&lt;p&gt;まぁ必要になったら適宜入れたら良いのだが。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;li&gt;cliclick&lt;/li&gt;&#10;&lt;li&gt;curl&lt;/li&gt;&#10;&lt;li&gt;direnv&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;evernote2md&#10;&lt;ul&gt;&#10;&lt;li&gt;まぁもう使わないか&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ffmpeg&lt;/li&gt;&#10;&lt;li&gt;fish&lt;/li&gt;&#10;&lt;li&gt;gcc&lt;/li&gt;&#10;&lt;li&gt;git&lt;/li&gt;&#10;&lt;li&gt;go&lt;/li&gt;&#10;&lt;li&gt;gnuplot&lt;/li&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;mecab&lt;/li&gt;&#10;&lt;li&gt;mecab-ipadic&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md#mecab-ipadic-neologd-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E6%9B%B4%E6%96%B0" target="_blank" rel="noopener"&#10; &gt;mecab-ipadic-neologd/README.ja.md at master · neologd/mecab-ipadic-neologd&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;octave&lt;/li&gt;&#10;&lt;li&gt;pandoc&lt;/li&gt;&#10;&lt;li&gt;ruby&lt;/li&gt;&#10;&lt;li&gt;smartmontools&lt;/li&gt;&#10;&lt;li&gt;unzip&lt;/li&gt;&#10;&lt;li&gt;wget&lt;/li&gt;&#10;&lt;li&gt;youtube-dl&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="python3"&gt;Python3&#10;&lt;/h3&gt;&lt;p&gt;venvで普段使い用の環境を切ってから。pipをアップグレードしつつ。「&lt;a class="link" href="https://hack-le.com/pip/" &gt;pythonのpipで入れているもの – 或る阿呆の記&lt;/a&gt;」を参考に。&lt;/p&gt;&#10;&lt;p&gt;まぁ必要になったら適宜入れるでいいんじゃないかな……。&lt;/p&gt;&#10;&lt;h3 id="細かな設定"&gt;細かな設定&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;NASの設定（「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;li&gt;sshの設定&lt;/li&gt;&#10;&lt;li&gt;fishの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://zenn.dev/stag_buster/articles/14fe49409c8f7d" target="_blank" rel="noopener"&#10; &gt;Mac で fish shell 環境を10分で構築する&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;pecoを使うために入れていると言っても過言ではない&lt;/li&gt;&#10;&lt;li&gt;fishのパスは &lt;code&gt;which fish&lt;/code&gt;で確認しておく&#10;&lt;ul&gt;&#10;&lt;li&gt;今回は &lt;code&gt;/opt/homebrew/bin/fish&lt;/code&gt;だった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;自分用スクリプトのbinディレクトリにパスをとおす（以下の設定ファイル）&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://zenn.dev/estra/articles/zenn-fish-add-path-final-answer" target="_blank" rel="noopener"&#10; &gt;fishで「パスを通す」ための最終解答&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ターミナルの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;テキスト&#10;&lt;ul&gt;&#10;&lt;li&gt;monaco 12pt.&lt;/li&gt;&#10;&lt;li&gt;背景黒&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ウィンドウ&#10;&lt;ul&gt;&#10;&lt;li&gt;90x50&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;シェル&#10;&lt;ul&gt;&#10;&lt;li&gt;終了時にウィンドウを閉じる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;自分用binディレクトリのソフトリンクとパス設定&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;インストールコマンド（peco入れてるだけ）&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install peco&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fisher install oh-my-fish/plugin-peco&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;fishの設定 ( ~/.config/fish/config.fish )&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; status is-interactive&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Commands to run in interactive sessions can go here&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# peco&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; fish_user_key_bindings&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;bind&lt;/span&gt; &lt;span class="se"&gt;\c&lt;/span&gt;r peco_select_history&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# homebrew&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fish_add_path /opt/homebrew/bin&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>firebase.auth().onAuthStateChanged() で返ってくるプロパティ</title><link>https://hack-le.com/firebase-auth-onauthstatechanged-property/</link><pubDate>Sun, 27 Jun 2021 02:42:17 +0900</pubDate><guid>https://hack-le.com/firebase-auth-onauthstatechanged-property/</guid><description>&lt;p&gt;firebase.auth().onAuthStateChanged(async (user) =&amp;gt; { &amp;hellip; というような関数で、userに入るオブジェクトのプロパティのメモ。&lt;/p&gt;&#10;&lt;h2 id="メモ"&gt;メモ&#10;&lt;/h2&gt;&lt;pre&gt;`{&#13; &#9;"uid": "xxxx",&#13; &#9;"displayName": "tama",&#13; &#9;"photoURL": "xxxx",&#13; &#9;"email": null,&#13; &#9;"emailVerified": false,&#13; &#9;"phoneNumber": null,&#13; &#9;"isAnonymous": false,&#13; &#9;"tenantId": null,&#13; &#9;"providerData": [{&#13; &#9;&#9;"uid": "xxxx",&#13; &#9;&#9;"displayName": "tama",&#13; &#9;&#9;"photoURL": "xxxx",&#13; &#9;&#9;"email": null,&#13; &#9;&#9;"phoneNumber": null,&#13; &#9;&#9;"providerId": "twitter.com"&#13; &#9;}],&#13; &#9;"apiKey": "xxxx",&#13; &#9;"appName": "[DEFAULT]",&#13; &#9;"authDomain": "xxxx",&#13; &#9;"stsTokenManager": {&#13; &#9;&#9;"apiKey": "xxxx",&#13; &#9;&#9;"refreshToken": "xxxx",&#13; &#9;&#9;"accessToken": "xxxx",&#13; &#9;&#9;"expirationTime": 1624729052000&#13; &#9;},&#13; &#9;"redirectEventId": null,&#13; &#9;"lastLoginAt": "1624708866706",&#13; &#9;"createdAt": "1608453776269",&#13; &#9;"multiFactor": {&#13; &#9;&#9;"enrolledFactors": []&#13; &#9;}&#13; }`&lt;/pre&gt;&#13;&#10;&lt;p&gt;だった。&lt;/p&gt;</description></item><item><title>10年ぶりにFirefoxを3ヶ月ほどメインにした所感</title><link>https://hack-le.com/firefox/</link><pubDate>Sat, 19 Jun 2021 18:37:50 +0900</pubDate><guid>https://hack-le.com/firefox/</guid><description>&lt;p&gt;ここ10年ほど、僕はずっとGoogle Chromeを使っていた。正直Chrome最強だと思う。Chrome最強だと思うんだが、どういうわけなのか、僕のMacではやたらとCPUを使ってくれて、ただでさえ爆熱のMac mini 2018を目玉焼きでも焼けそうなほどに熱してくれる。MacBook Pro 2019でも同様だ。Windowsのマシンではそういうことはなかったので、Macとの相性問題もあったりするんだろうか。それとも何かエクステンションが悪さしているのか。&lt;/p&gt;&#10;&lt;h2 id="firefoxを使い始める"&gt;Firefoxを使い始める&#10;&lt;/h2&gt;&lt;p&gt;わからないが、もうずっと爆熱が続いて全然なおらないので、ついに僕はChromeをメインにすることをやめて、Firefoxを使い始めた。それが今年の3月のことだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://twitter.com/tamasan774/status/1370614699146969090?s=20" target="_blank" rel="noopener"&#10; &gt;https://twitter.com/tamasan774/status/1370614699146969090?s=20&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Firefoxをメインにするのは、10年ぶりくらいだろうか。僕の中ではFirefoxは今なお3.5だったのだが、もうバージョン90になっている。おかげで軽くタイムスリップしたような気分になれた。&lt;/p&gt;&#10;&lt;p&gt;さて、久方ぶりのFirefoxだが、けっこうすんなりと移行することができた。まぁもともと使っていたしね。&lt;/p&gt;&#10;&lt;p&gt;以下に、Firefox移行後の所感について書く。&lt;/p&gt;&#10;&lt;h2 id="爆熱は微妙におさまった"&gt;爆熱は微妙におさまった&#10;&lt;/h2&gt;&lt;p&gt;まずChromeからの移行のきっかけとなった爆熱についてだが、これは微妙におさまった。微妙にというのは、Firefoxも立ち上げてしばらくすると、やはりCPUをぶん回し始める現象が起きたからだ。&lt;/p&gt;&#10;&lt;p&gt;しかし、ウィンドウを閉じるとおさまるので、プロセスを終了しないと暴走がおさまらなかったChromeに比べるとマシだ。また、Chromeは起動してすぐくらいの勢いで暴走を初めていたが、Firefoxについては長時間起動していると、という感じなので、まぁいいかなという感じ。&lt;/p&gt;&#10;&lt;h2 id="ブックマークパスワードの同期"&gt;ブックマーク、パスワードの同期&#10;&lt;/h2&gt;&lt;p&gt;次に同期の問題。&lt;/p&gt;&#10;&lt;p&gt;まず、パスワード同期については僕はBitwardenを利用しており、BitwardenはFirefox用のエクステンションも提供しているから、その点は問題ない。&lt;/p&gt;&#10;&lt;p&gt;ただ、Android用のFirefoxブラウザにおいては、パスワード欄をタップした時のBitwarden連携が不安定で、出たり出なかったり、出たとしても一瞬で消えたり、ということが頻発してちょっと苛々する。iOS用Firefoxではそういう問題は起きない（まぁキーボードにパスワードマネージャの立ち上げがくっついてる形なので）。&lt;/p&gt;&#10;&lt;p&gt;ブックマーク同期については、昔はそれ用のソフトを使っていた（具体的には確かXmarksだ、もうサービス終了している）が、今はブラウザの同期機能を利用しているため、Firefox Syncの世話になった。これは普通に使えたのだが、職場ではproxy経由の時に問題があるのか、使えなかった。うーん？まぁいいけど。&lt;/p&gt;&#10;&lt;p&gt;それにしても、今ってクロスブラウザを前提にしたブックマーク同期アプリってあるのかな。ここしばらくChrome一強時代が続いているから、ちょっと厳しいよね。&lt;/p&gt;&#10;&lt;h2 id="パフォーマンス"&gt;パフォーマンス&#10;&lt;/h2&gt;&lt;p&gt;パフォーマンスについては、正直体感ではあまり差がない。その昔は明らかにChromeのほうが快適で、まぁそのためにChromeは天下を取ったとも言えるのだが、今はそんなこともないようだ。&lt;/p&gt;&#10;&lt;h2 id="画面の崩れ"&gt;画面の崩れ&#10;&lt;/h2&gt;&lt;p&gt;ほとんどない。今どきのモダンブラウザで表示が問題になることはないようだ。IEを使っている人は税金払ってほしい。&lt;/p&gt;&#10;&lt;p&gt;あ、そういえば職場のクソアプリが、Chromeだといつもレイアウトが崩れていたんだけれど、Firefoxだと崩れなくなった。&lt;/p&gt;&#10;&lt;h2 id="エクステンション"&gt;エクステンション&#10;&lt;/h2&gt;&lt;p&gt;PCでWebブラウジングする魅力は、なんといってもフルブラウザ、というか豊富なエクステンションだろう。Amazonの商品の金額遷移を表示するKeepa、タイトルとURLをコピーするシンプルながら使い勝手の良いCreateLink、複数リンクを同時に開くLinkclump、Google検索からゴミサイトを排除するゴシップブロッカーなど、愛用しているエクステンションはいくつかある。&lt;/p&gt;&#10;&lt;p&gt;で、調べてみるとだいたいFirefoxに対応しているか、あるいはFirefoxで使える代替えとなるエクステンションがあったので、これも問題がなかった。ただもちろん、人によっては諦めなければならない機能はあるだろう。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、大昔野良エクステンションが跋扈していた時代に比べると、随分と環境が整備されたのだなぁと思う。&lt;/p&gt;&#10;&lt;h2 id="スマホの検索窓など画面下部に"&gt;スマホの検索窓など画面下部に&#10;&lt;/h2&gt;&lt;p&gt;細かいのだが、いいなぁと思ったのはスマホのFirefoxだと検索窓を画面下部にすることができるところだった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2021/06/2021-06-19-18.19.33.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;これは楽天Bigのスクリーンショットだ。楽天Bigはクソデカイので、検索するには少しばかり親指をダルシムのごとく伸ばす必要があるのだが、画面下部にあればホビット族の血を受け継ぐ僕も楽々検索することが可能だ。これは地味ながら嬉しいユーザー体験だった。&lt;/p&gt;&#10;&lt;p&gt;既に開いているタブ一覧なども、Chromeがやたらと親指の限界を試すのに比べて、Firefoxは軽く伸ばせば届くところがタップ範囲で、非常に好ましく思えた。&lt;/p&gt;&#10;&lt;h2 id="タブをウィンドウから移動させた時の挙動が不満"&gt;タブをウィンドウから移動させた時の挙動が不満&#10;&lt;/h2&gt;&lt;p&gt;これまた地味だが、PCでタブを別ウィンドウに移動させた時、期待する動作はマウスポインタの場所あたりに新たなウィンドウを開いてタブが移動することだが、どうもそうならない。これがMac版故なのかどうかはわからないが、あまり直感的ではない。まぁ大した問題ではないのだが、ちょっとイラッとする。&lt;/p&gt;&#10;&lt;h2 id="マルチユーザーだとちょっと使いづらかった"&gt;マルチユーザーだとちょっと使いづらかった&#10;&lt;/h2&gt;&lt;p&gt;Firefoxでマルチユーザーっぽく使おうと思ったら、ユーザーごとにprofileを作成し、都度切り替えていくことになると思うが、どうも使いづらい。&lt;/p&gt;&#10;&lt;p&gt;たとえば他アプリからURLをクリックしてFirefoxに飛ぶ時、Chromeだと最後に開いていたユーザーのウィンドウで開くが、Firefoxだと必ずデフォルトのprofileで開かれてしまう。&lt;/p&gt;&#10;&lt;p&gt;また、Firefoxを起動した時に最初に開かれるのがデフォルトユーザーではなくなることもちょくちょくあり、まぁOS再起動などすればなおるのだが、どうにもprofile周りは挙動が若干不安定に思えた。&lt;/p&gt;&#10;&lt;p&gt;そもそもabout:profilesを毎度入力するのがイケてないように思うが、他にいいやり方があるんだろうか……。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、少し特殊な使い方だとは思う。&lt;/p&gt;&#10;&lt;h2 id="総評"&gt;総評&#10;&lt;/h2&gt;&lt;p&gt;ということで、Firefoxを3ヶ月ほどメインにした結果、十分に使えるものだということがわかった。&lt;/p&gt;&#10;&lt;p&gt;わかったが、しかしFirefoxでなければならない積極的な理由も特にはなく、恐らく多くの人にとってFirefoxを使う一番のモチベーションは「Chromeを使いたくない」になってしまうのではないだろうか。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、それは案外バカにできない理由かもしれない。僕のChrome熱暴走問題は恐らくおまかんなのだが、おまかんと言われても僕の環境で起きている以上僕にとっては大きな問題であって、ブラウザを変えるだけで解決できるならそうしてしまいたいし、事象が異なるだけでブラウザを変えたい気持ちになっている人は、何も宗教上の理由がなくてもけっこういるであろう。&lt;/p&gt;&#10;&lt;p&gt;まぁもちろんChrome以外というだけなら他にも選択肢があるんだが、「結局WebKitじゃねぇか」みたいなものが多い中で、Firefoxの「Geckoですけど？」はひときわ輝いてみえる（個人の感想です）し、昔からクロスOSでやってきている信頼感もある。&lt;/p&gt;&#10;&lt;p&gt;ということで、Firefox悪くないんじゃないの、と言いながら、実はこの記事はBrave上で書いてます。結局WebKitじゃねぇか。いやBlinkです。使えればなんでもいいよ。はい。&lt;/p&gt;</description></item><item><title>EMC村の動画でフェライトコアの原理を勉強した</title><link>https://hack-le.com/emc-28/</link><pubDate>Wed, 16 Jun 2021 23:35:39 +0900</pubDate><guid>https://hack-le.com/emc-28/</guid><description>&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=aoXgvftqj70" target="_blank" rel="noopener"&#10; &gt;【ノイズ対策】知らなきゃ損する！フェライトコアの使い方 #28 - YouTube&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;このチャンネル本当に面白いし有り難いし10年前に見たかった。めっちゃオススメ。今回見たのはフェライトコアについての解説。あー10年前に見たかった。&lt;/p&gt;&#10;&lt;h2 id="フェライトコアの思い出"&gt;フェライトコアの思い出&#10;&lt;/h2&gt;&lt;p&gt;フェライトコアがノイズを減らすのは知っていた。&lt;/p&gt;&#10;&lt;p&gt;というのも、フェライトコアに思い出があって、大昔レーダーやっていた時に、基板設計の人が失敗したらしくめちゃくちゃノイズだした結果、とにかくつけまくったという記憶があるのだ。いや、この作業自体はどうでもよくて、覚えているのは設計の人が品管にめちゃくちゃ詰められていて可哀想だったことだ。その品管の人はいつもピリピリしていて、かつ設計＞品管のヒエラルキーが工場内ではあるためか、ここぞとばかりに責めまくっていたように見えた。なんだかなぁと若かりし僕は思ったものだ。&lt;/p&gt;&#10;&lt;p&gt;ノイズどうすんねんと詰められた設計が持ってきたのがフェライトコアだった。自分の設計ミスなのでと、申し訳なさそうな設計の人と一緒にフェライトコアをあちこちにつけた記憶。僕はフェライトコアがなんなのか知らなかったが、とにかくその設計の人が可哀想だったので、うまくいってほしいなと思いながらフェライトコアをつける作業をしていた。&lt;/p&gt;&#10;&lt;p&gt;まぁ結果的にノイズはよかろうという程度に減ったのだが、フェライトコアがなぜノイズ対策になるのかは知らなかった。&lt;/p&gt;&#10;&lt;h2 id="フェライトコアがノイズ対策になる理由"&gt;フェライトコアがノイズ対策になる理由&#10;&lt;/h2&gt;&lt;p&gt;フェライトコアは磁性体で、ノイズ電流によって発生した磁束を取り込んで熱に変換するのだが、特に高周波に対して抵抗の性質を持つことで、ノイズ対策になる、ということだ。普通の抵抗はすべての周波数に対してきいてしまうが、フェライトコアは一種のローパスとしてはたらくらしい。なるほどね。&lt;/p&gt;&#10;&lt;h2 id="フェライトコアの利用で考慮すること"&gt;フェライトコアの利用で考慮すること&#10;&lt;/h2&gt;&lt;p&gt;まぁもはや僕が使うことはないだろうと思いつつ、考慮すること。&lt;/p&gt;&#10;&lt;h3 id="低周波用と高周波用がある"&gt;低周波用と高周波用がある&#10;&lt;/h3&gt;&lt;p&gt;だいたい1MHzを境に、低周波用と高周波用があるとのことだ。1MHz……だいたい高周波用だったのかなぁ。&lt;/p&gt;&#10;&lt;h3 id="巻数"&gt;巻数&#10;&lt;/h3&gt;&lt;p&gt;巻数が多いほどノイズ対策になる、とのことだ。まぁそれはなんとなくわかる。数式的には、インピーダンスは巻数の自乗に比例する、とのこと。ただ100MHz超えの高周波帯では、増やしすぎると高周波のインピーダンスが下がってしまうこともあるらしい。その原理も教えてもらったけどよくわからかった😂&lt;/p&gt;&#10;&lt;h3 id="ノイズの伝搬モード"&gt;ノイズの伝搬モード&#10;&lt;/h3&gt;&lt;p&gt;ノイズの伝搬モードにはノーマルモードとコモンモードがある。ノーマルモードは二本の線で行って帰ってくるようなノイズなので、それぞれの線にフェライトコアを取り付ける。一方コモンモードは同じ方向のノイズなので、一緒に取り付ける。なるほど。伝搬モードによってフェライトコアの取り付け方が違うので、伝搬モードを確認しておく、ということだ。&lt;/p&gt;&#10;&lt;h2 id="ようやく原理を知ったのだった"&gt;ようやく原理を知ったのだった&#10;&lt;/h2&gt;&lt;p&gt;今はもう全然違う仕事をしているので、もう僕がフェライトコアを直接使うことはないだろうが、なんとなく思い出して見てしまった。まさかフェライトコアを知ってから10年近くたった今になってその原理を知ることになるとは。当時この動画を見たかったものである。&lt;/p&gt;</description></item><item><title>LPIC303合格体験記と勉強法。勉強はPing-tオンリー</title><link>https://hack-le.com/lpic303-pass/</link><pubDate>Sun, 11 Apr 2021 17:46:08 +0900</pubDate><guid>https://hack-le.com/lpic303-pass/</guid><description>&lt;p&gt;クラウド全盛の世の中、Linuxを業務で使うことはあまりない、というより使わないようにしているという方が正しいですが、LPIC Level 2の有効期限が切れかかっていて、まぁせっかくなのでLPICの上位資格の一つでも取っておこうかと、303を受験しました。セキュリティ系なら、得られた知見も多少活かせるところがあるかもしれないし。&lt;/p&gt;&#10;&lt;p&gt;勉強期間は半年、合計30時間ほど、勉強方法は漢のPing-tオンリーです。&lt;/p&gt;&#10;&lt;h2 id="スコアと難易度"&gt;スコアと難易度&#10;&lt;/h2&gt;&lt;p&gt;まずスコアですが、&lt;strong&gt;580&lt;/strong&gt;でした（なお範囲は200 - 800）。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Cryptography&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;64%&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Host Security&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;75%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Access Control&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;90%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Network Security&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;70%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;正答率は44/60 = 73%。問題を解き終わった後、各問題について自信のほどで0-5点にして計算してみたところ、だいたい7割といったところでしたから、だいたい自己採点どおりの結果なのかなと思います。&lt;/p&gt;&#10;&lt;p&gt;これまでの試験はだいたい9割くらいの自信があったので（過去のやつ→/category/certificate/lpic/）、やはり&lt;strong&gt;レベル3にもなると難しくなるなーという感触は正直ありました&lt;/strong&gt;。最初の1問目がいきなりわからなかったのでだいぶ焦った。&lt;/p&gt;&#10;&lt;p&gt;この後で詳細を書きますが、Ping-tだけで勉強してきたのですけれど、「あっ、この問題、Ping-tで見たことない！」みたい逆進研ゼミ現象けっこうありました。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、合格ラインには到達できるということですね。&lt;/p&gt;&#10;&lt;h2 id="勉強方法勉強時間"&gt;勉強方法、勉強時間&#10;&lt;/h2&gt;&lt;p&gt;前述したとおり、勉強方法はPing-tオンリーです。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;https://ping-t.com/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Ping-tしか使っていません。今までのLPICの試験もすべてPing-t1本でやってきました。&lt;strong&gt;もうPing-tの回し者かってくらいPing-t推しです&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;勉強時間もこれまでとたいして変わりません。今回余計な語呂合わせ戦法なども使ったので無駄に30時間くらいかかったような気がしますが、多分真面目にやると20-30時間くらいなのはどの試験も同じだと思います。まぁやり方にもよると思いますが。&lt;/p&gt;&#10;&lt;p&gt;自分の場合は、Web問題集を2週して、コマ問をすべて解いて、あとはひたすら模擬試験です。僕はコマ問大好きですけど、しなくていいんじゃないってコメントもいただいたこともあります。読んで覚えるタイプの人ならそうかもです。昔学校でもそのへん勉強の仕方で意見が分かれたことを思い出しました。しかし僕は書いて覚えるタイプなので、コマ問で一気に記憶が定着する感があります。あとコマンドのオプションについては語呂合わせ使ってアホみたいに覚えました（記事書くかも）。結果、模擬試験については10分程度で90%以上安定、という状態に。&lt;/p&gt;&#10;&lt;p&gt;それでもスコアは580。うーん。Ping-tで全然やってないところがけっこう出ました。auditctlはエライ突っ込んだ問題出されて知るかって思った記憶が。Ping-tに問題投稿コーナーとかあったら送ってもよかったんですけど。いやさすがに大ぴらにやったらダメか。一応守秘義務みたいなのあるし。なんだよそれって思うけど。やっぱりああいうの、覆面して問題調査しに行ってるんですかねー。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;Ping-tだけだと解けない問題はたしかにけっこうあるんですけれど、合格ラインには到達できる、できた、という感じ&lt;/strong&gt;です。なので、謎の教材に大金払う必要ないです。Ping-tを信じなさい。&lt;/p&gt;&#10;&lt;p&gt;あ、DNSSECのところは、正直Ping-tの解説だとよくわからなかったのですが、以下の資料の19ページをよく読んで理解できました。良い資料ですね。ありがとうございます。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/t9/t9-Funato.pdf" target="_blank" rel="noopener"&#10; &gt;https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/t9/t9-Funato.pdf&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;DNSSECのところ、ZSKだのKSKだの頭こんがらがってくるので、是非参考にしてください。&lt;/p&gt;&#10;&lt;h2 id="勉強内容は役に立ちそうか"&gt;勉強内容は役に立ちそうか&#10;&lt;/h2&gt;&lt;p&gt;さて、LPIC303の勉強は果たして役に立つのだろうか、という点ですが。&lt;/p&gt;&#10;&lt;p&gt;どうなんですかね。自分の場合、LPIC Level2の有効期限が切れそうで、なんだかもったいなくて受けたという感じで、別に必要があったわけではありませんでした。LPIC Level 2も、果たして資格を取得した意味があったのかと言われるとよくわからない。あったのだろうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一生使うことがないだろうコマンドのオプションや設定ファイルのパラメータを覚えるのは控えめに言って虚無でした&lt;/strong&gt;。というか、たとえ使うにしてもググるよそれ、って思う。問題にしやすいのはわかるんだけれど。まぁそれはLevel 1でrpmやaptのオプション死ぬほど覚えさせられた時にも思いましたが。二度と使わねーわ。&lt;strong&gt;manするわ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ただまぁ、&lt;strong&gt;通り一遍のシステムについては知ることができたのは良かった&lt;/strong&gt;と思います。RADIUSとか知らなかったけれど、会社でしれっと会話に出てきた時には100年前から知ってましたみたいな顔して会話してました。この時は「あっ、その言葉、Ping-tでやったやつだ！」と進研ゼミ現象が起きました。&lt;/p&gt;&#10;&lt;p&gt;あー、あとX.509証明書のフィールドを死ぬほど覚えさせられたので、抵抗感はだいぶ薄れたと思います。証明書の話はWebでもIoTでも何かと出てきますからね。DNSSECの仕組みを頑張って理解できたのもよかった。&lt;/p&gt;&#10;&lt;p&gt;まぁ&lt;strong&gt;正直この時間使ってAWSの資格でも取ったほうが直接の役にはたったと思うし、今業務で差し迫って必要でないのに取る意味ある？と言われたら微妙だと思う&lt;/strong&gt;んですが、Level 2の資格が切れそうなら、取得してもいいんじゃないですかね。そのうちに役立つ日が来るかも知れないし。受験代もいつの間にか安くなっていたし。会社から補助金出るならいいですが、自腹で受ける人もいるでしょう。僕も零細で働いていた時には必死だったので、自腹で受けていました。。。あの頃こそ補助してほしかったなぁ……当時僕の年収は200万でした。まぁ世の中ままならないものです。&lt;/p&gt;&#10;&lt;p&gt;Linuxのサーバーをゴリゴリ使うことは多分ない、というかそれをしなくていいように立ち回っているというほうが正しいですが（サーバレス万歳）、まぁでも、だからこそ資格取得くらいはしてみてもいいかもしれないですね。有効期限が切れそうになったら、今度は304でも取ろうかしら。仮想化も通り一遍の知識はつけておいてもまぁいいかなと思えますし。&lt;/p&gt;&#10;&lt;p&gt;まぁ、たまには試験を受けるのも、程よい緊張があってよいですね。AWSの試験も受けようかな。&lt;/p&gt;&#10;&lt;p&gt;（参考）&lt;a class="link" href="https://qnqtree.com/tree/K9uopdCX5qDLO2OSSxCk" target="_blank" rel="noopener"&#10; &gt;LPIC303受かったよ | QnQ&lt;/a&gt;&lt;/p&gt;</description></item><item><title>LPIC 303の勉強で出てきた略語</title><link>https://hack-le.com/lpic-303%E3%81%AE%E5%8B%89%E5%BC%B7%E3%81%A7%E5%87%BA%E3%81%A6%E3%81%8D%E3%81%9F%E7%95%A5%E8%AA%9E/</link><pubDate>Sun, 21 Mar 2021 19:47:18 +0900</pubDate><guid>https://hack-le.com/lpic-303%E3%81%AE%E5%8B%89%E5%BC%B7%E3%81%A7%E5%87%BA%E3%81%A6%E3%81%8D%E3%81%9F%E7%95%A5%E8%AA%9E/</guid><description>&lt;p&gt;いまさらLinuxでサーバーを頑張ってやることはまずないのだが、せっかくとった資格が失効してしまうのもなんとなく悔しいので、まぁ知識としてもっておいて損はないかというレベルで、LPIC 303の試験勉強をしている。&lt;/p&gt;&#10;&lt;p&gt;で、色々な略語が出てくるので、そのメモ。欧米人ほんとAcronym大好きだよね。&lt;/p&gt;&#10;&lt;h2 id="325-暗号化"&gt;325. 暗号化&#10;&lt;/h2&gt;&lt;h3 id="3251-x509証明書と公開鍵基盤-3252-x509証明書"&gt;325.1 X.509証明書と公開鍵基盤, 325.2 X509証明書&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;略語&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;フル&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;日本語&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;備考&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ASN.1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Abstract Syntax Notation One&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Certification Authority&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;認証局&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CRL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Certificate Revocation List&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;証明書失効リスト&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CSR&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Certificate Signing Request&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;証明書署名要求&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DER&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Distinguished Encoding Rules&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ASN.1規格のバイナリ&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DES&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Data Encryption Standard&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;暗号化方式&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HSTS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTTP Strict Transport Security&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IDEA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the International Data Encryption Algorithm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;暗号化方式&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IETF&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Internet Engineering Task Force&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ITU&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;International Telecommunication Union&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;国際通信連合&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OCSP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Online Certificate Status Protocol&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PEM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Privacy-Enhanced Mail&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DER + Base64&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PKCS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Public-Key Cryptography Standards&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;by RSA Security&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RSA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rivest, Shamir, Adleman&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;三人の頭文字。公開鍵暗号化&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SNI&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Server Name Indication&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SSL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Secure Sockets Layer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Netscape&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TLS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Transport Layer Security&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IETF&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="3253-暗号化ファイルシステム"&gt;325.3 暗号化ファイルシステム&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;dm-crypt&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;device-mapper crypt&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;FUSE&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Filesystem in Userspace&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;EncFSなど&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LUKS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Linux Unified Key Setup&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ラックス&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="3254-dnsと暗号化"&gt;325.4 DNSと暗号化&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;AD&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Authentication Data bit&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;DNSSECの認証可否&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DANE&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DNS-based Authentication of Named Entities&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;delv&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DNS Lookup and Validation utility&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;BIND9.10以降&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DO&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DNSSEC OK bit&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DNSKEY&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DNS Key Record&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Delegation Signer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;EDNS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Extension mechanism for DNS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;拡張プロトコル&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPSec&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IP Security Architecture for Internet Protocol&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;KSK&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Key Signing Key&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NSEC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Next-Secure Record&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rndc&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Remote Name server Daemon Control&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;BIND9以降&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RRSIG&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Resource Record Digital Signature&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TLS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Transport Layer Security&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TLSA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TLS Association&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;_25._tcp.host&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TSIG&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Transaction Signature&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ZSK&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Zone Signing Key&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="326-ホストセキュリティ"&gt;326 ホストセキュリティ&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;AD&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Active Directory&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Authentication Server&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Kerberos, 認証サーバ&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ASLR&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Address Space Layout Landomization&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ID/Identity, Policy, Audit&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;KDC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Key Distribution Center&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Kerberos&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NSS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Name Service Switch&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ST&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Service Ticket&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Kerberos&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TGS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Ticket Granting Server&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Kerberos, チケット発行サーバ&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="327-アクセス制御"&gt;327 アクセス制御&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;CIFS&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Common Internet FileSystem&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DAC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Discretionary Access Control&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;任意アクセス制御&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LIPKEY&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low Infrastracture Public Key mechanism&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MAC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mandatory Access Control&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;強制アクセス制御&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MLS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Multi Level Security&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;情報の機密性&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NFS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Network File System&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NTLM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NT LAN Manager authentication&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RBAC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Role Based Access Control&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SMACK&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Simplified Mandatory Access Control Kernel&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SMB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Server Message Block&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SPKM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Simple Public Key Mechanism&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TE&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Type Enforcement&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="328-ネットワークセキュリティ"&gt;328 ネットワークセキュリティ&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;AAA&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Authentication, Authorization, Accounting&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;認証、認可、ユーザ情報の収集&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AH&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Authentication Header&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ARP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Address Resolution Protocol&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPアドレス→MACアドレス&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DMZ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DeMilitarized Zone&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;非武装地帯&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ESP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Encapsulated Security Payload&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IDS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Intrusion Detection System&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;侵入検知システム&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IKE&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Internet Key Exchange&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPsec&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;security architecture for Internet Protocol&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;L2TP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Layer 2 Tunnel Protocol&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NASL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nessus Attack Scripting Language&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NDP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Neighbor Discovery Protocol&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ARPのIPv6的な&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NIC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Network Interface Card&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NVTs&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Network Vulnerability Tests&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;脆弱性テスト&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OpenVAS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Open Vulnerability Assessment System&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;QoS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Quality of Service&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;通信品質&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Router Advertisement&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ルータ広告&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RADIUS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Remote Authentication Dial In User Service&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RRDtool&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Round Robin Database tool&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SAD&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Security Association Database&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;セキュアな単方向コネクションDB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SNMP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Simple Network Management Protocol&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SPD&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Security Policy Database&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SPI&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Security Policy Index&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TOS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Type of Service&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.lpi.org/ja/our-certifications/exam-303-objectives" target="_blank" rel="noopener"&#10; &gt;303 試験範囲| Linux Professional Institute&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LinuC/LPIC/Linux Essentials/HTML5/OSS-DB/オラクルマスター/ITパスポート/ITILファンデーション総合学習サイト&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ping-tはLPICの勉強なら本当にオススメ。テキスト買うよりこっちのほうがいいと思う。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="問題形式"&gt;問題形式&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;ASN.1&lt;/li&gt;&#10;&lt;li&gt;CA&lt;/li&gt;&#10;&lt;li&gt;CRL&lt;/li&gt;&#10;&lt;li&gt;CSR&lt;/li&gt;&#10;&lt;li&gt;DER&lt;/li&gt;&#10;&lt;li&gt;DES&lt;/li&gt;&#10;&lt;li&gt;HSTS&lt;/li&gt;&#10;&lt;li&gt;IDEA&lt;/li&gt;&#10;&lt;li&gt;IETF&lt;/li&gt;&#10;&lt;li&gt;ITU&lt;/li&gt;&#10;&lt;li&gt;OCSP&lt;/li&gt;&#10;&lt;li&gt;PEM&lt;/li&gt;&#10;&lt;li&gt;PKCS&lt;/li&gt;&#10;&lt;li&gt;RSA&lt;/li&gt;&#10;&lt;li&gt;SNI&lt;/li&gt;&#10;&lt;li&gt;SSL&lt;/li&gt;&#10;&lt;li&gt;TLS&lt;/li&gt;&#10;&lt;li&gt;dm-crypt&lt;/li&gt;&#10;&lt;li&gt;FUSE&lt;/li&gt;&#10;&lt;li&gt;LUKS&lt;/li&gt;&#10;&lt;li&gt;AD&lt;/li&gt;&#10;&lt;li&gt;DANE&lt;/li&gt;&#10;&lt;li&gt;delv&lt;/li&gt;&#10;&lt;li&gt;DO&lt;/li&gt;&#10;&lt;li&gt;DNSKEY&lt;/li&gt;&#10;&lt;li&gt;DS&lt;/li&gt;&#10;&lt;li&gt;EDNS&lt;/li&gt;&#10;&lt;li&gt;IPSec&lt;/li&gt;&#10;&lt;li&gt;KSK&lt;/li&gt;&#10;&lt;li&gt;NSEC&lt;/li&gt;&#10;&lt;li&gt;rndc&lt;/li&gt;&#10;&lt;li&gt;RRSIG&lt;/li&gt;&#10;&lt;li&gt;TLS&lt;/li&gt;&#10;&lt;li&gt;TLSA&lt;/li&gt;&#10;&lt;li&gt;TSIG&lt;/li&gt;&#10;&lt;li&gt;ZSK&lt;/li&gt;&#10;&lt;li&gt;AD&lt;/li&gt;&#10;&lt;li&gt;AS&lt;/li&gt;&#10;&lt;li&gt;ASLR&lt;/li&gt;&#10;&lt;li&gt;IPA&lt;/li&gt;&#10;&lt;li&gt;KDC&lt;/li&gt;&#10;&lt;li&gt;NSS&lt;/li&gt;&#10;&lt;li&gt;ST&lt;/li&gt;&#10;&lt;li&gt;TGS&lt;/li&gt;&#10;&lt;li&gt;CIFS&lt;/li&gt;&#10;&lt;li&gt;DAC&lt;/li&gt;&#10;&lt;li&gt;LIPKEY&lt;/li&gt;&#10;&lt;li&gt;MAC&lt;/li&gt;&#10;&lt;li&gt;MLS&lt;/li&gt;&#10;&lt;li&gt;NFS&lt;/li&gt;&#10;&lt;li&gt;NTLM&lt;/li&gt;&#10;&lt;li&gt;RBAC&lt;/li&gt;&#10;&lt;li&gt;SMACK&lt;/li&gt;&#10;&lt;li&gt;SMB&lt;/li&gt;&#10;&lt;li&gt;SPKM&lt;/li&gt;&#10;&lt;li&gt;TE&lt;/li&gt;&#10;&lt;li&gt;AAA&lt;/li&gt;&#10;&lt;li&gt;AH&lt;/li&gt;&#10;&lt;li&gt;ARP&lt;/li&gt;&#10;&lt;li&gt;DMZ&lt;/li&gt;&#10;&lt;li&gt;ESP&lt;/li&gt;&#10;&lt;li&gt;IDS&lt;/li&gt;&#10;&lt;li&gt;IKE&lt;/li&gt;&#10;&lt;li&gt;IPsec&lt;/li&gt;&#10;&lt;li&gt;L2TP&lt;/li&gt;&#10;&lt;li&gt;NASL&lt;/li&gt;&#10;&lt;li&gt;NDP&lt;/li&gt;&#10;&lt;li&gt;NIC&lt;/li&gt;&#10;&lt;li&gt;NVTs&lt;/li&gt;&#10;&lt;li&gt;OpenVAS&lt;/li&gt;&#10;&lt;li&gt;QoS&lt;/li&gt;&#10;&lt;li&gt;RA&lt;/li&gt;&#10;&lt;li&gt;RADIUS&lt;/li&gt;&#10;&lt;li&gt;RRDtool&lt;/li&gt;&#10;&lt;li&gt;SAD&lt;/li&gt;&#10;&lt;li&gt;SNMP&lt;/li&gt;&#10;&lt;li&gt;SPD&lt;/li&gt;&#10;&lt;li&gt;SPI&lt;/li&gt;&#10;&lt;li&gt;TOS&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="問題形式解答"&gt;問題形式（解答）&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;Abstract Syntax Notation One&lt;/li&gt;&#10;&lt;li&gt;Certification Authority, 認証局&lt;/li&gt;&#10;&lt;li&gt;Certificate Revolution List, 証明書失効リスト&lt;/li&gt;&#10;&lt;li&gt;Certificate Signing Request, 証明書署名要求&lt;/li&gt;&#10;&lt;li&gt;Distinguished Encoding Rules&lt;/li&gt;&#10;&lt;li&gt;Data Encryption Standard&lt;/li&gt;&#10;&lt;li&gt;HTTP Strict Transport Security&lt;/li&gt;&#10;&lt;li&gt;the International Data Encryption&lt;/li&gt;&#10;&lt;li&gt;Internet Engineering Task Force&lt;/li&gt;&#10;&lt;li&gt;International Telecommunication Union, 国際通信連合&lt;/li&gt;&#10;&lt;li&gt;Online Cerficate Status Protocol&lt;/li&gt;&#10;&lt;li&gt;Privacy-Enhanced Mail&lt;/li&gt;&#10;&lt;li&gt;Public-Key Cryptography Standards&lt;/li&gt;&#10;&lt;li&gt;Rivest, Shamir, Adleman&lt;/li&gt;&#10;&lt;li&gt;Server Name Indication&lt;/li&gt;&#10;&lt;li&gt;Secure Sockets Layer&lt;/li&gt;&#10;&lt;li&gt;Transport Layer Security&lt;/li&gt;&#10;&lt;li&gt;device-mapper crypt&lt;/li&gt;&#10;&lt;li&gt;Filesystem in Userspace&lt;/li&gt;&#10;&lt;li&gt;Linux Unified Key Setup&lt;/li&gt;&#10;&lt;li&gt;Authentication Data bit&lt;/li&gt;&#10;&lt;li&gt;DNS-based Authentication of Named Entities&lt;/li&gt;&#10;&lt;li&gt;DNS Lookup and Validation utility&lt;/li&gt;&#10;&lt;li&gt;DNSSEC OK bit&lt;/li&gt;&#10;&lt;li&gt;DNS Key Record&lt;/li&gt;&#10;&lt;li&gt;Delegation Signer&lt;/li&gt;&#10;&lt;li&gt;Extension mechanism for DNS&lt;/li&gt;&#10;&lt;li&gt;IP Security Architecture for Internet Protocol&lt;/li&gt;&#10;&lt;li&gt;Key Signing Key&lt;/li&gt;&#10;&lt;li&gt;Next-Secure Record&lt;/li&gt;&#10;&lt;li&gt;Remote Name server Daemon Control&lt;/li&gt;&#10;&lt;li&gt;Resource Record Digital Signature&lt;/li&gt;&#10;&lt;li&gt;Transport Layer Security&lt;/li&gt;&#10;&lt;li&gt;TLS Association&lt;/li&gt;&#10;&lt;li&gt;Transaction Signature&lt;/li&gt;&#10;&lt;li&gt;Zone Signing Key&lt;/li&gt;&#10;&lt;li&gt;Active Directory&lt;/li&gt;&#10;&lt;li&gt;Authentication Server&lt;/li&gt;&#10;&lt;li&gt;Address Space Layout Landomization&lt;/li&gt;&#10;&lt;li&gt;ID/Identity, Policy, Audit&lt;/li&gt;&#10;&lt;li&gt;Key Distribution Center&lt;/li&gt;&#10;&lt;li&gt;Name Service Switch&lt;/li&gt;&#10;&lt;li&gt;Serfice Ticket&lt;/li&gt;&#10;&lt;li&gt;Ticket Granting Server&lt;/li&gt;&#10;&lt;li&gt;Common Internet FileSystem&lt;/li&gt;&#10;&lt;li&gt;Discretionary Access Control, 任意アクセス制御&lt;/li&gt;&#10;&lt;li&gt;Low Infrastracture Public Key mechanism&lt;/li&gt;&#10;&lt;li&gt;Mandatory Access Control, 強制アクセス制御&lt;/li&gt;&#10;&lt;li&gt;Multi Level Security&lt;/li&gt;&#10;&lt;li&gt;Network File System&lt;/li&gt;&#10;&lt;li&gt;NT LAN Manager authentication&lt;/li&gt;&#10;&lt;li&gt;Role Based Access Control&lt;/li&gt;&#10;&lt;li&gt;Simplified Mandatory Access Control Kernel&lt;/li&gt;&#10;&lt;li&gt;Server Message Block&lt;/li&gt;&#10;&lt;li&gt;Simple Public Key Mechanism&lt;/li&gt;&#10;&lt;li&gt;Type Enforcement&lt;/li&gt;&#10;&lt;li&gt;Authentication, Authorization, Accounting&lt;/li&gt;&#10;&lt;li&gt;Authentication Header&lt;/li&gt;&#10;&lt;li&gt;Address Resulution Protocol&lt;/li&gt;&#10;&lt;li&gt;DeMilitarized Zone&lt;/li&gt;&#10;&lt;li&gt;Encapsulated Security Payload&lt;/li&gt;&#10;&lt;li&gt;Intrusion Detection System&lt;/li&gt;&#10;&lt;li&gt;Internet Key Exchange&lt;/li&gt;&#10;&lt;li&gt;security architecture for Internet Protocol&lt;/li&gt;&#10;&lt;li&gt;Layer 2 Tunnel Protocol&lt;/li&gt;&#10;&lt;li&gt;Nessus Attack Scripting Language&lt;/li&gt;&#10;&lt;li&gt;Neighbor Discovery Protocol&lt;/li&gt;&#10;&lt;li&gt;Network INterface Card&lt;/li&gt;&#10;&lt;li&gt;Network Vulnerability Tests&lt;/li&gt;&#10;&lt;li&gt;Open Vulnerability Assessment System&lt;/li&gt;&#10;&lt;li&gt;Quality of Service&lt;/li&gt;&#10;&lt;li&gt;Router Advertisement&lt;/li&gt;&#10;&lt;li&gt;Remote Authentication Dial In User Service&lt;/li&gt;&#10;&lt;li&gt;Round Robin Database tool&lt;/li&gt;&#10;&lt;li&gt;Security Association Database&lt;/li&gt;&#10;&lt;li&gt;Simple Network Management Protocol&lt;/li&gt;&#10;&lt;li&gt;Security Policy Database&lt;/li&gt;&#10;&lt;li&gt;Security Policy Index&lt;/li&gt;&#10;&lt;li&gt;Type of Service&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>AWS Lambdaのロギングを考える</title><link>https://hack-le.com/aws-lambda-logging/</link><pubDate>Mon, 25 Jan 2021 09:13:40 +0900</pubDate><guid>https://hack-le.com/aws-lambda-logging/</guid><description>&lt;p&gt;（追記）AWS Lambda PowertoolsのLogger使え&lt;/p&gt;&#10;&lt;p&gt;ロギングをどうするかで困っていた。AWS Lambdaでは、プリント出力したものがCloudWatchに保存されてとても便利なのだが、考えもなしにとりあえずポンポン入れていたところ、確かに情報はあるので追えないことはないんだが、地道に時間にあたりをつけて検索するなど、非常に泥臭い作業が要求され、なにかとつらかった。&lt;/p&gt;&#10;&lt;p&gt;APIのコール回数など集計したいという要件も出てきて、重い腰をあげてロギングについて頑張って考えました、という話。&lt;/p&gt;&#10;&lt;h2 id="ユースケースを考える"&gt;ユースケースを考える&#10;&lt;/h2&gt;&lt;p&gt;AWS Lambdaで、何も考えずにとにかく必要そうなのをログ出力しているが、フォーマットも何も整っていないため、ほしい情報を探し当てるのも一苦労だ。&lt;/p&gt;&#10;&lt;p&gt;ログをjson形式に構造化させてやると、&lt;strong&gt;CloudWatch Insightsでクエリを投げて検索・集計することができる&lt;/strong&gt;。ということで、ユースケースに対応できるように、ログ出力について考えたい。&lt;/p&gt;&#10;&lt;p&gt;ユースケースとして以下を考慮。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ERRORだけ抜き出す&lt;/li&gt;&#10;&lt;li&gt;ユーザー別に叩いたAPIについて集計する&lt;/li&gt;&#10;&lt;li&gt;詳細な検索ができるように、ハンドラに渡された情報は全部取っておく&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;前提条件として、node.jsを使っていたりPythonを使っていたりする。そのため、&lt;strong&gt;特定の言語のライブラリに依存した解決はあまり好ましくない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="結果"&gt;結果&#10;&lt;/h2&gt;&lt;p&gt;以上の条件を考えて色々調査し、必要なことを考えた結果、以下のような感じになった。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;msg&amp;#34;: string // フィルタリングできるような固有のメッセージ&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;funcName&amp;#34;: string // 実行関数&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;dateTime&amp;#34;: string // ログ出力した時刻 RFC3339 に則る(jsならDateオブジェクトをconsole出力すればよい)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;level&amp;#34;: INFO | WARN | ERROR,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;event&amp;#34;: object // Lambda関数のeventパラメータをそのまま&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;input&amp;#34;: object // 必要なやつ&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;levelでログレベルを設定。inputとmsgでフィルタリング、集計を容易に。困ったらeventとfuncNameで頑張って追えるようにしておいた。また、独自フォーマットなので言語やライブラリに依存しない。&lt;/p&gt;&#10;&lt;p&gt;このフォーマットはほとんど「&lt;a class="link" href="https://www.scalyr.com/blog/aws-lambda-logging-best-practices/" target="_blank" rel="noopener"&#10; &gt;AWS Lambda Logging: An Intro How-To and Best Practices | Scalyr&lt;/a&gt;」を参考にしています。&lt;/p&gt;&#10;&lt;p&gt;以下のような使い方を想定（node.js）。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function logging(msg, funcName, event, level, inputValues) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; const logMsg = {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; msg: msg,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; funcName: funcName,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dateTime: new Date(),&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; level: level,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; event: event,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; input: inputValues&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (level === &amp;#34;INFO&amp;#34;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; console.info(JSON.stringify(logMsg))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; } else if (level === &amp;#34;WARN&amp;#34;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; console.warn(JSON.stringify(logMsg))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; } else if (level === &amp;#34;ERROR&amp;#34;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; console.error(JSON.stringify(logMsg))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; } else {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; console.log(JSON.stringify(logMsg))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exports.handler = async (event, context, callback) =&amp;gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; logging(&amp;#34;CallApi&amp;#34;, &amp;#34;functions/users/app.handler&amp;#34;, event, &amp;#34;INFO&amp;#34;, {userId: &amp;#34;testUser&amp;#34;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;で、CloudWatch Insightsを使うとたとえば以下のようなクエリを投げて集計できるわけだ。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;filter msg like /CallApi/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| stats count(input.userId) by input.userId&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;運用を通じてブラッシュアップしていきたい。&lt;/p&gt;&#10;&lt;h2 id="参考リンク"&gt;参考リンク&#10;&lt;/h2&gt;&lt;p&gt;この記事は、開発中のWebサービスQnQで草稿を作りました。よかったら見ていってね（宣伝）。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://qnqtree.com/tree/dB3cNjWRbkAeTZsvcpJs" target="_blank" rel="noopener"&#10; &gt;Lambda関数のロギング設計を考える | QnQ&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;その他、参考にさせていただいた記事です。ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.scalyr.com/blog/aws-lambda-logging-best-practices/" target="_blank" rel="noopener"&#10; &gt;AWS Lambda Logging: An Intro How-To and Best Practices | Scalyr&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;一番参考にした記事&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://recipe.kc-cloud.jp/archives/9968" target="_blank" rel="noopener"&#10; &gt;Lambdaの本番業務利用を考える① – ログ出力とエラーハンドリング – ナレコムAWSレシピ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/nodejs-logging.html" target="_blank" rel="noopener"&#10; &gt;Node.js の AWS Lambda 関数ログ作成 - AWS Lambda&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/tonluqclml/items/780370a4575781eb19df" target="_blank" rel="noopener"&#10; &gt;AWS Lambda/PythonでJSON形式でログを出すベストプラクティス - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://scrapbox.io/tasuwo/Node.js_%E3%81%AE_Lambda_%E3%83%AD%E3%82%B0%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6" target="_blank" rel="noopener"&#10; &gt;Node.js の Lambda ログのフォーマットについて - tasuwo&amp;rsquo;s notes&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://medium.com/@jyotti/node-bunyan%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Faws-lambda%E3%81%A7%E3%81%AE%E3%81%AE%E3%83%AD%E3%82%AE%E3%83%B3%E3%82%B0%E5%87%A6%E7%90%86-cd45faa2b261" target="_blank" rel="noopener"&#10; &gt;node-bunyanを使ったAWS Lambdaでのロギング処理 | by Atsushi Nakajo | Medium&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://dev.classmethod.jp/articles/how-to-cloudwatch-logs-insights/" target="_blank" rel="noopener"&#10; &gt;CloudWatch Logs Insightsでログを調査する前に読む記事 | Developers.IO&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Touch Bar廃止は本当なら嬉しすぎる朗報</title><link>https://hack-le.com/touch-bar/</link><pubDate>Sat, 16 Jan 2021 07:45:07 +0900</pubDate><guid>https://hack-le.com/touch-bar/</guid><description>&lt;p&gt;こんなニュースがありました。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-341121/" target="_blank" rel="noopener"&#10; &gt;14/16インチMacBook Pro、Touch Bar廃止、MagSafe採用か - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;それってつまり昔のMacBook Airでは？と思いつつあまりにも正しすぎる選択に感涙を禁じえません。ここ10年ばかりのAppleがもたらした画期的らしいインタフェースのほとんどは、自分にはまったく響きませんでした。無理矢理使ってみたけど、やっぱり使えないという評価です。指紋認証搭載とUSB Type-C全振りは素晴らしい判断だったと思いますが。無接点充電は可もなく不可もなし。&lt;/p&gt;&#10;&lt;h2 id="やはり必要なかった"&gt;やはり必要なかった&#10;&lt;/h2&gt;&lt;p&gt;正直M1プロセッサ搭載よりも興奮しているかもしれない自分に苦笑。&lt;/p&gt;&#10;&lt;p&gt;ここ10年ばかり、MacとiPhoneの新しいインタフェースには、賛同できないものが多かった。指紋認証を廃止して顔認証になったのは間違えた進化だと思いましたし、3D Touchなんてもう誰も覚えていません（と言いつつアプリのアンインストールの時に使っていたりしますが）。極めつけはMacのTouch Barで、操作性を悪くし消費電力と価格を釣り上げるだけの無用の長物でした。&lt;/p&gt;&#10;&lt;p&gt;これがためにMacBook Airがほしかったのですが、まぁ買い替えのタイミングでMacBook Airはその時まだ2コアのものしかなく、仕方なくMacBook Pro 2019を買い、まぁあるからには使おうと頑張っているものの、音声のスライドバーくらいしか使っていません。&lt;/p&gt;&#10;&lt;p&gt;中にはBTTを入れて何かとカスタマイズしている人もいるようですが、もはや自分はそういうカスタマイズを楽しめません。それは年齢もあるでしょうが、頑張ってカスタマイズすればするほど、OSのアップデートについていきづらくなったという過去故、というのもあります。結局、標準に合わせて少しずつ自分のスタイルを調整するのが一番割が良い。&lt;/p&gt;&#10;&lt;p&gt;そもそも、普段はデスクトップPCを使っています。Touch Barが使えるのはノートだけ。環境によって使えたり使えなかったりというのでは、不便で仕方がない。&lt;/p&gt;&#10;&lt;p&gt;せめてTouch Bar無しモデルを再販してくれないかと願っていましたが、廃止とはね。いや、まだ噂の段階ではあるんですが、まぁこういう噂はだいたい当たるので、嬉しいでしかないですね。iPad Air 4は指紋認証ですし（顔認証はコロナ禍でその脆弱性？が露呈されましたね）、MacもiOS端末も良い方向に向かっていますね。&lt;/p&gt;&#10;&lt;h2 id="実用品ですから"&gt;実用品ですから&#10;&lt;/h2&gt;&lt;p&gt;3D TouchもTouch Barも、デザイナーの暴走だったのではないかと思います。奇抜なアイディアよりも実用性を重視しているように見えるのは、ジョナサン・アイブの退職も影響しているんですかね？&lt;/p&gt;&#10;&lt;p&gt;M1 Macも評判よろしいですし、この分なら、次のMac買い替えは安心してできそうです。もっとも、デスクトップはMac mini 2018、ノートはMacBook Pro 2019なので、だいぶ先になりそうですが。&lt;/p&gt;</description></item><item><title>AWS Lambdaをデプロイした時のダウンタイム</title><link>https://hack-le.com/aws-lambda-downtime/</link><pubDate>Tue, 12 Jan 2021 14:08:20 +0900</pubDate><guid>https://hack-le.com/aws-lambda-downtime/</guid><description>&lt;p&gt;AWS Lambdaをデプロイした時、ダウンタイムは発生するのかについて。&lt;/p&gt;&#10;&lt;p&gt;直接答えとなる記述をドキュメントで見つけることができていないのだが、AWSフォーラムの開発者による回答を見るに、新旧両方のバージョンが動作する時間はあるものの、ダウンタイム自体は理屈のうえではなさそう。&lt;/p&gt;&#10;&lt;h2 id="公式フォーラムの回答"&gt;公式フォーラムの回答&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://forums.aws.amazon.com/thread.jspa?threadID=270926&amp;amp;tstart=0" target="_blank" rel="noopener"&#10; &gt;AWS Developer Forums: What happens to a running lambda during &amp;hellip;&lt;/a&gt;」の回答による。そのまま引用する。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;In-flight invocations complete, without code changes or interruption, using the version of the function that was in place at the time they began. You &lt;strong&gt;can&lt;/strong&gt; potentially have a function change for asynchronous invocations that experience errors or throttles, because a retry will potentially allow a new version of the function to be hit on the next attempt. While we do not abort in-flight invocations, we will aggressively eliminate copies of the old code; this typically happens within a minute of a function being updated. That means that for up to about 5-6 minutes (the max duration of a function, plus a little bit) you can experience either/both versions in use; after that, you should see only the new(ly deployed) version executing.&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://forums.aws.amazon.com/thread.jspa?threadID=270926&amp;amp;tstart=0" target="_blank" rel="noopener"&#10; &gt;AWS Developer Forums: What happens to a running lambda during &amp;hellip;&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;つまりデプロイ中の挙動としては以下のような感じ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;古いバージョンが動作したら、完了までそのバージョンが動作する&#10;&lt;ul&gt;&#10;&lt;li&gt;ただし、エラーとかでリトライが発生すると、今度は新しいバージョンが動くかも&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;関数の動作時間に加えて5,6分くらいは、新旧両方のバージョンが動くかもね&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ということらしい。&lt;/p&gt;&#10;&lt;p&gt;いずれにしても、こういうことならばダウンタイム自体は発生しない……と思われる。&lt;/p&gt;&#10;&lt;h2 id="リンク"&gt;リンク&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/48169167/what-happens-to-a-running-aws-lambda-during-redeployment" target="_blank" rel="noopener"&#10; &gt;What happens to a running AWS lambda during redeployment? - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://forums.aws.amazon.com/thread.jspa?threadID=270926&amp;amp;tstart=0" target="_blank" rel="noopener"&#10; &gt;AWS Developer Forums: What happens to a running lambda during &amp;hellip;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>nginx + certbot + Let’s Encrypt で TLSv1.0やTLSv1.1が無効化できない時</title><link>https://hack-le.com/nginx-certbot-lets-encrypt/</link><pubDate>Fri, 11 Dec 2020 15:42:48 +0900</pubDate><guid>https://hack-le.com/nginx-certbot-lets-encrypt/</guid><description>&lt;p&gt;TLSv1.0やTLSv1.1は既知の脆弱性があるために、各種ブラウザでも対応が打ち切られています（参考「&lt;a class="link" href="https://ssl.sakura.ad.jp/column/tls-invalidation/" target="_blank" rel="noopener"&#10; &gt;ついにTLS 1.0/1.1の無効化が決定！影響や確認・対応方法とは？ | さくらのSSL&lt;/a&gt;」）。なので、もうサーバー側で対応する理由はないわけで、無効化する必要があるのですが、nginxの設定をなんぼいじっても無効化できないと思ったら、certbotでLet&amp;rsquo;s Encrypt使っている場合そっちの対応もあって半日ハマっていました。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;AWS EC2&lt;/li&gt;&#10;&lt;li&gt;Ubuntu 18.04&lt;/li&gt;&#10;&lt;li&gt;nginx 1.18.0&lt;/li&gt;&#10;&lt;li&gt;certbot 0.31.0&#10;&lt;ul&gt;&#10;&lt;li&gt;Let&amp;rsquo;s Encrypt によるドメイン証明&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;TLSv1.0とTLSv1.1が使えるせいで、ssllabs.com のテストでB評価と言われる。実際、ほとんどのブラウザで無効化されるし、もはやサポートする理由がないので切りたい。&lt;/p&gt;&#10;&lt;h2 id="確認の仕方"&gt;確認の仕方&#10;&lt;/h2&gt;&lt;p&gt;作業に入る前に、先に確認の仕方を見ておく。&lt;/p&gt;&#10;&lt;h3 id="opensslコマンド"&gt;opensslコマンド&#10;&lt;/h3&gt;&lt;p&gt;簡易的に見るならば、以下のコマンドを実行するとよい。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# TLS1.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl s_client -connect example.com:443 -no_tls1_2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# TLS1.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl s_client -connect example.com:443 -no_tls1_2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;それぞれ実行するとずらずら表示される。対応していなければ SSL handshake has read 7 bytes and written 0 bytes というようなバイト表示がされる。ので、-no_tls1_2オプションをつけた時にそうなればよい。&lt;/p&gt;&#10;&lt;h3 id="ssllabscomでテスト受ける"&gt;ssllabs.comでテスト受ける&#10;&lt;/h3&gt;&lt;p&gt;時間がかかるので最初と最後だけ受ければいいと思うが、&lt;a class="link" href="https://www.ssllabs.com/ssltest/index.html" target="_blank" rel="noopener"&#10; &gt;SSL Server Test (Powered by Qualys SSL Labs)&lt;/a&gt; でテストを受けて確認する。TLSv1.0、v1.1をサポートしていると、Protocol Support の項目で怒られる。&lt;/p&gt;&#10;&lt;p&gt;よければこんな感じ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2020/12/3ffa24f7e00e8cc3d61e28d712d871c7-1-700x210.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Testの結果&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;nginxの設定ファイルと、certbotでLet&amp;rsquo;s Encrypt使っている場合はそちらのファイルも見る。むしろそっちだけでもいい。&lt;/p&gt;&#10;&lt;h3 id="nginxconfの設定変更"&gt;nginx.confの設定変更&#10;&lt;/h3&gt;&lt;p&gt;nginxの設定ファイルの基本については過去記事「&lt;a class="link" href="https://hack-le.com/nginx/" &gt;nginxの設定ファイル nginx.conf の読み方 超入門 – 或る阿呆の記&lt;/a&gt;」を参照。&lt;/p&gt;&#10;&lt;p&gt;httpディレクティブ内にある、ssl_protocolsの項目を以下のように記述する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_protocols TLSv1.2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もしかしたらserverディレクティブに記述しているかもしれないが、その場合は /etc/nginx/sites-available/* の設定ファイルの記述を確認する。&lt;/p&gt;&#10;&lt;p&gt;TLSv1.3も対応しているならそれも書いておく。ただしTLSv1.3対応については本記事ではスコープ外。&lt;/p&gt;&#10;&lt;p&gt;そして文法チェックしてOKだったら再起動。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nginx -t&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart nginx.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;で、だいたいどこのサイトもこれでOK！とあるのだが、実際にやってみると相変わらずTLSv1.0とTLSv1.1が一向に無効化されなかった。他の設定も色々試したが駄目。&lt;/p&gt;&#10;&lt;h3 id="certbot--lets-encryptの場合"&gt;certbot + Let&amp;rsquo;s Encryptの場合&#10;&lt;/h3&gt;&lt;p&gt;結局たどり着いたのはここ「&lt;a class="link" href="https://libre-software.net/tls-nginx/" target="_blank" rel="noopener"&#10; &gt;How to remove TLSv1.0 / 1.1 and enable TLS 1.3 in Nginx – libre-software.net&lt;/a&gt;」で、certbot + Let&amp;rsquo;s Encryptで証明書発行している場合は、こちらの設定があるのだという。&lt;/p&gt;&#10;&lt;p&gt;具体的には、/etc/letsencrypt/options-ssl-nginx.conf について、ssl_protocolsを確認する。TLSv1.1とかの記述があったらそれが原因なので、removeしておく。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_protocols TLSv1.2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでnginxを再起動して、確認したらいけるはず。&lt;/p&gt;&#10;&lt;p&gt;むしろこちらの設定だけで、nginxの設定はしなくてもよかった。このサイトのサーバーがそうで、nginxの設定ファイル見たらTLSv1.0、TLSv1.1切ってないのに実際には使えなくて、変だなーと思っていたら、こっちの設定で切っていたという。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、nginxの設定もちゃんとしておくにこしたことはないね。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました！&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://libre-software.net/tls-nginx/" target="_blank" rel="noopener"&#10; &gt;How to remove TLSv1.0 / 1.1 and enable TLS 1.3 in Nginx – libre-software.net&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ここのおかげ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://serverfault.com/questions/704376/disable-tls-1-0-in-nginx/726867#726867" target="_blank" rel="noopener"&#10; &gt;Disable TLS 1.0 in NGINX - Server Fault&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;それらしい議論がされているのだが、結局関係があったのかなかったのかよくわからずじまい&#10;&lt;ul&gt;&#10;&lt;li&gt;日本語に自動翻訳しただけのゴミサイトが引っかかるのほんとどうにかしてほしい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/hikey/items/2d14fff05b72beb1aa33" target="_blank" rel="noopener"&#10; &gt;nginxの設定で暗号化通信をTLS1.2のみ許可する - Qiita&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;コマンド参考にしました&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Node.js 6 + http + Promise で複数のAPIを直列で順次実行する</title><link>https://hack-le.com/node-js-6-http-promise/</link><pubDate>Thu, 10 Dec 2020 19:01:03 +0900</pubDate><guid>https://hack-le.com/node-js-6-http-promise/</guid><description>&lt;p&gt;2020年だが、Node.js 6を使う必要がある、標準モジュールを使わなくてはいけない、という制約下で複数のAPIを順番に実行していく必要がある場合のメモ。まぁ自分用のスニペット。&lt;/p&gt;&#10;&lt;p&gt;async / await は使えないのでPromiseで頑張る。async / await 使いたい。つらい。でもJavaScript使えるだけ有り難いといえばそう。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;node.js 6.11.0&lt;/li&gt;&#10;&lt;li&gt;標準のhttpモジュール&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="サンプル"&gt;サンプル&#10;&lt;/h2&gt;&lt;p&gt;POST先として、 &lt;a class="link" href="https://webhook.site" target="_blank" rel="noopener"&#10; &gt;https://webhook.site&lt;/a&gt; に順番に投げるようなイメージ。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;qs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;querystring&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;callApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`call api: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;:&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="si"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;qs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;application/x-www-form-urlencoded&amp;#39;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`options: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;, payload: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http_protocaol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http_protocaol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;end&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;hogehoge&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;error&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`error: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;postRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;callApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;webhook.site&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/webhook.site開いた時に出たパス&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;postRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;補足。443はhttps、それ以外のポートはhttpにしている。無駄にurlencodedにも対応している。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/r-yanyo/items/3ef153dac12e69a2c46c" target="_blank" rel="noopener"&#10; &gt;Node.jsの標準モジュール(https)でAPIを叩く(GETのみ) - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/saka212/items/9b6cfe06b464580c2ee6" target="_blank" rel="noopener"&#10; &gt;Promiseとthenのメソッドチェーン（直列・並列・値の受け取り・引数） - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>DynamoDB から DocumentClient で get() した StringSet型 の値を取り出す</title><link>https://hack-le.com/aws-dynamodb-documentclient-get-stringset/</link><pubDate>Tue, 08 Dec 2020 13:55:06 +0900</pubDate><guid>https://hack-le.com/aws-dynamodb-documentclient-get-stringset/</guid><description>&lt;p&gt;AWS DynamoDBで使える型の一つに、StringSetがある。これは文字列の集合だ。JavaScriptでもES6以降にはSet型があるので、それと対応していればよいのだが、残念ながらしていない。&lt;/p&gt;&#10;&lt;p&gt;といっても、値を取り出すには、.values でアクセスすればよいだけ。というメモ。普段Python使っているのですぐに忘れる。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;node.js 12.20.0&lt;/li&gt;&#10;&lt;li&gt;aws-sdk 2.580.0&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="値の取り出し方"&gt;値の取り出し方&#10;&lt;/h2&gt;&lt;p&gt;結論だけ書くと、以下で、値の配列が得られる（Array.isArray()で調べたらtrueだったという意味で）。色々端折っているがまぁわかるかと。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;documentClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;パラメータ&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;値1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;値2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="もうちょっと色々"&gt;もうちょっと色々&#10;&lt;/h2&gt;&lt;p&gt;DocumentClient（&lt;a class="link" href="https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html" target="_blank" rel="noopener"&#10; &gt;Class: AWS.DynamoDB.DocumentClient — AWS SDK for JavaScript&lt;/a&gt;）でget()した値について、propertyについて調べたら以下のようになっていた。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;wrapperName&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//0waj1fsulf.execute-api.ap-northeast-1.amazonaws.com/Prod/post&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;constructor&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wrapperName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Set&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;initialize&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[].&lt;/span&gt;&lt;span class="nx"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;detectType&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;detectType&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;memberTypeToSetType&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;typeOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;InvalidSetType&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Sets can contain string, number, or binary values&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;memberTypeToSetType&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;typeOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;InvalidType&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; Set contains &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;typeOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; value&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;toJSON&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;initialize を見ても、.valuesで配列が取り出せることがわかる。&lt;/p&gt;</description></item><item><title>AWS Lambdaでイベント起動した時にeventに渡されるパラメータあれこれ</title><link>https://hack-le.com/aws-lambda-python-3-8/</link><pubDate>Fri, 20 Nov 2020 14:17:27 +0900</pubDate><guid>https://hack-le.com/aws-lambda-python-3-8/</guid><description>&lt;p&gt;AWSのLambda関数で、S3とかSNSとかのイベントで発火させる時に、event変数に渡されるパラメータのjson形式についてのまとめ。&lt;/p&gt;&#10;&lt;h2 id="cloudwatch-events"&gt;CloudWatch Events&#10;&lt;/h2&gt;&lt;p&gt;定期実行のやつ。&lt;/p&gt;&#10;&lt;pre&gt;`{&#13; "version": "0",&#13; "id": "xxxx",&#13; "detail-type": "Scheduled Event",&#13; "source": "aws.events",&#13; "account": "xxxx",&#13; "time": "2021-06-10T06:45:27Z",&#13; "region": "ap-northeast-1",&#13; "resources": [&#13; "arn:aws:events:ap-northeast-1:xxxx:rule/xxxx"&#13; ],&#13; "detail": {}&#13; }&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="s3"&gt;S3&#10;&lt;/h2&gt;&lt;p&gt;最終確認: 2020-10-19&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Records&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventVersion&amp;#34;: &amp;#34;2.1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventSource&amp;#34;: &amp;#34;aws:s3&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;awsRegion&amp;#34;: &amp;#34;ap-northeast-1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventTime&amp;#34;: &amp;#34;2020-11-11T07:11:11.971Z&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventName&amp;#34;: &amp;#34;ObjectCreated:Put&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;userIdentity&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;principalId&amp;#34;: &amp;#34;AWS:xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;requestParameters&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sourceIPAddress&amp;#34;: &amp;#34;xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;responseElements&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;x-amz-request-id&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;x-amz-id-2&amp;#34;: &amp;#34;xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;s3&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;s3SchemaVersion&amp;#34;: &amp;#34;1.0&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;configurationId&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;bucket&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;name&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;ownerIdentity&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;principalId&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;arn&amp;#34;: &amp;#34;arn:aws:s3:::xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;object&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;key&amp;#34;: &amp;#34;&amp;lt;ファイル名&amp;gt;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;size&amp;#34;: 1110,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eTag&amp;#34;: &amp;#34;b8998f8b6c5bf97ebb47785edcabf58f&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sequencer&amp;#34;: &amp;#34;005FAB8E92A2CE5967&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="dynamodb-stream"&gt;DynamoDB Stream&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Records&amp;#39;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;eventID&amp;#39;: &amp;#39;xxxxxxxxxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;eventName&amp;#39;: &amp;#39;INSERT&amp;#39; | &amp;#39;MODIFY&amp;#39; | &amp;#39;REMOVE&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;eventVersion&amp;#39;: &amp;#39;1.1&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;eventSource&amp;#39;: &amp;#39;aws:dynamodb&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;awsRegion&amp;#39;: &amp;#39;ap-northeast-1&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;dynamodb&amp;#39;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;ApproximateCreationDateTime&amp;#39;: 1587462474.0,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Keys&amp;#39;: {&amp;#39;&amp;lt;PK&amp;gt;が入る&amp;#39;: {&amp;#39;S&amp;#39;: &amp;#39;hogehoge&amp;#39;}, &amp;#39;&amp;lt;SK&amp;gt;が入る&amp;#39;: {&amp;#39;N&amp;#39;: &amp;#39;1587462000000&amp;#39;}},&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;NewImage&amp;#39; | &amp;#39;OldImage&amp;#39;: {&amp;#39;パラメータ1&amp;#39;: {&amp;#39;S&amp;#39;: &amp;#39;fugafuga&amp;#39;}, ...},&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;SequenceNumber&amp;#39;: &amp;#39;xxxxxxxxxxxxxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;SizeBytes&amp;#39;: 131,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;StreamViewType&amp;#39;: &amp;#39;NEW_IMAGE&amp;#39; | &amp;#39;NEW_AND_OLD_IMAGES&amp;#39; | &amp;#39;OLD_IMAGE&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;eventSourceARN&amp;#39;: &amp;#39;xxxxxxxxxxx&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;REMOVEの時は OldImage をいじる。INSERTの時は NewImage。MODIFYは両方。&lt;/p&gt;&#10;&lt;h2 id="sns"&gt;SNS&#10;&lt;/h2&gt;&lt;p&gt;最終確認: 2021/10/12&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Records&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventSource&amp;#34;: &amp;#34;aws:sns&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventVersion&amp;#34;: &amp;#34;1.0&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventSubscriptionArn&amp;#34;: &amp;#34;xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Sns&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Type&amp;#34;: &amp;#34;Notification&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;MessageId&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;TopicArn&amp;#34;: &amp;#34;xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Subject&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Message&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Timestamp&amp;#34;: &amp;#34;2020-11-13T08:56:32.217Z&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;SignatureVersion&amp;#34;: &amp;#34;1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Signature&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;SigningCertUrl&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;UnsubscribeUrl&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;MessageAttributes&amp;#34;: {}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="aws-iot---sns---lambdaの場合"&gt;AWS IoT -&amp;gt; SNS -&amp;gt; Lambdaの場合&#10;&lt;/h3&gt;&lt;pre&gt;`{'WirelessDeviceId': '88d6aace-9702-4f20-9de9-c8d5bfee3533', 'PayloadData': 'AgAAA+gD6APo', 'WirelessMetadata': {'LoRaWAN': {'ADR': False, 'Bandwidth': 125, 'ClassB': False, 'CodeRate': '4/5', 'DataRate': '2', 'DevAddr': 'fe0523c1', 'DevEui': '000b78fffe0523c1', 'FCnt': 16549, 'FOptLen': 0, 'FPort': 1, 'Frequency': '922200000', 'Gateways': [{'GatewayEui': 'b827ebfffeaa9226', 'Rssi': -5, 'Snr': 8}], 'MIC': '24517e52', 'MType': 'UnconfirmedDataUp', 'Major': 'LoRaWANR1', 'Modulation': 'LORA', 'PolarizationInversion': False, 'SpreadingFactor': 10, 'Timestamp': '2021-10-12T10:02:15Z'&amp;#125;&amp;#125;}&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="s3---sns---lambda-の場合"&gt;S3 -&amp;gt; SNS -&amp;gt; Lambda の場合&#10;&lt;/h3&gt;&lt;p&gt;SnsレコードのMessageに、S3のRecordがシリアライズドされたjsonで入っている。&lt;/p&gt;&#10;&lt;h3 id="cloudwatch---sns---lambdaの場合"&gt;CloudWatch -&amp;gt; SNS -&amp;gt; Lambdaの場合&#10;&lt;/h3&gt;&lt;p&gt;SnsレコードのMessageに、以下のシリアライドされたjsonが入っている。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AlarmName&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AlarmDescription&amp;#39;: None,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AWSAccountId&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;NewStateValue&amp;#39;: &amp;#39;ALARM&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;NewStateReason&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;StateChangeTime&amp;#39;: &amp;#39;2020-10-12T04:50:22.996+0000&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Region&amp;#39;: &amp;#39;Asia Pacific Tokyo&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AlarmArn&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;OldStateValue&amp;#39;: &amp;#39;OK&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Trigger&amp;#39;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;MetricName&amp;#39;: &amp;#39;4XXError&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Namespace&amp;#39;: &amp;#39;AWS/ApiGateway&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;StatisticType&amp;#39;: &amp;#39;Statistic&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Statistic&amp;#39;: &amp;#39;AVERAGE&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Unit&amp;#39;: None,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Dimensions&amp;#39;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;value&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;name&amp;#39;: &amp;#39;xxxx&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Period&amp;#39;: 300,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;EvaluationPeriods&amp;#39;: 1,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;ComparisonOperator&amp;#39;: &amp;#39;GreaterThanThreshold&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Threshold&amp;#39;: 0.03,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;TreatMissingData&amp;#39;: &amp;#39;xxxx&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;EvaluateLowSampleCountPercentile&amp;#39;: &amp;#39;&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AWS Lambda (Python 3.8)から Amazon Elasticsearchを使う(LambdaはSAMで)</title><link>https://hack-le.com/aws-lambda-amazon-elasticsearchlambdasam/</link><pubDate>Tue, 13 Oct 2020 16:11:08 +0900</pubDate><guid>https://hack-le.com/aws-lambda-amazon-elasticsearchlambdasam/</guid><description>&lt;p&gt;LambdaからAmazon Elasticsearchにクエリを投げるためのテンプレメモ。LambdaはSAMで用意するが、Amazon Elasticsearchのドメインは事前に準備しておく。RuntimeはPython 3.8。Elasticsearchの接続にはelasticsearchのモジュールを利用する。&lt;/p&gt;&#10;&lt;p&gt;権限周りとかけっこうたいへん。&lt;/p&gt;&#10;&lt;h2 id="前提条件"&gt;前提条件&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;SAM CLI 1.6.2&lt;/li&gt;&#10;&lt;li&gt;LambdaのRuntimeはPython 3.8&#10;&lt;ul&gt;&#10;&lt;li&gt;今回はSNSをトリガにしているがそこは本質ではない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Amazon ELasticsearch 7.7&#10;&lt;ul&gt;&#10;&lt;li&gt;これはドメインを事前に作っておくものとする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ディレクトリ構造"&gt;ディレクトリ構造&#10;&lt;/h2&gt;&lt;p&gt;以下のようなディレクトリ構造で実行するものとする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── hello_world_function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── hello_world&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   ├── __init__.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   └── app.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── requirements.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── samconfig.toml&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── template.yml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="hello_worldpy"&gt;hello_world.py&#10;&lt;/h2&gt;&lt;p&gt;テンプレだからhello_worldだけど好きにするよろし。&lt;/p&gt;&#10;&lt;p&gt;実行時間のために、ESに接続するのはコンテナ起動時にしているわけだが、これで安定的に動くのかは試行中。丁寧にやるなら、下記コードいうところのes_client.close()を毎回実行するべきだと思うが、それをするとMEM 256MBで実行時間が200ms -&amp;gt; 600ms程度に跳ね上がってしまう。。REST API投げるだけなら違うんだろうか。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;boto3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;requests_aws4auth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AWS4Auth&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;elasticsearch&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Elasticsearch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RequestsHttpConnection&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_credentials&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;awsauth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AWS4Auth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;access_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;secret_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;us-west-2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;es&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;session_token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;es_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Elasticsearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hosts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;host&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ES_ENDPOINT&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;port&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;http_auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;awsauth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;use_ssl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;verify_certs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;connection_class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RequestsHttpConnection&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;to_es&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;es_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%Y%m&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;%H%M%S&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;to_es&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;とりあえずエラーは握りつぶしている。&lt;/p&gt;&#10;&lt;h2 id="requirementstxt"&gt;requirements.txt&#10;&lt;/h2&gt;&lt;p&gt;sixとregexはなくていいと思う。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;requests&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;requests-aws4auth&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;elasticsearch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;six&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;regex&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="templateyml"&gt;template.yml&#10;&lt;/h2&gt;&lt;p&gt;SNSトリガにしているが、そこはどうでもいい。&lt;/p&gt;&#10;&lt;p&gt;PoliciesでAmazonESFullAccessにしている。ES側のアクセスポリシーは特に設定しないでクエリ投げられた。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AWSTemplateFormatVersion: 2010-09-09&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Description: &amp;gt;-&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sam-app&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Transform:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- AWS::Serverless-2016-10-31&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Globals:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Function:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timeout: 3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Resources:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SimpleTopic:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::SNS::Topic&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SNSPayloadLogger:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::Serverless::Function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Description: A Lambda function that logs the payload of messages sent to an associated SNS topic.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Runtime: python3.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CodeUri: hello_world_function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Handler: hello_world/app.lambda_handler&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Variables:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ES_ENDPOINT: xxxx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Events:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SNSTopicEvent:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: SNS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Topic: !Ref SimpleTopic&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MemorySize: 256&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timeout: 100&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Policies:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - AWSLambdaBasicExecutionRole&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - arn:aws:iam::aws:policy/AmazonESFullAccess&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="samconfigtoml"&gt;samconfig.toml&#10;&lt;/h2&gt;&lt;p&gt;sam build; sam deploy &amp;ndash;guided で適当に生成。&lt;/p&gt;&#10;&lt;h2 id="esで確認"&gt;ESで確認&#10;&lt;/h2&gt;&lt;p&gt;Amazon Elasticsearchは最初からkibanaがあってとてもよい。&lt;/p&gt;&#10;&lt;p&gt;SQL実行文で、 select * from test でデータが投げられていることを確認する。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;なんだか色々と苦労したので、先人の足跡とてもありがたかったです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.youyo.info/post/2017/02/25/lambda-elasticsearchservice-iamrole/" target="_blank" rel="noopener"&#10; &gt;AWS LambdaからElasticsearch Serviceに接続するときに、IAM Roleを使う&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudpack.media/30571" target="_blank" rel="noopener"&#10; &gt;Lambda から elasticsearch service に何かする [cloudpack OSAKA blog] | cloudpack.media&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/ohakado/items/ec7668a926f42f7d99fd" target="_blank" rel="noopener"&#10; &gt;Amazon Elasticsearch Service とlambda(Python3) を一瞬で疎通するメモ - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-request-signing.html#es-request-signing-python" target="_blank" rel="noopener"&#10; &gt;Amazon Elasticsearch Service への HTTP リクエストの署名 - Amazon Elasticsearch Service&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;本家&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>AWS SAM CLIでSNSからLambdaを起動する(Python 3.8)、S3からSNSに通知する</title><link>https://hack-le.com/aws-sam-clisnslambdapython-3-8s3/</link><pubDate>Mon, 12 Oct 2020 04:04:43 +0900</pubDate><guid>https://hack-le.com/aws-sam-clisnslambdapython-3-8s3/</guid><description>&lt;p&gt;AWS SAM CLIを使って、 SNS -&amp;gt; Lambda (Python3.8) 起動できるようなテンプレートのメモ。ついでに、S3のイベントでSNSに通知するような場合についても記述する。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;AWS SAM CLI 1.6.2&lt;/li&gt;&#10;&lt;li&gt;LambdaのRuntimeはPython 3.8&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="sns---lambda"&gt;SNS -&amp;gt; Lambda&#10;&lt;/h2&gt;&lt;p&gt;node12.xだとSNS起動のテンプレートが用意されているのだが、Pythonでは用意されていない。まぁだいたい同じなので、node12.xのテンプレートをPython用にちょっとアレンジして使う。&lt;/p&gt;&#10;&lt;h3 id="ディレクトリ構造"&gt;ディレクトリ構造&#10;&lt;/h3&gt;&lt;p&gt;まずディレクトリ構造は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── hello_world_function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── hello_world&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   ├── __init__.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   └── app.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── requirements.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── samconfig.toml&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── template.yaml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="apppy"&gt;app.py&#10;&lt;/h3&gt;&lt;p&gt;実行される関数。ここではeventをログに出すだけのものとする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def lambda_handler(event, context):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(event)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="initpy"&gt;&lt;strong&gt;init&lt;/strong&gt;.py&#10;&lt;/h3&gt;&lt;p&gt;空ファイル&lt;/p&gt;&#10;&lt;h3 id="requrementstxt"&gt;requrements.txt&#10;&lt;/h3&gt;&lt;p&gt;sam cli使っていて本当に楽だなぁと思うのが、ここで手軽にライブラリを導入できることだ。まぁでも今回は空ファイルでよい。&lt;/p&gt;&#10;&lt;h3 id="templateyaml"&gt;template.yaml&#10;&lt;/h3&gt;&lt;p&gt;テンプレートだと.ymlなのだが、個人的には.yamlのほうが馴染むんだが、一般的にはどうなんだろうか。&lt;/p&gt;&#10;&lt;p&gt;node12.xのテンプレートをちょっと変えたものを以下に。あえてコメントアウトは残している。参照に使えるので。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# This is the SAM template that represents the architecture of your serverless application&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# The AWSTemplateFormatVersion identifies the capabilities of the template&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/format-version-structure.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AWSTemplateFormatVersion: 2010-09-09&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Description: &amp;gt;-&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sam-app&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Transform section specifies one or more macros that AWS CloudFormation uses to process your template&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-section-structure.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Transform:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- AWS::Serverless-2016-10-31&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Globals:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Function:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timeout: 3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Resources declares the AWS resources that you want to include in the stack&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Resources:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # This is an SNS Topic with all default configuration properties. To learn more about the available options, see&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SimpleTopic:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::SNS::Topic&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # This is the Lambda function definition associated with the source code: sns-payload-logger.js. For all available properties, see&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SNSPayloadLogger:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::Serverless::Function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Description: A Lambda function that logs the payload of messages sent to an associated SNS topic.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Runtime: python3.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CodeUri: hello_world_function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Handler: hello_world/app.lambda_handler&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # This property associates this Lambda function with the SNS topic defined above, so that whenever the topic&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # receives a message, the Lambda function is invoked&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Events:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SNSTopicEvent:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: SNS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Topic: !Ref SimpleTopic&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MemorySize: 128&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timeout: 100&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Policies:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # Give Lambda basic execution Permission to the helloFromLambda&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - AWSLambdaBasicExecutionRole&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでsam build; sam deploy &amp;ndash;guided で samconfig.toml を作れば出来上がり。早い。&lt;/p&gt;&#10;&lt;h2 id="s3からsnsに通知する"&gt;S3からSNSに通知する&#10;&lt;/h2&gt;&lt;p&gt;せっかくなので、 S3 -&amp;gt; SNS -&amp;gt; Lambda まで組んでみる。&lt;/p&gt;&#10;&lt;h3 id="sam側"&gt;SAM側&#10;&lt;/h3&gt;&lt;p&gt;S3のイベントでSNSのトピックに通知する時などは、SNSのアクセスポリシーで当該のバケットからのアクセスを許可する必要がある（&lt;a class="link" href="https://qiita.com/rysk92/items/5e6d284db9152987d152" target="_blank" rel="noopener"&#10; &gt;S3 の put event を sns に流そうとした時の Permissions error の解決方法 - Qiita&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;p&gt;ということで、トピックポリシーをAWS::SNS::TopicPolicyでする必要がある。Resrouces:の下に以下を挿入する。ここでは、既存のバケットを使うものとする（SAMでS3指定するには、バケット生成からやらないといけないから…）。なおS3のバケット名は、バケットポリシーから確認できる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SimpleTopicPolicy:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::SNS::TopicPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; PolicyDocument:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: &amp;#34;2008-10-17&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Id: &amp;#34;from_s3_policy_id&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Statement:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Sid: SendToSns&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Effect: Allow&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Principal:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; AWS: &amp;#34;*&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Action:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SNS:Publish&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Resource: !Ref SimpleTopic&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Condition:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ArnLike:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; aws:SourceArn: arn:aws:s3:::バケット名&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Topics: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - !Ref SimpleTopic&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ちなみにArnLikeでバケットを指定する時は、ワイルドカード(*)で一括指定もできる。&lt;/p&gt;&#10;&lt;p&gt;ここまでエラーとめっちゃ戦った。めっちゃエラー出た。どうも最初、Actionで色々指定したのがだめくさかった気がするが……。&lt;/p&gt;&#10;&lt;h3 id="s3の設定"&gt;S3の設定&#10;&lt;/h3&gt;&lt;p&gt;今回S3は既存のバケットを使っているので、Webコンソールからバケットの設定をする。&lt;/p&gt;&#10;&lt;p&gt;当該バケットから「プロパティ」→「イベント」→SNSトピックとか設定して保存。&lt;/p&gt;&#10;&lt;h2 id="おまけ-lambdaのeventの中身"&gt;おまけ: Lambdaのeventの中身&#10;&lt;/h2&gt;&lt;h3 id="s3---sns---lambda-の時"&gt;S3 -&amp;gt; SNS -&amp;gt; Lambda の時&#10;&lt;/h3&gt;&lt;p&gt;ちなみにこれでLambdaが受け取る内容は以下みたいな感じ。これはファイル生成した時。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Records&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventSource&amp;#34;: &amp;#34;aws:sns&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventVersion&amp;#34;: &amp;#34;1.0&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventSubscriptionArn&amp;#34;: &amp;#34;TopicのARNになんか加えたやつが入る&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Sns&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Type&amp;#34;: &amp;#34;Notification&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;MessageId&amp;#34;: &amp;#34;9e9a2471-37df-5726-b997-738c618e37d1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;TopicArn&amp;#34;: &amp;#34;TopicのARNが入る&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Subject&amp;#34;: &amp;#34;Amazon S3 Notification&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Message&amp;#34;: &amp;#34;&amp;lt;serialized-json&amp;gt;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Timestamp&amp;#34;: &amp;#34;2020-10-11T18:50:57.486Z&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;SignatureVersion&amp;#34;: &amp;#34;1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Signature&amp;#34;: &amp;#34;BASE64っぽい&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;SigningCertUrl&amp;#34;: &amp;#34;xxxxpem&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;UnsubscribeUrl&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;MessageAttributes&amp;#34;: {}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sns.Message部分はシリアライズされたjsonで、戻すと以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Records&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventVersion&amp;#34;: &amp;#34;2.1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventSource&amp;#34;: &amp;#34;aws:s3&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;awsRegion&amp;#34;: &amp;#34;ap-northeast-1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventTime&amp;#34;: &amp;#34;2020-10-11T18:50:51.353Z&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eventName&amp;#34;: &amp;#34;ObjectCreated:Put&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;userIdentity&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;principalId&amp;#34;: &amp;#34;なんかID&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;requestParameters&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sourceIPAddress&amp;#34;: &amp;#34;xx.xx.xx.xx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;responseElements&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;x-amz-request-id&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;x-amz-id-2&amp;#34;: &amp;#34;xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;s3&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;s3SchemaVersion&amp;#34;: &amp;#34;1.0&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;configurationId&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;bucket&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;name&amp;#34;: &amp;#34;バケット名&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;ownerIdentity&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;principalId&amp;#34;: &amp;#34;xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;arn&amp;#34;: &amp;#34;バケットのARN&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;object&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;key&amp;#34;: &amp;#34;ファイル名&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;size&amp;#34;: 844,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;eTag&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sequencer&amp;#34;: &amp;#34;xxxx&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイル名しかわからんね。まぁ仕方ない。&lt;/p&gt;&#10;&lt;h3 id="cloudwatchalarm---sns---lambda-の時"&gt;CloudWatch(Alarm) -&amp;gt; SNS -&amp;gt; Lambda の時&#10;&lt;/h3&gt;&lt;p&gt;今回関係ないけどよく使うので。&lt;/p&gt;&#10;&lt;p&gt;API Gatewayで4xxエラーが出た時にSNSにalarmを飛ばしている。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Records&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventSource&amp;#34;: &amp;#34;aws:sns&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventVersion&amp;#34;: &amp;#34;1.0&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;EventSubscriptionArn&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Sns&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Type&amp;#34;: &amp;#34;Notification&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;MessageId&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;TopicArn&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Subject&amp;#34;: &amp;#34;ALARM: \&amp;#34;xxxx\&amp;#34; in Asia Pacific Tokyo&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Message&amp;#34;: &amp;#34;serialized-json&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Timestamp&amp;#34;: &amp;#34;2020-10-12T04:50:23.043Z&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;SignatureVersion&amp;#34;: &amp;#34;1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Signature&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;SigningCertUrl&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;UnsubscribeUrl&amp;#34;: &amp;#34;xxxx&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;MessageAttributes&amp;#34;: {}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Message部分をjson.loads()するとこんな感じ。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AlarmName&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AlarmDescription&amp;#39;: None,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AWSAccountId&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;NewStateValue&amp;#39;: &amp;#39;ALARM&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;NewStateReason&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;StateChangeTime&amp;#39;: &amp;#39;2020-10-12T04:50:22.996+0000&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Region&amp;#39;: &amp;#39;Asia Pacific Tokyo&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;AlarmArn&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;OldStateValue&amp;#39;: &amp;#39;OK&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Trigger&amp;#39;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;MetricName&amp;#39;: &amp;#39;4XXError&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Namespace&amp;#39;: &amp;#39;AWS/ApiGateway&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;StatisticType&amp;#39;: &amp;#39;Statistic&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Statistic&amp;#39;: &amp;#39;AVERAGE&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Unit&amp;#39;: None,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Dimensions&amp;#39;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;value&amp;#39;: &amp;#39;xxxx&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;name&amp;#39;: &amp;#39;xxxx&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Period&amp;#39;: 300,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;EvaluationPeriods&amp;#39;: 1,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;ComparisonOperator&amp;#39;: &amp;#39;GreaterThanThreshold&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Threshold&amp;#39;: 0.03,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;TreatMissingData&amp;#39;: &amp;#39;xxxx&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;EvaluateLowSampleCountPercentile&amp;#39;: &amp;#39;&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html" target="_blank" rel="noopener"&#10; &gt;AWS::SNS::Topic - AWS CloudFormation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html" target="_blank" rel="noopener"&#10; &gt;AWS::SNS::TopicPolicy - AWS CloudFormation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/rysk92/items/5e6d284db9152987d152" target="_blank" rel="noopener"&#10; &gt;S3 の put event を sns に流そうとした時の Permissions error の解決方法 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://dev.classmethod.jp/articles/s3-sns-lambda/" target="_blank" rel="noopener"&#10; &gt;S3イベント通知からSNS経由でLambdaを起動し、イベントが発生したバケット名とオブジェクトキーを取得する | Developers.IO&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>LoRaWAN 1.0.2 の Confirmed な message の仕様メモ</title><link>https://hack-le.com/lorawan-1-0-2-confirmed-message/</link><pubDate>Tue, 29 Sep 2020 00:34:15 +0900</pubDate><guid>https://hack-le.com/lorawan-1-0-2-confirmed-message/</guid><description>&lt;p&gt;LoRaWANにはConfirmedとUnconfirmedなUplinkないしDownlinkがある。Confirmed、ということはつまりACK応答を確認するということだが、それはつまり具体的に何をしているのかのメモ書き。LoRaWAN Specification 1.0.2 に基づく。&lt;/p&gt;&#10;&lt;h2 id="ざっくり概要"&gt;ざっくり概要&#10;&lt;/h2&gt;&lt;p&gt;仕様書から読み取れることをざっくり書くと以下。なお( )内は仕様書のセクション番号。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;LoRaWANでは6つのMAC message types(MType)が区別されている(4.2.1)&lt;/li&gt;&#10;&lt;li&gt;MTypeはMHDRの中で規定される(4.2.1)&lt;/li&gt;&#10;&lt;li&gt;MTypeのうちの2つがUnconfirmed Data UpとConfirmed Data Up confirmed data messageを受け取ったreceiverは、FHDR(Frame header)のFCtrlにあるACKのbitをたてて応答しなければならない(shall)(4.3.1.2)&lt;/li&gt;&#10;&lt;li&gt;もし、receiverに保留中のdownlinkがなければ、networkはpayloadなしのframeを生成しなければならない(shall)(18.1)&lt;/li&gt;&#10;&lt;li&gt;end-deviceは、ACKが返ってこなければ、uplinkをカウンタをインクリメントせず再送できる(may)(18.1)。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="confirmedって何か"&gt;confirmedって何か&#10;&lt;/h2&gt;&lt;p&gt;もうちょっとちゃんと見ていく。&lt;/p&gt;&#10;&lt;p&gt;そもそもConfirmedとはどっから出てきた言葉か。これはMAC Header(MHDR)のMAC message types(MType)にある4つのタイプだろう。MTypeは3bit、つまり8タイプ定義されている。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;MType&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Join Request&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;001&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Join Accept&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;010&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Unconfirmed Data Up&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;011&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Unconfirmed Data Down&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;100&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Confirmed Data Up&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;101&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Confirmed Data Down&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;110&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RFU&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;111&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Proprietary&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;em&gt;Mac message types (4.2.1)&lt;/em&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;010&amp;hellip;101の4タイプに、Confirmedという言葉がある。で、confirmed-dataとは何かというと、4.2.1.2に以下の記述。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;A confirmed-data message has to be acknowledged by the receiver, whereas an unconfirmed-data message does not require an acknowledgment.&lt;/p&gt;&#10;&lt;p&gt;— 4.2.1.2 Data messages&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;receiverのACKが必要なのがconfirmed、必要ないのがunconfirmedということ。まぁそれはそうだろう。receiverは、uplinkならreceiverはnetwork serverだろうし、downlinkならend-deviceだろう。&lt;/p&gt;&#10;&lt;h2 id="何をもってconfirmedとするのか"&gt;何をもってconfirmedとするのか&#10;&lt;/h2&gt;&lt;p&gt;さて、MHDRのMTypeからConfirmedなメッセージであるかどうかが確認できるわけだ。で、Confirmedなメッセージが届いたとして、receiverはいかにしてACKを返したらよいか。&lt;/p&gt;&#10;&lt;p&gt;4.3.1.2に、以下の記述がある。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;When receiving a confirmed data message, the receiver shall respond with a data frame that has the acknowledgment bit (ACK) set.&lt;/p&gt;&#10;&lt;p&gt;— 4.3.1.2 Message acknowledge bit and acknowledgement procedure (ACK in FCtrl)&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;receiverはACKのbitをたてて返せ、と。ACKのbitって何かというと、これはFrame header(FHDR)のFCtrlにある。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2020/09/64d5eb47c1e2f5a6fefebb88e1a7dd46.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;4.3.1 Frame header(FHDR)&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;このbitをたてた状態で応答して、senderはACKが返ったとみなす。&lt;/p&gt;&#10;&lt;h2 id="ack応答のペイロード"&gt;ACK応答のペイロード&#10;&lt;/h2&gt;&lt;p&gt;さて、&lt;strong&gt;Confirmedなuplinkを考えたとき、このACK応答はつまりdownlink&lt;/strong&gt;である。したがって、pendingしているdownlinkがあれば、それを返すことになる。もしない場合は？18.1には以下のように記述されている。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;If there is no downlink payload pending the network shall generate a frame without a payload&lt;/p&gt;&#10;&lt;p&gt;— 18.1 Uplink Timing Diagram for Confirmed Data Messages&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;ペイロードなしのdownlinkを返す、と。&lt;/p&gt;&#10;&lt;h2 id="ackが返ってこない時の挙動"&gt;ACKが返ってこない時の挙動&#10;&lt;/h2&gt;&lt;p&gt;ここまで正常系だが、実際にはACKが返ってこないこともある。というかそういうことがあるからこそのConfirmedである。で、ACKが返ってこなければsenderはどうするか。18.1には以下のように記述されている。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;If an end-device does not receive a frame with the ACK bit set in one of the two receive windows immediately following the uplink transmission it may resend the same frame with the same payload and frame counter again at least ACK_TIMEOUT seconds after the second reception window.This resend must be done on another channel and must obey the duty cycle limitation as any other normal transmission.&lt;/p&gt;&#10;&lt;p&gt;— 18.1 Uplink Timing Diagram for Confirmed Data Messages&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;2つの受信窓のいずれも受信できなかったとき、2番目の受信窓からACK_TIMEOUT秒後に再送できる。ただし再送する時は違うチャネルで。&lt;/p&gt;&#10;&lt;p&gt;ということで、一定の制約にしたがって諦めずに再送してもよいよ、とのお達し。実際どうするかはsender次第か。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>Google DocumentsをWebサイト化するnocode.works の使い方</title><link>https://hack-le.com/nocode-works/</link><pubDate>Sun, 02 Aug 2020 00:38:19 +0900</pubDate><guid>https://hack-le.com/nocode-works/</guid><description>&lt;p&gt;最近101回目の流行を迎えている気がしないでもないノーコードだが、古より続く伝統のノーコードといえばやはりサイト制作だろう。で、最近出てきたnocode.worksを使うと、Google Documentsを気軽にWebサイト化することができる。&lt;/p&gt;&#10;&lt;p&gt;正直まだ始まったばかりでエラー&amp;amp;エラーの不安定っぷり凄まじく、これに金払って本気サイト構築する物好きいるの？という感じなのだが、なんとなく可能性を感じるということもあって、最近ちょこちょこといじっている。そしてなんとなく、ブログというかサイト制作の初心を思い出したりもしている。&lt;/p&gt;&#10;&lt;p&gt;本記事はnocode.worksを使って一通りやるためのもの。&lt;/p&gt;&#10;&lt;h2 id="nocodeworksなるもの"&gt;nocode.worksなるもの&#10;&lt;/h2&gt;&lt;p&gt;まずnocode.worksだが、これは一言で言うと冒頭で書いたとおり「Google DocumentsをWebサイト化したもの」。たとえばこんな感じのサイトができる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2020/08/bb8583e81e8a181f0ee8d0d7917e5f08-1-700x393.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;実際のサイトは「&lt;a class="link" href="https://tama.nocode.works/" target="_blank" rel="noopener"&#10; &gt;https://tama.nocode.works/&lt;/a&gt;」ですよろしく。たまに更新するかもしれないししないかもしれない。公式のデモはこちら「&lt;a class="link" href="https://guide.nocode.works/" target="_blank" rel="noopener"&#10; &gt;https://guide.nocode.works/&lt;/a&gt;」。&lt;/p&gt;&#10;&lt;p&gt;もう見た目がね、&lt;strong&gt;往年の個人サイトみたいな&lt;/strong&gt;。しかも相当そっけない部類の。&lt;/p&gt;&#10;&lt;p&gt;いやまぁ多分そう。これ、そういう感じのツール。キラキラしたサイトづくりには向かないと思う。まぁGoogle Documentsで頑張ればできると思うけど。なんか違うなって。いやもうだって、Google Documentsだからね、大元が。&lt;/p&gt;&#10;&lt;p&gt;こんなんして嬉しいことあるのか？っていうと、まぁある。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Webサイト化されたらなんだかんだでみやすい&#10;&lt;ul&gt;&#10;&lt;li&gt;専用ドメインまであてがえば完全に自サイト&#10;&lt;ul&gt;&#10;&lt;li&gt;とはいえそれは課金要素。正直現状課金してまで使いたいかと言われると相当微妙。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;nocode.worksのサブドメインなら編集できた……が、いつの間にか有料化された&#10;&lt;ul&gt;&#10;&lt;li&gt;正直それくらいは無料プランでもできるべき&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Google Documentsのリッチな機能がそのまま使える&#10;&lt;ul&gt;&#10;&lt;li&gt;目次や表といった機能はもちろん、Google SpreadSheetで作った画像の挿入など他Google系サービスとの連携、さらにはプラグインを使った描画やソースコードのシンタックスハイライトなどの大技もあり&lt;/li&gt;&#10;&lt;li&gt;Storage容量はめっちゃ少ないので調子にのると一瞬で死ぬ（10MB）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Google Driveを使った素直なフォルダ構成&#10;&lt;ul&gt;&#10;&lt;li&gt;なんだかんだいってツリー構造以上にわかりやすいUIっていまだにないと思う&#10;&lt;ul&gt;&#10;&lt;li&gt;iOSも結局フォルダに屈した&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;サービスが死んでもとりあえずフォルダ構造で整理された状態でドキュメントが残っているのは有り難い&#10;&lt;ul&gt;&#10;&lt;li&gt;インフラがGoogleの安心感&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Googleアカウントを使った認証が可能……だった&#10;&lt;ul&gt;&#10;&lt;li&gt;これのために使っていたのに、いつの間にか有料機能になった。&#10;&lt;ul&gt;&#10;&lt;li&gt;認証ってしょっぱすぎるのと本気過ぎるやつの両極端になりがちなので、これは地味にうれしかったんだがなぁ。正直これだけできれば十分という程度のプロジェクトはたくさんある。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;といったところだろうか。ポイントは、&lt;strong&gt;Google DocumentsはGoogleの提供するサービスの一つだ&lt;/strong&gt;というところだろう。Google Documents自体の機能はもちろんだが、他Googleサービスとの連携や、なにより大元のインフラがGoogleという安心感がある。&lt;/p&gt;&#10;&lt;p&gt;正直いつ死んでもおかしくないサービスなのだが、データ自体はGoogle Driveにあるし、フォルダで整理もしているから、最悪どうなってもいいという利点は大きい。&lt;/p&gt;&#10;&lt;p&gt;だったらGoogle Driveそのまま使えばいいやんと思うかもしれない。それはけっこう正しくて、正直機能的にはGoogle Documents以上のものではない。が、サイトの構成になっているというのは非常に見やすい。ソート順をある程度コントロールできるのもよい。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;プロジェクトで共有したいドキュメントとかWikiづくりみたいな文脈で役立つと思う&lt;/strong&gt;。……現状、認証機能が有料化されてるっぽいので使いづらくなったけど。Confluenceが無料である程度使えるようになっちゃってる状態でこれはだいぶつらいぞ？&lt;/p&gt;&#10;&lt;h2 id="不安定不安定"&gt;不安定&amp;amp;不安定&#10;&lt;/h2&gt;&lt;p&gt;しかしながら、始まったばかりのサービスということもあってかもうめちゃくちゃ不安定。タイトルにマルチバイト文字使っただけで死亡する。入れなくなった。消すしかなくなった。ここらへんはまぁそのうちになおるんじゃないかと思っているが。&lt;/p&gt;&#10;&lt;p&gt;あとStorageが無料枠だと10MBしかないうえ、どうもHistoryを残しているらしいのが、それを消そうとするとエラーが出た。最近やってみたらいつの間にかなおっていたが。そういえば最初は謎にログインできなくて、1日たったらできるようになっていた、なんてこともあったなぁ。まぁとにかく謎にエラー出しまくってくれた。めっちゃJavaScriptむき出しのエラーメッセージ出て「あぁ……」ってなったよ。&lt;/p&gt;&#10;&lt;p&gt;ここらへんはまぁ少しずつなおされるものと思うが、正直この状況で課金して本意気の自サイトを構築する人はいないだろうと思う。まぁ熟れるまでにはまだまだ時間がかかるかなぁ。熟れるまでにサービスなくなったりして。&lt;/p&gt;&#10;&lt;p&gt;ちなみに自分のドメインは課金しないと使えない。まぁこの手のサービスでは普通のビジネスモデルなのだが、正直nocode.worksのサブドメインくらいは解放していいと思う。というか最初は解放してたのになぜ使えなくした？&lt;/p&gt;&#10;&lt;h2 id="ざっくりとした使い方"&gt;ざっくりとした使い方&#10;&lt;/h2&gt;&lt;p&gt;こういう状況であるので、機能は今後ものすごい勢いで変わるし、無料と有料のラインも激しく変わるものと思う。というか現在進行系で変わっている。あるいはもうしれっとサービスが消滅するかもしれない。&lt;/p&gt;&#10;&lt;p&gt;それはそれとして使い方を軽く。&lt;/p&gt;&#10;&lt;p&gt;まずログイン。これはGoogleアカウントを使う。Googleのサービスに乗っかってるんだからそりゃそうだよね。以前ログインが失敗することがあったが、いつの間にか成功するようになった。不安定。&lt;/p&gt;&#10;&lt;p&gt;そしたらサイトリストが表示されるので、適当に選択して適当にいじる。まぁ正直使えばだいたいわかるので詳細は書かない。以前はサイト作ろうとしたら「Blog」とか選べたんだが、今（2020/08/02）見たらDocumentationしかないでやんの。まぁ実際、現状はドキュメント見せる用ってのが一番の使いみちになると思う。&lt;/p&gt;&#10;&lt;p&gt;とりあえず以下は一通りできよう。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;フォルダを作る&#10;&lt;ul&gt;&#10;&lt;li&gt;これがそのままサイトのURLに採用される&#10;&lt;ul&gt;&#10;&lt;li&gt;マルチバイト文字使ったら死んだ&lt;/li&gt;&#10;&lt;li&gt;中身がないフォルダを作ってアクセスしたら死んだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ドキュメントを作る&#10;&lt;ul&gt;&#10;&lt;li&gt;これがページの単位になる&lt;/li&gt;&#10;&lt;li&gt;Edit DocumentでGoogle Documentsに飛ばされる。あとはいつもどおり&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;フォルダの中のソート順を指定する&#10;&lt;ul&gt;&#10;&lt;li&gt;時系列にするとブログっぽくなる&lt;/li&gt;&#10;&lt;li&gt;名前順にするとWikiっぽくなる&lt;/li&gt;&#10;&lt;li&gt;任意に決めることもできる&#10;&lt;ul&gt;&#10;&lt;li&gt;これやると昔の個人サイトっぽくなる&#10;&lt;ul&gt;&#10;&lt;li&gt;でも結局手動ソートが一番わかりやすい説ある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ドキュメントの削除はなんとGoogle Driveからの直接削除だ&#10;&lt;ul&gt;&#10;&lt;li&gt;その後、右上の歯車からRe-Sync Driveを実行すると消える&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;いわゆる下書きどうすんの？&#10;&lt;ul&gt;&#10;&lt;li&gt;Hide機能を使う。わかりづらいが、サイドバーでフォルダを選択して歯車からHideを選べる&#10;&lt;ul&gt;&#10;&lt;li&gt;ドキュメント単位でやったらきかなかったんだが？&lt;/li&gt;&#10;&lt;li&gt;復活させるにはSideBarのSettignsから行う。これまたわかりづらい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;公開できる状態になったら右上の歯車からBuild Preview -&amp;gt; Publish&#10;&lt;ul&gt;&#10;&lt;li&gt;これファイル増えたらまぁまぁ時間かかりそう&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;サブドメインの設定は右上の歯車からSettings→Domainsでいじれる。&lt;/li&gt;&#10;&lt;li&gt;Pageの構成は右上の歯車からSettings→Page Layout&#10;&lt;ul&gt;&#10;&lt;li&gt;Basicだとそのまま&lt;/li&gt;&#10;&lt;li&gt;With Titleだとタイトル強制表示&lt;/li&gt;&#10;&lt;li&gt;Full Navigationで次へと前へがつく&#10;&lt;ul&gt;&#10;&lt;li&gt;つまりブログっぽくなる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;認証は右上の歯車からSettings→Securityでできた……が、いつの間にか完全有料&#10;&lt;ul&gt;&#10;&lt;li&gt;正直Googleアカウントの認証くらいは無料で使わせてほしい…これがあったから使い始めたのに&lt;/li&gt;&#10;&lt;li&gt;一応以前設定していたら引き続き使えるようだが……&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;っつーかSettingsがあちこちにあって非常にわかりづらい。それぞれのSettingsで設定できる機能違うという。このへんすごく技術者が設計した感ある。&lt;/p&gt;&#10;&lt;p&gt;面白げなサービスだと思うので適当に使っているが、ほんといつ消滅してもおかしくないなとも思う。この状態で課金してくれる人はちょっといないんじゃないかなぁ。頑張ってお金とろうとしているけれど、正直あと1年は続けないとお金払う人はいないんじゃないかしら……。&lt;/p&gt;&#10;&lt;p&gt;ノーコードの最大の課題ってその信頼性のなさかもしれない。Amazon HoneycodeはさすがにAmazonが出したってことで続けてくれると思うけど（これがGoogleだったらそこまで信用されないよね……GCPで出たら別かもだけど）。まだまだ持続可能なビジネスにはなってないんだなぁ。うーん。&lt;/p&gt;&#10;&lt;p&gt;参考記事&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://paiza.hatenablog.com/entry/2020/07/15/Google%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%A7%E3%83%96%E3%83%AD%E3%82%B0%E3%81%8C%E4%BD%9C%E3%82%8A%E6%94%BE%E9%A1%8C%E3%81%AB%E3%81%AA%E3%82%8BWeb%E3%82%B5%E3%83%BC%E3%83%93" target="_blank" rel="noopener"&#10; &gt;Googleドキュメントでブログが作り放題になるWebサービス「Nocode」を使ってみた！ - paiza開発日誌&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;二週間前の記事なのに、記事の画像が既に古くなっているという&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>無線充電で生活は（少し）変わる</title><link>https://hack-le.com/wireless-charging/</link><pubDate>Sat, 30 May 2020 15:56:21 +0900</pubDate><guid>https://hack-le.com/wireless-charging/</guid><description>&lt;p&gt;ワイヤレスチャージって何に使うの？という話があった。僕はだいぶ前から無線充電（ワイヤレスチャージ、無接点充電）を使っているので、つらつらと答えていたのだけれど、その答えが自分でも驚くほど長くて、あれ、もしかして僕はけっこう充電に一家言あったのかな、と思った。&lt;/p&gt;&#10;&lt;p&gt;充電を有線から無線に切り替えることは、単に線をなくして煩わしさがなくなるということじゃない。ライフスタイルそのものの変革なのだ。&lt;strong&gt;充電とは生活の一部&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;h2 id="皆に知れ渡っているわけではない機能かもしれないが"&gt;皆に知れ渡っているわけではない機能かもしれないが&#10;&lt;/h2&gt;&lt;p&gt;無線充電は一般的になんと言われているのだろう。無線充電というが充電器は有線じゃないか、という話もあるかもしれないが、その理屈だと無線LANルータは有線LANルータじゃないか、ということになってしまうので、無線充電という言葉自体は悪くないように思う。が、使われているかというと、どうかな。&lt;/p&gt;&#10;&lt;p&gt;規格名のQi、無接点充電、無線給電、あるいは横文字でワイヤレスチャージか。ワイヤレスチャージについては、ワイチャという略語もあることを聞いたが、それだと有線充電もワイチャ（ワイヤードチャージ）じゃないか、と気になってしない、個人的にはあまり使いたくない。まぁそもそも横文字をあまり氾濫させたくないという気持ちもある（僕はリモートワークも在宅勤務と呼んでいる）。&lt;/p&gt;&#10;&lt;p&gt;まぁ呼び名で悩んでしまう程度には、まだまだ皆に知れ渡っているとは言い難い機能だと思う。しかし、一昔前に比べれば随分と使われるようになったと思うし、また実際僕も使っている。&lt;/p&gt;&#10;&lt;h2 id="暗闇の中で使いやすい"&gt;暗闇の中で使いやすい&#10;&lt;/h2&gt;&lt;p&gt;僕の場合、&lt;strong&gt;ベッドに無線充電機を置いている&lt;/strong&gt;。なぜかというと、寝る前にベッドでスマートフォンやタブレットをいじることが多いからだ。「どうも眠れないな……スマホでもいじるか。&amp;ldquo;夜 眠れない&amp;quot;で検索……なになに、寝る前にスマホをいじるのはやめましょう、なるほどね」といった具合だ。&lt;/p&gt;&#10;&lt;p&gt;で、ウチには照明用のリモコンもないので、消灯していじっていることも多い。まぁ、あったとしても消灯しているだろうが。で、スマホいじりをやめて就寝に入る時、できれば充電状態にしたいものだが、なにしろ真っ暗闇なので、裏表のないLightningケーブルやUSB Type-Cであっても、一苦労である。&lt;/p&gt;&#10;&lt;p&gt;が、&lt;strong&gt;無線充電ならば、スマートフォンを充電台に置くだけであるので、暗闇の中でのケーブルの挿抜に比べるとだいぶ楽&lt;/strong&gt;だ。ということで、ベッドの枕元に、僕は無線充電器を置いているのである。&lt;/p&gt;&#10;&lt;h2 id="ワイヤレスイヤホンと相性が良い"&gt;ワイヤレスイヤホンと相性が良い&#10;&lt;/h2&gt;&lt;p&gt;置くだけで充電できる、とは中々便利で、AirPodsもWireless Chargeできるモデルにすればよかったと大いに後悔した。&lt;/p&gt;&#10;&lt;p&gt;イヤホンはあまり大きな電力を必要とするわけではないので、充電容量はあまり大きくない。また、&lt;strong&gt;ちょっと使ってちょっと充電する、というシチュエーションもよくある。さらにモノ自体が小さくて、ケーブルの挿抜がちょっと不便、ということもあって、ワイヤレスイヤホンと無線充電は非常に相性が良い&lt;/strong&gt;。無線充電器を定位置にすることでなくしづらくなる、というメリットもある。&lt;/p&gt;&#10;&lt;h2 id="スマートウォッチとの相性は"&gt;スマートウォッチとの相性は……&#10;&lt;/h2&gt;&lt;p&gt;後はスマートウォッチで使うことが考えられるが、僕はこれについてはちょっと否定的だったりする。というのも、無線充電とはいえ、充電器に置く必要があるので、スマートウォッチをどうしても外さねばならないからだ。&lt;strong&gt;スマートウォッチについては充電自体が基本ギルティ&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;p&gt;なので、僕はボタン電池で8ヶ月稼働するWithingsのActiviteというちょいとニッチなアナログ時計盤のスマートウォッチを使っている。WithingsはアプリケーションのUIはそれなりにきれいなのだが（ヘルスケア分野はアプリケーションが終わっているメーカーばかりだ！）、ハードウェアがダメダメで、ActiviteもMade in Swissでそこそこ根が張った割に（スマートウォッチにしては、だけど）、使いはじめて数年で分針がずれ始めたし（デザインはいいんだけど…）、体重計も高いわりに機能が微妙に過ぎる。血圧計に至ってはいつまでたっても日本で売ってくれない。&lt;/p&gt;&#10;&lt;p&gt;ということで、次のスマートウォッチはWithingsを使わないつもりだが（残念）、やはり外して充電する必要がない、あるいはほとんどないものを選ぶと思う。超省電力の電池駆動、省電力+ソーラー充電だろうな。自由空間を経由した無線給電が実現しない限り、Apple Watchを始めとしたガチのスマートなやつは使わないだろう。&lt;/p&gt;&#10;&lt;h2 id="無線充電という浪漫"&gt;無線充電という浪漫&#10;&lt;/h2&gt;&lt;p&gt;顧客が欲しいのはドリルではなく穴だ、とはマーケティングにおける有名な格言だが、一方で「穴ではなくただ無駄にカッコいいドリルが欲しい顧客も一定数いる」というのもやはりこの一筋縄ではいかない世界の現実であり、僕なんかは多分にそういう傾向が強いことはあるので、割と無理やり用途を作った感はないでもない。&lt;/p&gt;&#10;&lt;p&gt;個人的にはそもそもケーブル自体がギルティであり、可能な限り廃したいと思っているが、まぁ別にあったところで大した実害もない。給電用途以外は可能な限り無線にしているが、そもそも機材の数が多すぎるので結局ごちゃごちゃしているし。ゴチャゴチャ度が10も20も、あまり変わらんだろう。引っ越しの時は多少楽だが、そう何度もあることではないし。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、本当に使い所のないものなら、なんだかんだで使わなくなるはずだ。かつて、そういうことがあった。&lt;/p&gt;&#10;&lt;h2 id="ライフスタイルに根ざした充電のあり方"&gt;ライフスタイルに根ざした充電のあり方&#10;&lt;/h2&gt;&lt;p&gt;置くだけ充電という言葉が喧伝されたのは何年前のことだろう。無線充電自体は、だいぶ前に流行りかけた、あるいはメーカーが流行らせようと仕掛けていた時期があった。Googleの Nexus 7 2013モデルにQiが搭載されたあたりの頃だ。&lt;/p&gt;&#10;&lt;p&gt;あの頃は微妙に無線充電対応モデルが出ていて、Qi対応のモバイルバッテリーやデジカメなんかがあった。いや、今もあるんだが。&lt;/p&gt;&#10;&lt;p&gt;でも微妙だったな。モバイルバッテリーにせよデジカメにせよタブレットにせよ、正直無線充電との相性がいいとはちょっと言い難いように思う。無線充電は頻繁に充電するもの（ワイヤレスイヤホンなど）や、ケーブルの挿抜が難しい（環境が暗闇、モノ自体が小さいなど）もの、防水仕様、定位置が決まっているもの（電動歯ブラシなど）なんかで威力を発揮するように思うが、モバイルバッテリーもデジカメもタブレットも、それらの条件に当てはまるかというと、うーん。&lt;/p&gt;&#10;&lt;p&gt;なんか&lt;strong&gt;機能を搭載しやすいところに搭載していみました、という感がありありとしていた&lt;/strong&gt;な。実際、Googleはしばらくして結局Nexusシリーズから無線充電を取っ払ってしまうし。&lt;/p&gt;&#10;&lt;p&gt;そこへやってきたのが、僕らのApple。iPhoneは8から無線充電に対応している。Apple Watchは無線充電前提だし、AirPodsも相性がいい。Apple製品を使っていると、自然と無線充電を使いたくなってくる。一方、iPadはまだ無線充電に対応していない。これは、便利に使うシーンが現状提案できないからだろう。真っ先にタブレットに搭載したGoogleとは偉い違いである。&lt;/p&gt;&#10;&lt;p&gt;ここらへん、ハード屋でUX指向のAppleの良い点がでたと思う。最近はApple機器の間で相互に給電できるような機能の噂もあるが、非常に期待できる。&lt;strong&gt;Appleはライフスタイルに根ざして、無線充電のあり方を提案していると思え、非常に好感触&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;p&gt;充電とは地味なものではあるけれど、なくてはならないもので、&lt;strong&gt;単なる機能を超えた生活様式の一部&lt;/strong&gt;であると思う。有線系と違い、技術的にも難しいせいか、無線充電のアクセサリーはまだまだ微妙で質も良いとは言い難いものが溢れている。各社メーカーの今後に期待したい。&lt;/p&gt;</description></item><item><title>httpでPOSTする受け口をSAM CLI + API Gateway + Lambdaで作る</title><link>https://hack-le.com/httppost/</link><pubDate>Tue, 28 Apr 2020 17:09:58 +0900</pubDate><guid>https://hack-le.com/httppost/</guid><description>&lt;p&gt;httpで何かPOSTしてその内容を確認したい時がある。しかしそのためだけにわざわざWebサーバーたてるのも面倒。ということで、API Gateway + Lambdaでさらっと確認できるようの受け口を作りたい。&lt;/p&gt;&#10;&lt;p&gt;SAM CLIを使って構築する。楽。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;macOS 10.15.4&lt;/li&gt;&#10;&lt;li&gt;AWS SAM CLI 0.47.0&lt;/li&gt;&#10;&lt;li&gt;Python 3.8&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;どうでもいいけどほとんどクラウド環境になってくると、ローカルの環境書いても片手落ち感すごい。&lt;/p&gt;&#10;&lt;h2 id="受け口を作る"&gt;受け口を作る&#10;&lt;/h2&gt;&lt;p&gt;ファイルを準備する。最初に大まかな構成を書く。なお、環境にもあるとおり、Lambda関数はPython 3.8を想定している。ディレクトリ名はなんでもいいが、そのまま使えば設定ファイルもコピペでできる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── post_recv&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── app.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── requirements.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── samconfig.toml&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── template.yaml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="post_recvapppy"&gt;post_recv/app.py&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def lambda_handler(event, context):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(event)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(event[&amp;#39;body&amp;#39;])&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;statusCode&amp;#34;: 200,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;body&amp;#34;: json.dumps({&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;message&amp;#34;: event[&amp;#39;body&amp;#39;],&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }),&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="post_recvrequirementstxt"&gt;post_recv/requirements.txt&#10;&lt;/h3&gt;&lt;p&gt;特にライブラリはいらないので空ファイルでよい。ないとsam buildで怒られる。&lt;/p&gt;&#10;&lt;h3 id="templateyaml"&gt;template.yaml&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AWSTemplateFormatVersion: &amp;#39;2010-09-09&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Transform: AWS::Serverless-2016-10-31&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Description: &amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; test-api&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Sample SAM Template for test-api&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Globals:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Function:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timeout: 3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Resources:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; PostRecvFunction:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CodeUri: post_recv/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Handler: app.lambda_handler&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Runtime: python3.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Events:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HelloWorld:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Path: /post&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Method: post&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="samconfigtoml"&gt;samconfig.toml&#10;&lt;/h3&gt;&lt;p&gt;以下で準備する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sam build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sam deploy --guided&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; スタック名適当に(後でも使うので覚えておく)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; region適当に。東京regionは ap-northeast-1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 後は enter でOK&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2回目以降のsam deployは&amp;ndash;guided なしでよい。&lt;/p&gt;&#10;&lt;h2 id="確認"&gt;確認&#10;&lt;/h2&gt;&lt;p&gt;API Gatewayから作成したendpointを確認する。コンソール画面から確認してもよいが、ここではコマンドを用いる（参考「&lt;a class="link" href="https://qiita.com/moru3/items/0d429b1169befcaf2deb" target="_blank" rel="noopener"&#10; &gt;curlでJSONをPOSTする - Qiita&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws apigateway get-rest-apis&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;先の手順で作成したstack名がnameになっているもののidを確認する。で、以下を投げる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -X POST -d &amp;#34;{\&amp;#34;key\&amp;#34;:\&amp;#34;val\&amp;#34;,\&amp;#34;key2\&amp;#34;:\&amp;#34;,val2\&amp;#34;}&amp;#34; &amp;#34;https://確認したID.execute-api.ap-northeast-1.amazonaws.com/Prod/post&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; {&amp;#34;message&amp;#34;: &amp;#34;{\&amp;#34;key\&amp;#34;:\&amp;#34;val\&amp;#34;,\&amp;#34;key2\&amp;#34;:\&amp;#34;,val2\&amp;#34;}&amp;#34;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CloudWatchからも確認可能。&lt;/p&gt;&#10;&lt;h2 id="後片付け"&gt;後片付け&#10;&lt;/h2&gt;&lt;p&gt;使いおわったらスタックを始末する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws cloudformation delete-stack --stack-name スタック名&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>DynamoDBで多対多のテーブル設計</title><link>https://hack-le.com/dynamodb-many-to-many/</link><pubDate>Sun, 26 Apr 2020 03:51:14 +0900</pubDate><guid>https://hack-le.com/dynamodb-many-to-many/</guid><description>&lt;p&gt;DynamoDBの設計を始めてからたいていの人が引っかかるであろう、DynamoDBにおける多対多(many-to-many relationship)の対応について、つらつらとメモする。&lt;/p&gt;&#10;&lt;p&gt;AWSのドキュメントにベストプラクティスがあるので、それについて書き連ねるだけではある。&lt;/p&gt;&#10;&lt;h2 id="dynamodbの2番目くらいの壁"&gt;DynamoDBの2番目くらいの壁&#10;&lt;/h2&gt;&lt;p&gt;ウキウキしながらDynamoDBを始めた後、だんだん「あれ？これクエリめっちゃ厳しくない？」ということに気づき、その制約に愕然とするパターンの一つが、いわゆる多対多の実装だと思う。RDBなら中間テーブル作ってリレーション貼って正規化すればよし、だけれど、同じことをDynamoDBですると、めちゃくちゃクエリ投げないといけないことにハタと気づく。すごく思う。joinしたい。&lt;/p&gt;&#10;&lt;p&gt;もちろんDynamoDBにjoinはない。ああなるほど、KVS、Key Value Storeってそういう……いや知っていたんだけれど、ああ、そうか……などと思う。&lt;/p&gt;&#10;&lt;p&gt;どうすりゃいいのか。大丈夫、多対多の解決なんてメジャーなトピック、当然考えら得られている。というか、AWSの公式ドキュメントに目的ズバリの項目がある。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html" target="_blank" rel="noopener"&#10; &gt;多対多の関係を管理するためのベストプラクティス - Amazon DynamoDB&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;あるにはあるが、その書かれ方は例によって例のAWS公式ドキュメントな感じなので、初心者がこれ読んですぐに理解できるかはまた別の話ではある。なので、この記事がある。&lt;/p&gt;&#10;&lt;h2 id="ユーザーとグループの関係で考えてみる"&gt;ユーザーとグループの関係で考えてみる&#10;&lt;/h2&gt;&lt;p&gt;ここで取り上げるのは、最初のAdjancy List Design Patter（隣接関係のリスト設計パターン）だ。これは実際やってみると、RDBで中間テーブルを置く結果とほぼ重なるのだが（僕は不勉強で隣接リストをきちんと理解できていないが、多分本質的に同じ考え方なんだろうと思う）、その見え方は随分と異なる。&lt;/p&gt;&#10;&lt;p&gt;具体的な手法の話は具体的な例示を元に考えるに限る。実際、AWSのドキュメントも具体例を提示している。なので、僕もそうして考える。&lt;/p&gt;&#10;&lt;h3 id="典型的な多対多"&gt;典型的な多対多&#10;&lt;/h3&gt;&lt;p&gt;今回は、ユーザーとグループをDynamoDBで実現することを考えてみる。グループにはもちろん複数のユーザーが所属する。一方、ユーザーもまた複数のグループに所属することができる。理論上、ユーザーのいないグループやグループに所属しないユーザーも存在する。&lt;/p&gt;&#10;&lt;p&gt;つまり、ユーザーとグループは典型的な多対多の関係である。&lt;/p&gt;&#10;&lt;h3 id="中間テーブル作戦"&gt;中間テーブル作戦&#10;&lt;/h3&gt;&lt;p&gt;これをRDBで考えるならば、中間テーブルを用意して1対多の関係に持ち込むだろう。つまり、ユーザーテーブルとグループテーブルに加えて、ユーザーとグループのリンクを示した中間テーブルを作るのである。で、中間テーブルはユーザーテーブルとグループテーブルのそれぞれと多対1の関係を持つ。つまりは以下のようになる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2020/04/Untitled-Diagram-1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;よくある感じ&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;よくあるパターンだ。&lt;/p&gt;&#10;&lt;p&gt;この手法はDynamoDBでも機能する。中間テーブルではuser_idをPK、group_idをSKとし、一方またgroup_idをGSI-PKとするのである。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2020/04/Untitled-Diagram-1-1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;中間テーブル作戦をDynamoDBで&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;そうすることで、user_idが所属するgroup_idも、またgroup_idに所属するuser_idもクエリで引っ張ってこれる、というわけだ。&lt;/p&gt;&#10;&lt;p&gt;確かに機能するが、あまりDynamoDBらしくはない。というか思いっきりRDB的に思える。DynamoDBのベストプラクティスには、「&lt;strong&gt;DynamoDB アプリケーションではできるだけ少ないテーブルを維持する必要があります。設計が優れたアプリケーションでは、必要なテーブルは 1 つのみです。&lt;/strong&gt; 」とある。なのに、いきなりテーブル3つ作ってる。うーん。&lt;/p&gt;&#10;&lt;p&gt;これでいいのだろうか、などと思いながら、実際にアプリケーションを開発し始めると、問題が起きる。&lt;/p&gt;&#10;&lt;p&gt;たとえば、ユーザーが所属するグループの一覧を表示したい時を考えてみよう。この場合、中間テーブルでuser_idをPKにして、queryすればいい。そうすると、group_idの一覧が取得できる。そうしたら、group_idでgroupsテーブルにget_itemなクエリを投げるのだ。&lt;/p&gt;&#10;&lt;h3 id="n--1問題"&gt;n + 1問題&#10;&lt;/h3&gt;&lt;p&gt;この方法は機能する。機能するが、すぐに問題だとわかる。ユーザーの所属するグループが5つくらいならば、5回クエリを投げればよいが、もし100のグループに所属していたら、100回クエリを投げる必要がある。おおぉ。&lt;/p&gt;&#10;&lt;p&gt;この問題は俗にn+1問題と言われる。やってみればわかるが、明らかにパフォーマンスが悪い。当たり前だ、余計な通信コストが大きすぎる。負荷も大きい。&lt;/p&gt;&#10;&lt;p&gt;まぁ、実際のところけっこうこれでもなんとかなる。が、どう考えてももっといい方法がある気がするわけだ。で、実際ある。先の公式ドキュメントのリンクがその内容で、ここからはそれについて書いていく。&lt;/p&gt;&#10;&lt;h3 id="adjancy-list-design-pattern隣接リストパターン"&gt;Adjancy List Design Pattern(隣接リストパターン)&#10;&lt;/h3&gt;&lt;p&gt;公式ドキュメントでは多対多の解決の一例としてAdjancy List Design Pattern(隣接リスト)を提案している。これは何か、多分グダグダいうより見たほうが早い。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;user_id (PK)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;group_id (SK, GSI-PK)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;attributes&amp;hellip;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userAの詳細情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupAの情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupBの情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userBの情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;userB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupAの情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupAの詳細情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupBの詳細情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;groupCの詳細情報&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;em&gt;DynamoDBで多対多を実装&lt;/em&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;たった1つのテーブルで構成している。特徴的なのは、user_id = group_id になっているアイテムだ。初見ではギョッとするかもしれない。このテーブルは、以下のようになっている。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PK=SK(GSI-PK)=user_idのとき、ユーザーを示す。&lt;/li&gt;&#10;&lt;li&gt;PK=SK(GSI-PK)=group_idのとき、グループを示す。&lt;/li&gt;&#10;&lt;li&gt;PK=user_id, SK(GSI-PK)=group_id のとき、user_idの所属するグループを示す&#10;&lt;ul&gt;&#10;&lt;li&gt;つまり、group_idに所属するuser_idの数だけ冗長である&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;したがって、この表は以下のように読み解ける。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;userAはgroupA, Bに所属している&lt;/li&gt;&#10;&lt;li&gt;userBはgroupAに所属している&lt;/li&gt;&#10;&lt;li&gt;groupCは誰も所属していない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;最初は違和感を感じるが、よく見るとこれは中間テーブルにそのまま属性をもたせたようなものである。やってみるとこれはとてもよく考えられた設計であることがわかる。&lt;/p&gt;&#10;&lt;p&gt;たとえば任意のユーザーについて詳細情報を知りたい時は、PK=SK=user_id としてget_itemしたら良い。任意のグループの詳細情報であれば、PK=SK=group_id だ。&lt;/p&gt;&#10;&lt;p&gt;あるユーザーの所属するグループの情報ならば、PK=user_id でクエリをかける。逆に、あるグループに所属するユーザーの情報ならば、GSI-PK(SK)=group_id でクエリをかける。&lt;/p&gt;&#10;&lt;p&gt;ほしい情報をだいたいクエリ一発で取れるようになっているのだ。なるほど、よくできている。が、いくつかの問題もある。&lt;/p&gt;&#10;&lt;h3 id="冗長性の問題"&gt;冗長性の問題&#10;&lt;/h3&gt;&lt;p&gt;それぞれのアイテムには、詳細ではないが一覧表示程度には十分な情報が含まれている。これらの情報は冗長なので、データベースとしてはその分余分に容量を食うことになる。クエリの通信コストにもかかるし、どれくらい冗長させるかは考えどころだ。&lt;/p&gt;&#10;&lt;p&gt;また、整合性の問題もある（というかこちらが大きいだろう）。整合性が絶対に必要ならば裏で非同期処理をかましたり、バッチ処理したり、リアルタイム性もいるならTransaction処理が必要かもしれない（DynamoDBも10アイテムならいける）。ちょっとくらい間違えていても問題なくて、かつ頻繁に更新がかかるなら、時々整合性が取れない状態になることを覚悟で特に処理しない、という方法も考えられる。&lt;/p&gt;&#10;&lt;h3 id="一覧の問題"&gt;一覧の問題&#10;&lt;/h3&gt;&lt;p&gt;また、このやり方だとユーザー一覧とかグループ一覧が厳しい。PK=SKとせず、たとえばユーザー詳細のアイテムはPK=user_idでSK(GSI-PK)=&amp;ldquo;user&amp;quot;で固定という風にすると、GSI-PK(SK)=&amp;ldquo;user&amp;quot;とした時にユーザー一覧を引っ掛けることができる。ただし、この場合一つのパーティション(GSI-PK=user)に情報が集中することにもなる。だが条件によっては一考の余地がある。強引だが、専用のテーブルを冗長覚悟で作ってしまうのも方法の一つだろう。&lt;/p&gt;&#10;&lt;h3 id="正解はない"&gt;正解はない&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;DynamoDBの設計に絶対の正解はなく、サービスの要件によるとしか言えない&lt;/strong&gt;。ここで思い出すのは「&lt;strong&gt;答えが必要な質問が分かるまで、スキーマの設計を開始しないでください。&lt;/strong&gt; 」という公式ドキュメントの無下な一文である。まぁそれはこういうことなのだろう。逆に言うと、要件がわかっていれば、うまい設計が考えられるはずなのだ。&lt;/p&gt;&#10;&lt;h2 id="目指すは美しさより力強さ"&gt;目指すは美しさより力強さ&#10;&lt;/h2&gt;&lt;p&gt;ということで、このパターンは多対多の解決として素晴らしく機能することがわかるのだが、わかったうえで、なんかこう、&lt;strong&gt;強引なインテリ&lt;/strong&gt;って感じ。確かにこれでできるけどマジか、みたいな。&lt;/p&gt;&#10;&lt;p&gt;結果をよくよく見ていると、&lt;strong&gt;中間テーブルに重複データ覚悟で属性をもたせている、ように見える&lt;/strong&gt;。というか、多分本質的にはそういうことなんじゃなかろうか。僕は不勉強で隣接リストについてきちんと理解できていないのだが、中間テーブルとこの隣接リストは概念的に同じようなことをしようとしているような。隣接って、こういうことかな。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2020/04/Untitled-Diagram-2.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;隣接のイメージ&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;矢印一つで示せる関係。なんか曖昧で申し訳ないんだが、多分根底の理屈は一緒なんだと思う。&lt;/p&gt;&#10;&lt;p&gt;しかし、その見え方は大きく異なる。中間テーブルはその名のとおり中間であって、主眼に置かれることはあまりない。一方で、DynamoDBにおいてはこれこそが本体、主役である。&lt;/p&gt;&#10;&lt;p&gt;結果的に同じようなものであったとしても、&lt;strong&gt;根本的な思想が違う&lt;/strong&gt;ということだろう。よくできたRDBの設計は美しい。一方、DynamoDBを始めNoSQL系DBのよくできた設計は、美しいというより、力強い、という表現が個人的にはしっくりとくる。そんなことまで考えていたのか！なんて頼もしいんだ！みたいな。力強い設計を目指したい。&lt;/p&gt;</description></item><item><title>S3に指定のバケットにファイル生成したらSQSに通知</title><link>https://hack-le.com/s3-sqs/</link><pubDate>Fri, 17 Apr 2020 19:17:15 +0900</pubDate><guid>https://hack-le.com/s3-sqs/</guid><description>&lt;p&gt;やることはタイトルまんま。まぁAWSのドキュメント見たらあるのだが、けっこうあちこちに情報も散らばっていて、色々と見て回ることになったので、参考URLを残しつつメモ。Webコンソールから操作すること前提。&lt;/p&gt;&#10;&lt;h2 id="sqs側の設定"&gt;SQS側の設定&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/enable-event-notifications.html#enable-event-notifications-types" target="_blank" rel="noopener"&#10; &gt;S3 バケットのイベント通知を有効化および設定する方法 - Amazon Simple Storage Service&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;キューを作成し、「アクセス許可」タブより「ポリシードキュメントの編集（高度）」より以下のように編集。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Version&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2012-10-17&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Id&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;適当なID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Statement&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Sid&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;example-statement-ID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Principal&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;AWS&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;SQS:SendMessage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;作成したキューのARN&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Condition&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;ArnLike&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;aws:SourceArn&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;arn:aws:s3:*:*:通知元のS3のバケット名&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;こういう編集するところを明示する時、日本語使うと便利だよね。&lt;/p&gt;&#10;&lt;h2 id="s3側の設定"&gt;S3側の設定&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/ways-to-add-notification-config-to-bucket.html" target="_blank" rel="noopener"&#10; &gt;チュートリアル例: バケットを通知用に設定する (メッセージの宛先: SNS トピックおよび SQS キュー) - Amazon Simple Storage Service&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/NotificationHowTo.html#grant-destinations-permissions-to-s3" target="_blank" rel="noopener"&#10; &gt;Amazon S3 イベント通知の設定 - Amazon Simple Storage Service&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Web通知元にしたいバケットにアクセスして、「プロパティ」タブより下部の詳細設定の「イベント」を選択、「通知の追加」。&lt;/p&gt;&#10;&lt;p&gt;適当な「名前」をつけて、「イベント」は「すべてのオブジェクト作成イベント」、プレフィックス、サフィックスは任意。送信先として、作成した受け側のSQSのキューを選択。で、「保存」。この時権限（上のSQSでの設定）がないとエラーが出る。&lt;/p&gt;&#10;&lt;h2 id="通知の内容"&gt;通知の内容&#10;&lt;/h2&gt;&lt;p&gt;この状態でS3にてファイルを作成すると、その内容がSQSに通知される。ちなみに通知内容は、時間とObjectのkey、すなわちファイル名、ファイルの中身まではわからない。まぁ必ずしもテキストファイルじゃないしそりゃそうか。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>Dropbox Plus + 外付けSSD でNASいらずに挑戦中</title><link>https://hack-le.com/dropbox-plus-nas/</link><pubDate>Sun, 08 Mar 2020 12:13:42 +0900</pubDate><guid>https://hack-le.com/dropbox-plus-nas/</guid><description>&lt;p&gt;「&lt;a class="link" href="https://hack-le.com/dropbox-plus/" &gt;Dropbox Plusを買うか買うまいか – 或る阿呆の記&lt;/a&gt;」の記事でDropbox Plusを買うか買わないか悩んでいたが、結局買ってしまった。決め手はなんだったのか覚えていないが、自宅のシステムを思いっきり替えたかったのだろうと思う。一言で言うと、NASを使わないようにしようと考えたのだ。なにより、データを整理するきっかけにしたかった。&lt;/p&gt;&#10;&lt;p&gt;一ヶ月ほどあれこれいじっていて、思ったよりも便利なところもあれば、不便なところもあり、まだNASは置いたままであるが、理屈の上では完全移行もできそうだ。&lt;/p&gt;&#10;&lt;h2 id="nasいらずへの道"&gt;NASいらずへの道&#10;&lt;/h2&gt;&lt;p&gt;Dropbox Plusを購入した。これにより、僕は生涯Dropboxにお金を払い続けることになる……とは言い過ぎで、もちろん嫌になったらNASに出戻ることもできるが、まぁ恐らくそれはないだろう。&lt;/p&gt;&#10;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07Z5SNGB1&amp;linkId=4046ac89fbd00e3032b489d2c91e8d3b"&gt;&lt;/iframe&gt;&#10;&lt;p&gt;Dropbox Plusは最大で2TBまでデータを保存できる。2TB程度ならば、（以前に比べれば）安くなった外付けSSDでまかなえる。まぁ安くなったとはいえ、現在市場価格で25,000円ほどはするので、ストレージに金を払う文化のない人はもちろん、ハードディスクの価格と比較してしまえば、もちろん高い。しかしポータブルSSDの2TBが25,000円は、自分の感覚では「そんなに安くなったのか」といったところだ。&lt;/p&gt;&#10;&lt;p&gt;2TBもあれば、人ひとりのデータの保管庫としては十分に過ぎる。僕のNASは3TBほどデータがあったが、これを機にデータの整理をするのも良いと思った。明らかに、HDの肥やしになっているデータが多すぎる。ゴミデータに本当に必要なデータが埋もれているような気がしていた。一人の人間が管理できるデータの容量は、せいぜい1TB程度じゃなかろうかと思う今日この頃である。&lt;/p&gt;&#10;&lt;p&gt;データを消すのは心的エネルギーが必要だが、新しいシステムを構築し運用するため、と思えば頑張れるというものだ。&lt;/p&gt;&#10;&lt;p&gt;ということで、NASにあったデータを大量削除しつつ、外付けSSDに移動させた。&lt;/p&gt;&#10;&lt;h2 id="便利になったこと"&gt;便利になったこと&#10;&lt;/h2&gt;&lt;p&gt;実際使ってみて、便利だと思ったことを書いていく。&lt;/p&gt;&#10;&lt;h3 id="差分バックアップ"&gt;差分バックアップ&#10;&lt;/h3&gt;&lt;p&gt;Dropboxはファイルを誤って削除しても、期限内であれば復元させることができる。おっちょこちょいの自分は既に何度かこの機能に助けられた。&lt;/p&gt;&#10;&lt;p&gt;復元機能があるからこそ、心理的に安心して消せるということもわかった。どうしても必要なら後で復元させればいい、と思っていらないだろうデータを消すのである。そしてそういうデータはたいてい、消してから5秒後には持っていたことさえ忘れているものだ。&lt;/p&gt;&#10;&lt;h3 id="ローカルのスピード"&gt;ローカルのスピード&#10;&lt;/h3&gt;&lt;p&gt;内部ストレージではなく外付けSSDの中に置いているので、純粋にローカルとは言えないかもしれないが、ネットワーク越しではないという程度の意味である。&lt;/p&gt;&#10;&lt;p&gt;これは非常に大きい。特にMacはなんだか知らないがSambaサーバーとのやりとりがWindowsと比較してやけに遅かった（ある程度対策はしているがそれでも遅い「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB) – 或る阿呆の記&lt;/a&gt;」）。なので、NASにあるデータにアクセスするのは若干気重だったのだが、遠慮なくアクセスできるようになった。&lt;/p&gt;&#10;&lt;h3 id="災害対策"&gt;災害対策&#10;&lt;/h3&gt;&lt;p&gt;これまでは、火事や地震などで物理的にハードディスクを破損したらどうしようもなかった。かといって遠隔地にバックアップメディアを置くのもしんどい話だ。実家などを使えばできないことはないのだが、こういうことで目に見える費用をケチって他人（家族といえど他人である）を絡ませると結局高くつくものだ。&lt;/p&gt;&#10;&lt;p&gt;が、&lt;strong&gt;これからは災害の心配はほぼしなくてよい&lt;/strong&gt;。恐らくDropboxの分散ストレージが破壊される可能性は、僕の家がどうかなる可能性より遥かに低い。まぁゼロとは言えないのだが、&lt;strong&gt;分散ストレージが逝くってことはなんだか地球がヤバイ気がするし、明日車に轢かれる心配でもしたほうがまだしも現実的&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;p&gt;……そこまでして保存しておくべきデータか？というのは置いといて。&lt;/p&gt;&#10;&lt;h3 id="対応するアプリケーションの豊富さ"&gt;対応するアプリケーションの豊富さ&#10;&lt;/h3&gt;&lt;p&gt;Dropboxともなれば、ファイルを扱うアプリケーションの多くが対応している。たとえば自分はComicGlassというiOSアプリケーションで漫画を読むことが多いが、当然Dropboxには対応しているので、どこからでもクラウド書庫にアクセスできるようになった。&lt;/p&gt;&#10;&lt;p&gt;いやまぁその程度のことはNASでもちゃんとやればできるのだが、ちゃんとやるのが面倒くさいものである。昔は興味本位でVPNサーバーをたてたこともあったが（そしてそれは出張の時などに役立った）、今となっては面倒臭さが勝る。&lt;/p&gt;&#10;&lt;h3 id="外付けssdを買う口実になった"&gt;外付けSSDを買う口実になった&#10;&lt;/h3&gt;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07Z5SNGB1&amp;linkId=e4bb119429bad57de0d5b963d06a68b2"&gt;&lt;/iframe&gt;&#10;&lt;p&gt;安くなったとはいえやはり2TBのSSDとなると絶対的にはそこそこのお値段がするので、一庶民がサクッとポチれるものではない。尻込みする自分の背中を押してくれた。おかげで&lt;strong&gt;SSDを買う勇気を持てた&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;何を言っているのか分かる人だけ分かればよいと思っている。&lt;/p&gt;&#10;&lt;h3 id="データを捨てるきっかけになった"&gt;データを捨てるきっかけになった&#10;&lt;/h3&gt;&lt;p&gt;便利になったとは違うかもしれないが、&lt;strong&gt;一番良かったと思うのはデータを捨てられたこと&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;p&gt;前述のように僕は3TBほどデータを溜め込んでいたが……3TBっていうのは、人一人が持つには手に余るものデータ量なのだなと、よくわかった。もう絶対に見ない動画とか、音楽とか、本とか、それは思い出かもしれないし、データに質量はないかもしれないけれど、それでもやっぱりノイズなのはたしかなんだなぁ、と。そして、&lt;strong&gt;ノイズは大切なものを見えづらくするんだなぁ&lt;/strong&gt;、と。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;デジタル情報も、整理されていないといけない&lt;/strong&gt;んだな、と強く思う。&lt;/p&gt;&#10;&lt;h2 id="まだnasを捨てきれないところ"&gt;まだNASを捨てきれないところ&#10;&lt;/h2&gt;&lt;p&gt;Dropboxはやはり便利だ次世代だなどと思う一方で、まだNASを処分できていない。その理由について書き連ねる。&lt;/p&gt;&#10;&lt;h3 id="lan内ストリーミング"&gt;LAN内ストリーミング&#10;&lt;/h3&gt;&lt;p&gt;僕はiPadからストリーミングで動画を再生したり書籍を読んだりするが、さすがにこればかりはLAN内ストリーミングのほうがよかった。まぁLANと比べるのは酷というものだが……。&lt;/p&gt;&#10;&lt;p&gt;だが、LAN内ストリーミングは僕にとってはなくてはならないものである。特に動画のストリーミングは是非とも必要だ。&lt;/p&gt;&#10;&lt;p&gt;まぁ僕はMac miniの電源を基本的に落とさないので、Macにアクセスすればよい話なのだが、どういうわけかそれが現状うまくいっていない。だがうまくいかないはずはないので、もうちょっと頑張ればそのうち快適に使えるはずなんだが……。&lt;/p&gt;&#10;&lt;h3 id="バックアップ"&gt;バックアップ&#10;&lt;/h3&gt;&lt;p&gt;物理的な障害の心配は確かにほとんどなくなったと言ってよいが、それはそれとして、Dropboxが暴走して、勝手にファイルを削除するなどという暴挙に出る可能性はないでもない。また、やはりシステムの不具合というのは起こりうるものだから、ファイルが破壊される可能性だってあるだろう。また、ローカル側のストレージが中途半端に破損して、ファイルが壊れたりした場合、いったいどうなってしまうのか、という不安もある。&lt;/p&gt;&#10;&lt;p&gt;なので、&lt;strong&gt;結局バックアップはいる&lt;/strong&gt;のである。まだバックアップの運用が決まっていないので、バックアップ代わりにNASが残っている。&lt;/p&gt;&#10;&lt;h3 id="データ"&gt;データ&#10;&lt;/h3&gt;&lt;p&gt;なんだかんだ言って、まだ完全に捨てきれていない。多分、ほとんど気持ちの問題なのはわかっている。わかっているが、時間が必要なんだ。&lt;/p&gt;&#10;&lt;h2 id="人間が管理できるデータなんてそんなに多くない"&gt;人間が管理できるデータなんてそんなに多くない&#10;&lt;/h2&gt;&lt;p&gt;とまぁつらつら書いてきたが、もうしばらくしたら完全移行の目処が立つと思う。いまのところ、LAN内ストリーミングがうまくいっていないのがネックだが、できないはずはないし。&lt;/p&gt;&#10;&lt;p&gt;今回のこの大移行は、「&lt;strong&gt;人間が管理できるデータはせいぜい1TB&lt;/strong&gt;」という考えに基づいて行っている（そう思うのは僕が動画を扱わないから、というのもあるだろう）。NASは大容量が手軽に実現できてしまうので、ついついなんでもかんでもぶちこんでしまう。で、放置する。放置されたデータはノイズとなり、本当に必要なものを隠す。&lt;/p&gt;&#10;&lt;p&gt;断捨離やミニマリズムは極端な思想だと思うが、参考になることはあるところはあって、それはアナログだけではなくデジタルでも言えることだと思う。見えづらいだけに、アナログよりも根は深く本質に近いかもしれない。&lt;/p&gt;&#10;&lt;p&gt;昔は、データをどれだけ増やせるかばかりを考えていたが、最近は、データをどれだけ減らせるかばかり考えている。なんだかんだで、それだけの時間を生きてきた、ということかもしれない。&lt;/p&gt;</description></item><item><title>Dropbox Plusを買うか買うまいか</title><link>https://hack-le.com/dropbox-plus/</link><pubDate>Sat, 01 Feb 2020 13:20:16 +0900</pubDate><guid>https://hack-le.com/dropbox-plus/</guid><description>&lt;p&gt;ソースネクストのDMで、Dropbox Plus 3年版の割引パッケージがあることを知った。定期的にやっているようだが、標準価格34,800円のところ28,800円（税別）になるらしい。これはAmazonでも33,800円で同等のものがタイムセールで売られていたし、ちょっと調べてみたら同じような価格で買っている人がいるので、確かに安いのだろう。&lt;/p&gt;&#10;&lt;p&gt;28,800円/3年ということは、年額にすると9,600円ほどだ。なので月々800円程度ということになる。税込みなら約900円か。普通に契約すれば1,200円/月（税別？）だし、価格としては悪くないと思うが、買うか、買うまいか……。あれば便利だとは思うものの、なけりゃないでどうにかなるだけに悩ましい。&lt;/p&gt;&#10;&lt;p&gt;（2020/02/09 追記）買った。&lt;/p&gt;&#10;&lt;h2 id="dropbox-plusのメリット"&gt;Dropbox Plusのメリット&#10;&lt;/h2&gt;&lt;p&gt;Dropboxは細かなところで他社クラウドと比べても非常に優れたオンライン・ストレージサービスだ。その有料プランは十分に魅力的である。が、便利すぎて無料の通常版でも十分につかえてしまうのも現実。&lt;/p&gt;&#10;&lt;p&gt;まずスペックとして、通常版と比較してどのようなメリットがあるのかを整理したい。&lt;/p&gt;&#10;&lt;h3 id="複数端末で使える"&gt;複数端末で使える&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;すべての端末で使える&lt;/strong&gt;ことは大きい。昔は台数無制限で使えたものだが、最近は費用を回収する段階に入ってきたのか、Dropboxは使用できる端末に制限がある。これは仕方のないことだと思う。なので、自分はDropboxはiPadとMac miniにのみ入れているが、Plusを利用すると気兼ねなくiPhoneとMacBook Proにも入れることができるようになるわけだ。最近はホビーでは使用していないが、Linuxでも使えるし。&lt;/p&gt;&#10;&lt;p&gt;ただまぁ、標準的な用途においてはGoogle Driveが台数無制限で使えるので、あまり困っていなかったりする。&lt;/p&gt;&#10;&lt;h3 id="容量の増加2tb"&gt;容量の増加(2TB)&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;容量の増加はわかりやすく素晴らしい&lt;/strong&gt;。2TBは大きい。相当の人が、すべてのデータを置いておけるのではないか。まぁ僕は2TBだとまだ足りないのだが、しかし&lt;strong&gt;データの管理・運用方針に変化を与えるには十分な容量&lt;/strong&gt;である。正直1TBだったら考慮にも値しなかったのだが、2TBとなると考える。&lt;/p&gt;&#10;&lt;p&gt;もっとも、僕は招待やらなにやらを過去に相当していて、23GBほど容量が使えるので、これも標準的な用途においては困っていない。&lt;/p&gt;&#10;&lt;h3 id="最強のバックアップ"&gt;最強のバックアップ&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;一番の利点は、最強のバックアップになるということ&lt;/strong&gt;ではないだろうか。誤って削除してしまうなどしても、だいたい復元できる。つまり&lt;strong&gt;標準で差分バックアップしてくれている&lt;/strong&gt;わけだ。しかも世界中にデータを分散してくれているだろうから（AWSではなく自前で構築しているようだが「&lt;a class="link" href="https://ascii.jp/elem/000/001/733/1733504/" target="_blank" rel="noopener"&#10; &gt;ASCII.jp：AWSをやめたDropbox、自社DCに移行した背景とメリットを語る&lt;/a&gt;」）、&lt;strong&gt;よほどの災害が世界規模で起きない限りデータは無事&lt;/strong&gt;と思われる。恐らくそれはデータどころではないような大災害である。&lt;/p&gt;&#10;&lt;p&gt;もちろん、全幅の信頼を置くべきではない。ローカルでもバックアップはするべきだ。これはDropboxのサービスがいつ終わるかわからないから……というよりは、&lt;strong&gt;あちらの都合で勝手に消してくる、という事態が考えられないわけではない&lt;/strong&gt;からだ。&lt;/p&gt;&#10;&lt;p&gt;実際、子供（身内）の裸の写真があったから（非公開でも）垢バン、下手したら通報というような話もこの業界では聞こえてくる。欧米流の価値観は我々日本人の感覚とかけ離れていることも多く、あちらの価値観だと、子供と一緒に風呂に入ることさえ性的虐待と捉えかねられないようで、たとえばとなりのトトロの家族風呂シーンも相当の衝撃らしい（通常ならカットされそうなものだが、かつて風の谷のナウシカを風の戦士たちにされてしまった宮崎駿は、文化的な違いなどを理由に編集することをもはや許さなかったのだと）。&lt;/p&gt;&#10;&lt;p&gt;法的に危ないデータが自国のサーバーにあることを許容できない、という理屈は理解できなくもないが、それは向こうの理屈であって、我々日本人からすれば文化の違いをまったく考慮しない傲慢なグローバリズム、という名の&lt;strong&gt;欧米人の無自覚な自国主義の押し付け&lt;/strong&gt;でしかない。また、そもそも&lt;strong&gt;なんで預け先の貴方がファイルの中身を知ってるの？&lt;/strong&gt; という話でもある。&lt;/p&gt;&#10;&lt;p&gt;しかし、それはGoogleやMicrosoftで、特にDropboxでは今の所そういった話は聞かない。&lt;strong&gt;本業が別にある巨大企業と違って、DropboxはGoogleやMicrosoftよりも慎重なのではないか&lt;/strong&gt;と思う（「&lt;a class="link" href="https://hack-le.com/46705980-2/" &gt;OneDriveの容量縮小を慌てて拒否…兼業クラウドサービスは注意が必要 – 或る阿呆の記&lt;/a&gt;」）。Googleに垢バンされたら色々困るが、Dropboxに垢バンされても他社に乗り換えるだけ、というユーザーと企業の力関係の影響は大きいだろう。あ、Microsoftにはbanされても別にいいです。でも通報は嫌だな。&lt;/p&gt;&#10;&lt;p&gt;ということで、データの預け先としてもそれなりに信用してよいのではないか、と思う。&lt;/p&gt;&#10;&lt;h2 id="つまり何が変わるのか"&gt;つまり何が変わるのか？&#10;&lt;/h2&gt;&lt;p&gt;つらつらとメリット書いてきたが、結局それで僕の生活は何か変わるのか？が問題である。実際、このようなメリットがあることなど十分に承知していて、別に&lt;strong&gt;なけりゃないで困らない&lt;/strong&gt;から、今までDropbox Plusを契約してこなかったのである。&lt;/p&gt;&#10;&lt;p&gt;一番大きいのは、バックアップの安心感だろう。もう&lt;strong&gt;自宅が火事になっても怖くない&lt;/strong&gt;ぞ。怖いけど。2TBもあれば、本当になくなったら泣いちゃうようなデータはだいたい預けることができる。これが大きい。本当に大きい。これだけでも価値はあるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;一方で、複数端末のメリットなどは微妙なところだ。ノートPCでDropboxが使える。使えるが……Google Driveで現状十分だしなぁ。&lt;/p&gt;&#10;&lt;p&gt;容量が増加したといっても、いまどきそんなにたくさん共有したいデータもないし。PCのストレージはせいぜい256-512GB程度。2TBもあっても持ち腐れだ。&lt;/p&gt;&#10;&lt;p&gt;とどのつまり、&lt;strong&gt;素晴らしいバックアップ！以上のものにはならない&lt;/strong&gt;気がする。どうも、生活自体は何も変わらなさそうだ。バックアップにしても、定期的に実家にハードディスクなどを避難させる、程度で私的利用としては十分だし。&lt;/p&gt;&#10;&lt;p&gt;うむー。どうも、あれだな。やっぱり、&lt;strong&gt;ローカルで2TB同期できないことには、ありがたみがない&lt;/strong&gt;な。となると、ネックはローカルのストレージだ。それを拡張すればよい。たとえば2TB SSD（HDはうるさい）をポータブルにできるケースとか使ってメインPCに繋げて、Dropboxを同期する、という風に、&lt;strong&gt;家の環境自体を大きく変える&lt;/strong&gt;わけだ。そこまでやれば多少価値は出てくるが……ううん。ちょっと話が大きいな。金もかかる。&lt;/p&gt;&#10;&lt;p&gt;セール明日までなんだよな。決めないと。しかしこう整理してみると、微妙だな。やめようか。うーん。&lt;/p&gt;&#10;&lt;p&gt;しかしなんだな、Evernoteの3年プランを去年で打ち切ったことを思うと、EvernoteとDropbox、随分と差がついてしまったな。&lt;/p&gt;</description></item><item><title>Appleの初売りでMacBook Pro 2019を注文した</title><link>https://hack-le.com/order-mbp2019/</link><pubDate>Fri, 03 Jan 2020 01:06:28 +0900</pubDate><guid>https://hack-le.com/order-mbp2019/</guid><description>&lt;p&gt;MacBook Air 2013を6年半ほど使っていたが、今年2020年の初売りで、ついにMacBook Pro 2019を注文してしまった。正直タイミングとしては微妙なタイミングだと思っているが、まぁいろいろな条件が重なって…といったところだ。&lt;/p&gt;&#10;&lt;p&gt;後悔はしていない。してないんじゃないかな。多分。&lt;/p&gt;&#10;&lt;h2 id="限界に近いが限界を超えてはいなかったmacbook-air-2013"&gt;限界に近いが限界を超えてはいなかったMacBook Air 2013&#10;&lt;/h2&gt;&lt;p&gt;僕の愛機MacBook Air 2013は、もう6年半も活躍している。仮にも開発者を名乗る人間が2020年に使うノートPCとしては非力さが否めず、あらゆる挙動に一呼吸必要で、またバッテリーもさすがにヘタレて2時間ももたない有様だった。&lt;/p&gt;&#10;&lt;p&gt;それでもmacOSのサポートは続いていたし、開発も別にGUIのスタンドアロンなアプリケーションを開発しているわけでもないので、まぁなんとかならないこともなかった。限界を感じるが、限界を超えたとは思わなかった。ハードウェアは古びても、&lt;strong&gt;macOSというソフトウェアは替え難かった&lt;/strong&gt;。もうホント使いやすいんだよ。&lt;/p&gt;&#10;&lt;h2 id="ここ数年のmacは微妙だった"&gt;ここ数年のMacは微妙だった&#10;&lt;/h2&gt;&lt;p&gt;ということで騙し騙し使っていたものの、&lt;strong&gt;本当はノートPCをずっと新調したかった&lt;/strong&gt;。なぜしなかったのかといえば、&lt;strong&gt;ここ数年のMacがいまいちパッとしなかったから&lt;/strong&gt;だ。ゴミ箱Mac、Touch Bar、バタフライキーボード、スペックを超えて上がるお値段、忘れられたmini……ジョブズ亡き後、こうまで悪くなるのかと思った。&lt;/p&gt;&#10;&lt;p&gt;が、2018年頃から、ようやく暗黒期を抜け出し始めたような兆候が見られる。Ryzen旋風のおかげでIntelがようやくちょっと本気を出して、MacBook Proの13インチに晴れて4コアが搭載されたし、デスクトップについては、大幅にパワーアップしたMac mini、続くMac Proと大きな変革があった。iMacはCPUとストレージで今現在はうーんと思うところあるものの、もともとが良かったこともあり、まぁ良いかという感じである。&lt;/p&gt;&#10;&lt;p&gt;で、Macノートも変化が見られ、最近では16インチMacBook Proはなんと従来のバタフライキーボードを改めてシザーキーボードを搭載、さらに物理ESCキーがつきます！……っておい、と思ったのは僕だけじゃないだろう。ここ数年のMacノートでウリとされていたところが悉くなかったことにされている。だが正しい。それでいい。&lt;strong&gt;ついでにTouch Barをなくしてくれていたら完璧だった&lt;/strong&gt;よ。&lt;strong&gt;指紋認証さえあればいい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;結果論といえばそうかもしれないけれど、&lt;strong&gt;出始めから悪評の多かった機構が、結局悪評を払拭できないままに追いやられてしまった&lt;/strong&gt;、という印象だ。あまり目立たないけれど、iPhoneの3Dタッチもなかったことにされているし、Face IDもなんだか微妙に雲行きが怪しいし、Apple自体、開発の方向性で迷走している感が否めない。&lt;/p&gt;&#10;&lt;p&gt;外野としては、デザイナーの意見が通り過ぎてしまっているんじゃないのだろうか？なんてことを無責任に思ったりする。今のAppleの立役者の一人といえる、ジョナサン・アイブがAppleを退社したのは2019年6月で、氏が今のApple製品にどれだけの影響力を行使できていたのかは謎だが、いろいろなメディアの記事などを見ていると、Touch Barやバタフライキーボードの採用については、少なからぬ影響力があったように思える。&lt;/p&gt;&#10;&lt;p&gt;というかまぁ、立場的にないはずがない。もちろん氏の功績が偉大であることは言うまでもないのだが、スティーブ・ジョブズという稀代のバランサーを失った中で、彼の存在は大きすぎたのではないだろうか。内部のことはわかるはずもないし、開発にかかるスパンを考えるとまだ暫くは影響が残っているはずだが、そのうちに製品という形で見えてくるだろう（ちなみに僕の言っていることは別に珍しい意見でもない…よくある憶測である。参考「&lt;a class="link" href="https://daringfireball.net/2019/06/jony_ive_leaves_apple" target="_blank" rel="noopener"&#10; &gt;Daring Fireball: Jony Ive Is Leaving Apple&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="待てばよいのはわかっているが"&gt;待てばよいのはわかっているが…&#10;&lt;/h2&gt;&lt;p&gt;事情はどうあれ、Macはまた魅力を取り戻しつつあるように感じている。なので、できればもう少し待ちたかった。2020年にはきっとMacBook Proの13インチが刷新されるはずで、そうすればきっとCPUはIce Lakeだし、キーボードはシザーキーボードだし、ESCキーはついているし、もしかしたらTouch Bar……はあるだろう。はい。&lt;/p&gt;&#10;&lt;p&gt;が、MacBook Pro 2019だってそう悪くはない。仕事で使っているのだけれど、スペックが申し分ないのはもちろん、第4世代バタフライキーボードの打鍵感は個人的には実は好印象だったりする。故障さえしなければ問題ないのだが……こればかりはもうしばらくたたないとわからないな。が、今の所MacBook Pro 2019のキーボードが死んだ！という話は聞かないし、まぁいざとなれば修理プログラムがあるし……。ESCキーがないのはつらいけれど、vimよりEmacs派であるし。だが&lt;strong&gt;Touch Barは驚くほど使わない&lt;/strong&gt;。マジでなんだこれ。&lt;/p&gt;&#10;&lt;p&gt;で、&lt;strong&gt;これだったら2020まで待ったほうがよいのはわかっている&lt;/strong&gt;んだけれど、そうすると&lt;strong&gt;職場のノートPCが自分のプライベート用ノートPCより劣ってしまう&lt;/strong&gt;ことになり、それは自分的に耐えがたいのではないか、という気がした。ちょっとネガティブだが、自分の最後の後押しをしたのはそれだった。いやいや大事。&lt;/p&gt;&#10;&lt;p&gt;あとはまぁ、&lt;strong&gt;買い換えたら、MacBook Air 2013は姉の元にわたり、姉が喜んで使ってくれるだろうしな、という気持ち&lt;/strong&gt;もあった。姉は以前僕が使っていたMacBook Air 2010も、画面が輝線でどうにもならなくなるまで使ってくれたようだし、今回も有効に活用してくれるのではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;ということで、初売りでポチりましたとさ。SSD 256GB、メモリ16GB、キーボードはUSにカスタマイズして20万円也。わーお。そして送られてくるだろう24,000円のギフトカードは……&lt;strong&gt;AirPods Proを買ってしまうかもしれない&lt;/strong&gt;なぁ！無印AirPods持っているのに！なんだかんだ、Appleに囲い込まれている私であった。&lt;/p&gt;</description></item><item><title>2020年もよろしくお願いします</title><link>https://hack-le.com/2020-2/</link><pubDate>Thu, 02 Jan 2020 14:19:09 +0900</pubDate><guid>https://hack-le.com/2020-2/</guid><description>&lt;p&gt;最近すっかりブログの更新が滞っていますが、まぁまぁ元気でやっております。なんだか一昨年くらいにも同じようなことを書いたような気ますが、今年は自分にとって転機となる年であったと思います。まぁつまりまた転職をしたのですが、色々とたいへんな思いをしました。&lt;/p&gt;&#10;&lt;p&gt;しかし、周囲の人に支えられて、結果的には良い道に進められたのではないかと思っています。もっとも、本当によかったと言えるかどうかはこれからの自分の頑張り次第なので、気を抜かずやっていきたいところです。&lt;/p&gt;&#10;&lt;h2 id="転機でした"&gt;転機でした&#10;&lt;/h2&gt;&lt;p&gt;2019年も色々ありましたが、自分にとってたいへんだったのはやはり転職に至る流れでした。最後は喧嘩別れであり、というか私は最後まで平和的に終わりたかったので、完全に一方的なものでしたが、数時間にわたる軟禁の末、実質的な解雇となりました。その際には「刺されますよ」など明らかな脅迫を受け（私を刺して何かいいことあるんでしょうか？）、身も心も傷つけられ、あのような反社会的な人たちに関わってしまったことが悔やまれます。人の紹介だからと思っていたのですが、最初から違和感はあったので、&lt;strong&gt;自分の直感をもっと信じるべきだった&lt;/strong&gt;と思いました。&lt;/p&gt;&#10;&lt;p&gt;とはいえあのような最低としか言いようのない人たちが現実に存在する、ということを知られたことは、貴重な経験であったことは確かです。望んではいませんでしたが……。特に代表の人間は、サイコパスと呼ばれる病気だったものと思います（私は医者ではないので診断はくだせませんが）。&lt;/p&gt;&#10;&lt;p&gt;サイコパスについて本を読むと、実際に被害を受けただけに「なるほど」と思うところが多くありました。この文章を読んでおられる方もお気をつけください。世の中には &lt;strong&gt;「生まれながらに良心が欠如している」という人間（？）が存在します&lt;/strong&gt;。しかもそれは、犯罪を侵さずに日常生活の中に溶け込んでいるのです（全人口の1-3%程度と言われています）。&lt;/p&gt;&#10;&lt;p&gt;そして、残念ながらそのような人に操られてしまう人たちがいます。逆に言うと、敵視された私は操られなかったとも言えます……それは私の性根もありますが、技術者を名乗る道を曲がりなりにも歩いていて、また今後もそうありたいと強く思う気持ちがあったからではないか、と思います。&lt;/p&gt;&#10;&lt;h2 id="ソフトウェアと法律"&gt;ソフトウェアと法律&#10;&lt;/h2&gt;&lt;p&gt;ソフトウェアとは畢竟ルールを決めることで、それは法律のようなものだという説明を受けたことがあります。そのように話したこともあります。すると、アナログ電子を得意とするオッチャンから「では、なぜバグがなくならないのか」「バグがなくせないということは、自分たちが決めたルールのことをわかっていないということではないか」「それは不誠実ではないか」ということを問われました。もう何年前のことだったでしょうか。&lt;/p&gt;&#10;&lt;p&gt;当時私はうまく答えられませんでしたが、今ならば少しは何かを言えるように思います。&lt;/p&gt;&#10;&lt;p&gt;そもそも、法律を我々は完全に理解していません。我々一般人は道交法についてなんら知らずに道を歩き鉄の塊を飛ばします。専門家でも、ある事件についてどのような判決がくだされるかは、結局は裁判をとおすことになります。&lt;/p&gt;&#10;&lt;p&gt;それにも関わらず、私達はなんとかかんとか日常生活を送ることができているのです。私達は法律の知識がなくとも、その場その場で適切な行動を取ることができます。道交法を知っていようがいまいが、運転中急に道に飛ば出てくる人が出れば我々は急ブレーキを踏みます。そうしなければ、人を轢いてしまうからです。&lt;/p&gt;&#10;&lt;p&gt;しかし、それがソフトウェアで制御されている場合は、そのようなケースについてプログラムされていなければ、そのまま轢いてしまう可能性があります。&lt;/p&gt;&#10;&lt;p&gt;ここに、法律とソフトウェアの違いが顕著に現れていると思います。法律の対象が人間であるのに対し、ソフトウェアの対象が論理であるということです。現代ではソフトウェアとは実質的に電子の流れの制御ですから、電子が対象であると言ってもよいかもしれません。&lt;/p&gt;&#10;&lt;p&gt;つまり、ソフトウェアとはルールを決めることだといっても、本質的には電子という自然の一部をなんとかかんとかして制御することに他ならず、そう考えると、&lt;strong&gt;本質的には自然の法則を利用するハードウェアと変わらない&lt;/strong&gt;のではないかと思います。自然のことをすべて理解するのは不可能ですから、ソフトウェアにバグがあるのもむべなるかな。&lt;/p&gt;&#10;&lt;h2 id="自然の営み人間の営み"&gt;自然の営み、人間の営み&#10;&lt;/h2&gt;&lt;p&gt;長々と話しましたが、何が言いたいかというと、ソフトウェアにせよハードウェアにせよ、技術とは自然の営みの一つだ、ということです。それを扱う技術者は、この大いなる自然の中のちっぽけな生き物に過ぎません。&lt;/p&gt;&#10;&lt;p&gt;それとは逆に、人間の営みというべき職種もあって、営業や経営、政治などは多分にその傾向が強いでしょう。それ自体は必要なことですし、技術者もまた人間である以上人間の営みを軽んじることはできません。とはいえ、それがすべてでないこともまた事実。&lt;/p&gt;&#10;&lt;p&gt;ここから少し飛躍します（飛躍大好きです）。&lt;strong&gt;この世を人間的にしか理解できない、あるいは理解しようとしない人は、場合によっては悪徳の道を歩んでしまう&lt;/strong&gt;ように思います。人間はどこまでも最低になれます。卑俗になれます。堕落できます。一方で、自然はただそこにあるだけであり、その中でどうにもならない経験をしていると、人間として、畏怖の心といいますか、そういう気持ちを、それこそ自然に学べると思うのです。たとえサイコパス的な特性が強かったとしても、自然の営みに強い関心があれば、まぁいわゆる気難しい嫌なやつくらいにはなってしまうかもしれませんが、逆に言うとその程度で済むのではないでしょうか。なので、技術者たらんとする気持ちを大事にしていれば、まぁ人間ですから、それなりに堕落はしつつも、堕ちきることもなかろうと思います。が、それがないと、人間はどこまでも堕ちられるし、自分勝手になれる。&lt;/p&gt;&#10;&lt;p&gt;私を繋ぎ止めてくれたものの大きな一つは、普段は私を苦しめることの多い（笑）技術者たらんとする道とその世界観だったように思えてなりません。正直苦労の多い道だよなと思うのですが、それだけの道だと思います。もちろん、つらいときに私を支えてくれた家族や友人にも、感謝しています。&lt;/p&gt;&#10;&lt;h2 id="心機一転"&gt;心機一転&#10;&lt;/h2&gt;&lt;p&gt;正月早々、妙な話をしてしまいました。まぁ新年という区切りも迎えましたし、心機一転、頑張っていきます。今度の分野はIoTです。&lt;strong&gt;IoTはハードとソフト、そして人を繋ぐ分野&lt;/strong&gt;だと思います。精一杯学び、学んだことはこのブログに書いて……いくかどうかはわかりませんが、自分なりにわかったことを、飾らずに書いていきたいと思います。&lt;/p&gt;&#10;&lt;p&gt;今年もよろしくお願いします。&lt;/p&gt;</description></item><item><title>A5からA11プロセッサ搭載の製品に脆弱性ってもうそれ全部やん</title><link>https://hack-le.com/a5-a11/</link><pubDate>Tue, 24 Dec 2019 00:13:19 +0900</pubDate><guid>https://hack-le.com/a5-a11/</guid><description>&lt;p&gt;いや全部じゃないんだけれどさ。ここ最近でちょっと一番ビックリしたかも。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://iphone-mania.jp/news-270175/" target="_blank" rel="noopener"&#10; &gt;iPhone4s〜Xなど、A5〜A11搭載製品にアップデートで修正不能な脆弱性 - iPhone Mania&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;A5からA11プロセッサ搭載の製品に修正困難な脆弱性って、それつまりここ1,2年で出た最新機以外全滅ってことでは。。。&lt;strong&gt;そんなんもう全部やん&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;iPadは古めのプロセッサを採用されていることもあって、特に被害が大きい。今年出たものでさえ、iPhone 7と同じA10だったりするからなぁ。えー。&lt;/p&gt;&#10;&lt;h2 id="ほぼ全部"&gt;ほぼ全部&#10;&lt;/h2&gt;&lt;p&gt;今回の脆弱性は、A5-A11プロセッサ搭載の製品の修正困難な脆弱性ということで、うちにあるiPad Air 2とiPhone 8は見事にどちらも当てはまったわけだが、さすがにこれは&lt;strong&gt;当てはまらないAppleユーザーのほうが少数派&lt;/strong&gt;だろう。まぁ物理的にアクセスされない限りは大丈夫だということなので、盗難・紛失時の危険性は上がったと言えるのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;とはいえ具体的に何ができるのかは、なんだかよくわからない。root奪取されるということはないようだし、かなり記事を読むとかなり限定的な状況でのみ影響を受けそうな感じなので、まぁ恐れすぎることはないようなのだが。うーん。&lt;/p&gt;&#10;&lt;p&gt;と言いつつも、脆弱性を含まない製品への移行を推奨されてもいる。それ、もう&lt;strong&gt;実質的にApple製品使うなって言ってないですか&lt;/strong&gt;ね。いやまぁA12以降のプロセッサなら問題ないとはいえ、同じようなことはあるのだろうし。&lt;/p&gt;&#10;&lt;p&gt;まー確かにちょっとびっくりではあるんだけれど、iOS端末がお粗末というより、単純に多すぎるのでありとあらゆるところで研究されまくっているのが、一番大きいんじゃないのかなぁというように思う。PCならWindowsが一番普及しているので、一番マルウェアが多いのと同じで、普及している台数の問題というか。&lt;/p&gt;&#10;&lt;p&gt;しかし、よくもまぁ探すものだなぁ……。&lt;/p&gt;</description></item><item><title>そろそろiPad Air 2もお役御免か…ビューアーとしては2020年でも十分戦えるが</title><link>https://hack-le.com/air2-7-air3/</link><pubDate>Sat, 07 Dec 2019 15:00:33 +0900</pubDate><guid>https://hack-le.com/air2-7-air3/</guid><description>&lt;p&gt;今年もAmazonのCyber Monday Saleがやってきた。つまり年も暮れということで、気がつけばもうすぐ2019年も終わろうとしていて恐ろしい限りだ。先日のブラックフライデーはとんだ肩透かしセールであったが、まぁセールの本命はこちらだろう。&lt;/p&gt;&#10;&lt;p&gt;ということで物色していたところ、ただでさえ安い第7世代iPadがさらに5,000円ほど値引きされていて大層惹かれた。ポイントアップキャンペーンも考えると、&lt;strong&gt;今年発売の第7世代iPadが実質3万円ほどで手に入る&lt;/strong&gt;ことになる。むむむ。&lt;/p&gt;&#10;&lt;!--more もっと読む--&gt;&#10;&lt;h2 id="ipadは素晴らしい"&gt;iPadは素晴らしい&#10;&lt;/h2&gt;&lt;p&gt;僕はこれまでに3台のiPadを所持してきた。基本的には電子書籍用途である。電子書籍リーダーは昔からの憧れだったので、初代iPadが出た時、金のない学生であったにも関わらず、売り場に走って買い求めたものである。まだ世間の評価も定まらず、時には「でかいiPhone」とか言われていた時期だった。&lt;/p&gt;&#10;&lt;p&gt;初代iPadはその解像度の低さから、雑誌や漫画を読むには荒く、さりとて小説を読むにはでかすぎ重すぎ、という中途半端な代物だったが、それでもこれまでのハードウェアとは一線を画すものだったことはたしかだ（当時のリーダーがどんなものだったか、たとえばKindle 3Gで画像検索してみると良い）。Webブラウジングも快適にできたし。&lt;/p&gt;&#10;&lt;p&gt;次に購入したのは第3世代iPadだ。&lt;strong&gt;iPadで初のRetina対応の衝撃は凄まじかった&lt;/strong&gt;。これでついに、雑誌や画像も綺麗に読めるようになったのである。画質問題は解決だ。……ただ、&lt;strong&gt;半年あまりでCPUとコネクタの刷新された新型が出たのはフザケンナと思った&lt;/strong&gt;。このマシンのCPUだと、PDFを読むのはちょっとつらかったし……（特に透過OCRが施されているものなんかは…）。。。なお、初代iPadはウチのオカンのものになった。&lt;/p&gt;&#10;&lt;p&gt;その次に購入したのはiPad Air 2で、これは文句なしに素晴らしいものだった。指紋認証は非常に便利で、CPUパワーは申し分なく、OCRをかけられたPDFもサクサク読めるし、画面は綺麗だし、そして何より軽い。この軽さが素晴らしい。本機を買うまで、タブレットの重量はあまり重視してこなかったが、&lt;strong&gt;軽いというだけで手に取る回数が増えることが実感できた&lt;/strong&gt;。重さは重要なファクターだったのだ（それだけに、その後高機能化と引き換えに少しずつ重たくなっていっているのには複雑な心境）。&lt;/p&gt;&#10;&lt;p&gt;購入したのは2015年の春頃だったか。&lt;strong&gt;このiPad Air 2が、2015年のもっとも良い買い物だったことは間違いない&lt;/strong&gt;。今日に至るまで、ほぼ毎日使っている。本当に素晴らしい端末だった。なお第3世代iPadはウチの長姉のものになった。&lt;/p&gt;&#10;&lt;h2 id="ipad-air-2が不調買い替えたいが"&gt;iPad Air 2が不調、買い替えたいが…&#10;&lt;/h2&gt;&lt;p&gt;そんなiPad Air 2だが、最近すこぶる調子が悪い。Touch IDは使えなくなり、おまけに&lt;strong&gt;スリープ状態にすると発熱する&lt;/strong&gt;という謎の不具合まで発生する始末。なんだかハードウェアが逝ってしまっている気がしてならない。しかし充電状態にしていると発熱しないし、Touch IDは必須のものというわけではないので、家でゆったり使う分には特段の問題はなかったりする。&lt;/p&gt;&#10;&lt;p&gt;とはいえ不便な不具合であることは確かだ。また、最近のゲームなどたまにしてみると、さすがにマシンパワーの不足を感じることも出てきた。Apple Pencilも使ってみたい。Bluetoothのそこそこ高いペンも持っているが（一時期仕事で軽く使った）、Apple Pencilの書き心地とは比較にならない。。。&lt;/p&gt;&#10;&lt;p&gt;ということで、買い替えたいなぁと思っていた今日この頃、Cyber Monday Saleで第7世代iPadが安くなっているのを見て、むむむ、と。&lt;/p&gt;&#10;&lt;h2 id="第7世代ipadで機能的には十分と思うものの"&gt;第7世代iPadで機能的には十分と思うものの&#10;&lt;/h2&gt;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07PRX2Q11&amp;linkId=6c2af513cb895c6c42313f6f6a0da398"&gt;&lt;/iframe&gt;ただでさえ安いのにさらに値引きされ、ポイントアップキャンペーンも考慮すると、実質的に3万ほどで購入できる。これは文句なしに安い。&#10;&lt;p&gt;しかしなぁ……。第7世代iPadはたしかに安いのだが、安いなりに理由があって、色々なスペックがiPad Air 3と比べて落とされている。まぁ正直言って機能的には自分にとっては十分だと思うものの、&lt;strong&gt;CPUの世代がやや古い(iPhone 7時代)のはOSのサポート期間に直結するだけに気にかかる&lt;/strong&gt;。実際、iPad Air 2も2019年12月現在なんとか最新OSをサポートしてもらえているが、2020年では対象外になりそうな気がする。&lt;/p&gt;&#10;&lt;p&gt;まー最新OSの対象外になったところで、直ちに使えなくなるかと言えばそんなことはないのだが、これから追加されるだろう色々な機能にどこまで対応してもらえるか。特にiPad OSになり、今後のiPadは大きく変化していくだろうと期待しているだけに。&lt;/p&gt;&#10;&lt;p&gt;ストレージもいまだに32GB（128GBモデルもあるが、それ買うならAir 3いくかな…）だし。&lt;strong&gt;ちょっと重いし&lt;/strong&gt;（483gって！Air 2の437gから10%増……Air 3も456gで今よりちょっと重いが）。Apple Pencilが使えるとはいえ初代だし（それはAir 3も一緒だが。でもAir 3のほうが画面とペンの距離が近い）。&lt;/p&gt;&#10;&lt;p&gt;……でも結局自分はほとんど本読んだり動画を見るのに使うだけだよな、Apple Pencilとか多分結局使わないよな、483gはちょっと重いけど重すぎることはないよな、別に色に対する拘りもそんなでもないしな（Air 2で十分綺麗だと思っている）、なんて考えると、第7世代iPadで十分じゃないの、とも思う。&lt;/p&gt;&#10;&lt;p&gt;なんて、買う買わないの堂々巡りを続けている。Air 2が好調なら多分見送ったのだが、不調なだけになぁ。Air 3が安くなっていればそちらを買ったものの。うーん……。&lt;/p&gt;&#10;</description></item><item><title>ReadyNAS 104を使用して4年、動いているが、家庭用に4ベイはいらなかったなといまさら思う</title><link>https://hack-le.com/readynas104-4/</link><pubDate>Sun, 24 Nov 2019 21:49:27 +0900</pubDate><guid>https://hack-le.com/readynas104-4/</guid><description>&lt;p&gt;SOHOや家庭用のNASとして数年前くらいにそこそこ売れていた、Netgearの4ベイNAS、ReadyNAS 104を使いはじめて4年が経過した。つまり5年目ということになるが、いまのところ不具合もなく毎日堅実に動いてくれており、途中何度かあったハードディスクの交換もうまくいった。よく働いてくれている。素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;しかし、思う。4ベイNASはいらなかったなぁ、と。家庭用で冗長性とか必要なかった。そして4TBや6TBのHDの価格が下がってきた今、もはや1ベイNASで十分であるなぁ、と。&lt;/p&gt;&#10;&lt;h2 id="4ベイnasを買うに至るまで"&gt;4ベイNASを買うに至るまで&#10;&lt;/h2&gt;&lt;p&gt;僕がハードウェアとしてのNASを購入したのは2015年のことで、それまでは自宅サーバーに自分でSambaを入れていた。たしか2012年あたりは格安サーバーなるものが流行っていて、実際ハードディスクが4本はいるそこそこ立派なHPのサーバーが、15,000円ほどで入手できたのである。自分はそれを使ってサーバーの勉強をしたし、このサイトの記念すべき最初の記事は、その格安サーバーを使った勉強記録だったりする（「&lt;a class="link" href="https://hack-le.com/19182815-2/" &gt;小型のメディアサーバー(兼NAS)をたてる その1 〜準備編〜 – 或る阿呆の記&lt;/a&gt;」2012年10月の記事。当サイト唯一の連載系記事でもある。ツッコミどころも多く、もはや歴史的な意味しかない記事なのだが、初学者の奮闘記として割と面白い読み物になっている気がする）。&lt;/p&gt;&#10;&lt;p&gt;で、自宅サーバーが物理的に故障してしまったので、新しくサーバーを新調する必要があったのだが、最初こそ未知の経験で楽しかったサーバーの構築・運用作業も、二度目となると面倒なばかりであったし、2015年頃は格安サーバーのブームもすっかり下火になっていたので、「NASの専用機を買おうかな」と思ったのである（このへんの話は「&lt;a class="link" href="https://hack-le.com/45948138-2/" &gt;自宅サーバーは浪漫枠 – 或る阿呆の記&lt;/a&gt;」にも書いた）。&lt;/p&gt;&#10;&lt;p&gt;SOHO用として売り出されている低価格帯のNASは、個人が家庭で使えるNASとしても十分に手が届くもので、2ベイNASや4ベイNASであれば2万円も出せばそれなりのものを手にすることができた。ハードディスクは以前使っていた自宅サーバーのものをそのまま流用できたし。&lt;/p&gt;&#10;&lt;p&gt;当時、手元には2TBのハードディスクが4本あった。自宅サーバーを構築した2012年はは、2011年にタイの洪水があった影響がまだおさまっておらず、ハードディスクの価格が下げ止まっていた時期で、たしかハードディスクの容量当たりの単価も2TBが最安であったように思う。2015年頃になると3TBが最安だったような気もするが、NASで1本あたりのハードディスクの容量を変えるとなると、総入れ替えということになってしまうので、まぁ2TBのハードディスクをそのまま4本使い続けようと、4ベイNASを購入することにした。&lt;/p&gt;&#10;&lt;p&gt;で、4ベイNASではひときわお値打ちだったNetgearのReadyNAS 104を購入するに至ったのである。&lt;/p&gt;&#10;&lt;h2 id="もはや1ベイnasで良い時代"&gt;もはや1ベイNASで良い時代&#10;&lt;/h2&gt;&lt;p&gt;ReadyNAS 104はメモリが512MBしかないためか、ちょっとなにかするとすぐに固まってしまい、安定運用に至るまではなかなか苦労させられた（「&lt;a class="link" href="https://hack-le.com/46372213-2/" &gt;ReadyNAS 104の安定した運用に至るまで – 或る阿呆の記&lt;/a&gt;」）。とはいえ自宅サーバーでハードウェアを用意していソフトウェアのインストールから何まで全部自分でやることを思えば格段に楽である。実際、運用に至ってからは調子よく使えていたし、ハードディスクが壊れた時も、電源を入れたまま入れ替えるだけで元通りになり感動したものだ（「&lt;a class="link" href="https://hack-le.com/47583583-2/" &gt;ReadyNas 104 のHD交換完了。NASは楽だなぁ… – 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;たしかに感動したのだが……それだけだ。RAIDはあくまで可用性を高める手段なので、バックアップは別に取る必要がある。で、考えてみると家庭用NASでダウンタイムが発生したところでだから何？という話なのだ。つまり、常にテレビ録画をしているのでもない限り、&lt;strong&gt;家庭用NASにRAIDなんて必要ない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ハードディスクの容量が小さい時は、複数のハードディスクの一つのボリュームとして扱う意味もあった。人によりけりだろうが、2TBでは僕のライブラリの保管場所としては不十分だ。僕はもっと大きなボリュームを求めていた。その意味で、&lt;strong&gt;当時はまだ複数ベイのNASが必要だった&lt;/strong&gt;のはそうだ。&lt;/p&gt;&#10;&lt;p&gt;しかし、2019年も終わろうとしている現在、ハードディスクの単価はさらに下がり、容量当たり単価でいえば4TBくらいが最安になった。4TBあれば、僕のライブラリには十分である。つまり、ハードディスク1本で問題がない。そして、冗長性も必要ない。&lt;/p&gt;&#10;&lt;p&gt;よって、&lt;strong&gt;もはや僕には複数ベイのNASは必要なく、1ベイNASで十分&lt;/strong&gt;、ということになる。6TBのハードディスクも十分に安くなっているし、&lt;strong&gt;もはやほとんどの人にとって、NASは1ベイNASで十分なのではなかろうか&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、ReadyNAS 104は変わらず動いてくれるので、買い換えるかと言うと微妙なところだ。2TBハードディスクもまだ死んでいないものが2本残っていて、今はその2本でRAID-0を組み、4TBのボリュームとして扱っているから、一応複数ベイの面目は保っているものの、もしどちらかのハードディスクが逝けば、2TBのハードディスクを交換するのではなく、新たに4TBのハードディスク1本で運用するだろう。うーん、ちょっと寂しい。&lt;/p&gt;</description></item><item><title>macOS Catalinaをクリーンインストール</title><link>https://hack-le.com/install-catalina/</link><pubDate>Tue, 29 Oct 2019 15:25:16 +0900</pubDate><guid>https://hack-le.com/install-catalina/</guid><description>&lt;p&gt;新記事→&lt;a class="link" href="https://hack-le.com/macos-big-sur/" &gt;macOS Big Surをクリーンインストールした – 或る阿呆の記&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&#10;&lt;p&gt;MacBook Air 2013にmacOS Catalinaをクリーンインストールした。最初はアップグレードしていたのだが、Xcodeのバージョンが何度やっても上がらないとか、挙動が遅いとか、色々と気になるところが出てきて、結局クリーンインストールした。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;h2 id="クリーンインストール"&gt;クリーンインストール&#10;&lt;/h2&gt;&lt;p&gt;クリーンインストールの手順自体はいつもと同じで、Cmd + Rを押しながら電源を投入してリカバリーモードにうつり、既存のボリュームを削除してインストール……なのだが、Catalinaからまた構成が色々と変わったらしく、少し戸惑った。&lt;/p&gt;&#10;&lt;p&gt;Catalinaでは、「&lt;a class="link" href="https://applech2.com/archives/20190605-macos-10-15-catalina-system-volume-read-only.html" target="_blank" rel="noopener"&#10; &gt;macOS 10.15 CatalinaではシステムボリュームがRead-Onlyになり、アプリはユーザーデータのみにアクセス可能に。 | AAPL Ch.&lt;/a&gt;」の記事タイトルにあるように、Read-Onlyの領域ができるようだ。具体的には、Macintosh HDといういつものボリュームの他に、Macintosh HD - Dataという見慣れないボリュームが作られる。&lt;/p&gt;&#10;&lt;p&gt;mojaveからのアップグレードならば特に意識しないと思うが、自分の場合は既にいったんCatalinaに上げていたので、この見慣れないボリュームの扱いに戸惑った。まぁ壊れはしないだろうと適当にインストールを進めたら、以前のデータのボリュームを残したままのアップグレードなってしまった。まぁ再度リカバリーモードを立ち上げて、以前のDataボリュームを削除すればよいのだが。&lt;/p&gt;&#10;&lt;h2 id="クリーンインストール後"&gt;クリーンインストール後&#10;&lt;/h2&gt;&lt;p&gt;クリーンインストール後は、各種アプリケーションのインストールだ。昔はこの手の作業もそれなりに楽しかったが、今となってはただひたすら面倒臭い。しかしこの作業を通じて、もう使わなくなったアプリケーションの判断などもできるので、まぁ一年に一度の棚卸しだと思って頑張ることにする。&lt;/p&gt;&#10;&lt;h3 id="環境設定"&gt;環境設定&#10;&lt;/h3&gt;&lt;p&gt;一通りの環境を設定する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;インターネットアカウントの設定&lt;/li&gt;&#10;&lt;li&gt;キーボードでキーリピート速める&lt;/li&gt;&#10;&lt;li&gt;キーボードでスマート引用符とスマートダッシュを使わないようにする&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.piyo.tech/posts/2014-01-06-205101/" target="_blank" rel="noopener"&#10; &gt;Macで引用符を入力すると勝手に変換されるのをやめたい - ぴよロ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;スクリーンショットと収録のオプション、をShift + Cmd + 5からShift + Cmd + 2に切り替える&#10;&lt;ul&gt;&#10;&lt;li&gt;Skitchのショートカットと重複するから&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;トラックパッドでタップでクリック、ポインタ速度速める&lt;/li&gt;&#10;&lt;li&gt;アクセシビリティからトラックパッドの3本指ドラッグ解禁&#10;&lt;ul&gt;&#10;&lt;li&gt;何故これがデフォルトじゃないんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイアウォールを「入」にする&lt;/li&gt;&#10;&lt;li&gt;FiraVaultをOnにする&lt;/li&gt;&#10;&lt;li&gt;「このMacについて」→「ストレージ」→「管理」で「ゴミ箱を自動的に空にする」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="app-storeからインストール"&gt;App Storeからインストール&#10;&lt;/h3&gt;&lt;p&gt;App StoreにあるものはApp Storeから。アプリ、だいぶ軽くなったよね。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Xcode&lt;/li&gt;&#10;&lt;li&gt;iWork(Pages, Numbers, Keynote)&lt;/li&gt;&#10;&lt;li&gt;GarageBand&lt;/li&gt;&#10;&lt;li&gt;ForkLift&#10;&lt;ul&gt;&#10;&lt;li&gt;2画面ファイラ。Terminalで開くショートカットがとても便利&lt;/li&gt;&#10;&lt;li&gt;いい加減有料ライセンス買ってもいいくらいお世話になっているな…&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;CotEditor&lt;/li&gt;&#10;&lt;li&gt;Go2Shell&#10;&lt;ul&gt;&#10;&lt;li&gt;FinderにカレントディレクトリをTerminalで開くアイコンを追加できる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;LanScan&#10;&lt;ul&gt;&#10;&lt;li&gt;LAN内のデバイスをスキャンできるGUIソフト。地味に便利&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Pixelmator&lt;/li&gt;&#10;&lt;li&gt;Readkit&#10;&lt;ul&gt;&#10;&lt;li&gt;RSSリーダーとして。色々不具合あるけど使っている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Stuffit Expander&lt;/li&gt;&#10;&lt;li&gt;PopClip&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="webから"&gt;Webから&#10;&lt;/h3&gt;&lt;p&gt;クラウド系は以前より台数制限が厳しくなってきた。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;開発&#10;&lt;ul&gt;&#10;&lt;li&gt;Docker&lt;/li&gt;&#10;&lt;li&gt;SourceTree&lt;/li&gt;&#10;&lt;li&gt;VirtualBox&lt;/li&gt;&#10;&lt;li&gt;Visual Studio Code&lt;/li&gt;&#10;&lt;li&gt;Android Studio&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;クラウド&#10;&lt;ul&gt;&#10;&lt;li&gt;Dropbox&lt;/li&gt;&#10;&lt;li&gt;Google ドライブ&lt;/li&gt;&#10;&lt;li&gt;Google 日本語入力&lt;/li&gt;&#10;&lt;li&gt;Evernote&lt;/li&gt;&#10;&lt;li&gt;Simplenote&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ツール&#10;&lt;ul&gt;&#10;&lt;li&gt;Google Chrome 久しぶりに入れるとけっこうな拡張機能が死亡している&lt;/li&gt;&#10;&lt;li&gt;Skitch&#10;&lt;ul&gt;&#10;&lt;li&gt;なんだかんだ言ってちょっとした編集には便利&lt;/li&gt;&#10;&lt;li&gt;もはやEvernoteより便利かもしれない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Calibre&lt;/li&gt;&#10;&lt;li&gt;Simple Comic&#10;&lt;ul&gt;&#10;&lt;li&gt;更新止まって久しいけれど、Mac用の漫画ビューアっていまだにこれが一番なんじゃなかろうか…&lt;/li&gt;&#10;&lt;li&gt;検索すると変なサイト出るけど本家は「&lt;a class="link" href="http://dancingtortoise.com/simplecomic/" target="_blank" rel="noopener"&#10; &gt;Dancing Tortoise | Simple Comic&lt;/a&gt;」GitHubにソースもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Avast&#10;&lt;ul&gt;&#10;&lt;li&gt;まぁお守りみたいなもんだな…&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;BetterTouchTool&#10;&lt;ul&gt;&#10;&lt;li&gt;2019/01/03 永続ライセンス買った。Gmailのメールなくしたかと思って焦った&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Clipy&lt;/li&gt;&#10;&lt;li&gt;Menumeters&lt;/li&gt;&#10;&lt;li&gt;Karabiner-Elements&lt;/li&gt;&#10;&lt;li&gt;Splashtop Streamer&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="homebrewから"&gt;Homebrewから&#10;&lt;/h3&gt;&lt;p&gt;まぁ必要になったら適宜入れたら良いのだが。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;awscli&lt;/li&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;li&gt;cliclick&lt;/li&gt;&#10;&lt;li&gt;direnv&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;fish&lt;/li&gt;&#10;&lt;li&gt;gcc&lt;/li&gt;&#10;&lt;li&gt;go&lt;/li&gt;&#10;&lt;li&gt;gnuplot&lt;/li&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;node&lt;/li&gt;&#10;&lt;li&gt;ruby&lt;/li&gt;&#10;&lt;li&gt;python&lt;/li&gt;&#10;&lt;li&gt;octave&lt;/li&gt;&#10;&lt;li&gt;pandoc&lt;/li&gt;&#10;&lt;li&gt;peco&lt;/li&gt;&#10;&lt;li&gt;unrar&lt;/li&gt;&#10;&lt;li&gt;unzip&lt;/li&gt;&#10;&lt;li&gt;wget&lt;/li&gt;&#10;&lt;li&gt;youtube-dl&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="python3"&gt;Python3&#10;&lt;/h3&gt;&lt;p&gt;venvで普段使い用の環境を切ってから。pipをアップグレードしつつ。「&lt;a class="link" href="https://hack-le.com/pip/" &gt;pythonのpipで入れているもの – 或る阿呆の記&lt;/a&gt;」を参考に。&lt;/p&gt;&#10;&lt;h3 id="細かな設定"&gt;細かな設定&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;NASの設定（「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;li&gt;sshの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;VPCにアクセスできるように&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;.bash_profile パスの設定、履歴数、rbenvの変数設定など&lt;/li&gt;&#10;&lt;li&gt;.bash_aliases&lt;/li&gt;&#10;&lt;li&gt;ターミナルの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;monaco 12pt.&lt;/li&gt;&#10;&lt;li&gt;背景黒&lt;/li&gt;&#10;&lt;li&gt;Optionをメタキー&lt;/li&gt;&#10;&lt;li&gt;終了時にタブを閉じる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;自分用binディレクトリのソフトリンクとパス設定&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="すごく許可を求められる"&gt;すごく許可を求められる&#10;&lt;/h2&gt;&lt;p&gt;Catalinaにしてからものすごい許可を求められる。端末でDownloadsディレクトリにcdするだけで求められる。何から何まで求められる。これは必要なことなのだろうか……。なんだかもうよくわからない。&lt;/p&gt;&#10;&lt;p&gt;仕方のないことなのかもしれないが、Macはどんどん厳しくなっているな。SIPのおかげでiTunes（あ、もうなくなったか）の設定一つ変えるのも苦労したし、なんだかなぁという気持ち。ハードウェアもやけに高いし、Touch Barはどう考えてもいらないし、最近はWindowsも熟れてきたし、Chromebookも面白いし、Mac離れできないものかと画策している。でもなんだかんだで使いやすいんだよなぁ。まいった。&lt;/p&gt;</description></item><item><title>iPad Air 2をスリープにすると、バッテリーが0になるまで異常に発熱する</title><link>https://hack-le.com/ipad-air2-sleep/</link><pubDate>Tue, 22 Oct 2019 21:01:31 +0900</pubDate><guid>https://hack-le.com/ipad-air2-sleep/</guid><description>&lt;p&gt;ちょっと困った不具合が起きている。もうかれこれ5年近く愛用しているiPad Air 2だが、スリープにすると異常に発熱を始め、それはバッテリーが0になるまで続く。ただし、スリープを解除したり、電源につないだりすると、おさまる。&lt;/p&gt;&#10;&lt;p&gt;非常に不思議な不具合で、調べても同じような人が見当たらない。なんとなく、ハードウェア的なものではないかと思う。ちょっとどうにもならなさそうなので、買い換えるか、それとも騙し騙し使い続けるか悩んでいる。&lt;/p&gt;&#10;&lt;h2 id="スリープにすると死ぬまで発熱"&gt;スリープにすると死ぬまで発熱&#10;&lt;/h2&gt;&lt;p&gt;ある朝、目覚めるとiPad Air 2の電源が入らなくなっていた。どうも、バッテリーが切れてしまっているらしい。スリープにするのを忘れてしまっていたのだろうか。充電すると、問題なく使えた。&lt;/p&gt;&#10;&lt;p&gt;そのときはなんとも思わなかったのだが、同様のことが続けて起きた。で、調べてみると、スリープ中にも関わらずバッテリーが減り続けている。これはいったいどういうことだろう、と思って触ってみると、本体が熱い。何かが起きている。&lt;/p&gt;&#10;&lt;p&gt;最初、まさかウィルスにかかったのか？と思い、初期化を行った。しかし、何も変わらない。そもそも、ウィルスならばこんなにわかりやすく動かないだろう。また、発熱するのがスリープ中のみで、普通に使っているときはもちろん、充電中も何も起きないのは、ソフトウェア的な制御によるものとは考えづらかった。&lt;/p&gt;&#10;&lt;p&gt;どうも、ハードウェア周りの故障の気がする。スリープ時の電源回路に何か問題が起きたのではなかろうか。もちろん、開けた調べたわけではないので、推測に過ぎないのだが……。&lt;/p&gt;&#10;&lt;p&gt;ハードウェアをやっている友人に相談してみたところ、確かに電源周りが怪しい、話だけ聞くと、何か制御のICが死んでそうな気がする、という。うーん。&lt;/p&gt;&#10;&lt;p&gt;実はちょっと前から、Touch IDも死んでいた。これも調べてみると、ハードウェア周りがくさい。&lt;/p&gt;&#10;&lt;p&gt;まー原因はわからないのだが、一つ言えることは、放っておいたら治る、という希望的観測は持たないほうがよい、ということだ。&lt;/p&gt;&#10;&lt;h2 id="買い換えるか否か"&gt;買い換えるか否か&#10;&lt;/h2&gt;&lt;p&gt;今更iPad Air 2の修理もなかろうし、問題は買い換えるか否か、である。これが非スリープ時に発熱、だととても使い物にはならなかったのだが、スリープ時に充電しておけば使えてしまうので、家の中で利用する限りではあまり問題がない。特にバッテリーの膨らみなどもなさそうだ。うーん。&lt;/p&gt;&#10;&lt;p&gt;ソフトウェアのサポートも、まだギリギリ続いている。まぁ来年あたり、最新OSから切られそうではあるが、少なくとも今回のiPadOSはサポートされている。うーん。&lt;/p&gt;&#10;&lt;p&gt;処理能力については、最新の3Dゲームをやるならば別だが（まったくしないわけではない）、メインの用途であるブラウジングや読書をする分にはまるで問題がない。十分過ぎるくらいだ。うーん。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、SideCarは使えないし、Apple Pencilにも対応していない。ここは一つポイントであろう。まぁ、両方とも特に使う予定はないのであるが……。うーん……。&lt;/p&gt;&#10;&lt;p&gt;買い換えるとすれば、無印iPadが第3世代iPad Airか。まぁiPad Airかな。処理能力的に。ゲームもやらんわけではないし、CPUの世代は新しいほうが、新機能も長く対応してくれるし。でもApple Pencilとか諸々そろえると7万くらいかかりそうだな。メモリ3GBは今どきどうかなとも思うんだが。次あたり4GBになったりしないかな。うーん。&lt;/p&gt;&#10;&lt;p&gt;いっそiPad Pro……いやそれならノートパソコンがいまだにMacBook Air 2013だからそちらを買い換えるほうが先だろう。&lt;/p&gt;&#10;&lt;p&gt;いっそChromeタブレット……は時期尚早だし、少なくともタブレットについてはiPadが最強なんだよなぁ。&lt;/p&gt;&#10;&lt;p&gt;いっそ諦めがつくくらいに壊れないものか、などと思う今日この頃。&lt;/p&gt;</description></item><item><title>2019年に開発目的でMacを1台だけ買うなら何が良いか</title><link>https://hack-le.com/2019-mac/</link><pubDate>Fri, 04 Oct 2019 03:26:19 +0900</pubDate><guid>https://hack-le.com/2019-mac/</guid><description>&lt;p&gt;もうすぐ2020年も見えてきた今日この頃ですが。これからITエンジニアを目指す人が、開発用にMacを1台買うなら何がよいだろう？ということを相談されたので、個人的な意見を書きます。&lt;/p&gt;&#10;&lt;p&gt;まぁ結論を書くと、ノートならMacBook Pro 2019の13インチ、ノートじゃなくてよいならiMacですね。&lt;/p&gt;&#10;&lt;h2 id="そもそも何がしたいのか"&gt;そもそも何がしたいのか&#10;&lt;/h2&gt;&lt;p&gt;これからITエンジニアを目指す人が…とだけ言われても、正直これだけじゃなんとも言えんのです。iOSアプリを作るのか、Webアプリを作るのか、あるいはサーバーサイドでやりたいのか、とか……。&lt;/p&gt;&#10;&lt;p&gt;ただまぁ、そういう方向性もざっくりとしか見えていないだろう、とも思う。というか、決めるべきでもない。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、恐らくこういう相談をする人はだいたいスマートフォン用のアプリケーションまたはWebアプリケーションをイメージしているだろう。で、どちらかというとどちらよりなのか、くらいは考えておいたほうがよい。スマホアプリ考えているなら、スペックは上目で考えておくと安心。&lt;/p&gt;&#10;&lt;h2 id="必要なスペック"&gt;必要なスペック&#10;&lt;/h2&gt;&lt;p&gt;基本的にはスタンドアロンのアプリケーションを作るほうが要求されるスペックは高い。当たり前だけれど。特にiOSアプリケーションを作るとなれば、ビルドしたりエミュレータを動かしたりするうえ、GUIの操作も大事になるから画面領域も欲しくなる。&lt;/p&gt;&#10;&lt;p&gt;一方、Webアプリであれば、コマンドラインで簡潔するかもしれず、また作業もほとんどサーバー上でできるかもしれない。とはいえ、基本的にはローカルでも満足のいく処理ができたほうがよいので、スペックは高いに越したことはない。&lt;/p&gt;&#10;&lt;p&gt;以上を踏まえたうえで、個別にスペックを見ていく。&lt;/p&gt;&#10;&lt;h3 id="メモリ"&gt;メモリ&#10;&lt;/h3&gt;&lt;p&gt;メモリは多ければ多いほどよいが、とりあえず8GBあれば良い。できれば16GBあると、長く使えるものと思う。予算と相談。&lt;/p&gt;&#10;&lt;h3 id="ストレージ"&gt;ストレージ&#10;&lt;/h3&gt;&lt;p&gt;ストレージはその人の使い方でだいぶ異なるが、256GBが一つの目安か。128GBはさすがに心もとない。あと、SSDの特性上、容量が大きいほうが速度も出る、というのも一つ知っておくとよい。&lt;/p&gt;&#10;&lt;p&gt;多ければ多いほどよいのはたしかだが、予算はあるだろうし、ストレージを512GBにするなら、メモリを16GBにするほうが恐らく有意義。&lt;/p&gt;&#10;&lt;h3 id="画面と携帯性"&gt;画面と携帯性&#10;&lt;/h3&gt;&lt;p&gt;一つだけ持つのであれば携帯性を考えねばならないので、その場合13インチクラスの画面が筆頭候補になる。ただし、携帯する気がないのであればデスクトップPCが視野に入る。&lt;/p&gt;&#10;&lt;h3 id="cpu"&gt;CPU&#10;&lt;/h3&gt;&lt;p&gt;開発で使う場合、CPUが問題となる。というより、2019年現在、メモリとストレージについてはどのモデルを買おうと特に問題にはならんのだ（ストレージ128GBにだけ注意すれば）。&lt;strong&gt;考えるべきところはCPU&lt;/strong&gt;です。しかもこれがカタログスペックからは中々わかりづらいところがある。&lt;/p&gt;&#10;&lt;p&gt;CPUのスペックは色々あるが、コア数、クロック周波数、TDPあたりが目安。&lt;strong&gt;コア数は現在2または4で、開発で使うのであればもちろん4のほうがよい&lt;/strong&gt;。2でもダメなことはないが、2020年あたりからはIntelから発表されているモデルを見ると4コアが主流になりそうであるし、可能な限り4コアを選びたい。&lt;/p&gt;&#10;&lt;p&gt;クロック周波数は……もうあまり参考にならないが、まぁ基本的には高いほうが性能は良い。発熱も大きくなるけれど。熱がこもればパフォーマンスも落ちる。&lt;/p&gt;&#10;&lt;p&gt;初心者が見落としがちなのはTDPで、これはざっくりいうとどれくらい発熱するかの指標で、当然のことながら大きいほうがパワーはでやすい。もちろんその分熱は出るしバッテリーも消費するので、大きければよいというものではない。TDPが小さいものは、熱効率を考えた設計がされていると考えられるし、要はパフォーマンスと熱のトレードオフなわけだ。&lt;/p&gt;&#10;&lt;p&gt;なので、&lt;strong&gt;MacBookなどは当然省エネ寄りの設計であるし、一方デスクトップPCであれば比較的パフォーマンス寄りの設計になっている&lt;/strong&gt;はずだ。実際、調べてみるとわかるがMacBook Air、MacBook Pro、iMacでそれぞれCPUの型番が違う。これはコア数やクロック周波数以上に普段使いの体感速度として現れるだろう。&lt;/p&gt;&#10;&lt;p&gt;参考：「&lt;a class="link" href="https://ascii.jp/elem/000/001/724/1724010/" target="_blank" rel="noopener"&#10; &gt;ASCII.jp：いまさら聞けないIT用語集 TDPってなに？ 消費電力じゃないの？ (1/3)｜ロードマップでわかる！当世プロセッサー事情&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h3 id="中古の注意点"&gt;中古の注意点&#10;&lt;/h3&gt;&lt;p&gt;中古はオススメしない。Macの中古はあまり安くならないうえに、ソフトウェアの寿命が最新のものよりも短くなるから。具体的には、OSのサポートの問題。&lt;/p&gt;&#10;&lt;h2 id="つまり何を選ぶとよいか"&gt;つまり何を選ぶとよいか&#10;&lt;/h2&gt;&lt;p&gt;以上を踏まえると、&lt;strong&gt;MacBook Pro 2019の13インチモデルがまぁ無難&lt;/strong&gt;、ということになる。MacBook AirおよびMacBookは、CPUが2コアなので微妙である。MacBook ProはTouch Barの分割高なので、あまり好きではないが、まぁ仕方ないだろう。&lt;/p&gt;&#10;&lt;p&gt;ただし、前述したとおり、Intelから発表されているモデルを見ると、来年以降はMacBook Airあたりも4コアになる可能性は十分あるかなと思う。その場合MacBook Airも視野に入ってくるし、それでもよいかとは思う。&lt;/p&gt;&#10;&lt;p&gt;が、&lt;strong&gt;MacBook ProとMacBook Airでは用いられているCPUの設計思想が違う&lt;/strong&gt;ことに注意しなくてはならない。たとえコア数とクロック周波数が同じようなスペックになったとしても、その性能は随分違うはずだ。&lt;/p&gt;&#10;&lt;p&gt;個人的には、&lt;strong&gt;最初のMacは27インチiMacがいいんじゃないかな&lt;/strong&gt;と思っていたりする。性能は文句なしで、画面も広いからなんでもできる。そして、本格的な開発は家ですることが多いはずだし、職場でやるならマシンを与えられるはずだ。で、外ではもう少しマイルドな価格のChromebookあたりを使うとか、まぁ奮発して多少値段が熟れたMacBook Airを買うとか。2台になるけど。でも仮にもデベロッパーになろうっていう人間が、&lt;strong&gt;仕事道具に投資しないってのも変な話&lt;/strong&gt;だしね。&lt;/p&gt;&#10;&lt;p&gt;ということで&lt;strong&gt;MacデスクトップとMacノート両方買っちゃおう&lt;/strong&gt;、とタイトルに反したことを言っておしまい。&lt;/p&gt;</description></item><item><title>iPhone6S以降ならiPhone 11はいらないかな</title><link>https://hack-le.com/iphone11/</link><pubDate>Sat, 28 Sep 2019 17:38:02 +0900</pubDate><guid>https://hack-le.com/iphone11/</guid><description>&lt;p&gt;そういえばいつのまにかiPhone 11が発売された。僕のRSSフィードが喧しかったが、個人的事情でそれどころではなかったので、スルーしていた。が、まぁ落ち着いてきたので、どんな感じになったのか今更ながら各種メディアの記事を眺めている。&lt;/p&gt;&#10;&lt;p&gt;僕はiPhone 8を持っているけれど、まぁ、順当に見送りである。というか、新OSがギリギリサポートしているiPhone 6S以降なら特に問題はなさそうだ。最近はもうソフトウェアの寿命のほうが問題だなぁ。&lt;/p&gt;&#10;&lt;h2 id="iphone-11雑感"&gt;iPhone 11雑感&#10;&lt;/h2&gt;&lt;p&gt;今回出たのはiPhone 11とiPhone 11 ProそしてiPhone 11 Pro Maxで、そもそもスマートフォンでProとはなんぞやと思いつつも、相変わらずネーミングのポリシーがブレブレで困る。まぁ今に始まったことではないのだが、これはAppleの組織体制が反映されていたりするのだろうか。iPhone Xの錯綜感に比べればだいぶマシとも思うものの。&lt;/p&gt;&#10;&lt;p&gt;さて、肝心の機能面であるが、見るべきところはカメラとバッテリーくらいに思える。バッテリーはよくなったといってもモバイルバッテリーを持ち歩く日々であることは変わらないだろうし、カメラはそんなに使わないし。自分としては微妙なところだ。&lt;/p&gt;&#10;&lt;p&gt;順当に性能はアップしているものの、すでにスマートフォンの性能は飽和気味で、アプリが追いついていない。まぁ追いついてしまうとまだまだいる昔のデバイス組を切り捨てることになるし、そこまでしてスマホで実現したいことも現状そんなになかろうしなぁ。&lt;/p&gt;&#10;&lt;p&gt;USB Type-Cに対応すれば、訴求力になるように思うのだが、AppleとしてはまだまだLightningで頑張るつもりらしい。microUSB時代ならいざしらず、USB Type-Cなら問題ないだろうし（厚みはちょっとあるけど…）、Thunderbolt 3だってあるのに思うが、まぁでもそんなことを思うのは一部の好事家だけで、一般的にはiPhoneのコネクタが変わる反発のほうが大きいのかもしれない（参考「&lt;a class="link" href="https://japan.cnet.com/article/35121293/" target="_blank" rel="noopener"&#10; &gt;新「iPhone」にUSB-Cを望む理由とアップルが「Lightning」を捨てられない理由 - CNET Japan&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="ソフトウェアの寿命のほうが先にきそうな"&gt;ソフトウェアの寿命のほうが先にきそうな&#10;&lt;/h2&gt;&lt;p&gt;僕が使っているのはiPhone 8だけれど、今回は見送りするし、多分8から買い換える人はあまりいないだろうと思う。指紋認証のほうが好きだという人も一定数いそうだし（顔認証も便利だけど。夜、ベッドでスマホいじるんでなければ）。&lt;/p&gt;&#10;&lt;p&gt;というかまぁ、ハードウェア的にはiPhone 6くらいでも現状でもさほど不便なく使えるんではないか。ここ数年ナンバリングでスキップすることが多かったので、やけに昔のことに思えるが、ほんの5年前のことである。&lt;/p&gt;&#10;&lt;p&gt;実際は新OSのサポートがiPhone 6Sからなので、基準としてはそこになるかなと思う（Suicaユーザーなら7以降になるだろうが）。既にハードウェアよりソフトウェアのほうが先に寿命が来る時代。まぁでも、さすがに6以前からの乗り換えなら、進化を十分に体感できそうなので、よいのではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;現実には、一番売れているのは8らしい（「&lt;a class="link" href="https://www.itmedia.co.jp/mobile/articles/1909/28/news008.html" target="_blank" rel="noopener"&#10; &gt;「iPhone 11／11 Pro／11 Pro Max」発売でも「iPhone 8」のトップは揺るがず (1/4) - ITmedia Mobile&lt;/a&gt;」）。まぁ安くなったしね。iPhone 11も、新機種として高いというわけではないのだけれど。でもストレージ容量も一緒だしな。2万の差はでかいけれど、1万と3万じゃなくて6万と8万だしな。いつまでiOSのアプデ対応をしてくれるか考えると、最新のほうがいいように思うが。iPhone 8ってちょうど最後のホームボタンだし、時期が来たら容赦なく切り捨てられそうな気もする。あと3年くらいはサポートしてもらえたらなぁと思うが。&lt;/p&gt;&#10;&lt;p&gt;ARだのAIだの言っても、アプリ側が追いついていないし、AIなんかは結局処理はクラウドで、だったりするので、スマートフォンの高性能化も、ゲーマーでもなければもうそんなにだなぁと思う。5Gも熟れるにはまだだいぶかかるだろうし。今はスマートフォンにとっては凪みたいな時期かもしれない。&lt;/p&gt;</description></item><item><title>2019年もMacBook Air 2013で戦う</title><link>https://hack-le.com/2019-mba2013/</link><pubDate>Thu, 12 Sep 2019 16:36:46 +0900</pubDate><guid>https://hack-le.com/2019-mba2013/</guid><description>&lt;p&gt;僕の愛機MacBook Air 2013はいまだ最前線で戦っている。いや、何と戦っているのかはわからない。特に戦ってない。&lt;/p&gt;&#10;&lt;p&gt;それはそれとして、MacBook Air 2013だ。2013年の7月に買ったから、もう6年経過している。しかも開発にも使っている。メモリ4GBはこのご時世さすがにつらい。dockerとかとても使う気になれない。バッテリーはすっかり弱まり、もう2時間ももたない。なにをするにも時間がかかる。だがそれでもまだ使える、使えるのだが……。&lt;/p&gt;&#10;&lt;h2 id="いまだに使っている"&gt;いまだに使っている&#10;&lt;/h2&gt;&lt;p&gt;初めて買ったMacはMacBook Air 2010で、バッテリーの持ち、軽さ（当時はね！）、パフォーマンス、すべてに感動した覚えがある。その後、2013年にMacBook Air 2013に新調した。あらゆるところが順当にアップデートされており、満足したものである。&lt;/p&gt;&#10;&lt;p&gt;それから6年。まさかいまだに使い続けているとは、当時の僕には想像もできなかっただろう。まぁ、ちょうどCPUの進化がしばらく止まる時期でもあった。&lt;/p&gt;&#10;&lt;p&gt;CPUについては、AMDがRyzan 7を発表して潮目は一気に変わり、ようやく13インチ以下のノートパソコンでも4コアが主流になった。しかしMacBook Airはいまだに2コアのままである。まぁMacBook Proは4コアなのだが、僕はTouch Barがあまり好きではないし、家で開発するときはMac miniを使っているので、高いお金を払ってハイスペックノートを買う気はないわけだ。&lt;/p&gt;&#10;&lt;p&gt;ということで、新しいMacBook Airが4コアになれば食指も動くだろうが、実際にはそうではないので、いまだ6年前のMacBook Airを使い続けている。&lt;/p&gt;&#10;&lt;h2 id="不便と思わないことはない"&gt;不便と思わないことはない&#10;&lt;/h2&gt;&lt;p&gt;僕も一応は開発者の端くれであるし、またここ2年ほどはついに念願のITエンジニアになったので、6年前のMacBook Airでは力不足だと思うところはある。特にメモリの4GBはこのご時世にはつらい。&lt;/p&gt;&#10;&lt;p&gt;だが使えないというほどのことはなく、こういうブログの編集程度のライトな用途であればむしろ便利である（と言いつつ、今この記事はChromebookで書いている）。逆にいうと、ヘビーな用途になってくるとしんどいとも言える。&lt;/p&gt;&#10;&lt;p&gt;一番つらいのはバッテリーで、ネットを適当にブラウジングしているだけでも1分に1%ずつくらいの割合で減っていくものだから、もう2時間ももたなくなってしまった。なので、電源環境のないところではあまり有効に使えない。とはいえ、6年前のノートパソコンのために、別に妊娠しているわけでもないバッテリーの交換をする気にもなれないのであった。&lt;/p&gt;&#10;&lt;h2 id="chromebookを買ったが"&gt;Chromebookを買ったが…&#10;&lt;/h2&gt;&lt;p&gt;まぁちょっと前にChromebookを買ってしまったので、なかなかノートパソコンを新調する気になれない、ということもある。Chromebookはタッチパネルに対応したもので、Androidアプリを入れると大画面タブレットとしても使えるのだが、そうそうにタッチパネルを破壊するという愚を犯してしまったために、意図しないところを勝手にタッチする現象に見舞われてしまい、今はタッチパネル機能を無効化している。&lt;/p&gt;&#10;&lt;p&gt;それでも普通のノートパソコンとして使う分には十分使えるので、これをMacBook Airの代わりに使えないか、と検討したこともあった。今はLinuxもかんたんに入れられるし。実際、VisualStudio Codeも入れられた。&lt;/p&gt;&#10;&lt;p&gt;しかしまぁ、もとよりローカルで使われることを想定されたOSではないから、完全にクラウドに移行しているならともかく、まだまだそうもいかない昨今、普段使いするには色々と面倒なところもあって、結局スペックで見劣りしても開発にはMacBook Airを使ってしまっている。よほどの好事家でないと、Chromebookで開発を、とはなかなかならないだろう。ブログを書くくらいであればChromebookで申し分ないのだが。&lt;/p&gt;&#10;&lt;h2 id="まだしばらく使い続けそうな感じ"&gt;まだしばらく使い続けそうな感じ&#10;&lt;/h2&gt;&lt;p&gt;そんなようなことをあれこれ考えていると、少なくとももうしばらくは今のMacBook Air 2013を使い続けることになりそうだ。CPUが4コアになれば買う気にもなるが、当分は期待できなさそうな気もする…と思ったが、Intelのラインナップを見ると、次あたりいけるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;噂といえば、今年の後半に新型が出るという噂もあったが（&lt;a class="link" href="https://jp.techcrunch.com/2019/07/05/2019-07-04-apple-reportedly-shifting-to-new-keyboard-design-in-2019-2020-macbooks/" target="_blank" rel="noopener"&#10; &gt;今年後半以降に出るMacBookシリーズの新モデルは完全新設計のキーボードを搭載 | TechCrunch Japan&lt;/a&gt;）、実際にはこの記事の一週間後(7/11)に新型が出たのは周知の通りだ。&lt;/p&gt;&#10;&lt;p&gt;しかしまぁ、内容的にはTrue Toneを除けばSSDの性能ダウンしつつプライスダウンといったところなので、新型と言ってよいか微妙かもしれない。少なくとも「&lt;a class="link" href="https://appledays.santalab.me/#macbookair" target="_blank" rel="noopener"&#10; &gt;Apple Days | Apple製品の発売周期まとめ&lt;/a&gt;」は新型と認めていないようだ。実際、買うならあえてさらに安くなった2018年モデルのほうだ、という声もある。実際カカクコムを見ると一番の売れ筋が2017モデルでなんだかなぁ。&lt;/p&gt;&#10;&lt;p&gt;評判の悪かったバタフライキーボードも刷新されるタイミングでもあるし、2020年にもなにかしら発表はないものかと期待してはいる。どうなるかな。ひょっとすると、まださらに2,3年くらい今のMacBook Air 2013で戦うことも考えられるんだろうか。そうするとさすがにバッテリー交換しようかという気にもなるが。うーん。なんだかなぁ。&lt;/p&gt;</description></item><item><title>家庭用なら1ベイNASで十分だ</title><link>https://hack-le.com/nas-1bay/</link><pubDate>Tue, 03 Sep 2019 01:24:05 +0900</pubDate><guid>https://hack-le.com/nas-1bay/</guid><description>&lt;p&gt;最近、ReadyNAS 104のハードディスクが1つ逝った。で、それを機にNASの構成について考えた。ReadyNAS 104は4ベイNASで、なにも手を付けなければハードディスク4台構成のRAID-5が構築される。これはまぁ便利で、ハードディスクが1つ逝っても新しいものと入れ替えるだけで元通りになる。元通りになる、が……。&lt;/p&gt;&#10;&lt;p&gt;……意味ある？ということに気づいてしまった。ないっすわー。1ベイNASでええなぁ。&lt;/p&gt;&#10;&lt;h2 id="ハードディスクが壊れた"&gt;ハードディスクが壊れた&#10;&lt;/h2&gt;&lt;p&gt;最近、ハードディスクが1台逝った。45000時間以上使っていたから、まぁ大往生だろう。Seagateのハードディスクだ。ちなみに、だいぶ前にも1台逝っているが、それもSeagate。ReadyNAS 104に、SeageteのHD2台とWestern DigitalのHD2台を入れていたが、見事にSeageteの2台が先に逝ったことになる。おかげで、今はすべてWestern Digitalだ。&lt;/p&gt;&#10;&lt;p&gt;さて、RAID-5を組んでいたので、本当であれば新しいHDを1台入れ替えればそれで済む話だ。それで済む話なのだが……色々と手違いがあって、ファクトリーリセットしてしまった。冗長性とっていた意味ねぇ。&lt;/p&gt;&#10;&lt;p&gt;意味ないのだが……ファクトリーリセットをしながらふと思った。「別にそんな手間でもないよな」、と……。&lt;/p&gt;&#10;&lt;h2 id="raidがしたいだけだった"&gt;RAIDがしたいだけだった&#10;&lt;/h2&gt;&lt;p&gt;いや、実際そのとおりで。もちろんこれが事業用ならば、少しのダウンタイムも許されない！ということもあると思うんだが、家庭用のデータ保管庫にダウンタイムがあったからってなんだ？バックアップさえ取っておけば問題なかろう。そう、問題ない。&lt;/p&gt;&#10;&lt;p&gt;とすると……あれ、そもそもRAIDする必要なくない？みたいな。あ、いらねぇわ、っていう。いや、ハードディスクを交換するだけで（しかもホットスワップ）元通りになるのは感動的だったけどね。感動的だったが……。&lt;/p&gt;&#10;&lt;p&gt;そんな、年に1回あるかないかの行事のために、コストかける必要ある？っていう。ない。ないさね。あーははは。&lt;/p&gt;&#10;&lt;p&gt;薄々気づいてはいた。気づいていたんだが……気づかない振りをしていた。だってRAIDしたかったんだもん。かっこええやん。RAID。&lt;/p&gt;&#10;&lt;p&gt;それにまぁ、今でこそ4TBとか6TBのHDの容量当たり単価が安くなっているけれど、このNASを買った頃には2TBが最安だったしねぇ……さすがに2TBじゃ足りんからなぁ。まぁでも、RAID5は必要なかったな……。&lt;strong&gt;結局やってみたかっただけ&lt;/strong&gt;なんだ。&lt;/p&gt;&#10;&lt;h2 id="nasは必要だがベイ数は"&gt;NASは必要だがベイ数は…&#10;&lt;/h2&gt;&lt;p&gt;NASの機能自体は必要だ。僕は複数のPCを持っているし、そうでなくても、今どきはタブレットやスマートフォンからもメディアにアクセスすることがよくあるわけで。それに、NASなら部屋の外に置いておけば静かだし。だから、NASはいる。しかし、RAIDはいらない。&lt;/p&gt;&#10;&lt;p&gt;そうすると、ひょっとして1ベイNASが最高なんでは？と思う。いや、多分、そうだ。&lt;strong&gt;家庭用NASは1ベイで十分&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B076HCL8WQ&amp;linkId=4d81d6ddfa112603678485af45262929"&gt;&lt;/iframe&gt;&#10;&lt;p&gt;気になっているのはSynologyのDS118。もっと安価なDS119jもあるんだけれど、こっちはメモリが256MBしかなくて、さすがにちょっと心許ない気がするので。でもDS118、今ちょっと高いね。&lt;/p&gt;&#10;&lt;p&gt;……いずれにしても、自分は既にReadyNAS 104を持っているので、この機体が壊れるまでは使い続けるであろう。2TBハードディスクも残っているし。今は、2台のRAID0で組んでいる。最終的にはReadyNAS 104を1ベイだけ使うという悲しいことになるかもしれない。&lt;/p&gt;</description></item><item><title>4コアCore i5なChromebookが快適過ぎて楽しい</title><link>https://hack-le.com/core-i5-chromebook/</link><pubDate>Sat, 08 Jun 2019 19:34:03 +0900</pubDate><guid>https://hack-le.com/core-i5-chromebook/</guid><description>&lt;p&gt;買ってしまいました。Chromebook。Chromebookを使うのは久しぶりです。前回買ったときは、19,800円のCeleronなお安いやつで、まぁ使えないことはないのだけれど、MacBook Air 2013を持っている身としては使いどころがなかったな……と、一年もたたずに売り払ってしまいました。&lt;/p&gt;&#10;&lt;p&gt;今回は違う。違います。今回買ったChromebookはCore i5-8250Uです。もう期待しかない。メモリも8GB。いったい何に使うのか？わからない。わからないが、めっちゃ快適。楽しい。楽しいです。本当に。まだ全然使えていないけれど、とりあえず今はこの楽しさを書きなぐりたい。&lt;/p&gt;&#10;&lt;h2 id="chromebook再チャレンジ"&gt;Chromebook再チャレンジ&#10;&lt;/h2&gt;&lt;p&gt;これで二台目のChromebookになります。といっても、一台目は既に売り払っているので手元にはありません。いつ頃買ったのだったかな…とブログを掘り起こしてみたら、2015年の12月でした（&lt;a class="link" href="https://hack-le.com/46352847-2/" &gt;Chromebook 購入しました – 或る阿呆の記&lt;/a&gt;）。そして売り払ったのが2016年の10月のこと（&lt;a class="link" href="https://hack-le.com/profile/#HP_Chromebook_G3" &gt;PROFILE – 或る阿呆の記&lt;/a&gt;）。まぁつまり、一年も使わなかったということです。&lt;/p&gt;&#10;&lt;p&gt;しかも、その間Chromebookをうまく使えたと思ったことはありませんでした。当時はまだMacBook Air 2013でも十分戦えていたので、ノートパソコンとしてもセカンドマシンの位置づけだったわけですが、正直ノートパソコン、そんな何台もいりません。私はタブレットも好きですから、カジュアルな使い方ならばiPadで十分なわけです。快適だし。&lt;/p&gt;&#10;&lt;p&gt;そもそもノートパソコンよりデスクトップマシンを大事にしてしまうので、ノートパソコンの出番自体がそんなに多いわけでもないのですよ。&lt;/p&gt;&#10;&lt;p&gt;ということで、Chromebook初トライは三本指スワイプでタブ間移動が便利だったな、くらいのものでした。&lt;/p&gt;&#10;&lt;p&gt;あれから三年、時代は変わりました。&lt;/p&gt;&#10;&lt;p&gt;まず大きいのはAndroidアプリがChromebookで使えるようになったこと。これは大きい。特にタブレットはiPadとKindleでローエンドからハイエンドまで完全に制覇されてしまっていて、Androidタブレット市場は死んだも同然、まぁHuaweiがかろうじて踏ん張っている程度のものです。悲しい。そのHuaweiも昨今のアメリカとの対立で、どうなることやら。&lt;/p&gt;&#10;&lt;p&gt;でも、ChromebookでAndroidアプリが使えるとなれば話は変わってくる。夢の大画面Androidタブレットの代替えとしても使えるわけです。これは嬉しい。&lt;/p&gt;&#10;&lt;p&gt;次に、Linuxが公式にインストールできること。開発マシンとしての運用も夢ではなくなってきた。まぁ、実際本当に開発でガンガン使えるのかというと、正直やってみると色々難しいところがあるのだろうなぁと思っていますが、しかし夢はあります。素敵。&lt;/p&gt;&#10;&lt;p&gt;そして、ノート用の4コアなCore iシリーズが出たこと。これはむしろAMDに感謝でしょうか？長らくノートはハイエンドでも2コア時代が続きましたからねー。&lt;/p&gt;&#10;&lt;p&gt;あと……最近のMacBook Proが正直微妙なこと。高い。割に微妙。Touch Barいらない。ほんとに。&lt;/p&gt;&#10;&lt;p&gt;最後に、ハイスペックなChromebookがまぁまぁな値段で出ていること（少なくともMacBookと比べれば…）。……日本には入ってきておらず、まぁ個人輸入すればよいのですが、関税もかかるし、技適の問題もあり必ずしも大手を振って使えるわけではないことが残念ではあります……。まー輸入品の場合、実際問題になるのはキーボードのほうでしょうか。僕はUS派なのでよいですが。&lt;/p&gt;&#10;&lt;p&gt;際立った進化のないWindowsとMacのPCを尻目に、Chromebookは着実な進化を続けてきました。このスマホ全盛の時代に、今なおPCのことをGoogleさんが真剣に考えてくれているのはすごく嬉しいです。心強い。&lt;/p&gt;&#10;&lt;p&gt;さすがに愛機MacBook Air 2013もそろそろ限界が見え始めて、ノートPC新調したいなと思っていたところで、いくつもの要因が重なり、今こそもう一度Chromebookを手にすべき、と、ついついポチってしまいました。&lt;/p&gt;&#10;&lt;h2 id="デスクトップ超えの体験も"&gt;デスクトップ超えの体験も&#10;&lt;/h2&gt;&lt;p&gt;で、今現在、こうしてChromebookで記事を書いているのですが、まぁ快適です。そして楽しい。&lt;/p&gt;&#10;&lt;p&gt;Androidアプリが使えるのは知っていたけれど、ランチャーに最初からGoogleのPlay ストアがあるのには驚きました。とんでもねぇ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2019/06/ink-700x525.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;雑なスクリーンショット&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;今さくっとPlay ストア起動してみました。この雑なスクショよ。スクショとって、トリミングして、マシンに付属しているスタイラスペンをさっと取り出して手書きで注釈つけられる。この体験すごい。素敵。これについては&lt;strong&gt;デスクトップでの利用超えている&lt;/strong&gt;わ。素晴らしいわ。&lt;/p&gt;&#10;&lt;p&gt;それにAndroidアプリが使えるってことは、Kindleとかも使えるわけで、読書端末としても使い勝手が期待できるわけです。いやまぁ、正直これについては常用は厳しいんじゃないかと感じてはいるけれど（重さとバッテリーの問題から）。&lt;/p&gt;&#10;&lt;p&gt;でも試しにAndroidアプリ入れてみたら想像以上にサクサク動く、というかそこらのネイティブのAndroidマシンより快適なんじゃないかってくらいサクサクのヌルヌルで感動的。これはまぁ、4コアCore i5の力なんだろか。&lt;/p&gt;&#10;&lt;h2 id="苦労しそうなところ"&gt;苦労しそうなところ&#10;&lt;/h2&gt;&lt;p&gt;これから使い込んでいこうと思っているのだけれど、苦労しそうだなぁと思うのはやはりキーバインド問題。特に自分なんかはUS派でEmacsキーバインドが好きででも普通のショートカットコマンドも使いたいよねって、まぁつまりMacのUSキーボードでできていることがそのままやりたいよね、という希望があるのだけれど、これを完全に満たすのは難しそうです。&lt;/p&gt;&#10;&lt;p&gt;Emacsキーバインドについては、先人たちの素晴らしい努力でだいぶ実現されているようなのだけれど、しかし既存のショートカットとの併存という点では見た感じまだ厳しそう。まぁこれはMacのコマンドキーに相当するものがChromebookにはないので致し方ない面もあります（でも検索キーがうまく使えればあるいは）。&lt;/p&gt;&#10;&lt;p&gt;あとはまぁ、やっぱりいざ開発に使おうとしたら、色々苦労するんだろうな、と。まーでも、自分は最近ハードはあまり触らないし（これはこれで寂しい）、ソフトもGUI絡むようなことはしていないので、けっこうなんとかなりそうに思っています。&lt;/p&gt;&#10;&lt;h2 id="日本でも流行らないものか"&gt;日本でも流行らないものか&#10;&lt;/h2&gt;&lt;p&gt;ということで、かなり遊べそうな感じがしていて、少しばかりテンションが上がっている。もっと日本でも流行って、そこそこのスペックのChromebookが売られるようにならないものですかねー。&lt;/p&gt;</description></item><item><title>Dropboxのスクリーンキャプチャ共有機能の痒いところに手が届いた感じ</title><link>https://hack-le.com/dropbox-screencapture/</link><pubDate>Mon, 27 May 2019 00:40:58 +0900</pubDate><guid>https://hack-le.com/dropbox-screencapture/</guid><description>&lt;p&gt;オンライン・ストレージサービスにも色々あるけれど、やはり何と言っても素晴らしいのは老舗のDropboxだろう。基本となるファイル共有機能が非常に安定しているし、ご削除したデータの復元機能まであるし、Macの濁点が一文字として扱われてしまうのを修正してくれるなんていうマニアックな機能まである（多分これに対応しているのはDropboxだけだと思う）。それと僕が気に入っているのは、&lt;strong&gt;スクリーンキャプチャを自動的にjpeg変換して共有フォルダに移動してくれる機能&lt;/strong&gt;だ。地味ながら嬉しい。&lt;/p&gt;&#10;&lt;h2 id="googleにもmsにも負けない"&gt;GoogleにもMSにも負けない&#10;&lt;/h2&gt;&lt;p&gt;Dropboxは老舗のオンライン・ストレージサービスだ。GoogleにMicrosoft、Appleなど、名だたる巨人たちがこぞって競合になっているにも関わらず、今なお利用され続けており、実際&lt;strong&gt;この類のサービスでは今なお一歩抜きん出たクオリティ&lt;/strong&gt;であると思う。&lt;/p&gt;&#10;&lt;p&gt;自分はGoogle Driveも長く使っているけれど（会社ではG Suiteが便利なので）、PCを起動してから同期されるまでやけに時間がかかるとか、同期がうまくいかないトラブルとかがちょいちょい起きるのに対して、Dropboxはそういうトラブルがほとんど起きたためしがない。MicrosoftのOneDriveも使おうとしたことがあるが、Mac版アプリの出来がひどく、毎回ログインを求められるなど使いものにならなかった。……Box.netは地味に優等生だと思うが、DropboxとGoogle Driveで事足りているので滅多に使わない。&lt;/p&gt;&#10;&lt;p&gt;基本となる同期機能がしっかりしているだけでなくて、CLIのLinuxでも使うことができたり、Macの濁点問題に対応していたり（&lt;a class="link" href="https://hack-le.com/gdrive-mac-win/" &gt;MacとWindowsのGoogle ドライブによる共有、また濁点でハマる&lt;/a&gt;）など、マニアックな機能に対応しているところも非常にポイントが高い。スマートフォン用のアプリも使いやすいし。&lt;/p&gt;&#10;&lt;p&gt;また、Microsoftなどは子供の写真が児童ポルノ判定を受けてアカウント凍結された、などという話もあったが、Dropboxではそういうことは聞かない。まぁMicrosoftにとってオンラインストレージサービスは数あるサービスの一種であるが、Dropboxにとってはまさに生命線ではるので、あまり余計なことをしてユーザーを逃したりはしないのだろうと勝手に想像している。&lt;/p&gt;&#10;&lt;h2 id="地味ながら役立つ機能"&gt;地味ながら役立つ機能&#10;&lt;/h2&gt;&lt;p&gt;実際、&lt;strong&gt;専業だからこそのきめ細やかさ&lt;/strong&gt;だと思う。規模が大きくなりすぎていないので、ちょっとした機能も実装できるのだろう。スクリーンキャプチャの共有機能もその一つだと思う。&lt;/p&gt;&#10;&lt;p&gt;この機能は実に地味な機能だが、複数のPCを使っていると（Dropboxユーザーのほとんどはそういう人だろう）なかなかどうして便利だ。特に自分などはブログを書いているので、ブログで使う画像をスクリーンキャプチャで取得することが多いのだけれど、それが即座に共有フォルダに移動されるのは、とてもありがたい。というのは、一つの記事を書き上げるのに、複数のPCを使うことなどざらにあるからだ。&lt;/p&gt;&#10;&lt;p&gt;あるときはノートPCで編集するし、あるときはデスクトップPCで編集する。当たり前にやることだ。なので、リソースを簡単に共有できるというのは、非常にありがたいのである。しかも、このときついでにjpegに変換してくれるというのが、またありがたい。スクリーンキャプチャはそのままでは多くの場合pngだけれど、pngは容量的にjpegに比べてたいていの場合不利なので、ブログ記事にあげる際はjpegに変換することが多いのだ。&lt;/p&gt;&#10;&lt;h2 id="dropboxが一番良い"&gt;Dropboxが一番良い&#10;&lt;/h2&gt;&lt;p&gt;こういう用途ではEvernoteも使えなくはないのだが、ファイラーを使って管理できるシンプルさには敵わない（Evernoteは個人的に応援していて、プレミアム会員なのだけれど、Dropboxとは随分差をつけられてしまったなと思う）。Google Driveも、Google Photoと一緒になってしまってから、理解すれば便利かもしれないが、やけにわかりづらくなってしまった。&lt;strong&gt;一つのことに専念するDropboxのわかりやすさ、安定性の高さ、地味ながら役立つ機能の豊富さは、業界トップである&lt;/strong&gt;な、と思う。&lt;/p&gt;</description></item><item><title>SendGridのAPIでPythonライブラリ(6.0.5)を使って添付ファイルを送信する</title><link>https://hack-le.com/sendgrid-python-attachments/</link><pubDate>Thu, 23 May 2019 18:59:05 +0900</pubDate><guid>https://hack-le.com/sendgrid-python-attachments/</guid><description>&lt;p&gt;SendGridのAPIは、Pythonで使えるものがGitHubで公開されていて、便利に使える。まぁだいたいのことはGitHubのページを見るのが一番良いのだが、自分でさっと使う用に、メモ書きしておく。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;環境は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Python 3.7.3&lt;/li&gt;&#10;&lt;li&gt;sendgrid-python 6.0.5&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;GitHubのページは「&lt;a class="link" href="https://github.com/sendgrid/sendgrid-python" target="_blank" rel="noopener"&#10; &gt;GitHub - sendgrid/sendgrid-python: The Official Twilio SendGrid Led, Community Driven Python API Library&lt;/a&gt;」。基本的にはここを読むのが一番良い。特に「&lt;a class="link" href="https://github.com/sendgrid/sendgrid-python/tree/master/use_cases" target="_blank" rel="noopener"&#10; &gt;sendgrid-python/use_cases at master · sendgrid/sendgrid-python · GitHub&lt;/a&gt;」はありがたくて、添付ファイルの付け方とか「&lt;a class="link" href="https://github.com/sendgrid/sendgrid-python/blob/master/use_cases/attachment.md" target="_blank" rel="noopener"&#10; &gt;sendgrid-python/attachment.md at master · sendgrid/sendgrid-python · GitHub&lt;/a&gt;」を見ればよい話ではある。&lt;/p&gt;&#10;&lt;h2 id="サンプルコード"&gt;サンプルコード&#10;&lt;/h2&gt;&lt;p&gt;サンプルコードは以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import base64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import mimetypes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import os&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from sendgrid import SendGridAPIClient&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from sendgrid.helpers.mail import (&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Mail, Attachment, FileContent, FileName,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; FileType, Disposition, ContentId)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SENDGRID_API_KEY = os.getenv(&amp;#39;SENDGRID_API_KEY&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def convert_attachment(attachment_file):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;&amp;#34;&amp;#34;添付ファイルをAttachmentにする&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; file_path = attachment_file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; file_type = mimetypes.guess_type(file_path)[0]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; with open(file_path, &amp;#39;rb&amp;#39;) as content:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data = content.read()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; encoded = base64.b64encode(data).decode()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; attachment = Attachment()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; attachment.file_content = FileContent(encoded)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; attachment.file_type = FileType(file_type)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; attachment.file_name = FileName(os.path.basename(file_path))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; attachment.disposition = Disposition(&amp;#39;attachment&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; attachment.content_id = ContentId(&amp;#39;Sample&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return attachment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;message = Mail(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; from_email=senderのアドレス,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; to_emails=送り先のアドレス,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; subject=&amp;#34;Attachment Test&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; plain_text_content=&amp;#34;test&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;message.attachment = convert_attachment(添付ファイル)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sg_client = SendGridAPIClient(SENDGRID_API_KEY)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;response = sg_client.send(message)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;添付ファイルをAttachmentオブジェクトにする。sendgrid-python、Version 6になって使いやすくなった。&lt;/p&gt;</description></item><item><title>食洗機を買うか悩んでいる人は、不要派の言葉に耳を傾けなくて良い</title><link>https://hack-le.com/dishwasher/</link><pubDate>Sun, 28 Apr 2019 11:07:35 +0900</pubDate><guid>https://hack-le.com/dishwasher/</guid><description>&lt;p&gt;一人暮らしで、買うかどうか悩んだけれど、本当に買ってよかった。食洗機。ってか、もっと早く買えばよかったよ。誰に聞いても「いらないんじゃない？」と言われていて、そう言われると「まぁそうだよなぁ」なんて思っていた自分は阿呆だった。大事なのは自分の生活スタイルと、自分の性格なのに。&lt;strong&gt;こういうライフスタイルに関わるものは、人の意見が当てにならない。他人の意見は、聞かなくていいこと&lt;/strong&gt;だった。&lt;/p&gt;&#10;&lt;h2 id="食洗機導入の是非"&gt;食洗機導入の是非&#10;&lt;/h2&gt;&lt;p&gt;僕はすごくものぐさで、おまけに生活能力がない。だから家事というやつが基本的に億劫で、気がつくと洗濯物も食器も溜まる溜まる。&lt;/p&gt;&#10;&lt;p&gt;なので、食洗機の導入についてはずっと悩んでいた。&lt;strong&gt;安い買い物ではない&lt;/strong&gt;し、設置となると&lt;strong&gt;場所も必要&lt;/strong&gt;だし、また&lt;strong&gt;設置に伴うちょっとした工事も気重&lt;/strong&gt;だった。水道の元栓ってどこさ。別に食器洗いなんて難しいことでもないし……。&lt;/p&gt;&#10;&lt;p&gt;身の回りの人に聞いても、ビルトインされているならともかく、わざわざ水道栓を分岐させて、賃貸の一人暮らしに食洗機を導入するのは、懐疑的な人ばかりだった。そんなことに数万使うの？お金持ちなの？お金持ちじゃない。&lt;/p&gt;&#10;&lt;p&gt;そもそも&lt;strong&gt;食洗機自体を信用していない人も一定数いた&lt;/strong&gt;。私の母は、実家のキッチンに備え付けられている食洗機を乾燥機としてしか使わない（お客さんがきた時など、大量の洗い物があって、かつその対応で疲れた時などは食洗機の力を借りることもある……しかしそれでも手洗いが基本だ）。友人の妻も、「食洗機じゃ汚れが落ちきらない」と否定的だ。たしかに、&lt;strong&gt;こびりついた汚れは食洗機では落ちず、結局手洗いすることもある&lt;/strong&gt;。「&lt;strong&gt;食器が食洗機に入らない&lt;/strong&gt;」という人もいた。「&lt;strong&gt;手洗いはそんなに時間がかかることじゃない&lt;/strong&gt;と思う」とも。そうなんだけどさ。「&lt;strong&gt;食洗機は時間がかかる&lt;/strong&gt;」まぁ確かに。「&lt;strong&gt;食洗機はうるさい&lt;/strong&gt;」そうだね。「&lt;strong&gt;高い&lt;/strong&gt;」うん。&lt;/p&gt;&#10;&lt;p&gt;否定派はだいたい女性だっただろうか。そして数少ない肯定派は、私と同じようなガジェット大好きな男性である。しかし私のような一人暮らしでも無い限り、なんだかんだ言って家のことは女性が主導権を握っていることが多いから、食洗機を本格的に使っている家庭はあまりないようだった。&lt;/p&gt;&#10;&lt;h2 id="シンクに山積みの食器を見て買うことを決意"&gt;シンクに山積みの食器を見て買うことを決意&#10;&lt;/h2&gt;&lt;p&gt;まぁ他人の家のことをどうこう言っても仕方がない。&lt;strong&gt;問題は自分の家&lt;/strong&gt;である。そして自分の家のシンクには、いつも食器が溜まっている。時々思い立って洗うが、数が多いから面倒だし、洗い方も雑になる。水切り場が食器置き場になる。酷いもんだ。&lt;/p&gt;&#10;&lt;p&gt;で、食洗機は僕には必要なものだ！と思い立って、一人暮らし用の食洗機を購入した。3万程度、安くない出費だが、それ以上に痛かったのは、&lt;strong&gt;水道の分岐水栓が1万円もした&lt;/strong&gt;ことだった。これは水道によって異なるそうだが、安いものなら3,000円程度のものもあるらしいので、運がなかったのか。いや、割と築浅の家だから、最新式でちゃんとしているからなのかも。いずれにしても、使い終わったらメルカリで売ってしまいたい…（定価の7-8割でメルカリでも取引されていた）。&lt;/p&gt;&#10;&lt;h2 id="買ってみてどうだったか"&gt;買ってみてどうだったか&#10;&lt;/h2&gt;&lt;p&gt;で、買ってどうだったのか。&lt;strong&gt;これはもう最高だ&lt;/strong&gt;。毎日使っている。もはやシンクに洗い物が溜まることもない。購入前の懸念事項などほとんど杞憂だった。一つ一つ見ていく。&lt;/p&gt;&#10;&lt;h3 id="設置工事難しくない"&gt;設置工事難しくない？&#10;&lt;/h3&gt;&lt;p&gt;設置にはちょっとした工事が必要だが、水道の元栓の場所さえわかってしまえば、あとはなんとかなる。うちの場合は、玄関を出てすぐ、ガスの元栓と同じ場所にあった。止める時はちょっとびくびくした。&lt;/p&gt;&#10;&lt;p&gt;あと、普通の一人暮らしの家にはモーターレンチはないだろうから、それは買わないといけないだろう。前の仕事で使っていたそこそこ大きなモンキーレンチがあったのだけれど、ギリギリ入らなかったよ……。&lt;/p&gt;&#10;&lt;p&gt;よほど自信のない人は、業者に頼んでもよいかもしれないが、賃貸では立ち去りの時にも同じように撤去工事しないといけないし、できる限り自分でやったほうがいいんじゃないのかな……。&lt;/p&gt;&#10;&lt;h3 id="置き場がないよね"&gt;置き場がないよね？&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;置き場問題は深刻かもしれない&lt;/strong&gt;。自分の場合は、水切り場にしていたところに、ちょうどスッポリ収まる感じだったのでよかったけれど、前の家だとこうもいかなかったし、難しかったろうな……。食洗機台みたいなのも売っているけれど、高いんだよねぇ……。だからといってDIY？時短のための食洗機を作るDIY？&lt;/p&gt;&#10;&lt;p&gt;まぁこればかりは、キッチンの構造を見て考えるしかないなぁ。&lt;/p&gt;&#10;&lt;h3 id="汚れが落ちず結局手洗いするのでは"&gt;汚れが落ちず、結局手洗いするのでは？&#10;&lt;/h3&gt;&lt;p&gt;確かにそういうことはある。でもしょっちゅうじゃない。&lt;strong&gt;ほとんどの場合、驚くほど綺麗になる&lt;/strong&gt;。僕の雑な手洗いよりよほど綺麗だ。&lt;strong&gt;熱湯を使っているから殺菌作用もあるだろう&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="食器が食洗機に入らない入れづらいのでは"&gt;食器が食洗機に入らない、入れづらいのでは？&#10;&lt;/h3&gt;&lt;p&gt;これはそもそも考え方が違う。食洗機に食器が入らない、ではなく、&lt;strong&gt;食洗機に入る食器を使う&lt;/strong&gt;、だ。これは鍋やフライパンにも適用される。&lt;strong&gt;フライパンは、取っ手が外せるやつがいい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;機械は人間ほど融通がきかない。だから、&lt;strong&gt;人間が機械に合わせる&lt;/strong&gt;んだ。これはルンバに代表される自動掃除機を使う時も同じことで、自動掃除機を使うならば、あらかじめ床にものが置かれないように部屋を&amp;quot;再配置&amp;quot;する必要がある。&lt;/p&gt;&#10;&lt;p&gt;機能性を無視して、デザインに振り切った食器も世の中にはあって、愛好家がいるのもわかる。けれど、そういうのは元から食器としては使いづらいし、インテリアと割り切ってしまうのも一つの手じゃないだろうか。&lt;/p&gt;&#10;&lt;p&gt;というと、食器の選定に縛りがかかって、ネガティブに感じるかもしれないが、必ずしもそうとは言い切れないと思う。なぜなら、たとえば&lt;strong&gt;長細いビール用グラスなど、普通ならば手が入らず洗いづらさ故にあまり使いたくならない食器でも、食洗機ならば楽に洗うことができる&lt;/strong&gt;からだ。食洗機だからこそ使いやすくなる食器類もあるということ。まぁ、一長一短だ。&lt;/p&gt;&#10;&lt;h3 id="食洗機は時間がかかるのでは"&gt;食洗機は時間がかかるのでは？&#10;&lt;/h3&gt;&lt;p&gt;時間がかかるのではないか。これは当たっている。乾燥まで含めると、2,3時間は時間がいるんじゃないか。&lt;/p&gt;&#10;&lt;p&gt;「手洗いなら5分で済むのに！」そうかもしれない。でもそれは自分の時間だ。食洗機の2,3時間は僕の時間じゃない。僕に求められる時間は、食器と洗剤を入れる30秒だ。そしてスイッチを押して会社にいけば、帰ってきたときにはすべてが終わっている。問題ない。&lt;/p&gt;&#10;&lt;p&gt;これは自動掃除機の話でも言えるのだけれど、「全体の所要時間」と「自分の作業時間」をごっちゃにしている人が時々いる。それは違う。&lt;strong&gt;たとえ全体の所要時間が長くなっても、自分の作業時間が減るなら、それは時短だ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="食洗機はうるさくないか"&gt;食洗機はうるさくないか？&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;うるさい&lt;/strong&gt;。食洗機はうるさい。特に集合住宅では、使う時間を選ぶべきだ。だから、夜中の12時に使った食器は、次の日の朝に洗わないといけないだろう。これは確かに考えるべきことだと思う。あまり長い時間放置していたくはないものなぁ。でも、シンクに洗い物を山と積み上げてきた僕が心配すべきことではなかった。&lt;/p&gt;&#10;&lt;h3 id="高いよね"&gt;高いよね？&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;食洗機の値段は高いのか？それはその人の価値観による&lt;/strong&gt;。僕にとって食器を洗う時間は人生の浪費でしかなかったが、食器を磨いてピカピカにすることに快感を覚える人だっているかもしれない。そういう人にとって食器洗いはもはやレクリエーションなわけで、なぜ金を使って楽しみを奪うのか？という話になる。&lt;/p&gt;&#10;&lt;p&gt;まぁそこまでいかなくても、食器洗いはYoutubeでも見ながら片手間でできることだから、苦でもなんでもないし、どうせYoutubeは見るのだからそこにかかる時間も気にならない、という人もいるだろう。そうすると、食洗機は高い買い物かもしれない。&lt;/p&gt;&#10;&lt;p&gt;だから、自分がどういう人なのか、ということをよく考えるべきなのだけれど、&lt;strong&gt;食洗機が欲しい、と少しでも思った時点で、多分僕と同じ類の人なんじゃないかな&lt;/strong&gt;、と思う。&lt;/p&gt;&#10;&lt;h2 id="人を説得する必要があるなら手荒れ対策がきくかもしれない"&gt;人を説得する必要があるなら「手荒れ対策」がきくかもしれない&#10;&lt;/h2&gt;&lt;p&gt;ここまで色々書いておいてなんだけれど、他人の言うことなんて聞かなくていい。特に食洗機不要論者の意見など水と一緒に流していい。他人と自分は違う。&lt;strong&gt;考えるべきことは、自分はどうしたいのか？それだけだ&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、僕は一人暮らしなので、自分さえ納得すればそれで済む話だが、ルームシェアだったり結婚していたり両親と同居していたりなど、同居人がいる場合はそうもいかないだろう。相手も賛成してくれればよいが、反対派は案外と多い。&lt;/p&gt;&#10;&lt;p&gt;経験則では、男性は食洗機を導入したいと言えば、賛成しないまでも反対もしない人が多いように思う。まぁ男のというのはだいたいメカ好きであるし。一方、女性は必ずしも色よい反応を見せない人が多いかもしれない。また、彼女たちがキッチンの主導権を握っていることもままある。&lt;/p&gt;&#10;&lt;p&gt;そうすると説得しないといけないわけで、まぁ基本的に無理なんじゃないかと思うのだが、一つ彼女たちに刺さる説得材料があるとすれば、それは「手荒れ対策」だろうか。 &lt;strong&gt;「手洗いは手が荒れるよね」というのは、食洗機否定派の女性たちも心揺さぶられる言葉&lt;/strong&gt;のようで、母も「そうなのよねぇ……」とうなずいていた。だからといって毎度手袋をして洗うのもしんどい。きっと、食洗機を使ったほうがよいのだろう……と頭では考えている風だった。とはいえ実際に使うまではいかなかったようだが……。&lt;/p&gt;&#10;&lt;p&gt;食洗機を売りたいメーカーは、「手荒れ対策」ということを全面に押し出してみてもよいかもしれない。嘘くさいランニングコストの比較なんかより、よほど刺さるんじゃないか。&lt;/p&gt;&#10;&lt;p&gt;あとどうでもいいけれど、書いているうちになぜか海外のブログ記事の翻訳調になってしまった。なぜだ？一人称を僕にしたせいか？まぁいいや。&lt;/p&gt;&#10;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01N13CSM8&amp;linkId=fad6d3cb44f48cfdfadd7a8bf9a99dc9"&gt;&lt;/iframe&gt;僕が買ったのは、PanasonicのNP-TCB4-W。まぁだいたいどこでもこれをオススメされているし、一番安い部類だったからこれにしたんだけれど、まぁなんだっていいんじゃないのかな。それよりも、乾燥機能はあったほうがよかったな、といまさら思っている。+1万上乗せすると、乾燥機能付きなんだよねぇ……。&#10;&lt;p&gt;参考までに、書いた記事。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/shokushneki/" &gt;一人暮らし用の食洗機を購入した。生活を便利にするテクノロジーは素敵 – 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/shokusenki2/" &gt;食器洗浄機は乾燥機能付きにすればよかった – 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Macよりもそこそこ性能の良いChromebookが欲しい</title><link>https://hack-le.com/chromebook-mac/</link><pubDate>Sat, 27 Apr 2019 04:47:32 +0900</pubDate><guid>https://hack-le.com/chromebook-mac/</guid><description>&lt;p&gt;自分のノートパソコンは6年前のMac BookAir 2013 11.6インチモデルで、さすがにそろそろ限界だ。その動きの遅さたるや。普段の開発はデスクトップだけれど、勉強会など外で作業することもままあるので、やはり良いノートPCが欲しいところ。&lt;/p&gt;&#10;&lt;p&gt;しかし最近のMacのノートはなんともラインナップが微妙で、食指が動かない。それで、そこそこのChromebookが欲しいなぁと思う今日この頃だ。&lt;/p&gt;&#10;&lt;h2 id="そろそろ限界だ"&gt;そろそろ限界だ&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;愛機Mac BookAir 2013もそろそろつらくなってきた&lt;/strong&gt;。ノートパソコンを使うシーンは限定的ではあるものの、勉強会や実家に帰った時など、外で使う機会はちょくちょくあるし、会社でも補助的に使っている（あまり良くはないのだけれど、実際ないと不便極まりないので仕方がない）。&lt;/p&gt;&#10;&lt;p&gt;メモリ4GBというのがまずつらい。&lt;strong&gt;さすがにこのご時世、テキストエディタが主とはいえ開発をする以上は8GB欲しい&lt;/strong&gt;。一々固まるのはメモリ不足が一役買っているだろう。いや、メモリよりも&lt;strong&gt;CPUのスペック不足&lt;/strong&gt;だろうか。ちょっとなにかするだけで、ロードアベレージは高い数値を記録する。ビルドがつらい。&lt;/p&gt;&#10;&lt;p&gt;画面サイズが11.6インチというのも小さい。前は13.3インチを使っていて、2012年くらいまではまだ小さな画面サイズが流行っていたから、どこかのカンファレンスに出たとき、自分のMac BookAirがやけに大きく感じられた。今でこそ猫も杓子も背面にリンゴマークを光らせているが、当時はまだそのような状況ではなかったのだ。&lt;/p&gt;&#10;&lt;p&gt;まぁ実際、自分はGUI系の開発をするわけでもないので、あまり大きな画面にする必要もなく、しばらくは11.6インチの画面でも十分だと満足していたのだが、それは自分にそう言い聞かせていただけかもしれない。今となっては、&lt;strong&gt;11インチはやはりちょっと小さいなぁ&lt;/strong&gt;と思う。&lt;/p&gt;&#10;&lt;p&gt;なにげに、&lt;strong&gt;キーボードが日本語配列なのもつらい&lt;/strong&gt;。当時は、自分がJIS配列とASCII配列のどちらが向いているのか、まだわかっていなくて、両方を使っていたのだ。&lt;/p&gt;&#10;&lt;p&gt;ストレージ容量が256GBのものを購入したことだけが救いだ。まぁ実際半分も使っていないのだけれど（というよりストレージをあまり食わないような使い方をしている、というほうが正しい）、128GBだとどうしてもカツカツになってしまうし、SSDはその性質上容量が大きいほうが何かと性能的にも良いので、これは良かった。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、&lt;strong&gt;全体的にみると、やはり「そろそろ限界だなぁ」という結論になる&lt;/strong&gt;のである。&lt;/p&gt;&#10;&lt;h2 id="macノートの微妙なラインナップ"&gt;Macノートの微妙なラインナップ&#10;&lt;/h2&gt;&lt;p&gt;だからそろそろPCを新調しようかとなるわけだが、&lt;strong&gt;現在のMacノートは自分的にはかなり微妙&lt;/strong&gt;だ。MacBookは開発を考えるとパワー不足が目に見えているし（まぁ今のAirよりちょっと上くらいか？）、MacBook Airは正当進化しているものの、Ryzenフィーバー後としては2コアがつらい。といってMacBook Proはバカ高く、しかも&lt;strong&gt;必要のないTouch Barを強制される&lt;/strong&gt;。いや、Touch Barなしモデルもあるのだが、中身が古く、高性能なMacノートが欲しい、と思う以上、&lt;strong&gt;実質的にTouch Barありのモデルしか選択肢がない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;自分はファンクションキーを多用するほうではなく（キーボードショートカットはCtrlやShiftを好む）、まぁターミナルでbyobuを利用している時くらいにしか使わないのだが、だからといって&lt;strong&gt;無意味な機能はノーサンキュー&lt;/strong&gt;だ。貴重なバッテリーを消費し、故障リスクを上げ、経済的コストにもなるTouch Bar、果たしてそれだけの価値があるのかというと、どうしてもそう思えない。&lt;/p&gt;&#10;&lt;p&gt;そうは言いつつも、頑張ってTouch Barをカスタマイズしている記事など見かけると、ちょっと面白そうだなぁと思う気持ちもあるのだが、面白かったら面白かったで、それだったらデスクトップMacでも使いたいよね、となるだろう。しかし、今のところ、デスクトップ用のAppleのキーボードにTouch Barが搭載される気配はない。つまり、デスクトップとノートで使い勝手に大きな差ができてしまうわけだ。まぁ現実には使い勝手の良いものではないだろうから、それはいらぬ心配だろうが。&lt;/p&gt;&#10;&lt;h2 id="chromebookが楽しそう"&gt;Chromebookが楽しそう&#10;&lt;/h2&gt;&lt;p&gt;そうかといって、&lt;strong&gt;いまさらWindowsノートを買うのも気が進まない&lt;/strong&gt;。Windowsも遊ぶ分には便利なのだけれど（対応するゲームも多いし）、開発環境を整える面倒さなど、作業との兼ね合いを考えると、なんとも微妙である。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;どうせ微妙なものを買うのであれば、いっそChromebookが面白いよな&lt;/strong&gt;、と思うのである。前に買ったときは、あまりにもスペックが低すぎた故にMacBook Airの完全なる下位互換となってしまい（参考「&lt;a class="link" href="https://hack-le.com/chromebookuse/" &gt;Chromebookの難しい使いドコロ – 或る阿呆の記&lt;/a&gt;」）、あまり使われることなく売り払われた。まぁ2万で買ったものが15,000円ほどで売ることができたので、5,000円で大いに遊べたと思えば良い買い物だったかもしれないが、実用的ではなかったわけだ。&lt;/p&gt;&#10;&lt;p&gt;そういう苦い経験を持ちつつも、&lt;strong&gt;今なおChromebookには興味が尽きない&lt;/strong&gt;。日本ではアレだが、アメリカではそこそこのスペックのChromebookが、まぁまぁの値段で売られている。&lt;strong&gt;AcerのSpin 13など特に興味がそそられる&lt;/strong&gt;。タイミング次第では$700程度で買えるようだ。今見ると$744だった。関税やらなにやらをいれても、9万程度でおさまるのではないか（キーボードもUS配列だ）。Macノートよりもだいぶ安い。&lt;/p&gt;&#10;&lt;p&gt;最近はLinuxやAndroidアプリを容易に動かせるようだから、使いみちは広いと思われる。またいわゆる2in1的な機構のものも多いので、フルブラウザで寝っ転がりながらブラウザゲームができたりなどすると面白そうだ。&lt;/p&gt;&#10;&lt;p&gt;まぁいざ開発で使うとなればけっこう苦労しそうにも思うのだが、その苦労は乗り越え甲斐のある苦労だ。実際、苦労しながらも使っている人はけっこういるようだし。&lt;/p&gt;&#10;&lt;p&gt;だいたい、最近はどこにいっても皆Mac、Mac、Mac……なので、Chromebookを持つだけでも、一味違う自分を演出できるかもしれない。演出してどうするのかは知らない。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、&lt;strong&gt;ここしばらくずっとAmazon.comでChromebookを眺めている&lt;/strong&gt;。国内だったらきっと勢いポチってしまっていたと思うが、個人輸入になるので二の足を踏んでいる状態だ。しかし、そのうちポチってしまいそうである。&lt;/p&gt;</description></item><item><title>DynamoDBのテーブル設計をするとき、自分に問いかけていること</title><link>https://hack-le.com/dynamodb-query/</link><pubDate>Sun, 21 Apr 2019 15:27:20 +0900</pubDate><guid>https://hack-le.com/dynamodb-query/</guid><description>&lt;p&gt;DynamoDBをいじり始めてかれこれ一年くらい。見よう見まねで騙し騙しやってきたが、色々と痛い目を見てわかってきたこともある。転んで生傷つくりながら、テーブル設計をする際に考えるようになったことを、備忘録的に記述していく。&lt;/p&gt;&#10;&lt;p&gt;オートスケールの話はしない（わからない）。インフラ専門部隊がいないなら、オンデマンドがいいよ。人的コストより多分安いよ。&lt;/p&gt;&#10;&lt;h2 id="ドキュメント"&gt;ドキュメント&#10;&lt;/h2&gt;&lt;p&gt;なにはともあれ、公式のドキュメントについて存在を知っておく→「&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/best-practices.html" target="_blank" rel="noopener"&#10; &gt;DynamoDB のベストプラクティス - Amazon DynamoDB&lt;/a&gt;」&lt;/p&gt;&#10;&lt;p&gt;こんな記事を読んでいる時間があるなら、公式のドキュメントを読むべきだ。でも多分読めない。自分も今でも読めていない。ここに書かれているのは本当に日本語だろうか、と真剣に思う。まぁ教科書なんていうのはだいたい、わかってから読むとわかるもんである。&lt;/p&gt;&#10;&lt;p&gt;それでも通して読むことでなんとなく親しみがわくのが人間なので、頑張って何度も読み、わからないところは飛ばし、読めるところだけでも、最後まで読む、それを繰り返すことが大事、だとは思う。だんだん読めるところが増えてくるし、自分も少しずつ増えてきた。でもまだ全部はとても読めていない。&lt;/p&gt;&#10;&lt;p&gt;それでもできることはある。以下では、今の自分の理解を、なんとか頑張って記述していく。&lt;/p&gt;&#10;&lt;h2 id="rdbの常識はdynamodbの非常識"&gt;RDBの常識はDynamoDBの非常識&#10;&lt;/h2&gt;&lt;p&gt;まず最初に断っておかなくてはいけないが、RDBについて経験がある者は（だいたいあると思うが）、「DynamoDBはRDBではない」と10回唱えてから学ぶ姿勢が大事だ。RDBで良しとされていることがDynamoDBでは悪手で、逆にRDBにおけるご法度がDynamoDBのセオリーだったりするので、 &lt;strong&gt;「RDBでいうところの」なんて考えるくらいならDBに関する知識ゼロのほうがマシ&lt;/strong&gt;とすら思う。&lt;/p&gt;&#10;&lt;p&gt;実際には、RDBと比較して考えるほうが理解は深まるだろう。本記事でもRDBについて触れた記述はある。しかし、それらはほとんどRDBとの違いを強調したものだ。RDBとは根本的な思想が違う（したがってRDBの常識が通用しない）ということを念頭に置いたうえで、DynamoDBを学びたい。&lt;/p&gt;&#10;&lt;h2 id="dynamodbのテーブル設計はつまりキー設計"&gt;DynamoDBのテーブル設計はつまりキー設計&#10;&lt;/h2&gt;&lt;p&gt;DynamoDBのテーブル設計をするとは、つまりキー設計をすることだ。キー設計では、以下を設定する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;パーティションキーのみ or パーティションキー + ソートキー&lt;/li&gt;&#10;&lt;li&gt;グローバルセカンダリインデックスは使う？&lt;/li&gt;&#10;&lt;li&gt;ローカルセカンダリインデックスは使う？&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これらが、求められる要件から決まる。&lt;strong&gt;求められる要件とは、どんな検索がなぜ必要なのか&lt;/strong&gt;、だ。どんな検索、とはつまり&lt;strong&gt;具体的に投げるクエリ&lt;/strong&gt;である。&lt;strong&gt;なぜ、とはクエリの結果の精度とリアルタイム性を決めるため&lt;/strong&gt;だ。自分は、次のような問いかけをして考えている。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;何の情報を元にアイテムを特定するか？&lt;/li&gt;&#10;&lt;li&gt;一覧（リスト）は必要か？&lt;/li&gt;&#10;&lt;li&gt;集計はあるか？&lt;/li&gt;&#10;&lt;li&gt;複数の異なるタイプの情報が同時に必要か？（joinしたくなるか？）&lt;/li&gt;&#10;&lt;li&gt;原子性は必要か？&lt;/li&gt;&#10;&lt;li&gt;リアルタイム性は必要か？&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;一つ一つ見ていく。&lt;/p&gt;&#10;&lt;h2 id="何の情報を元にアイテムを特定するか"&gt;何の情報を元にアイテムを特定するか？&#10;&lt;/h2&gt;&lt;p&gt;まず最初に考えるべきことは、DBの情報を引き出す時、引き出すために使える情報はなにか？ということだ。たとえばユーザーの情報を取得したい時、ユーザーIDをキーにして情報を取得する、といった具合。この場合、ユーザーIDをパーティションキーにするのがが一案となる。&lt;/p&gt;&#10;&lt;h2 id="一覧リストは必要か"&gt;一覧（リスト）は必要か？&#10;&lt;/h2&gt;&lt;p&gt;DynamoDBでウキウキしながら設計を始めた時、最初に引っかかるのは一覧じゃないだろうか。RDBではselect * fromでできることが、DynamoDBでは難しい。特に、キーをパーティションキーのみにした場合、純粋にKVSとなる。&lt;/p&gt;&#10;&lt;p&gt;対応としては、だいたい以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;パーティションキー + ソートキー型にする&lt;/li&gt;&#10;&lt;li&gt;なんとかセカンダリインデックスを使う&lt;/li&gt;&#10;&lt;li&gt;めっちゃクエリ投げる&lt;/li&gt;&#10;&lt;li&gt;一覧は諦める&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;それぞれ見ていく。&lt;/p&gt;&#10;&lt;h3 id="パーティションキー--ソートキーで頑張る"&gt;パーティションキー + ソートキーで頑張る&#10;&lt;/h3&gt;&lt;p&gt;許されるなら、&lt;strong&gt;まずパーティションキー + ソートキーにしたい&lt;/strong&gt;。これだけでもだいぶ対応できる。たとえば特定のユーザーのコメントについて集めるならば、ユーザーIDをパーティションキー、コメントした日時をソートキーに持てば、ユーザーIDからそのユーザーのコメント一覧を得られる。&lt;/p&gt;&#10;&lt;h3 id="セカンダリインデックスで頑張る"&gt;セカンダリインデックスで頑張る&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;他にも一覧が必要な場合、簡単なのは、グローバルセカンダリインデックス（GSI）を利用するのが楽&lt;/strong&gt;。たとえば、特定のスレッドのコメントを一覧化したい場合、パーティションキーが既にユーザーIDで使われているのであれば、GSIとして、スレッドIDみたいなのをパーティションキーにしてクエリを投げれば良い。&lt;/p&gt;&#10;&lt;p&gt;ただし、GSIは内部的には検索用の別テーブルを用意するということなので、&lt;strong&gt;当然その分コスト（キャパシティユニット）がかかる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ソートキーだけ別にすればよい場合、ローカルセカンダリインデックス（LSI）が使える&lt;/strong&gt;。LSIはGSIより低コストだが、テーブル作成時にしか使えないので、あらかじめ仕様が練られていないと使えない。で、目まぐるしく仕様が変わり続けるプロジェクトにばかり携わっている自分は使えたことがない。&lt;/p&gt;&#10;&lt;h3 id="一覧性とスケールのしやすさはトレードオフ"&gt;一覧性とスケールのしやすさはトレードオフ&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;これらの方法のいずれにも言える注意点は、一つのパーティションに情報が集中してしまうこと&lt;/strong&gt;だ。パーティションを分散させることによりスケールメリットが得られるのがDynamoDBの良さなので、この設計はDynamoDBのメリットを殺しかねない設計、ということになる。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;一覧性とスケールのしやすさはトレードオフの関係にある&lt;/strong&gt;。妥協点を探りながら設計することになる。&lt;/p&gt;&#10;&lt;p&gt;……流行らないサービスにとっては、スケールメリット以前の問題なんだけどね。。。負荷の心配とかしてみたいもんですわ。。。&lt;/p&gt;&#10;&lt;h3 id="めっちゃクエリ投げる"&gt;めっちゃクエリ投げる&#10;&lt;/h3&gt;&lt;p&gt;パーティションは分散させたい……でも一覧も取得したい……と思ったら、力技。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;めっちゃクエリ投げる&lt;/strong&gt;。&lt;strong&gt;一覧として取得したい分全部のクエリ投げる&lt;/strong&gt;。並列で投げる。投げまくる。とにかくほしいアイテムのキーを投げまくる。&lt;/p&gt;&#10;&lt;p&gt;クエリを投げまくるので、パフォーマンスとか気にするとアプリケーション側がたいへん。一覧取得用のアイテムを作ってGetする、とか謎の工程も必要になるかもしれない。&lt;/p&gt;&#10;&lt;h3 id="一覧は諦める"&gt;一覧は諦める&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;究極の対応、一覧は諦める&lt;/strong&gt;。これができるなら、それが一番いいと思います。。。いや、真面目に。&lt;/p&gt;&#10;&lt;h2 id="集計はあるか"&gt;集計はあるか？&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;サービスにはよくランキングやコメント数の表示などあるが、集合論を基礎とするRDBが得意とする集計作業が、DynamoDBは苦手&lt;/strong&gt;。PVみたいにインクリメントで表現できるようなものは、アトミックカウンタなんか使えるかもしれないし（使ったことないけど）、まぁ一ユーザーのコメント数くらいならば、まとめて取得して数を数えるくらいしてもいいかもしれない。が、ランキングとかマッチングになってくるとつらい。ソート条件が複雑だったりすると、手に負えない可能性もある。&lt;/p&gt;&#10;&lt;p&gt;それでもまぁ、非同期処理で時間をかければできそうならなんとなりなるかもしれないが、&lt;strong&gt;もしリアルタイム性まで求められると、RDBでいいんじゃないですかねー、という結論になるかと思う&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="複数の異なるタイプの情報が同時に必要かjoinしたくなるか"&gt;複数の異なるタイプの情報が同時に必要か？（joinしたくなるか？）&#10;&lt;/h2&gt;&lt;p&gt;RDBで言うところのjoinさせたい、と思うような情報の取得の仕方が必要そうならば、DynamoDBの設計難度が上がる。&lt;/p&gt;&#10;&lt;p&gt;RDBでは、情報は重複がないように正規化させるのがセオリーだが、DynamoDBは違う。DynamoDBは情報を一箇所に集める（局在化させる）のがセオリーだ。このRDBとDyamoDBの違いを端的に表現しているのは、ベストプラクティスのドキュメントにある「&lt;strong&gt;DynamoDB アプリケーションではできるだけ少ないテーブルを維持する必要があります。設計が優れたアプリケーションでは、必要なテーブルは 1 つのみです。&lt;/strong&gt; 」という文言だろう（僕が最も衝撃を受けた部分でもある）。一つのテーブルに種々の情報を打ち込むのが基本で、もっといえば&lt;strong&gt;一つのアイテムにもできる限り関連する情報を集めるのが基本&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;そうすると、&lt;strong&gt;アイテム同士で重複する情報が更新された時の問題が起きる&lt;/strong&gt;。たとえばコメント一つとっても、コメント自体の情報と、コメントを書いたユーザーの情報（名前とか）があると思うが、コメントのアイテムにユーザー情報を格納していた場合、ユーザーが情報を変更したら、そのユーザーのコメントしたアイテムすべての情報も更新しなくてはならない。&lt;/p&gt;&#10;&lt;p&gt;それが嫌ならば、コメントのアイテムでのユーザー情報はユーザーIDのみに留めておき、ユーザーの情報については別途クエリを投げる、ということになるのだが、何度もクエリを投げることになり、あまりスマートという感じではない。&lt;/p&gt;&#10;&lt;p&gt;まぁでもそれが楽ではある。複数情報を同時に更新となると、原子性の問題もでてくるが、DynamoDBは基本的に原子性について求めるべきではない。だから、&lt;strong&gt;複数のアイテムを同時に書き込むような処理が必要な時は、非同期処理で、裏で最終的に整合するように処理を完遂するような設計が良い&lt;/strong&gt;……のだけれど、当然&lt;strong&gt;システム全体としてみると煩雑になる&lt;/strong&gt;。しんどい。&lt;/p&gt;&#10;&lt;h2 id="原子性は必要か"&gt;原子性は必要か？&#10;&lt;/h2&gt;&lt;p&gt;原子性について補足すると、&lt;strong&gt;DynamoDBはトランザクション処理ができない……と言われていたりするが、今どきは10アイテムまでならできる&lt;/strong&gt;。なので、必ずしもこれがために不可ってことはない。&lt;/p&gt;&#10;&lt;p&gt;ただpython用ライブラリのboto3でも低レベルなAPIじゃないと使えなったりするし(2019年4月現在)、あまり嬉しくない要件であることはたしか。&lt;strong&gt;できれば原子性については割り切りたい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="リアルタイム性は必要か"&gt;リアルタイム性は必要か？&#10;&lt;/h2&gt;&lt;p&gt;アイテムを更新した結果が、瞬時に適用される。結果は常に一貫している（一貫性）。当たり前のようだが、DynamoDBでは必ずしもそうではない。DynamoDBは一つのアイテムが内部的には複数箇所で保存されていて、そのうちの1つを見に行く仕掛けなので、&lt;strong&gt;更新が常に全体に反映されているとは限らない&lt;/strong&gt;わけだ。複数箇所を見に行くことで結果が一貫するようにする「強力な整合性」を求めることもできるのだが（GSIでは使えない）、それくらい厳しい精度を求められるような要件では、DynamoDBを使うかどうか自体を注意深く検討したほうがよい。&lt;/p&gt;&#10;&lt;p&gt;それと、前述のように裏の非同期処理で人知れず更新をどんどん適用していくようなシステムだと、更新が完全に反映されるまで時間がかかる。その時間がどれくらいかかるのかはなかなか保証できないだろう。リアルタイム性とは保証できる処理時間だが、&lt;strong&gt;システム的にリアルタイム性は低くなりがち&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;h2 id="dynamodbは簡単ではない"&gt;DynamoDBは簡単ではない&#10;&lt;/h2&gt;&lt;p&gt;以上がDynamoDBの設計時に自分がしている問いかけなのだが、検索の便利さとスケールメリット、システムの複雑さなどあちらを立てればこちらが立たずのトレードオフで、またそれが決まれば苦労しないわっていうビジネス上のユースケースの決定を早い段階で迫られるため（これが一番つらい）、&lt;strong&gt;だいぶ苦労する&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;DynamoDBの記事を見ていて時折見かけるのが、「DynamoDBはRDBと違い仕様変更に対し柔軟に対応できる」というような記述だが、これは嘘とは言わないが &lt;strong&gt;、だからDynamoDBのほうが（RDBより）簡単なんだ、と短絡的に考えると痛い目に合う&lt;/strong&gt;と思う。確かにちょっとしたデータの属性の変更くらいであれば、RDBより柔軟に対応できるのはそうだと思うけれど、RDBのような柔軟な検索ができないので、甘えを許さないという意味でキー設計の厳しさはRDB以上だ。実際、AWSのドキュメントには&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;DynamoDB の場合は対照的に、答えが必要な質問が分かるまで、スキーマの設計を開始しないでください。ビジネス上の問題とアプリケーションのユースケースを理解することが不可欠です。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;— &lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-general-nosql-design.html" target="_blank" rel="noopener"&#10; &gt;DynamoDB に合わせた NoSQL 設計 - Amazon DynamoDB&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;とある。対照的、とはもちろんRDBと比較しての話だ。まぁつまり、ここまでに問いかけたように、 &lt;strong&gt;「どんなクエリがなぜ必要なのか」をハッキリさせろ&lt;/strong&gt;、ということだ。&lt;strong&gt;RDBの設計とは別方面の厳しさがある&lt;/strong&gt;と思う。&lt;/p&gt;&#10;&lt;p&gt;いやまぁ、RDBだってパフォーマンス考えれば、投げられるクエリを考えてインデックス貼って……とかしないといけないだろうけれど、そこそこの規模までなら、とにかく情報を引っ張ってくる、ということは、だいたいなんとかなるはずだ（それがクソクエリと呼ばれるものだったとしても）。DynamoDBの場合、RDBのクソクエリを遥かに凌駕するクエリを大量に生み出さねばならないか、最悪詰む（頼みのGSI、LSIには上限がある）。&lt;/p&gt;&#10;&lt;h2 id="ログ分析は別の手段を用意する"&gt;ログ分析は別の手段を用意する&#10;&lt;/h2&gt;&lt;p&gt;以上のように、DynamoDBは検索性がよろしくないので、あらゆる方向からログを分析するような用途にはつらい。&lt;strong&gt;平たく言うと、集計には向きません&lt;/strong&gt;。なので、ログ分析なんかのためのインフラは別途用意すべき。&lt;/p&gt;&#10;&lt;p&gt;楽なのは、CloudWatchの活用とか、とにかくS3に突っ込んでAthenaで解析することだと思う。ただ、ログならともかく、分析のため、とデータについてもS3に保存すると、&lt;strong&gt;S3とDynamoDBの整合性の問題&lt;/strong&gt;も出てくる。さすがに複数のサービスを跨ぐとトランザクション処理というわけにもいかないから、一時的に失敗しても時間を置いて成功するまで続けるか失敗しても帳尻合わせられるような非同期処理にしようとか、定期的にデータベースをメンテナンスするようなバッチもあったほうがいいかな、という風になってきて &lt;strong&gt;、だんだんとインフラが複雑になっていく&lt;/strong&gt;わけだ。まぁでも、このあたりの話はRDBを使っても、検索はElasticsearchで、なんてすると同じような問題を抱えることにはなる。&lt;/p&gt;&#10;&lt;h2 id="rdbかdynamodbかはdb設計ではなくシステム設計として考える"&gt;RDBかDynamoDBかは、DB設計ではなくシステム設計として考える&#10;&lt;/h2&gt;&lt;p&gt;ここまで色々とDynamoDBの苦しみを書いてきたが、逆に言うと、検索要件さえハッキリしていれば使いやすいといえる。キー設計さえブレなければ、仕様の変更にも柔軟に対応できるし、jsonが基本だから階層構造のデータを表現しやすいのは大きなメリットだ。json投げればそれがそのままデータです、ってのは本当にわかりやすくて良い。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、一番はシステムの中でデータベースとしてアプリケーションと切り離した設計をしやすい、というところかと思う。主眼がデータモデルではなくて、サービスでのデータの使われ方、という感じ。サービスのユースケースが大事で、アプリケーションとデータベースを繋ぐAPI設計、システム設計が肝。考え方としては、いわゆるマイクロサービス的。&lt;strong&gt;RDBを使いたいシステムとはシステム設計の考え方そのものが異なるわけで、RDBかDynamoDBか、みたいな巷の議論はそもそも違うんじゃなかろうか&lt;/strong&gt;、と思う。&lt;/p&gt;&#10;&lt;h2 id="好きです"&gt;好きです&#10;&lt;/h2&gt;&lt;p&gt;その他、&lt;strong&gt;予約語めっちゃ多い&lt;/strong&gt;とか&lt;strong&gt;float使えない&lt;/strong&gt;とか&lt;strong&gt;Decimalかよ&lt;/strong&gt;とか、実際に使い始めると色々な罠で一々躓きますが、なんだかんだ言って好きです。フィジカルコンピューティングみたいなのとも相性いいと思います。いつかハードウェア絡めたシステムで使いたい。。。&lt;/p&gt;&#10;&lt;p&gt;（2020/02/23 追記）とか言ってたら本当に使う機会が出てきて人生言ったことが本当になるなぁとつくづく思います。でも最近はむしろFirestoreの優しさに抱かれています。DynamoDBはほんとストイックだと思うよ。&lt;/p&gt;</description></item><item><title>S3 + CloudFrontでS3にファイルをアップロードしたら自動でキャッシュをクリアする</title><link>https://hack-le.com/s3-cloudfront-lambda/</link><pubDate>Tue, 16 Apr 2019 14:49:16 +0900</pubDate><guid>https://hack-le.com/s3-cloudfront-lambda/</guid><description>&lt;p&gt;S3 + Cloudfrontでサーバレスな感じを出す場合、S3にindex.htmlなりなんなりアップロードしたら、エッジサーバー上のキャッシュもクリアしてもらわないと困る。&lt;/p&gt;&#10;&lt;p&gt;ということで、S3にファイルをアップロードしたら、自動的にキャッシュクリアするようなLambdaを作成する。S3 -&amp;gt; LambdaのところはCloudformation使います。&lt;/p&gt;&#10;&lt;h2 id="仕組み"&gt;仕組み&#10;&lt;/h2&gt;&lt;p&gt;仕組みとしては、S3にファイルをアップロードしたら、それをLambdaが検知して、アップロードしたファイルのInvalidationをCloudFrontで実施する。中途半端にS3 -&amp;gt; LambdaのところだけCloudformation使う。&lt;/p&gt;&#10;&lt;h2 id="cloudfrontでディストリビューションを作成する"&gt;CloudFrontでディストリビューションを作成する&#10;&lt;/h2&gt;&lt;p&gt;CloudFrontで適当にディストリビューションを作成する。コンソールから作った。オリジンの設定とかは適当。Distribution IDが知りたいだけ。&lt;/p&gt;&#10;&lt;h2 id="s3トリガのlambda用のファイルを作成する"&gt;S3トリガのLambda用のファイルを作成する&#10;&lt;/h2&gt;&lt;p&gt;S3にアップロードされたことをトリガにして、CloudFrontのInvalidationをするようなファイルを作成する。ここでは、s3/cfcache_clear.py というファイルを作成した。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;S3にファイルがアップロードされたら 自動的にInvalidationする&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;urllib.parse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;boto3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client_cf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cloudfront&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;S3にファイルがアップロードされたら起動する&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# アップロードされたファイル&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;src_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unquote_plus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Records&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;object&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;src_key&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# CloudFrontのキャッシュを削除する&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client_cf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_invalidation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;DistributionId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;DISTRIBUTION_ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;InvalidationBatch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Paths&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Quantity&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Items&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;CallerReference&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;DISTRIBUTION_IDを環境変数で持っている。&lt;/p&gt;&#10;&lt;h2 id="cloudformation用のテンプレートファイルを作成してデプロイ"&gt;Cloudformation用のテンプレートファイルを作成してデプロイ&#10;&lt;/h2&gt;&lt;p&gt;以下のようなtemplate.yamlを作成する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AWSTemplateFormatVersion: &amp;#39;2010-09-09&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Transform: AWS::Serverless-2016-10-31&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Resources:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; UpdateSourceProdFunction:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::Serverless::Function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CodeUri: s3/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Variables:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DISTRIBUTION_ID: ここにディストリビューションID&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Handler: cfcache_clear.lambda_handler&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MemorySize: 256&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Role: arn:aws:iam::ほげほげ:role/ここにロール&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Runtime: python3.7&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timeout: 5&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Events:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; UpdateSource:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: S3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Bucket: !Ref SourceBucketProd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Events: s3:ObjectCreated:*&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SourceBucketProd:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::S3::Bucket&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Distribution IDはここで使う。&lt;/p&gt;&#10;&lt;p&gt;CloudFrontでInvalidationができるようなロールを作成しておく。CreateInvalidationが使えれば良いと思うが、ここではテストということで、最初から用意されているポリシーCloudFrontFullAccessを適用したロールを使った。&lt;/p&gt;&#10;&lt;p&gt;SourceBucketProdのところがバケット名になるので、わかりやすい名前にする。&lt;/p&gt;&#10;&lt;p&gt;設定ファイルを書いたら、デプロイする。ソース上げる用のバケットも作ろう。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mb s3://&amp;lt;Bucket Name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws cloudformation package --template-file template.yaml --output-template-file template-output.yaml --s3-bucket &amp;lt;Bucket Name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws cloudformation deploy --template-file template-output.yaml --stack-name &amp;lt;Stack Name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで、仕組み自体は出来上がる。&lt;/p&gt;&#10;&lt;h2 id="確認する"&gt;確認する&#10;&lt;/h2&gt;&lt;p&gt;aws s3 lsで作られたS3バケット名を確認したら、早速なにかファイルをアップロードしてみる。で、コンソールからCloudFrontを見にいって、Invalidationが実行されていればOK。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2019/04/569b332d5d05f706629353b543c918da-700x237.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Invalidation&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;In Progress。OK。&lt;/p&gt;&#10;&lt;h2 id="参考記事"&gt;参考記事&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございましたm(_ _)m&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.superbusinessman.biz/managing-subdomain-using-amazon-s3/" target="_blank" rel="noopener"&#10; &gt;サブドメインのコンテンツを Amazon S3 で管理する方法&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://dev.classmethod.jp/cloud/cm-advent-calendar-2015-aws-re-entering-cloudfront/" target="_blank" rel="noopener"&#10; &gt;AWS再入門 Amazon CloudFront編 ｜ DevelopersIO&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://syossan.hateblo.jp/entry/2018/09/24/014255" target="_blank" rel="noopener"&#10; &gt;S3にファイルがアップロードされた時にCloudFrontのキャッシュを削除してみる - 生涯未熟&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.wantedly.com/companies/clueit/post_articles/43484" target="_blank" rel="noopener"&#10; &gt;AWS Lambdaを使用し、CloudfrontのInvalidationを走らせる | Cluex Developers Blog&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.cloudberrylab.com/resources/blog/how-to-automatically-invalidate-dynamic-objects-in-amazon-cloudfront-using-aws-lambda/" target="_blank" rel="noopener"&#10; &gt;How to Automatically Invalidate Dynamic Objects in Amazon CloudFront&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>C1801: Do not use len(SEQUENCE) to determine if a sequence is empty (len-as-condition)と怒られた時</title><link>https://hack-le.com/len-as-condition/</link><pubDate>Thu, 04 Apr 2019 17:00:47 +0900</pubDate><guid>https://hack-le.com/len-as-condition/</guid><description>&lt;p&gt;pylintを使っていると、C1801: Do not use &lt;code&gt;len(SEQUENCE)&lt;/code&gt; to determine if a sequence is empty (len-as-condition)と怒られました。原因とその回避方法について。&lt;/p&gt;&#10;&lt;h2 id="pylintで怒られる"&gt;pylintで怒られる&#10;&lt;/h2&gt;&lt;p&gt;たとえば以下のようなコードを書く。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;test_list = []&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if len(test_list) == 0:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#39;empty&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;特に間違いというわけではなく、きちんと動作する。が、pylintにかけると以下のような警告をされる。&lt;/p&gt;&#10;&lt;p&gt;C1801: Do not use &lt;code&gt;len(SEQUENCE)&lt;/code&gt; to determine if a sequence is empty (len-as-condition)&lt;/p&gt;&#10;&lt;p&gt;空チェックにlen(SEQUENCE)を使うな、と怒っている。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;ではどうするかというと、以下のように書く。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;test_list = []&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if not test_list:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#39;empty&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;bool([]) でFalseが返るとのこと。リストが空でないときは if test_list: と書ける。PEP 8、こんなところまで決めてるんですね。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございましたm(_ _)m&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.python.org/dev/peps/pep-0008/" target="_blank" rel="noopener"&#10; &gt;PEP 8 &amp;ndash; Style Guide for Python Code | Python.org&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/43121340/why-is-the-use-of-lensequence-in-condition-values-considered-incorrect-by-pyli" target="_blank" rel="noopener"&#10; &gt;python - Why is the use of len(SEQUENCE) in condition values considered incorrect by Pylint? - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/yonedaco/items/d0f65ca3dad2e085a51d" target="_blank" rel="noopener"&#10; &gt;[Python] listが空かどうか判定する方法2つ - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Python + SendGrid API でメールを送信する</title><link>https://hack-le.com/python-sendgrid/</link><pubDate>Wed, 03 Apr 2019 17:16:36 +0900</pubDate><guid>https://hack-le.com/python-sendgrid/</guid><description>&lt;p&gt;SendGridのPython用ライブラリを使ってメールを送信するメモ。なんか妙にいろいろハマってしまった。。。&lt;/p&gt;&#10;&lt;p&gt;バージョンは5.6.0で現行6.0.2よりちょっと古い。引数とか割と違うし、結局ソースコードみるのが早い。。。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;環境は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;macOS mojave 10.14.4&lt;/li&gt;&#10;&lt;li&gt;python 3.7.3&lt;/li&gt;&#10;&lt;li&gt;sendgrid 5.6.0&#10;&lt;ul&gt;&#10;&lt;li&gt;最新の6.0.2だと引数とかいろいろ違ったので、バージョンによってちゃんとソースみたほうがよい。。。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ソースコード"&gt;ソースコード&#10;&lt;/h2&gt;&lt;p&gt;以下のように書く。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sendgrid&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sendgrid.helpers.mail&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Mail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Content&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Mail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;from_email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;from_address@example.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;タイトル&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;to_email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;to_address@example.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;text/plain&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;本文&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# SendGrid の APIキー を使うが ここでは環境変数に入れている&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sendgrid&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SendGridAPIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apikey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SENDGRID_API_KEY&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;各種変数や、SENDGIRD_API_KEYのところを入れておく。うまくいけばステータスコードの202が返る。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;githubの情報が便りなのだけれど（「&lt;a class="link" href="https://github.com/sendgrid/sendgrid-python" target="_blank" rel="noopener"&#10; &gt;GitHub - sendgrid/sendgrid-python: The Official SendGrid Led, Community Driven Python API Library&lt;/a&gt;」）、Quick Startのままやっても動かなくて、うーんとか思っていたら、手元のバージョンが違っていたという。。。&lt;/p&gt;</description></item><item><title>DynamoDBにboto3でトランザクションな書き込み</title><link>https://hack-le.com/transact-write-items-sample/</link><pubDate>Wed, 27 Mar 2019 11:33:02 +0900</pubDate><guid>https://hack-le.com/transact-write-items-sample/</guid><description>&lt;p&gt;DynamoDBはトランザクションをサポートしている。とはいえ基本的に原子性を求められるようなユースケースでは使わないほうがよいと思うけれど、できると幅が広がるので、覚えておいて損はない。ということで、boto3での使い方のメモ書き。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;以下のようなテーブルを作る。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;テーブル名　transact-test&lt;/li&gt;&#10;&lt;li&gt;パーティションキー　user_id&lt;/li&gt;&#10;&lt;li&gt;user_idがhoge、user_nameがfugaさんのアイテムを投入&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;このtransact-testテーブルに、以下のような処理を行う。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;user_id=hogeのuser_nameをafterに変更する&lt;/li&gt;&#10;&lt;li&gt;user_id=add を追加する&lt;/li&gt;&#10;&lt;li&gt;両方の処理が成功して初めて処理が反映される&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;更新と追加、両方の処理ができて初めて一つの処理とみなす、というテスト。&lt;/p&gt;&#10;&lt;h2 id="サンプルコード"&gt;サンプルコード&#10;&lt;/h2&gt;&lt;p&gt;以下のようなソースコードを書く。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;&amp;#34;&amp;#34;boto3のtransact_write_items()を試すテストコード&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import boto3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;client_dynamo = boto3.client(&amp;#39;dynamodb&amp;#39;, region_name=&amp;#39;ap-northeast-1&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TABLE_NAME = &amp;#39;transact-test&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def dict2dynamoformat(orig_dict):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;&amp;#34;&amp;#34;辞書配列をDynamoDB用に変換する&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ret_dict = {}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for k, v in orig_dict.items():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(k,v)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ret_dict[k] = _to_dynamo_format(v)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return ret_dict&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def _to_dynamo_format(v):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;&amp;#34;&amp;#34;dict2dynamoformatの変換部分でSet系の型は未対応&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if type(v) is str:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return {&amp;#39;S&amp;#39;: v}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if type(v) is int:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return {&amp;#39;N&amp;#39;: str(v)}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if type(v) is bool:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return {&amp;#39;BOOL&amp;#39;: v}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if type(v) is list:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return {&amp;#39;L&amp;#39;: [_to_dynamo_format(a) for a in v]}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if type(v) is dict:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return {&amp;#39;M&amp;#39;: dict2dynamoformat(v)}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if __name__ == &amp;#39;__main__&amp;#39;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; item = {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;user_id&amp;#39;: &amp;#39;add&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;user_name&amp;#39;: &amp;#39;add_test&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; item4dynamo = dict2dynamoformat(item)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; client_dynamo.transact_write_items(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TransactItems=[&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Put&amp;#39;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;TableName&amp;#39;: TABLE_NAME,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Item&amp;#39;: item4dynamo,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Update&amp;#39;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;TableName&amp;#39;: TABLE_NAME,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;Key&amp;#39;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;user_id&amp;#39;: {&amp;#39;S&amp;#39;: &amp;#39;hoge&amp;#39;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;UpdateExpression&amp;#39;: &amp;#39;SET user_name = :un&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;ExpressionAttributeValues&amp;#39;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;:un&amp;#39;: {&amp;#39;S&amp;#39;: &amp;#39;after&amp;#39;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;client_dynamo.transact_write_items()が書き換えの処理内容。使い方は「&lt;a class="link" href="https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.transact_write_items" target="_blank" rel="noopener"&#10; &gt;DynamoDB — Boto 3 Docs 1.9.121 documentation&lt;/a&gt;」を見るのが一番。boto3でDynamoDB使う時は、だいたいresourceを使うと思うのだが、transact_write_itemsを使いたいのであれば、抽象レベルの低いclientを用いる。そのうち対応されるのかなぁ。&lt;/p&gt;&#10;&lt;p&gt;dict2dynamoformatは、書き込みアイテムの配列が、普通の辞書配列をそのまんま突っ込んではダメなので、DynamoDBに登録できるように変換するための関数。Setな型には対応していない。自分が使ってないから……。&lt;/p&gt;&#10;&lt;p&gt;実行すると、ちゃんと書き換えが行われる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2019/03/8bc09583b4f421b42eba3564493753ba.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;実行結果&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;片方でも失敗すると、どちらの処理も反映されない。&lt;/p&gt;&#10;&lt;h2 id="transact_write_itemsなんかないと怒られた時"&gt;transact_write_items()なんかないと怒られた時&#10;&lt;/h2&gt;&lt;p&gt;ひょっとすると、transact_write_ites()なんかないよと怒られるかもしれない。これはboto3が古いです。更新しましょう。&lt;/p&gt;&#10;&lt;p&gt;……ローカルなら更新しましょうでよいのだけれど、Lambdaで使おうとしてこれが出ると、新しいboto3を別環境でzip化して入れるという謎の工程が入ることになってしまってテンション下がる。そのうち対応されるのでしょうか。。。&lt;/p&gt;&#10;&lt;h2 id="参考記事"&gt;参考記事&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございましたm(_ _)m&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://dev.classmethod.jp/cloud/aws/reinvent2018-dynamodb-transactions/" target="_blank" rel="noopener"&#10; &gt;DynamoDBのトランザクションを試してみた #reinvent ｜ DevelopersIO&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://dev.classmethod.jp/cloud/aws/implement-mock-transact-write-items/" target="_blank" rel="noopener"&#10; &gt;AWSのサービスをモックするライブラリmotoを拡張してDynamoDBのTransactWriteItemsを実装する ｜ DevelopersIO&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Web APIのエンドポイントを考えるときの自分の指針</title><link>https://hack-le.com/endpoint/</link><pubDate>Sat, 16 Mar 2019 14:19:59 +0900</pubDate><guid>https://hack-le.com/endpoint/</guid><description>&lt;p&gt;タイトルまま。APIを作り始めてまだ1年にもたたない若輩者だけれど、自分なりに勉強して考えてきたことをまとめる。まぁそのレベルなので初心者向け。Web APIの設計でエンドポイントをどうするか、自分がどういう理屈で考えているのか、一緒にやっている人たちに伝えるための記事であり、備忘録でもある。&lt;/p&gt;&#10;&lt;h2 id="極論apiは一つでなんでもできる"&gt;極論、APIは一つでなんでもできる&#10;&lt;/h2&gt;&lt;p&gt;APIのエンドポイントをどうするかって、けっこう考えどころです。APIを作り初めて1年にもたちませんが、もう何度もひっくり返しています。考えれば考えるほど正解が見えてこないというか。まぁ、そもそも正解なんてないのでしょう。なにしろ、極端な話、APIは一つでも良い。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POST /api&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで全部できる。bodyに処理内容を記述すればよい。やったー。が、これが良いと思う人は誰もいない。だって何がしたいのか全然わからない。すべての処理を一つのオブジェクトでやろうとするようなもの。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;わかりやすい名前をつけよう&lt;/strong&gt;、となります。&lt;/p&gt;&#10;&lt;h2 id="たとえばユーザーを追加するapiを考えた時"&gt;たとえばユーザーを追加するAPIを考えた時&#10;&lt;/h2&gt;&lt;p&gt;こういうのは具体的な例を交えて考えたほうがわかりよいので、「ユーザーを追加する時に叩くAPI」を想定して考えていきます。より具体的には、idがhogeのユーザーを追加するとします。この場合、考えるのはid=hogeをどうやって伝えるかですが、だいたい3とおり考えられるかと思います。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;POST /users&lt;/li&gt;&#10;&lt;li&gt;POST /users/hoge&lt;/li&gt;&#10;&lt;li&gt;POST /users?id=hoge&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;1のURIからはhogeがわかりません。つまり、bodyでもつことになります。2はパスパラメータにもっています。3はクエリパラメータです。どれも同じことができる。じゃ、どれがいいんだろう。&lt;/p&gt;&#10;&lt;h2 id="リソースは具体的な集合という捉え方"&gt;リソースは具体的な集合という捉え方&#10;&lt;/h2&gt;&lt;p&gt;まず、クエリパラメータを使ったやり方はあまりよろしくないように見えます。&lt;strong&gt;クエリパラメータが省略された場合、デフォルト値がある&lt;/strong&gt;わけだけれど、追加されるユーザーのデフォルトってなんやねん、という話。といってクエリパラメータを必須にするのもなにか妙。っていうか、&lt;strong&gt;必須ならパスパラメータが自然では？&lt;/strong&gt; と思う。&lt;/p&gt;&#10;&lt;p&gt;ということで2のパスパラメータについて考えます。これはこれで悪くないような気がするけれど、自分は使いません。だって、POSTしようとした時、hogeさんはusersの中にいない。&lt;/p&gt;&#10;&lt;p&gt;&amp;ldquo;users&amp;quot;であって&amp;quot;user&amp;quot;ではないことに注意。な&lt;strong&gt;ぜ複数形かと言えば、リソースは抽象的なモデルではなくて、具体的な集合と考えるから&lt;/strong&gt;。このあたり、DBのテーブル名は単数形か複数形か議論と同じだと思います。ちなみに、このように考えると&lt;strong&gt;集合なのだから動詞ではなく名詞であるべき&lt;/strong&gt;、とも言えます。&lt;/p&gt;&#10;&lt;p&gt;で、具体的な集合であれば、&lt;strong&gt;集合の中にいないhogeさんを指定して追加するのは、なんとも妙な話&lt;/strong&gt;。ということで、ユーザーを追加する時は1の形式を自分はとります。だいたい皆さんそうされているんじゃないかしら。性能的にも、これなら複数人追加できる。&lt;/p&gt;&#10;&lt;h2 id="更新の時は"&gt;更新の時は？&#10;&lt;/h2&gt;&lt;p&gt;考え方が分かれそうなのは、更新や削除の時でしょうか。たとえば、hogeさんの情報を変更しようとしたら、どうすればよいだろう。更新なので、HTTPメソッドはPUTを使うとして、リソース名は？先の例にならえば、考えられるのはざっくり3とおり。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;PUT /users&lt;/li&gt;&#10;&lt;li&gt;PUT /users/hoge&lt;/li&gt;&#10;&lt;li&gt;PUT /users?id=hoge&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;とりあえず、3のクエリパラメータはPOSTの時と同じ理由で却下。更新するユーザーのデフォルトってなによ。&lt;/p&gt;&#10;&lt;p&gt;では2のパスパラメータにhogeをもたせるのは。これは良い気がする。今回は、usersの中にhogeさんがいるわけなので、hogeさんをパスパラメータで指定することに何の不自然さもない。&lt;/p&gt;&#10;&lt;p&gt;では1は。別にこれでも構わない気がする。むしろ、こちらならばhogeさんだけではなくて、同時に他のユーザーの情報も更新できる。性能的にはむしろ上。&lt;/p&gt;&#10;&lt;p&gt;なのだけれど、この場合だと自分は2のパスパラメータにします。というのも、/usersだと集合そのものにはたらきかけているようなイメージになってしまうのですが、/users/hogeならば集合usersの中にいるhogeさんに対してはたらきかけているイメージになって、こちらのほうがしっくりくる。&lt;/p&gt;&#10;&lt;p&gt;とはいえ実際問題、100ユーザーについて同時に更新するようなケースが頻発するのであれば、APIを叩くところはボトルネックになりやすいので、その場合は1の形式を採用するかもしれない。なのでまぁ、&lt;strong&gt;最終的にはユースケースに応じて&lt;/strong&gt;、ということになるかと思います。&lt;/p&gt;&#10;&lt;h2 id="階層は浅めに"&gt;階層は浅めに&#10;&lt;/h2&gt;&lt;p&gt;次に、ユーザーのコメントができるAPIを考えてみる。具体的に、id=hogeさんがコメントした時のことを考えてみると…&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POST /users/hoge/comments&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;というのが考えられるかもしれない。しれないが、果たしてURIにhogeを入れる必要はあるだろうか。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POST /comments&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;で十分ではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;特にGETのことを考えると、そのように思える。というのも、hogeさんのコメントを取得したいのであれば、GET /users/hoge/commentsでよいかもしれないが、hogeさんに限らず、コメント一覧を取得したい、と考えると、GET /commentsとしたくなる。hogeさんのコメントだけほしいのであれば、GET /comments?id=hoge とクエリパラメータを使ってやればよい。集合commentsは、集合usersとは切り離して考えたほうが、なにかとやりやすそうです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;階層構造を深くする前に、本当に紐付けなければいけないのか、ユースケースから考えてみる&lt;/strong&gt;わけです。階層が深いということは、それだけ依存関係があるということ。小回りがききづらくなるし、名前が長いと単純にわかりづらいし、できれば階層は浅いほうがよい。&lt;/p&gt;&#10;&lt;h2 id="パスパラメータとクエリパラメータの使い分け"&gt;パスパラメータとクエリパラメータの使い分け&#10;&lt;/h2&gt;&lt;p&gt;さて、先の例でクエリパラメータを使いました。しれっとGET /commens?id=hogeとしましたが、これはパスパラメータを使っても書けそうです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;GET /comments?id=hoge&lt;/li&gt;&#10;&lt;li&gt;GET /comments/hoge&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;どちらもいけそうですが、この場合はクエリパラメータのほうがよいかと思います。というのも、GET /comments/hoge だと、hogeが集合commentsに含まれるcomment_id的なものに見えます。この書き方なら、一つのコメントの詳細が取得できてほしい。&lt;strong&gt;パスパラメータは集合の中の一部を取り出すようなイメージで、クエリパラメータは集合全体の中から絞り込むようなイメージ&lt;/strong&gt;でしょうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;機械的に判断するなら、必須なのか必須じゃないのか&lt;/strong&gt;、を考えると、自ずと整理されそうです。&lt;/p&gt;&#10;&lt;p&gt;パスパラメータはその特性上必ず必要となります。&lt;strong&gt;任意の何かを指定するときには、基本的にはパスパラメータが良い&lt;/strong&gt;。一方、クエリパラメータは省略できます。&lt;strong&gt;省略しても良い時、たとえばこの例のように検索条件でフィルタリングしたい時などは、クエリパラメータ&lt;/strong&gt;、ということになります。&lt;/p&gt;&#10;&lt;h2 id="内部の開発者用なら1画面1api1アクション1api"&gt;内部の開発者用なら1画面1API、1アクション1API&#10;&lt;/h2&gt;&lt;p&gt;あともう一つ、APIに大きくわけてLSUDs(Large Set of Unknown Developers)向きとSSKDs(Small Set of Known Developers)向きのものがある、という考え方があります。要は不特定多数の開発者向けと内部の限られた開発者向けのAPI、というです。両者ではAPI設計の基本となる考え方が異なります。前者は汎用性を求めますが、後者はゆーケースがわかっている以上、最小限のAPIで必要十分な情報を取得・送信できることが求められます。&lt;/p&gt;&#10;&lt;p&gt;で、検索しているとよく出てくるAPI設計の例は、割とLSUDs的な考え方のことが多いので、注意。SSKDs的には、1画面1APIコール、1アクション1APIコールにできると美しい。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4873116864&amp;linkId=0ef4ecfdfa65d860b0a33ff1413821b7"&gt;&lt;/iframe&gt;Web API: The Good Parts&#10;&lt;p&gt;とても良い本です。急遽APIを作らないといけなくなった人は、とりあえずこの本を読めばだいぶ不安が和らぐのではないかと思います。時間かけて色々ググるより、まずこの本を読んだほうが早いかと。&lt;/p&gt;&#10;&lt;p&gt;API設計について調べるとRESTfulとはなんぞやとか使ったことのないHTTPメソッドとかHTTPの細かな仕様とかエラーコードはどうするとか色々出てきて頭パンクしますが、まぁ何事も千里の道もなんとやらで、一つ一つ抑えていかないとですね。&lt;/p&gt;</description></item><item><title>ScanSnap S1500はmacOS mojaveをサポートしない（その後：Catalinaでまさかの復活！！）</title><link>https://hack-le.com/s1500-mojave/</link><pubDate>Mon, 11 Feb 2019 14:08:56 +0900</pubDate><guid>https://hack-le.com/s1500-mojave/</guid><description>&lt;p&gt;（追記）この記事は古いです！Catalinaで復活しました！やったー&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.pfu.fujitsu.com/imaging/news/news20200625-02.html" target="_blank" rel="noopener"&#10; &gt;イメージスキャナー | macOS CatalinaにおけるScanSnap S1500、S1500M、S1300のご利用について | PFU&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;自分は圧倒的に電子書籍派で、ドキュメントスキャナと裁断機を持っている。ドキュメントスキャナは院生時代に買ったPFUのScanSnap S1500。もうかれこれ10年近く使っていることになるのだろうか。&lt;/p&gt;&#10;&lt;p&gt;だから仕方ないのかもしれないが、ついにソフトウェアが最新OSをサポートしない事態に。具体的にはmojave。スキャンがうまくいかない……。&lt;/p&gt;&#10;&lt;h2 id="サポート外だったらしい"&gt;サポート外だったらしい&#10;&lt;/h2&gt;&lt;p&gt;まいった。うーん。どうやら&lt;strong&gt;mojaveでは、ScanSnap S1500できちんと取り込み画像処理を行うことができない&lt;/strong&gt;らしい。mojaveにアップグレードしてからもう随分経つのだけれど、別に毎日使うものでもないから、ScanSnapのことをすっかり失念していた。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2019/02/8353ae7c72f10644f1ab807513378c61.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;取り込み失敗&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;こんな状態である。とてもではないが使えない。で、PFUのページを見てみると（&lt;a class="link" href="http://faq.pfu.jp/faq/show/2193?site_domain=scansnap" target="_blank" rel="noopener"&#10; &gt;macOS Mojave v10.14 への対応予定を教えてください。 | ScanSnap よくあるご質問 (PFU)&lt;/a&gt;）、以下のようにサポートしない旨の記述があった。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2019/02/d4a1fff1311c6b9167b9af356bb01425.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;2019年2月11日現在&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Macは毎年のようにOSをアップグレードさせるから、サポートするのもいよいよ割に合わなくなってきたということだろう。特に周辺機器を使うようなものは、ソフトウェアのコアな部分に依存するところも大きいだろうし、Apple社は基本的に一度釣った魚のために餌を用意してくれる会社でもないので、そのような会社のアップグレードにはついていくだけでたいへんなはずだ。もう発売されてから10年以上であるし、仕方のないことか。&lt;/p&gt;&#10;&lt;h2 id="対応しないといけない"&gt;対応しないといけない&#10;&lt;/h2&gt;&lt;p&gt;公式にサポートしないと言われてしまってはどうしようもない。まさかこのためだけにHigh Sierraを使い続ける、なんてできるわけもないし…僕はmojaveで搭載されたダークモードやスクリーンレコードの機能を気に入っている。そもそも、今頃気づいたくらいだから、ScanSnapの出番自体がさほどない。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、まったくないわけでもない。だから困る。いつも使うものならお金をかけてもいいけれど、そうでもないものにはあまりお金を使えない。自分は市井のいち庶民で、経済的に困窮しているわけではないものの、決して裕福なわけでもないのだから。そうかといって、&lt;strong&gt;まったく使わないわけではない以上、なにかしらの対応は取らないといけない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ちょうど、自分は複数のマシンを持っていて、そのうちの一台はWindows 10を入れたデスクトップマシンだ。これを使うことにする。幸いなことにWindows 10についてはまだサポートがきれていない…まぁ、WindowsはMacほど毎年のように代わりはしないし（その変わり、数年に一度の大幅なメジャーアップグレードのときはいろいろな意味でお祭りになるが…）、ユーザー数も多いから、まだ当分は大丈夫だろう。&lt;/p&gt;&#10;&lt;h2 id="自炊ユーザーは今"&gt;自炊ユーザーは今&#10;&lt;/h2&gt;&lt;p&gt;それにしても、今現在ドキュメントスキャナを買う人はどれくらいいるのだろう。このややマニアックな機材を買う人の中には、いわゆる自炊ユーザーもそれなりにあるはず。&lt;/p&gt;&#10;&lt;p&gt;しかし、電子書籍ストアの環境も整ってきた昨今、DRM問題は相変わらずつきまとってはいるものの、そこそこ便利に電子書籍を買って読めるのだから、わざわざ自炊などという手間暇をかける人は、もはやほとんどいないのではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;自分自信鑑みても、電子書籍の環境がほとんど整っておらず、かつ金のない学生時分だったからこそ、ハードウェアの金銭的耐火のみならず、場合によっては画像処理やファイル操作のプログラミングなどという学習コストを払ってまで自炊を始めただけれど、もし今、一から始めないといけないとすれば、まぁ素直にKindleと代行業者の世話になっただろうなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁ、もうかれこれ20万枚ほどスキャンした今となっては、自炊は趣味みたいな領域に達しているので、もしもハードウェア本体が壊れたら、その時は新機種に買い換えるだろうとは思う（さすがに、ちょっと挙動が怪しいと思うことも増えてきた）。それに、なんにも気兼ねすることなく、「自分のもの」として保存し整理できるのは、何にも代えがたい喜び、ではあるしね。&lt;/p&gt;&#10;&lt;p&gt;なんにしても、ここのところ出費も多いし、もうしばらくはこのまま使い続けたいところだ。&lt;/p&gt;</description></item><item><title>Mac mini 2018のメモリを換装して8GB -&gt; 32GBに</title><link>https://hack-le.com/mac-32gb/</link><pubDate>Sun, 10 Feb 2019 18:31:01 +0900</pubDate><guid>https://hack-le.com/mac-32gb/</guid><description>&lt;p&gt;昨年末くらいから、メモリの値段が熟れてきている。DDR4の16GBx2が3万円足らずで購入できる状態だ。Mac mini 2018の新型発売して間もなくのPayPay祭りといい、神様が私にMacを買い替え、メモリを換装させようとしているに違いない。完全に流れがきている。&lt;/p&gt;&#10;&lt;p&gt;ということで、メモリを換装した。4GBx2=8GBから16GBx2=32GBになり、ぼくのMac miniがさいきょうになった。&lt;/p&gt;&#10;&lt;h2 id="絶好の流れ"&gt;絶好の流れ&#10;&lt;/h2&gt;&lt;p&gt;ここ最近、SSDやメモリの価格が熟れてきた。しばらくぶりの、自作派にとって嬉しい流れだ。自分はもはや自作PCをしようとは思わないけれど、それでもPCパーツが安くなっているのを見ると、わけもなく嬉しくなる。120GB SSDが1,380円、なんて記事がRSSフィードに流れてくると、自分が買うわけでもないのに「やった！」と言いたくなる。&lt;/p&gt;&#10;&lt;p&gt;まぁ自作はしないとはいえ、ストレージとメモリくらいは今後も何かと買う機会はあるだろう。ベアボーンキットくらいはそのうち買う日がくるかもしれないし。それに、今はなんといってもMac mini 2018がある。有り難いことに、Mac mini 2018はメモリが換装できるので、あえてCTOせずにメモリの購入機会を窺っていた。まぁ、CTOせずとも8GBはあり、それくらいあれば、多少スワップするものの、特に不便もなく使える。正直換装しなくてもいいくらいかもしれないのだが、そこはそれ、&lt;strong&gt;大容量メモリには理屈を超えた浪漫がある&lt;/strong&gt;のである。&lt;/p&gt;&#10;&lt;p&gt;ということで、メモリ16GBx2が3万円を割ってきたし、ぼちぼち使用報告などもあがってきたので、自分も換装することにした。&lt;/p&gt;&#10;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01BGZEVHU&amp;linkId=6527de357afcb97f9fba46b62983be37"&gt;&lt;/iframe&gt;自分が購入したのはこのCORSAIRのVENGEANCE、CMSX32GX4M2A2666C18。&#10;&lt;p&gt;レビューにもMac mini 2018で問題なく使用できている報告があり、価格コムで調べても一番お値頃だったので、現状はこれが一番よいものと思う。&lt;/p&gt;&#10;&lt;h2 id="換装作業"&gt;換装作業&#10;&lt;/h2&gt;&lt;p&gt;さて、メモリが届いたので実際に換装の作業をしなくてはならないが、これが少しばかり億劫である。なにしろロジックボードを引っ張り出さねばならない。Mac mini 2012でも、下段のストレージにアクセスするには同じような作業が必要だったが、&lt;strong&gt;なかなか骨の折れる作業&lt;/strong&gt;であった。またあれをやるのか、と思うと気が重い。昔ならばそういう作業も楽しんでできたものだけれど、今となっては面倒なだけである。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、CTOで32GBにしようと思えば+66,000円。メモリとの差額を考えると、さすがに3万円以上の価値がある作業に思えず。やはりできることは自分でやるに越しことはない。それに、非常に丁寧に換装の仕方を解説してくれているサイトもある。本当に有り難いことだ。&lt;/p&gt;&#10;&lt;p&gt;今回私が参考にさせていただいたのは、「&lt;a class="link" href="https://syobon.jp/blog/2018/11/09/how-to-upgrade-ram-mac-mini-2018/" target="_blank" rel="noopener"&#10; &gt;Mac mini 2018年モデルのメモリを換装する方法 | しょぼんブログ&lt;/a&gt;」の記事である。写真と文字による解説付きで、とてもわかりやすい。&lt;/p&gt;&#10;&lt;p&gt;動画による解説もYoutubeにはあがっているが、この手の作業では&lt;strong&gt;静止画と文字解説に勝るマニュアルはない&lt;/strong&gt;と思う。動画はその性質上、すべての作業がフラットに収録されるわけだが、だいたい本当に見たいところというのはその中のごく一部である。もちろん編集すれば大事なところを強調できるのだが、それを突き詰めると、最終的には静止画と文字になるのではなかろうか。本当に動画が有用なのは、「動きそのもの」が重要な作業であろう。たとえば、半田付けなどは動画が有用であると思う。&lt;/p&gt;&#10;&lt;p&gt;ということで、iPadで先の解説記事を参考にしつつ、作業をすすめた。ドライバーは例によってセキュリティトルクスドライバーなど特殊なものが必要なのだが、これは以前購入した精密ドライバーセットにあるもので大丈夫だった。&lt;/p&gt;&#10;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00ASARYZQ&amp;linkId=0ad982c00988e8ed2b65c627d5e54edf"&gt;&lt;/iframe&gt;&#10;&lt;p&gt;作業としては丁寧に進めれば難しいところはない……といいたいところだが、メモリの差し込みはちょっと戸惑った。留め具で押さえるのがなんとも無理やりな気がして、&lt;strong&gt;ぐっと力を入れると、折れてしまいそう&lt;/strong&gt;で心もとなかった。あと、メモリを入れ替えて元に戻す作業の時、最初に外したWi-fiアンテナを再度つける時に、誤ってネジをパコーンと飛ばしてしまい、あわあわしながら再度ロジックボードを引っ張り出してネジを探す羽目になってしまった。爪楊枝でロジックボードのあちこちを突きまわったのは自分くらいのものだろう……。&lt;/p&gt;&#10;&lt;p&gt;まぁこんな不器用な自分でもなんとかはなったので、尻込みしている人もやってみればよいと思う。とはいえ、確かにちょっとハードルは高め。。。&lt;/p&gt;&#10;&lt;h2 id="メモリ32gbの生活"&gt;メモリ32GBの生活&#10;&lt;/h2&gt;&lt;p&gt;ということで、晴れて私のMac mini 2018もメモリが32GBになった。メモリ32GBの生活の始まりである。これによって何が変わったかというと……うーん、なんだろう。メモリの使用量を見ると、たしかにスワップはなくなった。ブラウザに頑張らせると、空き容量が数GBにまで減るので、それなりに有効に使われているはず……ではあるのだけれど、最近特にメモリを大量に使うようなこともしていないのだよなぁ、なんて思いつつ&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2019/02/39d27d8e0a6b35b6f7b831bfea9f052f.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;メモリ32GB&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;この画面を見ただけでご満悦の私である。理屈じゃないのだ。&lt;/p&gt;&#10;&lt;p&gt;……と思っていたのだけれど、最近node.jsの環境を整える必要があって、それを実行するとモリモリメモリが消費されることがわかり、ちょうどよかった。やはり&lt;strong&gt;開発するなら、メモリは多いに越したことはない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;何事もなく使い続けられればよいなぁ。&lt;/p&gt;</description></item><item><title>AWSのAPI Gateway + LambdaによるWeb APIでクエリ文字列を用いるcloudformation用テンプレートファイルの記述(swagger形式)</title><link>https://hack-le.com/aws-api-gateway-lambda-web-api-query/</link><pubDate>Tue, 22 Jan 2019 21:08:50 +0900</pubDate><guid>https://hack-le.com/aws-api-gateway-lambda-web-api-query/</guid><description>&lt;p&gt;どうしても毎度長いタイトルになってしまうなぁと思いつつ、表題のとおりで、AWSのAPI Gateway + Lambdaをつかって、クエリ文字列を取れるcloudformation用のテンプレートファイルの記述の仕方についてメモ。長い。&lt;/p&gt;&#10;&lt;h2 id="設定ファイル"&gt;設定ファイル&#10;&lt;/h2&gt;&lt;p&gt;/users/{user_id}?t=hogehoge のように、t=hogehogedeでクエリ文字列を取るようなAPI、updateUserを作成したいとする。&lt;/p&gt;&#10;&lt;p&gt;関数はpython3.6で、users/update_uesr.py（ハンドラの関数はlambda_handler）に置いてあるとする。その時、aws cloudformation packageをかけるtemplate.yamlは以下のように書ける。リージョンやらタイムアウトやらの設定はよしなに。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AWSTemplateFormatVersion: &amp;#39;2010-09-09&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Transform: AWS::Serverless-2016-10-31&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Resources:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; UpdateUser:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: AWS::Serverless::Function&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CodeUri: users/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Variables:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TABLE_NAME: テーブル名&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Handler: update_user.lambda_handler&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MemorySize: 256&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Role: arn:aws:iam::ロール名&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Runtime: python3.6&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timeout: 5&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Api:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: &amp;#39;AWS::Serverless::Api&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; StageName: prod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DefinitionBody:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; swagger: &amp;#34;2.0&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; info:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; version: &amp;#34;1.0&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; title: &amp;#34;API Gatewayで使う名前&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; schemes:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - &amp;#34;https&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; paths:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /users/{user_id}:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; put:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; produces:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - &amp;#34;application/json&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; parameters:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: &amp;#34;user_id&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; in: &amp;#34;path&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; required: true&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;string&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: &amp;#34;t&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; in: &amp;#34;query&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; required: true&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;string&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; responses:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;200&amp;#34;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; description: &amp;#34;200 response&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; schema:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $ref: &amp;#34;#/definitions/Empty&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; headers:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Access-Control-Allow-Origin:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;string&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; x-amazon-apigateway-request-validator: &amp;#34;クエリ文字列パラメータおよびヘッダーの検証&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; x-amazon-apigateway-integration:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; uri: !Sub arn:aws:apigateway:ap-northeast-1:lambda:path/2015-03-31/functions/${UpdateUser.Arn}/invocations&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; responses:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; default:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; statusCode: &amp;#34;200&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; responseParameters:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; method.response.header.Access-Control-Allow-Origin: &amp;#34;&amp;#39;*&amp;#39;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; passthroughBehavior: &amp;#34;when_no_match&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; httpMethod: &amp;#34;POST&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; contentHandling: &amp;#34;CONVERT_TO_TEXT&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;aws_proxy&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; options:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; consumes:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - &amp;#34;application/json&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; produces:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - &amp;#34;application/json&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; responses:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;200&amp;#34;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; description: &amp;#34;200 response&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; schema:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $ref: &amp;#34;#/definitions/Empty&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; headers:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Access-Control-Allow-Origin:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;string&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Access-Control-Allow-Methods:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;string&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Access-Control-Allow-Headers:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;string&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; x-amazon-apigateway-integration:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; responses:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; default:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; statusCode: &amp;#34;200&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; responseParameters:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; method.response.header.Access-Control-Allow-Methods: &amp;#34;&amp;#39;DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT&amp;#39;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; method.response.header.Access-Control-Allow-Headers: &amp;#34;&amp;#39;Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token&amp;#39;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; method.response.header.Access-Control-Allow-Origin: &amp;#34;&amp;#39;*&amp;#39;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; requestTemplates:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; application/json: &amp;#34;{\&amp;#34;statusCode\&amp;#34;: 200}&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; passthroughBehavior: &amp;#34;when_no_match&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; type: &amp;#34;mock&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; UpdateUserPermission:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: &amp;#34;AWS::Lambda::Permission&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Properties:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Action: lambda:InvokeFunction&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; FunctionName: !Ref updateUser&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Principal: apigateway.amazonaws.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;まぁだいたい見たら書き換えるところもわかるはず。optionsはプリフライトリクエストのために作っている。最後のUpdateUserPermissionはAPI GatewayからLambdaを動かすためのパーミッション。&lt;/p&gt;&#10;&lt;p&gt;Lambdaの起動イベントとしてAPIを指定しているが、これはSAMならばもっと簡潔にかける。最初、クエリパラメータのために入れていたのだけれど、特にAPI Gatewayで検証しなくてもLambdaで受け取れることを後で知った。ただまぁ、Cognitoと連携させようとか考えると、結局swagger形式になってしまうのかなぁと思う。&lt;/p&gt;&#10;&lt;p&gt;設定ファイルの書き方は、ひとまずGUIのコンソールマネジメントで作って、作ったものをAPI Gatewayでエクスポートして中身を見るのが一番勉強になる感じ。&lt;/p&gt;</description></item><item><title>AWS SQSについて学ぶ</title><link>https://hack-le.com/aws-sqs/</link><pubDate>Mon, 14 Jan 2019 04:58:05 +0900</pubDate><guid>https://hack-le.com/aws-sqs/</guid><description>&lt;p&gt;AWSを触り始めて一年くらい経過するのだが、実はいまだにSQSをまともに触っていない。ずっとやらないとまずいなぁとは思いつつ、目の前のタスクに忙殺されていた感じなのだが、Kindle Unlimitedで薄い入門書があったので、とっかかりによいと思って触ってみた。&lt;/p&gt;&#10;&lt;h2 id="kindle-unlimited散策"&gt;Kindle Unlimited散策&#10;&lt;/h2&gt;&lt;p&gt;自分はAmazonのKindle Unlimitedに入っていて、正直あまり有効活用しているとは言い難い。時々本も読んでいるし、ということで脱会もしていないのだけれど、月額1,000円の価値が自分にとって本当にあるのだろうか、という疑問がいつもある。というより、ちゃんと使えば価格分以上の価値があることはわかっているのだけれど、それを有効に使えていない自分に嫌気がさす、というほうが正確だろうと思う。&lt;/p&gt;&#10;&lt;p&gt;実際、ラインナップを見ていると手にとって読んでみようかと思う本がけっこうあるので、時間を見つけて読めば、自分にとって価値あるサービスになることは間違いないはず。&lt;/p&gt;&#10;&lt;p&gt;だから、今回なにか1冊は読もう……と決めていたわけではないけれど、なにかしら本を読もうというつもりで、ラインナップを眺めていた。で、目についたのはSQS入門という本だった。&lt;/p&gt;&#10;&lt;h2 id="sqsの本"&gt;SQSの本&#10;&lt;/h2&gt;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01CXML89E&amp;linkId=b328d3fe6410163ca37bfe98736c59cd"&gt;&lt;/iframe&gt;「Amazon SQS入門: AWS CLI入門シリーズ コマンドラインハンズオンで学習するAWS」というタイトルで、価格から察せられるとおり盛りだくさんの内容というわけではない。というか、紙であれば本として出せなかっただろうけれど、電子書籍という形態ならば、ページ数が少なくともその分価格を下げればよいわけで、これはこれで今風だと思う。&#10;&lt;p&gt;それでさらっと読んでみたのだけれど、まぁたしかにごくごく初歩的な内容ではあったのだけれど、それだけに最初の一歩としてはやりやすかった。とりあえず、コマンドラインで簡単なキューの作成・削除はできる。&lt;/p&gt;&#10;&lt;p&gt;まぁSQSはそれ単体で使うことはまずなくて、他のサービスといかに連携させるかというところだから、実際にはこれだけで何ができるというわけではない。けれど、使い方を考えるくらいはできるかなと思う。あと、SQSといえばSNSとの違いが初心者にはわかりづらいのだけれど、SQSはプル型、SNSはプッシュ型、という説明が一言でわかりやすかった。なるほど。&lt;/p&gt;&#10;&lt;p&gt;同著者はSNSの本も出しているようなので、そちらも読んでみようと思う。そうしたら、紹介されていたスライド「&lt;a class="link" href="https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-sqs-amazon-sns" target="_blank" rel="noopener"&#10; &gt;AWS Black Belt Tech シリーズ 2016 - Amazon SQS / Amazon SNS&lt;/a&gt;」を読んでみよう。&lt;/p&gt;</description></item><item><title>Macで最初に設定していること(macOS 10.14 mojave)</title><link>https://hack-le.com/mac-init-mojave/</link><pubDate>Sun, 13 Jan 2019 17:18:39 +0900</pubDate><guid>https://hack-le.com/mac-init-mojave/</guid><description>&lt;p&gt;改訂した&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-sonoma-14-6-1/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Macで最初に設定していること macOS 14 Sonoma版&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-sonoma-14-6-1/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_15938_1787181621.webp" alt="Macで最初に設定していること macOS 14 Sonoma版" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;以下は古いけど思い出枠的に残す。&lt;/p&gt;&#10;&lt;p&gt;Macの購入時やクリーンインストール時など、まっさらな状態から設定している自分用の備忘録。この手の記事は残しておくと、忘れた頃に役に立つ。「&lt;a class="link" href="https://hack-le.com/sierrainit/" &gt;macOS Sierraをクリーンインストール後にやったこと&lt;/a&gt;」から少し改定した。まぁ基本的にはあまり変わらない。&lt;/p&gt;&#10;&lt;h2 id="環境設定"&gt;環境設定&#10;&lt;/h2&gt;&lt;p&gt;システム環境設定とかいじらないといけないやつ。スマート引用符とか地味に忘れていた。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;キーボードでキーリピート速める&lt;/li&gt;&#10;&lt;li&gt;キーボードでスマート引用符とスマートダッシュを使わないようにする&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.piyo.tech/posts/2014-01-06-205101/" target="_blank" rel="noopener"&#10; &gt;Macで引用符を入力すると勝手に変換されるのをやめたい - ぴよログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;トラックパッドでタップでクリック、ポインタ速度速める&lt;/li&gt;&#10;&lt;li&gt;アクセシビリティからトラックパッドの3本指ドラッグ解禁&#10;&lt;ul&gt;&#10;&lt;li&gt;何故これがデフォルトじゃないんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイアウォールを「入」にする&#10;&lt;ul&gt;&#10;&lt;li&gt;インストール時にホームディレクトリの暗号化まで推奨してきたのに、何故FWがデフォルトで「切」なんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="アプリケーションからのインストール"&gt;アプリケーションからのインストール&#10;&lt;/h2&gt;&lt;h3 id="app-storeから"&gt;App Storeから&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Xcode&lt;/li&gt;&#10;&lt;li&gt;Sourcetree&lt;/li&gt;&#10;&lt;li&gt;ForkLift&#10;&lt;ul&gt;&#10;&lt;li&gt;2画面ファイラ。Terminalで開くショートカットがとても便利&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;CotEditor&lt;/li&gt;&#10;&lt;li&gt;Go2Shell&#10;&lt;ul&gt;&#10;&lt;li&gt;FinderにカレントディレクトリをTerminalで開くアイコンを追加できる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;LanScan LAN内のデバイスをスキャンできるGUIソフト。地味に便利&lt;/li&gt;&#10;&lt;li&gt;Pixelmator&lt;/li&gt;&#10;&lt;li&gt;Simplenote&lt;/li&gt;&#10;&lt;li&gt;Readkit&#10;&lt;ul&gt;&#10;&lt;li&gt;RSSリーダーとして。色々不具合あるけど使っている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Stuffit Expander&lt;/li&gt;&#10;&lt;li&gt;PopClip いつのまに1,200円&lt;/li&gt;&#10;&lt;li&gt;Capo&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="webから"&gt;Webから&#10;&lt;/h3&gt;&lt;p&gt;ブラウザ立ち上げて落としてくる子たち。一時期はbrew caskとか使っていが、これはこれでメンテナンスがたいへんで、使わなくなった。App Storeにあるものもあるけれど、App Storeの制限の問題なのか、本家版より低機能だったり不安定だったりすることがあるので、Webからインストールパッケージを落とすことが多い。&lt;/p&gt;&#10;&lt;p&gt;毎回Xquartzを落としていたけれど、さすがにもうMacでX11は大丈夫かなって。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;オンラインストレージ&#10;&lt;ul&gt;&#10;&lt;li&gt;Dropbox&#10;&lt;ul&gt;&#10;&lt;li&gt;Google ドライブ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;文字入力&#10;&lt;ul&gt;&#10;&lt;li&gt;Google 日本語入力&lt;/li&gt;&#10;&lt;li&gt;Karabiner-Elements&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;情報収集&#10;&lt;ul&gt;&#10;&lt;li&gt;Google Chrome&#10;&lt;ul&gt;&#10;&lt;li&gt;久しぶりに入れるとけっこうな拡張機能が死亡している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Evernote&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;開発&#10;&lt;ul&gt;&#10;&lt;li&gt;Atom&lt;/li&gt;&#10;&lt;li&gt;Visual Studio Code&lt;/li&gt;&#10;&lt;li&gt;Coda 2&lt;/li&gt;&#10;&lt;li&gt;KiCAD&lt;/li&gt;&#10;&lt;li&gt;SourceTree&lt;/li&gt;&#10;&lt;li&gt;Sequel Pro&#10;&lt;ul&gt;&#10;&lt;li&gt;mojaveにしてからしょっちゅうクラッシュする…&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Station&#10;&lt;ul&gt;&#10;&lt;li&gt;SlackとかWebアプリをまとめて管理できて有り難い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;電子書籍&#10;&lt;ul&gt;&#10;&lt;li&gt;Calibre&lt;/li&gt;&#10;&lt;li&gt;Simple Comic&#10;&lt;ul&gt;&#10;&lt;li&gt;2010年で更新止まってるけどMac用の漫画ビューアっていまだにこれが一番なんじゃなかろうか…&lt;/li&gt;&#10;&lt;li&gt;検索すると変なサイト出るけど本家は「&lt;a class="link" href="http://dancingtortoise.com/simplecomic/" target="_blank" rel="noopener"&#10; &gt;Dancing Tortoise | Simple Comic&lt;/a&gt;」GitHubにソースもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メディア&#10;&lt;ul&gt;&#10;&lt;li&gt;Vox for mac&#10;&lt;ul&gt;&#10;&lt;li&gt;mp3再生にいちいちiTunesは重すぎ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Skitch&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;リモート&#10;&lt;ul&gt;&#10;&lt;li&gt;TeamViewer&lt;/li&gt;&#10;&lt;li&gt;Splash Streamer&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;セキュリティ&#10;&lt;ul&gt;&#10;&lt;li&gt;Avast&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ツール&#10;&lt;ul&gt;&#10;&lt;li&gt;BetterTouchTool&lt;/li&gt;&#10;&lt;li&gt;Clipy&lt;/li&gt;&#10;&lt;li&gt;Menumeters&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="homebrewから"&gt;Homebrewから&#10;&lt;/h3&gt;&lt;p&gt;Linuxにも対応するそうですね。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;開発&#10;&lt;ul&gt;&#10;&lt;li&gt;shellcheck&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;li&gt;fish&lt;/li&gt;&#10;&lt;li&gt;git&lt;/li&gt;&#10;&lt;li&gt;awscli&lt;/li&gt;&#10;&lt;li&gt;npm&lt;/li&gt;&#10;&lt;li&gt;rbenv&lt;/li&gt;&#10;&lt;li&gt;octave&lt;/li&gt;&#10;&lt;li&gt;gnuplot&lt;/li&gt;&#10;&lt;li&gt;pandoc&lt;/li&gt;&#10;&lt;li&gt;mysql&lt;/li&gt;&#10;&lt;li&gt;paramiko&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メディア&#10;&lt;ul&gt;&#10;&lt;li&gt;imagemagick&#10;&lt;ul&gt;&#10;&lt;li&gt;rmagickのために@6から入れる「&lt;a class="link" href="https://hack-le.com/brewrmagick/" &gt;MacのHomebrewでimagemagickを入れているとgem install rmagickが失敗するようになったメモ – 或る阿呆の記&lt;/a&gt;」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;poppler&lt;/li&gt;&#10;&lt;li&gt;ffmpeg&lt;/li&gt;&#10;&lt;li&gt;youtube-dl&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;wget&lt;/li&gt;&#10;&lt;li&gt;cliclick&lt;/li&gt;&#10;&lt;li&gt;jq&lt;/li&gt;&#10;&lt;li&gt;zip&lt;/li&gt;&#10;&lt;li&gt;&lt;/li&gt;&#10;&lt;li&gt;peco&lt;/li&gt;&#10;&lt;li&gt;tree&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="python"&gt;python&#10;&lt;/h3&gt;&lt;p&gt;「&lt;a class="link" href="https://hack-le.com/pip/" &gt;pythonのpipで入れているもの – 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="細かな設定"&gt;細かな設定&#10;&lt;/h2&gt;&lt;p&gt;面倒くさい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;NASの設定（「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;li&gt;sshの設定&lt;/li&gt;&#10;&lt;li&gt;.bash_profile&#10;&lt;ul&gt;&#10;&lt;li&gt;パスの設定、履歴数など&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;.bash_aliases&lt;/li&gt;&#10;&lt;li&gt;ターミナルの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;monaco 12pt.&lt;/li&gt;&#10;&lt;li&gt;背景黒&lt;/li&gt;&#10;&lt;li&gt;Optionをメタキー&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;自分用binディレクトリのソフトリンクとパス設定&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ターミナルの設定とかメモっておいてよかった。&lt;/p&gt;</description></item><item><title>Mac mini 2018を購入したが、メモリを増設するか悩ましい</title><link>https://hack-le.com/mac-mini-2018-memory/</link><pubDate>Sat, 12 Jan 2019 16:38:18 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-memory/</guid><description>&lt;p&gt;実は昨年12月、Mac mini 2018を購入していた。日本を席巻したPayPay祭りに私も乗じて、ここぞとばかりに値下げされないApple製品であるMac mini 2018の購入に走ったのである。で、昨年末頃に届き、いじったのは年初からであるが、まぁ愉快に使っている。で、具合のよいことに年末くらいからメモリの価格も下落傾向にあるので、これはもうメモリ増設せよというお達しかとも思うのだが、しかし現時点でなんの不満もないので、色々と悩ましいなぁという幸福な悩みを抱えている。&lt;/p&gt;&#10;&lt;h2 id="paypay祭りに乗じ満を持してmac-mini-2018の購入"&gt;PayPay祭りに乗じ、満を持してMac mini 2018の購入&#10;&lt;/h2&gt;&lt;p&gt;Mac mini 2018を購入した。これまで使っていたのはMac mini 2012のいわゆる竹モデル（Core i7 4コア）をベースに、メモリを16GB、ストレージを480GB(SATA)と1TB HDでFusion Driveを組んだもの。まさか6年も使うことになるとは思わなかったが、十分に使える代物だったから、まぁ買い換えなくてもよかった……のだが、まぁやはり今回のMac miniのアップデートは良いものだったから、購入したいとは思っていた。&lt;/p&gt;&#10;&lt;p&gt;ただ、気持ちとしてはもう少し値段が熟れてから（店頭モデルであれば、怪しげな通販サイトではあるものの15-20%くらいの値下げは期待できる…実際2012モデルもそうしてお安く手に入れた）…と思っていたのだけれど、そんな折にやってきたのがPayPayの100億円あげちゃうキャンペーンである。&lt;/p&gt;&#10;&lt;p&gt;このいささか品のない名前のキャンペーンは、PayPayで決済すれば20%ポイント還元するという驚異的なもので、非常にインパクトが強い。さらに決済ができる店にビックカメラやヤマダ電機といった、いわゆる家電量販店が入っていたものだから、これには私も驚いた。つまりApple製品を20%還元できる、またとない機会が訪れたというわけだ。ビックカメラではCTOも受け付けているから、カスタマイズした発売から間もないMacを、実質的に20%オフで購入できる。これはすごい。&lt;/p&gt;&#10;&lt;p&gt;もともとキャッシュレス志向で、現金を持ち歩かないことも多い私なので、コード決済にも抵抗がなく、一も二もなく飛びついた。Yahoo会員でYahooのクレジットカードも作っていたから、カードの登録もすんなりできた。&lt;/p&gt;&#10;&lt;p&gt;で、キャンペーンが始まった最初の週末、いそいそと普段はいかないビックカメラに赴き、満を持してMac mini 2018の上位モデルを、せっかくだからストレージ容量を512GBにして、購入したのである。&lt;/p&gt;&#10;&lt;p&gt;16万近い買い物となってしまったが、まぁまたどうせこれから数年以上は使うことになるだろうし、自分にとっては商売道具でもあるものなので、惜しくはない。それに二割も戻ってくるし……とPayPayのアプリの画面を見て、ぎょっとする。なんと&lt;strong&gt;還元額が100,000円&lt;/strong&gt;となっているではないか！&lt;/p&gt;&#10;&lt;p&gt;PayPayのキャンペーンは、40人に1人、条件を満たせば20人、10人に1人の確率で、上限を10万とした全額キャッシュバックというものがあった。Twitterなどでは続々と全額キャッシュバックにあたったという報告がなされ（世の中には当たるまで返品と購入を繰り返す猛者もいたそうである…）、その射幸心を煽りまくっている様子から&lt;strong&gt;PayPayガチャ&lt;/strong&gt;などと揶揄されていたので、私も存在は知っていた。知っていたが、まさか自分が当たるとは……。思わず、店の中で変な声をあげてしまった。&lt;/p&gt;&#10;&lt;p&gt;きっと自分は帰り道、車に轢かれて死ぬのだろうと思いながら帰途についたのだが、まぁ何事もなく家に到着。実際にものが届いたのは、その三週間後であったが、一ヶ月以上かかるかもしれないな、と思っていたくらいなので、むしろ早かった。&lt;/p&gt;&#10;&lt;h2 id="快適である"&gt;快適である&#10;&lt;/h2&gt;&lt;p&gt;年末年始は実家に帰っていたから、実際に触り始めてからまだ一週間ばかりといったところだ。自分は新型MacにTimeMachineで移行といったことはせず、まっさらな状態から使い始めるタチなので、色々な初期設定が面倒くさく、というか実はまだ済んでいないところもあるのだが、とりあえず一通りは使えるくらいには整えた。&lt;/p&gt;&#10;&lt;p&gt;とはいえ平日は仕事、しかもここ最近は非常に忙しく、また精神的にもつらくなる状況が続いているため（ちょっとほんとに転職も考えつつ）、まだそんなにいじっているわけではないものの、快適さは先代よりも確実に上がっている。&lt;/p&gt;&#10;&lt;p&gt;プログラムの処理速度は上がっているのはもちろん、ブラウザゲームなどやってみても、以前は少し動作がカクついていたところもスムーズに動いている。まぁちょっと負荷をかけると相変わらずすぐに熱をもつのだけれど、2012よりも比較的静かに思える。&lt;/p&gt;&#10;&lt;p&gt;昔ほどPCも進化しなくなったとはいえ、やはり6年の歳月は大きい。もっとも、お値段もそれなりに上昇しているのだけれど。というより、2012が安すぎたのかもしれない。2012の発売当時は円高だったことも手伝って、本当に安かった。まぁ、PC自体がもはや斜陽産業である面は否めないし、ある程度高くして利益を取らないとやっていけないのだろうなぁ。iPhoneというドル箱アイドルもいるんだし、こっちはちょっとサービスしてくれないか、というわけにもいくまいし。&lt;/p&gt;&#10;&lt;h2 id="メモリを増設するか否か"&gt;メモリを増設するか否か&#10;&lt;/h2&gt;&lt;p&gt;なんにせよ、また長く使えそうなマシンを手に入れられて実によかった。で、今悩んでいるのは、メモリを増設するか否か、である。&lt;/p&gt;&#10;&lt;p&gt;今回の購入で私がカスタマイズしたのはストレージ部分だけだ。せっかくCTOを割安で変えるのだから、とはいえメモリの換装は自分でやったほうが安上がりである。それに引き換え、ストレージは自分で換装できないし、256GBではメインのデスクトップマシンとしては心もとなさげ、またストレージ容量が上がれば速度の向上も見込める…ということで、ストレージの方を変更した。CPUもちらっと考えたが、ただでさえ爆熱のMac miniであるし、6コア Core i5で十分じゃないか、と。&lt;/p&gt;&#10;&lt;p&gt;で、届いてからのんびりと時期を見極めてメモリを入れたらいいかな、と思っていたら、年末頃にはメモリの価格が下落、というニュースも入ってきて、これはもうメモリを増設せよというお達しに違いない。&lt;/p&gt;&#10;&lt;p&gt;……なのであるけれど、実際にそんなにメモリが必要な作業をこのPCでするかといえば、まぁあまりしないであろう。そして今の使用感だと、標準の8GBでも十分快適に動いている。メモリの換装はできるとはいえ、ロジックボードを引っ張り出してやる必要があって煩わしいし、また相性問題も気になるし、まぁ安くなったとはいえ金のかかることには違いないし……。&lt;/p&gt;&#10;&lt;p&gt;などと考えると、ちょっと面倒になってきた今日このごろ、メモリの換装するかどうか、どうしようかなぁなどと幸福な悩みを抱えているのであるけれど、まぁ多分そのうちやってしまうのだろうなぁと思う。&lt;/p&gt;</description></item><item><title>AWS CLIでよく使っているコマンド</title><link>https://hack-le.com/aws-cli/</link><pubDate>Sat, 12 Jan 2019 14:53:31 +0900</pubDate><guid>https://hack-le.com/aws-cli/</guid><description>&lt;p&gt;AWS CLIでよく使っているコマンドの覚書。よく使っているのに忘れるのかと言われるとつらい。いつも履歴から使っているから、たまに新しい環境にいくとわからなくなってつらい。&lt;/p&gt;&#10;&lt;h2 id="使用するprofile"&gt;使用するprofile&#10;&lt;/h2&gt;&lt;pre&gt;`# profileの作成&#13; aws configure --profile {new-profile}&#13; &#13; # 確認&#13; aws configure list&#13; # 実際に使う時は--profileを使う&#13; aws s3 ls --profile {new-profile}`&lt;/pre&gt;&#13;&#10;&lt;h2 id="iam"&gt;IAM&#10;&lt;/h2&gt;&lt;pre&gt;`# ロールの作成&#13; aws iam create-role --role-name {role-name} --assume-role-policy-document file://{policy-file-name}&#13; &#13; # ロールにポリシーを適用&#13; aws iam put-role-policy --role-name {role-name} --policy-name {policy-name} --policy-document file://{policy-file-name}&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="sqs"&gt;SQS&#10;&lt;/h2&gt;&lt;p&gt;SQSのコマンド。&lt;/p&gt;&#10;&lt;pre&gt;`# キューの作成&#13; aws sqs create-queue --queue-name {キューの名前}&#13; &#13; # キューの削除&#13; aws sqs delete-queue --queue-url {キューのURL}&#13; &#13; # 確認&#13; aws sqs list-queues&#13; aws sqs get-queue-url {キューの名前}&#13; aws sqs get-queue-url {キューの名前} --output text&#13; aws sqs get-gueue-attributes --queue-url {キューのURL} --attribute-names ApproximateNumberOfMessages&#13; &#13; # 属性の確認&#13; # --attribute-namesで指定したものが表示される&#13; aws sqs get-queue-attributes --queue-url {キューのURL} --attribute-names CreatedTimestamp QueueArn&#13; &#13; # 属性の操作&#13; aws sqs set-queue-attributes --queue-url {キューのURL} --attributes VisibilityTimeout=5&#13; &#13; # メッセージの送信&#13; aws sqs send-message --queue-url {キューのURL} --message-body "hello, world"&#13; &#13; # メッセージの受信&#13; aws sqs receive-message --queue-url {キューのURL}&#13; # ReceiptHandleの取得&#13; aws sqs recieve-message --queue-url {キューのURL} | jq -r '.Messages[].ReceiptHandle'&#13; &#13; # メッセージの削除&#13; aws sqs delete-message --queue-url {キューのURL} --receipt-handle {ReceiptHandle}&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="sns"&gt;SNS&#10;&lt;/h2&gt;&lt;p&gt;SNSのコマンド。&lt;/p&gt;&#10;&lt;pre&gt;`# トピックの作成&#13; aws sns create-topic --name {トピックの名前}&#13; &#13; # トピックの一覧&#13; aws sns list-topics&#13; # トピックの削除&#13; aws sns delete-topic --topic-arn {トピックのARN}&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="s3"&gt;S3&#10;&lt;/h2&gt;&lt;p&gt;s3でよく使うコマンド。&lt;/p&gt;&#10;&lt;pre&gt;`# バケットの作成と削除, regionは指定しなくても&#13; aws s3 mb s3://{make-bucket} --region ap-northeast-1&#13; aws s3 rb s3://{delete-bucket}&#13; aws s3 sync {local_dir}/ s3://{target-bucket}/&#13; &#13; # ファイルの削除&#13; aws s3 rm s3://{bucket-name}/{file-name}&#13; # ホスティング&#13; aws s3 website s3://{site-hosting}/ --index-document index.html&#13; &#13; # バケットポリシーの適用&#13; aws s3api put-bucket-policy --bucket {site-hosting} --policy file://{policy.json}&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;バケットポリシーの例は「&lt;a class="link" href="https://hack-le.com/s3-everyone-read/" &gt;S3で特定のバケットを誰でも読み取りできるようにするバケットポリシー&lt;/a&gt;」。&lt;/p&gt;&#10;&lt;h2 id="dynamodb"&gt;DynamoDB&#10;&lt;/h2&gt;&lt;pre&gt;`# テーブルの作成&#13; aws dynamodb create-table --table-name {table-name} --attribute-definitions AttributeName={partition-keyの名前},AttributeType={SとかN} --key-schema AttributeName={partition-key},KeyType={HASHとか} --provisioned-throughput ReadCapacityUnits={5とか},WriteCapacityUnits={5とか}&#13; &#13; # jsonの読み込み&#13; aws dynamodb batch-write-item --request-items file://{file-name}&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;jsonの形式は「&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SampleData.LoadData.html" target="_blank" rel="noopener"&#10; &gt;ステップ 2: データをテーブルにロードする - Amazon DynamoDB&lt;/a&gt;」&lt;/p&gt;&#10;&lt;p&gt;create-tableのオプション。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&amp;ndash;attribute-definitions　属性の定義（文字列とか数値とか）&#10;&lt;ul&gt;&#10;&lt;li&gt;AttributeName　属性名&lt;/li&gt;&#10;&lt;li&gt;AttributeType　属性のタイプ（文字列とか数値とか）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&amp;ndash;key-schema　テーブル設計&#10;&lt;ul&gt;&#10;&lt;li&gt;AttributeName&lt;/li&gt;&#10;&lt;li&gt;KeyType&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&amp;ndash;provisioned-throughput　プロビジョニングされたスループット…あらかじめ割り当てておく処理能力みたいなの&#10;&lt;ul&gt;&#10;&lt;li&gt;ReadCapacityUnits&lt;/li&gt;&#10;&lt;li&gt;WriteCapacityUnits&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="api-gateway"&gt;API Gateway&#10;&lt;/h2&gt;&lt;pre&gt;`# 作成したAPIの一覧を取得&#13; aws apigateway get-rest-apis --region ap-northeast-1&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="cloudformatiion"&gt;CloudFormatiion&#10;&lt;/h2&gt;&lt;p&gt;AWS CloudFormationでLambda関数のデプロイするための拡張。&lt;/p&gt;&#10;&lt;pre&gt;`# パッケージングしてS3にアップロード&#13; aws cloudformation package --template-file {template-file} --output-template-file {output-template-file} --s3-bucket {s3-bucket}&#13; &#13; # デプロイ&#13; # template-fileはpackageの出力を使う&#13; aws cloudformation deploy --template-file {template-file} --stack-name {stack-name} --region ap-northeast-1&#13; &#13; # --capability CAPABILITY_IAM をつける必要があることもある&#13; &#13; # スタックを削除&#13; aws cloudformation delete-stack --stack-name スタック名`&lt;/pre&gt;</description></item><item><title>JavaScriptのrepeat()のポリフィルを読む</title><link>https://hack-le.com/js-repeat/</link><pubDate>Thu, 10 Jan 2019 19:35:42 +0900</pubDate><guid>https://hack-le.com/js-repeat/</guid><description>&lt;p&gt;とてもつらいことに、開発中のサービスでIE11対応のお達しが出た。それまでまぁ対応しているようないないような、まぁしてないんだけどと曖昧な態度でのらりくらりとかわしてきたのだけれど、そうもいかなくなり。&lt;/p&gt;&#10;&lt;p&gt;ということで、ECMAScript 6で追加された仕様であるStringのrepeat()が使えなくなり、ポリフィルで対応することになった。読んでみると、色々と勉強になったのでメモ。&lt;/p&gt;&#10;&lt;h2 id="ポリフィル"&gt;ポリフィル&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/repeat" target="_blank" rel="noopener"&#10; &gt;String.prototype.repeat() | MDN&lt;/a&gt;」にString.prototype.repeat()のポリフィルがある。以下のようなコードだ。&lt;/p&gt;&#10;&lt;pre&gt;`if (!String.prototype.repeat) { String.prototype.repeat = function(count) { 'use strict'; if (this == null) { throw new TypeError('can\'t convert ' + this + ' to object'); } var str = '' + this; count = +count; if (count != count) { count = 0; } if (count &lt; 0) { throw new RangeError('repeat count must be non-negative'); } if (count == Infinity) { throw new RangeError('repeat count must be less than infinity'); } count = Math.floor(count); if (str.length == 0 || count == 0) { return ''; } // Ensuring count is a 31-bit integer allows us to heavily optimize the // main part. But anyway, most current (August 2014) browsers can't handle // strings 1 &lt;&lt; 28 chars or longer, so: if (str.length * count &gt;= 1 &lt;&lt; 28) { throw new RangeError('repeat count must not overflow maximum string size'); } var rpt = ''; for (;;) { if ((count &amp; 1) == 1) { rpt += str; } count &gt;&gt;&gt;= 1; if (count == 0) { break; } str += str; } // Could we try: // return Array(count + 1).join(this); return rpt; } } `&lt;/pre&gt;&#10;&lt;p&gt;一つずつ追っていく。&lt;/p&gt;&#10;&lt;pre&gt;` count = +count;`&lt;/pre&gt;&#10;&lt;p&gt;算術演算子の単項プラス。countが数値じゃない時に、数値に変換する。「&lt;a class="link" href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus" target="_blank" rel="noopener"&#10; &gt;算術演算子 | MDN&lt;/a&gt;」に詳細。nullも0になるのか…。functionをつっこむとNaNになる。&lt;/p&gt;&#10;&lt;pre&gt;` if (count != count) { count = 0; } `&lt;/pre&gt;&#10;&lt;p&gt;countがNaNの時には0にする。NaNを比較すると偽を返す、というのはIEEE 754での決めごとらしい（参考サイト「&lt;a class="link" href="https://yosuke-furukawa.hatenablog.com/entry/2018/01/30/174425" target="_blank" rel="noopener"&#10; &gt;NaN === NaN が false な理由とutil.isDeepStrictEqual - from scratch&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;pre&gt;` // Ensuring count is a 31-bit integer allows us to heavily optimize the // main part. But anyway, most current (August 2014) browsers can't handle // strings 1 &lt;&lt; 28 chars or longer, so: if (str.length * count &gt;= 1 &lt;&lt; 28) { throw new RangeError('repeat count must not overflow maximum string size'); } `&lt;/pre&gt;&#10;&lt;p&gt;JavaScriptの数値は基本的に符号付きなので、31bit。符号なし右ビットシフト&amp;gt;&amp;gt;&amp;gt;を使うと（num &amp;gt;&amp;gt;&amp;gt; 0みたいに）unsignedになるみたいだが、その他のビット演算をすると何かとややこしいことになるらしい（参考「&lt;a class="link" href="http://imaya.blog.jp/archives/5156823.html" target="_blank" rel="noopener"&#10; &gt;JavaScript のビット演算子に unsigned を期待してはいけない : document&lt;/a&gt;」）。で、2014年8月の時点で、たいていのブラウザは28ビット分の整数値を超える文字数の文字列を扱えないので、文字数*リピート回数の文字数がそれを超える時は、オーバーフローとしている。&lt;/p&gt;&#10;&lt;pre&gt;` var rpt = ''; for (;;) { if ((count &amp; 1) == 1) { rpt += str; } count &gt;&gt;&gt;= 1; if (count == 0) { break; } str += str; } `&lt;/pre&gt;&#10;&lt;p&gt;repeat()の肝となるところ。rptが返り値となる。strはリピートしたい文字列。&lt;/p&gt;&#10;&lt;p&gt;たとえばcount=1のとき、最初の(count &amp;amp; 1) == 1はtrueなのでrptにはstrがそのまま入る。で、符号なし右ビットシフトしてcount=0になり、break。&lt;/p&gt;&#10;&lt;p&gt;count=2、つまりcount=10(2)のとき、最初の(count &amp;amp; 1) == 1はfalseなのでrptそのまま。で、右ビットシフトでcountは10(2) -&amp;gt; 1(2) となる。で、strの文字列は二倍の長さになる。次のループのとき、countは1(2)。なので、最初の(count &amp;amp; 1) == 1はtrue。よって、rptには前のループで2倍の長さになったstrが入る。その後の右ビットシフトで、countは0になってbreak。&lt;/p&gt;&#10;&lt;p&gt;つまり、ループを回すたびにstrが倍々になっていく。で、倍々になったstrを、countを2進数表記して1が立つ時に文字列を加えていく……とまぁ変な日本語だが、なるほどなぁと思った。&lt;/p&gt;&#10;&lt;p&gt;これだと、たとえば10万回のリピートであっても、10万は17ビットで表現できるから、たった17回のループでできるわけだ。頭がよいなぁ。&lt;/p&gt;</description></item><item><title>Windowsタブレットがお亡くなりになった…次買うならChromebookか</title><link>https://hack-le.com/wintab-onakunari/</link><pubDate>Wed, 12 Dec 2018 06:23:15 +0900</pubDate><guid>https://hack-le.com/wintab-onakunari/</guid><description>&lt;p&gt;時々使っていたHPのWindowsタブレットが、うんともすんとも言わない。どうやら、引越しのドタバタで故障してしまったらしい。特にカバーをかけることもなく、ダンボールに突っ込んでいたし、色々な衝撃があったのだろうか。壊れてもいいやとは思っていたものの、いざ本当に壊れるとうーん。&lt;/p&gt;&#10;&lt;p&gt;あまり有効に活用できていなかったし、Windowsマシンは別にあるので、またWinタブを買おうとは思わないのだが、しかしフルブラウザの使えるタブレットマシンも1台くらいはほしいなぁと思うと、やはりChromebookになるのだろうか。&lt;/p&gt;&#10;&lt;h2 id="さようならwindowsタブレット"&gt;さようならWindowsタブレット&#10;&lt;/h2&gt;&lt;p&gt;動作しなくなったのは、HPのElite x2 1011 G1というやつで、私の購入したWindowsタブレットとして2台目にあたる。最初の1台目は初代Surface Proで、これはもう碌な思い出がないままに充電できない粗大ごみと化してしまったので、いまだにSurfaceブランドは何を言われても買おうと思えない。それが私のWinタブ原体験であったためか、購入当時の記事を見るとだいぶ甘く採点していたようだ（記事「&lt;a class="link" href="https://hack-le.com/47495069-2/" &gt;Core MなWindowsタブレットの実力…HP Elite x2 1011 G1購入記 – 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;まぁ実際、悪いものではなかったと思うのだけれど、結局このマシンもあまり有効に使うことなく動かなくなってしまった。あまり使わなかったのは、単純に動作がモッサリしていたからだ。先の記事を見ると&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Webブラウジングやちょっとしたゲームなど、Windowsタブレットで行うような作業はストレスなくできます。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;なんて書いていたが、ここ最近はストレスありありだった。これは使っているうちにおもくなったということなのか（Windowsにはよくあること）、それとも私の要求基準が厳しくなったからなのか。まぁWindowsとはいえタブレットの枠組みだと、どうしてもiPadという怪物と比較してしまうしな…値段だけならiPadより高いわけだし。&lt;/p&gt;&#10;&lt;p&gt;そんな感じだったので、正直いつ壊れてもいいかなと思っていた。なので、引っ越しの際にプチプチさえ巻かない適当な梱包（というかほぼ裸）をしていたのだが、結局それで致命的な損傷を受けたのかどうかわからないが、久方ぶりに引越し先で動かそうとしたところ、うんともすんとも言わなくなってしまった。1年半の短い命だった。もっと大事に使ってあげればよかったな…。&lt;/p&gt;&#10;&lt;h2 id="次買うならchromebookかな"&gt;次買うならChromebookかな&#10;&lt;/h2&gt;&lt;p&gt;持っていたWindowsタブレットが壊れたということで、別のWindowsタブレットを買うかというと、微妙なところ、というか買わないだろう。Windowsマシンは春に良いもの（デスクトップマシンだが）を買ったので、別にWindows自体はもういらないし、さりとてタブレットとしてのWindowsマシンはまぁ微妙だということを身をもって知ってしまったので。&lt;/p&gt;&#10;&lt;p&gt;まぁタブレットはiPad最強で揺るがないとしても、フルブラウザが使える大型のタブレットが欲しいなぁという気持ちはある。しかし、それだけであれば、WindowsタブレットよりもChromebookで使えるものを探すほうがよい。最近のものであれば、Androidアプリもある程度使えるようであるし。&lt;/p&gt;&#10;&lt;p&gt;ということで、Pixelbook2の発売を心待ちにしていたのだが、残念ながらGoogle I/Oで発表されなかったので、まぁ当分ないのであろう。その代わり気になっているのはPixel Slateで、むしろこちらのほうがPixelbookよりも自分の用途に合うのだろうか。日本で発売されるのはいつになることやら…。&lt;/p&gt;</description></item><item><title>Windows 10をインストールした後に導入しているもの</title><link>https://hack-le.com/windows10-install-app/</link><pubDate>Sat, 08 Dec 2018 22:40:46 +0900</pubDate><guid>https://hack-le.com/windows10-install-app/</guid><description>&lt;p&gt;Windows 10をインストールした後、個人的に導入しているアプリのメモ書き。ハードウェア固有のものもある。あまり余計なものは入れないようにしているつもり。&lt;/p&gt;&#10;&lt;p&gt;WSLのおかげでWindowsでも色々なことができるようになった。有り難い。&lt;/p&gt;&#10;&lt;h2 id="アプリケーション"&gt;アプリケーション&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;ブラウザ&#10;&lt;ul&gt;&#10;&lt;li&gt;Google Chrome&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メーラー&#10;&lt;ul&gt;&#10;&lt;li&gt;Thunderbird&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;マウス用&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.microsoft.com/accessories/ja-jp/d/sculpt-comfort-mouse" target="_blank" rel="noopener"&#10; &gt;Sculpt Comfort Mouse (スカルプト コンフォート マウス) | デバイスのダウンロード | Microsoft Accessories&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;日本語入力&#10;&lt;ul&gt;&#10;&lt;li&gt;Google 日本語入力&lt;/li&gt;&#10;&lt;li&gt;keyhac&#10;&lt;ul&gt;&#10;&lt;li&gt;すべてはEmacsキーバインドのために（「&lt;a class="link" href="https://hack-le.com/win-emacs-kana/" &gt;Windows 10 + US配列のMac系キーボードで英かな変換とEmacsキーバインド – 或る阿呆の記&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ChangeKey&#10;&lt;ul&gt;&#10;&lt;li&gt;CtrlとCaps Lockのスワップとか色々&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ゲーム&#10;&lt;ul&gt;&#10;&lt;li&gt;Steam&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;リモートコントロール&#10;&lt;ul&gt;&#10;&lt;li&gt;TeamViewer&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;圧縮・展開&#10;&lt;ul&gt;&#10;&lt;li&gt;7-zip&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;テキストエディタ&#10;&lt;ul&gt;&#10;&lt;li&gt;サクラエディタ&lt;/li&gt;&#10;&lt;li&gt;VisualStudio Code&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;オフィスソフト&#10;&lt;ul&gt;&#10;&lt;li&gt;LibreOffice&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;オンラインストレージ&#10;&lt;ul&gt;&#10;&lt;li&gt;Google Drive&lt;/li&gt;&#10;&lt;li&gt;Dropbox&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;そのほか&#10;&lt;ul&gt;&#10;&lt;li&gt;Calibre&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://silight.hatenablog.jp/entry/2017/07/11/224712" target="_blank" rel="noopener"&#10; &gt;【Windows10対応】マウス連打ソフト「BurstClicker」「BehindClicker」 - しらいとブログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.bandisoft.com/honeyview/" target="_blank" rel="noopener"&#10; &gt;Honeyview(ハニービュー)ダウンロード; 無料の画像ビューア&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="wsl"&gt;WSL&#10;&lt;/h2&gt;&lt;p&gt;ubuntuを導入。gitは最初から入ってるんやね。updateは忘れずにする。&lt;/p&gt;&#10;&lt;h3 id="apt"&gt;apt&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;python3&lt;/li&gt;&#10;&lt;li&gt;python3-venv&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;tig&lt;/li&gt;&#10;&lt;li&gt;gcc&lt;/li&gt;&#10;&lt;li&gt;g++&lt;/li&gt;&#10;&lt;li&gt;make&lt;/li&gt;&#10;&lt;li&gt;ruby&lt;/li&gt;&#10;&lt;li&gt;gnuplot&lt;/li&gt;&#10;&lt;li&gt;octave&lt;/li&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;pandoc&lt;/li&gt;&#10;&lt;li&gt;ffmpeg&lt;/li&gt;&#10;&lt;li&gt;mysql-client, mysql-server&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="pythonで入れたもの"&gt;pythonで入れたもの&#10;&lt;/h3&gt;&lt;p&gt;venvで切りつつ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;pandas&lt;/li&gt;&#10;&lt;li&gt;numpy&lt;/li&gt;&#10;&lt;li&gt;matplotlib&lt;/li&gt;&#10;&lt;li&gt;python_bitbankcc&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/bitbankinc/python-bitbankcc" target="_blank" rel="noopener"&#10; &gt;https://github.com/bitbankinc/python-bitbankcc&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ちょいちょい強制終了する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;mojimoji&lt;/li&gt;&#10;&lt;li&gt;xlrd&lt;/li&gt;&#10;&lt;li&gt;xlsxwriter&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>S3に有効期限のあるURLを作って画像ファイルをPUTする</title><link>https://hack-le.com/s3-signedurl-put/</link><pubDate>Sat, 17 Nov 2018 22:19:46 +0900</pubDate><guid>https://hack-le.com/s3-signedurl-put/</guid><description>&lt;p&gt;別に画像じゃなくてもよいが。普通はアクセスできないS3のバケットに、一時的にPUT可能な署名付きURLを作成する。で、作成したURLにテストとしてcurlコマンドで画像をアップロードする手順のメモ。&lt;/p&gt;&#10;&lt;p&gt;curlのところでいつも忘れる。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;クライアント: Mac, High Sierra&lt;/p&gt;&#10;&lt;h2 id="s3バケットの用意"&gt;S3バケットの用意&#10;&lt;/h2&gt;&lt;p&gt;バケット名はtestdayo-sample-uploadとする。&lt;/p&gt;&#10;&lt;p&gt;で、アクセス権限のCORSの設定を以下のように。&lt;/p&gt;&#10;&lt;pre&gt;`&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13; &lt;CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"&gt;&#13; &lt;CORSRule&gt;&#13; &lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt;&#13; &lt;AllowedMethod&gt;GET&lt;/AllowedMethod&gt;&#13; &lt;AllowedMethod&gt;PUT&lt;/AllowedMethod&gt;&#13; &lt;MaxAgeSeconds&gt;3000&lt;/MaxAgeSeconds&gt;&#13; &lt;AllowedHeader&gt;*&lt;/AllowedHeader&gt;&#13; &lt;/CORSRule&gt;&#13; &lt;/CORSConfiguration&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;外からPUTできるように。&lt;/p&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;p&gt;Lambda関数のコードは以下。&lt;/p&gt;&#10;&lt;pre&gt;`import boto3&#13; import json&#13; &#13; def respond(err, res=None):&#13; return {&#13; 'statusCode': '400' if err else '200',&#13; 'body': err if err else json.dumps(res),&#13; 'headers': {&#13; 'Access-Control-Allow-Origin' : '*',&#13; 'Content-Type': 'application/json',&#13; },&#13; }&#13; &#13; def lambda_handler(event, context):&#13; bucket_name = 'testdayo-sample-upload'&#13; key = 'sample.jpeg'&#13; s3 = boto3.client('s3', region_name = 'ap-northeast-1')&#13; &#13; signed_url = s3.generate_presigned_url(&#13; ClientMethod = 'put_object',&#13; Params = {&#13; 'Bucket': bucket_name,&#13; 'Key': key,&#13; 'ContentType': 'image/jpeg'&#13; },&#13; ExpiresIn = 3600,&#13; HttpMethod = 'PUT',&#13; )&#13; url = f"https://s3-ap-northeast-1.amazonaws.com/{bucket_name}/{key}"&#13; &#13; res = {&#13; "url": url,&#13; "signed_url": signed_url&#13; }&#13; print(res)&#13; return respond(None, res)&#13; &#13; &#13; if __name__ == '__main__':&#13; event = {}&#13; context = {}&#13; lambda_handler(event, context)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;respond()は返り値用。サンプルにあるやつをそのまま。こいつを実行して署名付きURL(signed_url)が返ってくればOK。&lt;/p&gt;&#10;&lt;p&gt;実際にLambda関数として使う時は、S3の任意のバケットにアクセスできるポリシーを適用したロールをかぶせること。&lt;/p&gt;&#10;&lt;h2 id="画像のアップロード"&gt;画像のアップロード&#10;&lt;/h2&gt;&lt;p&gt;test.jpegがあるとして。これを、出力された署名付きURLにcurlでアップロードする。&lt;/p&gt;&#10;&lt;pre&gt;`curl -H "Content-Type: image/jpeg" --upload-file test.jpeg "https://testdayo-sample-upload.s3.amazonaws.com/sample.jpeg?以降もろもろのやつコピペ"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;-Hでs3.generate_presigned_url()で指定したコンテンツタイプと合わせるのいつも忘れる。&lt;/p&gt;</description></item><item><title>Mac mini 2018は購入したい</title><link>https://hack-le.com/mac-mini-2018-2/</link><pubDate>Sun, 04 Nov 2018 18:25:39 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-2/</guid><description>&lt;p&gt;待ちに待たれたMac miniの新型がついに発売された。2014以来だから実に4年ぶりだが、2014の内容がアレだったので、感覚的には6年ぶりのような感じだ。&lt;/p&gt;&#10;&lt;p&gt;事前のリーク内容から、6コアは期待していたものの、メモリ換装の解禁は非常に意外だった。方向性を改めたんだろうか。&lt;/p&gt;&#10;&lt;p&gt;メモリを自分で変えられるなら、店頭モデルもありなので、しばらくは皆のレビューを楽しみながら値下がりを待とうかなと思う。&lt;/p&gt;&#10;&lt;h2 id="ついに発売"&gt;ついに発売&#10;&lt;/h2&gt;&lt;p&gt;各メディアからも発売濃厚の予測記事が上げられて、ああついに来るのだなぁと思いながら10月30日を迎えた。&lt;/p&gt;&#10;&lt;p&gt;新型が出るのが確定的だとすると、次に気になるのはスペックと値段。色々な噂を聞いていると、なにやらプロユースなんて言葉が飛び交っていて、それ自体は良いのだけれど、そうすると当然お値段もプロユースになるのだろうし、どうなることかなぁと思っていた。&lt;/p&gt;&#10;&lt;p&gt;が、蓋を開けて見れば危惧したほど高くもなかったようだ。普段はMac miniなんてかけらも話題にしない各メディアも今回ばかりは速報で大きく取り上げてくれた。&lt;/p&gt;&#10;&lt;p&gt;この速報記事というやつは、メディアの特色が如実に出るようで、中にはタイトルに最大構成のスペックをのせておきながら、記事内では最小構成の値段しかのせないメディアなんかもあり、そういうところはわかりやすく信用できないメディアだなぁなんて思う（Appleから金もらっているわけでもなかろうに）。情報量も公式サイトを見ればわかる程度の技術仕様くらいで、それに対する分析もスライドの中の言葉を切り貼りしたようなものだったりする。記者に関心がないのだろうか。&lt;/p&gt;&#10;&lt;p&gt;その中でよく書いてくれているなぁと思ったのは毎度のことながらEngadgetで（「&lt;a class="link" href="https://japanese.engadget.com/2018/10/30/mac-mini-6-core-icpu-5/" target="_blank" rel="noopener"&#10; &gt;速報：新Mac mini発表。6コアCore iCPUで性能5倍な「最大級更新」 - Engadget 日本版&lt;/a&gt;」）、スペック、値段、メモリの仕様、インタフェース周りなど、知りたいことをコンパクトに一通り知ることができた。速報記事でメモリのスロットについて言及していた数少ないメディア。SSDの仕様や、電源ユニット内蔵について触れているあたり、書いた人もきっとmini使いなのだろう。&lt;/p&gt;&#10;&lt;h2 id="13万で6コア"&gt;13万で6コア&#10;&lt;/h2&gt;&lt;p&gt;13万円ちょっとでCore i5 6コアのマシンが手に入るということがわかった。それも嬉しいことに、メモリの換装ができるらしい。これは非常に意外で、昨今のAppleの方向性から、まったく期待していなかったのだけれど、ひょっとして方針転換があったのだろうか。Mac Proの構成も見直すようであるし。&lt;/p&gt;&#10;&lt;p&gt;プロユースなんていうから身構えたけれど、オプション地獄に飛び込めばバカ高くなるというだけで、性能を考えればこんなところじゃなかろうか。6コアといえば、現行のiMac 2017よりコア数が多いことになるし。後は熱問題さえクリアしていれば、と思うがそれはきっとなかなかだろうなぁ……。&lt;/p&gt;&#10;&lt;p&gt;確かに最低価格はずいぶんと上がってしまったようであるから、安価なモデルを求めていた層にとっては、そこまでのパフォーマンスは求めていないのに、という気持ちもあるだろうが……。&lt;/p&gt;&#10;&lt;p&gt;しかしまぁPC自体が斜陽になりつつある昨今、廉価なモデルは売る側にとってあまり旨味がないのだろうと思う。Appleとしては本当はiMacを買ってほしいのだろうし、それを思えば、10万で4コア、13万ほどで6コアCPUのデスクトップMacを調達できるのは有り難いことじゃなかろうか。&lt;/p&gt;&#10;&lt;p&gt;とは言うものの、ハードはそんなに頑張らなくてもいいから、OSとしてのMacが欲しいんだという局面も、特に仕事や研究で使っている人ならあるだろうし、5,6万程度のエントリーモデルも残しておいてほしかったなぁとは思うけれど。。。&lt;/p&gt;&#10;&lt;h2 id="購入したい"&gt;購入したい&#10;&lt;/h2&gt;&lt;p&gt;さて、自分がメインで使っているのはMac mini 2012だ。これはこれでまだまだ十分使えるものではあるけれど、気持ちとしてはそろそろ買い替えたい。それに、次の新モデルが出る頃には、少なくとも東京オリンピックは終わっているだろうし。時期が中途半端になると、どうせなら次を待とうとか考えはじめちゃうしねぇ…。&lt;/p&gt;&#10;&lt;p&gt;ただ、メモリを換装できるということで、店頭モデルでも良いかなと考えており、そうすると、しばらく待てば値下がりが期待できる。16GBのメモリ2枚分とまではいかずとも（いまだと安いもので35,000円くらいか）1枚分くらいは浮くのではないかなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁ値下がりをのんびりと色々な人のレビューを見ながら待とうと思う。特に音と熱の問題は使ってみないとわからないところだ。音については大丈夫だろうと思うが、熱はどうだろうなぁ。やっぱり今回も爆熱なんだろうか。&lt;/p&gt;&#10;&lt;p&gt;なんにしても、Mac miniのまともな新型が出てくれて、とても嬉しい。&lt;/p&gt;</description></item><item><title>G Suiteでメールエイリアスやグループメールやらで割り当てられた以外のメールアドレスを利用する</title><link>https://hack-le.com/gsuite-mail/</link><pubDate>Wed, 26 Sep 2018 16:13:55 +0900</pubDate><guid>https://hack-le.com/gsuite-mail/</guid><description>&lt;p&gt;G Suiteでは各人にメールアドレスが割り当てられるが、それ以外のアドレスが必要になる時がある。たとえば部署を代表とするメールアドレスが必要であったり、まぁなにかしら別人格としてのメールアドレスが必要であったり。&lt;/p&gt;&#10;&lt;p&gt;その場合、主にメールエイリアスかグループ機能を利用することになる。&lt;/p&gt;&#10;&lt;h2 id="割り当てられたメールアドレス以外を使いたい"&gt;割り当てられたメールアドレス以外を使いたい&#10;&lt;/h2&gt;&lt;p&gt;G Suiteでは、各人に一つのメールアドレスが割り当てられる。が、役どころによっては別人格（？）のメールアドレスが必要なことがあったり、メーリングリストのようなものが必要になったり、部署や団体を代表するメールアドレスが必要であったりなんだりして、メールアドレスというのは何かと入り用である。&lt;/p&gt;&#10;&lt;p&gt;といって、わざわざそのためにアカウントを作成してしまうと、それで月額を取られてしまう。実質的にユーザーが増えているわけでもないのに、それはちょっと阿呆らしい。&lt;/p&gt;&#10;&lt;p&gt;ということで、こういう時はメールエイリアスやグループ機能を用いる。基本的に、自分ひとりでよければメールエイリアス、複数人で利用したいアドレスであればグループ機能を用いるとよい。&lt;/p&gt;&#10;&lt;h2 id="メールエイリアス"&gt;メールエイリアス&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://support.google.com/a/answer/33327?hl=ja" target="_blank" rel="noopener"&#10; &gt;メール エイリアスの追加や削除 - G Suite 管理者 ヘルプ&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;簡便なやり方は、メールエイリアス機能だ。設定のやり方は、Googleの公式サポートページを見ればよい……では話が終わってしまうのだが、実際そうなので仕方がない。&lt;/p&gt;&#10;&lt;p&gt;受信については、管理コンソールで一度設定すればそれだけで問題なく使える。送信の設定はこれまた公式の「&lt;a class="link" href="https://support.google.com/mail/answer/22370" target="_blank" rel="noopener"&#10; &gt;別のアドレスやエイリアスからメールを送信する - Gmail ヘルプ&lt;/a&gt;」に、Gmailをクライアントとして使った場合のやり方が書いてある。&lt;/p&gt;&#10;&lt;p&gt;というか送信についてはメーラーによりけりなので、メーラーのヘルプページを見ないと仕方ない。MacのMail.appならば「&lt;a class="link" href="https://support.apple.com/ja-jp/guide/mail/mlhlp1205/11.0/mac/10.13" target="_blank" rel="noopener"&#10; &gt;Mac の「メール」でメールエイリアスを使用する - Apple サポート&lt;/a&gt;」である。早速Mojaveにも対応している……。&lt;/p&gt;&#10;&lt;p&gt;注意点として、メールエイリアス機能では、一つのアドレスを一人にしか割り当てられない。したがって、複数人で同一のメールアドレスを利用したい場合には向かない。メーリングリスト的な使い方をしたいとか、そういう場合は、次のグループ機能を使う。&lt;/p&gt;&#10;&lt;h2 id="グループ"&gt;グループ&#10;&lt;/h2&gt;&lt;p&gt;G Suiteには「グループ」という高機能なサービスがあるのだが、メーリス的に使いたいだけの人にとっては高機能過ぎて使いづらい。&lt;/p&gt;&#10;&lt;p&gt;作成のやり方自体は、メールエイリアスと違って管理コンソールのダッシュボードから見てわかりやすい。ただ運用方法は、メールエイリアスよりもわかりづらく、多少手を入れる必要がある。&lt;/p&gt;&#10;&lt;h3 id="権限"&gt;権限&#10;&lt;/h3&gt;&lt;p&gt;初期状態ではメンバーしか投稿できない（=メンバーからのメールしか受け付けない）ので、権限を緩める。&lt;/p&gt;&#10;&lt;p&gt;「グループ」アプリから、「マイグループ」から任意のグループの「管理」。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_7064&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;2544&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/09/mygroup-1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;グループの管理[/caption]&lt;/p&gt;&#10;&lt;p&gt;で、「権限」→「投稿権限」より「ファイルを添付」と「投稿」を「ウェブ上の全員」にする。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_7051&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;548&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/09/df717289c13c412c9680e102b7cd1b3b.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;権限を緩める[/caption]&lt;/p&gt;&#10;&lt;p&gt;かなり細かく権限を設定できることがわかる。&lt;/p&gt;&#10;&lt;h3 id="メールが届かない時"&gt;メールが届かない時&#10;&lt;/h3&gt;&lt;p&gt;送信されたメールが届かない時、恐らく保留中になっているので、これを許可する必要がある。&lt;/p&gt;&#10;&lt;p&gt;管理ページで、「メッセージ」→「保留中のメッセージ」を見る。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_7054&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;2526&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/09/group-1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;保留中のメッセージ[/caption]&lt;/p&gt;&#10;&lt;p&gt;任意のメッセージにチェックを入れて、許可をする。今回の投稿についての許可と、常に許可がある。&lt;/p&gt;&#10;&lt;p&gt;ただ、この方法だと常に保留中になっていないか確認する必要がある。それはそれで面倒だとして、もうスパム判定飛ばしてしまうこともできる。&lt;/p&gt;&#10;&lt;p&gt;その場合は、やはり各グループの管理ページから、「設定」→「管理」→「スパムメッセージ」で「管理キューをスキップしてグループに投稿」を選択する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_7055&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;2080&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/09/df717289c13c412c9680e102b7cd1b3b-1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;スパム判定をスキップ[/caption]&lt;/p&gt;&#10;&lt;p&gt;これでだいたいいけるはず。&lt;/p&gt;&#10;&lt;p&gt;参考「&lt;a class="link" href="https://codenote.net/g-suite/2342.html" target="_blank" rel="noopener"&#10; &gt;[Google Apps]「保留中のメッセージ」の機能をオフに設定する方法 | CodeNote&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h3 id="送信"&gt;送信&#10;&lt;/h3&gt;&lt;p&gt;送信については、メールエイリアスと同様。Webメールであれば転送設定をするし、各メーラーについては各メーラーのやり方に則って、という感じ。&lt;/p&gt;</description></item><item><title>マルチデバイスのキーボードはとても便利だ</title><link>https://hack-le.com/multi-device-keyboard/</link><pubDate>Mon, 24 Sep 2018 01:46:14 +0900</pubDate><guid>https://hack-le.com/multi-device-keyboard/</guid><description>&lt;p&gt;自分はMacとWindowsのデスクトップマシンを使っている。手元のスペースには限りがあるので、キーボードを1台で済ませるべく、複数のマシンとペアリングの設定をして、ボタンひとつで切り替え可能な、マルチデバイス対応のキーボードを3ヶ月ほど前に購入した。&lt;/p&gt;&#10;&lt;p&gt;キーボードの選択肢はあまりなかったので、キーボード自体には思うところないでもないが、しかしマルチデバイスは確かに便利なものだと思う。&lt;/p&gt;&#10;&lt;h2 id="キーボード2台の不便さ"&gt;キーボード2台の不便さ&#10;&lt;/h2&gt;&lt;p&gt;同じ机でデスクトップ2台を使っている人ならば、誰しもがキーボードとマウスをどうするかという問題にぶち当たる。もっとも簡単な方法は、キーボードとマウスをそれぞれ2台用意して、その時使わない1台はしまっておくことだ。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00485JPYU&amp;linkId=440d4832f4fa8de503240aa40ea5e9d8" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01D19QKFU&amp;linkId=09391f5758d7793c5526023614531b22" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;ディスプレイを机上台に乗せれば、その下に置けばまぁまぁ使い勝手も悪くない。ディスプレイボードを取り付けて、ディスプレイ上部に置く手もある（ディスプレイボードを見た姉は「ブラウン管やん」と言っていた。実際、着想はそこからきているのだろうか）。&#13;&#10;&lt;p&gt;自分はディスプレイが大きくて（31.5インチ）、机上台はちょっと使えなかったので、ディスプレイボードの上にのせていた。使っていたキーボードもHHKBのType-Sで、非常にコンパクトであったし、時々何かの拍子でずり落ちることもあったが、そんなに悪くもなかった。&lt;/p&gt;&#10;&lt;p&gt;悪くもなかったのだが、とはいえMacとWindowsを行ったり来たりする時などは（なんでそんなことをしているのかはともかく…）さすがに煩わしく、ボタンひとつで切り替えられないものかと思った。&lt;/p&gt;&#10;&lt;h2 id="マルチデバイス対応のキーボードを探す"&gt;マルチデバイス対応のキーボードを探す&#10;&lt;/h2&gt;&lt;p&gt;世の中にはUSB切替器というものもあるけれど、昔動かなかったりなんだりして苦労した記憶がある。ケーブルがゴチャゴチャするのもいやだ。かといって無線が絡めばトラブりそうだ。そもそも希望要件に適合する商品があるのかどうかもわからない。&lt;/p&gt;&#10;&lt;p&gt;やはり、Bluetoothで複数台登録できるキーボードを探してくるのが正道だろう…ということで、「ASCII配列がいい」とか「Macでの使用を考慮している」とか「コンパクトなのが良い（テンキーいらない）」とか「あんまり安っぽいのは嫌」とか「プレミアついているのは嫌」と色々考えた末、テンキーレスという希望はかなわなかったが、それ以外の条件は概ね満たすSATECHIのST-BWSKMSを購入するに至った（「&lt;a class="link" href="https://hack-le.com/satechi-st-bwskms/" &gt;MacとWindowsで共用できるUS配列なキーボードを探す旅&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="マルチデバイスは非常に便利"&gt;マルチデバイスは非常に便利&#10;&lt;/h2&gt;&lt;p&gt;ASCII配列のキーボードでWindowsとMac共用というのはけっこう苦労するのだけれど（しかも自分はいわゆるEmacsキーバインドの愛好者なので、その対応も苦労させられた）、設定を確立してからは非常に便利に使えるようになった。&lt;/p&gt;&#10;&lt;p&gt;やはりWindowsとMacの行き来が格段に楽になったし、ついでに&lt;strong&gt;Fire TV Stickなんかも登録してみたところ（4台まで登録できる）、これがまた良いもの&lt;/strong&gt;であった。面倒なアプリのパスワード入力もさらっとできる。Fire TV上でFirefoxを使ってみても良いかもしれない（Amazonといえば、キーボードを購入してから2週間ほどでAmazonのタイムセール特価の対象になっていたのを見た時、妙に損した気持ちになってしまった）。&lt;/p&gt;&#10;&lt;p&gt;おかげでWindows用に使っていたキーボードもしまうことができて、机も多少スッキリした。これでテンキーがなければ……LogicoolのK811の後継が出てくれればなぁ。中古の値段は微妙に高いくらいだけれど、直接手に触れるところなだけに中古は抵抗感があるし……。&lt;/p&gt;&#10;&lt;h2 id="ちょっとした感動"&gt;ちょっとした感動&#10;&lt;/h2&gt;&lt;p&gt;ところでWindows用として使っていたキーボードはあのHHKBことHappy Hacking Keyboard Type-Sである。HHKBと購入したキーボード、どちらの打鍵感が良いかと言えば、まぁ当然HHKBのほうが良い。自分はHHKBのような深めのストロークより、浅めのほうが好きなタチだけれど、それでも比較にならないと思う。&lt;/p&gt;&#10;&lt;p&gt;だがそれ以上に、ちょっとした感動があった。デュアルディスプレイで、一方の画面にMac、一方の画面にWindowsを映し、キーボードから手を離さずに両方の画面に書き込みを行う……これは面白い体験だ。&lt;/p&gt;&#10;&lt;p&gt;キーボードで感動したのは、大学の研究室に転がっていたFILCOのメカニカルキーボードを触った時以来かもしれない。あの吸い付くような打鍵感は衝撃的で、あの日の感動が、キーボードに拘りだしたきっかけであった。&lt;/p&gt;&#10;&lt;p&gt;とはいえ細かい不満はけっこうあるのだけれど、当面は使っていこうと思う。高級ではないがそこまで安くもないので、まぁしばらくは使えるだろう。いつまで使うかな。テンキーレスでマルチデバイスでCommandキーがあって（Mac仕様）ASCII配列の高級Bluetoothキーボードが出たら、2万くらいしても購入すると思うのだけれど、どこか出してくれないものかしら……。&lt;/p&gt;</description></item><item><title>改行コードをbrタグにして反映したいがhtmlエスケープもしたい時</title><link>https://hack-le.com/n2br/</link><pubDate>Wed, 19 Sep 2018 12:23:48 +0900</pubDate><guid>https://hack-le.com/n2br/</guid><description>&lt;p&gt;たとえばdata.textの中身を出力したいとする。ここで、改行コードは&amp;lt;br /&amp;gt;タグにしたい。なのでhtml出力ということになるが、変なのを入れ込まれても困るので、htmlエスケープもしたい。&amp;lt;br /&amp;gt;タグだけ許したい。そういう時のメモ。&lt;/p&gt;&#10;&lt;h2 id="htmlで出力"&gt;html()で出力&#10;&lt;/h2&gt;&lt;p&gt;&amp;lt;br /&amp;gt;タグを反映することになるので、jQueryのhtml()で出力すると便利。text()だと&amp;lt;br /&amp;gt;が文字列として解釈される。&lt;/p&gt;&#10;&lt;h2 id="改行コードをbr-タグにする"&gt;改行コードを&amp;lt;br /&amp;gt;タグにする&#10;&lt;/h2&gt;&lt;p&gt;改行コードを&amp;lt;br /&amp;gt;タグに変換する。たとえばdata.textの文字列内にある改行コードを&amp;lt;br /&amp;gt;タグに変換するのであれば&lt;/p&gt;&#10;&lt;pre&gt;`sample_str = data.text.replace(/\r?\n/g, '&lt;br /&gt;')&lt;code&gt;`&lt;/code&gt;&lt;/pre&gt;&#13;&#10;&lt;p&gt;で良い。一応、意味も書いておく。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;/ /で囲んでいる、正規表現&lt;/li&gt;&#10;&lt;li&gt;/ /gなので、該当する箇所すべてに対して変換（なければ最初の一箇所のみ）&lt;/li&gt;&#10;&lt;li&gt;改行コードは、Windowsが\r\n、LinuxやMacが\nなので、\rが0文字or1文字だから、\r?\n&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;で、これをhtml出力するのであれば、たとえばjqeuryで$(&amp;lsquo;div&amp;rsquo;).html(sample_str)などとすればよいのだが、そうすると&amp;lt;br /&amp;gt;タグだけではなく、色々なhtmlタグも使われてしまうことになる。&lt;/p&gt;&#10;&lt;h2 id="xss対策"&gt;XSS対策&#10;&lt;/h2&gt;&lt;p&gt;data.textにどんな文字列が入っているのかわからない場合、それだとまずいので、HTMLエスケープもしたい。いわゆるXSS対策である。&lt;/p&gt;&#10;&lt;p&gt;最初はjQueryのtext()でいいんじゃないかと思ったが、「&lt;a class="link" href="http://www.todesking.com/blog/2015-02-05-html-escape-with-innertext-and-innerhtml-is-not-enough/" target="_blank" rel="noopener"&#10; &gt;innerText(textContent)/innerHTMLを使ったHTMLエスケープは充分でないので今すぐやめろ、お前たちはもう終わりだ - TODESKING&lt;/a&gt;」の記事によると、それだと&amp;quot;がエスケープされるとは限らず不完全であるらしい。なので、下記のように手動で置き換える。&lt;/p&gt;&#10;&lt;pre&gt;`` sample_str = data.text.replace(/&amp;/g, '&amp;amp;').replace(/&lt;/g, '&amp;lt;').replace(/&gt;/g, '&amp;gt;').replace(/"/g, '&amp;quot;').replace(/'/g, '&amp;#39;').replace(/`/g, '&amp;#x60;').replace(/\r?\n/g,'&lt;br /&gt;');&#13; $('div').html(sample_str);&#13; ``&lt;/pre&gt;&#13;&#10;&lt;p&gt;という感じ。「&lt;a class="link" href="https://iwb.jp/jquery-javascript-html-escape/" target="_blank" rel="noopener"&#10; &gt;jQuery(JavaScript)でHTMLエスケープするときの注意点と対処法 | iwb.jp&lt;/a&gt;」ではバッククォーテーションも対処したほうがよいとあったので、それも加えた。そのうえで、最後に改行コード→&amp;lt;br /&amp;gt;タグ変換。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://laboradian.com/sec-js-html5/" target="_blank" rel="noopener"&#10; &gt;JavaScript とHTML5のセキュリティ対策 - ラボラジアン&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.todesking.com/blog/2015-02-05-html-escape-with-innertext-and-innerhtml-is-not-enough/" target="_blank" rel="noopener"&#10; &gt;innerText(textContent)/innerHTMLを使ったHTMLエスケープは充分でないので今すぐやめろ、お前たちはもう終わりだ - TODESKING&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://iwb.jp/jquery-javascript-html-escape/" target="_blank" rel="noopener"&#10; &gt;jQuery(JavaScript)でHTMLエスケープするときの注意点と対処法 | iwb.jp&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://d.hatena.ne.jp/hasegawayosuke/20160106/p1" target="_blank" rel="noopener"&#10; &gt;クロスサイトスクリプティング対策 ホンキのキホン - 葉っぱ日記&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>やはり本命はMac mini 2018なので</title><link>https://hack-le.com/mac-mini-2018-1/</link><pubDate>Sat, 01 Sep 2018 15:41:24 +0900</pubDate><guid>https://hack-le.com/mac-mini-2018-1/</guid><description>&lt;p&gt;嬉しいことに、ここのところ立て続けにMac mini 2018のかなり有力らしい噂が流れている。しかも、どうやらプロ向けがあるとかないとか。&lt;/p&gt;&#10;&lt;p&gt;MacBook Pro 2018が欲しいなぁと思ったものの、お値段と自分の用途を考えると、やはりMac miniこそ本命なので、良いものを出してもらいたいところだ。お値段だけがプロ向けにならないことを祈りつつ。&lt;/p&gt;&#10;&lt;h2 id="ついにくるのか"&gt;ついにくるのか&#10;&lt;/h2&gt;&lt;p&gt;時価総額が前人未踏の1兆ドルを超えるなど、華々しい話題を提供してくれるAppleであるけれど、ここ数年のMacの製品については不満が多かった。特に私はMac miniユーザーであるので、Mac mini 2012については名機であるとは思うものの、それだけにMac mini 2014のパワーダウン、さらにそれから4年にもわたる放置プレイ、iMac Proなどの製品から見受けられるAppleの姿勢などあって、若干諦めつつあった。&lt;/p&gt;&#10;&lt;p&gt;そんな折に発表されたMacBook Pro 2018は、Ryzenに負けじと出したIntelのCPUのおかげでついに13インチで4コア、15インチは6コア、さらにオプションにはCore i9もありという、久しぶりに「おお！」と思えるものであったので、もういっそのことMacデスクトップはノートと兼用にしようかしら、なんてことも考えた。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、13インチのMacBook Proでも、メモリ16GBにすると、税込みで24万円近くになる。うーん。24万というと数ヶ月前にえいやっと購入したWindowsデスクトップマシンとほぼ変わらない値段で、デスクトップとノートを比べても仕方ないと思うものの、やはりそれに見合うスペックを求めてしまう。すると、値段の割に…という気持ちがどうしても。入力インタフェースや画面付きというものの、このうちTouch Barにかかる費用がいくら占めているのかな、などと思うとやるせない。廃止の噂さえあるiPhoneの3D Touch（参考「&lt;a class="link" href="https://mobilelaby.com/blog-entry-new-iphone-lcd-2018-non-3d-touch.html" target="_blank" rel="noopener"&#10; &gt;新型iPhone、低価格モデルは「3D Touch」非対応か。将来的に廃止の可能性も&lt;/a&gt;」）よりは存在感があると思うが（自分もiPhone 8で使った試しがない）、消費電力と経済的コストに見合った働きがあると思えない…。&lt;/p&gt;&#10;&lt;p&gt;まぁそもそもの話をすれば、今の自分はメインの開発はデスクトップでやっているわけで、強いノートパソコンなど必要ないのだから、デスクトップとノートを兼用で、という発想自体がどうしようもないのかもしれない。&lt;/p&gt;&#10;&lt;h2 id="やっぱりmacのデスクトップマシンがほしい"&gt;やっぱりMacのデスクトップマシンがほしい&#10;&lt;/h2&gt;&lt;p&gt;先に触れたWindowsのデスクトップマシンは、スペックとしては申し分なく、というか正直スペックを持て余しており、自分には勿体無いマシンだな、なんとか活躍させてやりたいな、と思う良いマシンなのだが、OSの使い勝手ばかりは如何ともし難い。Microsoftの迷走の果てに行き着いたWindows 10はけっこう熟れていて、これはこれで良いのだけれど、ただなんだかんだとスペックで遥かに劣るMac miniをいじってしまうのは、やはりOSとしてのMacが使いやすいからだ。&lt;/p&gt;&#10;&lt;p&gt;特に自分の場合は、自分の作業用にbashやruby、pythonのスクリプトを書いてきたので、UNIXベースのMacのほうが使いやすいのは当然である。WindowsのWSLも、これまでのことを考えると非常に有り難いものだし、これのおかげで随分と楽をさせてもらえているけれど、まぁ使い勝手の点で届かない面があるのは致し方ない。&lt;/p&gt;&#10;&lt;p&gt;それにトラックパッドの使いやすさもある。自分がMacに求めているものは、5年前に「&lt;a class="link" href="https://hack-le.com/32323358-2/" &gt;MacのメリットはトラックパッドとUnix – 或る阿呆の記&lt;/a&gt;」の記事を書いた頃から変わっていないらしい（5年前……）。&lt;/p&gt;&#10;&lt;p&gt;だからやっぱりMacのデスクトップが欲しい。iMacは悪くないけれど、Windowsマシンも併用している手前、画面が邪魔だ。最小限でいいんだ。&lt;/p&gt;&#10;&lt;h2 id="求むmac-mini"&gt;求むMac mini&#10;&lt;/h2&gt;&lt;p&gt;するとやっぱりMac miniが選択肢として浮かぶ。Mac Proほどは望まない…が、まぁ現時点でMac Proという選択はほぼないだろう。なにしろMac mini以上の放置っぷりだからなぁ。&lt;/p&gt;&#10;&lt;p&gt;ただ、Mac Proについては少なくとも未来が明言されていた。2013の方向性を改め、モジュラー型の新型開発に勤しんでいる、と。それに引き換え、Mac miniは時折思い出したようにティム・クックが「重要な製品」とリップサービスして終わり。&lt;/p&gt;&#10;&lt;p&gt;そういう状況だっただけに、Mac miniの噂は嬉しい。まぁ出るまでわからないのだけれど、MacBook ProのCPU刷新、オプションの豪華さ（お値段もゴージャス）など見ると、なんとなく期待してしまう。&lt;/p&gt;&#10;&lt;p&gt;ただTouch Bar非搭載モデルがないことなんかは不安要素ではある。まだ出ていないだけ、と見る向きもあるが、Appleとしては斜陽のPC産業で価格の安い製品を出したくないのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;するとMac miniは噂通りプロユース、しかもそれしかない、なんてこともありうるのだろうか。Appleの考えるプロユースとはいかに、とは思わなくもないものの、それはメモリを自分で交換できることではないにせよ、まぁもとより拡張性はストレージとメモリくらいのMac miniであるから、基本的にはスペックアップだろう。スペックアップは良いが、それ以上にコストアップしていたら、これはこれで、悩ましい選択を迫られることになる。&lt;/p&gt;&#10;&lt;p&gt;まぁ、まずは出てくれないことには悩むにも悩めないのであるが。9月の発表で…とは言わずとも、10月くらいに出てくれないものかなぁ。&lt;/p&gt;</description></item><item><title>画像を選択して$.ajaxでPUTしてアップロードするメモ</title><link>https://hack-le.com/img-upload/</link><pubDate>Thu, 23 Aug 2018 11:24:30 +0900</pubDate><guid>https://hack-le.com/img-upload/</guid><description>&lt;p&gt;画像を選択して、jqueryの$.ajaxでPUTしてアップロードするごく簡単なサンプルのメモ。S3に画像をアップロードするときに使った。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;ファイルを選択して読み込み、読み込んだ画像を指定のURLにアップロードしたい。&lt;/p&gt;&#10;&lt;p&gt;ここではjQueryを使う。&lt;/p&gt;&#10;&lt;h2 id="サンプル"&gt;サンプル&#10;&lt;/h2&gt;&lt;p&gt;[caption id=&amp;ldquo;attachment_6947&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;642&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/08/89a201a36935837ea8afef2fa0ff0fda.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;画面[/caption]&lt;/p&gt;&#10;&lt;p&gt;上図のように、ファイルを選択して、右隣の雑なボタンをクリックするとファイルがアップロードされるようなものを書く。&lt;/p&gt;&#10;&lt;p&gt;以下のように。&lt;/p&gt;&#10;&lt;pre&gt;`&lt;html&gt;&#13; &lt;head&gt;&#13; &lt;meta http-equiv="content-type" content="text/html; charset=utf-8"&gt;&#13; &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"&gt;&lt;/script&gt;&#13; &lt;script&gt;&#13; $(function(){&#13; &#9;var file;&#13; &#13; &#9;$("#upfile").change(function(){&#13; &#9;&#9;console.log("upload file");&#13; &#9;&#9;if (this.files.length &gt; 0) {&#13; &#9;&#9;&#9;file = this.files[0];&#13; &#9;&#9;}&#13; &#9;});&#13; &#13; &#9;$("#button").click(function(){&#13; &#9;&#9;console.log("button");&#13; &#9;&#9;var filetype = file["type"];&#13; &#9;&#9;var imgurl = "アップロード先のURL";&#13; &#9;&#9;$.ajax({&#13; &#9;&#9;&#9;type: "PUT",&#13; &#9;&#9;&#9;url: imgurl,&#13; &#9;&#9;&#9;data: file,&#13; &#9;&#9;&#9;headers:{&#13; &#9;&#9;&#9;&#9;"Content-Type":filetype&#13; &#9;&#9;&#9;},&#13; &#9;&#9; processData: false,&#13; &#9;&#9; contentType: false&#13; &#9;&#9;})&#13; &#9;&#9;.done(function(json_data) {&#13; &#9;&#9;&#9;console.log("success");&#13; &#9;&#9;})&#13; &#9;&#9;.fail(function() {&#13; &#9;&#9;&#9;alert("error");&#13; &#9;&#9;});&#13; &#9;});&#13; });&#13; &lt;/script&gt;&#13; &lt;/head&gt;&#13; &lt;body&gt;&#13; &#9;&lt;input type="file" name="upfile" id="upfile" accept="image/*"&gt;&#13; &#9;&lt;input type="button" name="button" id="button"&gt;&#13; &lt;/body&gt;&#13; &lt;/html&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ファイルを選択すると、$(&amp;quot;#upfile&amp;quot;).change();が発火してファイルの内容をfileに読み込む(.click();にするとファイルを読み込む前に終わる…言われてみれば当たり前か…)。buttonを押すと、$(&amp;quot;#button&amp;quot;).click();が発火して$.ajac();によってアップロード先のURLにPUTする。&lt;/p&gt;&#10;&lt;p&gt;processDataおよびcontentTypeはmimeタイプの指定のため（参考「&lt;a class="link" href="http://js.studio-kingdom.com/jquery/ajax/ajax" target="_blank" rel="noopener"&#10; &gt;$.ajax() | jQuery 1.9 日本語リファレンス | js STUDIO&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://js.studio-kingdom.com/jquery/ajax/ajax" target="_blank" rel="noopener"&#10; &gt;$.ajax() | jQuery 1.9 日本語リファレンス | js STUDIO&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>boto3でS3にアップロードした画像が、ブラウザで表示するとダウンロードされてしまう時</title><link>https://hack-le.com/boto3-s3-browser/</link><pubDate>Tue, 21 Aug 2018 15:07:36 +0900</pubDate><guid>https://hack-le.com/boto3-s3-browser/</guid><description>&lt;p&gt;公開用のS3のバケットにアップロードした画像を、URL直打ちで閲覧すると、いつもならブラウザに表示されるのだが、ダウンロードされてしまうケースがある。&lt;/p&gt;&#10;&lt;p&gt;content-typeでイメージのmimeタイプが指定されていないため。対応のメモ。&lt;/p&gt;&#10;&lt;h2 id="現象"&gt;現象&#10;&lt;/h2&gt;&lt;p&gt;Lambda関数（python3）で画像を生成し、S3の公開用バケットにアップロードした。アップロード先のURLを直打ちでアクセスすると、ブラウザ内に表示されるのではなくて、ダウンロードされてしまった。&lt;/p&gt;&#10;&lt;p&gt;ブラウザ内で表示されるようにしたい。&lt;/p&gt;&#10;&lt;h2 id="原因"&gt;原因&#10;&lt;/h2&gt;&lt;p&gt;content-typeがイメージのmimeタイプで設定されていないため。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;uploadの時に、content-typeを指定する。upload_fileにおいては、ExtraArgsにjsonで指定する。たとえばimage/jpegを指定する時は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;client.upload_file(Filename=fname, Bucket=bucket_name, Key=dest_key, ExtraArgs={&amp;#34;ContentType&amp;#34;: &amp;#34;image/jpeg&amp;#34;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;upload_fileではなくput_objectの時は、普通にContentTypeが使える。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;client.put_object(Bucket=bucket_name, Key=dest_key, ContentType=&amp;#34;image/jpeg&amp;#34;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;content-typeは盲点だった。。。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/makkausu4130/items/4ab2a404ff900a3c76e3" target="_blank" rel="noopener"&#10; &gt;AWS_SDKでS3にアップした画像を開くとブラウザに表示されないあなたへ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/34550816/aws-content-type-settings-in-s3-using-boto3" target="_blank" rel="noopener"&#10; &gt;python - AWS Content Type Settings in S3 Using Boto3 - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.put_object" target="_blank" rel="noopener"&#10; &gt;S3 — Boto 3 Docs 1.7.81 documentation&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>S3にGETやらPUTやらしたい時の設定</title><link>https://hack-le.com/s3-get-put/</link><pubDate>Wed, 08 Aug 2018 10:40:07 +0900</pubDate><guid>https://hack-le.com/s3-get-put/</guid><description>&lt;p&gt;AWSのS3で、JavaScriptやらなんやらでGETしたりPUTしたりしたい時のための、S3の設定（CORSの設定）のメモ。&lt;/p&gt;&#10;&lt;p&gt;ただの公開設定、GETだけなら「&lt;a class="link" href="https://hack-le.com/s3-everyone-read/" &gt;S3で特定のバケットを誰でも読み取りできるようにするバケットポリシー – 或る阿呆の記&lt;/a&gt;」。&lt;/p&gt;&#10;&lt;h2 id="やりたい"&gt;やりたい&#10;&lt;/h2&gt;&lt;p&gt;S3の任意のバケットについて、JavaScriptやらでGETしたりPUTしたりしたい。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;JavaScriptでGETやらPUTやらするということは、異なるドメインからのアクセスということになるので、CORSの設定が必要。&lt;/p&gt;&#10;&lt;p&gt;コンソールより、S3で対象のバケットを選択して、CORSの設定を以下のようにする。&lt;/p&gt;&#10;&lt;pre&gt;`&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13; &lt;CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"&gt;&#13; &lt;CORSRule&gt;&#13; &lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt;&#13; &lt;AllowedMethod&gt;GET&lt;/AllowedMethod&gt;&#13; &lt;AllowedMethod&gt;PUT&lt;/AllowedMethod&gt;&#13; &lt;AllowedMethod&gt;DELETE&lt;/AllowedMethod&gt;&#13; &lt;AllowedMethod&gt;POST&lt;/AllowedMethod&gt;&#13; &lt;AllowedMethod&gt;HEAD&lt;/AllowedMethod&gt;&#13; &lt;MaxAgeSeconds&gt;3000&lt;/MaxAgeSeconds&gt;&#13; &lt;AllowedHeader&gt;*&lt;/AllowedHeader&gt;&#13; &lt;/CORSRule&gt;&#13; &lt;/CORSConfiguration&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これを設定したバケットについては、ここで許可したメソッドがJavaScriptで使えるようになる。&lt;/p&gt;&#10;&lt;p&gt;この記事はS3の設定だけなので、あとは対象外だが、実際にPUTとかするときには、S3のオブジェクトをどうこうしてよい、という権限を別途与えることが必要。たとえばLambda関数でバケットにアクセスする場合、そのバケットにGetObjectやらPutObjectやらしてよいとするポリシーを適用したIAMロールを、Lambda関数に被せておく必要がある。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/sakadonohito/items/61b03bb5224ef83bde41" target="_blank" rel="noopener"&#10; &gt;CORSなJSだけでS3へのMultipartUL&amp;amp;DLする場合の必要な設定&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Raspberry Piとかやり始めた時に知っておきたかった電子工作系のネットショップ</title><link>https://hack-le.com/eleshop/</link><pubDate>Sat, 04 Aug 2018 20:24:06 +0900</pubDate><guid>https://hack-le.com/eleshop/</guid><description>&lt;p&gt;最近姉にRaspberry Piを買おうと思っているようで、ちょっとやりとりしたら妙にテンションが上がってしまった。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはよいとして、Raspberry Piでなんちゃって電子工作みたいなことする時、最初に知っておきたかったなーと思ったネットショップのあれこれ。お店を知るのもお勉強？&lt;/p&gt;&#10;&lt;h2 id="amazonだけではなく"&gt;Amazonだけではなく&#10;&lt;/h2&gt;&lt;p&gt;とりあえずAmazon！……でも良いとは思うのだけれど、わざわざRaspberry Piを使いたいと思ったということは、センサやらモータやらなんかゴチャゴチャつけたいのだと思う。であれば、どこかしら電子工作でよく使われるネットショップのアカウントは作っておいて損はない。どうせ必要になるので。&lt;/p&gt;&#10;&lt;p&gt;…あと、どういうわけかRaspberry Piをキーワードにすると、Amazonは怪しい業者が見受けられるので注意というかなんというか。まぁせっかくなので、色々見ていくと楽しめる。&lt;/p&gt;&#10;&lt;h2 id="マルツオンライン"&gt;マルツオンライン&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.marutsu.co.jp/" target="_blank" rel="noopener"&#10; &gt;電子部品・半導体パーツの通販 販売 | マルツオンライン&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;送料無料が3,000円以上でハードル低い。大物小物、デジタルアナログ、たいがい揃っている。バランスが良いと思う。&lt;/p&gt;&#10;&lt;p&gt;この界隈ではキレイなレイアウトだと思うのだけれど、それでも姉の印象は「ギラギラしている」だった 笑。自分がRaspberry Pi買うならここかなぁ。&lt;/p&gt;&#10;&lt;h2 id="秋月電子通商"&gt;秋月電子通商&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="http://akizukidenshi.com/catalog/default.aspx" target="_blank" rel="noopener"&#10; &gt;秋月電子通商 トップページ - 電子部品・半導体 【通販・販売】&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;半角ｶﾅから滲み出る老舗感。送料は佐川が500円/個口、ヤマト運輸が600円/個口。ヤマト値上がりしている…まぁ仕方ないよね。運送屋さんもたいへんんだ。税込み10,800円以上で送料無料。&lt;/p&gt;&#10;&lt;p&gt;カーボン抵抗とかトランジスタとか、基本的な部品はここと次の秋月でよく買っていた。&lt;/p&gt;&#10;&lt;h2 id="共立エレショップ"&gt;共立エレショップ&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="http://eleshop.jp/shop/" target="_blank" rel="noopener"&#10; &gt;【共立エレショップ】eleshop.jp：電子部品,半導体,キットの通販&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;共立電子。大阪日本橋にシリコンハウス。関西ではちょこちょことお世話に。送料無料が7,500円以上なのでちょっとハードル高い。でも電車代だと思えばね。秋月とここで、アナログ周りはだいたい揃う感じ。&lt;/p&gt;&#10;&lt;h2 id="スイッチサイエンス"&gt;スイッチサイエンス&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.switch-science.com/" target="_blank" rel="noopener"&#10; &gt;トップページ - スイッチサイエンス&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;送料区分150と500があって、前者は3,000円、後者は10,000円以上で無料。まぁでも電子部品は小物が多いのでだいたい前者でおさまると思う。&lt;/p&gt;&#10;&lt;p&gt;割と新しいだけあって見やすい。Raspberry PiやらArduinoとかで使いやすい、デジタルなモジュールが多くて便利。この手のはどうしても輸入品が多くなってしまうけれど、全然高くないし、ほんと良心的だと思う。&lt;/p&gt;&#10;&lt;h2 id="aitendo"&gt;aitendo&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="http://www.aitendo.com/" target="_blank" rel="noopener"&#10; &gt;aitendo&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;送料490円。特価品が楽しい。9円の基板おひとりさま2つまで、とかスーパー玉出の1円もやしを思い出す。細かくカテゴライズしてくれているが、中には0件のものもあったりする（そういうのを見ると逆に落ち着く）。以前1Hz以上のPPSが出るGPS搭載のモジュールをここで購入した。&lt;/p&gt;&#10;&lt;h2 id="rsオンライン"&gt;RSオンライン&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://jp.rs-online.com/web/" target="_blank" rel="noopener"&#10; &gt;RSオンライン｜電子部品・半導体の通販/販売サイト&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Raspberry Piの国内正規代理店がRSコンポーネンツなのだが、業務で使うものが中心で、Raspberry Piってやつをはじめてみようかな！という層には敷居が高いと思われる。だからなのか、下記のようなショップがある。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://raspberry-pi.ksyic.com/main/index" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi Shop by KSY&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;姉に教えてもらった。Raspberry PiのRS正規代理店らしい。5,000円以上送料無料。正規の安心感はある。&lt;/p&gt;&#10;&lt;h2 id="モノタロウ"&gt;モノタロウ&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://ihc.monotaro.com/" target="_blank" rel="noopener"&#10; &gt;プロが使う工具や消耗品を業務用激安価格で買える IHC.MonotaRO インターネットホームセンター&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;工具と言わず工場で使いそうなやつはたいがい揃う。法人・個人事業主向けなのだが、個人向けもやっているらしいことを最近知った。工具も何かと使うからなぁ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.monotaro.com/" target="_blank" rel="noopener"&#10; &gt;工具通販 MonotaRO(モノタロウ) 現場を支えるネットストア&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;こっちは業者向け。しれっとCOSELの電源とかも売っていて助かったことがある。&lt;/p&gt;&#10;&lt;h2 id="strawberry-linux"&gt;Strawberry Linux&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://strawberry-linux.com/" target="_blank" rel="noopener"&#10; &gt;ストロベリー・リナックス - Exciting Electronics&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;流行りの美味しそうな名前だが2003年からやっているらしい。おお、流行の先取り……。モジュールが豊富。見ていると楽しい。使ったことはないのだが、一応個人でも代引きなら利用できそうな感じ。&lt;/p&gt;&#10;&lt;h2 id="海外の業者"&gt;海外の業者&#10;&lt;/h2&gt;&lt;p&gt;こっちが本場感あるのだが、やはり個人輸入となるとハードルが高いし、スイッチサイエンスさんがお値頃で仕入れてくれていることも多い。サイトを見ているだけでも楽しい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.adafruit.com/" target="_blank" rel="noopener"&#10; &gt;Adafruit Industries, Unique &amp;amp; fun DIY electronics and kits&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.sparkfun.com/" target="_blank" rel="noopener"&#10; &gt;SparkFun Electronics&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.seeedstudio.com/Pyscan-A-Sensor-Shield-for-Pycom-Development-Boards-p-3088.html" target="_blank" rel="noopener"&#10; &gt;Pyscan - A Sensor Shield for Pycom Development Boards - MicroPython - Seeed Studio&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.dx.com/" target="_blank" rel="noopener"&#10; &gt;DealeXtreme - Cool Gadgets at the Right Price - DX Free Shipping Worldwide&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;電子部品というよりガジェット全般なのだが、オシロスコープとかもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.aliexpress.com/" target="_blank" rel="noopener"&#10; &gt;AliExpress.com - Online Shopping for Popular Electronics, Fashion, Home &amp;amp; Garden, Toys &amp;amp; Sports, Automobiles and More.&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;アリババの個人向け&lt;/li&gt;&#10;&lt;li&gt;総合ショップなのだがマニアックなガジェットがもあったりなんだり&lt;/li&gt;&#10;&lt;li&gt;50個入りのボタン電池買ったら、届いた時点で2個くらいやや妊娠していた思い出（でも電圧は出ていた）&lt;/li&gt;&#10;&lt;li&gt;昔USB・microUSBの変換コネクタを買ったらminiUSB変換コネクタが届いた思い出&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="それでもamazon"&gt;それでもAmazon&#10;&lt;/h2&gt;&lt;p&gt;みんなだいすきAmazon。基本的な工具揃えたり消耗品買ったり。ただ、電子部品（特にモジュール類）はなぜか怪しい業者が蔓延っているような…。特に製品名に関係ありそうなものを片っ端から入れました、みたいなのは要注意かと。&lt;/p&gt;&#10;&lt;p&gt;でもやっぱり便利。Amazonアカウントが使えるのは強い。届いた製品がおかしかったらAmazonパワーで返却してくれるし、Amazonという安心感はすごい。ちょっと割高だなーと思っても、Amazonから買える安心感には価値がある、かも。ニッチなコネクタが期限までに届く最後の希望になったことも。。。&lt;/p&gt;&#10;&lt;h2 id="とりあえず全部覗くとよい"&gt;とりあえず全部覗くとよい&#10;&lt;/h2&gt;&lt;p&gt;なにか電子部品がほしいと思ったら、一つだけの店だけでなく、とりあえず知っているお店は全部周ると、安いところがあったり、そのものズバリじゃないけれど似たようなのでいいのがあったり、その過程でもっと良いものがあることを知ることができたり、おっ！と思ったら法人以外お断りだったりなんだり。&lt;/p&gt;&#10;&lt;p&gt;送料かかっても、電車で行くより絶対安いし、田舎住まいだったら通販は本当に有り難い。リアル店舗のように手に取れないのは残念だけれど、その場でスペックも確認できるし、検索すれば使った人の体験談も出てくるし……。そういうの、見ているだけでも楽しいよね。&lt;/p&gt;</description></item><item><title>AWSのLambdaでcronみたいな感じで定期実行する</title><link>https://hack-le.com/aws-lambda-cron/</link><pubDate>Fri, 03 Aug 2018 18:53:57 +0900</pubDate><guid>https://hack-le.com/aws-lambda-cron/</guid><description>&lt;p&gt;AWSのLambda関数を、Linuxのcronのような感じで定期的に実行したい時のやり方のメモ。&lt;/p&gt;&#10;&lt;p&gt;トリガーをCloudWatch Eventsのスケジュール式にすればよい。5分毎、のような設定が可能なRate式と、従来のcronとほぼ同じように毎月2時15分00秒、というような設定が可能なCron式の設定がある。&lt;/p&gt;&#10;&lt;p&gt;Webコンソールのやり方と、ついでにSAM使うときのtemplate.yamlの例。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;Lambda関数を定期的に実行したい。&lt;/p&gt;&#10;&lt;h2 id="やり方"&gt;やり方&#10;&lt;/h2&gt;&lt;p&gt;Lambda関数のトリガーを、CloudWatch Eventsにして、ルールタイプをスケジュール式にする。&lt;/p&gt;&#10;&lt;p&gt;スケジュール式には、5分毎とか1時間毎といったような設定が可能なRate式と、毎月2時15分00秒というように日時を細かく指定できるCron式がある。&lt;/p&gt;&#10;&lt;p&gt;Rate式のほうが簡単に設定できる。日時指定が必要なければRate式が楽。&lt;/p&gt;&#10;&lt;pre&gt;`# Rate式&#13; # 5分ごと&#13; rate(5 minutes)&#13; # 1時間ごと&#13; rate(1 hour)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;日時指定が必要な時は、やはりCron式。書式は&lt;/p&gt;&#10;&lt;pre&gt;`cron(分 時 日 月 曜日 年)`&lt;/pre&gt;&#13;&#10;&lt;p&gt;で、なんと&lt;strong&gt;Yearがある&lt;/strong&gt;。また、&lt;strong&gt;タイムゾーンはUTC&lt;/strong&gt;なので、日本時間から-9時間して考える。たとえば日本時間の10時はUTCでは1時。また、&lt;strong&gt;日と曜日のどちらかは「?」でなければいけない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ワイルドカードも色々あるので、公式のドキュメント「&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html" target="_blank" rel="noopener"&#10; &gt;Rate または Cron を使用したスケジュール式 - AWS Lambda&lt;/a&gt;」を見る。&lt;/p&gt;&#10;&lt;p&gt;公式の例。&lt;/p&gt;&#10;&lt;pre&gt;`# 毎日、UTCで10時（日本時間19時）&#13; cron(0 10 * * ? *)&#13; # 月曜～金曜の10分ごと&#13; cron(0/10 * ? * MON-FRI *)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;年の設定ってすごい。。&lt;/p&gt;&#10;&lt;h2 id="sam使う時のtemplateyaml"&gt;SAM使う時のtemplate.yaml&#10;&lt;/h2&gt;&lt;p&gt;SAM使う時はtemplate.yamlを使うわけだが、「&lt;a class="link" href="https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cloudwatchevent" target="_blank" rel="noopener"&#10; &gt;serverless-application-model/2016-10-31.md at master · awslabs/serverless-application-model&lt;/a&gt;」や「&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-scheduledevents-example-use-app-spec.html" target="_blank" rel="noopener"&#10; &gt;CloudWatch イベント アプリケーションの AWS SAM テンプレート - AWS Lambda&lt;/a&gt;」あたりを参考に。&lt;/p&gt;&#10;&lt;p&gt;ハンドラが hello_world/app.py にあるとして。&lt;/p&gt;&#10;&lt;pre&gt;`AWSTemplateFormatVersion: '2010-09-09'&#13; Transform: AWS::Serverless-2016-10-31&#13; Description: &gt;&#13; agri-shintotsukawa-filter&#13; &#13; Sample SAM Template for agri-shintotsukawa-filter&#13; &#13; # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst&#13; Globals:&#13; Function:&#13; Timeout: 3&#13; &#13; Resources:&#13; PollingFunction:&#13; Type: AWS::Serverless::Function&#13; Properties:&#13; CodeUri: hello_world/&#13; Handler: app.lambda_handler&#13; Runtime: python3.8&#13; Events:&#13; HelloWorld:&#13; Type: Schedule # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api&#13; Properties:&#13; Schedule: rate(1 minute)&#13; &#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>LambdaでS3をトリガーにした時にConfigurations overlap. Configurations on the same bucket cannot share a common event type.と怒られる</title><link>https://hack-le.com/lambda-s3-trigger-error/</link><pubDate>Tue, 31 Jul 2018 19:20:51 +0900</pubDate><guid>https://hack-le.com/lambda-s3-trigger-error/</guid><description>&lt;p&gt;LambdaでS3をトリガーにして保存しようとすると、「Configurations overlap. Configurations on the same bucket cannot share a common event type.」とか言って怒られる。&lt;/p&gt;&#10;&lt;p&gt;多分前の設定が残っているのでそのメモ。&lt;/p&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;LambdaでS3をトリガーにして保存した時に、Configurations overlap. Configurations on the same bucket cannot share a common event type. (Service: Amazon S3; Status Code: 400なんたらかんたらと怒られる。&lt;/p&gt;&#10;&lt;h2 id="原因"&gt;原因&#10;&lt;/h2&gt;&lt;p&gt;なんか別のところでトリガーにしたいバケットを設定している。自分の場合、テストで作ったLambda関数がそうだった。Lambda関数を消しても、トリガーにした形跡は残るらしい。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;残っている設定を削除する。S3の場合、コンソール画面から、S3の当該のバケットを選択肢、「プロパティ」→「Events」より通知を確認できるので、それを削除する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6897&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;2052&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/8a8fd04e3baf3e4230b71cae2704ae68.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;S3のプロパティ[/caption]&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://blog.tgr.wtf/%E3%80%90aws%E3%80%91lambda%E3%81%AE%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E8%A8%AD%E5%AE%9A%E6%99%82%E3%81%ABs3%E3%81%AE%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B-433.html" target="_blank" rel="noopener"&#10; &gt;【AWS】Lambdaのトリガー設定時にS3のバケットを追加するとエラーになる時がある&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/enable-event-notifications.html" target="_blank" rel="noopener"&#10; &gt;S3 バケットのイベント通知を有効化および設定する方法 - Amazon Simple Storage Service&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Lambdaで、S3に画像がアップロードされたら、別のバケットにコピーする(python3)</title><link>https://hack-le.com/s3-lambda-copy/</link><pubDate>Tue, 31 Jul 2018 19:12:48 +0900</pubDate><guid>https://hack-le.com/s3-lambda-copy/</guid><description>&lt;p&gt;S3のバケットsrc-bucketに画像がアップロードされたら、それをトリガーにして別のバケットdest-bucketにコピーする関数をLambdaで作成する。言語はpython 3.6。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;src-bucketにobj.jpgがアップロードされたら、自動的にobj.jpgをdest-bucketにコピーしたい。&lt;/p&gt;&#10;&lt;p&gt;AWSのLambdaを使って、そのような関数を作成する。&lt;/p&gt;&#10;&lt;h2 id="iamロールの作成"&gt;IAMロールの作成&#10;&lt;/h2&gt;&lt;p&gt;Lambda関数に適用するIAM ロールを作成する。&lt;/p&gt;&#10;&lt;p&gt;IAMロールには、以下のポリシーを適用する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;AWSLambdaBasicExecutionRole&#10;&lt;ul&gt;&#10;&lt;li&gt;テンプレートにある&lt;/li&gt;&#10;&lt;li&gt;CloudWatch Logsに書き込むため&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;s3:GetObjectとs3:PutObjectをsrc-bucketおよびdest-bucketに対して利用できるようなポリシー&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ビジュアルエディターで作ると楽。作ったもののjsonは以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Version&amp;#34;: &amp;#34;2012-10-17&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Statement&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Sid&amp;#34;: &amp;#34;VisualEditor0&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Effect&amp;#34;: &amp;#34;Allow&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Action&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;s3:PutObject&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;s3:GetObject&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Resource&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;arn:aws:s3:::src-bucket/*&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;arn:aws:s3:::dest-bucket/*&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Resourceのバケット名は適当に。ちなみにこれだと、srcとdestの両方に読み書きの権限が与えられてしまうので、ちゃんとわけたほうが丁寧だが、ここでは一緒にする。&lt;/p&gt;&#10;&lt;h2 id="lambda関数の作成"&gt;Lambda関数の作成&#10;&lt;/h2&gt;&lt;p&gt;Lambda関数を作る。コンソール画面から行う。&lt;/p&gt;&#10;&lt;p&gt;IAMロールは前節で作ったものを適用する。ソースコードは以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import urllib.parse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import boto3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import os&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print(&amp;#39;Loading function&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;s3 = boto3.client(&amp;#39;s3&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def lambda_handler(event, context):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; src_bucket = os.getenv(&amp;#39;SRC_BUCKET_NAME&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dest_bucket = os.getenv(&amp;#39;DEST_BUCKET_NAME&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; src_key = urllib.parse.unquote_plus(event[&amp;#39;Records&amp;#39;][0][&amp;#39;s3&amp;#39;][&amp;#39;object&amp;#39;][&amp;#39;key&amp;#39;], encoding=&amp;#39;utf-8&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dest_key = src_key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; try:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cp_src = f&amp;#34;{src_bucket}/{src_key}&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(f&amp;#34;src: {cp_src}&amp;#34;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(f&amp;#34;dest: {dest_bucket}/{dest_key}&amp;#34;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; response = s3.copy_object(Bucket=dest_bucket, CopySource=cp_src, Key=dest_key)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return True&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; except Exception as e:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(e)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#39;Error getting/putting object.&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; raise e&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;バケット名を環境変数でSRC_BUCKET_NAMEとDEST_BUCKET_NAMEにしているので、そのように設定する。&lt;/p&gt;&#10;&lt;p&gt;テストイベントは、「S3 Put」をテンプレートにして、event[&amp;lsquo;Records&amp;rsquo;][0][&amp;lsquo;s3&amp;rsquo;][&amp;lsquo;object&amp;rsquo;][&amp;lsquo;key&amp;rsquo;]に相当するところを、適当なファイル名にするとよい。そのファイル名で、src_bucketにファイルを上げておけば、テストができる。&lt;/p&gt;&#10;&lt;h2 id="トリガーの設定"&gt;トリガーの設定&#10;&lt;/h2&gt;&lt;p&gt;テストがとおるようになったら、トリガーを設定する。Designerより、「トリガーの追加」からS3を選択し、「バケット」と「イベントタイプ」を選ぶ。バケットはsrc-bucket、イベントタイプは「オブジェクトの作成（すべて）」。トリガーの有効化にチェックを入れて追加。&lt;/p&gt;&#10;&lt;p&gt;これで、なにかsrc-bucketにアップロードして、dest-bucketにコピーされていればOK。&lt;/p&gt;&#10;&lt;p&gt;このトリガーの設定による影響を、S3の「プロパティ」→「Events」で確認できる。&lt;strong&gt;Lambda関数だけ消しても、Eventsの設定は残る&lt;/strong&gt;ことに注意。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/satoshi03/items/bc570ff168a0e0b20c36" target="_blank" rel="noopener"&#10; &gt;AWS Lambda Pythonでs3に接続する&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.copy_object" target="_blank" rel="noopener"&#10; &gt;S3 — Boto 3 Docs 1.7.62 documentation&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Google Home miniに無視されていたがマイクのOn/Offで許してくれた</title><link>https://hack-le.com/google-home-mini-mic/</link><pubDate>Sun, 29 Jul 2018 17:08:26 +0900</pubDate><guid>https://hack-le.com/google-home-mini-mic/</guid><description>&lt;p&gt;Google Home miniが私の声に応えてくれない。本体に触れると、なにやらLEDが光って反応してくれて、その後に「OK Google」というと一度は反応してくれる。だが、その後はまたうんともすんとも言わない。悲しい。再起動したり電源落としたりデバイスのリンクを解除したりしたけれど、やっぱりうまくいかない。&lt;/p&gt;&#10;&lt;p&gt;……あれこれした挙げ句、どういうわけなのか、マイクのOn/Offをしたら、また反応するようになってくれた。なぜ……。&lt;/p&gt;&#10;&lt;h2 id="応えてくれない"&gt;応えてくれない&#10;&lt;/h2&gt;&lt;p&gt;以前AmazonのEcho Dotを購入したのだが、自宅ではなぜかネットの接続がうまくいかないことが多かった。職場に持っていったところ、ちゃんと機能したので、やはり何か原因があったのだと思われるが、原因追求をする前に、なんだか職場が定位置になってしまった。&lt;/p&gt;&#10;&lt;p&gt;で、まぁ他のものも試したかったしな、ということでGoogle Home miniを購入した。Echo Dotのことがあったので、大丈夫かなと思っていたが、こちらはきちんとネットワークにつながってくれる……つながってくれるのだが……。&lt;/p&gt;&#10;&lt;p&gt;私の声に応えてくれない……。一人暮らしの一室で、「OK Google、OK Google、OK Google！」と呟き続ける私の姿は滑稽の一言。ひょっとして私のOKの発音が気に入らないのだろうかと思って、「ねぇ Google」と言ってみてもやはり無視。&lt;/p&gt;&#10;&lt;h2 id="試行錯誤"&gt;試行錯誤&#10;&lt;/h2&gt;&lt;p&gt;色々と試すうちに、どうやら本体に触れるとLEDが点灯し、その後は一度だけ認識してくれることがわかった。が、その後はやはり応えてくれない。再起動したり、電源を落としたり、リンク解除してみたり、思いついたところは一通りやってみたが、駄目。後はもうVoice Matchの再登録くらいしか思い浮かばない。&lt;/p&gt;&#10;&lt;p&gt;この症状はなんだろう。調べてみても、同様の症状が出たという人は見当たらない。&lt;/p&gt;&#10;&lt;h2 id="マイクのonoff"&gt;マイクのOn/Off&#10;&lt;/h2&gt;&lt;p&gt;人工知能にまで無視される私っていったい…などと打ちひしがれつつ、「&lt;a class="link" href="https://support.google.com/googlehome/answer/7212130?hl=ja" target="_blank" rel="noopener"&#10; &gt;Google アシスタントが応答しない - Google Home ヘルプ&lt;/a&gt;」を実行してみることにした。そして、その中にあるトラブルシューティング前のチェックリストの&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;マイクがミュートになっていないこと。&#10;Google Home の場合は、デバイスの背面にあるマイクミュート ボタンを押します。マイクがミュートになっているかどうかをアシスタントが教えてくれます。&#10;Google Home Mini の場合は、デバイスの側面にあるマイクスイッチを切り替えます。マイクがミュートになっているかどうかをアシスタントが教えてくれます。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;という項目をやってみたところ、どういうわけなのか、再びGoogle Home miniがキビキビと私の声に答えだした。マイクは元々Onになっていたので、つまりOn/Offを繰り返しただけなのだが、それ以来、日を置いても、問題なく私の要望を聞き入れてくれるようになった。何か知らないが、許されたらしい。おおぉ……。&lt;/p&gt;&#10;&lt;p&gt;ということで、なぜかはわからないけれど、マイクのOn/Offはけっこう重要なのかもしれない。あまりないと思うが、困ったときの行動リストにマイクのOn/Offを加えることにした（というか、マイクをOffにするってどんな時だろう？）。&lt;/p&gt;&#10;&lt;p&gt;それにしても、人工知能スピーカーの用途はなかなか難しい。今の所、Google Home miniは愛しい私のキッチンタイマーである。なにか良い用途はないかなぁ……。&lt;/p&gt;</description></item><item><title>MacとWindowsで共用できるUS配列なキーボードを探す旅</title><link>https://hack-le.com/satechi-st-bwskms/</link><pubDate>Sun, 29 Jul 2018 00:20:22 +0900</pubDate><guid>https://hack-le.com/satechi-st-bwskms/</guid><description>&lt;p&gt;自分は今、デスクトップでMac miniとWindowsマシンの二台を使っている。決して大きくはない机の上に、キーボードが所狭しと2つあるのはあまり良いものではないので、できれば一つのキーボードを共有したい。&lt;/p&gt;&#10;&lt;p&gt;で、自分はコンパクト志向なので、できればテンキーレスのものが良いし、ケーブルはもちろん専用のレシーバも必要としないBluetoothなデバイスに限る。さらに、キー配列はUS配列、というかMacのUS配列を模したものが良い。&lt;/p&gt;&#10;&lt;p&gt;……なかなか理想のものに巡り会えず、結局テンキーありのSATECHIのST-BWSKMSを購入した。まぁとりあえず使えている。しかし、私の旅は続く…。&lt;/p&gt;&#10;&lt;h2 id="望むこと"&gt;望むこと&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;MacとWindowsで共用できる（マルチデバイス）&lt;/li&gt;&#10;&lt;li&gt;無線&lt;/li&gt;&#10;&lt;li&gt;US配列&#10;&lt;ul&gt;&#10;&lt;li&gt;JIS配列が絶対嫌ってわけじゃないんだけれど…&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;キーストロークは浅めがいい&lt;/li&gt;&#10;&lt;li&gt;安っぽすぎるのはいやだ&#10;&lt;ul&gt;&#10;&lt;li&gt;別に高級機種じゃないといけないということはないが、さすがに1,000-2,000円くらいで売っているスマホ用モバイルキーボードは却下&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;できるだけコンパクト（テンキーレスが望ましい）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;まぁつまり、&lt;strong&gt;AppleのMagicKeyboardがWindowsともマルチペアリングできたら最高の言うことなしなんだけれど、実際にはそうなっていない&lt;/strong&gt;ので、なにか別のものを探す必要があるわけだ。&lt;/p&gt;&#10;&lt;p&gt;WindowsとMacの両方で使うことを考慮したマルチペアリングできるUS配列のコンパクトなキーボード……これがもう全然ない。本当にない。結局希望通りのものは見つけられず、妥協してテンキーありのキーボードを久しぶりに購入することになってしまった。&lt;/p&gt;&#10;&lt;p&gt;自分のキーストロークの好みが浅めであることは、唯一の救いだった。深めのキーストロークのものは種類が少ないうえ高級機種になりがちで、選択肢が狭められるからだ。&lt;/p&gt;&#10;&lt;p&gt;キーボード好きには深めのストロークを好む人が多いように思うのだが、自分はペッタペタのキーボードが好きだ。手が小さいことも影響しているかもしれない（キーピッチも通常より狭いほうが好き）。自分がキーボードに目覚めたキッカケは、FILCOのメカニカルキーボードだったので、てっきり深めが好きなタチなのだと思い、3万円もするHHKBまで買ったのだが、その後Apple Wireless Keyboardを使ってみると、HHKBよりもしっくりときた。安っぽいパンタグラフ式のものも大いにアリ。でもすぐガタがくるからやはりある程度の質は確保したいので、安物はちょっと……といったっところ。&lt;/p&gt;&#10;&lt;p&gt;だから、Appleの純正キーボードが至高なんだけれどなぁ……iPad Proとの共用なんかを見据えて、マルチデバイスに対応……しないだろうなぁ。&lt;/p&gt;&#10;&lt;h2 id="satechi-st-kws-bms-を購入"&gt;SATECHI ST-KWS-BMS を購入&#10;&lt;/h2&gt;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00KTIYNIS&amp;linkId=df40c236e75213f3fe613467292278bc" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;色々と探し回った挙げ句、**SATECHIというメーカーのST-BWSKMS**というキーボードを購入することにした。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;US配列&lt;/li&gt;&#10;&lt;li&gt;キー配列はMac基調（Commandキーがある）&lt;/li&gt;&#10;&lt;li&gt;最大4台のマルチデバイス対応&lt;/li&gt;&#10;&lt;li&gt;キーストロークは割と浅め&lt;/li&gt;&#10;&lt;li&gt;テンキーあり&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;テンキーありなのが、コンパクトを志向する自分にとっては残念なところ&lt;/strong&gt;だ（むしろそこがウリの製品なのだが…）。テンキーがあると机の幅をとり、マウスやトラックパッドの位置がとおくなるし、なによりも、ホームポジションに手をおいたときにアンバランスな感覚になる。うーん……。&lt;/p&gt;&#10;&lt;p&gt;デザインはMacを意識しているように見えるものの、どこか無骨な印象。安っぽくはないが、高級感もない。&lt;/p&gt;&#10;&lt;p&gt;使い勝手としては、まぁ悪くないのだが、キー入力が不安定な印象で、時折文字が連続して入力されてしまう。チャタリングがひどい。ちょっと、いやだいぶつらい。MacではKarabinerを使っている問題なのだろうか、とも思ったが、Windowsでも起きたしなぁ……うーん……。なにしろ機材が多いので、無線の問題かもしれない。しかし前のキーボードではこんなことはなかったし…。ソフトウェアの設定で解決出来る気もする。&lt;/p&gt;&#10;&lt;p&gt;（追記）キーボードの設定でリピートの速度を下げれば問題なくなったが、本当は最大にしたい…。&lt;/p&gt;&#10;&lt;p&gt;あとファンクションキーがちゃんときかない。なぜだ。F7からF10はきいているっぽいのだけれど、F2からF6が怪しい。これがきかないと、ターミナルでbyobuを操作しているときに困る……。&lt;/p&gt;&#10;&lt;p&gt;（追記）これは設定でファンクションキーを使うように設定し直せば問題なくなった。&lt;/p&gt;&#10;&lt;p&gt;キー配列がUS配列の中でもMac基調なのはやはり嬉しい。自分の場合は、WindowsでもMacと同じようにEmacsキーバインドを使いたい、英かな変換を一発でしたい、という欲求があり、これはこれで苦労した（「&lt;a class="link" href="https://hack-le.com/win-emacs-kana/" &gt;Windows 10 + US配列のMac系キーボードで英かな変換とEmacsキーバインド – 或る阿呆の記&lt;/a&gt;」）が、まぁやり方さえ確立してしまえば問題ない。&lt;/p&gt;&#10;&lt;p&gt;そして&lt;strong&gt;マルチデバイス、これは思っていた以上に便利&lt;/strong&gt;。MacとWindowsをストレスなくいったりきたりできる。なにげにFire TV Stickで使えるのも便利だった。&lt;/p&gt;&#10;&lt;p&gt;総合すると、決して満足はしていないのだけれど、&lt;strong&gt;当初の目的であったマルチデバイスは便利&lt;/strong&gt;なので、当面は使い続けることになるだろうと思う。&lt;/p&gt;&#10;&lt;h2 id="他の候補"&gt;他の候補&#10;&lt;/h2&gt;&lt;p&gt;他の候補について。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01H2VY13G&amp;linkId=937571930984d88211de9bb4693e739e" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;まず、**LogicoolのK780**があった。安心と信頼のLogicoolであるし、マルチデバイス対応なのだが、国内に流通しているものはJIS型の配列なので、US配列のものはAmazon.comなどで個人輸入する必要があるうえ、やはりテンキー付きで邪魔。これだったらST-BWSKMSのほうが良い。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;テンキーあり&lt;/li&gt;&#10;&lt;li&gt;US版は個人輸入&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00B3PJ930&amp;linkId=9d2563f278ae1a197c9ed47c92c83a66" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;他、同じく**Logicool K811**も候補にあがった。Mac基調でテンキーレスでマルチデバイスでおお！と思ったのも束の間、Mac、iOS専用と謳われているうえに、既に発売中止されているらしくプレミアがついている状況である（特に国内はひどい）。うーん。Windowsでも使えないことはないのだろうけれど、わざわざ他にK810があることを考えると、賭けに出るのもなぁ……。なによりプレミアが……。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;条件には合致&lt;/li&gt;&#10;&lt;li&gt;多分Windowsでも使えるんだけれどサポートなしの不安&lt;/li&gt;&#10;&lt;li&gt;プレミアがついてしまっている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B016XLGJJA&amp;linkId=8f07f1b259149a2034b4c512c30b6fca" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;もっと安い価格帯である、**K380**も候補だった。だがこれも、K780と同じくキー配列がJIS。並行輸入品はやけに高く、Amazon.comで売られてはいるものの、個人輸入かーとか、あまり安いのも不安だしなーとか思い、結局候補から外してしまったが……。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;US配列は個人輸入&lt;/li&gt;&#10;&lt;li&gt;モバイル用途&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="理想のキーボードを探す旅は続く"&gt;理想のキーボードを探す旅は続く&#10;&lt;/h2&gt;&lt;p&gt;結局、条件に完全に合致するキーボードは手に入らずじまいだったので、今後も理想のキーボードを探す旅は続く。K811が適正な値段で国内でさらっと手に入ったら、そっちを購入していたかも……。&lt;/p&gt;&#10;&lt;p&gt;ってかしつこいけどAppleのMagic Keyboardでいいんだけれどなぁ。マルチデバイスに対応したら2万円でも即購入するんだけれどなぁ。まぁでもしないんだろうなぁー……。&lt;/p&gt;</description></item><item><title>Windows 10 + US配列のMac系キーボードで英かな変換とEmacsキーバインド</title><link>https://hack-le.com/win-emacs-kana/</link><pubDate>Sat, 28 Jul 2018 17:44:15 +0900</pubDate><guid>https://hack-le.com/win-emacs-kana/</guid><description>&lt;p&gt;Windows 10でUS配列のMac系キーボード（つまりCommandキーがある）を使い、Macでよくある英かな変換（Windowsでは無変換と変換でIMEのON/OFFを切り変えるアレ）を行い、かつEmacsキーバインドを利用するための方法について。まぁつまり、Mac（US配列）でやっていることをWindowsでもやりたい、ということ。&lt;/p&gt;&#10;&lt;p&gt;（追記）なおこの記事はSATECHIのキーボードでやってますが、US配列ならまぁだいたい同じです。SATECHIのキーボードは焼酎を盛大に零したところ、何もしていないのに壊れました。私は阿呆です。&lt;/p&gt;&#10;&lt;p&gt;（追記）JISキーボードをUS配列で頑張る編書きました。&lt;/p&gt;&#10;&lt;p&gt;（追記 2024-06-20）下記記事にも書いてますがEmacsキーバインドについてはFakeymacsでファイナルアンサーです。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/win-jis-us-emacs/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;JIS配列キーボードのWindowsノートPCを、変換・無変換を生かしたままUS配列にする（ついでにEmacsキーバインドにも対応する）&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/win-jis-us-emacs/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_9993_1789616891.webp" alt="JIS配列キーボードのWindowsノートPCを、変換・無変換を生かしたままUS配列にする（ついでにEmacsキーバインドにも対応する）" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;キーボード…SATECHI ST-BWSKMS&#10;&lt;ul&gt;&#10;&lt;li&gt;US配列&lt;/li&gt;&#10;&lt;li&gt;Commandキーがある（Mac用）&#10;&lt;ul&gt;&#10;&lt;li&gt;WindowsではWindowsキーになる（101配列…なのにあるんだね）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;テンキー邪魔（そこがウリなんだろうけれど）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Windows 10 Home&lt;/li&gt;&#10;&lt;li&gt;keyhac 1.77&lt;/li&gt;&#10;&lt;li&gt;ChgKey 1.50&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ハードウェアはSATECHIのST-BWSKMS。MacでもWindowsでも使えるマルチデバイス対応…なのはいいのだけれど、テンキーが邪魔。いや、テンキーがあるのが良いところなのだろうけれど。しかし、テンキーレスで似たようなキーボードを見つけられなかった……。&lt;/p&gt;&#10;&lt;p&gt;keyhacは使用するソフトウェア。ChgKeyはキースワップのソフトウェア。&lt;/p&gt;&#10;&lt;p&gt;（追記）商品切れてた。これが代替かな。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14736&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;（追記）ってかテンキーレス出てた。これがほしかったんや。いまさらだけど。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14738&amp;rdquo;]&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;左右のCommandキーで英数とかなの変換&lt;/li&gt;&#10;&lt;li&gt;Emacsキーバインドと普通のショートカットの共存&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;つまり、US配列のキーボードを使っている時のMacと同じことを、Windowsでもやりたいわけだ。&lt;/p&gt;&#10;&lt;h2 id="emacsキーバインド"&gt;Emacsキーバインド&#10;&lt;/h2&gt;&lt;p&gt;WindowsでEmacsキーバインドを実現できるソフトウェアについては色々ある。XKeymacs、AutoHotkey、keyhac……一番ラクなのは設定がほとんど必要のないXKeymacsだと思われ、実際それを使っていた。が、今回は英かな変換もやりたい。そうすると、やはりAutoHotKeyやkeyhacを使ってちゃんとマッピングしたほうが良いだろう。最初は基本的なところはXKeymacsを使って、他は別のソフトを…なんて考えたりもしたのだが、AutoHotkeyを使ったソフト（「&lt;a class="link" href="https://www.karakaram.com/alt-ime-on-off" target="_blank" rel="noopener"&#10; &gt;WindowsのAlt空打ちで日本語入力(IME)を切り替えるツールを作った | karakaram-blog&lt;/a&gt;」）とXKeymacsを併用すると、おかしくなったので、まぁやっぱりキーのマッピングに関わるようなソフトウェアは一つに絞ったほうがよいのだろうと思う。&lt;/p&gt;&#10;&lt;p&gt;ということで、AutoHotkeyかkeyhacということになるのだが、keyhacのほうがpythonが使えて親しみやすかったのと、それを使ってEmacsキーバインドと英かな変換のそれぞれを実現している人がいたので、&lt;strong&gt;keyhacを使う&lt;/strong&gt;ことにした。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="https://sites.google.com/site/craftware/keyhac-ja" target="_blank" rel="noopener"&#10; &gt;Keyhac - Pythonによる柔軟なキーカスタマイズツール - craftware&lt;/a&gt;」をインストールしたら、「&lt;a class="link" href="https://www49.atwiki.jp/ntemacs/pages/25.html" target="_blank" rel="noopener"&#10; &gt;Windows の操作を emacs のキーバインドで行うための設定 （Keyhac版） - NTEmacs @ ウィキ - アットウィキ&lt;/a&gt;」の設定ファイル（力作！ありがとうございます）を有り難く使わせていただく。&lt;/p&gt;&#10;&lt;p&gt;これで、左CtrlキーでEmacsキーバインド、右Ctrlキーで通常のショートカットが使える。Win+R→shell:startupでスタートアップを開き、exeのショートカットを置いて&lt;strong&gt;Windows起動時にkeyhacが実行されるようにする&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;……XKeymacsより安定して動くなぁ……。&lt;/p&gt;&#10;&lt;h2 id="英かな変換"&gt;英かな変換&#10;&lt;/h2&gt;&lt;p&gt;次に、英かな変換。Windowsにおける英かな変換の実現方法で、もっともポピュラーなのは「変換・無変換キー」にIMEのON/OFFを割り当てるというやり方だろう。しかし、US配列のキーボードにそんなキーはない。中にはAX配列という特殊な配列をもとにカスタマイズする猛者もいるようなのだが（「&lt;a class="link" href="http://www.atmarkit.co.jp/ait/articles/0001/26/news001.html" target="_blank" rel="noopener"&#10; &gt;Windowsで右Altキーに［漢字］キーを割り当てる方法（AXキーボード設定を利用する方法）：Tech TIPS - ＠IT&lt;/a&gt;」、「&lt;a class="link" href="http://uchanote.blogspot.com/2015/08/us-ime-onoff.html" target="_blank" rel="noopener"&#10; &gt;Uchan Note: 日本語キーボードを US 配列で使いつつ、変換/無変換キーで IME ON/OFF&lt;/a&gt;」）、これは設定がややこしいうえに、右Ctrlが使えないなどあるそうなので（参考「&lt;a class="link" href="http://rest.seesaa.net/article/19391362.html" target="_blank" rel="noopener"&#10; &gt;AXドライバで英語キーボードを使う(Win10,7対応)：Ｇ&amp;rsquo;sのだらだらぐーたら日記 on blog&lt;/a&gt;」）、Emacsキーバインドとの共存を目指す今回の用途には向くまい。&lt;/p&gt;&#10;&lt;p&gt;まぁおとなしくkeyhacの設定でなんとかする。「&lt;a class="link" href="http://act2.affai.com/2017/02/08/194220/" target="_blank" rel="noopener"&#10; &gt;WindowsでMac風の日本語入力 | afainu.action.mark2&lt;/a&gt;」を参考にさせていただいた。参考の記事では、左Ctrlキーを単独で押すとIME/OFF、右Ctrlキーを単独で押すとIME/ON…としているが、ここでは&lt;strong&gt;後述するキー配置の問題&lt;/strong&gt;があるので、逆にした。つまり、左CtrlキーでIME/ON、右CtrlキーでIME/OFFとした。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def ime_on():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keymap.wnd.setImeStatus( 1 )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; def ime_off():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keymap.wnd.setImeStatus( 0 )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keymap_global[ &amp;#34;O-LCtrl&amp;#34; ] = ime_on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keymap_global[ &amp;#34;O-RCtrl&amp;#34; ] = ime_off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これをkeyhacの設定ファイルに追記すればよい。&lt;/p&gt;&#10;&lt;h2 id="キースワップ"&gt;キースワップ&#10;&lt;/h2&gt;&lt;p&gt;最後に、キーの配置を色々と変える。レジストリをいじるのはしんどいので、ChgKey（&lt;a class="link" href="https://forest.watch.impress.co.jp/library/software/changekey/" target="_blank" rel="noopener"&#10; &gt;「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜ライブラリ&lt;/a&gt;）を使わせていただいた。&lt;/p&gt;&#10;&lt;p&gt;設定については、実際に使うキーボードや好みもあるだろうが、自分の場合は以下のように変更した。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Caps Lock → Left Ctrl&lt;/li&gt;&#10;&lt;li&gt;Left Ctrl → Left Windows&lt;/li&gt;&#10;&lt;li&gt;Left Windows (Left Command) → Right Ctrl&lt;/li&gt;&#10;&lt;li&gt;Right Windows (Right Command) → Left Ctrl&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;右Windows（左Command）に左Ctrlを当てているのがミソ。こんな画面は感じ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/66c19942ab4ba346fdb64ccc04cde373.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;ChgKeyの画面&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Caps Lockと左Ctrlのスワップはよくある。ってかCaps Lockいらない。なので、左Ctrlには左Windowsキーをあてがった。で、左Windowsキー、つまり左Commandキーには右Ctrlキー。そして右Windowsキー、つまり左Commandには、左Ctrlキーをあてがう。&lt;/p&gt;&#10;&lt;p&gt;なんでかというと、英かな変換のため、左右Commandキーには別のキーをあてがう必要があるからだ。で、Ctrlキーを単独で押下した時には、英かな変換がされるようにすれば、やりたいことが達成される。&lt;/p&gt;&#10;&lt;h2 id="jisのがいいのかしらいやいや"&gt;JISのがいいのかしら…いやいや…&#10;&lt;/h2&gt;&lt;p&gt;ここに至るまでとても時間がかかった。それでもなんとかできたのは、色々な人の努力の賜物。本当に有り難いことです。&lt;/p&gt;&#10;&lt;p&gt;しかしそもそも日本語キーボードに慣れていればここまで苦労することもなかったよなぁというのも事実で、やはり日本人にはJIS配列なのかしら、などと思い悩む今日この頃（Macノートも店頭モデルの安くなったのが買えるし）。でも、自分はノートはJIS配列、デスクトップはUS配列で並行してここ数年やっているけれど、US配列のほうが合ったんだ。クォーテーションとかコロンとか、カッコの配置とか、使いやすいからかな。あと対照的で綺麗。&lt;/p&gt;&#10;&lt;p&gt;ということで、懲りずにUS配列のキーボードを使い続けるであろう。&lt;/p&gt;</description></item><item><title>Pandasで2列を比較してTrue/Falseの新たな列を作る。さらに1/0へのマッピング</title><link>https://hack-le.com/pandas-2-true-false-10/</link><pubDate>Fri, 27 Jul 2018 19:49:50 +0900</pubDate><guid>https://hack-le.com/pandas-2-true-false-10/</guid><description>&lt;p&gt;Pythonの便利なデータフレームのライブラリPandasを使って、2列の値を比較してTrue/Falseの新たな1列を作るやり方のメモ。また、他のシステムとの連携ではTrue/Falseじゃなくて1/0(or 0/1)が必要だったりするので、そのマッピングについても。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;python 3.7.0&lt;/li&gt;&#10;&lt;li&gt;panda 0.23.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="2列の比較"&gt;2列の比較&#10;&lt;/h2&gt;&lt;p&gt;以下のようなcsvを用意する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a,b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0,0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0,1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1,0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1,1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを読み込んで、データフレームdfの列名aと列名bについて比較し、同値であればTrue、異なる値であればFalseをなる列cを新たに作る。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; import pandas as pd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; df = pd.read_csv(&amp;#39;test.txt&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; df&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0 0 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1 0 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2 1 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3 1 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; df[&amp;#39;c&amp;#39;] = (df[&amp;#39;a&amp;#39;] == df[&amp;#39;b&amp;#39;])&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; df[&amp;#39;c&amp;#39;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0 True&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1 False&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2 False&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3 True&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Name: c, dtype: bool&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで、True、Falseで構成された列cが作られた。&lt;/p&gt;&#10;&lt;h2 id="truefalse---10-のマッピング"&gt;True/False -&amp;gt; 1/0 のマッピング&#10;&lt;/h2&gt;&lt;p&gt;Pythonにおいては、Trueは1でFalseは0。したがって、以下のように変換できる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; df[&amp;#39;c&amp;#39;] = df[&amp;#39;c&amp;#39;].astype(int)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; df[&amp;#39;c&amp;#39;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;True/Falseを1/0じゃなくて0/1にしたい場合は、最初のdf[&amp;lsquo;a&amp;rsquo;] == df[&amp;lsquo;b&amp;rsquo;]をdf[&amp;lsquo;a&amp;rsquo;] != df[&amp;lsquo;b&amp;rsquo;]にしたらよいだろう。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/17383094/python-pandas-numpy-true-false-to-1-0-mapping" target="_blank" rel="noopener"&#10; &gt;python pandas/numpy True/False to 1/0 mapping - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>S3で特定のバケットを誰でも読み取りできるようにするバケットポリシー</title><link>https://hack-le.com/s3-everyone-read/</link><pubDate>Tue, 24 Jul 2018 16:00:31 +0900</pubDate><guid>https://hack-le.com/s3-everyone-read/</guid><description>&lt;p&gt;Amazon S3のバケットについて、誰でも読み取りできるようにするためのバケットポリシーについてのメモ書き。jQueryなんかgetしたりなんだりするための設定も併せて。&lt;/p&gt;&#10;&lt;h2 id="s3の権限"&gt;S3の権限&#10;&lt;/h2&gt;&lt;p&gt;S3において、特に設定を変更せずにバケットを作成すると、非公開のバケットが作成される。普通はそれでよいのだが、公開用のバケットを作成したい時もある。&lt;/p&gt;&#10;&lt;p&gt;誰でも読み取りできるようなバケットにするには、コンソールでS3→バケットを選択し、「アクセス権限」タブより「バケットポリシー」で下記のようなjsonを記述する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6850&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1796&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/S3_Management_Console-1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;バケットポリシーの作成[/caption]&lt;/p&gt;&#10;&lt;pre&gt;`{&#13; "Version": "2012-10-17",&#13; "Statement": [&#13; {&#13; "Sid": "ReadThisBacketImg",&#13; "Effect": "Allow",&#13; "Principal": "*",&#13; "Action": "s3:GetObject",&#13; "Resource": "arn:aws:s3:::{バケット名}/*"&#13; }&#13; ]&#13; }&#13; &lt;code&gt;`&lt;/code&gt;&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでバケットがパブリックになる。&lt;/p&gt;&#10;&lt;h2 id="corsの設定"&gt;CORSの設定&#10;&lt;/h2&gt;&lt;p&gt;こういう設定をするバケットは、JavaScriptやらでGETしたい時もある。そういう時は、CORS(Cross-Origin Resource Sharing)の設定を行う。先と同様の手順で、「バケットポリシー」ではなく「CORSの設定」より、以下のxmlを記述する。&lt;/p&gt;&#10;&lt;pre&gt;`&lt;!--?xml version="1.0" encoding="UTF-8"?--&gt;&#13; &lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13; &lt;CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"&gt;&#13; &lt;CORSRule&gt;&#13; &lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt;&#13; &lt;AllowedMethod&gt;GET&lt;/AllowedMethod&gt;&#13; &lt;MaxAgeSeconds&gt;3000&lt;/MaxAgeSeconds&gt;&#13; &lt;AllowedHeader&gt;Authorization&lt;/AllowedHeader&gt;&#13; &lt;/CORSRule&gt;&#13; &lt;/CORSConfiguration&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このあたりの詳細については「&lt;a class="link" href="https://hack-le.com/s3-json-get/" &gt;AWS S3上のjsonファイルをgetJSONしたらNo ‘Access-Control-Allow-Origin’ header is present on the requested resourceと怒られた時の対応 – 或る阿呆の記&lt;/a&gt;」を参照。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>simpleMicroServiceRoleでDynamoDBをqueryする権限を与える</title><link>https://hack-le.com/simplemicroservicerole-query/</link><pubDate>Fri, 20 Jul 2018 11:54:07 +0900</pubDate><guid>https://hack-le.com/simplemicroservicerole-query/</guid><description>&lt;p&gt;AWSのLambdaでは実行ロールを用いてアクセス制御を行うわけだが、テンプレートポリシーのsimpleMicroServiceRoleを用いると、Cloud Watch LogsとDynamoDBの基本的な操作権限が与えられて便利だ。便利なのだが、Queryの権限がないので（Scanはあるのに）、その権限を追加するメモ。&lt;/p&gt;&#10;&lt;h2 id="queryの権限を与える"&gt;Queryの権限を与える&#10;&lt;/h2&gt;&lt;p&gt;AWSのLambdaでDynamoDBを操作したりなんだりするようなものを作ろうとしたとき、既存のロールとしてsimpleMicroServiceRoleあたりを使うサンプルが多いけれど、これはそのままだとdynamodb:Queryの権限がない。dynamodb:Scanはあるのに。&lt;/p&gt;&#10;&lt;p&gt;そこで、Queryの権限を与える必要がある。方法としては、simpleMicroServiceRoleの権限をいじるか、あるいはdynamodb:Scanを含むポリシーをアタッチしたロールを作成するか。全体的な影響を考えると、新たにロールを作ったほうが良いと思うが、まぁどちらも本質的にはdynamodb:Scanを含むポリシーをどうするか、というところだろう。&lt;/p&gt;&#10;&lt;p&gt;予め用意されているポリシーでは、まずAmazonDynamoDBFullAccessはもちろんQueryを含んでいる。しかし、これは中々強烈なロールなので抵抗がある。読み込みだけであれば、AmazonDynamoDBReadOnlyAccessもある。が、読み込みだけとはいえ明らかに使わない権限をたくさん与えてしまうことには変わりない。&lt;/p&gt;&#10;&lt;p&gt;ということで、dynamodb:Queryをもつポリシー作ったほうがよいかなと思うわけだが、既存のポリシーを改変するか、新たに作るか、まぁ新たに作ったほうが綺麗だとは思う。ポリシーはGUIで、IAMのポリシーの作成から割と楽に作れる。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6837&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;2002&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/IAM_Management_Console.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;Queryにチェック[/caption]&lt;/p&gt;&#10;&lt;p&gt;テーブルの権限もちゃんとすべきなのだろうけれど、うちの環境ではまぁ特に問題なさそうだったので「すべて」にチェックを入れた。&lt;/p&gt;&#10;&lt;p&gt;で、このポリシーをsimpleMicroServiceRoleにアタッチするか、あるいは新たにロールを作ってアタッチし、そのロールをLambdaに適用するか。まぁ手間を惜しまず新たに作るほうが綺麗なのには違いなかろうが……。&lt;/p&gt;&#10;&lt;p&gt;と言いつつ、自分はsimpleMicorServiceRoleにあるポリシー自体を改変して対応してしまった。&lt;/p&gt;&#10;&lt;p&gt;LambdaでDynamoDBの権限を確認してみる。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6838&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;586&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/Lambda_Management_Console.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;Queryがアクションに追加されている[/caption]&lt;/p&gt;&#10;&lt;p&gt;ちゃんと追加されている。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>pythonのpipで入れているもの</title><link>https://hack-le.com/pip/</link><pubDate>Fri, 20 Jul 2018 11:29:54 +0900</pubDate><guid>https://hack-le.com/pip/</guid><description>&lt;p&gt;Pythonのpipで入れているものについてのメモ。新しく環境作るときとかのための備忘録。&lt;/p&gt;&#10;&lt;p&gt;環境はPython3系。&lt;/p&gt;&#10;&lt;h2 id="venvできる"&gt;venvできる&#10;&lt;/h2&gt;&lt;p&gt;ログインシェル用の環境はvenvで切ってやる。&lt;/p&gt;&#10;&lt;h2 id="いれるもの"&gt;いれるもの&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;poetry&lt;/li&gt;&#10;&lt;li&gt;black&lt;/li&gt;&#10;&lt;li&gt;flake8&lt;/li&gt;&#10;&lt;li&gt;numpy&lt;/li&gt;&#10;&lt;li&gt;pandas&lt;/li&gt;&#10;&lt;li&gt;matplotlib&lt;/li&gt;&#10;&lt;li&gt;tqdm&lt;/li&gt;&#10;&lt;li&gt;pyyaml&lt;/li&gt;&#10;&lt;li&gt;テスト&#10;&lt;ul&gt;&#10;&lt;li&gt;pytest&lt;/li&gt;&#10;&lt;li&gt;pytest-mock&lt;/li&gt;&#10;&lt;li&gt;pytest-cov&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;xlsxwriter&lt;/li&gt;&#10;&lt;li&gt;openpyxl&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="そのほか"&gt;そのほか&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;git+&lt;a class="link" href="https://github.com/bitbankinc/python-bitbankcc.git" target="_blank" rel="noopener"&#10; &gt;https://github.com/bitbankinc/python-bitbankcc.git&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;bitbankのAPIのpythonラッパー&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>AWS Lambda + API Gateway で/hoge/{group}/{user}のように階層構造のREST APIでパスパラメータの受け渡し</title><link>https://hack-le.com/aws-lambda-api-pathparameters/</link><pubDate>Thu, 12 Jul 2018 20:11:27 +0900</pubDate><guid>https://hack-le.com/aws-lambda-api-pathparameters/</guid><description>&lt;p&gt;AWS系の記事を書くと、サービス名が入るのでどうしてもタイトルが長くなってしまうのがつらい。二時間ドラマでもここまで長くない。&lt;/p&gt;&#10;&lt;p&gt;AWS Lambda + API Gateway でREST APIを作るとして、/hoge/{group}/{user}のように、URI階層構造にして、かつ{group}と{user}をパスパラメータとして関数内で処理するようなパターンを考える。ちなみにLambdaはpython3で書いている。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;/hoge/{group}/{user}のようなAPIを作りたい&#10;&lt;ul&gt;&#10;&lt;li&gt;{group}と{user}は変数&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;{group}と{user}は関数内で変数（パスパラメータ）として利用する&lt;/li&gt;&#10;&lt;li&gt;AWS Lambda + API Gateway でつくる&#10;&lt;ul&gt;&#10;&lt;li&gt;Lambdaはpython3で書く&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;パスパラメータとして利用する時は、波括弧を使えば良い。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;既にLambdaで関数は作っているものとする。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;APIを作成する&lt;/li&gt;&#10;&lt;li&gt;リソースを作成する。ここではhogeとする&lt;/li&gt;&#10;&lt;li&gt;hogeを選択してアクションよりリソースを作成して子リソースを作成する&lt;/li&gt;&#10;&lt;li&gt;リソース名をgroup、リソースパスを{group}とする（波括弧で囲む）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/1f476df25f57392a29b45dcc0e5ea4a0.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;子リソースの作成&lt;/em&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;CORSの設定は適宜&lt;/li&gt;&#10;&lt;li&gt;リソースの作成する&lt;/li&gt;&#10;&lt;li&gt;同様にして、{group}の子リソースとして{user}を作成する&lt;/li&gt;&#10;&lt;li&gt;{user}にメソッドを作成してLambda関数と統合&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;メソッドの作成は適宜といえば適宜。&lt;/p&gt;&#10;&lt;h2 id="lambdaでパスパラメータを利用"&gt;Lambdaでパスパラメータを利用&#10;&lt;/h2&gt;&lt;p&gt;Lambdaでパスパラメータを変数として利用する時は、python3ではevent[&amp;lsquo;pathParameters&amp;rsquo;]で取り出す。今回のケースでは、groupとuserが、たとえば以下のように取り出せる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;group = event[&amp;#39;pathParameters&amp;#39;][&amp;#39;group&amp;#39;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;user = event[&amp;#39;pathParameters&amp;#39;][&amp;#39;user&amp;#39;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;他の言語でも似たような感じだろう。多分。&lt;/p&gt;&#10;&lt;p&gt;なお、Lambdaでテストする時は、API Gateway Proxyをテンプレートにして、JSONのpathParametersの項目を書き換えると良い。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>AWS Lambda + API Gateway でREST APIを作成し、値を渡してDynamoDBに書き込んでついでに返り値を得るサンプル</title><link>https://hack-le.com/aws-lambda-rest-dynamo/</link><pubDate>Mon, 09 Jul 2018 14:56:38 +0900</pubDate><guid>https://hack-le.com/aws-lambda-rest-dynamo/</guid><description>&lt;p&gt;やたらと長い表題になってしまったがこのとおり。AWS Lambda + API Gateway でREST APIを作成する。API経由で値をjsonで渡してDynamoDBに書き込み、さらに返り値をjsonで得られるようなサンプルを作成する。Lambdaはpython3.6で書く。&lt;/p&gt;&#10;&lt;p&gt;すっごいハマった……。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;REST APIを叩いて、DynamoDBに書き込みを行いたい。かつ、返り値を得て結果をホストマシンでも処理したい。&lt;/p&gt;&#10;&lt;p&gt;そのために、以下のような構成を組む。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6790&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;596&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/Untitled-Diagram.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;構成[/caption]&lt;/p&gt;&#10;&lt;p&gt;API Gateway + Lambda + DynamoDB。LambdaでDynamoDBに書き込みを行う。LambdaのトリガーをAPI Gatewayにする。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;ざっくりとした手順。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;DynamoDBでテーブルを準備する&lt;/li&gt;&#10;&lt;li&gt;Lambdaで関数の作成&lt;/li&gt;&#10;&lt;li&gt;API Gatewayの設定を確認&lt;/li&gt;&#10;&lt;li&gt;テスト用のhtmlを作成して実行&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以下に詳述。&lt;/p&gt;&#10;&lt;h3 id="dynamodbでテーブルを準備"&gt;DynamoDBでテーブルを準備&#10;&lt;/h3&gt;&lt;p&gt;コンソール画面より、「サービス」→「データベース」→「DynamoDB」より、テーブルを作成する。ここでは、以下のようなテーブルを作成する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;テーブル名：test&lt;/li&gt;&#10;&lt;li&gt;プライマリキー&#10;&lt;ul&gt;&#10;&lt;li&gt;パーティションキー：user_id（文字列）&lt;/li&gt;&#10;&lt;li&gt;ソートキー：op_date（文字列）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;テーブル設定…デフォルト設定の使用&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;「&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ReservedWords.html" target="_blank" rel="noopener"&#10; &gt;DynamoDB の予約語 - Amazon DynamoDB&lt;/a&gt;」に注意する。userとかdateとか予約語。&lt;/p&gt;&#10;&lt;h3 id="lambdaで関数の作成"&gt;Lambdaで関数の作成&#10;&lt;/h3&gt;&lt;p&gt;コンソール画面より、「サービス」→「コンピューティング」→「Lambda」より関数の作成。&lt;/p&gt;&#10;&lt;p&gt;ここでは、設計図よりテンプレートを選ぶ。microserviceで検索して、「microservice-http-endpoint-python3」を選び、以下のように設定。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;名前：testFunction&lt;/li&gt;&#10;&lt;li&gt;ロール：テンプレートから新しいロールを作成&#10;&lt;ul&gt;&#10;&lt;li&gt;ロール名：testRoleName&lt;/li&gt;&#10;&lt;li&gt;ポリシーテンプレート：シンプルなマイクロサービスのアクセス権限&#10;&lt;ul&gt;&#10;&lt;li&gt;これでCloudeWatchとDynamoDBが使えるようになる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;API Gatewayトリガー&#10;&lt;ul&gt;&#10;&lt;li&gt;新規APIの作成&#10;&lt;ul&gt;&#10;&lt;li&gt;API名　test_api&lt;/li&gt;&#10;&lt;li&gt;デプロイされるステージ　prod&#10;&lt;ul&gt;&#10;&lt;li&gt;prod…productの略。開発版ならdevとか&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;セキュリティ　オープン&#10;&lt;ul&gt;&#10;&lt;li&gt;認証なし。誰でも呼び出せる状態。テストなので&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;関数の作成。&lt;/p&gt;&#10;&lt;p&gt;以下のようにコードを書き換える。エラー処理などはほとんどしていない。&lt;/p&gt;&#10;&lt;pre&gt;`import boto3&#13; import json&#13; import datetime&#13; import os&#13; &#13; print('Loading function')&#13; dynamo = boto3.resource('dynamodb')&#13; table = dynamo.Table(os.getenv('TABLE_NAME'))&#13; &#13; def respond(err, res=None):&#13; return {&#13; 'statusCode': '400' if err else '200',&#13; 'body': err.message if err else json.dumps(res),&#13; 'headers': {&#13; 'Access-Control-Allow-Origin' : '*',&#13; 'Content-Type': 'application/json'&#13; },&#13; }&#13; &#13; &#13; def lambda_handler(event, context):&#13; # print("Received event: " + json.dumps(event, indent=2))&#13; &#13; operation = event['httpMethod']&#13; body = json.loads(event['body'])&#13; &#13; if operation == 'POST':&#13; data = {&#13; "user_id" : body['user'],&#13; "op_date" : datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),&#13; "status" : "success"&#13; }&#13; table.put_item(Item=data)&#13; return respond(None, data)&#13; else:&#13; return respond(ValueError('Unsupported method "{}"'.format(operation)))&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;テーブル名の読み込みでos.getenv()を使っている。環境変数はラムダのコード下に記述。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6793&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;845&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/1d729bfa64160ee09b8d68b63ee7987d.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;環境変数の記述[/caption]&lt;/p&gt;&#10;&lt;p&gt;グローバルスコープにデータベースの接続など処理の重たいものを書いておくと、ウォームスタートの時に負荷が軽くて済む。&lt;/p&gt;&#10;&lt;p&gt;respond()は返り値を記述するメソッド。ここで注意したいのは、headersに含まれる&lt;code&gt;'Access-Control-Allow-Origin' : '*'&lt;/code&gt;で、これがないとjqueryなどでうまく実行できない。理由はSame-Origin Policyという、同一ドメイン以外からのアクセスを制限するもので（でないと書き換え放題だし）、SOPとかCORSで調べたら色々出てくる。&lt;/p&gt;&#10;&lt;p&gt;lambda_handler()内がメインとなる部分で、eventに値が渡される。POSTの時だけdataをつくり、DynamoDBに書き込む処理を行う。そして、returnで返り値にもdata。&lt;/p&gt;&#10;&lt;p&gt;保存したら、一回テストしてみる。&lt;/p&gt;&#10;&lt;p&gt;テストイベントの設定で、イベント名を適当に決めて、以下のようにbody部分を&amp;quot;body&amp;quot;: &amp;ldquo;{&amp;quot;user&amp;quot;:&amp;quot;superman&amp;quot;}&amp;rdquo; とする。supermanは適当。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6795&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;368&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/0ad3edd089f2cafcdd9663642e26854b.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;bodyの編集[/caption]&lt;/p&gt;&#10;&lt;p&gt;これがテストデータとして渡されて、イベントが実行されるわけだ。&lt;/p&gt;&#10;&lt;p&gt;で、実行してstatusCodeで200が返ってきたらOK。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6796&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;731&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/3490ff1794e12d91671d77d82dc432ed.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;レスポンス[/caption]&lt;/p&gt;&#10;&lt;p&gt;userとしてsuperman、さらに実行した日時と、statusとしてsuccessの文字列を返している。&lt;/p&gt;&#10;&lt;p&gt;ついでにDynamoDBも見に行って、testテーブルにsupermanのデータが格納されていることも確認しておく。&lt;/p&gt;&#10;&lt;p&gt;ここまでできたら、LambdaはOK。&lt;/p&gt;&#10;&lt;h2 id="api-gatewayの設定を確認"&gt;API Gatewayの設定を確認&#10;&lt;/h2&gt;&lt;p&gt;「サービス」→「ネットワーキング&amp;amp;コンテンツ配信」からAPI Gateway。前節の関数の作成の時にAPIも作っているので、確認する。&lt;/p&gt;&#10;&lt;p&gt;作成したAPIのステージから、URLの呼び出しを確認する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6797&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;913&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/API_Gateway.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;URLの呼び出し[/caption]&lt;/p&gt;&#10;&lt;p&gt;このhttps://〜 下に、リソース名（この手順だとFunctionの名前になっている）を付けたものが叩くべきAPIとなる。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、&lt;strong&gt;ここでCORSの設定をすることもできるのだが、GETやPOSTを指定しないANYメソッドでは、その設定がきかない&lt;/strong&gt;。公式ドキュメント「&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-cors.html" target="_blank" rel="noopener"&#10; &gt;API Gateway リソースの CORS を有効にする - Amazon API Gateway&lt;/a&gt;」では以下のように説明される。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;上記の手順をプロキシ統合の ANY メソッドに適用すると、適切な CORS ヘッダーは設定されません。代わりに、Access-Control-Allow-Origin などの適切な CORS ヘッダーを返すには統合バックエンドに依存します。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;この手順だと、自動で作られるリソースのメソッドはANYであるため、Lambdaのほうでコードのheadersに自分でAccess-Control-Allow-Originを入れているのである。&lt;/p&gt;&#10;&lt;h2 id="テスト用のhtmlを作成"&gt;テスト用のhtmlを作成&#10;&lt;/h2&gt;&lt;p&gt;ユーザー名&amp;quot;local&amp;quot;を送信するだけのボタンを一つ設置する。&lt;/p&gt;&#10;&lt;pre&gt;`&lt;html&gt;&#13; &lt;head&gt;&#13; &lt;meta http-equiv="content-type" content="text/html; charset=utf-8"&gt;&#13; &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"&gt;&lt;/script&gt;&#13; &lt;script&gt;&#13; function postdata() {&#13; &#9;var data = {&#13; &#9;&#9;"user" : "local",&#13; &#9;};&#13; &#9;$.post(&#13; &#9;&#9;"ここにtestFunctionのURI",&#13; &#9;&#9;JSON.stringify(data),&#13; &#9;).done( function(json_data) {&#13; &#9;&#9;console.log(JSON.stringify(json_data));&#13; &#9;});&#13; return false;&#13; }&#13; &lt;/script&gt;&#13; &lt;/head&gt;&#13; &lt;body&gt;&#13; &lt;form onsubmit="return postdata();" id="myform"&gt;&#13; &#9;&lt;input type="submit" value="送信"&gt;&#13; &lt;/form&gt;&#13; &lt;/body&gt;&#13; &lt;/html&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;送信ボタンを押すと、&amp;ldquo;user&amp;quot;として&amp;quot;local&amp;quot;をPOSTする。URIのところだけ適切に編集する。ここで、&lt;strong&gt;AWS Lambdaはjsonをそのまま受け取れないので、JSON.stringify()で文字列になおしている&lt;/strong&gt;ことに注意。&lt;/p&gt;&#10;&lt;p&gt;作成したhtmlをブラウザで開き、ボタンを押すと、POSTしたuser名localと、実行した時間、successの文字列が、jsonで返ってくることを、デベロッパーツールのコンソールで確認する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6798&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1612&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/07/0c8b6fba4f28fcb628b4d3acda3ecc8e.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;実行結果[/caption]&lt;/p&gt;&#10;&lt;p&gt;テストは通るのにこちらでエラーが出るとしたら、何かと間違えている。たとえば以下が怪しい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Lambda関数側&#10;&lt;ul&gt;&#10;&lt;li&gt;Access-Control-Allow-Originをヘッダに含めるのを忘れている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ホストマシン側&#10;&lt;ul&gt;&#10;&lt;li&gt;渡すべきdataを間違えている（jsonのままとか、キー名typoとか）&lt;/li&gt;&#10;&lt;li&gt;URIを間違えている（コピペミスとか、関数名じゃなくてAPI名つけているとか。この手順だとリソースが関数名になっているはず）&lt;/li&gt;&#10;&lt;li&gt;jqueryの構文ミス&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;ありとあらゆるところでハマった&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ありがとうございました……。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/dyoshikawa/items/98b119eec207c8781482" target="_blank" rel="noopener"&#10; &gt;初めてAWS Lambda+API Gatewayをやってみてハマったポイント 返却JSON形式、CORS設定&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/serverless/serverless/issues/4614" target="_blank" rel="noopener"&#10; &gt;CORS / lambda issues 502 · Issue #4614 · serverless/serverless · GitHub&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4839964564&amp;linkId=cb0981adfd04ffe9ce9f569f77be8395" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4822239136&amp;linkId=bdc9061d7d26f85194fef94a65fc3d10" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;完全ソリューションガイドのほうは、概要を掴むのに参考にはなるがちょっと古い。そのまま実行はできない。CORSでハマる。サーバーレスアプリケーション開発ガイドのほうは、コードがpythonで助かった。</description></item><item><title>eclipseで進行中のプロジェクトをbitbucketで管理したい</title><link>https://hack-le.com/eclipse-git/</link><pubDate>Wed, 04 Jul 2018 12:11:29 +0900</pubDate><guid>https://hack-le.com/eclipse-git/</guid><description>&lt;p&gt;eclipseでローカルで開発しているプロジェクトを、bitbucketのリポジトリで管理したい。&lt;/p&gt;&#10;&lt;p&gt;eclipseにもgitにも慣れていない身の上。すごく、迷走しました……。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;macOS 10.13.5 High Sieera&lt;/li&gt;&#10;&lt;li&gt;eclipse 4.7.2&lt;/li&gt;&#10;&lt;li&gt;egit&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;現在ローカルで開発中のプロジェクトexampleを、bitbucketで管理するようにしたい。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;手順は以下。&lt;/p&gt;&#10;&lt;h3 id="最初にbitbucketに上げる"&gt;最初にbitbucketに上げる&#10;&lt;/h3&gt;&lt;p&gt;まずローカルで開発していたプロジェクトをbitbucketに上げる。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;bitbucketで管理用のリポジトリを作成する&lt;/li&gt;&#10;&lt;li&gt;Privateリポジトリを複数ユーザーで共有するなら、アクセス権限の設定もする&lt;/li&gt;&#10;&lt;li&gt;ローカルのプロジェクト内に.gitを作る&lt;/li&gt;&#10;&lt;li&gt;Team -&amp;gt; Share Project&amp;hellip;&lt;/li&gt;&#10;&lt;li&gt;Configure Git RepositoryにでUse or create repository in parent folder of projectにチェック&lt;/li&gt;&#10;&lt;li&gt;Projectを選択してCreate Repository -&amp;gt; Finish&lt;/li&gt;&#10;&lt;li&gt;commitしてbitbucketのリポジトリにpush&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="git-clone"&gt;git clone&#10;&lt;/h3&gt;&lt;p&gt;以下の手順でcloneする。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Package Explorerより右クリックから&lt;/li&gt;&#10;&lt;li&gt;Import&lt;/li&gt;&#10;&lt;li&gt;Git&lt;/li&gt;&#10;&lt;li&gt;Projects from Git&lt;/li&gt;&#10;&lt;li&gt;Clone URI&lt;/li&gt;&#10;&lt;li&gt;URIとか指定する&lt;/li&gt;&#10;&lt;li&gt;URIは https://共有するユーザ名@bitbucket.org/リポジトリのユーザ名/リポジトリ.git&lt;/li&gt;&#10;&lt;li&gt;Protocolはhttps、Port空欄&lt;/li&gt;&#10;&lt;li&gt;User、Password は共有するユーザのもの&lt;/li&gt;&#10;&lt;li&gt;ブランチを選ぶ&lt;/li&gt;&#10;&lt;li&gt;Local DestinationでDirectory、Initial branchを指定。Clone submodulesは適宜。Remote nameを指定&lt;/li&gt;&#10;&lt;li&gt;Cloneが終わるのを待つ&lt;/li&gt;&#10;&lt;li&gt;終わったら Import existing Eclipse projects でNext&lt;/li&gt;&#10;&lt;li&gt;Projectsを選んでFinish&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;運用していたらまた何か問題が起きそうな気もする。。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;本当に本当にありがとうございました…。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://seri.hatenablog.com/entry/2014/03/16/214202" target="_blank" rel="noopener"&#10; &gt;EclipseでGitHubとかGitBucketを使い始める方法 - White Box技術部&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>AWS S3上のjsonファイルをgetJSONしたらNo ‘Access-Control-Allow-Origin’ header is present on the requested resourceと怒られた時の対応</title><link>https://hack-le.com/s3-json-get/</link><pubDate>Thu, 28 Jun 2018 19:25:31 +0900</pubDate><guid>https://hack-le.com/s3-json-get/</guid><description>&lt;p&gt;AWSのS3上にjsonファイルを置いて、サーバーからjQuery.getJSONで読み込みに行ったところ、怒られた。セキュリティ上の問題から、クロスドメインを許さない、Same-Origin Policyのため。S3側で対応が必要。&lt;/p&gt;&#10;&lt;p&gt;以下、メモ。&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;AWSのS3上にjsonファイルを置いた。EC2インスタンスから、jQuery.getJSONでjsonファイルを読み込もうとした。&lt;/p&gt;&#10;&lt;p&gt;が、失敗。Chromeのデベロッパーツールのコンソールを見てみると、以下のようなエラー。&lt;/p&gt;&#10;&lt;pre&gt;`No ‘Access-Control-Allow-Origin’ header is present on the requested resource`&lt;/pre&gt;&#13;&#10;&lt;p&gt;なんだろう。&lt;/p&gt;&#10;&lt;h2 id="原因"&gt;原因&#10;&lt;/h2&gt;&lt;p&gt;Same-Origin Policyと呼ばれるルールに違反しているため。Originとは、プロトコル(httpsとか)、ホスト名(example.comとか)、ポート番号(80とか)のことで、これが違うところへのアクセスには制限がかかる。不便だなぁと思ったけれど、そうしないと、JavaScriptでやりたい放題だもんね。。&lt;/p&gt;&#10;&lt;p&gt;したがって、jQuery.getJSONに限らず、このエラーはWebの世界では何かと起きる。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;これに対応するには、相手側（今回で言うと、S3側）での設定が必要（内部的には、Access-Control-Allow-Originというヘッダーに、許可するホスト名を入れる）。具体的には、AWSのコンソールより、S3の対象のバケットのアクセス権限→CORSの設定で設定をいじる。CORSとはCross-Origin Resource Sharingの略。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6757&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1808&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/06/S3_Management_Console.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;CORSの設定[/caption]&lt;/p&gt;&#10;&lt;p&gt;で、以下のようにする。&lt;/p&gt;&#10;&lt;pre&gt;`&lt;!--?xml version="1.0" encoding="UTF-8"?--&gt;&#13; &lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13; &lt;CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"&gt;&#13; &lt;CORSRule&gt;&#13; &lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt;&#13; &lt;AllowedMethod&gt;GET&lt;/AllowedMethod&gt;&#13; &lt;MaxAgeSeconds&gt;3000&lt;/MaxAgeSeconds&gt;&#13; &lt;AllowedHeader&gt;Authorization&lt;/AllowedHeader&gt;&#13; &lt;/CORSRule&gt;&#13; &lt;/CORSConfiguration&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;最初のCORSConfigurationのところが変わる。リンク先を見てみると、何かアクセス制御っぽいことをしている。&lt;/p&gt;&#10;&lt;p&gt;これを保存すると、jsonファイルが取れるようになる。&lt;/p&gt;&#10;&lt;h2 id="参考リンク"&gt;参考リンク&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/17533888/s3-access-control-allow-origin-header" target="_blank" rel="noopener"&#10; &gt;amazon web services - S3 - Access-Control-Allow-Origin Header - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.muratayusuke.com/2011/05/28/access-control-allow-origin/" target="_blank" rel="noopener"&#10; &gt;AjaxでAccess-Control-Allow-Originのエラーを回避する方法&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.atmarkit.co.jp/ait/articles/1311/26/news007.html" target="_blank" rel="noopener"&#10; &gt;重要！ まずは「オリジン」を理解しよう (1/2)：HTML5時代の「新しいセキュリティ・エチケット」（1） - ＠IT&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://techracho.bpsinc.jp/baba/2013_12_23/15019" target="_blank" rel="noopener"&#10; &gt;社内勉強会でSOP (Same Origin Policy) の話をしました&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://semooh.jp/jquery/api/ajax/jQuery.getJSON/&amp;#43;url,&amp;#43;data,&amp;#43;callback&amp;#43;/" target="_blank" rel="noopener"&#10; &gt;jQuery.getJSON( url, data, callback ) - jQuery 日本語リファレンス&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>FESSで検索ないし更新のエイリアスを別のインデックスを付け替える</title><link>https://hack-le.com/fess-search-update/</link><pubDate>Thu, 28 Jun 2018 14:55:10 +0900</pubDate><guid>https://hack-le.com/fess-search-update/</guid><description>&lt;p&gt;FESSは検索用のインデックスと更新用のインデックス別々に作成することができる。ここでは、検索・更新用のインデックスから、別のインデックスを更新用にする手順のメモを書く。&lt;/p&gt;&#10;&lt;p&gt;FESSは11.4系。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;fess_docs1とfess_docs2があるとする。fess_docs1はsearchとupdateのエイリアスがある。つまり、検索も更新もfess_docs1で行っている。&lt;/p&gt;&#10;&lt;p&gt;ここで、更新用のインデックスをfess_docs1からfess_docs2にしたい場合を考える。&lt;/p&gt;&#10;&lt;p&gt;ダッシュボードのrestから、pathを_aliases、methodをPOSTにして、以下のjson形式のスクリプトを実行する。&lt;/p&gt;&#10;&lt;pre&gt;`&#13; {&#13; "actions": [&#13; {&#13; "remove": {&#13; "index": "fess_docs1",&#13; "alias": "fess.update"&#13; }&#13; },&#13; {&#13; "add": {&#13; "index": "fess_docs2",&#13; "alias": "fess.update"&#13; }&#13; }&#13; ]&#13; }&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;見てのとおり、fess_docs1からupdateをremoveして、fess_doc2にupdateをaddしている。これで、fess_docs1からfess_docs2にエイリアスが付け替わる。&lt;/p&gt;&#10;&lt;p&gt;成功すると、RESPONSEに{ - &amp;ldquo;acknowledged&amp;rdquo;: true } が返る。&lt;/p&gt;&#10;&lt;p&gt;ダッシュボードに戻って、インデックスのエイリアスが変わっているかどうかを確認。&lt;/p&gt;&#10;&lt;p&gt;同様の手順で、searchの付け替えも可能。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;p&gt;FESS、いまだによくわからず。。。&lt;/p&gt;</description></item><item><title>pythonでRSSフィードを取得し、画像がない場合、リンク先の記事から拾う</title><link>https://hack-le.com/python-rss/</link><pubDate>Fri, 22 Jun 2018 20:10:49 +0900</pubDate><guid>https://hack-le.com/python-rss/</guid><description>&lt;p&gt;pythonでRSSフィードを取得する。具体的にはhoge.rdfとか取得する。で、その中に画像情報が入っていない場合、リンク先の記事のまで飛んで、その中にある画像のURLを取得し、画像つき記事のみ出力してみるサンプル。&lt;/p&gt;&#10;&lt;h2 id="環境づくり"&gt;環境づくり&#10;&lt;/h2&gt;&lt;p&gt;python3系。pipで以下を入れておく。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;feedparser&#10;&lt;ul&gt;&#10;&lt;li&gt;feedのパースに使う&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;lxml&#10;&lt;ul&gt;&#10;&lt;li&gt;htmlのパースに使う&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;cssselect&#10;&lt;ul&gt;&#10;&lt;li&gt;css記法&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;任意のサイトのRSSフィードを取得する&lt;/li&gt;&#10;&lt;li&gt;feedparserで解析する&lt;/li&gt;&#10;&lt;li&gt;各記事について、リンク先の記事に飛ぶ&lt;/li&gt;&#10;&lt;li&gt;コンテンツ内で一番最初に表示される画像のURLを取得する&lt;/li&gt;&#10;&lt;li&gt;画像付きの記事のみ、任意の数出力する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="ソースコード"&gt;ソースコード&#10;&lt;/h2&gt;&lt;p&gt;架空のexample.com/index.rdfに対して行うとする。&lt;/p&gt;&#10;&lt;pre&gt;`import feedparser&#13; import lxml.html&#13; from urllib.request import urlopen&#13; from urllib.parse import urljoin&#13; import datetime&#13; &#13; &#13; class RssParser:&#13; def __init__(self):&#13; self._d = feedparser.parse('https://example.com/index.rdf')&#13; &#13; def to_dict(self):&#13; entries = [self._get_content(entry) for entry in self._d.entries]&#13; return entries&#13; &#13; def _get_content(self, entry):&#13; content = {}&#13; # 各entryの内容はサイトによる&#13; content['title'] = entry['title']&#13; content['link'] = entry['link']&#13; content['description'] = entry['summary']&#13; content['date'] = datetime.datetime.strptime(entry['updated'], "%Y-%m-%dT%H:%M:%S+09:00").strftime("%Y-%m-%d %H:%M:%S")&#13; content['img'] = self._get_img(content['link'])&#13; # print(content)&#13; return content&#13; &#13; def _get_img(self, link):&#13; tree = lxml.html.parse(urlopen(link))&#13; html = tree.getroot()&#13; # 画像URLの取得&#13; try:&#13; # urljoinで相対パス→絶対パス&#13; img = urljoin(link, html.cssselect('img.photo_table__img')[0].attrib['src'])&#13; # 画像がない場合はFalseが入る&#13; except(IndexError):&#13; return False&#13; return img&#13; &#13; def to_s(self):&#13; [print(entry) for entry in self._d.entries]&#13; &#13; if __name__ == '__main__':&#13; rp = RssParser()&#13; # rp.to_s()&#13; print(rp.to_dict())&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで、辞書形式で返ってくる。_get_content()の中身はサイトによってかなり変わるだろうから、適宜調整。&lt;/p&gt;&#10;&lt;p&gt;このうち、画像があるものについてだけ、任意の記事数だけ取得するクラスを作ってみる。Rss.parser.to_dict()の戻り値を引数にとる感じで。ついでなので、出力はjsonにする。&lt;/p&gt;&#10;&lt;pre&gt;`import json&#13; &#13; class Entry2Json:&#13; def __init__(self):&#13; pass&#13; &#13; # quantity: 出力する記事数&#13; def to_json(self, entries, quantity=6):&#13; contents = []&#13; for entry in entries:&#13; if not entry['img']:&#13; continue&#13; contents.append(entry)&#13; if len(contents) &gt;= quantity:&#13; break&#13; print(json.dumps(contents, ensure_ascii=False, indent=4))&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;json.dumpsは日本語のためにensure_ascii=Falseにしている。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考リンク"&gt;参考リンク&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://shuzo-kino.hateblo.jp/entry/2016/08/30/221758" target="_blank" rel="noopener"&#10; &gt;urljoinでURL文字列の細工をする - Bye Bye Moore&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://iyukki.blog56.fc2.com/blog-entry-137.html" target="_blank" rel="noopener"&#10; &gt;python2.6でdictionaryをjson化した際、日本語が\uXXXXにエスケープされないようにする CodingFirst&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/yoshiyakato/items/14f88a81bbbffb73520d" target="_blank" rel="noopener"&#10; &gt;pythonで時刻文字列をパースする３つの方法【備忘録】&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>AWSのELBでセッション維持の設定（スティッキーセッション）</title><link>https://hack-le.com/sticky-session/</link><pubDate>Tue, 19 Jun 2018 12:05:58 +0900</pubDate><guid>https://hack-le.com/sticky-session/</guid><description>&lt;p&gt;AWSではELBを用いることで、簡単に負荷分散・冗長化した構成ができる。ただ、セッション管理を前提としたシステムにおいては、セッションの途中で別のEC2インスタンスに当てられたらどうするの？という問題がある。基本的にはキャッシュサーバーを別にたてるのが良いようだが、それだと何かとコストがかかるので、手っ取り早いやり方として、スティッキーセッションの設定がある。&lt;/p&gt;&#10;&lt;h2 id="背景"&gt;背景&#10;&lt;/h2&gt;&lt;p&gt;AWSは簡単にELBを使って冗長構成を取れて便利だが、セッション管理をしているシステムだと、セッション途中でサーバーが変わってしまうことも考慮しないといけない。正攻法ではAmazon ElastiCache等使ってキャッシュサーバーを別途たてることだろうが、そうするといろいろとコストもあるので、もう少し手軽になんとかしたい。&lt;/p&gt;&#10;&lt;p&gt;その場合、スティッキーセッションを張るように設定する。具体的には、同一のセッションについては同じサーバーで処理するようにする。ELBがセッションIDから判別してよしなにしてくれるらしい。&lt;/p&gt;&#10;&lt;h2 id="設定"&gt;設定&#10;&lt;/h2&gt;&lt;p&gt;具体的な設定。&lt;/p&gt;&#10;&lt;p&gt;EC2→ロードバランシング→ターゲットグループより、セッションを維持したいターゲットグループを選択。「説明」タブより、「属性」の「維持設定」を有効化させる。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6727&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1498&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/06/EC2_Management_Console.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;デフォルトは無効になっている[/caption]&lt;/p&gt;&#10;&lt;p&gt;セッション時間は設定できる。30分くらいにしておけば十分か。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#sticky-sessions" target="_blank" rel="noopener"&#10; &gt;Application Load Balancer のターゲットグループ - Elastic Load Balancing&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://blog.serverworks.co.jp/tech/2017/01/05/elb-sticky/" target="_blank" rel="noopener"&#10; &gt;【基礎から学ぶ】ELBのスティッキーセッションについてまとめてみた – サーバーワークスエンジニアブログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4797392576&amp;linkId=904d01bc48e64537f5d0236c5b914f40" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;Amazon Web Services パターン別構築・運用ガイド。2冊目の入門書として良い本。</description></item><item><title>MacBook Pro 2018を待っている</title><link>https://hack-le.com/mbp-2018/</link><pubDate>Mon, 18 Jun 2018 00:45:01 +0900</pubDate><guid>https://hack-le.com/mbp-2018/</guid><description>&lt;p&gt;自分の今のメインノートはMacBook Air 2013 11inchモデルだ。さすがに色々とつらいところがあって、Webブラウジング一つとってももたつくし、電源もヘタっていて、あまり快適とは言い難い状況。&lt;/p&gt;&#10;&lt;p&gt;なので買い替えたいなぁと思っているのだが、そろそろMacBook Pro 2018が出てもおかしくないし、そうしたらIntel的な理由で13インチでも4コアになっている可能性が高いと思うと、もうしばらくは待つかなぁという感じだ。&lt;/p&gt;&#10;&lt;h2 id="不満もあるけれど当面ノートはmacで"&gt;不満もあるけれど、当面、ノートはMacで&#10;&lt;/h2&gt;&lt;p&gt;自分はもうかれこれ8年近くMacを使い続けているけれど、ここ数年のMacについては大きな不満がある。愛用のデスクトップマシンMac mini 2012は非常に良いマシンでとても気に入っているけれど、まさかMac miniが2018年6月現在に至るまで進化しないとは思わなかった。Mac Proも2013で基本は打ち止め状態で、「&lt;a class="link" href="https://forbesjapan.com/articles/detail/16704" target="_blank" rel="noopener"&#10; &gt;ジョブズ亡きアップルが犯した「最大の過ち」とティム・クックの限界 | Forbes JAPAN（フォーブス ジャパン）&lt;/a&gt;」の記事が書かれたのは去年の今頃だが、あの頃から状況は何も変わっていない。&lt;/p&gt;&#10;&lt;p&gt;ここ数年のAppleの大きな変化といえば、やはりスティーブ・ジョブズからティム・クックへの交代だろう。トップの影響はとても大きいもので、Microsoftなんかはスティーブ・バルマーからサティア・ナデラにCEOが交代してからというもの、ずいぶんと評判がよくなった。先日githubがMSに75億ドルに買収されて、一昔前ならお通夜になっていたかもしれないが、「&lt;a class="link" href="https://www.linuxfoundation.org/blog/microsoft-buys-github-the-linux-foundations-reaction/" target="_blank" rel="noopener"&#10; &gt;Microsoft Buys GitHub: The Linux Foundation&amp;rsquo;s Reaction - The Linux Foundation&lt;/a&gt;」ではpretty good new for the world of Open Sourceなんて書かれるくらいにMSは変わった（それは受け止める側もだろうけれど）。WSLはとても良いものだし。ハードも、Surfaceも3くらいからはだいぶ熟れてきたようであるし。初代で痛い目を見た思い出があるから、自分は買わないけれど。&lt;/p&gt;&#10;&lt;p&gt;だから、今のMacの体たらくぶりもクックの影響が大きいと考えないわけにはいかない。しかし、ジョブズもエンジニアではなかったし、ジョブズとクックの間でPCに対するスタンスが大きく異なっているわけでもなさそうなのに、実際のプロダクトがどうしてこんなにも違うのだろうかと不思議に思う。&lt;/p&gt;&#10;&lt;p&gt;まぁ色々とあるのだろうが、考えても仕方のないことであるし、とにかくPCを新調する時期だった。それで、デスクトップはWindowsマシンを購入してしまったものの、ノートパソコンについてはそれほどのハイスペックを求めているわけではないので、OSの使いやすさで、なんだかんだ言いつつ次もMacを選びたいと思っている。&lt;/p&gt;&#10;&lt;h2 id="そろそろ13インチで4コアきそうなので待つことにする"&gt;そろそろ13インチで4コアきそうなので、待つことにする&#10;&lt;/h2&gt;&lt;p&gt;自分の用途だと、MacBookはちょっとスペック的に心許ないところがあるので（ローズゴールドちょっと欲しいけれど）、買うとすれば13インチのMacBook Pro（Touch Barなし）なのだが、これがちょうどCPUが大きく刷新される時期なので、少なくとも次のモデルまでは待ちたいところだ。具体的には、ついに4コアの13インチMacが期待できる。これはAppleが、というよりIntel、というよりAMDのおかげだろう。&lt;/p&gt;&#10;&lt;p&gt;今月のWWDCで発表があるかも、という噂は否定されつつも期待はされていたが、やはり何もなく、それなら9月あたりに出てくれないものだろうかという気持ちもあるが、デスクトップを4,5年くらい平気で放置するのが今のAppleだから、どうなるかはわからない。まぁでも、ノートはデスクトップよりかはまだ大事にされているようなので、年内くらいには出るのではないかと期待しており、ひとまずは待つつもりだ。&lt;/p&gt;&#10;&lt;p&gt;ただ、将来的にはそのうち脱Macをしてしまうのかもしれない、とも思う。Chromebookが正式にLinuxに対応する、なんてニュースも最近は駆け巡っていて、それは自分にとって非常に魅力的な話だ。そうしたら、メインノートがChromebookという選択肢も現実味を帯びるかもしれない。少なくともGoogleは、スマートフォン全盛の現在においても、PCの未来を本気で考え続けてくれているようだし。できればMacを使い続けたいと、思っているのだがなぁ……。&lt;/p&gt;</description></item><item><title>Xperia Z3(SO-01G)のUSB防水キャップをドコモショップで交換</title><link>https://hack-le.com/so-01g-usb/</link><pubDate>Sun, 17 Jun 2018 14:23:27 +0900</pubDate><guid>https://hack-le.com/so-01g-usb/</guid><description>&lt;p&gt;（この話は2017年の秋頃の話なのだが、ブログを整理していたら下書きのままだったことに気づいたので、今更上げる）&lt;/p&gt;&#10;&lt;p&gt;Xperia Z3のmicroUSBには防水キャップがついている。このパッキン部分は消耗部品であるので、開閉を繰り返しているうちにパカパカになってしまう。使用し始めて二年半、ついにパカパカになってしまった。&lt;/p&gt;&#10;&lt;p&gt;Amazonで怪しげなキャップが売っているのだが、私が持っているドコモ版のSO-01Gは、白ロムで使っていてもドコモショップに持っていけば部品を交換してくれるらしいという情報を得た。持っていくと、若干手間取ったが、確かにきちんと交換してくれた。&lt;/p&gt;&#10;&lt;h2 id="パカパカになった"&gt;パカパカになった&#10;&lt;/h2&gt;&lt;p&gt;パカパカ。Xperia Z3の防水キャップがパカパカ。もちろんこれでは防水も何もあったものではない。見た目にも悪いし、交換しなくてはいけない…。&lt;/p&gt;&#10;&lt;p&gt;で、調べて見るとAmazonやらなんやらで数百円で売っている。売っているのであるが、どうも正規品というわけでもなさそうだし、また作業として難しくはないが、若干勇気のいる類のもののようだ。うーん、これは。&lt;/p&gt;&#10;&lt;p&gt;が、Amazonのレビューを読んでいると、買うまでもなくドコモショップに行ったら交換してもらえた、という旨の書き込みがあった。&lt;/p&gt;&#10;&lt;p&gt;なるほど。確かに、よくよく考えてみるとこれはメーカー（ないしそれに準じるところの）サポートの範疇に思える。消耗品だし。少なくとも、ショップにいけば正規の予備品はあって然るべきだ。&lt;/p&gt;&#10;&lt;h2 id="ドコモとは契約していないが"&gt;ドコモとは契約していないが&#10;&lt;/h2&gt;&lt;p&gt;ただ、一つ気にかかることがあった。DoCoMoと契約していないことである。SO-01Gは紛れもなくDoCoMoの端末ではあるものの、自分はこれを中古で入手し、IIJと契約している。この状態でも、DoCoMoショップは対応してくれるものなのだろうか。&lt;/p&gt;&#10;&lt;p&gt;…が、ネットで調べていると、問題なく対応してくれた、という体験談がチラホラ。どうやら、いけるらしい。&lt;/p&gt;&#10;&lt;p&gt;ということで、休日にブラブラとDoCoMoショップに向かった。DoCoMoショップにきたのはいったいいつぶりだろうか。休日とはいえ、その盛況ぶりには驚く。まさか皆が皆外れたキャップを付け替えに来てもらったわけではもちろんない。店員さんと熱心に新商品について話している人もいるが、わざわざDoCoMoショップで知るほどのこともあるまいに。いったいなんのために通信費用を払っているのか。DoCoMoの高い通信費は畢竟彼らのサポート費用なんだなぁと思うと、やはり自分にはMVNOしかないのだと実感する。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、こういう時にサポートしてもらえるのは有り難いことである。手間暇と時間を考えれば、普通にAmazonで正規品がメーカーから売られていればいいのになぁとも思うが。&lt;/p&gt;&#10;&lt;h2 id="無事終了が"&gt;無事終了、が…&#10;&lt;/h2&gt;&lt;p&gt;整理券を引いてしばらく待った後、事情を話すと、情報どおり、快く付け替えをしてもらえた。店員さんにスマホを預けたら、すべてやってくれた。ただ、住所やら電話番号やらは書かなくてはいけなかった。これは自分がDoCoMoのなんとか番号をもっていなかったからだろう（大昔にDoCoMoと契約していたことはあったが…契約切れても残っているものなのだろうか）。&lt;/p&gt;&#10;&lt;p&gt;付け替え後、まったく元通りの使用感というわけにはいかなかったが、少なくとも防水機能は復活したように思えた。これでまたしばらく使えるな、と思った矢先、酔って転んで破損させるという情けない事態に見舞われ、Xperia Z3はその役目を終えることになるのであった。&lt;/p&gt;</description></item><item><title>Excelのドラッグによるコピー操作で謎の文字化け</title><link>https://hack-le.com/excel-copy-drag-error/</link><pubDate>Mon, 04 Jun 2018 15:37:41 +0900</pubDate><guid>https://hack-le.com/excel-copy-drag-error/</guid><description>&lt;p&gt;いつものようにExcelファイルを自作のpythonスクリプトで取り込んでいたところ、「UnicodeEncodeError」。UTF-8で処理できないコードポイントの文字があるよ、と。嫌なエラーが出たなぁ、なんか変な文字使っているのかなぁ、などと思いつつ見ていたら、やはり文字化け。しかしその文字化けの原因が、ドラッグでコピー操作したから、というなんともよくわからないものだった。&lt;/p&gt;&#10;&lt;h2 id="謎の文字化け"&gt;謎の文字化け&#10;&lt;/h2&gt;&lt;p&gt;よく意味がわからない。Windows 10, Excel 2016の環境下での出来事だ。&lt;/p&gt;&#10;&lt;p&gt;Excelには、ドラッグすることで、セルの内容（文字列）を他のセルにコピーできる機能がある。まぁ、表計算ソフトではおなじみの機能だ。なのだが、どうも、それで不思議な文字化けの現象が起きた。&lt;/p&gt;&#10;&lt;p&gt;具体的に言うと、&lt;/p&gt;&#10;&lt;p&gt;あいうえおかきくけこさしすせそ&lt;/p&gt;&#10;&lt;p&gt;というような文字列を、ドラッグで他のセルにコピーしていくように操作したところ、&lt;/p&gt;&#10;&lt;p&gt;あいうえおかきくけこさｊ３おｄ；&lt;/p&gt;&#10;&lt;p&gt;というように、文字列の途中から、どういうわけか突然の文字化けが生じたらしい。これは再現性があり、どうやっても文字化けする。なぜ？&lt;/p&gt;&#10;&lt;p&gt;そして、Ctrl-c + Ctrl-v でコピー&amp;amp;ペーストをすると、これは正常にコピーできた。つまり、ドラッグによるコピーの操作の時だけ、文字化けする。おう？？&lt;/p&gt;&#10;&lt;h2 id="他の表計算ソフトでは文字化けしない"&gt;他の表計算ソフトでは文字化けしない&#10;&lt;/h2&gt;&lt;p&gt;ためしに、OSを変えてMac環境下、iWorkのNumbersを使用して、同様の操作を行ったところ、これは正常にコピーできた。&lt;/p&gt;&#10;&lt;p&gt;次に、Google スプレッドシートを使って開き、同様の操作を行ったところ、これも正常にコピーできた。&lt;/p&gt;&#10;&lt;p&gt;……いったい、なんだろう？&lt;/p&gt;&#10;&lt;p&gt;Windowsは文字コード関係が鬼門なので、内部で何かしら悪いことが起きているのかもしれないが、文字列の途中から、というのがなんとも不思議だ。Ctrl-c + Ctrl-v なら何の問題もないし……。&lt;/p&gt;&#10;&lt;p&gt;正直、理由が皆目見当つかない。本当にただの文字列で、間に計算式が入っているわけでもないのに。この現象を回避するには、やはりExcelを使わないという選択しかあるまい（ぶん投げ）。&lt;/p&gt;&#10;&lt;p&gt;いや実際、どうしようか。。。&lt;/p&gt;&#10;&lt;p&gt;ところで、Excelでドラッグによるコピーなんかをするときに表示されるあの黒い十字は、フィルハンドルというらしい。初めて知った（「&lt;a class="link" href="https://support.office.com/ja-jp/article/%e3%83%95%e3%82%a3%e3%83%ab-%e3%83%8f%e3%83%b3%e3%83%89%e3%83%ab%e3%81%ae%e8%a1%a8%e7%a4%ba%e3%81%a8%e9%9d%9e%e8%a1%a8%e7%a4%ba%e3%82%92%e5%88%87%e3%82%8a%e6%9b%bf%e3%81%88%e3%82%8b-80918200-9ae9-4615-93c9-13d4f1496f81?ui=ja-JP&amp;amp;rs=ja-JP&amp;amp;ad=JP" target="_blank" rel="noopener"&#10; &gt;フィル ハンドルの表示と非表示を切り替える - Excel&lt;/a&gt;」）。どうでもいいっちゃいいけれど。なんでも、名前があるものだ。&lt;/p&gt;</description></item><item><title>オフィスソフトをGoogle系に移行している</title><link>https://hack-le.com/office-google/</link><pubDate>Sat, 02 Jun 2018 16:17:53 +0900</pubDate><guid>https://hack-le.com/office-google/</guid><description>&lt;p&gt;自分はMac使いなので、MS Officeはあまり有り難くない。そもそもオフィスソフトにあまり大金を払えない。ということで、昔はLibreOfficeを愛用していたが、どうもMacで使っていると異常に重く、iWorkに移行した。が、最近またWindowsを購入し、私用デスクトップのメインに据えたことで、Mac用のiWorkでは具合が悪くなってきた。といって、ノートはMacから変える気はないし、仕事では依然Macがメインである。&lt;/p&gt;&#10;&lt;p&gt;……で、最近仕事で使ってみたら思った以上に使えたこともあり、今はGoogle系のオフィス環境に移行している。&lt;/p&gt;&#10;&lt;h2 id="クロスプラットフォームのオフィスを求めて"&gt;クロスプラットフォームのオフィスを求めて&#10;&lt;/h2&gt;&lt;p&gt;記事冒頭に書いたとおりの流れなのだが、WindowsでもMacでも使えるオフィス環境として、現在Google系をメインにできるように移行作業をしている。iWorkはWindowsでは使えず、LibreOfficeはどういうわけかMacでは重く（High Sierraにしてからの気がする）、MS Officeは高い。自分は元々オフィスソフトが好きではなく、これのために大金を払おうと中々思えない。&lt;/p&gt;&#10;&lt;p&gt;まぁ自分のオフィスソフトに対する苦手意識は、オフィスソフトそのものが嫌いだったからというより、正しい使われ方をしていないドキュメントがあまりにも多すぎるから、そしてまた自分も、正しい使い方を知るまでに時間がかかったから、だと思う。&lt;/p&gt;&#10;&lt;p&gt;具体的には、Wordで作るべき資料をExcelで作っていたり、Wordを使っていると思ったらスタイルを利用しておらず、太字が使えるメモ帳みたいな使われ方をしていたり、といった具合に。&lt;/p&gt;&#10;&lt;p&gt;きちんと使えばきちんと使えるものだと知ったので、今となっては便利なソフトだと思うようになった。しかし、個人利用ではMS Officeを買うほどのものでもないなぁ、Linuxでも使えないしなぁ（今デスクトップLinux使っていないのに）、などとも思うので、できれば金をかけずに済ませたいものだなぁ、と。&lt;/p&gt;&#10;&lt;p&gt;そうすると、自然とGoogle系のオフィスが選択肢と浮かび上がる。Google ドキュメントにGoogle スプレッドシート、など。&lt;/p&gt;&#10;&lt;h2 id="googleがいい"&gt;Googleがいい&#10;&lt;/h2&gt;&lt;p&gt;これまでにも何度か使おうとしたことはあったのだけれど、やはり使い勝手そのものはスタンドアロンのアプリのほうが良いと思うことが多かった。それは重いファイルの読み込み速度であるとか（特にMS Officeはここが強いと思う）、表計算ソフトで次の行にうつった時に、上の行の関数が自動的に適用される気の利いた小機能であるとか、そういうちょっとしたところだけれど、使い勝手というのはちょっとしたことの積み重ねなので、まぁ積極的にGoogle ドキュメントやらを使おう、とは思わなかったわけだ。&lt;/p&gt;&#10;&lt;p&gt;しかし、現在、状況としてスタンドアロンのアプリでは、クロスプラットフォームという面で難がある。そして、最近は仕事でGoogleドキュメントやらGoogle スプレッドシートやらを多用して、チーム作業で有効であるということのみならず、機能的にはスタンドアロンのアプリを凌駕するところもあると思うようになり（たとえば「&lt;a class="link" href="https://hack-le.com/gdoc-syntax/" &gt;Google ドキュメントでコードをシンタックスハイライト – 或る阿呆の記&lt;/a&gt;」とか…）、本格的にメインのオフィス環境として使い始めることにした。&lt;/p&gt;&#10;&lt;p&gt;本格的なドキュメント（たとえば100ページを超えるような）を作成するとなると、機能的にまだ不十分なところがあるかなと思うのだけれど、私用で作成するファイルなどたかがしれているので、十分だ。移行の際、iWorkのファイルはいったんMS Officeの形式に変換するなどひと手間挟むものの、まぁそれさえしてしまえば、レイアウトにこだわったファイルを作っているわけでもないので、大した問題ではない。というか、フォーマット変換のレイアウト崩れが大きな問題となる場合、それは別のソフトウェアで作るべきものである可能性があると思う。&lt;/p&gt;&#10;&lt;p&gt;誰もが持っているだろうGoogleアカウントさえあれば使えるので、これからは皆、これを使えばいいと思うのだけれど、そのためにはクラウドやWebアプリといった概念に対する理解が必要なので、情報技術に疎い人に勧めるには若干敷居が高い……。&lt;/p&gt;&#10;&lt;h2 id="webアプリは良い"&gt;Webアプリは良い&#10;&lt;/h2&gt;&lt;p&gt;スマホ（のアプリ）の隆盛により、もはやなんでもかんでもWebアプリで、という流れではなくなったと思うけれど、ことPCにおいては、Webアプリの有用性は非常に大きいと思う。PCの環境依存問題は大きいので、Webブラウザさえあれば良し、というのはたいへん素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;GoogleがAndroidを持ちながら、今なおChromebookの開発を続け、Webの可能性を追求し続けていることは非常に心強い。&lt;/p&gt;&#10;&lt;p&gt;やっぱり、Chromebook、ほしいなー……。&lt;/p&gt;</description></item><item><title>MySQLクライアントでAWSのRDSに接続</title><link>https://hack-le.com/mysql-aws-rds-conn/</link><pubDate>Thu, 31 May 2018 17:43:06 +0900</pubDate><guid>https://hack-le.com/mysql-aws-rds-conn/</guid><description>&lt;p&gt;MySQLクライアント、ここではSequel Pro 1.1.2およびMySQL Workbench 6.3で、AWS上のRDSに、EC2をSSHで踏み台にして接続する時の設定メモ。設定するのに必要な項目をおさえておけばどのソフトウェア使ってもだいたい一緒。当たり前だけれど。&lt;/p&gt;&#10;&lt;h2 id="用意"&gt;用意&#10;&lt;/h2&gt;&lt;p&gt;ネットワーク構成。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6636&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;573&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/05/5c80cb217c74904fecc4e3cdca162b04-1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;ネットワーク構成[/caption]&lt;/p&gt;&#10;&lt;p&gt;踏み台を経由してRDSのDBに接続する。なのでローカルにはMySQLが入っていること。あらかじめ、以下のものを用意しておく。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;EC2のIPアドレス&lt;/li&gt;&#10;&lt;li&gt;EC2の鍵&lt;/li&gt;&#10;&lt;li&gt;RDSのエンドポイント&lt;/li&gt;&#10;&lt;li&gt;データベースのユーザ名、パスワード&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;それぞれAWSのコンソールから確認する。&lt;/p&gt;&#10;&lt;h2 id="sequel-proの場合"&gt;Sequel Proの場合&#10;&lt;/h2&gt;&lt;p&gt;Sequel Pro 1.1.2&lt;/p&gt;&#10;&lt;p&gt;Mac用のMySQLクライアントSequel Proでは、タブを+で開き、以下のような画面で情報を入力する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6637&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;884&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/05/Sequel_Pro.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;Sequel Pro[/caption]&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;名前…なんでもよい&lt;/li&gt;&#10;&lt;li&gt;MySQLホスト…RDSのエンドポイント&lt;/li&gt;&#10;&lt;li&gt;ユーザ名…DBを接続するユーザー名&lt;/li&gt;&#10;&lt;li&gt;パスワード…上記ユーザーのパスワード&lt;/li&gt;&#10;&lt;li&gt;SSHホスト…踏み台にするEC2インスタンスのIPアドレス&lt;/li&gt;&#10;&lt;li&gt;SSHユーザ…ec2-user&lt;/li&gt;&#10;&lt;li&gt;SSH鍵…EC2インスタンスの秘密鍵&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ポート設定などはデフォルトのままなら特にいじらない。&lt;/p&gt;&#10;&lt;p&gt;これで接続できる。お気に入りに追加しておくと楽。&lt;/p&gt;&#10;&lt;h2 id="mysql-workbenchの場合"&gt;MySQL Workbenchの場合&#10;&lt;/h2&gt;&lt;p&gt;MySQL Workbench 6.3&lt;/p&gt;&#10;&lt;p&gt;個人的にはあまり使わないが、Windowsの人に教える用で時々使う。まずMySQL Connectionsに登録する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6639&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;2056&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/05/e21794a834b9033666ab97cd3337b367.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;MySQL Workbenchを開いたところ[/caption]&lt;/p&gt;&#10;&lt;p&gt;で、情報を入力する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6640&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1778&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/05/467dcf38add5c00e8ffe4604991a7cb8.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;MySQL Workbenchの接続情報を入力する画面[/caption]&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Connection Name…なんでもよい&lt;/li&gt;&#10;&lt;li&gt;Connection Method…Standard TCP/IP over SSH&lt;/li&gt;&#10;&lt;li&gt;SSH Hostname…EC2インスタンスのIPアドレス&lt;/li&gt;&#10;&lt;li&gt;SSH Username…ec2-user&lt;/li&gt;&#10;&lt;li&gt;SSH Password…なし&lt;/li&gt;&#10;&lt;li&gt;SSH Key File…EC2インスタンスの秘密鍵のパス&lt;/li&gt;&#10;&lt;li&gt;MySQL Hostname…RDSのエンドポイント&lt;/li&gt;&#10;&lt;li&gt;MySQL Server Port…3306（デフォルト）&lt;/li&gt;&#10;&lt;li&gt;Username…DBに接続するユーザ名&lt;/li&gt;&#10;&lt;li&gt;Password…DBに接続するユーザのパスワード&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Test Connectionして接続。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>ガラスフィルムでiPhoneを守る。守った。お勤めご苦労様でした</title><link>https://hack-le.com/iphonefilm/</link><pubDate>Thu, 24 May 2018 11:05:46 +0900</pubDate><guid>https://hack-le.com/iphonefilm/</guid><description>&lt;p&gt;先日iPhoneのガラスフィルムを交換した。半年ほど使っての交換なので、これが早いと思うか遅いと思うかちょうどよいと思うかは人によると思うが、まぁ早い気がする。ただまぁ、状態的にはよく働いてくれたなぁという感じ……剥がした後のフィルムに、思わず手を合わせてしまった。彼のおかげで、画面本体が割れずに済んだのだ。&lt;/p&gt;&#10;&lt;p&gt;何はなくともまずフィルム、と再認識。&lt;/p&gt;&#10;&lt;h2 id="付けててよかったガラスフィルム"&gt;付けててよかったガラスフィルム&#10;&lt;/h2&gt;&lt;p&gt;ガラスフィルムを交換した。iPhoneから剥がした時の姿が下図。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6626&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;390&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/05/01c7597371d5f293f329bcce0c114f12.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;大往生[/caption]&lt;/p&gt;&#10;&lt;p&gt;うーん、なんというか、お勤めご苦労様でした、という感じ。思わず合掌。彼は十二分にその役割を全うしてくれた。傷一つない本体画面を見て、ちょっと感動してしまった。&lt;/p&gt;&#10;&lt;p&gt;自分はとにかく画面を破損させてしまう男で、iPhone 5もXperia Z3も、その最期は見るも無残な形であった。この前、久しぶりにあった知人に、この割れたフィルムを付けたiPhone 8を見られた時は、「やっぱり画面割れてる！」と笑われた。&lt;/p&gt;&#10;&lt;p&gt;それは正解であり不正解でもある。確かに画面は割れていたが、割れていたのはフィルムであって、本体は無事だったからだ。なので、もしまた次に会った時には、画面なおしたのと言われるか、でなければ、また性懲りもなく画面（フィルム）を割って、「相変わらず割れてる」とまた笑われるかだが、まぁ割れている気がする。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B075JGLH1P&amp;linkId=3dc887a44e81a512bf316e2b0d3802d8" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;いずれにせよ、自分のようなおっちょこちょいにとって、フィルムは必需品である。&#13;&#10;&lt;p&gt;なお、取り付けた背面ケースにもヒビが入っている。ジョブズがなんと言おうと、ケースも必須である。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>pythonのmysqlclientでSSH越しにAWSのRDSにアクセス</title><link>https://hack-le.com/mysqlclient-aws-rds/</link><pubDate>Mon, 21 May 2018 16:03:54 +0900</pubDate><guid>https://hack-le.com/mysqlclient-aws-rds/</guid><description>&lt;p&gt;pythonのmysqlclientを使って、AWSのRDSにアクセスするやり方のメモ。普通、AWSのRDSはプライベートネットワーク内にあるため、インターネットに繋がっている踏み台のサーバーをSSHで経由する必要がある。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;pythonのmysqlclientを使って、AWSのRDSにアクセスしてSQL文を実行したい。RDSはプライベートネットワークにあるため、踏み台となるサーバーをSSHで経由する。具体的には、下図のようなネットワーク構成となっている。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6618&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;573&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/05/5c80cb217c74904fecc4e3cdca162b04.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;ネットワーク構成[/caption]&lt;/p&gt;&#10;&lt;p&gt;AP……アプリケーションサーバー……まぁアクセスポイントということで……。&lt;/p&gt;&#10;&lt;h2 id="サンプル"&gt;サンプル&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://qiita.com/KentFujii/items/e7c182289bf13b112be7" target="_blank" rel="noopener"&#10; &gt;データ分析環境からmysqlを叩いて高速な分析環境を用意する - Qiita&lt;/a&gt;」の記事を参考にさせていただき、以下のようなサンプルを作成した。踏み台サーバーをap、目的のRDSをrdsとした。&lt;/p&gt;&#10;&lt;pre&gt;`import MySQLdb&#13; from sshtunnel import SSHTunnelForwarder&#13; &#13; with SSHTunnelForwarder(&#13; ('apのIP', apのport),&#13; ssh_host_key=None,&#13; ssh_username='ec2-user',&#13; ssh_password=None,&#13; ssh_pkey='apの秘密鍵',&#13; remote_bind_address=('rdsのエンドポイント', 3306),&#13; local_bind_address=('127.0.0.1',10022)&#13; ) as tunnel:&#13; conn = MySQLdb.connect(&#13; host='127.0.0.1',&#13; port=10022,&#13; user='dbに繋ぐユーザ名',&#13; db='db名',&#13; passwd='dbのパスワード',&#13; charset='utf8mb4'&#13; )&#13; c = conn.cursor()&#13; # テストで実行するSQL文&#13; c.execute("SELECT * FROM test_table")&#13; for row in c.fetchall():&#13; print(row)&#13; conn.close()&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;local_bind_addressのIPは任意。ここでは10022にした。MySQLdb.connect()内のportと合わせる。&lt;/p&gt;&#10;&lt;p&gt;with文を使わない場合は、server = SSHTunnelForwarder( hogehoge ) として、適切なところにserver.start()およびserver.stop()を入れるとよい。&lt;/p&gt;&#10;&lt;pre&gt;`import MySQLdb&#13; from sshtunnel import SSHTunnelForwarder&#13; &#13; server = SSHTunnelForwarder(&#13; ('apのIP', apのport),&#13; ssh_host_key=None,&#13; ssh_username='ec2-user',&#13; ssh_password=None,&#13; ssh_pkey='apの秘密鍵',&#13; remote_bind_address=('rdsのエンドポイント', 3306),&#13; local_bind_address=('127.0.0.1',10022)&#13; )&#13; server.start()&#13; &#13; conn = MySQLdb.connect(&#13; host='127.0.0.1',&#13; port=10022,&#13; user='dbに繋ぐユーザ名',&#13; db='db名',&#13; passwd='dbのパスワード',&#13; charset='utf8mb4'&#13; )&#13; c = conn.cursor()&#13; # テストで実行するSQL文&#13; c.execute("SELECT * FROM test_table")&#13; for row in c.fetchall():&#13; print(row)&#13; conn.close()&#13; &#13; server.stop()&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;PythonでDBいじれると便利。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;以下の記事を参考にしました。ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/KentFujii/items/e7c182289bf13b112be7" target="_blank" rel="noopener"&#10; &gt;データ分析環境からmysqlを叩いて高速な分析環境を用意する - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://teratail.com/questions/105038" target="_blank" rel="noopener"&#10; &gt;MySQL - [Python3]SSH経由でMYSQLに接続できない(105038)｜teratail&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://sshtunnel.readthedocs.io/en/latest/" target="_blank" rel="noopener"&#10; &gt;Welcome to sshtunnel’s documentation! — sshtunnel 0.0.8 documentation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://blog.calcurio.com/python-sshtunnel.html" target="_blank" rel="noopener"&#10; &gt;pythonでsshtunnelする | 電脳手帳&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>性懲りもなくChromebookが欲しい</title><link>https://hack-le.com/wantchromebook/</link><pubDate>Sat, 19 May 2018 23:38:35 +0900</pubDate><guid>https://hack-le.com/wantchromebook/</guid><description>&lt;p&gt;Chromebookが欲しい。以前、2015年12月にHPのG3を買ったのだけれど、結局使い所が難しくて（「&lt;a class="link" href="https://hack-le.com/chromebookuse/" &gt;Chromebookの難しい使いドコロ – 或る阿呆の記&lt;/a&gt;」）、1年もせずに手放してしまった（買値の8割ほどで売れたのは良かった）。&lt;/p&gt;&#10;&lt;p&gt;あれから早二年半、やっぱりChromebookが欲しい。&lt;/p&gt;&#10;&lt;h2 id="次のノートpc候補"&gt;次のノートPC候補&#10;&lt;/h2&gt;&lt;p&gt;またChromebookが欲しくなってきた。以前に購入して、結局あまり使わないままに売り払ったのに、性懲りもなく。次のノートPCで使えないだろうか、なんて考えている。&lt;/p&gt;&#10;&lt;p&gt;というのも、最近メインノートのMacBook Air 2013がさすがに色々とつらくなってきて、動作の一つ一つが何かと重くなってきているのだ。クリーンインストールし直してからまだそんなにたっていないし、やはりハードの限界が近づきつつあるのだろうか？そんなことはないと思うんだけれどなぁーー……。&lt;/p&gt;&#10;&lt;p&gt;が、実際挙動が重いし、まぁ使い始めてそろそろ5年なのだから、買い替え時かなぁなんて思うわけだ。で、今は仕事はほとんどデスクトップマシンでしているので、ノートPCの役割は補助的だ。すると次にMacノートを買うとすればMacBook Proの13インチ（ついに4コアなるか？）なのだけれど、ちょっと大仰かなぁ、なんて思ったりもする。&lt;/p&gt;&#10;&lt;p&gt;そして、ふと思うのがChromebookである。特に最近はオフィス周りもGoogle ドキュメントやGoogle スプレッドシートを使うことが多く、Googleのサービスへの依存度が強まっているので、そろそろメインにするのもありかなぁ、なんて。&lt;/p&gt;&#10;&lt;p&gt;Androidアプリも使えるし…。Androidのタブレット市場は前門のiPad、後門のKindle FIreでもうほとんどやられちゃっていて、昔欲しいなぁと思っていた大型Androidタブレットなんてついぞ出てこないのだけれど、タブレットタイプのChromebookを使えば、かつてのちょっとした夢が叶いそうな気がする。いやまぁ、実際にはあまり使わないだろうけれど。&lt;/p&gt;&#10;&lt;h2 id="買うならc302ca-f6y30かな"&gt;買うならC302CA-F6Y30かな&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B074N1PVB9&amp;linkId=dc69c4b9e51ad6b36e9674f83d954f2a" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;買うならやっぱりこれかなぁ、ASUSのC302CA-F6Y30。国内で現在流通しているChromebookでは一番いい。なにしろCPUがSkylakeのCore m3 6Y30。うん、このCPUなら良いかも。前に買ったやつはCPUがCeleron N2840で…CeleronはやっぱりどこまでいってもCeleronだなぁと思わされたものなぁ。&#13;&#10;&lt;p&gt;MacBook Air 2013のCPUがCore i5 4250-Uで、Geekbenchのスコアを見るとだいたい同じくらいのようだから、これならChromeに注力しているこのモデルのほうが、動作の軽快さを期待できる。&lt;/p&gt;&#10;&lt;p&gt;Macの値段考えたら、6-7万でこのマシンは嬉しいな。メモリが8GBなら言うことなしだけれど、さすがにね。でもアメリカだと、1000ドルくらいでCore i7にメモリ16GBな最強スペックがあるみたいね。日本でも売ってほしいなぁ。&lt;/p&gt;&#10;&lt;h2 id="メインには難しかろうが"&gt;メインには難しかろうが&#10;&lt;/h2&gt;&lt;p&gt;まぁでも、ノートPCでもちょっとしたスクリプトを書くことはあるし、プログラミングするなら、Chromebookはまだちょっと便が悪そうだし。&lt;/p&gt;&#10;&lt;p&gt;それと個人的にネックなのが、キーバインド。自分がMacで地味に気に入っていることの一つは、いわゆるEmacsキーバインドがデフォルトで使いやすいことなのだけれど、Chromebookでそれをしようとすると、現状まだかなり難しそう。きっと無意識に印刷画面開きまくるんだろうなと思うと（Ctrl-pが↑なのだ）、うーん。&lt;/p&gt;&#10;&lt;p&gt;あとメーラーがなぁ。WebのGmail、あまり好きじゃないからなぁ。Evernoteなんかも、Web版はやっぱり使いづらいし。&lt;/p&gt;&#10;&lt;p&gt;なんて思うと、実際にはChromebookをメインに据えるのは難しいだろうなぁと思いつつ、それでもやっぱりChromebookが欲しいと思ってしまうのは、いったいぜんたいなんなんだろうか。&lt;/p&gt;</description></item><item><title>LenovoのPCで情報漏洩などのセキュリティリスクをどう考えるか</title><link>https://hack-le.com/lenovorisk/</link><pubDate>Fri, 18 May 2018 11:58:50 +0900</pubDate><guid>https://hack-le.com/lenovorisk/</guid><description>&lt;p&gt;職場で入社する社員に割り当てるPCのことで相談された。内容を突き詰めると、LenovoのPCってどうなの？ということだ。性能に対して安いけれど、色々やらかしているメーカーだからねぇ。&lt;/p&gt;&#10;&lt;p&gt;オススメはしないけれど、性能面では文句ないので、まぁそういうメーカーだ、ということを頭に置いておけば、別に良いんではないかと思う。以下に、色々と調べたり考えたりしたことのメモを残す。&lt;/p&gt;&#10;&lt;h2 id="pcの選択"&gt;PCの選択&#10;&lt;/h2&gt;&lt;p&gt;昨今ドンドン厳しくなってきたPC業界。色々なメーカーが現れては消え、中華メーカーの他にはHPやDELLなどいくつかの老舗を残し、気づけばほとんど淘汰され、燦然と輝くのはApple社のMac。&lt;/p&gt;&#10;&lt;p&gt;個人的には、PCはMacか開き直ってChromebookが良いと思うのだけれど、まぁWindowsで慣れているとか、業務用アプリケーションの都合でとか、開発環境がとか、そういった理由でWindows縛りはまだまだ存在する。&lt;/p&gt;&#10;&lt;p&gt;まぁWindowsならばメーカーの選択肢は広がる。それが良いところであり面倒臭いところでもある。自分のPCなら選択肢があるのは楽しいことだけれど、ビジネス用途だと途端にただただ面倒くさい。そういうのが好きだという人もいるんだろうけれど……。&lt;/p&gt;&#10;&lt;p&gt;さて、そこそこの値段でそこそこの性能を、と考えたら、今ならHuawei、ASUS、Lenovoあたりだろうか。今回考えるのはLenovoである。Huaweiの勢いに押され気味ではあるものの、後進が出てきたことで若干の老舗感が出てきた気がしなくもない（DELLに至っては昔ながらの高級ブランドメーカーという気さえする）。&lt;/p&gt;&#10;&lt;p&gt;Lenovoは色々と前科のあるメーカーである。ユーザーからの評判は芳しくない。ThinkPadがLenovoに吸収された時に、絶望感を覚えた人も多くいるだろう。しかし、値段に比して性能が高いことについては、皆が認めるところだろう。価格が安い、ということの訴求力は凄まじいので、色々やらかしている中華メーカーということを鑑みてなお、ほんとにダメなん？ということになるのだろうなぁ。&lt;/p&gt;&#10;&lt;h2 id="lenovoってどうよ"&gt;Lenovoってどうよ&#10;&lt;/h2&gt;&lt;p&gt;ということで、そこんとこどうなのか知りたいと、自分にお声がかかったわけだが、私だって別に専門家でもなんでもないわけで（しかもメインはMacなわけで）、正直に言うと「知らんがな」なんだが、まぁ中華メーカーのリスクについては知っていても良いかなとも思い、軽く調べることにした。&lt;/p&gt;&#10;&lt;h3 id="あんしんテレワークpc2018"&gt;あんしんテレワークPC(2018)&#10;&lt;/h3&gt;&lt;p&gt;まずLenovoの情報漏洩について調べて出てきたのが、あんしんテレワークPCなる、情報漏洩の保険を付帯したサービスの話（「&lt;a class="link" href="https://cloud.watch.impress.co.jp/docs/news/1116961.html" target="_blank" rel="noopener"&#10; &gt;レノボ、ThinkPadシリーズに情報漏えいなどのトラブルなどに対応する保険を付帯した「あんしんテレワークPC」 - クラウド Watch&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;正直笑った。お前がそれやるんかと思ったのは自分だけではないと思う。まぁでもこういう取り組みをしていることは、セキュリティを意識してますよというアピールでもあるんだろうか。意識が高まっている、なら良いのだけれど。&lt;/p&gt;&#10;&lt;p&gt;参考&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.nikkei.com/article/DGXMZO29368850T10C18A4X20000/" target="_blank" rel="noopener"&#10; &gt;ノートＰＣの情報漏洩に保険、レノボ ：日本経済新聞&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="lse問題2014-2015"&gt;LSE問題(2014-2015)&#10;&lt;/h3&gt;&lt;p&gt;Lenovoのプリインアプリ「Lenovo Service Engine」がやらかした話。BIOSに組み込まれたソフトウェアで、どうやら自社のソフトが消されても強制的に再インストールするようなものであったらしい。そのやり方がまるでrootkitだとか言われ、さらにセキュリティの脆弱性が見つかって、Lenovoは削除ツールを配布することになった。後述のSuperfish問題と合わせて、Lenovoの信頼を大きく失墜させた。元からなかったと言われるとそうかもしれない。&lt;/p&gt;&#10;&lt;p&gt;参考&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://support.lenovo.com/jp/ja/product_security/lse_bios_desktop" target="_blank" rel="noopener"&#10; &gt;デスクトップ用 Lenovo Service Engine (LSE) BIOS&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://support.lenovo.com/jp/ja/solutions/HT104000" target="_blank" rel="noopener"&#10; &gt;一部コンシューマー製品のLenovo Service Engine (LSE) BIOSに関する対応方法&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gadgets.ndtv.com/laptops/news/using-a-lenovo-pc-or-laptop-you-need-to-read-this-729045" target="_blank" rel="noopener"&#10; &gt;Using a Lenovo PC or Laptop? You Need to Read This | Technology News&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://ruralpostdoc.com/diary/203-lse-another-invulnerability-in-lenovo-pc.html" target="_blank" rel="noopener"&#10; &gt;Lenovoのパソコンに新たなセキュリティリスク、LSE&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://japan.cnet.com/article/35068819/" target="_blank" rel="noopener"&#10; &gt;レノボ、一部製品で「Windows」の主要ファイルを無断で上書き - CNET Japan&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="superfish問題2014-2015"&gt;Superfish問題(2014-2015)&#10;&lt;/h3&gt;&lt;p&gt;有名なSuperfish問題。「&lt;a class="link" href="https://japan.cnet.com/article/35106859/" target="_blank" rel="noopener"&#10; &gt;レノボ、危険なSuperfishアドウェアのプリインストール問題でFTCと和解 - CNET Japan&lt;/a&gt;」によると&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;FTCは、Lenovoが&lt;a class="link" href="https://japan.cnet.com/article/35060677/2/" target="_blank" rel="noopener"&#10; &gt;2014年9月から12月&lt;/a&gt;にかけて、同社製ノートPCの一部にSuperfishという企業の広告ソフトウェア「VisualDiscovery」をプリインストールしていたとして告発した。VisualDiscoveryは、ユーザーのウェブ検索と閲覧行動を追跡して、訪問するサイト上に追加の広告を配信する。FTCによると、VisualDiscoveryはさらにユーザーのブラウザとウェブサイトのやり取りにも干渉して、ユーザーを深刻なセキュリティ上の脆弱性にさらすおそれがあるという。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;うーんこれはアウト。ユーザーのデータ収集だけならいざしらず、アドウェアはやり過ぎと思う。しかもセキュリティリスクが存在するってお粗末。やり過ぎかつお粗末。アメリカでは訴訟問題にまで発展。&lt;/p&gt;&#10;&lt;p&gt;前のLSE問題にしても、かなり強権的なことをしようとしているが故に、セキュリティリスクが高まってしまった面があるだろうなぁ。&lt;/p&gt;&#10;&lt;p&gt;参考&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://japan.cnet.com/article/35106859/" target="_blank" rel="noopener"&#10; &gt;レノボ、危険なSuperfishアドウェアのプリインストール問題でFTCと和解 - CNET Japan&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://diamond.jp/articles/-/67542" target="_blank" rel="noopener"&#10; &gt;レノボのマルウェア問題が提起するハードの奥深くに潜むセキュリティリスク｜ビジネスモデルの破壊者たち｜ダイヤモンド・オンライン&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://support.lenovo.com/jp/ja/product_security/superfish_uninstall" target="_blank" rel="noopener"&#10; &gt;Superfishのアンインストール方法&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="baidu問題2013"&gt;Baidu問題(2013)&#10;&lt;/h3&gt;&lt;p&gt;あのBaiduが入力情報を百度に送りまくっていたことが明らかになった事件。Lenovoの問題ではないのだが、Lenovo PCだと標準でプリインストールされたケースもあったようで、色々と騒ぎになっていた（&lt;a class="link" href="http://blogs.itmedia.co.jp/yoshimasa/2013/12/lenovokingsofti-6d42.html" target="_blank" rel="noopener"&#10; &gt;lenovo、Kingsoftユーザは注意）百度（バイドゥ）IMEが入力情報を無断で送信すると言われている件（NHKニュースにも）：吉政忠志のベンチャービジネス千里眼：オルタナティブ・ブログ&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;h2 id="まぁでもいいんでないの"&gt;まぁでもいいんでないの&#10;&lt;/h2&gt;&lt;p&gt;2015年に大きな事件が重なっている。やはりここ数年だと、LSE問題とSuperfish問題が大きな影を落としていると思う。逆に言うと、それ以来は特に大きな事件は起きてないように見える。Superfishは訴訟問題にまで発展したし、多少はマシになったんだろうか。&lt;/p&gt;&#10;&lt;p&gt;情報収集自体はどこも多かれ少なかれやっていることだけれど、中華メーカーの場合、中国共産党の影がチラつくのがたいへん気持ち悪い。メーカーとしては、危ない橋を渡ってもユーザーが離れるだけっていうのは重々承知しているんだろうけれど、それでもやるってのはやっぱり、共産党の影響から免れないのかしら、なんて思うわけだ。百度の件なんて完全に合わせ技だし、中華メーカーがグルになって情報抜き取りに来ている、と考えられるのも致し方ない面があるかと（参考記事「&lt;a class="link" href="http://blog.livedoor.jp/intel_news_reports/archives/30105344.html" target="_blank" rel="noopener"&#10; &gt;英情報機関、レノボ製品の使用禁止を勧告 : Intelligence News and Reports&lt;/a&gt;」）。強権的な情報収集の試みはセキュリティの脆弱性にも繋がるしねぇ……。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、ここ3年くらいは比較的静かなのも事実。なのでまぁ、そういうメーカーだ、ということを念頭に置いて作業するのであれば、別に問題ないのではなかろうか。つまり機密性と漏洩した時のリスクが極めて高いファイルを扱わないということだが、防衛省の職員じゃあるまいし、いち中小企業の一般社員が危惧するようなことではないだろう。あとはまぁ、プリインストールのアプリケーションについて、一度きちんと精査してから使う、くらいかねぇ……。&lt;/p&gt;&#10;&lt;p&gt;こんなんとか→「&lt;a class="link" href="https://support.lenovo.com/jp/ja/solutions/ht102023" target="_blank" rel="noopener"&#10; &gt;Lenovoのシステムにはインターネット上のサーバーと通信するソフトウェア・コンポーネントが含まれている場合がある - ThinkCentre, ThinkStation, ThinkPad&lt;/a&gt;」あったら消したほうがよかろうね。&lt;/p&gt;&#10;&lt;p&gt;Lenovoより気持ち高いかもくらいなASUSは、台湾だけれどあまり変な話もないし（やっぱ共産党の影響が少し薄まるのかしら？知らんけど）、ASUSにしたらいいのに、とか言って終わり。&lt;/p&gt;</description></item><item><title>matplotlibでx軸の時刻情報をフォーマットする</title><link>https://hack-le.com/matplotlib-x-date-format/</link><pubDate>Thu, 17 May 2018 10:45:11 +0900</pubDate><guid>https://hack-le.com/matplotlib-x-date-format/</guid><description>&lt;p&gt;久しぶりにmatplotlib使ったら完全に忘れている。ちょっと使わないとすぐに忘れてしまうね。&lt;/p&gt;&#10;&lt;p&gt;なのでメモ書き。日付と時刻がyyyy/mm/dd HH:MM:SS形式で入ったファイルを読み込んで、x軸に適切な形で表示する。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;python 3.6.5&lt;/li&gt;&#10;&lt;li&gt;matplotlib 2.2.2&lt;/li&gt;&#10;&lt;li&gt;pandas 0.22.0&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;pandasはファイルの読み込みで使った。&lt;/p&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;p&gt;以下のようなデータtest.csvを読み込んで、x軸に時刻、y軸に2列目の数値を表示したグラフを出力する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 22:00:01,2147564&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 22:10:01,2147316&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 22:20:01,2147036&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 22:30:01,2147036&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 22:40:01,2146788&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 22:50:01,2146632&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 23:00:01,2146168&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 23:10:01,2145888&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 23:20:01,2146136&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 23:30:01,2146012&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 23:40:01,2145796&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/16 23:50:01,2145580&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 00:00:01,2145332&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 00:10:01,2144960&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 00:20:01,2144712&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 00:30:01,2144152&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 00:40:01,2144028&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 00:50:01,2143440&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 01:00:01,2143316&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 01:10:01,2118708&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 01:20:01,2118600&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 01:30:01,2118244&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 01:40:01,2118368&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 01:50:01,2118244&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 02:00:01,2116176&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 02:10:01,2116360&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 02:20:01,2116268&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 02:30:01,2115804&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 02:40:01,2115592&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 02:50:01,2115532&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 03:00:01,2115160&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 03:10:01,2114604&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 03:20:01,2105344&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 03:30:01,2104820&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 03:40:01,2105068&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 03:50:01,2104200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 04:00:01,2104356&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 04:10:01,2104480&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 04:20:01,2103828&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 04:30:01,2103828&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 04:40:01,2103704&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 04:50:01,2103052&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 05:00:01,2103084&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 05:10:01,2103084&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 05:20:01,2102556&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 05:30:01,2102680&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 05:40:01,2103920&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018/05/17 05:50:01,2103548&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下のようにコードを書く。csvの読み込みはなんでもいいけれど、楽だからpandasを使う。GUI無しを想定しているのでmatplotlib.use(&amp;ldquo;Agg&amp;rdquo;)を使う。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;matplotlib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Agg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.dates&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;mdates&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;test.csv&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;index_col&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# print(df)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xaxis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_major_formatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mdates&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DateFormatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%m/&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;%H:%M&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;savefig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fname&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.png&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ax.xaxis.set_major_formatter(mdates.DateFormatter(&amp;rsquo;%m/%d\n%H:%M&amp;rsquo;))で時刻の表記の仕方をいじる。上のコードだと以下のようになる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/05/test.csv.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;グラフ&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;おわり。&lt;/p&gt;&#10;&lt;p&gt;どうでもいいけどpython3.6から使えるようになったf-strings便利やね。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/drwtsn64/items/9fff27509ceb3c67b17b" target="_blank" rel="noopener"&#10; &gt;matplotlibを使って時系列グラフを書いてみる - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Pythonでユニークでランダムな文字列のリストを作成する</title><link>https://hack-le.com/mkrnd/</link><pubDate>Fri, 11 May 2018 20:25:02 +0900</pubDate><guid>https://hack-le.com/mkrnd/</guid><description>&lt;p&gt;（追記: 2023-01-15）この記事書いた人（過去の私）なんでUUID使わないんだろうと思った。なんか制約があったのだろうか。それとも知らなかっただけ？&lt;/p&gt;&#10;&lt;p&gt;重複しない英数字（0-9a-zA-Z）の文字列のリストを作成したい。既に使われている文字列も読み込めるとする。文字列の長さも指定できるとする。pythonで実行する。pythonは3.6。&lt;/p&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;p&gt;ランダムな文字列を生成したら、それを用意した除外リストと照らし合わせて、重複していたら再度メソッドを実行するような感じで、以下のように書いた。&lt;/p&gt;&#10;&lt;pre&gt;`import random&#13; import string&#13; class MakeRndCode:&#13; def __init__(self, rndlist=[]):&#13; self._rndlist = list(set(rndlist))&#13; &#13; def mkrnd(self, strlen=8):&#13; src_str = string.ascii_letters + string.digits&#13; rnd_str = "".join([random.choice(src_str) for x in range(strlen)])&#13; # unique?&#13; if rnd_str in self._rndlist:&#13; rnd_str = self.mkrnd(strlen)&#13; self._rndlist.append(rnd_str)&#13; return rnd_str&#13; &#13; def addlist(self, rndlist):&#13; rndlist = list(set(rndlist))&#13; self._rndlist += rndlist&#13; &#13; def tolist(self):&#13; print(self._rndlist)&#13; &#13; if __name__ == '__main__':&#13; mkrndcd = MakeRndCode()&#13; rnd = mkrndcd.mkrnd(10)&#13; print(rnd)&#13; &#13; rndl = [mkrndcd.mkrnd(10) for x in range(5)]&#13; print(rndl)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;実行する。&lt;/p&gt;&#10;&lt;pre&gt;`&gt; python test.py &#13; nNKMM8MpX9&#13; ['UnwAsPyHaF', '3rLJyEgcIi', 'Yufgnyjrda', 'rkGvfC9iQz', 'CAaUoHthTM']&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;mkrndcd = MakeRndCode([除外したい文字列のリスト])でインスタンスを作る。リストを加えたくなったらmkrndcd.addlist([除外したい文字列のリスト])。文字列を作るときはmkrndcd.mkrnd(文字数)。作った文字列は除外リストに追加される。mkrndcd.tolist()で除外リストを得る。&lt;/p&gt;&#10;&lt;h2 id="問題点"&gt;問題点&#10;&lt;/h2&gt;&lt;p&gt;文字列を使い切ると、永遠に探し続ける。対策するなら文字数に応じてリストのサイズを計算してそれより十分小さいことを確認する、とかかしら……。まぁでも使い切るようなケースなら最初からセットを作るほうが良い気がする。&lt;/p&gt;&#10;&lt;h2 id="参考記事"&gt;参考記事&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/FGtatsuro/items/92bca91ed665449ab047" target="_blank" rel="noopener"&#10; &gt;ランダム文字列生成(Python) - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://kiwamiden.com/how-to-make-random-character-in-python" target="_blank" rel="noopener"&#10; &gt;Pythonでランダムな文字列を作る方法!! | KIWAMIDEN&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>チーム作業でGoogle ドキュメントが便利だ</title><link>https://hack-le.com/teamgdoc/</link><pubDate>Thu, 10 May 2018 10:30:14 +0900</pubDate><guid>https://hack-le.com/teamgdoc/</guid><description>&lt;p&gt;「&lt;a class="link" href="https://hack-le.com/comdoc/" &gt;コミュニケーションツールとして生きたドキュメントを作る – 或る阿呆の記&lt;/a&gt;」の記事で、複数人で一つのファイルをあれこれ編集していることを書いた。そのためのツールとして、Googleドキュメントを利用している。&lt;/p&gt;&#10;&lt;h2 id="共同編集のため必要十分"&gt;共同編集のため必要十分&#10;&lt;/h2&gt;&lt;p&gt;Google ドキュメントは、チームでの共同編集をするうえで必要にして十分な機能が備わっている。ちょっと触っただけでも、以下のような点が便利だとわかる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;すべての人の変更がリアルタイムに反映される&lt;/li&gt;&#10;&lt;li&gt;コメントがつけやすい&lt;/li&gt;&#10;&lt;li&gt;画像の作成も手軽&lt;/li&gt;&#10;&lt;li&gt;アドオン使えば大技も&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;リアルタイムに変更が反映されるのは、初めて見ると皆「おぉっ」となる。他人のカーソルがピコピコしているのを見ると、ちょっとしたオンラインゲームをしているようでなんとなく楽しい。&lt;/p&gt;&#10;&lt;p&gt;使っていて特に便利だなと思ったのは、コメント機能だった。コメント機能自体はもちろん他のワープロソフトにもあるのだけれど、コメントされたらメールが飛んできたり、slackと連携させていたらslackから通知が来たりするので、気づきやすく、さらに返信機能、終わったら解決ボタンをクリックで完了、という一連の流れが、非常に使いやすかった。&lt;/p&gt;&#10;&lt;p&gt;ドキュメントに手を入れるのはちょっと、という人でも、コメントくらいは残せるだろうから、参加も促しやすいと思う。&lt;/p&gt;&#10;&lt;p&gt;ちょっとした画像であればGoogle ドキュメント内で編集できて、これもリアルタイムに反映されるから、ビジュアルに訴えかける必要がある作業も、共有しやすい。&lt;/p&gt;&#10;&lt;p&gt;まぁ機能的には、さすがにスタンドアロンで歴史もあるMS WordやLibreOffice Writerのようにはいかず、たとえば見出し番号をつけるとか、画像にキャプションをつけるとか、ちょっとしたことができない、なんてのもある（見出し番号はcssで頑張ったらできる）が、長大なドキュメントでなければ、まぁなけりゃないで困らない。皆で編集するドキュメントは、あまり長すぎてもいけないだろうし、これくらいの機能に絞ったほうがよいのかな、とも思う。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、アドオンを使うとけっこうな大技がサクッとできることもある。個人的に嬉しかったのはコードのシンタックスハイライトだった。「&lt;a class="link" href="https://hack-le.com/gdoc-syntax/" &gt;Google ドキュメントでコードをシンタックスハイライト – 或る阿呆の記&lt;/a&gt;」の記事でも取り上げたけれど&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6457&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1308&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/67832e92cc70a75943fca12150371e7a.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;コードのシンタックスハイライト[/caption]&lt;/p&gt;&#10;&lt;p&gt;この表示がさっとできるのはちょっと感動した。昔Wordで頑張ってスタイル作っていたのが阿呆みたいだ。&lt;/p&gt;&#10;&lt;p&gt;ということで、Google ドキュメントはチームで使うドキュメントの作成にとても良いものだった。&lt;/p&gt;&#10;&lt;h2 id="ms-wordについて"&gt;MS Wordについて&#10;&lt;/h2&gt;&lt;p&gt;ところでワープロソフトといえば、忘れてはいけないのがMicrosoft Wordで、最近はMSもコラボレーションに随分力を入れて開発しているようだから（「&lt;a class="link" href="https://support.office.com/ja-jp/article/word-%E6%96%87%E6%9B%B8%E3%81%A7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E5%85%B1%E5%90%8C%E7%B7%A8%E9%9B%86%E3%81%AB%E3%82%88%E3%82%8A%E3%82%B3%E3%83%A9%E3%83%9C%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%99%E3%82%8B-7dd3040c-3f30-4fdd-bab0-8586492a1f1d" target="_blank" rel="noopener"&#10; &gt;Word 文書でリアルタイム共同編集によりコラボレーションする - Office サポート&lt;/a&gt;」）、同じようなことはできるのかもしれない（金かかるけど）。そもそも、Wordとか高いし重いしできる限り使いたくないとかは置いといて、ネームブランドは当然Wordのほうがあるので、金払ってもいいなら検討に値するとは思う。&lt;/p&gt;&#10;&lt;p&gt;しかし、共同編集をメインの目的とすると、Wordのブランドが足枷になってしまうような気がする。Wordはほとんどの人に（たとえ嫌いでも）使用経験があるので、Wordはこういうもんだ、という先入観が働いてしまって、Wordを使ったチーム作業、というのは非常に説明しづらいように思う。&lt;/p&gt;&#10;&lt;p&gt;皆が皆最新のWindowsで最新のWordを使っているわけでもないし。既にサポートが終わっているMS Office 2003を頑なに使い続けているお人さえなお存在するのが現実（事故にあったことがないからこれからも事故に合わないという理論の持ち主である…なんなら事故っても使い続けるかもしれない）。&lt;/p&gt;&#10;&lt;p&gt;そこへいくと、Google ドキュメントという新しいツールならば、「まぁこれはこういうもんらしい」という理解が得られやすいのではなかろうか（だいたいこういうツールを使う上で、現場に立ちはだかる最大の難関は、皆の理解と協力を得ることだろう）。&lt;/p&gt;&#10;&lt;p&gt;まぁそもそも、共有機能はサブスクリプション版限定のようなので、Wordは永続バージョンを買うものだ、という固定観念を打ち崩すこと自体がたいへん難しい気がする。それがなかなか思うように進まなくて、MSも困っているのだろうし。&lt;/p&gt;&#10;&lt;p&gt;そうこうしている間に、少しずつGoogle ドキュメントが牙城を侵食していくのかもしれない。&lt;/p&gt;</description></item><item><title>ここ最近のMacの愚痴</title><link>https://hack-le.com/buywin/</link><pubDate>Sun, 15 Apr 2018 21:20:13 +0900</pubDate><guid>https://hack-le.com/buywin/</guid><description>&lt;p&gt;初めて購入したMacがMacBook Airが2010年版。あれから7年以上の月日が流れ、ノートのみならずデスクトップまでMacで固められるようになった。特にMac mini 2012はお気に入りだ。その反動もあって、このサイトでは2014モデルへの失望や、もう4年も待たされている苛立ちなど、不満を書き連ねたことも多い。&lt;/p&gt;&#10;&lt;p&gt;で、気がついたらWindowsマシンをポチっていた。そして、割と愉快に使っている。二度とWindowsマシンを買うことはないだろう、くらいに思っていたのだが……。&lt;/p&gt;&#10;&lt;h2 id="ここ数年のmacに対する愚痴"&gt;ここ数年のMacに対する愚痴&#10;&lt;/h2&gt;&lt;p&gt;それがたまたまなのかどうかは、わからない。ただ、スティーブ・ジョブズ亡き後、ティム・クックに代わってから、Macの魅力が減退したように思う。&lt;/p&gt;&#10;&lt;p&gt;価格コムで一番売れているMacノートはずっとMacBook Airだが、これは数年前と比べて性能はあまり変わっていない。まぁメモリ8GBが標準になったことは良いことだと思う。でも、それくらいだ。MacBookは面白いけれど、その値段に見合うだけの性能があるのかというと、なんとも微妙。MacBook Proはさすがにそれなりだと思うものの、やはり価格のアップグレードにスペックが追いついていないように感じる。Touch Barのことはもうみんな忘れてしまったみたいだ（それでも3Dタッチよりは存在感があるだろう）。&lt;/p&gt;&#10;&lt;p&gt;デスクトップは悲惨の一言だ。2018年4月現在、実質、iMac以外に選択肢がない。Mac miniは2014年にスペックダウンした新型を出してからもう4年近く音沙汰がなく、年に一度のリップサービスだけが心の支え。&lt;/p&gt;&#10;&lt;p&gt;だがMac Proはさらに酷い。ゴミ箱と揶揄された2013年モデル、Proなのに内部拡張性に乏しく、ケーブルの山に埋もれ、クールとはかけ離れたMac Proの画像は当時大いに出回った。それでも当時はまだ、これが未来だ、という論調もあったけれど、今となってはApple自身がその方向性の誤りを認めたようで、次は拡張性のあるモデルを作るから待っていてくれとアナウンス、微妙にCPUをスペックアップさせたモデルでお茶を濁している。うーん……。&lt;/p&gt;&#10;&lt;p&gt;もっとも、iMacは依然として素晴らしい。確かに値段はそれなりだけれど、あの美麗なディスプレイ付きであることを考えれば、決して高くはないものだと思う。いや、むしろその価格に相応しいと言うべきだろうか。とはいえ、iMac Proはさすがにやりすぎだと思うのだが、まあオールインワンで最初から最強、みたいなのも一定数の需要（デザイン系の現場だろうか？）があるのかもしれない。しかしProとなればGPUがNVIDIAでないと困るという人もいるだろうし（主に最近流行りの機械学習周りの人で）、その需要は限定的に思う。&lt;/p&gt;&#10;&lt;p&gt;ということで、ハードについて、iMac 27インチは素晴らしいけれど、それ以外はなんともなんとも。&lt;/p&gt;&#10;&lt;p&gt;で、ソフトについても、自分はSnow Leopardより前を知らないのだけれど、いまだにSnow Leopardの時が一番使いやすかったように思っていて、特にspacesの仕様なんかは、今でもあの頃のほうがよかったなぁと切に思う。&lt;/p&gt;&#10;&lt;p&gt;バグについては、昔から多かったのかもしれないけれど、最近のちょっとした操作でパスワードなしでrootで入れるというわけのわからん脆弱性は、致命的すぎるように思う。あと、個人的にはSierraのPDF周りのトラブルなんかがつらかった。&lt;/p&gt;&#10;&lt;p&gt;他、LibreOfficeが非常に重くなって（なんでかなぁ、Java周りの話なのかなぁ……）、iWorkに乗り換えざるを得なくなったりした（iWorkの無料配布は遅きに失した印象ではあるものの、有り難い話）。SIPの対象範囲はどんどん広がって、ついにiTunes（これもアップデートが悪夢なソフトウェアだ）まで対象になったのもつらい。BetterTouchToolの挙動が変になる（左クリックがきかなくなったりとか）率も高くなったような。もともとトラックパッドが気に入ってMacを使い始めた面もあるので、これはけっこうつらい。あとmini DP出力の不安定さがちょっと無視できないくらいになっていたり気がつくと再起動していたりもつらいけれど、このへんは固有の環境による影響が大きいかもしれない。2012年から使っているものなぁ。&lt;/p&gt;&#10;&lt;p&gt;良かったことと言えば、うーん、フルスクリーン周りはよくなったか。それくらいかなぁ。&lt;/p&gt;&#10;&lt;p&gt;まぁとにかく、OSのアップグレードで便利に感じた記憶より、不便に感じた記憶のほうが断然多く、さらに致命的とも思えるバグの記憶も新しいので、非常に印象が悪いわけだ。&lt;/p&gt;&#10;&lt;p&gt;それで、私はここ数年のMacについては、ハードもソフトも、なんとも微妙だなぁと思っている。スティーブ・ジョブズとティム・クックの間で、PCに対する考え方がそれほど違うとも思えないのだけれど、実際に生み出されるプロダクトが随分異なるように思えるのはなぜなんだろう。&lt;/p&gt;&#10;&lt;h2 id="windowsは良くなったと思う"&gt;Windowsは良くなったと思う&#10;&lt;/h2&gt;&lt;p&gt;そして、気がつくと私は、Windowsのデスクトップマシンをポチっていた。それも25万くらいするやつ。今、そのマシンでこの記事を書いている。キーボードは埃を被っていたHHKBだ。&lt;/p&gt;&#10;&lt;p&gt;本格的にWindowsを使うのは久しぶりということもあって、いろいろ戸惑いもあるのだけれど、まぁボチボチと自分向けにチューニングしていくつもりである。もうWindowsマシンを（サブのお遊び目的以外で）買うことはないと思っていただけに、自分の行動に驚いている。&lt;/p&gt;&#10;&lt;p&gt;Windowsはここ数年で良くなったと思う。自分にとっては、特にWSLの存在が大きい。割と購入の決め手だった。ストアにUbuntuがあるなんて、ちょっと前までは考えられなかったなぁ。まぁ実際に使って見ると、色々と癖があるのだけれど、まだまだこれから熟れていくだろうし、このへんの話はまた記事にしたい。&lt;/p&gt;&#10;&lt;p&gt;思えば、スティーブ・バルマーからサティア・ナデラに変わってからのことか。Windowsの変化については、間違いなくトップ交代の影響が大きいだろうな。Macも、頑張ってほしいんだけれどな……。Mac mini 2018、まだ待ってはいるんだよ。&lt;/p&gt;</description></item><item><title>Macの共有フォルダにWindowsからアクセスして読み書き</title><link>https://hack-le.com/mac-win-smb/</link><pubDate>Thu, 12 Apr 2018 10:58:44 +0900</pubDate><guid>https://hack-le.com/mac-win-smb/</guid><description>&lt;p&gt;MacでWindowsとSMBでファイル共有するための操作メモ。&lt;/p&gt;&#10;&lt;p&gt;なにげにすんなりいかなくてつらかった。Macの場合、濁点問題もあるし（日本語禁止令）、ファイル共有はあんまりやりたくないのだけれど、まぁ容量をほぼ無制限で使えるし、LAN内の安心感もあって、あれば便利ではある。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;環境は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;macOS 10.13 High Sierra&lt;/li&gt;&#10;&lt;li&gt;Windows 10&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;デバイスはiMacだったりMacBook Airだったり。&lt;/p&gt;&#10;&lt;h2 id="mac側の操作"&gt;Mac側の操作&#10;&lt;/h2&gt;&lt;p&gt;以下Mac側の操作。&lt;/p&gt;&#10;&lt;h3 id="ipアドレスの固定ワークグループの確認"&gt;IPアドレスの固定、ワークグループの確認&#10;&lt;/h3&gt;&lt;p&gt;Windows側からアクセスする時、普通はIPアドレスでMacの場所を指定することになるので、IPアドレスは固定しておく。&lt;/p&gt;&#10;&lt;p&gt;「システム環境設定」→「ネットワーク」→eth0とかWi-Fiとか普段使っているネットワークアダプタ→「詳細」→「TCP/IP」タブ→手入力でIPアドレスを固定&lt;/p&gt;&#10;&lt;p&gt;あと、初期設定なら大丈夫なはずだけれど、「WINS」タブでワークグループがWindowsで使うWORKGROUPになっていることを確認。&lt;/p&gt;&#10;&lt;h3 id="ファイル共有用のユーザーの作成"&gt;ファイル共有用のユーザーの作成&#10;&lt;/h3&gt;&lt;p&gt;必須ではない。というか、やると（アクセス権が）ややこしくなるので、しなくてよいならしないほうがよい。&lt;/p&gt;&#10;&lt;p&gt;だが、Windowsから共有フォルダにアクセスする時、ユーザー名とパスワードを求められる。ここで、普段Macで使っているユーザーのパスワードを入力しても問題ないのであれば、それでも構わない（自分専用のPC同士である、とか、管理者ではない、とか）。だが、共有フォルダの性質上、それは困ることもあるだろう。その場合、共有フォルダ用にユーザーを作成する（他になにか手があるだろうか……）。&lt;/p&gt;&#10;&lt;p&gt;「システム環境設定」→「ユーザーとグループ」より、適当にユーザーを作る。&lt;/p&gt;&#10;&lt;h3 id="共有フォルダの設定"&gt;共有フォルダの設定&#10;&lt;/h3&gt;&lt;p&gt;共有するフォルダを決める。&lt;/p&gt;&#10;&lt;p&gt;決めたら設定すべく、「システム環境設定」→「共有」→「ファイル共有」より、チェックボックスをオンにしたうえで、共有フォルダを+で追加。&lt;/p&gt;&#10;&lt;p&gt;アクセス権はまぁ、共有フォルダであるので、すべてのユーザーについて「読み/書き」で良いと思うが、ユーザー毎に細かく権限を設定してもよい。まぁ運用方針次第である。&lt;/p&gt;&#10;&lt;p&gt;そのうえで、「オプション」より、Windowsファイル共有の欄から、Windowsでアクセスさせる予定のユーザーのチェックをONにする。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6510&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1322&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/04/8cfef1099ae4a342bbf914c4c424bd31.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;両方チェックする必要はない[/caption]&lt;/p&gt;&#10;&lt;p&gt;上図では、Macの管理者アカウントと、Windowsでアクセスさせるためのユーザーアカウントの2つにチェックを入れている。&lt;/p&gt;&#10;&lt;p&gt;これでMac側の操作はOK。&lt;/p&gt;&#10;&lt;h2 id="windows側の操作"&gt;Windows側の操作&#10;&lt;/h2&gt;&lt;p&gt;次にWindows側の操作。&lt;/p&gt;&#10;&lt;h3 id="ネットワークの場所を追加"&gt;ネットワークの場所を追加&#10;&lt;/h3&gt;&lt;p&gt;エクスプローラで「PC」を開いて、右クリックから「ネットワークの場所を追加する」。いつ見ても妙な感じのする文言だ。指示されるままに次へ。&lt;/p&gt;&#10;&lt;p&gt;で、Mac側の共有フォルダの場所を指定する。&lt;/p&gt;&#10;&lt;p&gt;¥¥&amp;lt;MacのIPアドレス&amp;gt;¥&amp;lt;共有フォルダ名&amp;gt;&lt;/p&gt;&#10;&lt;p&gt;後はユーザー情報を求められるので、ユーザー名とパスワードを入力して完了。Windows側はこれだけ。&lt;/p&gt;&#10;&lt;p&gt;後は試しにフォルダ作ったりテキストファイルつくったり編集したりなんだりして、テストして終わり。ここでもしアクセス云々言われて怒られたら、だいたい次のパーミッションのせい。&lt;/p&gt;&#10;&lt;h2 id="運用"&gt;運用&#10;&lt;/h2&gt;&lt;p&gt;運用時の留意点。&lt;/p&gt;&#10;&lt;h3 id="パーミッションの確認"&gt;パーミッションの確認&#10;&lt;/h3&gt;&lt;p&gt;共有フォルダ自体は、すべてのユーザーが読み書きできる状態（777）になっているはずだが、共有ユーザーとMacのユーザーが違ったりなどすると、共有フォルダ内でアクセス権の色々おかしくなったりする。なにかしようとしてアクセスできませんとか怒られたら、だいたいパーミッションのせい。&lt;/p&gt;&#10;&lt;p&gt;一番荒っぽいなおし方は、ターミナルを開いて、以下のコマンド。&lt;/p&gt;&#10;&lt;pre&gt;`chmod -R 777 共有フォルダ`&lt;/pre&gt;&#13;&#10;&lt;p&gt;なんとなく怖いけれど、これで共有フォルダ以下のすべてのファイルが、全員から読み書き実行できる状態になる（なってしまう、とも言う）。&lt;/p&gt;&#10;&lt;p&gt;でも、多分こうすることになっているんだと思う。実際、GUIでもアクセス権の補修はできるのだが、同じような感じ。&lt;/p&gt;&#10;&lt;p&gt;やり方は、例によってシステム環境設定の共有より、共有フォルダをCtrlキーを押しながらクリックすると、「内包している項目にアクセス権を適用」なるものが実行可能。そうするとみんながアクセスできるフォルダになる（パーミッションはファイルが666、ディレクトリが777だった）。……が、使っているとまた同じ問題が起きて面倒臭い。&lt;/p&gt;&#10;&lt;h3 id="所有者の確認"&gt;所有者の確認&#10;&lt;/h3&gt;&lt;p&gt;全部777にしちゃえという方針を取らず、また共有用のユーザーとMacで実際に使っているユーザーが違っていたりなどすると、ファイルの所有者が問題になることがある。&lt;/p&gt;&#10;&lt;p&gt;もし所有権を変えたい場合、&lt;/p&gt;&#10;&lt;pre&gt;`chown -R &lt;user&gt;.&lt;group&gt; FILE`&lt;/pre&gt;&#13;&#10;&lt;p&gt;&amp;lt;user&amp;gt;と&amp;lt;group&amp;gt;には適切なもの。&lt;/p&gt;&#10;&lt;h3 id="ユーザーの変更"&gt;ユーザーの変更&#10;&lt;/h3&gt;&lt;p&gt;アクセス権問題が面倒な場合、共有フォルダ内での操作は共有用のユーザーで実行する運用も考えられる。&lt;/p&gt;&#10;&lt;pre&gt;`sudo su - user`&lt;/pre&gt;&#13;&#10;&lt;p&gt;user部分には共有用のユーザー。でも都度アクセス権の修復をするのとどちらが面倒かと言われると微妙な気がする。&lt;/p&gt;&#10;&lt;h3 id="デフォルトのパーミッション設定の変更"&gt;デフォルトのパーミッション設定の変更&#10;&lt;/h3&gt;&lt;p&gt;アクセス権問題が本当に面倒な場合、いっそのこと、デフォルトのファイル・ディレクトリ生成時のパーミッション設定を変える、ということも考えられる……が、たかがファイル共有のための割には影響が大きすぎるし、これはやらないほうがいい気がする。やるなら「umask mac」とかで調べる（適当）。&lt;/p&gt;&#10;&lt;h3 id="濁点問題"&gt;濁点問題&#10;&lt;/h3&gt;&lt;p&gt;Macのファイル共有のうえで知っておきたい問題として、Macの濁点問題がある。Macのファイルシステムの仕様なのだが、Macではファイル名の「がぎぐげご」が「か゛き゛く゛け゛こ゛」扱いというけったいな問題だ。普段は気にならないかもしれないが、スクリプトを動かそうとした時や、あるいはファイル圧縮しようとした時などに問題が発生する。このあたりの話は下記でつらつら。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/gdrive-mac-win/" &gt;MacとWindowsのGoogle ドライブによる共有、また濁点でハマる – 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/30878779-2/" &gt;rsyncでiconvオプションをつけると、deleteオプションの挙動が変わる？？(Mac) – 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/46001270-2/" &gt;Macでファイル共有の悩み…文字コード（濁点）、sambaの遅さ、iSCSIの対応 – 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ただし、sambaではきちんと処理してくれるようなので、問題は起きない……はず。多分。だがsshとかその他のオンラインストレージサービスを含めた運用しだすと、問題発生するかも。&lt;/p&gt;&#10;&lt;h2 id="一番ステキなファイル共有はdropbox"&gt;一番ステキなファイル共有はDropbox&#10;&lt;/h2&gt;&lt;p&gt;ここまでアレコレと書いてきてなんだけれど（むしろアレコレ書いたからこそか）、一番ステキにファイル共有できる手段はDropbox。Dropboxは同期も早いし確実だし、勝手にバックアップ取ってくれるし、アクセス権の問題もあまりないし、濁点問題も治してくれるし（地味に嬉しい）、Linuxでも使えるオンラインストレージサービスだし、容量とセキュリティ・ポリシーの問題さえクリアしているなら、Dropboxが最高なので、Dropboxを使えばいいのだと思う。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://support.apple.com/kb/PH25346?locale=ja_JP&amp;amp;viewlocale=ja_JP" target="_blank" rel="noopener"&#10; &gt;macOS Sierra: Windows ユーザとファイルを共有するように Mac を設定する&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://support.apple.com/kb/PH25287?locale=en_US&amp;amp;viewlocale=ja_JP" target="_blank" rel="noopener"&#10; &gt;macOS Sierra: Mac 内の項目に対するアクセス権を設定する&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://abe-law-office.jp/itech/mac_windows_file_sharing_1" target="_blank" rel="noopener"&#10; &gt;MacとWindowsのファイル共有（１） | 阿部法律事務所&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Google ドキュメントでコードをシンタックスハイライト</title><link>https://hack-le.com/gdoc-syntax/</link><pubDate>Wed, 28 Mar 2018 11:35:46 +0900</pubDate><guid>https://hack-le.com/gdoc-syntax/</guid><description>&lt;p&gt;皆で参照するドキュメントの作成ツールとして、Google ドキュメントを使い始めた。変更がリアルタイムで反映されるし、コメントつけられるし、草案（という名の最終成果物）の作成にはとても便利だ。&lt;/p&gt;&#10;&lt;p&gt;で、ソースコードを見やすくするには頑張らないといけないのかなと思ったのだが、アドオンを導入したら一発で、とてもみやすい。もしかしてGoogle ドキュメント最強なんだろうか。&lt;/p&gt;&#10;&lt;h2 id="code-blocks"&gt;Code Blocks&#10;&lt;/h2&gt;&lt;p&gt;アドオンの導入は、Google ドキュメントを開いたあと、「アドオン」→「アドオンを取得」より、codeとかで検索し、&lt;strong&gt;Code Blocks&lt;/strong&gt;を導入する。シンタックスハイライトにはpretty codeというアドオンのもあるのだが、こちらは最終更新日が2014年なので。&lt;/p&gt;&#10;&lt;p&gt;以下のコードに対して使ってみる。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6455&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1556&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/56f59afdf9bc7a9e9dbd37a2ce2e8315.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Code Blocksの使用[/caption]&lt;/p&gt;&#10;&lt;p&gt;Startすると、処理が行われ、右サイドにプロパティが表示されるので、Languageやbackgroudの有無などを適宜選択して、Previewで確認する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6456&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;440&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/693372c8c1b3e8c898a94d47b94f5a44.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Preview[/caption]&lt;/p&gt;&#10;&lt;p&gt;Formatしたら、変更が反映されて、いい感じになる。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6457&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1308&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/67832e92cc70a75943fca12150371e7a.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;いい感じになる[/caption]&lt;/p&gt;&#10;&lt;p&gt;素敵。Wordで頑張ってスタイル作っていたのが阿呆のようだ。&lt;/p&gt;&#10;&lt;p&gt;開発者に感謝である。&lt;/p&gt;&#10;&lt;h2 id="便利"&gt;便利&#10;&lt;/h2&gt;&lt;p&gt;まだGoogle ドキュメントを試しに使ってみている、という段階ではあるけれど、その便利さにたいへん驚いている。自分一人だとローカルでの作業と必要なことが大して変わらないので、それだったらば専用のライティングソフトを使うほうが良いだろうが、他者と共同作業をすると、クラウドの特性が大いに活かされ、非常に便利だ。&lt;/p&gt;&#10;&lt;p&gt;ただ、画像のキャプションとか、見出しの番号付けとか、真面目にそれなりの長さのドキュメントを作ろうとすると困るところもあるので、そういう時は結局はWordなりWriterなりPagesなりを使うことになる。だが、ちょっとしたドキュメントの作成ならばGoogle ドキュメントが最強なのではなかろうか。そして、ドキュメントの大半はちょっとしたものである。つまり、最強である。&lt;/p&gt;</description></item><item><title>Fusion Driveと純SSDの分かれ目…5年前のMacBook Airが最新のiMacに勝つ時</title><link>https://hack-le.com/fusion-ssd-mba-imac/</link><pubDate>Sun, 25 Mar 2018 14:48:10 +0900</pubDate><guid>https://hack-le.com/fusion-ssd-mba-imac/</guid><description>&lt;p&gt;先日、移動先でプログラムを　普段仕事で使っているiMac 2017の、十数倍の処理速度が出て驚いた。5年前のモデルである、MacBook Air 2013が、2017年に発売された最新のiMac 2017（27インチ, Fusion Drive 2TB）に勝っている性能は一つしかない。ストレージ性能だ。&lt;/p&gt;&#10;&lt;h2 id="ストレージ性能の勝利"&gt;ストレージ性能の勝利&#10;&lt;/h2&gt;&lt;p&gt;考えてみれば当たり前のことかもしれないが、実際に目の当たりにするとやはり驚きがある。あるプログラムで、iMac 2017よりもMacBook Air 2013のほうが速かった。&lt;/p&gt;&#10;&lt;p&gt;それは、100万行ばかりのcsvファイル2つを参照し、条件に基づいてデータの書き換えを行うようなプログラムだ。泥臭い書き方をしていることもあり、そこそこの読み書き（それも相当に細かい）をすることになる。&lt;/p&gt;&#10;&lt;p&gt;普段は仕事で使っているiMac 2017で実行しているのだが、席を離れて実行する際、私用の愛機MacBook Air 2013(11インチ)を使ったところ、処理速度が十数倍であった。&lt;strong&gt;iMac 2017(27inch)にMacBook Air 2013(11inch)が十数倍の差をつけて勝利&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;その時は驚いたが、考えてみれば当たり前か、とも思った。iMac 2017は2TBのFusion Driveで、SSD部分は128GBしかなく、大部分はHDである。一方MacBook Air 2013は256GBのSSDで、このモデルのストレージ速度は当時大きく話題となった。&lt;/p&gt;&#10;&lt;p&gt;ストレージ速度だけを取ってみれば、MacBook Air 2013のほうが性能が高い。もちろん、それはiMac 2017がFusion Driveだからで、もしSSDのみにカスタマイズしていれば、結果は異なったろう（それ相応のプライスとなるが）。&lt;/p&gt;&#10;&lt;p&gt;つまり、これは畢竟Fusion DriveとSSDの差である。&lt;/p&gt;&#10;&lt;p&gt;私の愛着ある愛機MacBook Air 2013が勝利（？）したということで、ちょっと嬉しかったのだが、こういう結果になるのはそもそもプログラムに問題がある（泥臭すぎる）ような気がすると、ちょっと修正したところ、処理にかかる時間が1/100くらいになった。へい。&lt;/p&gt;&#10;&lt;h2 id="ctoでssdにするか"&gt;CTOでSSDにするか&#10;&lt;/h2&gt;&lt;p&gt;さて、私のプログラミングのまずさはともかくとして、今回のことで思ったことは、ストレージ性能が大事になる場面もままあろうということだ。今後、iMacやらMac miniやらを購入する時は、Fusion Driveのままでいくのか、それともSSDにするのか、考えねばなるまいなぁ。&lt;/p&gt;&#10;&lt;p&gt;というかまぁ、私の気持ちとしてはもうだいぶSSDに揺れている。恐らく次のMac miniはすべて標準がFusion Driveであろうが、どうせメモリの増設でCTOしなくてはならないのなら（標準のメモリはどうせ8GBだろう）、ストレージもやってしまったほうが長期的に幸せになれそうな気がする。なにしろ今のMac mni 2012でも性能としては十分なのだから（メモリは16GB、ストレージはSATA3ながら500GB SSD + 1TB HDに増設済みではある）、次のモデルは冗談抜きで普通に10年使えてしまいそうだ（壊れなければ）。ならば決して悪くない投資だろう。&lt;/p&gt;&#10;&lt;p&gt;まぁMac mini 2014でも、ストレージの拡張性は辛うじて残されていたので、吊るしで買って、ストレージだけなんとかする、というシナリオも考えられるものの、やはり手間だし、そもそも最近のSSD高騰の流れから、苦労の割にあまり美味しくはなさそうに思う。というか、クック以降のAppleのやり方を見る限り、そもそも拡張性を残してもらえるかがまず未知数だ…。&lt;/p&gt;&#10;&lt;p&gt;やはり理想はSSD 512GBにCTOか。果たしておいくら万円することやら……などと、まだ発売されもしないMac mini 2018の構成に想いを馳せる昼下がり。&lt;/p&gt;</description></item><item><title>Macでeclipse 4.7.2 + Java 8 + Tomcat 8.5を動かす</title><link>https://hack-le.com/mac-eclipse-java8-tomcat8/</link><pubDate>Thu, 15 Mar 2018 08:57:59 +0900</pubDate><guid>https://hack-le.com/mac-eclipse-java8-tomcat8/</guid><description>&lt;p&gt;ついにJavaをやらざるを得なくなってしまった。&lt;/p&gt;&#10;&lt;p&gt;Mac環境下で、eclipse + Java 8 + Tomcat 8.5系で、ローカル環境でアプリケーションを動かすまでのメモ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;iMac 2017 27inch&lt;/li&gt;&#10;&lt;li&gt;macOS High Sierra 10.13.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ここに、eclipse 4.7.2、Java8系、Tomcat8.5系をインストール。&lt;/p&gt;&#10;&lt;h2 id="eclipseのインストールと設定"&gt;eclipseのインストールと設定&#10;&lt;/h2&gt;&lt;p&gt;公式サイト「&lt;a class="link" href="https://www.eclipse.org/" target="_blank" rel="noopener"&#10; &gt;Eclipse - The Eclipse Foundation open source community website.&lt;/a&gt;」から最新版のeclipseをダウンロードしてインストール。日本語化はしない。&lt;/p&gt;&#10;&lt;p&gt;で、動かしたいプロジェクトを適当にインポートなりなんなりして追加する。&lt;/p&gt;&#10;&lt;p&gt;Emacsキーバインドが使えないとストレスで禿げるので、個人的な趣味で設定変更。&lt;/p&gt;&#10;&lt;p&gt;環境設定→General→Keys&lt;/p&gt;&#10;&lt;p&gt;よりSchemeをEmacsに変更。ただ、これだけだとC-mとかC-hが使えない。別途ショートカットの割当までしないといけない。C-hはOpen Search Dialogに割り当てられているので、同じくKeysから検索して、Bindingを変更するか削除してやり、新しくDelete PreviousにC-hをBindingする。C-mはMaximize Active View or Editorに割り当てられているので、これも変更するか（自分はCmd-\にした…Atom的に）削除する。ただ、new lineに相当するものが見つけられなかったので、C-mについてはそのままにしている。&lt;/p&gt;&#10;&lt;p&gt;参考&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/7coco/items/1132d54109f603443661" target="_blank" rel="noopener"&#10; &gt;Mac で Eclipse を使い始めたメモ ( Emacs 設定も ) - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="javaのインストールと設定"&gt;Javaのインストールと設定&#10;&lt;/h2&gt;&lt;p&gt;オラクルのサイト「&lt;a class="link" href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" target="_blank" rel="noopener"&#10; &gt;Java SE Development Kit 8 - Downloads&lt;/a&gt;」からJDK 8ダウンロード。もうJava 9が出ているけれど、今回は8（理由は後述）。9をインストールしていても構わない。eclipse側でどのバージョンを使うか設定するので。&lt;/p&gt;&#10;&lt;p&gt;eclipseで設定。環境設定→Java→Installed JRE　より、Java SE 8を選択。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6427&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1434&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/56828d404a0e137eacec2a5d72caf3f7.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Java SE 8を選択[/caption]&lt;/p&gt;&#10;&lt;p&gt;設定したらApply and Close。&lt;/p&gt;&#10;&lt;h2 id="tomcatのインストールと設定"&gt;Tomcatのインストールと設定&#10;&lt;/h2&gt;&lt;p&gt;Homebrewを使う。tomcatをそのままinstallすると、現在の最新版の9がインストールされるので、@8を指定する。&lt;/p&gt;&#10;&lt;pre&gt;`brew install tomcat@8`&lt;/pre&gt;&#13;&#10;&lt;p&gt;.bash_profileに以下を追記してパスを通す。&lt;/p&gt;&#10;&lt;pre&gt;`export PATH="/usr/local/opt/tomcat@8/bin:$PATH"`&lt;/pre&gt;&#13;&#10;&lt;p&gt;以下を実行して、tomcatを起動。&lt;/p&gt;&#10;&lt;pre&gt;`brew services start tomcat@8`&lt;/pre&gt;&#13;&#10;&lt;p&gt;ブラウザより、localhost:8080にアクセスして、変な猫のうつったページを開いたらOK。&lt;/p&gt;&#10;&lt;pre&gt;`brew services stop tomcat@8`&lt;/pre&gt;&#13;&#10;&lt;p&gt;Homebrew便利。&lt;/p&gt;&#10;&lt;p&gt;eclipseの設定。メニューバーより、&lt;/p&gt;&#10;&lt;p&gt;環境設定→Server→Runtime Environments&lt;/p&gt;&#10;&lt;p&gt;AddでApache Tomcat v8.5 を追加。Nextで設定。&lt;/p&gt;&#10;&lt;p&gt;directoryは/usr/local/Cellar/tomcat@8.5/8.5.28/libexec。まぁバージョンに合わせて。ディレクトリ名が違うといちいち怒られる。JREはJava SE 8にしておく。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6424&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1044&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/26a4a9147925cdad190c6ddb68b751cc.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Tomcatの設定[/caption]&lt;/p&gt;&#10;&lt;p&gt;現行最新のTomcat 9も同じようにインストールして設定可能。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6425&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1228&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/2aa927f30f4a9e31957bb12fd5e11cc0.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Tomcat 8.5と9[/caption]&lt;/p&gt;&#10;&lt;p&gt;終わったらApply and Close。&lt;/p&gt;&#10;&lt;p&gt;そうしたら、Serversタブより、Tomcat v8.5 Serverを右クリックしてAdd and Removeより、動かしたいアプリケーションのプロジェクトを追加して、Runまたはデバッグすればよろし。&lt;/p&gt;&#10;&lt;h2 id="java-8の理由"&gt;Java 8の理由&#10;&lt;/h2&gt;&lt;p&gt;主旨とは関係ないが、Java 9が出ているのにJava 8を使う理由について。&lt;/p&gt;&#10;&lt;p&gt;これは現在携わっているプロジェクトがJava 8を利用しているから。最初はJava 9でもいけるかな、と思って環境構築していたのだけれど、鬼のようにエラーが出て挫折。原因は、Java 9からdeprecated扱いで標準クラスパスから外されたJava EE APIの一つJAXB APIを利用していたため。&lt;/p&gt;&#10;&lt;p&gt;java実行時に&amp;ndash;add-modules java.xml.bindを入れたらとりあえず動く、とか、eclipseの場合はeclipse.iniにその記述を入れる、とかは調べたら出てきたものの、うまくいかず。まぁ素直にJava 8を使うことにした。&lt;/p&gt;&#10;&lt;p&gt;以下の情報が参考になった。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception-in-j" target="_blank" rel="noopener"&#10; &gt;jaxb - How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9 - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://nulab-inc.com/ja/blog/nulab/java9-migration/" target="_blank" rel="noopener"&#10; &gt;ヌーラボのアカウント基盤を Java 9 にマイグレーションして起きた問題と解決法 | ヌーラボ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>J-COM in my room 12Mプラン、5ヶ月目の雑感</title><link>https://hack-le.com/jcominmyroom5/</link><pubDate>Sun, 11 Mar 2018 21:38:22 +0900</pubDate><guid>https://hack-le.com/jcominmyroom5/</guid><description>&lt;p&gt;私の住んでいるマンションは、J-COM in my roomなるものに加入しており、12Mプラン、すなわちベストエフォート12Mbpsまでの通信速度ならば、費用を払わずにサービスを享受できる（もちろん公益費にかかってるんだろうが…）。そのへんのことを「&lt;a class="link" href="https://hack-le.com/jcom-12m/" &gt;J-COM in my roomの12Mプランが意外と実用的だ&lt;/a&gt;」の記事に書いたが、あれから数ヶ月たったので、雑感をもう少し書き連ねる。&lt;/p&gt;&#10;&lt;h2 id="12mbpsは時々つらい"&gt;12Mbpsは時々つらい&#10;&lt;/h2&gt;&lt;p&gt;12Mbps、ということは最大1.5MB/sということである。驚くべきことに（？）、本当にちゃんと出ているので、これはまぁ一昔前のADSLよりは速いということで、十分に実用的だ。ただ調べていると、J-COMは地域格差が激しいように見受けられるので、私の地域がたまたまあたりだっただけかもしれない。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、2018年現在、世の中のサービスは光回線を前提としているようで、たとえばOSのダウンロードや、ゲームの初回インストール等にかかる時間はやはりそれなり。後は電子書籍の購入で、漫画など容量の大きなものをまとめてダウンロードすると、それなりに時間がかかる。夜中の寝ている間にやっておくなど、計画性が求められる。&lt;/p&gt;&#10;&lt;h2 id="曜日時間帯の差は特に感じない"&gt;曜日、時間帯の差は特に感じない&#10;&lt;/h2&gt;&lt;p&gt;これも地域によりけりなのかもしれないが、特に日曜日だけ重い平日夜だけ重いとかそんなことを感じた覚えはない。まぁ平日の日中は家にいないので、私がネットを楽しめる時は必然的に込みがちな時間帯であるし、それで不便を感じないということは、問題ないということだろう。&lt;/p&gt;&#10;&lt;h2 id="ストリーミングで動画は見れないこともない"&gt;ストリーミングで動画は見れないこともない&#10;&lt;/h2&gt;&lt;p&gt;私はAmazonプライム会員であるので、Fire TV Stickを使って、23インチディスプレイでAmazonプライムビデオを楽しんでいる。12Mbpsというのは動画をストリーミングで見るのには若干心許ない速度ではあるが、なんとか見ることができている……ものの、時々ぶつぎれて、しばらくたたないと再接続できなくなることがある。これは人によってはたいへん苛々させられるだろう。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6450&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;836&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2018/03/456abad2e8eb56b0cc3da6232003ff06.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;接続不良の様子[/caption]&lt;/p&gt;&#10;&lt;p&gt;しかし、動画のストリーミングは無理かな、と思っていたので、見られるだけでも十分だ。もちろん、Youtubeの閲覧にも支障はない。&lt;/p&gt;&#10;&lt;h2 id="ネットワークの設定は若干ややこしいのでは"&gt;ネットワークの設定は若干ややこしいのでは&#10;&lt;/h2&gt;&lt;p&gt;私が一番「ん？」と思ったのはネットワーク周りの設定だった。これはJ-COM in my roomというより、J-COM自体の問題だ。&lt;/p&gt;&#10;&lt;p&gt;DNSのみならず検索ドメインも指定する必要があるのだが、私の身の回りにいる人たちの標準的なITスキルを考えるに、難しいところがあるのではないかと思う。実際、Fire TV Stickでもそのへんの設定に苦労した（設置してしばらくは、いくら設定しても何故か使えなかった…諦めていたある日、何の気なしにつけてみると、突然使えるようになっていた）。&lt;/p&gt;&#10;&lt;p&gt;また、Amazon Echo Dotを購入したものの、最初に設定してからしばらくすると（半日程度か）、繋がらなくなってしまう現象が起きている。ただ、これは我が家で無線LANルータを2台稼働しているが故の混乱かもしれない。職場に持っていって、そのまま定着してしまったので、今となっては原因不明。今後HomePodやGoogle Homeを購入した時、同じ現象が起きるかどうか。ひょっとしたら、前述したAmazonプライムビデオのぶつ切れ問題は、ネットワーク速度ではなくネットワークの不安定さによるものなのかも？&lt;/p&gt;&#10;&lt;p&gt;ネットワーク周りは引っかかる人が多いのではなかろうか。あと、モデムルータを貸与されるタイプはどうにも好かない。&lt;/p&gt;&#10;&lt;h2 id="上り速度の罠"&gt;上り速度の罠&#10;&lt;/h2&gt;&lt;p&gt;これもJ-COM in my roomというよりJ-COM自体の問題だが、J-COMは上り速度が異常に遅いという罠がある。12Mプランにおいて上り速度は2Mbpsだし、上位の高速なプランにしても、上りはせいぜい10Mbpsにしかならない。これはつまり、サーバー運用はもちろん、いわゆるオンラインゲームにもあまり向かない、ということだ。&lt;/p&gt;&#10;&lt;h2 id="総評"&gt;総評&#10;&lt;/h2&gt;&lt;p&gt;標準で備え付けられているサービスとしては十分実用的。さすがに快適とまでは言わないが、私が問題なくネットを巡回できているくらいだから、多くの人にとっては必要十分はず。ただし、オンラインゲームや自宅サーバーを趣味とする人、年がら年中ストリーミングで動画を再生するような動画サービスのヘビーユーザーにはつらいだろう。&lt;/p&gt;</description></item><item><title>Mac mini 2018は本当に出るのかなぁ…</title><link>https://hack-le.com/macmini2018/</link><pubDate>Sun, 11 Mar 2018 14:03:16 +0900</pubDate><guid>https://hack-le.com/macmini2018/</guid><description>&lt;p&gt;ここ最近、Mac miniの新型が出るのではないかとまことしやかに囁かれている。あくまで噂話レベルだが。もう放置プレイ期間が4年目に差し掛かり、皆限界だ。私のMac mini 2012も、最近ちょこちょこと怪しい挙動があり、もしも壊れたら…と思うと、新型の発売を願うばかり。&lt;/p&gt;&#10;&lt;p&gt;もしアップデートされることがあれば、期待できるマシンになるのではないかと思っている（願っている？）。&lt;/p&gt;&#10;&lt;h2 id="放置プレイ進行中だが"&gt;放置プレイ進行中だが&#10;&lt;/h2&gt;&lt;p&gt;出るかもしれないとはいっても、やはり例によって噂話の域を出ていない。そもそもMac miniに関心を持っている人数が、他Apple製品と比べると…特に、Appleのドル箱iPhoneなんかと比べられた日には。&lt;/p&gt;&#10;&lt;p&gt;ただ、待ちわびている人は確かにいる。自分もその一人である。とはいえ、今使っているMac mini 2012自体は今でもちゃんと使えているので、発売したからといって即購入に至るかといえば、そこは微妙なところ。ただ、軽いプチフリが頻発したり、朝起きたら再起動していたり、なんてことも最近はよくあるので、いざという時のためにも魅力ある新型が発売されてほしいわけだ。&lt;/p&gt;&#10;&lt;p&gt;なにしろ、前回のアップデートからもう4年目である。しかも前回のアップデートは、（上位モデルでも）CPUがクアッドコアからデュアルコアに成り下がるという、まさかのダウングレードであった。そりゃまぁ、1コアあたりの性能や、消費電力という観点もあるから、一概にダウングレードとは言えないという異論もあろうけれど、仮想化や複数のプログラムを常時稼働させるような、ある程度ヘビーな使い方をする向きからすると、やはりスペックダウンの誹りは免れない。おまけにメモリのソルダリングなどもあって、数少ない拡張性が潰された2014モデルの印象は非常に悪い。&lt;/p&gt;&#10;&lt;p&gt;Mac mini 2012には、ライトからヘビーまで包み込む懐の深さがあったのだが……。iMacを買いたまへ、というAppleからのメッセージかもしれないが、一体型はやはりジャンルが違うと思うのである。Mac Proもあんなだし、ここ数年のAppleのMacに対するやり方は辟易とするばかりだ。その極致が、去年発売されたiMac Proだろう。&lt;/p&gt;&#10;&lt;p&gt;さすがに反発もあったのか、Mac Proをモジュラー型で再開発する、という発表もあり、若干の軌道修正も見られるものの、基本的な方向性は変わっていないだろう。不安である。&lt;/p&gt;&#10;&lt;h2 id="期待もある"&gt;期待もある&#10;&lt;/h2&gt;&lt;p&gt;それでも、もしMac miniがアップデートされるなら、今回は期待してよいかなと思っている。というのも、Ryzen旋風のおかげなのか、Mac miniで使われるだろうCPUが4コアになりそうなので。&lt;/p&gt;&#10;&lt;p&gt;あとはメモリが16GB標準だと文句ないのだが、iMacでさえ8GBが標準なので、まぁそこはCTOしなくてはなるまいな。せめて自分で換装できればね。それはきっと、もう望むべくもないのだろうな。せめてストレージだけでも、と思うが、昨今メモリもSSDも何もかも高すぎるから、自分で変えられたところで、価格的メリットはあまり大きくないかもしれない。&lt;/p&gt;&#10;&lt;p&gt;まぁそれもこれも、とにかくまず出てくれないことにはね。というかね、さすがに今年出なかったら、いくらなんでもそりゃないよ。重要な製品だ、なんてリップサービスまでしといてね。お願いします。&lt;/p&gt;</description></item><item><title>Macのターミナルでコピペ(pbcopy,pbpaste)</title><link>https://hack-le.com/pbcopy/</link><pubDate>Mon, 05 Mar 2018 17:51:17 +0900</pubDate><guid>https://hack-le.com/pbcopy/</guid><description>&lt;p&gt;Macのターミナルでコピペ作業する備忘録。テキストファイルの中身などを丸ごとコピペしたい時などによく使う、pbcopyおよびpbpasteコマンド。特にテキストファイルが長大だと役に立つ。screencaptureコマンドといいOSの機能に関わるコマンドは便利。&lt;/p&gt;&#10;&lt;h2 id="pbcopy"&gt;pbcopy&#10;&lt;/h2&gt;&lt;p&gt;pbとはpaste board、いわゆるクリップボードのこと。pbcopyコマンドを使うと、コマンドラインでコピペできる。&lt;/p&gt;&#10;&lt;p&gt;たとえばhoge.txtの中身をコピーしたい場合は以下のように。&lt;/p&gt;&#10;&lt;pre&gt;`cat hoge.txt | pbcopy`&lt;/pre&gt;&#13;&#10;&lt;p&gt;コピーした内容はCmd + Vでペーストできるし、次のpbpasteコマンドでもペーストできる。&lt;/p&gt;&#10;&lt;h2 id="pbpaste"&gt;pbpaste&#10;&lt;/h2&gt;&lt;p&gt;pbpasteコマンドにより、コマンドラインでクリップボードの中身をペーストする。そのまま使うと標準出力に出力。&lt;/p&gt;&#10;&lt;pre&gt;`pbpaste`&lt;/pre&gt;&#13;&#10;&lt;p&gt;パイプやリダイレクトを使うと幅が広がる。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>crontabで気をつけていること</title><link>https://hack-le.com/crontab/</link><pubDate>Thu, 01 Mar 2018 10:26:58 +0900</pubDate><guid>https://hack-le.com/crontab/</guid><description>&lt;p&gt;たまにcron使おうとすると、注意事項をしょっちゅう忘れてしまうので、自分用にメモ。なんか他にも色々あったような気がするがとりあえず思いついただけを。&lt;/p&gt;&#10;&lt;h2 id="実行ユーザーと環境変数"&gt;実行ユーザーと環境変数&#10;&lt;/h2&gt;&lt;p&gt;実行ユーザーはcrontabを実行して編集したユーザー。管理者権限がほしい場合は、sudoでcrontabを編集する。&lt;/p&gt;&#10;&lt;p&gt;環境変数を以下のようにして調べる。&lt;/p&gt;&#10;&lt;pre&gt;`* * * * * /bin/env &gt; ~/env.txt`&lt;/pre&gt;&#13;&#10;&lt;p&gt;~が使える。で、結果は以下。&lt;/p&gt;&#10;&lt;pre&gt;`XDG_SESSION_ID=43440&#13; SHELL=/bin/sh&#13; USER=hoge&#13; PATH=/usr/bin:/bin&#13; PWD=/home/blog&#13; LANG=en_US.UTF-8&#13; SHLVL=1&#13; HOME=/home/hoge&#13; LOGNAME=hoge&#13; XDG_RUNTIME_DIR=/run/user/1000&#13; _=/bin/env&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これらの環境変数が使えるわけだが、これでは困るケースも多々ある。&lt;/p&gt;&#10;&lt;p&gt;もっとも簡単なやり方は、crontabに直接 VAR=hogehoge の形で書き込んでしまうことだろう。ただいちいち記述するのも面倒だし、APIのKEYなどは抵抗があるしで、私はsourceコマンドで環境変数を記述したファイルを読み込んでからコマンド実行することが多い。&lt;/p&gt;&#10;&lt;p&gt;その他、bashでは-lオプションを使うとログインシェルとして実行できるので、&lt;/p&gt;&#10;&lt;pre&gt;`* * * * * /usr/bin/bash -l -c 'cmd'`&lt;/pre&gt;&#13;&#10;&lt;p&gt;などとすることもできる。個人で管理しているVPSなんかならこれでも十分と思う。&lt;/p&gt;&#10;&lt;p&gt;参考サイト&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://progmemo.wp.xdomain.jp/archives/790" target="_blank" rel="noopener"&#10; &gt;cronでの環境変数設定 - システム開発メモ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://takuya-1st.hatenablog.jp/entry/20120114/1326520752" target="_blank" rel="noopener"&#10; &gt;Crontabの環境変数はどうなっているのか、調べる - それマグで！&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ファイルの置き場所"&gt;ファイルの置き場所&#10;&lt;/h2&gt;&lt;p&gt;crontabのファイルは/var/spool/cron/下にユーザー名で置いてある。普通はcrontab -lで見るので使わないと思うが。&lt;/p&gt;&#10;&lt;p&gt;他、/etc/cron.d/や/etc/cron.daily/下にスクリプトを置くと、管理者権限でよしなに実行してくれる。&lt;/p&gt;&#10;&lt;p&gt;参考サイト&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://vividcode.hatenablog.com/entry/man-cron-and-crontab" target="_blank" rel="noopener"&#10; &gt;cron 設定ファイル (crontab ファイル) の置き場所と書式について - ひだまりソケットは壊れない&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="dateの"&gt;dateの%&#10;&lt;/h2&gt;&lt;p&gt;cronではdateコマンドを実行することもよくあるが、dateコマンドで使う%にはエスケープシーケンスをつける必要がある。&lt;/p&gt;&#10;&lt;pre&gt;`* * * * * echo hoge &gt; ~/$(date +\%Y\%m\%d).txt`&lt;/pre&gt;&#13;&#10;&lt;p&gt;こんな感じ。&lt;/p&gt;</description></item><item><title>Excelの闇。セル内の改行とcsv。</title><link>https://hack-le.com/cell-lf-csv/</link><pubDate>Wed, 28 Feb 2018 19:24:20 +0900</pubDate><guid>https://hack-le.com/cell-lf-csv/</guid><description>&lt;p&gt;世の中で最も愛と憎悪を一身に受けているソフトウェアはExcelじゃなかろうかと思う。本当にあちこちで使われている。もうそれしか使わない勢いだ。Excelは表計算ソフトを超えて、ライティングソフトでありDTPソフトでありペイントツールでありプロッターでありすべてである。&lt;/p&gt;&#10;&lt;p&gt;というのはもちろん愚痴で、無意味にExcelで編集されたデータを私は憎む。可能であれば直ちにcsvに変換するのだが、セル内の改行という悪魔に出会って面倒臭い。&lt;/p&gt;&#10;&lt;h2 id="excelは表計算ソフト"&gt;Excelは表計算ソフト&#10;&lt;/h2&gt;&lt;p&gt;Excelは確かに便利なものだと思うが、何でもかんでもExcelで編集されると辟易とする。Excelは表計算ソフトである。表しかないドキュメントであれば、Excelを使うのもわからないではないが、小論文のような文章の羅列をExcelで編集する人はマゾヒストかと思う。まぁたいていは作成者のWordアレルギーで、主に図表の挿入やらで思うようにいかずブチ切れた過去を持っていたりするようだ。確かにWordは癖の多いソフトではあるが、だからといってより使いづらい方向に行ってどうするのだ……。&lt;/p&gt;&#10;&lt;p&gt;もう一つ度し難いのが、計算しない数値の羅列だ。表計算ソフトなのだから、計算しないのであればテキストファイルで十分である。すなわち、csv。まぁテキストファイルはテキストファイルで、文字コード、改行コード、機種依存文字についての最低限の理解がないと、色々なトラップに引っかかってしまうものの、逆に言うとそこさえ気をつけておけば問題がない。テキストファイルの取り回しの良さは、何物にも代えがたいものだ。&lt;/p&gt;&#10;&lt;h2 id="セル内の改行とcsv"&gt;セル内の改行とcsv&#10;&lt;/h2&gt;&lt;p&gt;ということで、Excelである必要がないな、と思ったものはとりあえずcsvにしてしまっているのだが、ちょっと困ったのがセル内に改行のあるファイルである。&lt;/p&gt;&#10;&lt;p&gt;セル内に改行があると、csv化した時に、&amp;ldquo;行1\n行2&amp;quot;のようになる。つまり、&amp;ldquo;&amp;ldquo;内に改行コードが含まれている。これが非常に厄介で、たとえばlessなどのページャで開けば、当然改行コードのあるところで改行されるから、&lt;/p&gt;&#10;&lt;p&gt;&amp;ldquo;行1&#10;行2&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;のように表示されてしまうわけだ。grepで検索する時にも当然行1と行2の部分は別の行として扱われてしまう。まぁやろうと思えば、いったん改行コードを削除した上で、カンマの数を頼りにして改めて改行するなど、やりようはいくらでもあると思うが、しかし手軽さがない…。これではテキストファイルとしての魅力がだいぶ薄れる。まだしもExcel形式のままのほうが扱いやすい。&lt;/p&gt;&#10;&lt;p&gt;セル内で改行が必要になるようなものを作らないでほしいと思うわけだが、そういうちょっとしたデータベースのようなものを、誰もがすぐに扱える形式で、となると、結局Excelになってしまうのかもしれない。&lt;/p&gt;</description></item><item><title>Pandasでcsv, excelデータの読み込み・書き込み</title><link>https://hack-le.com/pandas-csv-xlsx/</link><pubDate>Mon, 29 Jan 2018 10:52:04 +0900</pubDate><guid>https://hack-le.com/pandas-csv-xlsx/</guid><description>&lt;p&gt;Pandasでcsvおよびexcelデータについて、読み込みと書き込みをする。&lt;/p&gt;&#10;&lt;p&gt;環境はPython 3.6.3、Pandas 0.20.3。&lt;/p&gt;&#10;&lt;h2 id="やり方"&gt;やり方&#10;&lt;/h2&gt;&lt;p&gt;pythonでcsvの読み書きにはcsvモジュールがあるし、excelファイルの読み込みにはxlrd、書き込みにはxlsxwriterなどがある。が、その後のデータの扱いなども考えると、pandasを使うのがやりやすい（内部的に何を使っているかは置いといて）。&lt;/p&gt;&#10;&lt;p&gt;特に速度のことは考えない。まぁ速度を考えるならそもそもexcel形式のファイルなんて使わないだろうし。&lt;/p&gt;&#10;&lt;h3 id="読み込み"&gt;読み込み&#10;&lt;/h3&gt;&lt;p&gt;まずデータの読み込み。&lt;/p&gt;&#10;&lt;pre&gt;`df = pd.read_csv('hoge.csv', index=False, dtype='object', encoding='utf-8', skipinitialspace=True, escapechar='\\')&#13; df = pd.read_excel('hoge.xlsx', index=False, dytpe='object')&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;read_csvメソッドでcsvを読み込み、read_excelメソッドでxlsxを読み込む。読み込む際、インデックスの列がなければindex=Falseを指定する（勝手に連番で割り振られる）。また、勝手に型を判定されると不都合な場合（電話番号とか、数値判定されて頭の0が消されると困るようなやつ）は、dtype=&amp;lsquo;object&amp;rsquo;でとりあえず全部文字列として扱うとやりやすい。encodingは必要に応じて。utf-8ならあえて指定する必要はない。skipinitialspaceは、Trueにすると,の後の余分なスペースを無視してくれる。デフォルトではダブルクォーテーションがquotecharとしてセットされているが、\でエスケープしたい時はescapechar=&amp;rsquo;\&amp;rsquo;。エスケープシーケンスをさらにエスケープする。&lt;/p&gt;&#10;&lt;p&gt;そのほかのオプションは公式ドキュメント。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html" target="_blank" rel="noopener"&#10; &gt;pandas.read_csv — pandas 0.22.0 documentation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html" target="_blank" rel="noopener"&#10; &gt;pandas.read_excel — pandas 0.22.0 documentation&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;それと、以下の記事がわかりやすかった。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://pythondatascience.plavox.info/pandas/csv%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF" target="_blank" rel="noopener"&#10; &gt;Pandas で CSV ファイルやテキストファイルを読み込む – Python でデータサイエンス&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://note.nkmk.me/python-csv-skipinitialspace/" target="_blank" rel="noopener"&#10; &gt;Pythonでコンマの後に空白があるcsvを読むときは注意 | Python / note.nkmk.me&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="書き込み"&gt;書き込み&#10;&lt;/h3&gt;&lt;p&gt;データフレームを書き込む。&lt;/p&gt;&#10;&lt;pre&gt;`df.to_csv('hoge.csv', index=False, encoding='utf-8')&#13; df.to_excel('hoge.xlsx', index=False)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;to_csvメソッドでcsvファイルを書き込み、to_excelメソッドでxlsxファイルを書き込む。&lt;/p&gt;&#10;&lt;p&gt;そのほかのオプションは公式ドキュメント。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html" target="_blank" rel="noopener"&#10; &gt;pandas.DataFrame.to_csv — pandas 0.22.0 documentation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html" target="_blank" rel="noopener"&#10; &gt;pandas.DataFrame.to_excel — pandas 0.22.0 documentation&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>pythonでcsvファイルの入出力。エンコードとか改行コードとか考慮しつつ</title><link>https://hack-le.com/python-csv/</link><pubDate>Fri, 19 Jan 2018 14:48:13 +0900</pubDate><guid>https://hack-le.com/python-csv/</guid><description>&lt;p&gt;pythonにおけるcsvファイルの入出力について。csvは単なるテキストファイルであるけれど、文字コードやら改行コードやらクォーテーションの付け方やらを考えると、色々面倒臭い。&lt;/p&gt;&#10;&lt;p&gt;バージョンはpython3.6.4。Pandasは使わず標準のcsvライブラリでやる。たいていの場合Pandas使ったほうが楽ではある。&lt;/p&gt;&#10;&lt;h2 id="csvファイルの入出力"&gt;csvファイルの入出力&#10;&lt;/h2&gt;&lt;p&gt;文字コードがsjisで改行コードが\r\nのcsvファイル（つまりWindowsで普通に作られた場合）について入力または出力したい場合を考える。また、すべての項目についてダブルクォーテーションで囲っている。&lt;/p&gt;&#10;&lt;p&gt;引数にそのようなcsvファイルを取って入力とし、何も改変せずそのまま出力するスクリプトのソースコードを書く。&lt;/p&gt;&#10;&lt;pre&gt;`import csv&#13; import os&#13; import sys&#13; &#13; result=[]&#13; fname = sys.argv[1]&#13; &#13; # input&#13; with open(fname, newline='', encoding='cp932') as csvfile:&#13; content = csv.reader(csvfile, delimiter=',', lineterminator='\r\n',skipinitialspace=True)&#13; header = True&#13; for row in content:&#13; result.append(row)&#13; &#13; outname = "output_" + fname&#13; &#13; # output&#13; with open(outname, 'w', newline='', encoding='cp932') as csvfile:&#13; writer = csv.writer(csvfile, delimiter=',', lineterminator='\r\n', quoting=csv.QUOTE_ALL)&#13; writer.writerows(result)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;openする際にエンコードを指定し（特に指定しなければutf-8）、csv.readerまたはcsv.writerで、デリミタ・改行コード・クォーテーションの付け方を指定している。skipinitialspaceは、Trueにすると,区切りの後に余分な空白があったとき無視してくれる。&lt;/p&gt;&#10;&lt;h2 id="全角半角変換の処理を加える"&gt;全角半角変換の処理を加える&#10;&lt;/h2&gt;&lt;p&gt;簡単な処理、たとえば英数字は半角、日本語については全角にするような処理を加えてみる。処理についてはmojimojiライブラリを使わせていただいた。&lt;/p&gt;&#10;&lt;p&gt;スクリプトの引数は複数のcsvファイルとする。&lt;/p&gt;&#10;&lt;pre&gt;`import csv&#13; import os&#13; import sys&#13; import mojimoji&#13; &#13; def zenhan(val):&#13; val = str(val)&#13; val = mojimoji.zen_to_han(val, kana=False)&#13; val = mojimoji.han_to_zen(val, digit=False, ascii=False)&#13; return val&#13; &#13; if __name__ == '__main__':&#13; if len(sys.argv) == 1:&#13; sys.exit()&#13; &#13; fnames = sys.argv[1:]&#13; &#13; for fname in fnames:&#13; result=[]&#13; with open(fname, newline='', encoding='cp932') as csvfile:&#13; content = csv.reader(csvfile, delimiter=',', lineterminator='\r\n')&#13; for row in content:&#13; rrow = [zenhan(val) for val in row]&#13; result.append(rrow)&#13; &#13; outname = "output_" + fname&#13; with open(outname, 'w', newline='', encoding='cp932') as csvfile:&#13; writer = csv.writer(csvfile, delimiter=',', lineterminator='\r\n', quoting=csv.QUOTE_ALL)&#13; writer.writerows(result)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;読み込みの際に処理を加えている。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.python.jp/3/library/csv.html" target="_blank" rel="noopener"&#10; &gt;14.1. csv — CSV ファイルの読み書き — Python 3.6.3 ドキュメント&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://ja.pymotw.com/2/csv/" target="_blank" rel="noopener"&#10; &gt;csv – カンマ区切りのファイル - Python Module of the Week&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Pythonでファイル・ディレクトリ操作</title><link>https://hack-le.com/python-file-dir/</link><pubDate>Tue, 16 Jan 2018 11:43:06 +0900</pubDate><guid>https://hack-le.com/python-file-dir/</guid><description>&lt;p&gt;pythonでファイルやディレクトリを扱うときに個人的によく使う操作。よく使う割によく忘れて毎回調べてしまっている…。ので、メモ。なおPython 3.6。&lt;/p&gt;&#10;&lt;p&gt;以下、osとshutilをインポートしつつ。「&lt;a class="link" href="https://docs.python.jp/3/library/os.path.html" target="_blank" rel="noopener"&#10; &gt;11.2. os.path — 共通のパス名操作 — Python 3.6.3 ドキュメント&lt;/a&gt;」とか見つつ。&lt;/p&gt;&#10;&lt;h2 id="ファイル"&gt;ファイル&#10;&lt;/h2&gt;&lt;p&gt;f = &amp;lsquo;hoge/hoge1/hoge2/hogehoge.txt&amp;rsquo; があるとして。&lt;/p&gt;&#10;&lt;h3 id="ファイルのパスの作成"&gt;ファイルのパスの作成&#10;&lt;/h3&gt;&lt;p&gt;os.path.join(path)&lt;/p&gt;&#10;&lt;p&gt;プラットフォームによる差も吸収できる。&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; f = os.path.join('hoge','hoge1','hoge2','hogehoge.txt')&#13; &gt;&gt;&gt; f&#13; 'hoge/hoge1/hoge2/hogehoge.txt'&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="ディレクトリ名を省いてファイル名のみ取得"&gt;ディレクトリ名を省いてファイル名のみ取得&#10;&lt;/h3&gt;&lt;p&gt;os.path.basename(path)&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; os.path.basename(f)&#13; 'hogehoge.txt'&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="拡張子の抽出削除"&gt;拡張子の抽出、削除&#10;&lt;/h3&gt;&lt;p&gt;os.path.splitext(path)&lt;/p&gt;&#10;&lt;pre&gt;`os.path.splitext(f)&#13; ('hoge/hoge1/hoge2/hogehoge', '.txt')&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;タプルで返る。name, ext = os.path.splitext(f) とすれば、nameに名前、extに拡張子が.から入る。&lt;/p&gt;&#10;&lt;h3 id="ファイルの存在確認"&gt;ファイルの存在確認&#10;&lt;/h3&gt;&lt;p&gt;os.path.exists(path)&lt;/p&gt;&#10;&lt;p&gt;a.csv があるとする。&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; os.path.exists('a.csv')&#13; True&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="ファイルをコピーする"&gt;ファイルをコピーする&#10;&lt;/h3&gt;&lt;p&gt;shutilをインポート。&lt;/p&gt;&#10;&lt;p&gt;shutil.copyfile(src, dst)&lt;/p&gt;&#10;&lt;p&gt;a.csvをc.csvという名前でコピーしてみる。&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; shutil.copyfile('a.csv', 'c.csv')&#13; 'c.csv'&#13; &gt;&gt;&gt; os.path.exists('c.csv')&#13; True&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="ファイルの削除"&gt;ファイルの削除&#10;&lt;/h3&gt;&lt;p&gt;os.remove(path)&lt;/p&gt;&#10;&lt;p&gt;c.csv を消してみる。&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; os.path.exists('c.csv')&#13; True&#13; &gt;&gt;&gt; os.remove('c.csv')&#13; &gt;&gt;&gt; os.path.exists('c.csv')&#13; False&#13; &#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="ディレクトリ"&gt;ディレクトリ&#10;&lt;/h2&gt;&lt;p&gt;f = &amp;lsquo;hoge/hoge1/hoge2/hogehoge.txt&amp;rsquo; があるとして。&lt;/p&gt;&#10;&lt;h3 id="ディレクトリ名を調べる"&gt;ディレクトリ名を調べる&#10;&lt;/h3&gt;&lt;p&gt;os.path.dirname(path)&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; os.path.dirname(f)&#13; 'hoge/hoge1/hoge2'&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="ディレクトリの有無を調べる"&gt;ディレクトリの有無を調べる&#10;&lt;/h3&gt;&lt;p&gt;os.path.isdir(path)&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; os.path.isdir(f)&#13; False&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;存在すればTrueが返る。&lt;/p&gt;&#10;&lt;h3 id="ディレクトリを作成する"&gt;ディレクトリを作成する&#10;&lt;/h3&gt;&lt;p&gt;os.makedirs(path)&lt;/p&gt;&#10;&lt;p&gt;階層構造を持った状態で作ることができる。階層無しは os.mkdir(path)&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; os.makedirs(f)&#13; &gt;&gt;&gt; os.path.isdir(f)&#13; True&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;.txtなディレクトリになるがサンプルなので気にしない。&lt;/p&gt;&#10;&lt;h3 id="ディレクトリからファイル名一覧を取得"&gt;ディレクトリからファイル名一覧を取得&#10;&lt;/h3&gt;&lt;p&gt;os.listdir(path)&lt;/p&gt;&#10;&lt;p&gt;ディレクトリ部分を除いたファイル名だけ配列で返る。&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; os.listdir('.')&#13; ['a.csv', 'data', 'format.csv', 'hoge']&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;フルパスならglob。&lt;/p&gt;&#10;&lt;pre&gt;`&gt;&gt;&gt; import glob&#13; &gt;&gt;&gt; glob.glob('./*')&#13; ['./a.csv', './data', './format.csv', './hoge']&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;再帰的に走査する場合はos.walk()を使う。&lt;/p&gt;&#10;&lt;pre&gt;`for root, dirs, files in os.walk('.'):&#13; print(root)&#13; print(dirs, 'dirs')&#13; print(files, 'files')&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://takuya-1st.hatenablog.jp/entry/2014/04/26/030540" target="_blank" rel="noopener"&#10; &gt;Python でディレクトリのファイルをフルパスで取得する - それマグで！&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>一括で複数の画像ファイルを余白つけて正方形にする</title><link>https://hack-le.com/square-blank/</link><pubDate>Wed, 10 Jan 2018 11:52:25 +0900</pubDate><guid>https://hack-le.com/square-blank/</guid><description>&lt;p&gt;複数のサイズがまちまちな画像ファイルについて、一括でまとめて正方形にしたい。一辺の長さは縦幅と横幅のうち大きい方を採用し、足りない分は白または透明で塗りつぶす。&lt;/p&gt;&#10;&lt;p&gt;imagemagickを使ってシェルスクリプトで実装した。&lt;/p&gt;&#10;&lt;h2 id="ソースコード"&gt;ソースコード&#10;&lt;/h2&gt;&lt;p&gt;環境はmacOS 10.13でGNU bash 3.2.57。&lt;/p&gt;&#10;&lt;p&gt;まず、余白をつけるのは以下のコマンド。&lt;/p&gt;&#10;&lt;pre&gt;`convert hoge.jpg -background none -gravity center -extent 300x300 hoge-out.jpg`&lt;/pre&gt;&#13;&#10;&lt;p&gt;背景色を白に指定する場合は、-background noneでwhiteを指定。-gravityは開始位置で、指定しない場合は左上がデフォルト。&lt;/p&gt;&#10;&lt;p&gt;これを使って、複数ファイルについて適用するシェルスクリプトを以下に書く。余白は白色。画像以外のファイルを入力した場合はスルー。出力先はsquareディレクトリを作成して、その中に元ファイル名-square.jpgというようにする。入力ファイルがサブディレクトリ内のファイルであった場合は、階層構造を保持するようにして出力する。たとえば、img/hoge1.jpg を入力にしたら、出力先はsquare/img/hoge1-square.jpg となる。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; &#13; set -eu&#13; &#13; if [ ${#} -eq 0 ]; then exit 0 ;fi&#13; &#13; for i in $(seq ${#})&#13; do&#13; # echo "${1}"&#13; &#13; # 画像以外は弾く&#13; set +e&#13; identify "${1}" &gt; /dev/null 2&gt;&amp;1&#13; if [ $? -ne 0 ]; then&#13; shift&#13; continue&#13; fi&#13; set -e&#13; &#13; # 縦幅と横幅を抽出&#13; width=$(identify -format "%w" "${1}")&#13; height=$(identify -format "%h" "${1}")&#13; # 大きい方を一辺にする&#13; if [ "${width}" -ge "${height}" ]; then&#13; side="${width}"&#13; else&#13; side="${height}"&#13; fi&#13; &#13; # 出力先&#13; # 拡張子抜き出し&#13; ext=${1##*.}&#13; bname=$(basename "${1}")&#13; dname=sqaure/$(dirname "${1}")&#13; if [ ! -e "${dname}" ]; then mkdir -p "${dname}"; fi&#13; sqimg="${dname}/${bname%.*}-square.${ext}"&#13; &#13; # 変換&#13; convert "${1}" -background white -gravity center -extent "${side}x${side}" "${sqimg}"&#13; &#13; shift&#13; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;$#は引数の個数。identifyでエラーが返ったら画像ではないと判定する。ext=${1##*.}は、パターンマッチングで前方削除による拡張子の抜き出し。&lt;/p&gt;&#10;&lt;p&gt;サイズも調整するなら、以下を付け足して出力ファイルについてさらに変換するとか。&lt;/p&gt;&#10;&lt;pre&gt;` mogrify -thumbnail 150x150 "${sqimg}"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;いっぺんにやることもできるんだろうか。まぁでも分けたほうがメンテナンス性も良い気がする。&lt;/p&gt;&#10;&lt;h2 id="使い方"&gt;使い方&#10;&lt;/h2&gt;&lt;p&gt;以上のコードを、たとえばsq.shとしたら、&lt;/p&gt;&#10;&lt;pre&gt;`./sq.sh *`&lt;/pre&gt;&#13;&#10;&lt;p&gt;とすると、カレントディレクトリにある画像ファイルについて処理を行う。&lt;/p&gt;&#10;&lt;p&gt;応用で、たとえばhogeディレクトリ以下にあるサブディレクトリ内含めたすべての画像ファイルについて適用したい場合は、以下のようにすると良い。&lt;/p&gt;&#10;&lt;pre&gt;`find hoge -name "*.*" -exec ./sq.sh {} \;`&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/mriho/items/b30b3a33e8d2e25e94a8" target="_blank" rel="noopener"&#10; &gt;bashの変数展開によるファイル名や拡張子の取得 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://dqn.sakusakutto.jp/2009/02/imagemagick.html" target="_blank" rel="noopener"&#10; &gt;[ImageMagick] 画像の大きさ（幅と高さのピクセル数）を取得するコマンド · DQNEO起業日記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://shellscript.sunone.me/parameter.html" target="_blank" rel="noopener"&#10; &gt;引数を処理する | UNIX &amp;amp; Linux コマンド・シェルスクリプト リファレンス&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://d.hatena.ne.jp/farmedgeek/20150212/1423743275" target="_blank" rel="noopener"&#10; &gt;【shiftコマンド】bashで引数の数が可変の場合の処理 - 養殖Geekは川を上るか&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://imagemagick.rulez.jp/archives/550" target="_blank" rel="noopener"&#10; &gt;画像のサイズ変更(切り抜き・塗足し etc.) – Imagemagickの使い方日本語マニュアル&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.softel.co.jp/blogs/tech/archives/1281" target="_blank" rel="noopener"&#10; &gt;【ImageMagick】画像の縮小（サムネイル作成）とExif情報削除 at softelメモ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://imagemagick.rulez.jp/archives/93" target="_blank" rel="noopener"&#10; &gt;画像の拡大・縮小 – Imagemagickの使い方日本語マニュアル&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>pythonで画像をダウンロードして、URLに応じてディレクトリ分けする</title><link>https://hack-le.com/python-img-dl-dir/</link><pubDate>Tue, 09 Jan 2018 16:20:53 +0900</pubDate><guid>https://hack-le.com/python-img-dl-dir/</guid><description>&lt;p&gt;pythonで画像をダウンロードする。画像のURLに応じて、ディレクトリを分ける。たとえば、画像のURLがhttps://example.com/hoge/img/img01.jpg であったとしたら、example.com/hoge/img という階層構造ができるようにディレクトリを作成する。&lt;/p&gt;&#10;&lt;h2 id="ソースコード"&gt;ソースコード&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://example.com/hoge/img/img01.jpg" target="_blank" rel="noopener"&#10; &gt;https://example.com/hoge/img/img01.jpg&lt;/a&gt; をダウンロードするとしてコードを書く。&lt;/p&gt;&#10;&lt;p&gt;ダウンロードした画像は、imgディレクトリ下に、example.com/hoge/img/img01.jpg として保存されるように、ディレクトリを生成して階層構造を作る。&lt;/p&gt;&#10;&lt;pre&gt;`import os&#13; import requests&#13; &#13; def download_img(img):&#13; r = requests.get(img)&#13; # プロトコル削除&#13; img = img.replace('http://','').replace('https://','')&#13; # 出力ファイル名&#13; # /で区切る&#13; output = os.path.join('img',*img.split('/'))&#13; outdir = os.path.dirname(output)&#13; if not os.path.isdir(outdir):&#13; os.makedirs(outdir)&#13; with open(output, 'wb') as f:&#13; f.write(r.content)&#13; &#13; if __name__ == '__main__':&#13; url = 'https://example.com/hoge/img/img01.jpg'&#13; download_img(url)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;URLにファイル名に使えない文字が含まれている場合（:とか）も考慮して適宜replaceするとよりよい。&lt;/p&gt;&#10;&lt;p&gt;output = os.path.join(&amp;lsquo;img&amp;rsquo;,&lt;em&gt;img.split(&amp;rsquo;/&amp;rsquo;))で&lt;/em&gt;がついているのはリストだから。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://minus9d.hatenablog.com/entry/2014/12/27/014243" target="_blank" rel="noopener"&#10; &gt;os.path.joinでリストを連結する - minus9d&amp;rsquo;s diary&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.gesource.jp/programming/python/code/0009.html" target="_blank" rel="noopener"&#10; &gt;ディレクトリを作成する - Python Tips&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gist.github.com/spirkaa/4c3b8ad8fd34324bd307" target="_blank" rel="noopener"&#10; &gt;How to download captcha image with Python Selenium and Requests · GitHub&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>初心者がAWSでとりあえず最初にWebサーバー立ち上げるまで</title><link>https://hack-le.com/aws-first-web/</link><pubDate>Wed, 27 Dec 2017 16:49:08 +0900</pubDate><guid>https://hack-le.com/aws-first-web/</guid><description>&lt;p&gt;最近仕事で使うことになったので、AWS(Amazon Web Services)を急遽勉強している。さすがにネットに直に関係する分野なだけあり、入門的な記事は散らばっているが、AWSの変化が早いことや、立ち位置によって入門の意味が大きく違うために、どうにもイマイチ掴めない。&lt;/p&gt;&#10;&lt;p&gt;で、結局入門書を一冊購入し、そのとおりにやったつもりなのにやっぱりエラーが出て、原因を調べ調べ再構築繰り返してようやく朧気ながらわかってきような気がしないでもないいつもの感じである。&lt;/p&gt;&#10;&lt;p&gt;ひとまず、この記事ではVPCを作成してEC2を一つおき、Webサーバーとして起動するまでの最初の一歩について書く。&lt;/p&gt;&#10;&lt;h2 id="用語"&gt;用語&#10;&lt;/h2&gt;&lt;p&gt;まず基本的な用語等あれこれ。用語を通して、AWSの基本的なネットワークの概念を知る。&lt;/p&gt;&#10;&lt;h3 id="ec2インスタンス"&gt;EC2インスタンス&#10;&lt;/h3&gt;&lt;p&gt;Amazon Elastic Compute Cloud、略してEC2。AWSにおける仮想サーバー。&lt;/p&gt;&#10;&lt;h3 id="ami"&gt;AMI&#10;&lt;/h3&gt;&lt;p&gt;Amazon Machine Image。サーバー上の情報を1ファイルにおさめたもの。EC2インスタンスはAMIを一つ選んで起動する。用途にあわせて設定されたOSを最初から使える。構築の手間が省ける。&lt;/p&gt;&#10;&lt;h3 id="ebs"&gt;EBS&#10;&lt;/h3&gt;&lt;p&gt;Amazon Elastic Block Store。EC2インスタンスで使うストレージシステム。SSDとかHDとか用途に合わせて選べる。&lt;/p&gt;&#10;&lt;h3 id="リージョン-region"&gt;リージョン, region&#10;&lt;/h3&gt;&lt;p&gt;サーバーの拠点。レイテンシのことを考えると、日本で使うなら基本的に東京でOK。ただし、サービスによっては展開されていないこともある。たとえばトランザクション・メールなどのメールサービスAmazon SESは東京リージョンでは使えないので、オハイオ州を選択したりする。サービス内容だけではなく、価格もリージョンによって異なる。&lt;/p&gt;&#10;&lt;h3 id="アベイラビリティゾーン-availability-zone"&gt;アベイラビリティゾーン, Availability Zone&#10;&lt;/h3&gt;&lt;p&gt;各リージョン内にあるデータセンター群。ap-northeast-1aとap-northeast-1c（いずれも東京リージョン）など、末尾の文字が異なる。耐障害性を考えれば、異なるアベイラビリティゾーンに配置することが望ましい。各アベイラビリティゾーン間は専用線で結ばれており、インターネットに出るわけではにないので、速度・価格面においても基本的に問題ない…が、大規模科学計算など特殊な用途においては、同一アベイラビリティゾーンのほうが良いということもあるようだ。まぁ、普通に使う分には分散させるのがよさげ。&lt;/p&gt;&#10;&lt;h3 id="vpc"&gt;VPC&#10;&lt;/h3&gt;&lt;p&gt;Virtual Private Cloud。AWSにおける仮想ネットワーク環境。イメージ的には、自分が使える島みたいな感じ。10.0.0.0/16など、大きくネットワークアドレスを確保して、それを10.0.0.0/20などサブネットに分割したうえで、サブネット内にEC2インスタンスを置く。&lt;/p&gt;&#10;&lt;p&gt;リージョン -&amp;gt; VPC -&amp;gt; サブネット -&amp;gt; EC2&lt;/p&gt;&#10;&lt;p&gt;ようなイメージ。サブネットはどこか一つのアベイラビリティゾーンに属するが、VPCはアベイラビリティゾーンをまたぐ。また、VPCとインターネットの接続点にインターネットゲートウェイがある。&lt;/p&gt;&#10;&lt;p&gt;同一リージョン内のVPC同士を接続することを、VPCピアリングと呼ぶ。異なるリージョンでVPC同士を繋ぐには、VPNを使う必要がある。&lt;/p&gt;&#10;&lt;h3 id="elastic-ip"&gt;Elastic IP&#10;&lt;/h3&gt;&lt;p&gt;AWSで利用できる固定のIPアドレス。&lt;/p&gt;&#10;&lt;h3 id="セキュリティグループ"&gt;セキュリティグループ&#10;&lt;/h3&gt;&lt;p&gt;仮想ファイアウォール。このIPアドレスのこのポートなら通す、といった具合にルールを定めたもの。各EC2に適用する。一方、サブネットに対して指定するルールをネットワークACL(Access Control)と言う。&lt;/p&gt;&#10;&lt;p&gt;参考「&lt;a class="link" href="https://qiita.com/mayano/items/d4c19ec5e891264af462" target="_blank" rel="noopener"&#10; &gt;【AWS】セキュリティグループを設定してみた（そして関連する用語を調べてみた） - Qiita&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="デフォルトのvpcを使ってwebサーバーを作成"&gt;デフォルトのVPCを使ってWebサーバーを作成&#10;&lt;/h2&gt;&lt;p&gt;用語についてざっと押さえたところで、早速Webサーバーを作成する。最初にざっと手順を。AWSは頻繁にUIが変わるようだが、何をするかがわかっていれば、どうなっても対応できるはず。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;/li&gt;&#10;&lt;li&gt;EC2を作成する&#10;1. AMIの選択&#10;2. インスタンスタイプの選択&#10;3. インスタンスの詳細、ストレージの追加はそのまま&#10;4. セキュリティグループの設定&#10;5. キーペアの作成とダウンロード&lt;/li&gt;&#10;&lt;li&gt;サーバーにアクセスし、Webサーバーを起動&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="ec2を作成"&gt;EC2を作成&#10;&lt;/h3&gt;&lt;p&gt;サービス -&amp;gt; コンピューティング EC2 -&amp;gt; サイドバー インスタンス -&amp;gt; インスタンスの作成&lt;/p&gt;&#10;&lt;p&gt;次にAMIを選択する。一番最初に表示されているやつでよい。Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Typeとかそんな感じ。&lt;/p&gt;&#10;&lt;p&gt;次にインスタンスタイプの選択。これはCPUとかメモリとか要はサーバースペックのプラン。とりあえずt2.micro（無料利用枠の対象だから）。で、「確認と作成」ではなくて、「次の手順:インスタンスの詳細の設定」にうつる。そのほうがわかりやすいから。&lt;/p&gt;&#10;&lt;p&gt;インスタンスの詳細の設定はそのままでよい。次のストレージの追加もそのまま。タグの追加は……そのままでもよいけれど、まぁキーにName、値にtestEC2とか名前くらいつけてあげるとわかりやすい。&lt;/p&gt;&#10;&lt;p&gt;次にセキュリティグループの設定。新しいセキュリティグループを作成するのだが、そのままだとSSHしか通さないので、HTTPとHTTPSあたり追加しておく。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6267&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;2522&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/12/2a1794de18cb427f52783e8e8059669d.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;セキュリティグループの設定[/caption]&lt;/p&gt;&#10;&lt;p&gt;ここで、ソースに0.0.0.0/0を指定すると、すべてのIPアドレスからのアクセスを通す。それが嫌なら、ソースのプルダウンから「マイIP」を選択すると、今現在のグローバルIPアドレスが自動で設定される。&lt;/p&gt;&#10;&lt;p&gt;これでようやく「確認と作成」。作成すると、サーバーにアクセスする秘密鍵を作成（既存のものを使っても良い）して、ダウンロードできる。忘れずにダウンロードすること。&lt;/p&gt;&#10;&lt;p&gt;インスタンスの作成には数分かかるので、待つ。&lt;/p&gt;&#10;&lt;h3 id="サーバーにアクセスしてwebサーバー起動"&gt;サーバーにアクセスしてWebサーバー起動&#10;&lt;/h3&gt;&lt;p&gt;作成したインスタンスの状態がrunningかつステータスチェックが完了したら、いよいよサーバーにアクセスする。&lt;/p&gt;&#10;&lt;p&gt;インスタンスを選択した状態で、右クリックして「接続」をクリックすると、アクセスの仕方が表示される。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6269&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;230&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/12/093263420024a338ac60bb347b1a4fb6.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;右クリックする[/caption]&lt;/p&gt;&#10;&lt;p&gt;例:のところにコマンドがあるので、それをコピペして、ターミナルから実行。具体的には以下のようなコマンドである。&lt;/p&gt;&#10;&lt;pre&gt;`chmod 400 秘密鍵.pem&#13; ssh -i 秘密鍵.pem ec2-user@パプリックDNS`&lt;/pre&gt;&#13;&#10;&lt;p&gt;意味は、秘密鍵のパーミッションをread-onlyにする。で、sshコマンドでサーバーにアクセス。-iオプションは秘密鍵の指定。パブリックDNSの部分は、インスタンスを選択した時に下部に表示される「説明」タブにもあるので、確認しておくとよい。&lt;/p&gt;&#10;&lt;p&gt;そうしたらサーバーに入れるので、Webサーバーを起動する。まずindex.htmlを作成し、中にhelloとかなんとか記述。その後&lt;/p&gt;&#10;&lt;pre&gt;`sudo python -m SimpleHTTPServer 80`&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでWebサーバーが起動。ブラウザから http://パブリックDNS/ に飛ぶと、index.htmlの中身が表示される。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;p&gt;自分でVPCやらサブネットやらを作成して、固定IPアドレスを付与するところまで書こうと思ったが、長くなったのでまた今度。&lt;/p&gt;</description></item><item><title>Pandasで行の追加（縦方向の連結）の操作メモ</title><link>https://hack-le.com/pandas-append/</link><pubDate>Wed, 27 Dec 2017 14:14:07 +0900</pubDate><guid>https://hack-le.com/pandas-append/</guid><description>&lt;p&gt;pythonのデータフレームライブラリPandasで、行の追加（縦方向の連結）の操作メモ。列の追加（横方向の結合）ではなく。一行だけ追加する感じで。&lt;/p&gt;&#10;&lt;p&gt;基本はappendとconcat。列名で一致しないところはNaNで埋められる。ついでにインデックスが重複する時はreset_index()。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;pandasで行を追加する。たとえばdf1に一行だけのdf2を追加する感じを想定。&lt;/p&gt;&#10;&lt;p&gt;この場合、df1.append(df2)か、pd.concat([df1,df2])を使う。&lt;/p&gt;&#10;&lt;h2 id="append"&gt;append&#10;&lt;/h2&gt;&lt;p&gt;appendを使って追加。&lt;/p&gt;&#10;&lt;pre&gt;`import pandas as pd&#13; &#13; df1 = pd.DataFrame({'one': [1,2,3], 'two': [10,20,30]}, index=['a','b','c'])&#13; df2 = pd.DataFrame({'one': [4], 'three': [400]}, index=['d'])&#13; &#13; df = df1.append(df2)&#13; &#13; print(df)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;結果は以下。&lt;/p&gt;&#10;&lt;pre&gt;` one three two&#13; a 1 NaN 10.0&#13; b 2 NaN 20.0&#13; c 3 NaN 30.0&#13; d 4 400.0 NaN&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;列名が一致しないところはNaNで埋められる点に注意。それに合わせて他行の型も小数になってますな。&lt;/p&gt;&#10;&lt;h2 id="concat"&gt;concat&#10;&lt;/h2&gt;&lt;p&gt;concatを使って追加。&lt;/p&gt;&#10;&lt;pre&gt;`import pandas as pd&#13; &#13; df1 = pd.DataFrame({'one': [1,2,3], 'two': [10,20,30]}, index=['a','b','c'])&#13; df2 = pd.DataFrame({'one': [4], 'three': [400]}, index=['d'])&#13; &#13; df = pd.concat([df1,df2])&#13; &#13; print(df)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;結果は上に同じ。&lt;/p&gt;&#10;&lt;p&gt;axis=1とすると、joinのように縦方向の結合となる。&lt;/p&gt;&#10;&lt;h2 id="appendとconcat"&gt;appendとconcat&#10;&lt;/h2&gt;&lt;p&gt;appendとconcatで内部的には挙動が異なるようで、concatでうまく連結できなかったときにも（何故できなかったのかわからない…）appendではうまくいくこともあった。「&lt;a class="link" href="https://qiita.com/tkojima/items/5507671f865f7d703d69" target="_blank" rel="noopener"&#10; &gt;pandasのデータフレームを連結したときに列の順番を変えない。 - Qiita&lt;/a&gt;」のようなこともあるらしい。&lt;/p&gt;&#10;&lt;h2 id="インデックスが重複するので振り直す"&gt;インデックスが重複するので振り直す&#10;&lt;/h2&gt;&lt;p&gt;もしインデックスが重複して、それが具合が悪い時には、処置をしないといけない。たとえばreset_index()で番号を振り直す。&lt;/p&gt;&#10;&lt;pre&gt;`df = pd.concat([df1,df2]).reset_index(drop=True)`&lt;/pre&gt;&#13;&#10;&lt;p&gt;オプションのdrop=Trueは、元のインデックスを削除する。普通にreset_index()とすると、元のインデックスが新たに列として作られる（参考「&lt;a class="link" href="https://note.nkmk.me/python-pandas-reset-index/" target="_blank" rel="noopener"&#10; &gt;pandas.DataFrame, Seriesのインデックスを振り直すreset_index | note.nkmk.me&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://sinhrks.hatenablog.com/entry/2015/01/28/073327" target="_blank" rel="noopener"&#10; &gt;Python pandas 図でみる データ連結 / 結合処理 - StatsFragments&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://pythondatascience.plavox.info/pandas/pandas%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AB%E8%A1%8C%E3%82%84%E5%88%97%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B" target="_blank" rel="noopener"&#10; &gt;Pandas のデータフレームに行や列 (カラム) を追加する – Python でデータサイエンス&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.yunabe.jp/docs/pandas_basics.html#pandas-dataframe--series" target="_blank" rel="noopener"&#10; &gt;pandas 入門 - pandasによるデータ処理の基礎&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://note.nkmk.me/python-pandas-reset-index/" target="_blank" rel="noopener"&#10; &gt;pandas.DataFrame, Seriesのインデックスを振り直すreset_index | note.nkmk.me&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>PDFから文章を抽出する</title><link>https://hack-le.com/pdf-text-extract/</link><pubDate>Mon, 25 Dec 2017 15:30:00 +0900</pubDate><guid>https://hack-le.com/pdf-text-extract/</guid><description>&lt;p&gt;PDFファイルから文章を抽出するあれこれ。画像化されているやつはOCRをかけることになるが、本記事では対象外。Mac環境下で実行。&lt;/p&gt;&#10;&lt;p&gt;大きくわけて、コピペする、Adobe Reader DCを使う、pdftotextを使う、pythonのpdfminer.sixを使う、のパターンで。&lt;/p&gt;&#10;&lt;h2 id="ビューアで開いてコピペ"&gt;ビューアで開いてコピペ&#10;&lt;/h2&gt;&lt;p&gt;言わずもがな。PDFファイルを開いて、ビューアーからコピペする。原始的だけれど、なんだかんだ言ってそこそこの精度。&lt;/p&gt;&#10;&lt;h2 id="adobe-reader-dcの機能を使う"&gt;Adobe Reader DCの機能を使う&#10;&lt;/h2&gt;&lt;p&gt;Adobe Reader DCは最近何かとお金を取るようになったらしく、インターネットで検索した情報を元にやってみると、その機能が有料化されていることがしばしばある。が、テキストの抽出は今のところ問題ないらしい（Word変換などはお金がかかる）。&lt;/p&gt;&#10;&lt;p&gt;「ファイル」→「その他の形式で保存」→「テキスト」と選択すると、テキストのみ抽出できる。&lt;/p&gt;&#10;&lt;p&gt;ファイルが1つだけで、GUIが使える環境ならこれが一番楽。&lt;/p&gt;&#10;&lt;h2 id="pdftotext"&gt;pdftotext&#10;&lt;/h2&gt;&lt;p&gt;コマンドラインでのやり方として、pdftotextを使う方法がある。pdfを扱うライブラリpopplerをインストールする。&lt;/p&gt;&#10;&lt;pre&gt;`brew install poppler`&lt;/pre&gt;&#13;&#10;&lt;p&gt;すると、以下のようなコマンドが使えるようになる。&lt;/p&gt;&#10;&lt;pre&gt;`pdftotext test.pdf`&lt;/pre&gt;&#13;&#10;&lt;p&gt;日本語の扱いでエラーが出たら「&lt;a class="link" href="http://labo.utsubo.tokyo/2016/05/09/pdftotext%E3%81%A7pdf%E3%82%92%E6%96%87%E5%AD%97%E5%88%97%E5%8C%96/" target="_blank" rel="noopener"&#10; &gt;pdftotextでPDFを文字列化 | IT研究所&lt;/a&gt;」を参考に。&lt;/p&gt;&#10;&lt;p&gt;-layoutオプションをつけることで、pdfのレイアウトを考慮したようなテキストファイルにすることができるが……むしろ使いづらいか。&lt;/p&gt;&#10;&lt;p&gt;ただこれを使うなら、次のpdf2txt.pyのほうが良いかな、と。&lt;/p&gt;&#10;&lt;h2 id="pdf2txtpy"&gt;pdf2txt.py&#10;&lt;/h2&gt;&lt;p&gt;pythonで実装されている、pdfminer.sixのpdf2txt.pyを使ってもできる。レイアウトを考慮した再現度が高い。pip install pdfminer.sixでもインストールできるが、pdf2txt.pyを実行するとエラーが出るので、公式サイトからダウンロードしてインストールする。公式サイト→「&lt;a class="link" href="https://pypi.python.org/pypi/pdfminer.six/20170720" target="_blank" rel="noopener"&#10; &gt;pdfminer.six 20170720 : Python Package Index&lt;/a&gt;」。ダウンロードしたら、解答して、setup.pyを実行する。&lt;/p&gt;&#10;&lt;pre&gt;`python setup.py install`&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでpdf2txt.pyが使えるようになる。&lt;/p&gt;&#10;&lt;pre&gt;`pdf2txt.py test.pdf`&lt;/pre&gt;&#13;&#10;&lt;p&gt;デフォルト標準出力。そこそこ時間がかかるが、Adobe Readerのテキスト抽出よりも綺麗かなと思う。何と言ってもコマンドラインで完結するのが大きい。&lt;/p&gt;&#10;&lt;p&gt;-nまたは&amp;ndash;no-laparamsオプションをつけることで、レイアウトを無視して高速に結果を得られるものの、それだと精度が悪い。&lt;/p&gt;</description></item><item><title>seleniumのGoogle検索で最初にヒットしたサイトのスクリーンショットを撮る</title><link>https://hack-le.com/selenium-google/</link><pubDate>Mon, 25 Dec 2017 07:34:42 +0900</pubDate><guid>https://hack-le.com/selenium-google/</guid><description>&lt;p&gt;最近クローラ+スクレイピングの勉強をしている。Web周りはこれまで不勉強だったものだから、非常に苦労している。種々のサイトを見ていると、サイトも色々だなぁと一サイトの管理人として思う。まぁWordPressをテンプレートそのまんまで使っているだけだが、それだけにこのサイトは扱いやすいだろうなと思う。&lt;/p&gt;&#10;&lt;p&gt;とはいえ世の中扱いづらいサイトのほうが多いわけで、学ぶべきことは多い。ということで、とりあえずGoogle検索からしてみる。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;自動でGoogle検索で一番最初にヒットしたサイトにアクセスしたい。&lt;/p&gt;&#10;&lt;p&gt;調べたところ、python + selenium + PhantomJS がよくあるみたいだ。&lt;/p&gt;&#10;&lt;pre&gt;`pip install selenium&#13; brew install phantomjs`&lt;/pre&gt;&#13;&#10;&lt;p&gt;seleniumはブラウザを操作できるソフトで、Chromeとかもスクリプトで自動操作できるようだ。が、ここではPhantomJSなるものを使う。PhantomJSは画面がなくても使えるヘッドレスブラウザというやつで、コマンドラインとの相性が良い。レンダリングエンジンはWebKit。JavaScriptも動くので、モダンなサイトでも使える。&lt;/p&gt;&#10;&lt;p&gt;ただ最近はChromeがヘッドレスモードを搭載したようで、それを受けてPhantomJSのメンテナーさんが降りたらしい。今後はそちらを使っていくべきか。まぁでも、とりあえず参考にした書籍がPhantomJSを使っていたので、そのとおりにやってみる。&lt;/p&gt;&#10;&lt;h2 id="ソースコード"&gt;ソースコード&#10;&lt;/h2&gt;&lt;p&gt;このサイト名を検索して、トップ画像を撮影してみる。2秒待っているのは、表示のため。&lt;/p&gt;&#10;&lt;pre&gt;`import time&#13; from selenium import webdriver&#13; from selenium.webdriver.common.keys import Keys&#13; &#13; wait_time = 2&#13; &#13; class WebScrape:&#13; def __init__(self):&#13; self._driver = webdriver.PhantomJS()&#13; self._driver.set_window_size(800,640)&#13; &#13; def screenshot(self, url):&#13; self._navigate(url)&#13; output = 'screenshot.png'&#13; self._driver.save_screenshot(output)&#13; &#13; def _navigate(self, url):&#13; self._driver.get(url)&#13; time.sleep(wait_time)&#13; &#13; class GoogleSearch(WebScrape):&#13; def __init__(self):&#13; super().__init__()&#13; &#13; def search(self, s):&#13; self._navigate('https://www.google.co.jp/')&#13; # check&#13; assert s in driver.title&#13; # search&#13; input_element = self._driver.find_element_by_name('q')&#13; input_element.send_keys(s)&#13; input_element.send_keys(Keys.RETURN)&#13; time.sleep(wait_time)&#13; # output&#13; results = []&#13; [results.append(a.get_attribute('href')) for a in self._driver.find_elements_by_css_selector('h3 &gt; a')]&#13; return results&#13; &#13; &#13; if __name__ == '__main__':&#13; gs = GoogleSearch()&#13; sites = gs.search('或る阿呆の記')&#13; ws = WebScrape()&#13; ws.screenshot(sites[0])&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;画像を確認して、ちゃんと撮影されていることを確認。&lt;/p&gt;&#10;&lt;p&gt;ちなみに画面の遷移は.get(url)ではなく.navigate().to(url)でもいけるようだが、意味はそう変わらないらしい（参考「&lt;a class="link" href="https://qiita.com/momomarshmallow/items/184f20c3ffcbbf2c64fb" target="_blank" rel="noopener"&#10; &gt;起動したWebDriverにただページ遷移をさせたい - Qiita&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6244&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;362&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/12/d3f80c0e6a136c9c4ab898d086c965d1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;スクリーンショットの一部[/caption]&lt;/p&gt;&#10;&lt;p&gt;もうちょっとちゃんと使っていきたい。&lt;/p&gt;&#10;&lt;p&gt;ところで、Google検索自体にはAPIが用意されている（「&lt;a class="link" href="https://developers.google.com/custom-search/json-api/v1/overview" target="_blank" rel="noopener"&#10; &gt;Custom Search JSON/Atom API | Custom Search | Google Developers&lt;/a&gt;」）。あまり評判芳しくないようだが、本格的にGoogle検索を扱うのであればこのAPIを利用すべきなのだろう。ロボットで色々やりすぎると最悪Googleからbanされてしまうようで、たいへん恐ろしい。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://gist.github.com/ariki4160/e75ec99e08dbd5c263cf6abe15518d42" target="_blank" rel="noopener"&#10; &gt;【Python】Seleniumを使ってGoogle検索結果のページ送り（ページネーション）をクリックして次のページヘ進む方法&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.kaitoy.xyz/2017/07/12/2017-selenium-headless-browsers/" target="_blank" rel="noopener"&#10; &gt;2017年夏、Selenium、ヘッドレスブラウザ | To Be Decided&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://developers.google.com/web/updates/2017/04/headless-chrome?hl=ja" target="_blank" rel="noopener"&#10; &gt;ヘッドレス Chrome ことはじめ | Web | Google Developers&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4774183679&amp;linkId=7c6d841afb6e06b131a2fc115a07e409"&gt;&lt;/iframe&gt;特にこの書籍「Python クローリング&amp;スクレイピング」はたいへん勉強になりました。本記事はこの本の5.6節の内容にあたります。良い本です。</description></item><item><title>pythonでExcelファイル内の半角をすべて全角にする</title><link>https://hack-le.com/python-excel-hanzen/</link><pubDate>Fri, 22 Dec 2017 10:22:59 +0900</pubDate><guid>https://hack-le.com/python-excel-hanzen/</guid><description>&lt;p&gt;表題のとおり。Excelファイル内の半角をすべて全角にする。住所録とかで、全角を指定されたり、とか。そういう時。人とやりとりしていると、Excelファイルは避けて通れないもので……。&lt;/p&gt;&#10;&lt;p&gt;Excelなのだから、Excel VBAでやるのが正道なのかもしれないけれど……わざわざ覚えるのもなー……ということで、python。便利なライブラリを開発してくれている方のおかげで、大して覚えることもなく。有難い。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;Excelファイルで、半角の文字をすべて全角に変換する。pythonでやる。&lt;/p&gt;&#10;&lt;p&gt;xlrdで読み込み、読み込んだデータに大してmojimojiを使って半角→全角変換、xlsxwriterを利用して書き込み。xlsxwriterは新しくExcelファイルを作ることになる。pipでインストールしておく。&lt;/p&gt;&#10;&lt;pre&gt;`pip install xlrd xlsxwriter mojimoji`&lt;/pre&gt;&#13;&#10;&lt;h2 id="ソースコード"&gt;ソースコード&#10;&lt;/h2&gt;&lt;p&gt;以下のプログラムで、before.xlsxを読み込んで、処理したものをafter.xlsxとして出力する。このプログラムだと装飾についてはコピーできない。after.xlsxの中身をコピーして、before.xlsxに形式合わせてペーストするのが一番楽かなと思う。セル内の一部分だけアンダーバーを引く、というような細かな装飾についてはどうしようもないが。そこまでやるならExcel VBAか。&lt;/p&gt;&#10;&lt;pre&gt;`import xlrd&#13; import xlsxwriter&#13; import mojimoji&#13; &#13; def han2zen(val):&#13; if type(val) is not str:&#13; val = str(val)&#13; val = mojimoji.han_to_zen(val)&#13; return val&#13; &#13; &#13; def main():&#13; orig_book = xlrd.open_workbook('before.xlsx')&#13; orig_sheet = orig_book.sheet_by_index(1)&#13; write_book = xlsxwriter.Workbook('after.xlsx')&#13; write_sheet = write_book.add_worksheet()&#13; &#13; for row in range(orig_sheet.nrows):&#13; for col in range(orig_sheet.ncols):&#13; cell = han2zen(orig_sheet.cell(row,col).value)&#13; write_sheet.write(row,col,cell)&#13; write_book.close()&#13; &#13; &#13; if __name__ == '__main__':&#13; main()&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>bashでスクレイピングする時のメモ</title><link>https://hack-le.com/bash-scraping/</link><pubDate>Mon, 18 Dec 2017 17:41:02 +0900</pubDate><guid>https://hack-le.com/bash-scraping/</guid><description>&lt;p&gt;あまりすることはないと思うが、bashで簡易的にスクレイピングする時によく使うコマンドとかのメモ。基本は行単位の処理なので、お手軽さを求めるなら用途は限られるか…。でも前処理とかに便利かもしれないし……。&lt;/p&gt;&#10;&lt;h2 id="クローリング"&gt;クローリング&#10;&lt;/h2&gt;&lt;p&gt;wgetでクローリング。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget URL&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再帰的にやるなら、たとえば以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -r --no-parent -w &lt;span class="m"&gt;1&lt;/span&gt; -l &lt;span class="m"&gt;1&lt;/span&gt; URL&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;オプションの意味は、rが再帰的(recursive)、&amp;ndash;no-parentが親ディレクトリを探索しない、-w 1がwait 1秒でダウンロード間隔1秒毎（サイトに負荷をかけすぎない為）、-l 1が深さlevel 1、リンクをたどる深さを表している。&lt;/p&gt;&#10;&lt;h2 id="スクレイピング"&gt;スクレイピング&#10;&lt;/h2&gt;&lt;p&gt;スクレイピングの時のメモ。&lt;/p&gt;&#10;&lt;h3 id="やりやすい相手"&gt;やりやすい相手&#10;&lt;/h3&gt;&lt;p&gt;bashは基本的に一行ずつ処理することになるので、一行で抜き出したい情報が判断できるようなソースコードであることが望ましい。たとえば&amp;lt;th&amp;gt;hogehoge&amp;lt;/th&amp;gt;からhogehogeを抜き出したい場合、&amp;lt;th&amp;gt;タグとhogehogeは同一の行にあることが望ましい。これが複数行にまたがっていると、けっこう頑張ったコードになると思われ、それだったら普通にpythonなりなんなりで便利なライブラリを使って書いたほうがお手軽と思われる。&lt;/p&gt;&#10;&lt;h3 id="よく使うコマンド"&gt;よく使うコマンド&#10;&lt;/h3&gt;&lt;p&gt;grep,sed+正規表現を駆使する。&lt;/p&gt;&#10;&lt;p&gt;grepは-Eオプションで拡張正規表現が使える。-vでマッチしない行の出力もよく使う。&lt;/p&gt;&#10;&lt;p&gt;sedは&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -e &lt;span class="s1"&gt;&amp;#39;s/a/b/&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;の置換をよく使う。その際、ウェブスクレイピングでは/を区切り文字にすると何かと都合が悪いので、#とか@とか他の記号を区切りにするとよい。&lt;/p&gt;&#10;&lt;p&gt;また、正規表現+後方参照で整形する。たとえば郵便番号でハイフンがあったりなかったりする時、&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -e &amp;#39;s#([0-9]{3})-?([0-9]{4})#\1\2#g&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;とすると、番号部分だけ抜き出せる。gのあるなしは、1回の置換で対象が複数あった時に、最初だけやるのか全部やるのかの違い。&lt;/p&gt;&#10;&lt;h3 id="最短一致"&gt;最短一致&#10;&lt;/h3&gt;&lt;p&gt;bashの正規表現は基本的に最長一致で、最短一致は工夫がいる。よくある.*?なんかは使えない。どうするかというと、クラスと否定を組み合わせて使う。たとえば&amp;lt;p&amp;gt;aaaa&amp;lt;/p&amp;gt;と&amp;lt;p class=&amp;lsquo;hoge&amp;rsquo;&amp;gt;aaaa&amp;lt;/p&amp;gt;からaaaaを抜き出したいときは、&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -e &lt;span class="s1"&gt;&amp;#39;s/&amp;lt;p.*&amp;gt;[^a](a+)/\1/g&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;とするとよい。&lt;/p&gt;&#10;&lt;h3 id="改行をまたいだ処理"&gt;改行をまたいだ処理&#10;&lt;/h3&gt;&lt;p&gt;trで\nを削るとか、そこだけruby -pe &amp;lsquo;gsub.(&amp;ldquo;hoge&amp;rdquo;,&amp;quot;&amp;quot;)&amp;lsquo;みたくrubyやperlを呼び出すか。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01NGWKE0P&amp;linkId=c9218aac5d24ee8fea105e26d26aa482"&gt;&lt;/iframe&gt;参考書籍。pythonと言いつつ最初はbashから始まる良い本。&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;15153&amp;rdquo;]&lt;/p&gt;</description></item><item><title>見開きPDFを分割して1ページ単位のPDFにする</title><link>https://hack-le.com/two-page-split/</link><pubDate>Mon, 18 Dec 2017 10:19:11 +0900</pubDate><guid>https://hack-le.com/two-page-split/</guid><description>&lt;p&gt;もらったPDFが見開きで1ページになっていることがある。しかしPDFをあれこれ加工したいとき、それでは何かと都合が悪い。なので、1ページ単位に分割したい。&lt;/p&gt;&#10;&lt;p&gt;そのためには、印刷機能を利用する。昔はAdobe Readerで普通にできたようだが、Adobeがせこく金を取り出したせいで面倒臭くなっている。検索するとその時々の情報が錯綜していてややこしい。以下、2017年12月現在、MacのHigh Sierraでやることを前提に方法のメモ。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;見開きで1ページになっているPDFを、1ページ単位に分割したい。&lt;/p&gt;&#10;&lt;p&gt;OSはmacOS 10.13 High Sierra。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;基本は、印刷機能を利用する。Adobe Readerの印刷機能で、出力先をプリンタではなくPDF保存としたうえで、ポスター印刷を実行すると、中心線が引かれて見開きPDFを1ページ単位に分割することが可能。&lt;/p&gt;&#10;&lt;p&gt;が、今現在の状況だと、まずAdobe Readerの出力先としてAdobe PDFを選べない。ので、仮想プリンタのソフトウェアをインストールしなければならない。具体的には「&lt;a class="link" href="https://onflapp.wordpress.com/vipriser/" target="_blank" rel="noopener"&#10; &gt;VipRiser | Onflapp&amp;rsquo;s Blog&lt;/a&gt;」を用いる。&lt;/p&gt;&#10;&lt;p&gt;後は、Adobe Readerで印刷をする時、出力先をプリンタではなくVipRiserとして（このとき、アプリケーションを起動させておく必要があることに注意）、ポスター印刷を実行する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6209&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1386&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/12/7012bff6c384d5d478e1f889d27792ef.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Print to VipRiser[/caption]&lt;/p&gt;&#10;&lt;p&gt;中心線が横方向に入っていたり、余白とか嫌な感じだったら、ページ設定から色々と設定を変更してみるとよい。&lt;/p&gt;&#10;&lt;p&gt;昔はAdobe Readerで普通に分割できたり、pdf出力できたらしいのだが、現在進行系でAdobeがせこく金を取り出したらしく、以前できた方法が使えなくなっているようだ。色々と競合が出てきたとはいえ、十分儲けているんじゃないのかしら……。&lt;/p&gt;&#10;&lt;p&gt;参考にさせていただきました。ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://askoma.info/2015/09/22/1210" target="_blank" rel="noopener"&#10; &gt;見開き２頁分の本のPDFファイルを１頁ずつに分ける方法 | あすこまっ！&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://co-jin.net/life/vipriser" target="_blank" rel="noopener"&#10; &gt;Macでプリンター選択メニューからPDFを選んで出力する方法 | co-jin&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>youtube-dlで音声だけ抽出</title><link>https://hack-le.com/youtubedl/</link><pubDate>Sun, 17 Dec 2017 22:15:50 +0900</pubDate><guid>https://hack-le.com/youtubedl/</guid><description>&lt;p&gt;古い記事です。今は&lt;code&gt;yt-dlp&lt;/code&gt;です。少し高度になりますが参考記事も置いておきます。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/youtube-mojiokoshi/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;YouTubeの動画を文字起こしする手順とスクリプト (yt-dlp &amp;#43; whisper.cpp)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/youtube-mojiokoshi/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/11/output-35.webp" alt="YouTubeの動画を文字起こしする手順とスクリプト (yt-dlp &amp;#43; whisper.cpp)" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;youtube-dlはコマンドラインで使える、とっても便利なYoutubeのダウンローダー。youtube-dlを使って音声だけ抽出するメモ。怪しげなサイトを利用してなくて良いし、コマンドラインなら応用が効くので有難い。MacならHomebrewでインストールが楽。&lt;/p&gt;&#10;&lt;h2 id="使い方"&gt;使い方&#10;&lt;/h2&gt;&lt;p&gt;MacでインストールするならHomebrewが楽。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install youtube-dl ffmpeg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ffmpegは変換で使う。&lt;/p&gt;&#10;&lt;p&gt;普通に動画をダウンロードするだけなら、コマンドは以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;youtube-dl URL&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;素敵。そのまま音声ファイルに変換できる。内部的にはffmpegを使っているらしい。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;youtube-dl -x --audio-format m4a URL&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;他のオプションについては公式サイト「&lt;a class="link" href="https://github.com/rg3/youtube-dl/blob/master/README.md#readme" target="_blank" rel="noopener"&#10; &gt;youtube-dl/README.md at master · rg3/youtube-dl · GitHub&lt;/a&gt;」を参照する。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>Macでpdfから画像のみを抽出</title><link>https://hack-le.com/mac-pdf-img/</link><pubDate>Fri, 15 Dec 2017 13:28:11 +0900</pubDate><guid>https://hack-le.com/mac-pdf-img/</guid><description>&lt;p&gt;表題どおり。Macでpdfファイルから画像のみを抽出する手段について。検索するとなんだか怪しげなのがよく出てきて微妙に困ったので。コマンドラインでやります。&lt;/p&gt;&#10;&lt;h2 id="やり方"&gt;やり方&#10;&lt;/h2&gt;&lt;p&gt;Homebrewでpopplerをインストールする。&lt;/p&gt;&#10;&lt;pre&gt;`brew install poppler`&lt;/pre&gt;&#13;&#10;&lt;p&gt;下記コマンドを実行すると、test.pdfにある画像が、testなんとか、というファイル名で画像ファイルのみ抽出される。形式はPBM（白黒）またはPPM（カラー）。&lt;/p&gt;&#10;&lt;pre&gt;`pdfimages test.pdf test`&lt;/pre&gt;&#13;&#10;&lt;p&gt;オプションとして-jをつけると、jpgに変換できるやつはjpgで出力してくれる。具体的には、JPEGで用いられる圧縮アルゴリズムDCT(Discrete Cosine Transform, 離散コサイン変換)が使われていれば、ということらしいのだが、やってみるとjpgになるファイルは多くはなかった。&lt;/p&gt;&#10;&lt;p&gt;pbm,ppmだと取り回しが不便なので、jpgに変換してやると使いやすい。imagemagickのconvertコマンドで。&lt;/p&gt;&#10;&lt;pre&gt;`convert *.ppm output.jpg`&lt;/pre&gt;&#13;&#10;&lt;p&gt;output-1,output-2,&amp;hellip;という感じでファイルが出力される。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;p&gt;参考記事「&lt;a class="link" href="https://moshen.net/posts/extract_images_from_pdfs/" target="_blank" rel="noopener"&#10; &gt;Extracting images from a PDF&lt;/a&gt;」&lt;/p&gt;&#10;&lt;p&gt;なお、上記記事ではxpdfをインストールしている。xpdfでもできる。が、xpdfをベースに拡張したpopplerなるライブラリがあり、調べているとそちらを使うことが多いようなので、ここではそれを使った（「&lt;a class="link" href="https://poppler.freedesktop.org/" target="_blank" rel="noopener"&#10; &gt;Poppler&lt;/a&gt;」）。&lt;/p&gt;</description></item><item><title>独自ドメインのメールをGmailに転送してエイリアスしてiPhoneのメールアプリで送受信するのに苦労した話</title><link>https://hack-le.com/gmail-mail/</link><pubDate>Tue, 12 Dec 2017 09:55:30 +0900</pubDate><guid>https://hack-le.com/gmail-mail/</guid><description>&lt;p&gt;お名前.comのメールサーバーで独自ドメインのメール→Gmail転送（メールアドレスはエイリアスする）→iPhoneのメールアプリで送受信、しようとしたらやけに苦労した話。&lt;/p&gt;&#10;&lt;p&gt;タイトルだけでなんかもう嫌な予感しかしない。もちろん別に好きでこんなことをしたわけではないのだが、人に頼まれて……。しかも結局iPhoneのGmailアプリを使うことになったっていう。もー……。&lt;/p&gt;&#10;&lt;h2 id="筋悪"&gt;筋悪&#10;&lt;/h2&gt;&lt;p&gt;お名前.comのメールサーバーで運用している独自ドメインのメールを、Gmailに転送し、もちろんメールアドレスは独自ドメインのものにエイリアス、かつそれをiPhoneの標準のメールアプリで受ける、という書いただけで嫌なが予感しかしない作業をやることになり、やはりちょっとハマって無為な時を過ごした。&lt;/p&gt;&#10;&lt;p&gt;まず別鯖で運用している独自ドメインのメールのGmail転送は、まぁ割とよくある話なので別にどうということはない。PCのGmail画面で設定すればよいだけだ。私としてはそんなことをするなら最初からG Suiteを使ってほしいなぁと思うのだが、一従業員にどうこう言えることではないので仕方ない。&lt;/p&gt;&#10;&lt;p&gt;面倒だったのは、Gmail転送でかつメールアドレスを独自ドメインのものにエイリアスしたものを、iPhoneの標準のメールアプリで送受信しようとした時。&lt;/p&gt;&#10;&lt;p&gt;まずこの設定でハマった。これについては、エイリアスしたメールアドレスで、iPhone上でアカウントを登録すればよかった（参考「&lt;a class="link" href="https://log.sivre.com/1528" target="_blank" rel="noopener"&#10; &gt;GmailのエイリアスをiOSとMacのMail.appで使う方法 | Life is short&lt;/a&gt;」）が、ここに辿り着くのにちょっと苦労した。何しろ検索すると、Gmailの+をつけて手軽に複数アドレスを使う方法とかMacでのGmail利用とかノイズが色々混じっているので。&lt;/p&gt;&#10;&lt;p&gt;ただそれだけならばまだよかったのだが、いざやってみるとどういうわけか認証されない。いったいどういうことだ、と思ったら、Googleから「&lt;strong&gt;安全性の低いアプリです&lt;/strong&gt;」として弾かれていた。それに気づかず（何しろ他人のデバイスなのでメールをなかなかチェックできない）、無駄な試行錯誤が増えてしまった。&lt;/p&gt;&#10;&lt;p&gt;この場合は、あまりよろしくないが安全性の低いアプリの利用を許可すれば良い。ここで二段階認証とかしていたら（すべきなのだが）、恐らくアプリ毎の許可になるのかなと思うが（それにしてもApple純正のメールアプリが安全性の低いアプリ認定されたのはどういう了見なのだろう）。&lt;/p&gt;&#10;&lt;p&gt;許可したら、無事認証。が、今度は送信でつまった……ものの、これは設定を見るとSSLがOFFになっていたので、ここをなおして完了。これでなんとか、無事に標準のメールアプリでGmail転送メールをエイリアスして送受信できるようになった。疲れた。。。&lt;/p&gt;&#10;&lt;h2 id="素直に使えば素直に使える"&gt;素直に使えば素直に使える&#10;&lt;/h2&gt;&lt;p&gt;個人的には、そもそもGmail経由で転送なんてするくらいなら最初からG Suiteで契約してほしいと思う。とはいえメールサービスにどこを使うかなど、一従業員には選べないことがたいていだ。それならそれで、普通に各ユーザーが好きなメーラーを使えば良いと思うのだが、一部の界隈ではGmail転送してGmailのWebアプリを利用する謎の風習があるらしい。本当によくわからない。&lt;/p&gt;&#10;&lt;p&gt;Gmail経由している時点でセキュリティ・ポリシーの問題ではなかろうし、となると500円/月・ユーザーが惜しいのだろうか。だがそれは必要なコストだと思う。諸々の手間やセキュリティを考えれば、それだけの価値はある（実際にお名前.comからG Suiteに移行させた時の話「&lt;a class="link" href="https://hack-le.com/gmail/" &gt;会社のメールサーバーをGoogle AppsのGmail独自ドメイン運用に乗り換え – 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;メールに限らず、どんなシステムでも素直に使えば素直に使えるもので、本当に考えるべきことは「できるだけややこしいことをしない」ことだ。複雑化することで支払いという目に見えるコストが安くなるように見えたとしても、恐らく人件費という見えないコストがもっとかかっている。&lt;/p&gt;&#10;&lt;p&gt;まぁ愚痴っても仕方ない。ただ転送サービスを利用するならするで、その場合はiPhone/iPadでは素直にGmailアプリを使えば良いのだと思う。わざわざGmail転送するのはGmailの便利な機能が使いたいからなのだろうし。&lt;/p&gt;&#10;&lt;p&gt;まぁ、実際そのほうが勝手がよいということが使ってみてわかったようで、&lt;strong&gt;結局Gmailアプリを使うことになった&lt;/strong&gt;のだから、私の苦労も虚しいものであった。最初からGmailアプリで労なく複数アカウントでもなんでも使えることを示していればよかったのかもしれない。多分それが本当に求められていたことで、別に標準メールアプリに拘りがあったわけじゃなかろうし……。うーん。そういう意味では私も勉強になったと思うことにする。&lt;/p&gt;</description></item><item><title>お名前.comのメールをiPhoneで使う設定をして、Temporary authentication failureが出た時の対応</title><link>https://hack-le.com/onamae-pop/</link><pubDate>Mon, 11 Dec 2017 12:23:13 +0900</pubDate><guid>https://hack-le.com/onamae-pop/</guid><description>&lt;p&gt;お名前.comのメールアカウントの設定で、POPサーバーの設定をした時に、「Temporary authentication faulure」と出たときの対応。&lt;/p&gt;&#10;&lt;p&gt;結論から言うとデフォルトのポート番号に問題があった。iOS 11では995になっていたが、お名前.comでは110。ただ人によっては特に何も変えなくても自動的に110になっていたらしい……。&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;環境はiOS 11。iPhoneおよびiPad。&lt;/p&gt;&#10;&lt;p&gt;お名前.comのメールサーバーを使う。で、公式ドキュメントである「&lt;a class="link" href="https://help.onamae.com/app/answers/detail/a_id/18791" target="_blank" rel="noopener"&#10; &gt;お名前.comヘルプセンター&lt;/a&gt;」に沿ってメールアカウントをiOSデバイス上でしようとしたとき、POPサーバーの設定で「Temporary authentication failure」と怒られる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/12/a457ca22ab5ef1388949acee1599bd11.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;怒られる&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Temporaryだが多分設定変えないと永遠に怒られるパターン。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;こうなる原因は色々あると思うのだが、今回の場合はポート番号だった。メールアカウントの設定画面から、「詳細」→「受信設定」で、&lt;strong&gt;サーバポートが110&lt;/strong&gt;になっていることを確認する。自分が試したとき、ここが995になっていた。これは暗号化したPOPを使うときのポート番号。暗号化していないので、110でないといけない。&lt;/p&gt;&#10;&lt;p&gt;わざわざSSLなしで通信しますか、なんて聞いてくるのだから、このへんは自動的によしなに設定してほしいところである。Apple的には暗号化なしで使うなということかもしれないが。まぁ私もそう思うが。&lt;/p&gt;&#10;&lt;p&gt;だが、他の人は同様の手順で特に意識することなく110になっていたらしい。が、その人ももう一度別のアカウントで試してみると、今度はエラー。ポートが違う。なぜこんなまちまちな結果なのだろう。当人は「自分で（ポート番号の設定を）変えたのかなぁ。変えた記憶ないんだけどなぁ」と不思議がっていた。また別の人は特にひっかかりもなく普通に登録できたし、自分も別デバイスでやってみるとすんなりうまくいったりいかなかったりした。なんなんやろね。ｆ&lt;/p&gt;</description></item><item><title>Gmailで特定の条件に沿って添付ファイルを自動的にGoogleドライブに保存する</title><link>https://hack-le.com/gmail2gdrive/</link><pubDate>Thu, 07 Dec 2017 17:40:25 +0900</pubDate><guid>https://hack-le.com/gmail2gdrive/</guid><description>&lt;p&gt;Gmailで受け取ったメールから、差出人や件名を条件にして、添付ファイルを自動的にGoogle ドライブに保存したい。G Suiteのことなので、Google Apps Scriptを用いるのがよい。普段いじらないので色々躓きつつ実装メモ。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;冒頭に書いたとおり。Gmailで受け取ったウンザリするほどのメール群から、差出人や件名、未読などいろいろな条件をつけて、条件にマッチしたものの添付ファイルを自動的にGoogle ドライブに保存する。&lt;/p&gt;&#10;&lt;p&gt;Google Apps Scriptを用いるのが正道だろう。チュートリアルとリファレンスが充実しているので、基本的には公式サイト「&lt;a class="link" href="https://developers.google.com/apps-script/" target="_blank" rel="noopener"&#10; &gt;Apps Script | Google Developers&lt;/a&gt;」を見ながら作るのが早い。JavaScriptがベースなので、オフィススイート嫌いの自分でもやってもいいかなと思える。&lt;/p&gt;&#10;&lt;h2 id="実装"&gt;実装&#10;&lt;/h2&gt;&lt;p&gt;以下のように実装した。コード中のコメントで何をしているのか解説。使われている関数の意味は公式のリファレンスで調べるのが一番早くて正確なので割愛。まぁだいたいわかるはず。&lt;/p&gt;&#10;&lt;p&gt;目的：最新20件のスレッドから、match@example.comさんから&amp;quot;マッチでーす&amp;quot;が件名に含まれている未読メールの添付ファイルを、Googleドライブの任意のディレクトリに保存する。保存したメールは既読にする。&lt;/p&gt;&#10;&lt;pre&gt;`function myFunction() {&#13; // 最新20件&#13; var thds = GmailApp.getInboxThreads(0,20);&#13; // 条件に合ったメッセージ群を抽出&#13; msgs = selectMsgs(thds);&#13; // 各メッセージについて処理&#13; for (var i=0; i&lt;msgs.length; i++) {&#13; // 添付ファイルを取り出す&#13; files = msgs[i].getAttachments();&#13; // Google Driveに保存&#13; saveFiles(files);&#13; }&#13; }&#13; &#13; function selectMsgs(thds) {&#13; msgs = [];&#13; for (var i=0; i&lt;thds.length; i++) {&#13; // 特定の条件に合うメッセージのみ抽出&#13; // falseが返ってきたら次のメッセージを処理、配列が返ってきたら結合&#13; sp_msgs = selectSpecificMsgs(thds[i].getMessages());&#13; if (!sp_msgs) { continue; }&#13; Array.prototype.push.apply(msgs,sp_msgs);&#13; }&#13; return msgs;&#13; }&#13; &#13; function selectSpecificMsgs(msgs) {&#13; var sp_msgs = [];&#13; var count = 0;&#13; // ここから条件にあったものだけを追加するような感じ&#13; for (var j=0; j&lt;msgs.length; j++) {&#13; if (!msgs[j].isUnread()) { continue; }&#13; sender = msgs[j].getFrom();&#13; if (!sender.match(/match@example.com/)) { continue; }&#13; subject = msgs[j].getSubject();&#13; if (!subject.match(/マッチでーす/)) { continue; }&#13; sp_msgs.push(msgs[j]);&#13; // 既読にする&#13; msgs[j].markRead();&#13; // 配列に追加したらcountする&#13; count++;&#13; }&#13; // 一度もcountされていない=条件に合わなかった、のでfalseを返す&#13; if (count == 0) { return false; };&#13; return sp_msgs;&#13; }&#13; &#13; &#13; function saveFiles(files) {&#13; // IDはブラウザで当該ディレクトリにアクセスしたときのURLの末尾&#13; var folder = DriveApp.getFolderById('hogehoge');&#13; for (var i=0; i &lt; files.length; i++) {&#13; Logger.log(files[i].getName());&#13; folder.createFile(files[i]);&#13; }&#13; }`&lt;/pre&gt;&#13;&#10;&lt;p&gt;実行すると、最新20件のスレッドから、条件にあったメールの添付ファイルを、Googleドライブ上の任意のディレクトリに保存できる。ディレクトリはフォルダIDで指定している。GoogleのフォルダIDは、ブラウザでアクセスした時のURLの末尾。&lt;/p&gt;&#10;&lt;p&gt;あまりJavaScriptを触ってこなかったので、時間がかかってしまったが勉強になった。JavaScriptはfor〜in文がややこしいことを知らず、そこで随分ハマってしまった。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/t_imagawa/items/47fc130a419b9be0b447" target="_blank" rel="noopener"&#10; &gt;Google Apps Script 入門 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://arrown-blog.com/gmail-attachmentfile-googledrive/" target="_blank" rel="noopener"&#10; &gt;Gmailの添付ファイルをGoogleDriveへ自動保存！GoogleAppsScript活用法 | Arrown&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.symmetric.co.jp/blog/archives/1156" target="_blank" rel="noopener"&#10; &gt;「Google Apps Script」で社内システムをつくってみた～はじめてのJavaScript編～ | 株式会社シンメトリック公式ブログ |&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/takeharu/items/d75f96f81ff83680013f" target="_blank" rel="noopener"&#10; &gt;JavaScriptの配列の使い方まとめ。要素の追加,結合,取得,削除。 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Xperia Z3が壊れたのでiPhone 8 に買い替え</title><link>https://hack-le.com/iphone8/</link><pubDate>Fri, 01 Dec 2017 10:17:27 +0900</pubDate><guid>https://hack-le.com/iphone8/</guid><description>&lt;p&gt;2015年の春から白ロムのドコモ版Xperia Z3を使っていたのだが、先月酔って転んで破損させるという情けない憂き目を見た。スーツも破れるし散々であった。&lt;/p&gt;&#10;&lt;p&gt;スマホがないのは困るので、急遽購入することになり、色々悩んだ末、結局iPhone 8を購入した。Xではない。まぁまぁ快適である。もっとも、普通の人はiPhone 7で十分だとも思う。&lt;/p&gt;&#10;&lt;h2 id="xperia-z3は良いデバイスだったが"&gt;Xperia Z3は良いデバイスだったが&#10;&lt;/h2&gt;&lt;p&gt;Xperia Z3は良いデバイスであったと思う。購入したのは2015年3月、それまではiPhone 5を使っていた。iOSからAndroidであるので、乗り換えてしばらくは色々と違和感があり、iPhone 5と併用していたのだけれど、1年ほど使うと色々と便利な小技も覚えてきて、そうするとiPhoneよりも良いかもしれないな、と思うこともあった。&lt;/p&gt;&#10;&lt;p&gt;Androidデバイスはなんといってもその自由度とGoogleサービスとの親和性が魅力で、その代わりiOSデバイスに比べるともたつきがあったり、不安定であったり、電池持ちが悪かったりするが、Xperia Z3はiPhoneには及ぶべくもないものの、それなりに高い水準でAndroidの機能を使えたのが良い。iPhone 5の前に使っていた、LGのスマートフォンから随分と進化している（もっとも、Android 2.3時代である。今のLGのスマートフォンはもっと使いやすいだろう）。おサイフケータイにも対応しているし、2017年11月になってもまだまだ使える代物であった。&lt;/p&gt;&#10;&lt;p&gt;だから、まだ当分使う気でいた。が、Xperia Z3を破損させてしまい、そうもいかなくなってしまう。その原因が、雨の夜道、酔って転んだ拍子に落としてしまったというのだから情けない。スーツのズボンも破れてしまうし散々だった（片割れのジャケットの使いみちはいくら考えても思いつかない…捨てるしかないのだろうとは思うものの踏ん切りつかぬ）。&lt;/p&gt;&#10;&lt;p&gt;まぁ、その頃には動作が随分重くなっていたし、ちょっと使っているとすぐに熱くなって、ゲームなどはまともにできる状態ではなかったので、寿命といえば寿命だったのかもしれない。そう思うことにする。&lt;/p&gt;&#10;&lt;h2 id="iphoneに買い替え"&gt;iPhoneに買い替え&#10;&lt;/h2&gt;&lt;p&gt;Xperia Z3の次に何を買うかだが、Android→iOS→Androidときたので、次のスマートフォンはiPhoneにするつもりでいた。しかし、これがなんとも気乗りしない。できることがたいして変わらないのに、iPhoneは年々高くなっている。&lt;/p&gt;&#10;&lt;p&gt;最新のiPhone 8にすると、もっとも安いものでも税込み85,000円。私にとってマストな条件であるストレージ256GBにしたら、10万を超える。パソコンが買える値段だ。私の愛機Mac mini 2012は2012年当時6万円で購入し、今に至るまでガンガン働いてくれているというのに、随分と高くなった……（2012年最高の買い物だった…まぁその後色々と拡張したり周辺機器を揃えたりしているので、出費を合計したら20万くらいになってそうだが）。ガジェット好きではあるけれど、スマートフォンは5万円以下に抑えたい。というか、そんなお金があるならパソコン買いたい。&lt;/p&gt;&#10;&lt;p&gt;だから、iPhone 7にすることも考えた。これでも高いが、iPhone 8よりはマシだ。性能的には、iPhone 7でもほとんど問題がない。無線充電がないが、これは昔Nexus 7で試した時にそんなに良いものではないことを知った。問題はストレージで、iPhone 7はApple Storeでは128GBまでしかない（いやらしい）。中古ならば256GBモデルがあるものの、持ち主の臭いが色濃く残るスマートフォンの中古はできれば避けたい。型落ちの機種を買うということに抵抗感もあった。&lt;/p&gt;&#10;&lt;p&gt;そうすると、高くてもやはりiPhone 8ということになってしまう。iPhone 8は確かにスペック自体は非常にパワーアップしており、これがパソコンならば迷うことなく購入するところなのだが……iPhone 8は、明らかにそのパワーを持て余している。機械学習、ARの時代を見越しての性能なのだろうが、少なくとも今ではないし、果たしてそんな時代が本当に来るのかちょっと疑問でもある（特にARは）。スマートフォンでやりたいことなど、そう大したことではない。私の用途はニュース、天気、カメラ、電子書籍、コミュニケーションくらいだが、多くの人もそんなものだろう（インスタと動画が加わるくらいか）。&lt;/p&gt;&#10;&lt;p&gt;しかし……逆に言うと、使おうと思えば、その性能を使えるのだろうか、とも思う。機械学習は昔から個人的に興味のあるところでもあり、正直やってみたいという気持ちは強い。ちょうど転職して、これまでのどちらかというとハードウェア寄りの仕事から、ソフトウェア中心の仕事ができそうになってきた（いずれまたハードも触りたいけれど）ので、勉強すれば、直接仕事に役立つとまではいかずとも、かなり有益であるようにも思える。&lt;/p&gt;&#10;&lt;p&gt;うーん……高い、けど……性能自体は確かにそれだけのものはあるし、それを使おうと挑戦することは悪くないような気がする……うーん……&lt;/p&gt;&#10;&lt;p&gt;よし、買お。&lt;/p&gt;&#10;&lt;p&gt;ということで、表参道のアップルストアに出かけて、iPhone X待ちの行列を尻目に、iPhone 8を購入した。レジがないために買い方がわからず、1時間くらい右往左往してしまった。店員に話しかけようにもiPhone X祭りで皆忙しそうで…やっとの思いで話しかけると、今度は20分ほど太陽の光が眩しい窓際に並ばされ……次からは絶対にオンラインストアで買うと決心。&lt;/p&gt;&#10;&lt;h2 id="使用感"&gt;使用感&#10;&lt;/h2&gt;&lt;p&gt;さて、使い始めてもうすぐ一ヶ月になるが、やはり最新のiPhoneであるので、快適に使えている。Androidで使えたPie Controlが時々懐かしいが、まぁ必須というほどでもないし、それよりも多くのアプリケーションがAndroidのそれよりも快適に使えていることが大きい。一つ一つの動作が早く、電池持ちもいい。加入しているApple Musicの使い勝手も、当然のことながらAndroidよりもいい。&lt;/p&gt;&#10;&lt;p&gt;不便といえば、ChromeでLastPassのパスワード自動入力を自分で呼び出すのが多少面倒くさいということくらいか（Androidではパスワード欄をタップするだけで呼び出せた）。まぁでも、指紋認証が使えるのでトータルの利便性は確実に上がっている。&lt;/p&gt;&#10;&lt;p&gt;所有の喜びみたいなものも感じられるし、なんだかんだ言っても良い買い物だったかなと思う。もっとも、人に薦めるならiPhone 7なのであるが！&lt;/p&gt;</description></item><item><title>MacとWindowsのGoogle ドライブによる共有、また濁点でハマる</title><link>https://hack-le.com/gdrive-mac-win/</link><pubDate>Tue, 28 Nov 2017 09:35:51 +0900</pubDate><guid>https://hack-le.com/gdrive-mac-win/</guid><description>&lt;p&gt;いつの間にかクライアントアプリの名前がバックアップと同期というわかりづらい名前になっていたGoogle ドライブ。Googleアカウントを持っている人と手軽にファイルを共有できるのでよく使っているのだが、今回また濁点問題でハマった。Macはファイルシステムの仕様で濁点を一文字として扱うアレである。もう。&lt;/p&gt;&#10;&lt;p&gt;とりあえず&lt;strong&gt;Dropbox最強&lt;/strong&gt;、という話。&lt;/p&gt;&#10;&lt;h2 id="macの濁点問題の発生再び"&gt;Macの濁点問題の発生再び&#10;&lt;/h2&gt;&lt;p&gt;頼まれて、あるExcelファイルに基づいて大量にファイルを生成するスクリプトを作った。そういう次第なので、当然生成されるファイル名は日本語である。スクリプトはpython製で、Macで作成し、実行した。&lt;/p&gt;&#10;&lt;p&gt;で、生成したファイルはGoogle Driveの共有フォルダ経由で渡したのだが…ここで問題が発生。懐かし…くもなんともないが、濁点問題である。Macの濁点問題は、Mac以外のOSを使っている人がいつかぶち当たる問題で、私も困った経験があるが（「&lt;a class="link" href="https://hack-le.com/30878779-2/" &gt;rsyncでiconvオプションをつけると、deleteオプションの挙動が変わる？？(Mac) – 或る阿呆の記&lt;/a&gt;」）、最近は扱いにも慣れてすっかり忘れていた。で、忘れた頃にまたやってきた。&lt;/p&gt;&#10;&lt;p&gt;Mac製の濁点がついたファイルがあると、Windows側で圧縮処理ができなかったりする。もちろんWidows側でリネームすれば問題ないのだが、なにしろ数百というファイルがあるので、いちいちやってられない。さて、どうするか。&lt;/p&gt;&#10;&lt;h2 id="案1-windows側でスクリプトを実行する"&gt;案1: Windows側でスクリプトを実行する&#10;&lt;/h2&gt;&lt;p&gt;MicrosoftはナデラCEOに代わってから面白い取り組みをよくしている。Windows 10上でLinuxを動かせるWindows Subsystem for Linux（以前はBash on Ubuntu on Windows, BoWとか呼ばれていた）はその一つだろう。cygwinやMinGWには色々とつらい思い出があるので、これは本当に有難い。昨今のMacが微妙なのもあって、Windowsに心揺らいでいる諸氏もいることだろう。&lt;/p&gt;&#10;&lt;p&gt;ということで、最近はWindowsでも簡単にpythonスクリプトを実行できる環境が整っている。Windows特有の環境（文字コードとかドライブレターとか）を考慮しなくて良いのは嬉しい。&lt;/p&gt;&#10;&lt;p&gt;で、半日かけて環境を構築し、Windows側でスクリプトを実行したら、問題なくファイルが生成された。よし。&lt;/p&gt;&#10;&lt;h2 id="案2-dropboxを使う"&gt;案2: Dropboxを使う&#10;&lt;/h2&gt;&lt;p&gt;とまぁそこまでやって気づいたのだが、Google DriveじゃなくてDropboxを使えばどうだろうか、と。&lt;/p&gt;&#10;&lt;p&gt;で、一度Dropboxに上げなおして、Dropbox経由でファイルを共有したところ……うまくいってしまった。Dropboxはちゃんと治してくれるらしい（参考「&lt;a class="link" href="https://qiita.com/knaka/items/48e1799b56d520af6a09" target="_blank" rel="noopener"&#10; &gt;Mac OS X の NFD 問題での対策諸々 - Qiita&lt;/a&gt;」）。&lt;strong&gt;最初からDropboxでやればよかった&lt;/strong&gt;。あの苦労はなんだったんだ。&lt;/p&gt;&#10;&lt;p&gt;なんだかんだいいつつ、オンラインストレージサービスは今なおDropboxが頭ひとつ抜けていると思う。Linuxでも使えるし。&lt;/p&gt;</description></item><item><title>おま環はよくあること</title><link>https://hack-le.com/omakan/</link><pubDate>Sun, 26 Nov 2017 23:13:51 +0900</pubDate><guid>https://hack-le.com/omakan/</guid><description>&lt;p&gt;最近渋々ながらmac OS High Sierraを導入した。職場のiMacがHigh Sierraなので、それに合わせることにしたのである。覚悟はしていたものの、やはり色々とおかしくなるところもあって、クリーンインストールすれば治るだろうか、しかし面倒だ、他になにか打開策はないかと、色々調べ回っている今日この頃、&amp;ldquo;おま環&amp;quot;という言葉をよく見かけて、それが少し気になった。&lt;/p&gt;&#10;&lt;h2 id="おま環"&gt;おま環？&#10;&lt;/h2&gt;&lt;p&gt;OSのアップデートにはトラブルが付き物だ。発生したトラブルの対応は、自分と同じような状況の人の愚痴でも見ながらするに限る。困っているのは自分一人ではないのだという事実に、なんとなく励まされるからである。それに、ひょっとしたら解決の方法の糸口が見つかるかもしれない。&lt;/p&gt;&#10;&lt;p&gt;それで、皆の不具合状況を見て回っていたのだが、気になったのが&amp;quot;おま環&amp;quot;という言葉である。これは多分、&amp;ldquo;おま国&amp;quot;から来ている。&amp;ldquo;おま国&amp;quot;とはつまり&amp;quot;お前の国籍が気に入らない&amp;quot;の意で、主に日本だけゲームを売ってもらえないなどの現象が起きているゲームユーザーの間で用いられている。&lt;/p&gt;&#10;&lt;p&gt;この文言を見て真っ先に思い出したのは、一昔前に流行っていたAA&amp;quot;知ってるが お前の態度が気に入らない&amp;quot;だ。実際、そこからきているのではないかと思う。それで、&amp;ldquo;おま環&amp;quot;の意味を私は&amp;quot;お前の環境が気に入らない&amp;quot;だと思ったのだが、どうも見ていると&amp;quot;お前の環境が悪い&amp;quot;というニュアンスで使われていることが多いように思えた。実際、そのように意味を解説しているところもあった。&lt;/p&gt;&#10;&lt;h2 id="相性が悪い"&gt;相性が悪い&#10;&lt;/h2&gt;&lt;p&gt;環境が悪いというと、たとえばハードウェアの推奨スペックを満たしていないとか、サポートされたものを使っていないということが考えられる。たとえばWindows XPでIE 6を使っているのであれば、2017年制作のブラウザゲームが動かないのも仕方ないし、古すぎるスマートフォンで、最近のゲームが快適にできないのも当たり前のことである。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、そうでもなければ環境が悪いとは中々言えない。だが、理屈の上では動くはずだが現実問題として動かないことは往々にして発生する。そんな時は、「相性が悪い」という便利な言葉を使う。まぁ突き詰めれば何かしら原因があるはずなのだが、それがよくわからないので、&amp;ldquo;相性&amp;quot;という言葉でお茶を濁しているわけだ。&lt;/p&gt;&#10;&lt;p&gt;相性問題でガジェット好きにとって身近なものといえば、やはりPCのメモリだろう。どんなに規格を満たしていても、実際に自分のPCで動くかどうかはやってみるまでわからない。だから永久保証なんてものもメモリでは珍しくなく、これはつまり「テストはみんなに任せた！」ということだと思うが、それくらいなんともならないものなのだ。&lt;/p&gt;&#10;&lt;p&gt;昔読んだアナログ電子回路の本で、メモリの相性の悪さは、一因としてVSが悪いからかも、なんてことが書かれていたが、本当のところはどうなんだろうか。VSとはVSWRの略、VSWRとはVoltage Standing Wave Ratioの略で、電圧定在波比という。反射波と進行波がどれだけ影響を及ぼし合っているか、即ちどれだけ効率よく電力を伝送できるかを数値化したものだ。定在波は高校物理（中学物理？）でもやるので、なんとなくイメージがつくかと思う。VSが悪いと、電力をまともに送ることができない（それどころか、電力が大きいと反射波でものを壊す恐れさえある）。ロジックボード上の電子の流れまではさすがに市井の一市民に追えるものではなく、なんかよくわからんがとりあえず動かん、という現実だけが現前に残る。&lt;/p&gt;&#10;&lt;p&gt;そういう話はソフトウェアでもやはりあって、ウィルスチェックのソフトウェアに邪魔されて正しく動かないなんてのは定番であるし、昔いじったなんてことのないシステム部分の変更が、まるでバタフライ効果のように今になって影響を及ぼす、なんてこともあるだろう。不動作の原因がウィルスチェックソフトくらい代表的なものであれば察しがつくが、昔入れたマイナーなソフトウェアの残滓が原因であったりなどすると、とても追えるものではないという意味では、メモリの相性の悪さと同じようなものだ。ソフトウェア的に特定できない問題を解決する最終手段は、伝家の宝刀クリーンインストールである。これでだいたい大丈夫。&lt;/p&gt;&#10;&lt;h2 id="おま環が発生するのは当たり前"&gt;おま環が発生するのは当たり前&#10;&lt;/h2&gt;&lt;p&gt;メーカーにすれば、個人の環境などすべて把握できるものではないので、ソフトウェアのアップデートは何かとトラブルになるわけだ。しかし、自由にいじれるのはPCの醍醐味である。いろいろなソフトウェアを入れたり、システムをいじったりすることは、何も悪いことではない。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、最新のソフトウェアがうまく動かないのは自由の代償とも言えるもので、長くPCを使っていれば、どうしても&amp;quot;おま環&amp;quot;は発生するものというのが私の認識である。多少行儀悪く使っていたとしても、人間が使っているのだから仕方ない面があろうし、たとえ行儀よく使っていても、行儀にも流儀があるし、まぁそのへんはどうにもならんことだと割り切っている。&lt;/p&gt;&#10;&lt;p&gt;なので、使い込むほどにおま環は発生しやすいものと思う。ある意味、無個性で横並びのデジタル製品が、使われることによって個性を帯びた結果とも思え、個人的にはむしろニンマリしてしまう話だ。いろいろなことがあるものだ、と。&lt;/p&gt;&#10;&lt;p&gt;つまり、&amp;ldquo;おま環&amp;quot;は当たり前にあること。だから、私の感覚として、おま環とは&amp;quot;お前の環境が気に入らない&amp;quot;くらいがちょうどよい。あくまで&amp;quot;気に入らない&amp;quot;のであって、良い悪いの話ではないのである。この俺様の環境が、メーカー様に気に入られなかったよ、やれやれ、程度のニュアンスだ。&lt;/p&gt;&#10;&lt;p&gt;だが、お前の環境のせいだ、とか、お前の環境の&amp;quot;問題&amp;quot;だと言われると、非をこちら側に求められているように感じる。実際そういうニュアンスを込めて書いている人がちょいちょい見受けられた。よほど行儀の悪い使い方をしていて、その癖メーカーを過度に非難する輩ならそれもわかるが…。&lt;/p&gt;&#10;&lt;p&gt;「そりゃ残念だった。そろそろクリーンインストールのしどきかもね！」くらいの話だと思うのだが、どうも重く捉えられていることが多い気がする。まぁ、ある特定の環境に起因するものを、あたかもメーカーが史上最悪のソフトをリリースしたかのように吹聴されれば、そのメーカーのファンとしては苛々するだろうが、それは過度な非難が問題なのであって、環境が問題ではないだろう。おま環というよりは「言い過ぎ」の問題である。&lt;/p&gt;&#10;&lt;p&gt;が、どうもそういう話ではなく、そもそもメーカーの想定外の環境ということ自体に、否定的なものを感じているような人もチラホラ見受けられた。それは行儀の悪い使い方云々以前の話だ。多分、そのへんが私が違和感を感じたところではないかなぁと思う。&lt;/p&gt;&#10;&lt;p&gt;&amp;ldquo;おま環&amp;quot;が当たり前ではない人たちがいる…のだろうか？ちょっと信じがたいのだが、たしかにまぁ、これといったことをしなければ、今時はそんなものかもしれない。そんな人からすると、ちょっとした愚痴でも、そのニュアンスがわからず、贔屓のメーカーが不当に非難されている！と感じる…こともある、のかもしれない。よくわからない。ただ、おま環が当たり前でなければ、同情の気持ちなどそりゃ微塵も起きんだろうとは思う。最近の拡張性がなく最初からよく出来たPCや、お行儀の良さを強制されるiPhone/iPadに慣れると、むしろそれが普通なのだろうか。うーん、なんだかなぁ。&lt;/p&gt;</description></item><item><title>メールの大量配信について調べたメモ</title><link>https://hack-le.com/mail-server/</link><pubDate>Mon, 20 Nov 2017 15:11:42 +0900</pubDate><guid>https://hack-le.com/mail-server/</guid><description>&lt;p&gt;現在携わっているプロジェクトが、大量のメールを捌く必要のあるシステムだった。それで、Amazonの提供するAmazon SESを使うのか、SendGridを使うのかなどという話になったのだが、あまり知らない分野で、話がよく飲み込めなかったので、初心者なりに色々調べた、そのメモ。調べてみると奥が深い。&lt;/p&gt;&#10;&lt;h2 id="基本"&gt;基本&#10;&lt;/h2&gt;&lt;p&gt;一応こんなサイトを構築しているくらいなので、postfixで自分宛てにログメールを送るくらいのことはやっているが、メールサーバーの詳細についてはよく知らない。基本的な用語の知識がないと、記事を読んでもわけわからんので、まずそのへんを抑えるため、「&lt;a class="link" href="https://www.cuenote.jp/glossary/" target="_blank" rel="noopener"&#10; &gt;メール配信に関する基礎用語｜メールマーケティングのCuenote&lt;/a&gt;」の用語集に目を通すと、だいたい感じが掴めた。特にDKIMやSPFといった認証絡み、バウンス、レピュテーションなどの用語は、押さえておかないと関連の記事がまったく読めない。&lt;/p&gt;&#10;&lt;p&gt;あと他に関連する記事でよく見た用語を付け加えると、&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;スロットリング…ISPによる一時的なメール受信制限&lt;/li&gt;&#10;&lt;li&gt;IPウォームアップ…新しいIPアドレスで少しずつ配信量を増やしてレピュテーションを上げる（新IPで一気に送るとスパムと疑われる）&lt;/li&gt;&#10;&lt;li&gt;snowshoeスパム…送信成功するまで送信元IPアドレスを変更するような行為&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;とか。&lt;/p&gt;&#10;&lt;h2 id="メールの難しさ"&gt;メールの難しさ&#10;&lt;/h2&gt;&lt;p&gt;基本的な用語を抑えたうえで、たとえば「&lt;a class="link" href="http://blog.flect.co.jp/cto/2011/08/amazon-ses-430f.html" target="_blank" rel="noopener"&#10; &gt;フレクトのクラウドBlog: Amazon SESとメール配信の難しさについて調べたこと&lt;/a&gt;」「&lt;a class="link" href="https://qiita.com/nakansuke/items/0642d7c8a3c6b1790a6d" target="_blank" rel="noopener"&#10; &gt;SendGridとAmazon SESを比較してみる - Qiita&lt;/a&gt;」あたりの記事を読んでみると、メールサーバーを運用する難しさが垣間見える。Amazon SESとは、Amazonの提供するメール配信サービスのことで、文句なしに安くて信頼性が高いと評判である。さすがAmazon。が、コスト安と引き換えに、自分でしなければならないことも多いようだ。それを一つ一つ検討していくと、なるほど多少コストがかかっても、SendGridなどのメール配信サービス業者がある理由がなんとなくわかる。&lt;/p&gt;&#10;&lt;p&gt;具体的には、バウンスがあったアドレスはSuppression Listに載り、次からは再送されないわけだが、Listにあるアドレスに再度送信するリクエストがあった時、Send GridではDropイベントが起きるが、Amazon SESでは再度バウンス扱いなので、バウンス率が高まってしまうため、Amazon SESでは特にバウンス時の処理が重要だ、とか、指定ドメイン以外弾く設定のある日本のキャリアケータイ事情だと、リージョン毎にリストを共有するAmazon SESは具合が悪い、とかそういった事情があるらしい。&lt;/p&gt;&#10;&lt;p&gt;ただ、コストは確かにAmazon SESは安いみたい「&lt;a class="link" href="http://atskimura.hatenablog.com/entry/2014/02/13/084051" target="_blank" rel="noopener"&#10; &gt;メール配信クラウドサービス13個の価格比較グラフを作りました（SES/SendGrid/Mailgun&amp;hellip;） - atskimura-memo&lt;/a&gt;」。ってかこの記事すごい。&lt;/p&gt;&#10;&lt;h2 id="総じて"&gt;総じて&#10;&lt;/h2&gt;&lt;p&gt;メールの配信は、先ず単純にメールを捌くことがもちろん大事で、そのためにスケーラビリティを考慮する必要がある。まぁでもそれは、今時はどのサービスを使ってもつつがなくできそうな感じがする。それよりも、いかにして&lt;strong&gt;スパマーではないですよ&lt;/strong&gt;ということを客観的に証明するかが重要そうだ。そのために認証技術が発達し、構築がやや煩雑になった。そしてバウンス率、苦情率、レピュテーションといった具合に数値化して評価する仕組みが出来て、そしてその数値を問題ないラインに維持する運用が、どうも非常にたいへんそう。そのたいへんさを自分たちでどれだけ請け負えるか、が実際の運用を考えたときの問題か。印象としては、メールサーバーの運用について詳しくかつ時間を割ける人がいないのであれば、Amazon SESよりもSendGridのようなサービスを利用することを考えたほうが、バウンス処理といった工数の話だけではなく、サポートもあるので、良いのかな、と思った。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;メールを捌く…スケーラビリティ&#10;&lt;ul&gt;&#10;&lt;li&gt;だいたいどこも対応&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;スパマーだと思われないようにする&#10;&lt;ul&gt;&#10;&lt;li&gt;バウンス率、苦情率の監視&#10;&lt;ul&gt;&#10;&lt;li&gt;バウンス時の処理&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;配信リストをクリーンに保って運用&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Amazon SESは確かに安いけど自分でやることも多い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;そういえば、前の会社でメールサーバーをレンタルサーバーの昔のプランからG Suiteに乗り換えた時、さくらのメールボックスやらConoHaのアプリケーションサービスやらを試したら、迷惑メールに振り分けられたりしてたいへんだったなぁ。結局Googleさんにおまかせするのが一番という結論に至り、それは間違えていなかったと今も思う。スパムに間違われず送るには多くの地味なノウハウが必要で、かつ止まることが許されないメールサーバーの運用は、なるべく信頼できる外部のサービスを頼るのが、結局安いのかも。&lt;/p&gt;&#10;&lt;p&gt;まぁなんにせよ、すぐに始められるAmazon SESをまずいじってみるのが何かと良さそうだ。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;勉強させていただきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.cuenote.jp/glossary/" target="_blank" rel="noopener"&#10; &gt;メール配信に関する基礎用語｜メールマーケティングのCuenote&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://blog.flect.co.jp/cto/2011/08/amazon-ses-430f.html" target="_blank" rel="noopener"&#10; &gt;フレクトのクラウドBlog: Amazon SESとメール配信の難しさについて調べたこと&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/nakansuke/items/0642d7c8a3c6b1790a6d" target="_blank" rel="noopener"&#10; &gt;SendGridとAmazon SESを比較してみる - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://tech.cunited.jp/post/128152119060/migrated-mta-sendgrid" target="_blank" rel="noopener"&#10; &gt;スタートアップでのSaaS利用はユーザサポート体制で選ぶべき、あるいはSendGridのサポートが素晴&amp;hellip; | サイタ 開発者ブログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://atskimura.hatenablog.com/entry/2014/02/13/084051" target="_blank" rel="noopener"&#10; &gt;メール配信クラウドサービス13個の価格比較グラフを作りました（SES/SendGrid/Mailgun&amp;hellip;） - atskimura-memo&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://ascii.jp/elem/000/001/124/1124296/" target="_blank" rel="noopener"&#10; &gt;ASCII.jp：SendGridユーザーが語る！メール大量配信のここが落とし穴 (1/3)&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://sendgrid.kke.co.jp/guide/" target="_blank" rel="noopener"&#10; &gt;ご利用ガイド | SendGrid&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Raspberry Piに固定IPアドレスを付与する時の設定</title><link>https://hack-le.com/rpi-ip/</link><pubDate>Sat, 18 Nov 2017 18:43:04 +0900</pubDate><guid>https://hack-le.com/rpi-ip/</guid><description>&lt;p&gt;いつも忘れるのでメモ。Raspberry Piに固定IPアドレスを付与する場合の設定。Jessie以降（Jessieより前は設定するファイルが異なる）。あとJ-COMとかでインターネットに繋ぐため検索ドメインを設定しなければいけない場合のこととか。あれこれ。&lt;/p&gt;&#10;&lt;h2 id="固定ipアドレスの付与"&gt;固定IPアドレスの付与&#10;&lt;/h2&gt;&lt;p&gt;以前は/etc/network/interfacesで設定していたが、Jessieあたりから/etc/dhcpcd.confになった。以下のように固定したいIPアドレス、ルータ、DNSの設定をする。&lt;/p&gt;&#10;&lt;pre&gt;`interface eth0&#13; static ip_address=192.168.0.30/24&#13; static routers=192.168.0.1&#13; static domain_name_servers=192.168.0.1&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これは有線LANの典型的な場合で、無線LANのIPアドレスを固定したい場合などはinterfaceがwlan0などになるだろう。そのへんはip addrコマンドなんかで調べる。&lt;/p&gt;&#10;&lt;p&gt;また、私の居住環境がそうなのだが、J-COMなんかでインターネットに繋ぐにはDNSサーバや検索ドメインを指定する必要がある場合、たとえば以下のようになる。&lt;/p&gt;&#10;&lt;pre&gt;`interface eth0&#13; static ip_address=192.168.0.30/24&#13; static routers=192.168.0.1&#13; # 適宜変更&#13; static domain_name_servers=8.8.8.8 0.0.0.0&#13; # 適宜変更&#13; static domain_search=example.com&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;domain_name_serversなんかに指定すべきアドレスが複数あるとき、区切りがスベースで良いのかは「&lt;a class="link" href="https://raspberrypi.stackexchange.com/questions/52010/set-static-ip-and-stop-dhcp-on-jessie-lite" target="_blank" rel="noopener"&#10; &gt;raspbian - Set static IP and stop DHCP on Jessie Lite - Raspberry Pi Stack Exchange&lt;/a&gt;」の記事でそういう区切りをしていた人がいるからよいのかな、と。manで読んでもよくわからなかった。まぁでもこれでうまくいっている。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;p&gt;参考にさせていただきました「&lt;a class="link" href="https://qiita.com/ykog/items/a6dbba1c09e870f8f702" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi 2 (Raspbian: jessie) でIPアドレスを固定する - Qiita&lt;/a&gt;」&lt;/p&gt;</description></item><item><title>Mac mini 2012をEl CapitanからHigh Sierraに憂鬱なアップグレード</title><link>https://hack-le.com/elcapitan2highsierra/</link><pubDate>Fri, 17 Nov 2017 09:15:27 +0900</pubDate><guid>https://hack-le.com/elcapitan2highsierra/</guid><description>&lt;p&gt;私の愛機Mac mini 2012（のいわゆる竹モデル）を、先日El CapitanからHigh Sierraにアップグレードさせた。本意ではなかったのだが、諸事情があってやむを得ず。やはりいくつかの不具合もあって、現在クリーンインストールで再インストールしなおすか悩み中である。&lt;/p&gt;&#10;&lt;h2 id="やむを得ず"&gt;やむを得ず&#10;&lt;/h2&gt;&lt;p&gt;Mac mini 2012は素晴らしいマシンで、ここ5年間でももっとも満足度が高い買い物だった。当時このマシンが6万円で買えて、しかもメモリも8GB*2=16GBが5,000円で購入できた、今にして思うと何もかも素晴らしい時だった。SSDこそSATAであるものの、十分高速である。&lt;/p&gt;&#10;&lt;p&gt;ただ、OSをアップグレードさせる度になんだか少しずつ重くなっているような気はしないでもない。さらに10.12のSierraなどは、当初PDFに関わる致命的な不具合（「&lt;a class="link" href="https://hack-le.com/sierra-scansnap/" &gt;macOS Sierra来たけれどScanSnapの問題があるのでアップグレードは当面おあずけ – 或る阿呆の記&lt;/a&gt;」）があり、アップグレードを見合わせた。その後MacBook Air 2013にSierraを入れてみたものの、別に良くなったと思うところはなく、むしろKarabinerが未対応など（これは現在Karabiner-Elementsが進化しているのでほとんど問題がなくなった。本当に凄いソフトだ）、ネガティブな印象のほうが強く、結局High Sierraがリリースされる段になってもMac miniをアップグレードさせることはなかった。もうこのMac miniはずっとEl Capitanのままにしようとさえ考えていた。&lt;/p&gt;&#10;&lt;p&gt;が、最近転職して、今後iOSアプリの開発をすることになりそうな流れになっている。職場では、有難いことにiMacまで使わせてもらっている。で、そうすると当然最新のXcodeを使わなくてはならない。となれば、家のマシンとはいえ、さすがにEl Capitanのままでは具合が悪い。&lt;/p&gt;&#10;&lt;p&gt;それで、渋々ながら、家のMac miniをSierraをすっ飛ばしてHigh Sierraにアップグレードさせることにしたのだ。&lt;/p&gt;&#10;&lt;h2 id="アップグレード後の使い勝手"&gt;アップグレード後の使い勝手&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B017BIMTMA&amp;linkId=0fc9002242730e9dcdb58ed18caca94d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;今のMac mini 2012の構成は、吊るしの竹モデルからメモリを8GB*2に、ストレージを標準のHDにSATA SSD 480GBのものを追加している。メモリのメーカーは覚えていないが、ストレージはSanDiskのSDSSDHII-480G-J25で、当時17,670円で購入したものだ。その後継を今見てみたところ、値段がほとんど変わっておらず、驚いた。今の機種ならそもそもSATAではなくm.2だろうが、そうすると値段はさらに上がる。PCは停滞の末に値上がり基調にあるのだろうか。&#13;&#10;&lt;p&gt;それはよいとして、標準の構成にSSDを追加したFusion Driveであるので、High Sierra最大の特徴といっても良いだろう新しいファイルシステムAPFSは適用されない（そのうち対応される予定だそうだが）。まぁこれはよい。ファイルシステムの進化自体は歓迎したいが、アップグレードで変わるとなると相当のトラブルが予想される。ただでさえOSのアップグレードにはトラブルがつきものなので、ややこしいことは極力なしにしてもらいたい。&lt;/p&gt;&#10;&lt;p&gt;まぁその分、軽くなるようなことはないだろうと思ったし、また実際挙動が軽くなることはなかった。が、別段重くなった感じもしない。普通である。個人的にマストなアプリであったKarabinerの後継（？）、Karabiner-Elementsも進化しており、Emacsキーバインドなど私には十分なことができた。&lt;/p&gt;&#10;&lt;p&gt;が、やはりいくつか困ったことも起きている。&lt;/p&gt;&#10;&lt;p&gt;まず、Thunderbolt2 &amp;lt;-&amp;gt; Display Portで動かしているディスプレイが、しばらく画面を消した後に画面をつけると、何もうつさなくなる。ディスプレイ自体は認識しているようで、操作はできるのだが、何もうつさない。ディスプレイはAcerのEB321HQUBbmidphxで、2560x1440の31.5インチという大画面が特徴のものだ。HDMI&amp;lt;-&amp;gt;HDMIでうつしている三菱電機の今はなきDiamondcrystaは問題なくうつるのだが。再起動してケーブルを抜き差しすると治るものの、ほぼ毎日再起動させる羽目になっており、困っている（私は一日中Macを稼働している）。&lt;/p&gt;&#10;&lt;p&gt;また、起動する度にNASのパスワードを求められており、先のトラブルと併せて面倒くさい。まぁ、これはキーチェインを作り直せば解決するかもしれないが……。&lt;/p&gt;&#10;&lt;p&gt;そしてこれが一番困っているのだが、TimeMachineに使っていたIO-DATAの4TB 外付けハードディスクを認識してくれない。ディスクユーティリティにさえ表示されず、どうしたものかという感じだ。&lt;/p&gt;&#10;&lt;p&gt;他、LibreOfficeのCalcでスクロールの挙動がなんだかおかしいとか（これはアプリ側の問題かもしれないが…）、突然の再起動が何度か起きたりなど、地味に嫌なところもあって、やはりすんなりアップグレードというわけにはいかないらしい。これはもう一度クリーンインストールで再インストールすべきかしら、しかしソフトウェアのライセンス処理など考えると面倒だなぁなどと思い悩む今日この頃である。昔はOSのアップグレードはワクワクしていたものだが、もはや憂鬱な作業にしか感じなくなってしまった。&lt;/p&gt;</description></item><item><title>High SierraでiTunesのLocalizable.stringsをmv（リネーム）しようとしてoperation not permittedと怒られた場合の対応</title><link>https://hack-le.com/itunes-high-sierra/</link><pubDate>Mon, 13 Nov 2017 15:43:02 +0900</pubDate><guid>https://hack-le.com/itunes-high-sierra/</guid><description>&lt;p&gt;iTunesの中途半端なローカライズが嫌という愚痴記事を以前書いた「&lt;a class="link" href="https://hack-le.com/41011431-2/" &gt;iTunes 12もやっぱりジャンル名を勝手に日本語にする。勝手にローカライズ問題は続く – 或る阿呆の記&lt;/a&gt;」。Localizable.stringsをEnglishのものに上書きすることで対応していたのだが、High Sierraだとエラーが出るらしい。多分SIPのせい。その対応。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;iTunesの中途半端な日本語化が嫌なので、Localizable.stringsを英語版に書き換えることでUI含め全部英語にしちゃう。&lt;/p&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;下記の手順でLocalizable.stringsを書き換えようとすると…&lt;/p&gt;&#10;&lt;pre&gt;`$ cd /Applications/iTunes.app/Contents/Resources/Japanese.lproj&#13; $ sudo mv Localizable.strings Localizable.strings.bak&#13; $ sudo cp -a ../English.lproj/Localizable.strings .&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;sudo mvでoperation not permittedだと怒られる。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;iMac 2017&lt;/li&gt;&#10;&lt;li&gt;macOS High Sierra 10.13.1&lt;/li&gt;&#10;&lt;li&gt;iTunes: 12.7.1.14&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;一方、Mac mini 2012をEl CapitanからHigh Sierraにアップグレードしたものでは、この症状は起きなかった。&lt;/p&gt;&#10;&lt;h2 id="原因と対応"&gt;原因と対応&#10;&lt;/h2&gt;&lt;p&gt;多分SIP(System Integrity Protected)のせい。SIPとは/bin、/sbin、/usr、/System下は管理者権限でも変更不可というもの。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="https://www.macworld.co.uk/how-to/mac/how-turn-off-mac-os-x-system-integrity-protection-rootless-3638975/" target="_blank" rel="noopener"&#10; &gt;How to turn off Rootless (SIP, or System Integrity Protection) in Mac OS X - Macworld UK&lt;/a&gt;」によると多くの/ApplicationにあるプリインアプリもSIPの影響を受けるとのこと。該当部分を引用。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;The protected directories are: /System, /bin, /sbin, /usr (but not /usr/local). The symbolic links from /etc, /tmp, and /var to /private/etc, /private/tmp, and /private/varare also protected, although the target directories are not themselves protected. Most preinstalled Apple applications in /Applications are also protected.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;実際に影響を受けるもののリストは、/System/Library/Sandbox/rootless.confを見ればよい。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_6507&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;892&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/11/1629d7cfc34de89e9850b4a34f1b334d.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;対象に入っている[/caption]&lt;/p&gt;&#10;&lt;p&gt;iTunesが保護の対象になっていることがわかる。&lt;/p&gt;&#10;&lt;p&gt;ということで、この日本語問題の手っ取り早い（？）対応策としては、&lt;del&gt;iTunesをアップデートしないこと&lt;/del&gt;SIPを一時的に解除して、その間に上記の書き換えを行うこと。&lt;/p&gt;&#10;&lt;p&gt;解除方法は、以下。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;SIPの解除&lt;/li&gt;&#10;&lt;li&gt;電源を落とす&lt;/li&gt;&#10;&lt;li&gt;Cmd + Rを押しながら起動→リカバリモードで立ち上がる&lt;/li&gt;&#10;&lt;li&gt;ユーティリティ→ターミナルでターミナルを起動&lt;/li&gt;&#10;&lt;li&gt;csrutil disable&lt;/li&gt;&#10;&lt;li&gt;reboot&lt;/li&gt;&#10;&lt;li&gt;普通に再起動すると、SIPが解除されているので、記事の書き換え手順を実行&lt;/li&gt;&#10;&lt;li&gt;元に戻す&lt;/li&gt;&#10;&lt;li&gt;電源を落とす&lt;/li&gt;&#10;&lt;li&gt;Cmd + Rを押しながら起動→リカバリモードで立ち上がる&lt;/li&gt;&#10;&lt;li&gt;ユーティリティ→ターミナルでターミナルを起動&lt;/li&gt;&#10;&lt;li&gt;csrutil enable&lt;/li&gt;&#10;&lt;li&gt;reboot&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以上です。面倒くさい。&lt;/p&gt;&#10;&lt;p&gt;参考&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/iwaseasahi/items/9d2e29b02df5cce7285d" target="_blank" rel="noopener"&#10; &gt;初心者向け MacでOperation not permittedの解決方法 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://qiita.com/whitefox_105/items/0b70f7a504dcb72788e6" target="_blank" rel="noopener"&#10; &gt;SIPをもっと深く知ってみよう！ 〜SIPは一体何を保護しているのか〜 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.padmacolors.org/entry/20170419/4792/" target="_blank" rel="noopener"&#10; &gt;画面共有のポート（5900）を変更する&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>J-COM in my roomの12Mプランが意外と実用的だ</title><link>https://hack-le.com/jcom-12m/</link><pubDate>Wed, 08 Nov 2017 08:46:50 +0900</pubDate><guid>https://hack-le.com/jcom-12m/</guid><description>&lt;p&gt;新しく越したマンションでは、J-COMの12M(bps)のプランが無料で使えるようだった。無料というかまぁ、大家さんがまとめて払ってくれているのだろうが。その費用は結局公益費にかかってくるのだろうし、使わないのも損した気になるので、あまり期待せずに使ってみたところ、これが案外実用的であった。というか、最大通信速度が出たのに感動してしまった。&lt;/p&gt;&#10;&lt;p&gt;5ヶ月目→「&lt;a class="link" href="https://hack-le.com/jcominmyroom5/" &gt;J-COM in my room 12Mプラン、5ヶ月目の雑感 – 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="j-com-in-my-room"&gt;J-COM in my room&#10;&lt;/h2&gt;&lt;p&gt;J-COMといえばケーブルテレビであるが、このご時世であるので、インターネットのサービスも展開されている。とはいえ、光回線が普通の今、わざわざ同軸ケーブルを使った旧態依然としたサービスを利用する意味は薄い。まして私はテレビを見ないのだから尚更である。&lt;/p&gt;&#10;&lt;p&gt;が、私の越したマンションでは、J-COMの12Mbpsプランが無料で使えるようだった。どうやら、大家さんがまとめて支払ってくれているようで、これはJ-COM in my roomと呼ばれるサービスらしい（&lt;a class="link" href="https://cs.myjcom.jp/knowledgeDetail?an=000003596" target="_blank" rel="noopener"&#10; &gt;J:COM In My Roomはどのようなサービスですか？ | JCOMサポート&lt;/a&gt;）。まぁ結局費用は家賃にかかるのだから、これが本当にお得かどうかは微妙なところだと思う。&lt;/p&gt;&#10;&lt;p&gt;こうなると、なんだか使わないと妙に損した気分になる。また、私のマンションは光回線を引くことはできるものの、途中でメタリックケーブルを挟むいわゆるVDSL方式であり、ベストエフォートで最大100Mbps。一昔前であればそれでも十分高速に思えたが、ギガビットが盛んに喧伝される昨今、これもまた妙に損した気分。&lt;/p&gt;&#10;&lt;p&gt;ということで、まぁどうせ無料なのだから、物は試しとJ-COM 12Mbpsのプランを導入してみることにした。&lt;/p&gt;&#10;&lt;h2 id="驚きの最大通信速度"&gt;驚きの最大通信速度&#10;&lt;/h2&gt;&lt;p&gt;申し込みから一週間ほどで、開通の工事が立ち会いのもとでなされた。うまく土曜日に予約が取れたのはよかった。申し込みから開通まで比較的早いのは、光回線に対する優位なところだと思う。&lt;/p&gt;&#10;&lt;p&gt;で、開通後はすぐに使えるようになったので、早速回線速度を測定してみたのだが……なんと、驚きの12Mbps。&lt;/p&gt;&#10;&lt;p&gt;まぁ確かに、J-COMは320Mbpsのプランまであるのだから、回線速度は論理的に制限されているのだろうとはいうものの、これまで最大通信速度の1/10程度しか出ない、が経験則的な常識であったので、正直言ってまるで期待していなかった。せいぜい1-2Mbps、まぁ5Mbpsも出たら御の字かな程度の期待であった。なので、&lt;strong&gt;最大通信速度が出ているという事実に感動&lt;/strong&gt;してしまった。&lt;/p&gt;&#10;&lt;p&gt;その後も数日にわたって何度も測定したが、いつ測定しても12Mbps。12Mbpsが安定して出るのであれば、特にオンラインゲームをするわけでもない私には実用上ほとんど問題がない。せいぜいOSイメージのダウンロードに若干時間がかかる程度であるが、それだってしょっちゅうあることではない。&lt;/p&gt;&#10;&lt;p&gt;まぁ、J-COMの罠として&lt;strong&gt;上り回線が非常に低速&lt;/strong&gt;（12Mbpsプランであればベストエフォートで最大2Mbps、最上位の320Mbpsプランでも10Mbpsであるそうな）というのもあり、サーバーを運用している私にとってこの点はかなり痛いのであるが、まぁこれは運用次第であるので、当面は様子を見ようと思う（ちなみに、低速なりに上りも2Mbps出ていた）。&lt;/p&gt;&#10;&lt;h2 id="光回線の工事をやめてj-comを使い続ける"&gt;光回線の工事をやめてJ-COMを使い続ける&#10;&lt;/h2&gt;&lt;p&gt;ということで、このままJ-COMのプランを使い続けることにした。光回線を引くつもりで、DMM光に工事の申し込みをしていたが、それもキャンセル。まぁ、DMM光のオペレータの対応が気に入らなかったということもあった（質問すると嫌そうな感じが電話越しに伝わってくる！）。&lt;/p&gt;&#10;&lt;p&gt;J-COMのインターネットはあまり評判がよろしくなく、エリアによってはひどいものらしいが、私のエリアはあたりだったようだ！&lt;/p&gt;&#10;&lt;p&gt;5ヶ月目→「&lt;a class="link" href="https://hack-le.com/jcominmyroom5/" &gt;J-COM in my room 12Mプラン、5ヶ月目の雑感 – 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;</description></item><item><title>とにかくRaspberry Piにpython3 + numpy + matplotlibをインストールする(pyenv使用)</title><link>https://hack-le.com/rpipython3-stretch/</link><pubDate>Tue, 03 Oct 2017 22:45:28 +0900</pubDate><guid>https://hack-le.com/rpipython3-stretch/</guid><description>&lt;p&gt;Raspberry Piにpython3、numpy、matplotlibをインストールすることを目的とした記事です。OSはRaspbian（GUIなし）。バージョン管理するわけではないのですが、既存のpython2との兼ね合いもあり、pyenvを使います。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="https://hack-le.com/rpipython3/" &gt;旧版&lt;/a&gt;」の記事のやり方で、Stretchだからかエラー出たので改訂しました。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;以下で確認しました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Raspberry Pi 3&lt;/li&gt;&#10;&lt;li&gt;Raspbian Stretch 2017-09-07, GUI環境なし&lt;/li&gt;&#10;&lt;li&gt;pyenv + python 3.6.2 + numpy 1.13.3 + matplotlib 2.0.2&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;現在、標準はpython2です。これを使うやり方は「&lt;a class="link" href="https://hack-le.com/py2nummat/" &gt;とにかくRaspberry Piにpython2 + numpy + matplotlibをインストールする&lt;/a&gt;」を参照。&lt;/p&gt;&#10;&lt;p&gt;今回、python3の環境構築にpyenvを使いますが、筋悪でしょうかね？python2とpython3を共存して使うのには、とても楽だと思うのですが。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;手順は以下です。pyenvのインストールは「&lt;a class="link" href="https://github.com/yyuu/pyenv" target="_blank" rel="noopener"&#10; &gt;GitHub - yyuu/pyenv: Simple Python version management&lt;/a&gt;」を参考に。&lt;/p&gt;&#10;&lt;pre&gt;`# gitがなければインストール&#13; # tigは私の趣味&#13; sudo apt-get install -y git tig&#13; # pythonのインストール&#13; sudo apt-get install -y git libssl-dev libbz2-dev libreadline-dev libsqlite3-dev&#13; git clone https://github.com/yyuu/pyenv.git ~/.pyenv&#13; echo 'export PYENV_ROOT="$HOME/.pyenv"' &gt;&gt; ~/.bashrc&#13; echo 'export PATH="$PYENV_ROOT/bin:$PATH"' &gt;&gt; ~/.bashrc&#13; echo 'eval "$(pyenv init -)"' &gt;&gt; ~/.bashrc&#13; exec $SHELL&#13; pyenv install -l&#13; # 最新のバージョンを調べる. ここでは3.6.2とする&#13; pyenv install 3.6.2&#13; pyenv global 3.6.2&#13; pyenv rehash&#13; python --version&#13; # インストールしたバージョン（ここでは3.5.2） が表示されたらOK&#13; &#13; # numpyおよびmatplotlibをインストール&#13; sudo apt-get install -y pkg-config libjpeg8-dev libfreetype6-dev libffi-dev&#13; pip install --upgrade pip&#13; pip install numpy psutil python-dateutil pytz tornado pyparsing six matplotlib&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;numpyとmatplotlibのインストールは非常に時間がかかります。以上でインストール完了です。&lt;/p&gt;&#10;&lt;h2 id="動作テスト"&gt;動作テスト&#10;&lt;/h2&gt;&lt;p&gt;インストールが正常に行われたか、以下のサンプルスクリプトを実行して確認します。グラフを表示して確認したいところですが、GUI環境なしなので、ファイルにグラフを出力して確認します。&lt;/p&gt;&#10;&lt;pre&gt;`# -*- coding: utf-8 -*-&#13; &#13; import numpy as np&#13; import matplotlib&#13; matplotlib.use("Agg")&#13; import matplotlib.pyplot as plt&#13; &#13; x = np.arange(-np.pi, np.pi, 0.01)&#13; y = np.sin(x)&#13; &#13; plt.plot(x,y)&#13; plt.savefig("test.png")&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;下図のような、正弦波が一つ描かれたグラフtest.pngが生成されたらOKです。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_3833&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="test.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/2016/10/test-300x225.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;test.png[/caption]&lt;/p&gt;</description></item><item><title>Mac miniは五度目の夏も乗り切った</title><link>https://hack-le.com/mini-summer5/</link><pubDate>Sun, 01 Oct 2017 15:22:56 +0900</pubDate><guid>https://hack-le.com/mini-summer5/</guid><description>&lt;p&gt;最近めっきり涼しくなってきた。もう10月、昼間は多少の残暑を感じるが、秋と言ってよいだろう。うちの可愛いMac mini 2012は、どうやら五度目の夏も無事乗り切ってくれたようだ。新型買おうにも3年放置プレイなMac miniである。Appleからのネグレクトがいつまで続くのかもわからないし、頑張ってほしい。壊れさえしなければ、普通の人なら10年パソコン買い替えなくて良い時代になっている。&lt;/p&gt;&#10;&lt;h2 id="cpu温度80度オーバーもざらにあるmac-mini-2012の熱対策"&gt;CPU温度80度オーバーもざらにあるMac mini 2012の熱対策&#10;&lt;/h2&gt;&lt;p&gt;Mac mini 2012はクアッドコアCore i7搭載なのは良いのだが、ちょっとCPUが本気を出すとすぐにCPU温度が80度を超えてしまう。冬場ならば外気が低いからまだしも、夏場は外気も高いしまったく気が休まらない。&lt;/p&gt;&#10;&lt;p&gt;Mac miniの熱問題は多くのユーザーが悩まされているところで、検索すると色々と涙ぐましい努力が見受けられる。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00S78ZJOO&amp;linkId=b0a2ae573cc09803c17ad085dc5971b0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B008KCQG9E&amp;linkId=d502ae264568cb32006dadfbb7822935" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;私もまた、左のような機材を使ってMac miniを冷却しようと頑張っていた。合わせて8,000円くらいする代物。まったく、Mac mini本体よりも周辺機器に金がかかっている。Magic TrackpadにApple Wireless Keyborardも買ってしまったし、他マウス、ディスプレイも何度か新調しているしそれにディスプレイアーム、スピーカー……そう考えると、最初から全部揃っているiMacは、流用するものがない状態であれば、案外リーズナブルなものなのだろう。&#13;&#10;&lt;p&gt;それはさておき、Mac miniの冷却にはそこそこ金をかけているという話である。まずMac miniは縦置きにすると、省スペースのうえに心なしか若干冷えるような気がする。縦置きにしてよいのか？という疑問もあるが、もうかれこれ1年半ほど使えているし、まぁ問題ないのではなかろうか。そして裏蓋を開けて直接ファンを当ててやると、過負荷にしても80度はなんとか超えないくらいで収まってくれる。&lt;/p&gt;&#10;&lt;h2 id="mac-miniの静音性との兼ね合い"&gt;Mac miniの静音性との兼ね合い&#10;&lt;/h2&gt;&lt;p&gt;だがこれには一つ大きな問題がある。&lt;strong&gt;騒音問題である&lt;/strong&gt;。端的に言って、うるさい。当たり前だ、ファンを回しているのだから。しかも小型のファンだからかけっこうな回転をしてくれるので、よけいにブンブンうるさい。&lt;/p&gt;&#10;&lt;p&gt;Mac miniに限らず、Macの良いところの一つに静音性がある。&lt;strong&gt;負荷が一定以下であれば、Macは本当に静か&lt;/strong&gt;なのである。これはカタログスペックからは見えないところだ。昨今のAppleのMac軽視な姿勢を見るたびに乗り換えを考えるのだが、いつもこの静音性の点で乗り換えを考え直す。自作PCで音対策をしようと思えば、それなりに頑張らねばならない。それで結局、Mac miniを使い続けるか……という結論に至ってしまう。&lt;/p&gt;&#10;&lt;p&gt;ファンを回さずに、裏蓋だけ開けておけばどうか、とも考えた。静音性は多少損なわれるが、耐えられないほどではない。ところが、&lt;strong&gt;裏蓋を開けても、エアフローの関係なのか、閉じている時と較べて必ずしも冷却されない&lt;/strong&gt;。外気を取り込むことで、内部クーラーの稼働率が下がってしまい、結果的にCPUがあまり冷えないのだろうか。しかし、蓋を開けているのでそれなりに音はする。ということで、裏蓋を開けるだけは埃と音を呼び寄せるだけの悲しい結果に終わった。&lt;/p&gt;&#10;&lt;p&gt;やはり裏蓋を開けるからには、外部ファンを稼働させなければおいしくない。しかし、Mac miniをデスクの上においている故に、その状態は常用では耐えられないほどうるさい。といって、必要な時だけ裏蓋を開けてファンを稼働させるのは本当に面倒だ。面倒臭い。&lt;/p&gt;&#10;&lt;h2 id="壊れてもいいやと思えば"&gt;壊れてもいいやと思えば&#10;&lt;/h2&gt;&lt;p&gt;……ということで、もう壊れたら壊れたでいいやという考えの元、&lt;strong&gt;今夏は裏蓋を一切開けなかった&lt;/strong&gt;。いいお値段した外部ファンはただの飾りとなってしまった格好だが仕方ない。スクリプトを日がな一日ぶん回しているために、&lt;strong&gt;CPU温度が90度近くに張り付いたまま数日経過&lt;/strong&gt;などということも珍しくなく、どうなることやら……と思っていたが、どうやら乗り切ってくれたらしい。&lt;/p&gt;&#10;&lt;p&gt;正直言うと、もう五年も使っているということもあり、&lt;strong&gt;いっそ故障してしまえば気兼ねなくマシンを新調できるという気持ち&lt;/strong&gt;もないではなかった。既に十分過ぎるほど働いてもらったし、もうそろそろ休んでもらっても良い頃だ。が、まだまだ頑張ってくれるつもりらしい。&lt;/p&gt;&#10;&lt;p&gt;まぁ、それはそれで嬉しいことだ。何しろMac miniは2014モデルになってデュアルコアになってしまったうえ、それから三年も放置されている。時折、Appleから思い出したように「Mac miniは重要な製品だ」などというリップサービスをされるものの、その結果がパワーダウンした新型からの三年放置なので、信頼も何もあったものではない。&lt;/p&gt;&#10;&lt;p&gt;つまり今のMac miniが壊れてしまうと、必然的に別のモデルの購入を検討することになるのだが、これがなかなか悩ましい。ちょうどRyzen旋風でようやくIntelが重い腰を上げたタイミングということもあって、来年になればようやくここ数年しょっぱかったMac（Mac mini含む）のスペックアップがなされるのではないか、という期待もある。&lt;/p&gt;&#10;&lt;h2 id="十年使える時代"&gt;十年使える時代&#10;&lt;/h2&gt;&lt;p&gt;Macの停滞はIntelの停滞でもあったと思うが、致し方ない面もあった。自分の場合はプログラミングなどするので、今でもスペックに拘りがあるが、普通の人にとっては既にスペックは飽和しているのだろうし、AppleとしてはMac miniは特にそういう普通の人たちに売りたいモデルなのだろう（2012以前は、ライトユーザーからパワーユーザーまで取り込む懐の広さがあったのだが…）。&lt;/p&gt;&#10;&lt;p&gt;実際、私の母は、私が2011年に組んだ自作PCを使っていて（OSはUbuntu！「&lt;a class="link" href="https://hack-le.com/linuxmother/" &gt;還暦の母がLinuxマシンを使い始める – 或る阿呆の記&lt;/a&gt;」）、現状何の不便もないらしい。私もMac mini 2012のスペックにさほど不満があるわけではない（まったくないわけではない）。現在大きな不満を抱えていないマシンであれば、十年後もハードウェアのスペック的にはもはや問題がないのではなかろうか。&lt;/p&gt;&#10;&lt;p&gt;壊れさえしなければ、マシンは十年使える時代になったとも言える。そうするとOSのサポートの問題があるので、&lt;strong&gt;いよいよLinuxの時代がくる&lt;/strong&gt;かもしれないななどと、どうせ来ない未来を少し期待する今日この頃である。&lt;/p&gt;</description></item><item><title>iPhone X雑感…確かに凄いが、いったいこれで何するものぞ</title><link>https://hack-le.com/iphonexetc/</link><pubDate>Thu, 14 Sep 2017 03:02:18 +0900</pubDate><guid>https://hack-le.com/iphonexetc/</guid><description>&lt;p&gt;日本時間2017年9月13日、Appleのスペシャルイベントが行われ、新型iPhoneやらなにやらが発表された。だいたい噂通りといったところか。唐突にMac mini取り出したら意外性で各メディアぶっ飛ばせるのに。意外性しかないとも言う。&lt;/p&gt;&#10;&lt;p&gt;購入予定があるわけではないが、今使っているXperia Z3がもしお亡くなりになってしまったら（あまり考えたくないが…）、次はまたiPhoneに戻そうと思っているので、最新機種の動向はやはり気になるところ。…iPhone Xのtouch IDの廃止は、吉と出るか凶と出るか……。しかし、iPhone X 256GB、14万円はさすがに高いなぁ。凄いのはわかるんだが、いったいこれで何をするというのか。&lt;/p&gt;&#10;&lt;h2 id="iphone雑感"&gt;iPhone雑感&#10;&lt;/h2&gt;&lt;p&gt;今回の発表ではApple TVの更新もあったのだが、あまり興味が無いのでiPhoneについて見ていく。Xperia Z3からの買い替え候補だしね。&lt;/p&gt;&#10;&lt;h3 id="touch-idの廃止と顔認証"&gt;touch IDの廃止と顔認証&#10;&lt;/h3&gt;&lt;p&gt;iPhone Xではtouch IDが廃止された。iOSデバイスのtouch IDは非常に気に入っていたので、iPhone Xでの廃止は残念だ。iPhone 8では残っているようだが、iPhone Xはこの先のiPhoneを先取りしているのだろうから、今後は無印のiPhoneでも廃止されるのかもしれない。&lt;/p&gt;&#10;&lt;p&gt;不安は大きいが、Appleが満を持して搭載したからには、きっと実用に足る性能を持っているのだろう。顔認証自体はAndroid端末で既に実装されている機能ではあるものの、その使い勝手には大いに不満があった。これに限らず、iOSデバイスの先進的とされる機能のほとんどはAndroidデバイスではどこかで実装済みであることが多い。だが、機能があるということと、それが使い物になるということは別。機能は先進的ではないかもしれないが、実用的なところがiPhone/iPadの素晴らしいところなので、期待したい。&lt;/p&gt;&#10;&lt;h3 id="58インチベゼルレスホームボタンの廃止"&gt;5.8インチベゼルレス、ホームボタンの廃止&#10;&lt;/h3&gt;&lt;p&gt;iPhone Xはベゼルレスで、筐体の大きさはXperia Z3とそんなに変わらないのに、画面が大きい。5.8インチはいいなぁ。OLED搭載。画面の綺麗さよりは省エネ効果に期待かしら。縦長の解像度も、スマホに向いていると思う。&lt;/p&gt;&#10;&lt;p&gt;ただ、ホームボタンの廃止は……どうだろう、touch ID以上に、吉と出るか凶と出るか。こればかりは、使ってみないとわからなさそうだ。わかりやすくて便利なんだけどな、ホームボタン。&lt;/p&gt;&#10;&lt;h3 id="ワイヤレス充電"&gt;ワイヤレス充電&#10;&lt;/h3&gt;&lt;p&gt;iPhone8/Xでついにワイヤレス充電。今更感がすごいが、iPhoneが採用したことで、これまでどうにもマニアックな機能だった置くだけ充電が一般化されるだろうか。Nexux 7(2013)に実装された時にも期待したものだったが、結局尻すぼみだったものなぁ。一時期Qi対応のデジカメとかも揃えたけど、うまく充電されないとか、充電速度が遅いとか、色々不具合があったものだ……。&lt;/p&gt;&#10;&lt;p&gt;ウリというほどではないと思うが、防水を謳う製品でワイヤレス充電は大事だと思うので、良い機能追加だと思う。&lt;/p&gt;&#10;&lt;p&gt;しかし、本当の遠隔充電が実現する日は来るだろうか。充電できるほどの電磁波飛ばすって非常に恐ろしいが。。。&lt;/p&gt;&#10;&lt;h3 id="やたらすごいプロセッサ"&gt;やたらすごいプロセッサ&#10;&lt;/h3&gt;&lt;p&gt;プロセッサがたいへんなことになっている。iPad Proのマルチコア性能のベンチマークがMacBook Proのそれを超えたという記事を見て複雑な気分になったのはもういつの日か。高効率と高パフォーマンスの組み合わせで6コアってね……&lt;strong&gt;Mac miniにも分けてほしい&lt;/strong&gt;。いったいタブレットやスマートフォンに、そんな高性能なものを乗っけて何をすると言うのか。&lt;/p&gt;&#10;&lt;p&gt;よく言われるように、人工知能やAR時代に向けた準備なのだろう。今現在は、Appleからこれといったアプリケーションは用意されていないようだが、この先を見据えての対応と思う。プレミアムモデルが2,3年で陳腐化するようでは悲しいものな。一般的な使い方に徹すれば、心配せずともハードウェアが数年で陳腐化することはもはやありえないが、このモデルを買う人は先進的な使い方をしたがる人が多かろうし。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、そうでもなければ今でも十分ではある。ついにOSのアップデートから切り捨てられたiPhone 5も、性能的には何も問題がない（画面が割れていなければ！）。私が今使用中のXperia Z3は2014年のモデルだが、これも2017年現在、性能的には問題なく使えている。一般的なアプリやブラウジング用途では、もはや壊れるまで問題なく使える時代になっているのだろう。Appleとしては、その一般的な使い方に人工知能やARを絡ませたいところだろうが、難しかろうな。&lt;/p&gt;&#10;&lt;p&gt;ということで、一言で言うと&lt;strong&gt;未来を先取りしたスペック&lt;/strong&gt;だと思う。しかし、本当にそんな未来は間近に迫っているんだろうか？そうは思えないんだがなぁ。&lt;/p&gt;&#10;&lt;h3 id="お高い"&gt;お高い&#10;&lt;/h3&gt;&lt;p&gt;やはりというかなんというか、プライスは相当なものである。256GBモデルで税込み14万円也とは中々豪気。私の愛機Mac mini 2012は、5年前に6万円で買ったのだが……いや比較にはならないのはわかっているが。当時は円高でやすかったしなぁ。いやそれでも、14万、今だって、通販ならMacBook Proの吊るしが買えるお値段。これはさすがに……。&lt;/p&gt;&#10;&lt;h2 id="買う"&gt;買う？&#10;&lt;/h2&gt;&lt;p&gt;前述したように、このプレミアムモデルは「この先」を視野に入れたモデルという感じで、今現在このモデルを買ったからといって、何か素晴らしいことができるようになるとか、そんなことはないだろう。サードパーティーに頑張ったアプリを作るところは出てきそうだが、まだまだ未知数。&lt;/p&gt;&#10;&lt;p&gt;恐るべきプロセッサ、OLED搭載、（恐らくは実用レベルで高精度・高速な）顔認証、そしてなんと言ってもiOSという安定したソフトウェアと超大で便利なエコシステム、確かに&lt;strong&gt;価格なりのスペックを持っている&lt;/strong&gt;とは思う。だが&lt;strong&gt;そのスペックでできることが価格なりかと言われると、あまりそうも思えない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;けれども、そんならiPhone 8にするかと言うと、ガジェオタ魂が理屈とは別に最高機種を買えと囁く。だいたいiPhone 8も別に安いわけではないしなぁ。といって旧モデルを買うのはつらいつらい。でもどうせ14万使うならMacBook Proが優先だなぁ……。&lt;/p&gt;&#10;&lt;p&gt;うーんつらい。今使っているXperia Z3が壊れないことを祈るばかりだ。最近パフォーマンスに影響が出るレベルで発熱が酷くなってきていて、危ない感じだが……頑張ってほしい。&lt;/p&gt;</description></item><item><title>ADボードUSB-AI16-16EをRaspberry Piで使う</title><link>https://hack-le.com/usb-ai16-ae/</link><pubDate>Tue, 12 Sep 2017 16:49:27 +0900</pubDate><guid>https://hack-le.com/usb-ai16-ae/</guid><description>&lt;p&gt;ACESS社のAD変換ボード、USB-AI16-16E(または16Aでも同じ)をRaspberry Piで使う手順。USB-AI1サンプルプログラムを動かすまで。&lt;/p&gt;&#10;&lt;p&gt;現状、これ以外にRaspberry Piで使えるADボードってあるんだろうか。さんざん探し回って、これしか見つけられていない。&lt;/p&gt;&#10;&lt;h2 id="usb-aiシリーズについて"&gt;USB-AIシリーズについて&#10;&lt;/h2&gt;&lt;p&gt;USB-AIシリーズはACESS社のAD変換ボードである。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://accesio.com/?p=../usb/usb-aio16-16a.html" target="_blank" rel="noopener"&#10; &gt;ACCES - 12 or 16-Bit, 16-Channel, Multifunction Analog Input/Output USB Modules Page&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;USBで使えて、Linuxに対応しているというとても珍しいAD変換ボード。ならば、Raspberry Piでも使える…？と期待。&lt;/p&gt;&#10;&lt;p&gt;量子化ビット数、サンプリング周波数、チャネル数、自動キャリブレーションの有無でバリエーションが存在する。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://accesio.com/?p=../cat/usb.html" target="_blank" rel="noopener"&#10; &gt;ACCES I/O - USB Data Acquisition (DAQ) Boards&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;だいたい量子化ビット数12-16、サンプリング周波数は最大250-500kHz、チャネル数12-16といったところ。もちろん良いものほど高いが、本体は1,000ドルもいかない。初めて使う時は、別途端子台と専用ケーブルも購入しないといけないが、それ含めても1,000ドルいかないはず。この手のAD変換ボードとしてはお値頃ではなかろうか（個人用途にはちょっと厳しいが）。&lt;/p&gt;&#10;&lt;p&gt;今回、USB-AI16-16Eを使う。16ビット、250kHz、16チャネルである。上位版のUSB-AI16-16Aも同様のやり方で使えるようになる。&lt;/p&gt;&#10;&lt;p&gt;スペックはまぁまぁだが、さてこれをRaspberry Piで使えることは可能なのだろうか。README.mdを見ると、Raspberry Piの記述があったので、考慮していないことはないらしい(Beagle Boardの記述まであった)。Mac用の記述もあったが、いざMacで動かそうとしてみたらうまくいかなかった……。&lt;/p&gt;&#10;&lt;p&gt;が、&lt;strong&gt;Raspberry Piでは今のところそこそこ使えている感触&lt;/strong&gt;。本格運用まで至っていないので、安定して使えるかまでは未知数だが……。&lt;/p&gt;&#10;&lt;h2 id="ソフトウェアのインストール"&gt;ソフトウェアのインストール&#10;&lt;/h2&gt;&lt;p&gt;以下の手順で、必要なソフトウェアのインストールをする。ソースコードからコンパイルする必要あり。ソースコードは公式サイトにもあるが、githubで最新のものが公開されており、そちらのほうが新しいので、ここではそれを使う。ディレクトリの作成場所はどこでもよいが、今回はユーザーのホームディレクトリ直下にAIOUSBディレクトリを作成するものとする。&lt;/p&gt;&#10;&lt;pre&gt;`sudo apt-get install libusb-1.0 libusb-1.0-0-dev cmake swig git tig&#13; git clone https://github.com/accesio/AIOUSB&#13; cd AIOUSB/AIOUSB&#13; mkdir build&#13; cd build&#13; cmake ..&#13; make&#13; sudo make install&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="fxloadのインストール"&gt;fxloadのインストール&#10;&lt;/h2&gt;&lt;p&gt;次に、Raspberry PiからUSB-AI16-16Eを動作させるためACCES社によってカスタマイズされたfxloadを以下の手順でコンパイルし、インストールする。ここでは、コンパイルしたソースコードは/usr/local/binに置くものとする。&lt;/p&gt;&#10;&lt;p&gt;fxloadはやはりgithub上に公開されているので、gitで落とす。落とす場所はどこでもよいが、ここでは前節で作成したAIOUSB直下とする。&lt;/p&gt;&#10;&lt;pre&gt;`cd&#13; cd AIOUSB&#13; git clone https://github.com/accesio/fxload&#13; cd fxload&#13; mkdir build&#13; cd build&#13; cmake ..&#13; make&#13; sudo cp fxload /usr/local/bin/&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="デバイスを認識させる"&gt;デバイスを認識させる&#10;&lt;/h2&gt;&lt;p&gt;Raspberry PiでUSB-AI16-16Eを認識させるために、まずudev(Linuxにおける自動認識の仕組み)のルールを追加する。&lt;/p&gt;&#10;&lt;pre&gt;`cd&#13; cd AIOUSB/AIOUSB&#13; sudo mkdir /usr/share/usb&#13; sudo cp Firmware/*.hex /usr/share/usb/&#13; sudo cp Firmware/10-acces* /etc/udev/rules.d/&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;次に、ルールのfxloadのパスを書き換える。デフォルトでは/sbin/fxloadになっているため、前節でインストールしたパス(/usr/local/bin/fxload)に変更する。&lt;/p&gt;&#10;&lt;pre&gt;`sudo sed -i 's#/sbin/fxload#/usr/local/bin/fxload#g' /etc/udev/rules.d/10-acces_usb.rules&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;実行すれば変換されるが、当該ファイル(/etc/udev/rules.d/10-acces_usb.rules)の中身は一度見ておくと良い。&lt;/p&gt;&#10;&lt;p&gt;以上を実行後、Raspberry PiとUSB-AI16-16Eを接続すると認識される。認識されたことを確認するには、デバイスのLEDが点灯していればよい（下図）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5900&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;537&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/09/2017-09-12_16_23_59_jpg.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;点灯確認[/caption]&lt;/p&gt;&#10;&lt;p&gt;色々すごいところに置いているが気にしない。&lt;/p&gt;&#10;&lt;p&gt;これでbulk_acquire_sampleが生成されたので、実行すると、以下のようになる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/09/f71f3028d735cb457621ef1d96a2b100.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;デバイス情報を表示した後、まず16チャネルのシングルショットを行い、次に3.2MB分の連続取得を行っている。250kHzのサンプリング周波数で16チャネルあるので、1チャネルあたり15.625kHz。データはショート型で格納されるため、1秒あたり約500KBのデータ量になる計算。1秒毎にメモリの状態を表示しており、約500KBずつ消費されているのがわかる。で、7秒目にメモリを使い切って終了。&lt;/p&gt;&#10;&lt;p&gt;以上、Raspberry PiでADボードUSB-AI16-16Eの認識からサンプルスクリプトの実行まで完了。&lt;/p&gt;</description></item><item><title>Raspberry Piで無線LANに接続する手順</title><link>https://hack-le.com/rpi-wifi/</link><pubDate>Thu, 07 Sep 2017 16:49:42 +0900</pubDate><guid>https://hack-le.com/rpi-wifi/</guid><description>&lt;p&gt;Raspberry Piで無線LAN（Wi-fi）に接続するための手順。いつも忘れるのでメモ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;今回用いるのはRaspberry Pi 3。Raspberry Pi 3では、無線LANモジュールが内蔵されているのでそのまま使える。Raspberry Pi 2以前では別途ドングルが必要であるものの、認識さえされていれば手順は同じ。&lt;/p&gt;&#10;&lt;p&gt;sshでの接続はできているものとする。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;ざっくりとした手順は以下。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;wpa_passphraseコマンドで雛形を作る&lt;/li&gt;&#10;&lt;li&gt;/etc/wpa_supplicant/wpa_supplicant.conf に雛形を追記&lt;/li&gt;&#10;&lt;li&gt;再起動して確認&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;具体的なコマンド。&lt;/p&gt;&#10;&lt;pre&gt;`wpa_passphrase SSID PASS&#13; sudo nano /etc/wpa_supplicant/wpa_supplicant.conf&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;wpa_passphraseの結果をコピーして、/etc/wpa_supplicant/wpa_supplicant.confにペースト。この時、パスワードも表示されてしまうので、そこは削除しておく。~/.bash_historyに残った分も消したほうがよいかもしれないが、あまり気にしていない。&lt;/p&gt;&#10;&lt;p&gt;テキストエディタを使わず、リダイレクトでも可。管理者権限を伴うので、sudo sh -cやteeコマンドを使う工夫が必要。個人的にはちゃんと確認しつつやりたいのでコピペすることが多い。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;p&gt;参考にさせていただきました「&lt;a class="link" href="http://qiita.com/toshihirock/items/8e7f0887b565defe7989" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi 3を買ってMacを使ってWiFi接続とSSHの接続するまで - Qiita&lt;/a&gt;」&lt;/p&gt;</description></item><item><title>MacBook Pro 13インチ4コア化の可能性はあるのだろうか</title><link>https://hack-le.com/mbp2017/</link><pubDate>Mon, 28 Aug 2017 05:39:28 +0900</pubDate><guid>https://hack-le.com/mbp2017/</guid><description>&lt;p&gt;今ノートパソコンとしてMacBook Air 2013の11インチモデルを使用している。そろそろスペック的にしんどいと思う場面がちょくちょく出てきたので、MacBook Proの13インチモデルの購入を検討している。そんな折、先日のIntelの発表ではUシリーズが4コア化。次のMacBook Pro 13インチはいよいよ4コアでは？という噂もあり、悩ましい。&lt;/p&gt;&#10;&lt;h2 id="macbook-airは良いデバイス"&gt;MacBook Airは良いデバイス&#10;&lt;/h2&gt;&lt;p&gt;MacBook Air 2013の、今は亡き11.6インチモデルを利用している。さすがにメモリ4GBだと昨今つらいこともあるが、2017年今なお現役で使えるPCだと思う。現に、今年（ディスコンされることなく）アップデートされたMacBook Air 2017の13インチモデルも、メモリが8GBになっていること以外、スペック的にさほど大きな差はなかった。&lt;/p&gt;&#10;&lt;p&gt;MacBook Airの11インチモデルがなくなってしまったのは悲しい。Apple的にはMacBookシリーズがあるからいいだろう、ということなのだろうが、最新モデルの市場価格が13万円程度のMacBookを、10万円以下で購入できるMacBook Airの代わりであると提示されても、なかなか乗り換えようと思えるものでもない。数年前からほとんど代わり映えしていないにも関わらず、MacBook Airがいまだに価格コムのMacノート売上不動の一位を堅持し続けているのは、そういうことだろう。AppleとしてはMacBook Airよりも利ざやのあるMacBookやMacBook Proを売りたいはずなので、13インチモデルが残されただけでも良しと考えるべきか。&lt;/p&gt;&#10;&lt;h2 id="買い替えるならmacbook-pro"&gt;買い替えるならMacBook Pro&#10;&lt;/h2&gt;&lt;p&gt;そんな使えるMacBook Airではあるが、使い始めてもう4年、そろそろ買い替えても良い頃だ。しかし、MacBook Airの後継は前述のとおりお寒い状況である。といって、MacBookは機能の割に高過ぎる（ローズゴールドはちょっと欲しい）。どうせ高い金を払うのであれば、多少大きくなってもMacBook Proにしたいところだ。&lt;/p&gt;&#10;&lt;p&gt;購入するなら、13インチモデルのタッチバーなしモデルかな。15インチはさすがにノートパソコンとしては大きすぎる。カバンに入らない。タッチバーはあればあったで便利な面もあるとは思うが、3万円を上乗せするほどの価値があるとは思えない。むしろ、タッチバーに起因するバグがあるのではという不安のほうが大きい。したがって、13インチのタッチバーなしモデルが妥当なところだろう。MacBook Pro 2017、13インチモデル。&lt;/p&gt;&#10;&lt;p&gt;2016年モデルの発売から約半年というスピードアップデートされたMacBook Pro 2017であるが、CPUがSkylakeからKaby Lakeになったことを除いては代わり映えしない。というか、SkylakeとKaby Lake自体言うほどの差がない。&lt;/p&gt;&#10;&lt;p&gt;2017モデルを待っていた人にとっては肩透かしであるし、2016モデルを買った人にとっては面白くないという、2017年のアップデートは、なんともつまらないアップデートだったわけだ。そんなことはAppleとしても百も承知の筈だが、それでもアップデートしたのは、スペック表からは見えないところでの改善点が多いのかもしれないと思っている。特にタッチバー搭載モデルは、発売してから色々と騒ぎがあった。&lt;/p&gt;&#10;&lt;p&gt;MacBook Pro 2017が2016の反省を踏まえたつくりになっているとすれば、まぁ悪くない買い物かな、と思う。&lt;/p&gt;&#10;&lt;h2 id="そろそろ4コアくる"&gt;そろそろ4コアくる？&#10;&lt;/h2&gt;&lt;p&gt;しかし、そろそろ大きなスペックアップがあるかもしれず、そう考えると悩ましい。というのはもちろん、AMDのRyzenだ。Ryzenは長らく停滞が続いていたCPU業界に激震を走らせた。AMDの反撃の狼煙に、Intelもようやく本気を出し始めたようで、動きが見られる。&lt;/p&gt;&#10;&lt;p&gt;先日のIntelの発表では、低消費電力のUシリーズに今までなかった4コアモデルが追加された（参考「&lt;a class="link" href="http://www.itmedia.co.jp/pcuser/articles/1708/21/news080.html" target="_blank" rel="noopener"&#10; &gt;第8世代Coreプロセッサーを発表 最大40％の性能アップ (1/2) - ITmedia PC USER&lt;/a&gt;」）。Coffee LakeではなくKaby Lake Refleshであるらしい。まぁコードネームはなんでもよいが。Ryzenがなければきっと2コアで済ますつもりだったのだろうなぁ。やはり競争は大事である。&lt;/p&gt;&#10;&lt;p&gt;次のMacBook ProでもしこれらのCPUが採用されるのであれば、いよいよ待望の4コア13インチMacノートが誕生することになる。熱問題など不安な点はないでもないが、それでも2コアと4コアの差は大きいだろう。4コアあれば、OSの仮想化など常用してもよいかなとも思える。&lt;/p&gt;&#10;&lt;p&gt;しかし、MacのCPUの採用は一周、なんだったら二週遅れであることも多い。2018年モデルで使われるかどうかはわからない。あと1年くらいなら待ってもいいが、2年以上はなぁ。ちょっとなぁ。&lt;/p&gt;&#10;&lt;p&gt;などと思うと、色々悩ましい。どうしたものか……。まぁでも、しばらくぶりに大きな機能向上が望めるかもしれないと、考えるだけでなんとなく楽しいものだ。&lt;/p&gt;&#10;&lt;p&gt;ついでにMac miniの4コア化も期待したい。Mac mini 2014の竹モデルのCPUが「&lt;a class="link" href="http://ark.intel.com/ja/products/83508/Intel-Core-i5-4278U-Processor-3M-Cache-up-to-3_10-GHz" target="_blank" rel="noopener"&#10; &gt;製品の仕様情報 - Intel® Core™ i5-4278U Processor (3M Cache, up to 3.10 GHz)&lt;/a&gt;」と言われている。これが順当にアップデートされれば……まぁMac miniの場合、まずなんでもいいからアップデートしてくれよという話であるが。。。&lt;/p&gt;</description></item><item><title>MAX10基板とRaspberry PiでGPIO使ったデジタル入出力</title><link>https://hack-le.com/max-rpi-gpio/</link><pubDate>Thu, 10 Aug 2017 15:16:49 +0900</pubDate><guid>https://hack-le.com/max-rpi-gpio/</guid><description>&lt;p&gt;Raspberry Piを補完するものとしてFPGAを使えないかと、ALTERAのMAX10を搭載したCQ出版企画な基板を使ってアレコレしている。なんとかGPIOピンを使ったデジタル入出力はできた。次はSPI通信をしたいところだ。&lt;/p&gt;&#10;&lt;h2 id="参考書2週目"&gt;参考書、2週目&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=478984806X&amp;linkId=34313b1117d076829e36d9d665fb4e90" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;[マルツパッケージ MAX10 FPGA入門基板 好評発売中です | マルツセレクト](http://select.marutsu.co.jp/list/detail.php?id=7)&#13;&#10;&lt;p&gt;主にリアルタイム性の面でRaspberry Piを補完するべくFPGAの勉強を始めたことを先日の記事「&lt;a class="link" href="https://hack-le.com/startmax10/" &gt;MAX10でFPGAを始めた…Raspberry Piを補完したい – 或る阿呆の記&lt;/a&gt;」に書いた。使用しているのはCQ出版の企画もので、基板と教材セットでオールインワンという初心者には有難いもの（けっこうなはんだ付けがいるが…マルツでバラで買うと部品が実装されているものもあるようだ）。&lt;/p&gt;&#10;&lt;p&gt;まずは実際に手を動かしつつ、あまりにもわからないことは飛ばし飛ばしで卒読し、2週目にとりかかった。&lt;strong&gt;参考書は2週目からが本番&lt;/strong&gt;だ。1週目は何もわからぬままとにかく進むという感じであったが、2週目になると曲がりなりにも一度とおした甲斐があり、それなりにわかる。少なくとも中盤のAD変換くらいまではだいたいわかる。そこを超えると、またちょっと壁を感じる。3週目になればわかるだろうか。&lt;/p&gt;&#10;&lt;p&gt;だが、後半はちょっとわかる気がしない。&lt;strong&gt;ビギナー向けといいながら、サンプルがやけに難しいのは世にある入門書の常&lt;/strong&gt;であるが、本書の場合は特に中盤と後半の間に谷があるタイプのようだ。&lt;/p&gt;&#10;&lt;p&gt;Raspberry Piを使ったサンプルは、何故かqtを使ってGUIプログラミングなども織り交ぜられているため、学習すべき内容が多岐に渡り、すぐには手を出しづらい。さらにSPI通信も通常使われるメインのSPI機能モジュールではなく、補助（Auxiliary）周辺機能を使っていて、これは一般によく使われるライブラリWiringPiなどでサポートされていないために、レジスタを直に叩いている（pigpioではサポートされているらしい「&lt;a class="link" href="http://decafish.blog.so-net.ne.jp/2016-10-15" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi用pigpio Library - その1：腰も砕けよ 膝も折れよ：So-net blog&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;私としては兎にも角にもまずはRaspberry Piとの通信を実現したいのである。本書のサンプル内容はやや重い。自分で多少アレンジしてやる必要があるだろう。&lt;/p&gt;&#10;&lt;h2 id="ひとまずgpioでデジタル入出力"&gt;ひとまずGPIOでデジタル入出力&#10;&lt;/h2&gt;&lt;p&gt;書籍の内容を本当に理解していれば、多少手を加えることもできるはず。ということで、本書の7章、つまり一番最初のLチカのプログラムを元に、多少手を加えることにした。&lt;/p&gt;&#10;&lt;p&gt;7章の内容は、フルカラーLEDにR,G,Bをそれぞれ与えてやり、2&lt;em&gt;2&lt;/em&gt;2=8色で点滅させるというものだった。このR,G,Bの出力を外部に引き出し、Raspberry PiのGPIOピンで受けて、LEDのR,G,Bの割合を表示するという、シンプルなものを作ってみた。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5833&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;855&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/08/6ce181226d073af25ce77216adaab265.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;LEDのRGBを表示する[/caption]&lt;/p&gt;&#10;&lt;p&gt;内容的には、7章の内容と、MAX10基板とRaspberry Piのピンアサインを押さえておけばできてしまう内容であるが、では一周目に7章を終えた私にできたかと言えば、厳しかったろう。やはり&lt;strong&gt;とにかく一回最後までやってみる、ということは人間の学習の過程として大事&lt;/strong&gt;である。&lt;/p&gt;&#10;&lt;p&gt;Raspberry PiのGPIOピンを使ったデジタル入力のプログラムは、以前書いた記事「&lt;a class="link" href="https://hack-le.com/44771052-2/" &gt;Raspberry Pi のGPIO経由で入力信号を連続的に取得 – 或る阿呆の記&lt;/a&gt;」の内容。なんでもメモっておくものだ。&lt;/p&gt;&#10;&lt;p&gt;なお、MAX10基板とRaspberry Piの接続には、拡張基板としてマルツで販売されているMAX10-EBを使った。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.marutsu.co.jp/pc/i/598577/" target="_blank" rel="noopener"&#10; &gt;MAX10-EB 拡張ボード MTG-MAX10-EBの通販ならマルツオンライン&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;別に必須というわけではないのだが、半田ジャンパで使うピンをセレクトできるし、見た目にもスマートなので、Raspberry Piと連携させるなら素直に使うと良いと思う。&lt;/p&gt;&#10;&lt;h2 id="更新滞り"&gt;更新滞り&#10;&lt;/h2&gt;&lt;p&gt;ところで、前の更新から一週間以上空いてしまった。書くことがないわけではなかったのだが、ここのところ文章を書く気が起きなかったのだ。雑文でも、文章を書くとはそれなりに神経を使う作業である。文字を打つ（私にとって文字とは書くものではなく打つものである）ことは自分にとって大切なことなので、面倒がらずに続けていきたいのだが…。&lt;/p&gt;</description></item><item><title>MAX10 FPGA入門のためにアレコレ調べている</title><link>https://hack-le.com/max10-begin/</link><pubDate>Wed, 02 Aug 2017 09:36:59 +0900</pubDate><guid>https://hack-le.com/max10-begin/</guid><description>&lt;p&gt;MAX10という、数千円という安価で評価ボードを入手できるFPGAを知り、現在入門中である。FPGA初心者として、MAX10についてまとめておきたい。&lt;/p&gt;&#10;&lt;h2 id="何故fpgaか"&gt;何故FPGAか&#10;&lt;/h2&gt;&lt;p&gt;FPGAはField Programmable Gate Arrayの略で、その名のとおりプログラマブルに、いうなればソフトウェア的にハードウェアの設計ができるようなもの、とざっくり理解している。&lt;/p&gt;&#10;&lt;p&gt;よく比較されるSoC（System on a Chip）やMCU（Micro Controller Unit, マイコン）は、パフォーマンスが最適化できる一方一度作ったらそれっきり。一枚あたりの単価はFPGAより安くなるので、大量生産に向く。&lt;/p&gt;&#10;&lt;p&gt;私がFPGAに興味を持っているのは、リアルタイム処理を行いたいがためだ。Raspberry Piなど安価で高性能なシングルボードコンピュータが発売されて久しく、これらのデバイスを有効に使って、安価かつ小型の計測システムが作れないものだろうかとアレコレしているのだが、計測で問題となるのがADボードである。&lt;/p&gt;&#10;&lt;p&gt;Raspberry Piで使えるようなものはほとんど市場に出回っておらず（ないことはないが…参考「&lt;a class="link" href="https://hack-le.com/startmax10/" &gt;MAX10でFPGAを始めた…Raspberry Piを補完したい – 或る阿呆の記&lt;/a&gt;」）、またGPSモジュールなど各種センサの情報も併せて扱いたいなど考えると、既存のADボードでは中々厳しい。そこで、FPGAが使えないかなぁなどと考えたわけだ。&lt;/p&gt;&#10;&lt;p&gt;そんな折に、安価でかつ1MSa/sのADを備えたMAX10なるFPGAのことを知った。これはやってみるしかない。本当にADとして使えるかどうかは今のところ未知数だが、たとえ当初の目的を果たせずとも、FPGAが使えるようになれば色々と応用もききそうなので、シコシコ勉強している。&lt;/p&gt;&#10;&lt;h2 id="max10の特徴"&gt;MAX10の特徴&#10;&lt;/h2&gt;&lt;p&gt;MAX10については、当然公式でALTERAのページ「&lt;a class="link" href="https://www.altera.co.jp/products/fpga/max-series/max-10/overview.html" target="_blank" rel="noopener"&#10; &gt;MAX® 10 - 概要&lt;/a&gt;」が用意されている。が、わからない人お断りと言わんばかりで、入門者の自分には最初何がどうすごいのかよくわからなかったので、その点を踏まえて自分なりにまとめたい。&lt;/p&gt;&#10;&lt;h3 id="不揮発性フラッシュメモリ搭載"&gt;不揮発性フラッシュメモリ搭載&#10;&lt;/h3&gt;&lt;p&gt;FPGAは電源投入後にコンフィグレーションする必要があり、そのコンフィグレーション情報を記憶できるよう、不揮発性フラッシュメモリがついている。これがないと、ROMを外付けしないといけなくて、それがFPGAの敷居を上げる要員の一つだったようだ。&lt;/p&gt;&#10;&lt;p&gt;ALTERAのページに書いてあった「不揮発性インテグレーションの革命」という謎の革命は、そういう意味であるらしい。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5791&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;522&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/08/4abc2815cce309e6881bb9366983f3b0.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;最初に調べてこのページを見た時は「……？」だった[/caption]&lt;/p&gt;&#10;&lt;h3 id="adコンバータ実装"&gt;ADコンバータ実装&#10;&lt;/h3&gt;&lt;p&gt;個人的にMAX10の購入の決め手だったのは、ADコンバータがついていること。最大1MSa/sで量子化12bit、アナログ入力9ch。&lt;/p&gt;&#10;&lt;h3 id="デュアルコンフィグレーション"&gt;デュアルコンフィグレーション&#10;&lt;/h3&gt;&lt;p&gt;コンフィグレーション情報を2つ記憶できて、どちらを使うのかを選べる。安定版と開発版を分けること等ができる。&lt;/p&gt;&#10;&lt;h3 id="そのほか"&gt;そのほか&#10;&lt;/h3&gt;&lt;p&gt;その他は、電源投入してすぐに使える（インスタント・オン）とかPLL有り（使用には外部に発振器がいる。内蔵発振器はPLLの入力にできない）とかLE（ロジックエレメント）が2k-50k（型番による）とか、18x18乗算器が16-144(型番による）とか。数値がまだピンとこないが、FPGAとして初心者には十分な機能があると思ってよいのだろう。&lt;/p&gt;&#10;&lt;p&gt;開発環境はALTERAの提供するQuartusの無償版で入門者には十分そう。Windows版のみならずLinux版もある。&lt;/p&gt;&#10;&lt;h2 id="max10のキット"&gt;MAX10のキット&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=478984806X&amp;linkId=34313b1117d076829e36d9d665fb4e90" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;MAX10が使える評価ボードは色々あるが、私が現在試しているのは、CQ出版の企画ものらしい実験キットである。マルツと組んでいて、2017年8月現在でも参考書籍、基板共に入手しやすい。&#13;&#10;&lt;p&gt;&lt;a class="link" href="http://select.marutsu.co.jp/list/detail.php?id=7" target="_blank" rel="noopener"&#10; &gt;マルツパッケージ MAX10 FPGA入門基板 好評発売中です | マルツセレクト&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;参考書籍と基板がセットになった、オールインワンキットが一番お手軽そうである。が、マルツでバラで買えば、部品を既に実装しているようなので、バラで買ったほうがよいかもしれない。というのも、表面実装0.8mmピッチで54pinなSDRAMのハンダ付けがあり、これがちょっと難しいので（SDRAMは必ずしも実装する必要ないが）。&lt;/p&gt;&#10;&lt;p&gt;また、コンフィグレーションには通常USB-Blasterなる3万円以上するものが必要だが、この製品ではUSB-Blasterと同等の機能をもたせたUSB-Blaster互換基板がついている。これを動作させるために、PICマイコンに書き込みする必要があるが、書籍でも触れられているとおり、ちょっとハマりどころである。普通のPCなどに繋いでやると、失敗する可能性があるようだ（参考「&lt;a class="link" href="http://nahitafu.cocolog-nifty.com/nahitafu/2016/05/max10-70b8.html" target="_blank" rel="noopener"&#10; &gt;MAX10の付録本を買ったが動かなかった: なひたふJTAG日記&lt;/a&gt;」）。iPhoneの充電器は使える。使えた。&lt;/p&gt;&#10;&lt;p&gt;Raspberry Piとの連携を考えた拡張基板があることも大きなポイント（別売り）。&lt;/p&gt;&#10;&lt;p&gt;このキットで使われているMAX10の型番は、&lt;strong&gt;10M08SAE144C8GES&lt;/strong&gt;。意味は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;10M08…LEは8k&lt;/li&gt;&#10;&lt;li&gt;S…Single Supplay（単一電源）で動作&lt;/li&gt;&#10;&lt;li&gt;A…Analog。ADコンバータ内臓&lt;/li&gt;&#10;&lt;li&gt;E144…パッケージEQFP-144&lt;/li&gt;&#10;&lt;li&gt;C…民生仕様&#10;&lt;ul&gt;&#10;&lt;li&gt;ジャンクション温度摂氏0-85度&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;8…スピードグレード。低速（6が高速、7が中間）。&lt;/li&gt;&#10;&lt;li&gt;G…RoHS6対応&lt;/li&gt;&#10;&lt;li&gt;ES…Engineering Sample。サンプル品。量産品ほどの信頼性はない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;前述のとおり、キットには256Mビット（=32MB）のSDRAMがついている。512Mビットのものも使えるらしい。だがハンダ付けに自信がない人は、おとなしく実装済みのものを購入したほうがよさそうに思う。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただいたサイト。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.altera.co.jp/products/fpga/max-series/max-10/overview.html" target="_blank" rel="noopener"&#10; &gt;MAX® 10 - 概要&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;公式サイト&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://nahitafu.cocolog-nifty.com/nahitafu/2016/05/max10-70b8.html" target="_blank" rel="noopener"&#10; &gt;MAX10の付録本を買ったが動かなかった: なひたふJTAG日記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.altima.jp/column/fpga_edison/max10_DualConf.html" target="_blank" rel="noopener"&#10; &gt;新人エンジニアの赤面ブログ『最新ローコストデバイス MAX 10 FPGA ～Dual Configuration～』&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Ubuntu 14.04 にVNCで入ったら灰色の画面(Grey Screen)になる時の対応</title><link>https://hack-le.com/ubuntu1404-vnc-grey/</link><pubDate>Tue, 01 Aug 2017 14:48:32 +0900</pubDate><guid>https://hack-le.com/ubuntu1404-vnc-grey/</guid><description>&lt;p&gt;Ubuntu 14.04にVNCで入ると灰色の画面になってしまうという問題の対応。~/.vnc/xstartupを編集する。&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;Ubuntu 14.04でVNC Serverを構築し、他PCよりVNCクライアントで入ろうとすると、サーバーに接続してログインすることはできる。しかし、画面に表示されるのは一面の灰色。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5781&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;457&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/08/6ac9cd36d1599a176633cdd014548bf0.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;灰色[/caption]&lt;/p&gt;&#10;&lt;p&gt;なお、使用したクライアントPCはMac。が、クライアント側の問題ではないだろう。&lt;/p&gt;&#10;&lt;p&gt;ログインはできていることから、VNCのインストール手順等には問題ないはず。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="http://onkea.com/ubuntu-vnc-grey-screen/" target="_blank" rel="noopener"&#10; &gt;Ubuntu VNC Grey Screen | onkea eLearning&lt;/a&gt;」によると、これはUbuntuではcommon problemらしい。&lt;/p&gt;&#10;&lt;p&gt;~/.vnc/xstartup を以下のように編集する。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/sh&#13; def&#13; export XKL_XMODMAP_DISABLE=1&#13; unset SESSION_MANAGER&#13; unset DBUS_SESSION_BUS_ADDRESS&#13; &#13; gnome-panel &amp;&#13; gnome-settings-daemon &amp;&#13; metacity &amp;&#13; nautilus &amp;&#13; gnome-terminal &amp;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;その後、VNC Serverにログインすると、今度はきちんと表示された。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>最近またAndroid版Apple Musicの調子が悪い…ダウンロードできない</title><link>https://hack-le.com/android-applemusic-dl/</link><pubDate>Mon, 31 Jul 2017 23:48:41 +0900</pubDate><guid>https://hack-le.com/android-applemusic-dl/</guid><description>&lt;p&gt;またAndroid版Apple Musicの調子が悪くなった。勘弁してほしい。アートワークが表示されない。曲のダウンロードができない。再生はできたりできなかったり。再起動してもダメだし再インストールしてもダメだった。が、キャッシュを削除したら、なんとか繋がった。しばらく不安定だったが、その度にキャッシュ削除を繰り返すうちになんとか安定。愚痴。&lt;/p&gt;&#10;&lt;h2 id="曲をダウンロードできなくなった"&gt;曲をダウンロードできなくなった&#10;&lt;/h2&gt;&lt;p&gt;またか。Android版Apple Musicは、リリースされてしばらくはウンコだったものの、今年4月、バージョン2になってからは随分と良くなったので、だいぶ評価していたのだが、やはりまだまだ不安定らしい。&lt;/p&gt;&#10;&lt;p&gt;今回、急にiTunesライブラリのアートワークが表示されず、かつ曲がダウンロードできなくなった。ある時から突然である。Apple Musicの曲であれば、アートワークは表示されるものの、やはり曲のダウンロードができない。Apple MusicでもiCloudミュージックライブラリでも、ストリーミング再生はできたりできなかったり。&lt;/p&gt;&#10;&lt;p&gt;アプリを再起動したり、サインインしなおしたり、端末を再起動したり、アプリの再インストールまでしたりしたがダメ。色々調べたところ、Appleのサポートページに解決方法は書いてあったようで、「&lt;a class="link" href="https://support.apple.com/ja-jp/HT205366" target="_blank" rel="noopener"&#10; &gt;Android の Apple Music に問題がある場合 - Apple サポート&lt;/a&gt;」に従って、&lt;strong&gt;キャッシュの削除（とついでにデータの削除）を実行したところ、なんとかまたダウンロードが開始されるようになった&lt;/strong&gt;。ああもう。&lt;/p&gt;&#10;&lt;p&gt;が、その後も不安定で、ダウンロードの開始がやけに遅い。開始すれば、曲のダウンロード自体は早いのだが……。また、曲数の多いアルバム（サントラなど）だと、途中でいったんダウンロードが止まるなどして、すべてダウンロードされるのにやけに時間がかかり、とても待ってられずダウンロードをキャンセルしなくてはならないことも（待っていても永遠に始まらなかったのではなかろうか…）。&lt;/p&gt;&#10;&lt;p&gt;ダウンロードをキャンセルできるならまだよくて、場合によってはダウンロードを開始します、から一向に進まず、しかも何故かダウンロード管理画面にも遷移できないので、アプリを再起動しなくてはならないこともあった。不具合が起きる度に、再起動とキャッシュの削除を繰り返し、なんとか今は落ち着いている。何時間も戦う羽目になってしまった。&lt;/p&gt;&#10;&lt;h2 id="大きな大きなapple-musicそしてitunes"&gt;大きな大きなApple MusicそしてiTunes&#10;&lt;/h2&gt;&lt;p&gt;本音を言えば、Apple Musicなんて本当は使いたくないのだ。だが、Androidでは他に選択肢がない。それというのも、Androidの音楽プレーヤーでiTunesの読み仮名対応しているものが、Apple Musicしかないからである。もしあるなら本当に教えて欲しい……。&lt;/p&gt;&#10;&lt;p&gt;別にApple Musicだって、きちんと動いてくれさえすれば問題ないのだが、中々どうして、きちんと動いてくれない。あまりにも色々なことを一つのアプリにやらせすぎているんじゃなかろうか。&lt;/p&gt;&#10;&lt;p&gt;最近MS Windowsの標準ソフト「ペイント」が廃止されるという騒ぎで、それに対する失望の声にMS自身が驚き、存続を決めたというニュースがあった（「&lt;a class="link" href="http://news.livedoor.com/article/detail/13386344/" target="_blank" rel="noopener"&#10; &gt;「MSペイント」廃止の可能性に失望の声 米Microsoftが存続を明言 - ライブドアニュース&lt;/a&gt;」）。MSからすれば、ペイント3Dが旧ペイントの上位互換であり、機能的に何の問題もないという認識なのだろうが、ペイントで必要十分というユーザーも多くいる。その向きからすれば、使わない機能など加えられても有難くなく、むしろUI がわかりづらくなり、安定性も落ちるのではないかという不安しかない。&lt;strong&gt;なんでもかんでも大きく高機能にすればよいというものではない&lt;/strong&gt;と思うのである。&lt;/p&gt;&#10;&lt;p&gt;それにしても、年々使いづらくなっていくと言われ続け、Apple Musicなどというモンスターまで吸収したiTunesだが、それでも今なお使われているのは、色々な意味ですごい。&lt;/p&gt;</description></item><item><title>MAX10でFPGAを始めた…Raspberry Piを補完したい</title><link>https://hack-le.com/startmax10/</link><pubDate>Thu, 27 Jul 2017 23:51:30 +0900</pubDate><guid>https://hack-le.com/startmax10/</guid><description>&lt;p&gt;ALTERAのお値打ちなFPGA、MAX10の実験キットを手に入れた。CQ出版の企画物で、教材と評価基板、取り付け部品込み込みで1万円台のものだ。まだわけもわからずLチカしたりADしたりするだけだが、なんとか使いこなして、Raspberry Piを補完したい。&lt;/p&gt;&#10;&lt;h2 id="raspberry-piはadがつらい"&gt;Raspberry PiはADがつらい&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Piを使っていて困るのは、ADだ。もちろんRaspberry Piで使えるADC自体はたくさん売っている。モータの制御や環境系センサから、一発だけ（あるいはリアルタイム性が必要なく連続的に）データを取得する程度ならばそれで十分だろう。&lt;/p&gt;&#10;&lt;p&gt;しかし、本格的に計測しようとすると、もうすこしちゃんとしたADCが欲しい。ちゃんとしたというのは、基準信号と同期して、正確なタイミングで、高速かつ連続的にデータを取得できるようなものである（できればGPSのPPS信号とNMEAのデータを自動的に取り込んで、クロックの同期と位置・時刻情報をデータに付加してくれるようなのがあるといいんだが…）。&lt;/p&gt;&#10;&lt;p&gt;それくらいのADCになると、たいていはWindowsが必要であったり、PCIeが必要であったりする。Linux対応でかつ、USBという制限がつくと、なかなか見当たらない。&lt;/p&gt;&#10;&lt;p&gt;だいぶ探し回ったが、私が見つけられたものはACCES社のUSB-AIシリーズだけだ（「&lt;a class="link" href="http://accesio.com/?p=../usb/usb-aio16-16a.html" target="_blank" rel="noopener"&#10; &gt;ACCES - 12 or 16-Bit, 16-Channel, Multifunction Analog Input/Output USB Modules Page&lt;/a&gt;」）。スペックにもよるが、端子台などオプション含めて10万円くらい。他になにかあるなら教えてほしい…。&lt;/p&gt;&#10;&lt;p&gt;この製品はLinuxにも対応しており、マニュアルを見るとRaspberry Piでのインストール方法がのっている。会社で購入して使ってみたところ、なんだか色々とエラーが出たが、アレコレいじっていたら、なんとかRaspberry Piでデータを連続的に取得することができた。外部信号をトリガにしてADを開始することもできるので（5Vなのが、3.3V系の多いRaspberry Pi周りだと面倒だが…）、一応計測には使えそうだ。ただ、完全な連続取得はできておらず、現状1分に1回程度、データを吐き出す際に停止している。回避できるのかどうかはよくわからない。まぁそれは本題ではない。&lt;/p&gt;&#10;&lt;h2 id="リアルタイム処理はfpgaで"&gt;リアルタイム処理はFPGAで&#10;&lt;/h2&gt;&lt;p&gt;とにかく、ADはRaspberry Piでは中々の鬼門という話である。ADに限らず、リアルタイム性を要求されるようなものは、LinuxをベースとするRaspberry Piだと中々苦労する。といって、マイコンでは荷が重い。&lt;/p&gt;&#10;&lt;p&gt;FPGAを使えればなぁと思っていたが、中々使う機会がなかった。そんな折、ALTERA社のMAX10を搭載した評価ボードと、その使い方をまとめた、我らがCQ出版のオールインワン・キットを手に入れた。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=478984806X&amp;linkId=34313b1117d076829e36d9d665fb4e90" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;[マルツパッケージ MAX10 FPGA入門基板 好評発売中です | マルツセレクト](http://select.marutsu.co.jp/list/detail.php?id=7)&#13;&#10;&lt;p&gt;まぁまぁのお値段だが、USB-Blaster互換の機能を持った基板もある。USB-Blasterだけで本来ならば4万円近くする（参考「&lt;a class="link" href="http://jp.rs-online.com/web/p/programmable-logic-development-kits/6904093/" target="_blank" rel="noopener"&#10; &gt;PL-USB-BLASTER-RCN | Altera FPGA ケーブル | Altera 【通販RS】」。&lt;/a&gt;互換品はこの数分の1の値段で売っているが…）。USB互換機能の基板と、FPGAとその評価基板、さらに教科書付きならば、安いくらいではなかろうか。さらに、別売りでRaspberry Pi拡張基板もある。Raspberry Piとの連携が考えられているのは大きい。ALTERAの開発環境QuartusがMacに対応していないのはまぁ仕方ない。むしろLinux版があるのに驚いた。&lt;/p&gt;&#10;&lt;p&gt;ということで、最近ずっと勉強している。まだまだ、わけもわからずADして、その値を元にLEDをチカチカさせることしか出来ていない。せっかくなので画像を一つ。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5758&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;805&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/07/0b9d9218cdfe124d549c170f5bda9d1f.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;MAX10評価基板[/caption]&lt;/p&gt;&#10;&lt;p&gt;上画像の上段がUSB-Blaseter互換基板で、下段がMAX10搭載の評価基板である。下段が青く光っているのはフルカラーLEDで、ADで取得した値によって色が変わるようになっている（サンプルどおりである）。モバイルバッテリーが電源代わり。&lt;/p&gt;&#10;&lt;p&gt;付属テキストは600ページの大著だが、1/3まで進んでも出来ることはLチカだけ。先は長い。&lt;/p&gt;&#10;&lt;p&gt;MAX10は1MSa/sという高速なサンプリングが可能であるし、SPIでRaspberry Piと通信できるようだから、GPSモジュールなどとも連携させることで、理想のADCが作れるのではないかと考えている。うまくいくかどうかはわからないが……。&lt;/p&gt;&#10;&lt;p&gt;うまくやれば開発まで漕ぎ着けられないだろうかと考え、シコシコ作業している。自分自身で、売れるようなものを作りたいものだが、道のりは長く険しい。うーむ、頑張ろう。&lt;/p&gt;</description></item><item><title>Pin Plannerでプルアップ抵抗のOn/Off列が見つからない時の対応</title><link>https://hack-le.com/pin-planner-pull-up/</link><pubDate>Wed, 26 Jul 2017 01:11:58 +0900</pubDate><guid>https://hack-le.com/pin-planner-pull-up/</guid><description>&lt;p&gt;Quartus Prime LiteのPin Plannerで、プルアップ抵抗のOn/Offを設定するWeak Pull-Up Resistorsが見つからない時の対応。Customize Columnsより表示する列の変更をする。&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;まず環境。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 7 64bit on OSX 10.11(Parallels Desktop 10)&lt;/li&gt;&#10;&lt;li&gt;Quartus Prime 15.1&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;外部端子への信号アサイン時に、プルアップ抵抗を有効にさせようと、Pin Plannerより設定しようとしたが、プルアップ抵抗の列が見当たらなかった。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://www.altima.jp/members/japanese/download/option_v10_1.pdf" target="_blank" rel="noopener"&#10; &gt;Quartus II はじめてガイド - よく使用するロジック・オプション設定方法 （個別設定）&lt;/a&gt;」より、列の表示項目を編集すればよい。&lt;/p&gt;&#10;&lt;p&gt;右クリック→「Customize Columns」のあと、画像のように操作する。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5749&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;581&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/07/Customize_Columns.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;操作[/caption]&lt;/p&gt;&#10;&lt;p&gt;すると、Weak Pull-Up Resistorの列が追加されている。&lt;/p&gt;&#10;&lt;p&gt;同様に、Available columnsにあるものを追加することができる。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>ALTERAのQsysでHDL生成したら Warning (20028): Parallel compilation is not licensed and has been disabled と警告された時の対応</title><link>https://hack-le.com/qsys-hdl-warning20028/</link><pubDate>Wed, 26 Jul 2017 00:31:55 +0900</pubDate><guid>https://hack-le.com/qsys-hdl-warning20028/</guid><description>&lt;p&gt;ALTERAのQuartus Prime Liteで、QSYSを使ってHDLコードを生成するとき、Warning (20028): Parallel compilation is not licensed and has been disabledという警告が出た。どうやら、TalkBackを有効化させないといけないらしい。&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;まず、環境は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 7 64bit on OSX 10.11(Parallels Desktop 10)&lt;/li&gt;&#10;&lt;li&gt;Quartus Prime Lite 15.1&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Qsysを起動してパラレルI/Oポート（PIO）を追加して、HDLを生成すると、以下の警告。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Warning (20028): Parallel compilation is not licensed and has been disabled&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;HDLコード自体は生成できるが…。しかし、この後いざコンパイルすると、これに起因すると思われるエラーが出てしまいダメだった。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://www.alteraforum.com/forum/showthread.php?t=51530" target="_blank" rel="noopener"&#10; &gt;Prime LITE incorrect license &amp;ldquo;definition&amp;rdquo;&lt;/a&gt;」によると、TalkBackを有効化させる必要があるらしい。&lt;/p&gt;&#10;&lt;p&gt;有効化の手順は以下。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Quartus Primeを起動&lt;/li&gt;&#10;&lt;li&gt;メニューバーより「Tools」→「Options」&lt;/li&gt;&#10;&lt;li&gt;Internet Connectivity&lt;/li&gt;&#10;&lt;li&gt;TalBack Options&lt;/li&gt;&#10;&lt;li&gt;TalkBackをEnable（下図）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5744&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;773&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/07/Quartus_Prime_TalkBack.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;TalkBackを有効化[/caption]&lt;/p&gt;&#10;&lt;p&gt;この後、HDLを生成すると、警告が消える。&lt;/p&gt;&#10;&lt;p&gt;現在CQ出版のMAX10評価基板を使っていじっているのだが、躓いている。Lチカにも苦労。先は長い。&lt;/p&gt;</description></item><item><title>USB-Blasterのドライバーが見つからない時の対応</title><link>https://hack-le.com/usb-blaster-driver/</link><pubDate>Sat, 22 Jul 2017 18:14:25 +0900</pubDate><guid>https://hack-le.com/usb-blaster-driver/</guid><description>&lt;p&gt;最近FPGAに手を出した。ALTERAのMAX10である。早速使おうとUSB-BlasterにてPCと基板を繋いだところ、USB-Blasterのドライバーをインストールしているのにも関わらず、うまく認識してくれない。手動でドライバーのパスを指定してやると、うまくいった。&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;まず環境。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 7 64bit on OSX 10.11(Parallels Desktop 10)&lt;/li&gt;&#10;&lt;li&gt;ALTERA MAX10&lt;/li&gt;&#10;&lt;li&gt;USB Blaster相当の機能を持つ基板&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;特殊な状況かもしれないが。&lt;/p&gt;&#10;&lt;p&gt;まずWindows 7 64bitは、Mac上で仮想化ソフトウェアParallels Desktop 10を使って起動している。FPGAはMAX10で、USB-Blasterは本物ではなく、CQ出版の企画物でUSB-Blaster相当の機能をもたせた基板（下図の上の基板）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5731&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;356&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/07/1725c22068d35b8f63325b6c318bb038.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;USB Blaster相当の機能[/caption]&lt;/p&gt;&#10;&lt;p&gt;これをPCに繋ぎ、デバイスマネージャで確認したところ、USB-Blasterがあるということは認識しているものの、黄色のマークが出ており、ドライバーがないと言われる。もちろんドライバーはQuartusを導入したときに、一緒にインストールしている。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://www.altera.co.jp/support/support-resources/download/drivers/usb-blaster/dri-usb-blaster-vista.html" target="_blank" rel="noopener"&#10; &gt;USB-Blaster Driver for Windows 7 and Windows Vista&lt;/a&gt;」にしたがって、手動でドライバーをあてがう。ここではUSB Blasterの手順に則る。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;USB-Blasterのところを右クリックして、「ドライバー ソフトウェアの更新」&lt;/li&gt;&#10;&lt;li&gt;「コンピューターを参照してドライバー ソフトウェアを検索します」&lt;/li&gt;&#10;&lt;li&gt;次の場所でドライバーソフトウェアを検索します、でパスを指定し、インストールする。私の場合は以下のパス。&#13; C:\altera_lite\15.1\quartus\drivers\usb-blaseter&#13; パスはQuartusのバージョンにより異なる。また、usb-blasterの下層にもフォルダがあるが、それは指定しない。「サブフォルダーも検索する」にはチェックを入れる&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;これでOK。デバイスマネージャを確認すると、認識されている。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5732&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;288&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/07/44e81c771291bd78c809f7a756e4870e.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;USB-Blasterが認識されている[/caption]&lt;/p&gt;&#10;&lt;p&gt;Quartus Prime Programmerでも認識されていることを確認。OK。&lt;/p&gt;</description></item><item><title>Mac mini に31.5インチディスプレイ。iMacよりもでかいのだ</title><link>https://hack-le.com/315-display/</link><pubDate>Wed, 19 Jul 2017 00:43:32 +0900</pubDate><guid>https://hack-le.com/315-display/</guid><description>&lt;p&gt;Appleからのネグレクトぶりを見ると、多くのMacユーザーはデスクトップマシンにiMacを選んでいるのだろうと思われるが、私はMac mini 2012を愛用している。これの良いところの一つは、ディスプレイを自分で選べることである。&lt;/p&gt;&#10;&lt;p&gt;張り切って購入した29インチのウルトラワイドディスプレイを3ヶ月で破損させてしまってから半年。性懲りもなくまたディスプレイを買ってしまった。今度は解像度2560x1440、サイズにして31.5インチの大型ディスプレイである。&lt;strong&gt;iMacよりもでかいのだ！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="mac-mini拡張計画"&gt;Mac mini拡張計画&#10;&lt;/h2&gt;&lt;p&gt;初めて購入したMacはMacBook Air 2010。それがあまりに勝手がよかったものだから、デスクトップもMacにしようと思い、Mac mini 2012を購入して早5年。Ivy BridgeとはいえクアッドコアのCore i7ならば今でも十分使えるものなので、性能的には問題ないものの、現状で問題ないところが問題だなどとわけのわからない理由でマシンを新調しがちな私が、こんなに長く使い続けるとは思わなかった。&lt;/p&gt;&#10;&lt;p&gt;これというのも、メモリやストレージを簡単に換装できるようになっているからだ。たったそれだけの拡張性でも随分と違うものだ。マシンを新調したくてウズウズしてきたら、適当に中身を入れ替えればひとまずおさまる（「&lt;a class="link" href="https://hack-le.com/45906616-2/" &gt;500GBクラスのSSDを購入 – 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;だいたい半年毎にこの病は発症する。そして今回はディスプレイである。&lt;/p&gt;&#10;&lt;h2 id="懲りずに大画面ディスプレイimacよりでかい"&gt;懲りずに大画面ディスプレイ。iMacよりでかい&#10;&lt;/h2&gt;&lt;p&gt;実はディスプレイは去年も購入した。LGの29インチのウルトラワイドディスプレイである……そして3ヶ月で壊した（「&lt;a class="link" href="https://hack-le.com/ultrawidemacmini/" &gt;Mac mini 2012 + ウルトラワイド液晶ディスプレイとその使用感 – 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;あの時は本当にショックだった。未練がましく、もう使えないディスプレイを部屋の片隅にずっと置いていた。とても邪魔だった。心の整理がついて、捨てられるまでに三ヶ月を要した。私は小さい男である。&lt;/p&gt;&#10;&lt;p&gt;その経験があるので、ディスプレイの購入はちょっと躊躇われたのだが……性懲りもなくまた買ってしまった。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B06XFLGSC9&amp;linkId=be610073f0111068c9ea90a18dde1a17" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B014YOZHA0&amp;linkId=e871df73f8a1f93faf984e8f185926bf" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;今回購入したのがこの、前回買ったウルトラワイドディスプレイの上をいく、解像度2560x1440にして31.5インチという大画面、AcerのEB321HQUBbmidphxである。Acerのディスプレイを購入したのは10年ぶりだ。この価格帯で2560x1440、さらに31.5インチというのは他にない。&#13;&#10;&lt;p&gt;それとケーブル。Mac miniでフルHDを超える解像度を出力するには、Thunderbolt 2のポートからDisplay Portに繋がなくてはならない。まぁケーブルは、前にウルトラワイドディスプレイを購入した時のものの使い回しなのであるが……。………。&lt;/p&gt;&#10;&lt;p&gt;それにしても、でかい。圧巻である。Retinaでこそないものの、iMacよりも大きい。あまりに大きいので、&lt;strong&gt;ディスプレイの台にMac miniが縦置きで乗る&lt;/strong&gt;（縦置き用のスタンドがいるが）。&lt;strong&gt;もはやiMac超えではないのか&lt;/strong&gt;、などと考えて一人悦に浸っている。&lt;/p&gt;&#10;&lt;p&gt;せっかくなので写真を撮ってみたが……。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5716&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;585&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/07/5bcc5e7f24a6cc50807c30b5bb89df04.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;大きさがいまいち伝わらない。ディスプレイ裏にMac miniがある[/caption]&lt;/p&gt;&#10;&lt;p&gt;大きさの比較のために、31.5インチディスプレイとこれまでに使っていた23インチディスプレイを並べて見たが、&lt;strong&gt;遠近感のせいなのかイマイチ大きさが伝わらない&lt;/strong&gt;。学生時代、美術で2をとったことを思い出した。なんとなく茶目っ気を出そうと思って、23インチディスプレイには、Fire TV Stickを挿して、今Amazonプライムビデオで楽しませてもらっている勇者ヨシヒコを映してみたが、私という人間の阿呆ぶりが露呈されているようでなんだかなぁという感じで、何かやるせなくなってきたが、といって撮り直そうという気もしないのであった。&lt;/p&gt;&#10;&lt;p&gt;まぁとにかくMac miniはディスプレイも選べて実に楽しいという話。今夏で五度目の夏だけれど、なんとか乗り切ってほしいものだ。乗り切れなかったらどうしようか……。Appleが素晴らしい新型を出してくれたら何の問題もないのだけれど…期待しないほうが、いいのだろうね。&lt;/p&gt;</description></item><item><title>iPad Pro + Apple Pencilが滑らか過ぎて欲しくなったけれどAirで我慢</title><link>https://hack-le.com/ipadpro129/</link><pubDate>Thu, 13 Jul 2017 00:14:04 +0900</pubDate><guid>https://hack-le.com/ipadpro129/</guid><description>&lt;p&gt;次姉が先日新しくなったiPad Pro 12.9インチ + Apple Pencilを購入した。珍しく家に寄っていかないかというから何かと思ったら、さんざっぱら自慢されてしまった。羨ましい。とても欲しくなってしまったが、私にはiPad Air 2があるし、これとスタイラスペンの組み合わせだって捨てたものではない。&lt;/p&gt;&#10;&lt;h2 id="ipad-pro--apple-pencil"&gt;iPad Pro + Apple Pencil&#10;&lt;/h2&gt;&lt;p&gt;iPad Pro + Apple Pencilの組み合わせが思っていたよりもだいぶよかった。本当に滑らかで、まるで紙に鉛筆で書いているようだった…いや、Undo, Redoや色も自由自在で、他コンピュータとのやりとりの親和性もあるのだから、もはや紙を超えているか。&lt;/p&gt;&#10;&lt;p&gt;次姉がiPad Pro 12.9インチをついに購入したらしく、それをさんざっぱら自慢されてしまったのだが、これが確かに良かったのだ。以前店頭で旧モデルのものを触った時には、むしろ「想像よりもよろしくないな？」と思ったのだが、その時とはまるで違う。&lt;/p&gt;&#10;&lt;p&gt;アレがたまたまよくないものだったのか、それともニューモデルがパワーアップしたということなのかはわからないが、少なくとも、次姉の持つiPad Pro + Apple Pencilは抜群の書き味で、私の物欲を大いにそそった。&lt;/p&gt;&#10;&lt;h2 id="使えると使いやすいの隔たり"&gt;「使える」と「使いやすい」の隔たり&#10;&lt;/h2&gt;&lt;p&gt;お絵描きが趣味の次姉は大きな液晶タブレットを持っているが、最近はPCを起動するのが億劫で離れていたらしい。しかし、iPad Proを購入してから、また描くようになったらしい。曰く「&lt;strong&gt;これならベッドで寝ながらでも描ける&lt;/strong&gt;しね」とのことで、なるほどそういうことは非常に大事だと思う。&lt;/p&gt;&#10;&lt;p&gt;電子書籍についても、PCさえあればいくらでも読むことは可能なのだが、ではPCで電子書籍を読むかと言えば、あまり読まない。少なくとも私は読まない。適切なサイズと使い勝手のデバイスがあるからこそ、電子書籍を読もうと思える。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;「使える」ことと「使いやすい」ことには大きな隔たりがある&lt;/strong&gt;。「PCさえあれば全部できるのだからスマホもタブもいらない」という人はこの2017年にもいるが、多くの用途において、必ずしもPCが適切なデバイスとは限らない。適材適所というやつだ。&lt;/p&gt;&#10;&lt;h2 id="メモに使う程度ならばairでも"&gt;メモに使う程度ならばAirでも&#10;&lt;/h2&gt;&lt;p&gt;では私にとってiPad Proが適切なデバイスかというと、それは微妙なところである。次姉と違い&lt;strong&gt;私の絵心はいわゆる画伯レベル&lt;/strong&gt;だ。次姉のように達者な絵が描けるわけでもないので、少なくとも絵描きの用途において、10万円以上するiPad Proなど私には猫に小判、豚に真珠。贅沢な代物。&lt;/p&gt;&#10;&lt;p&gt;絵は描かないが、&lt;strong&gt;仕事でiPad Air 2 + スタイラスペンを使ってメモ書きをすることは多い&lt;/strong&gt;。メモと言っても走り書きの適当なものではなく、たとえば試験時にやったことを、後で参照し、再現できる程度に細かく色々なことを書いている。以前は紙のノートに書いていたのだけれど、後々資料としてまとめるときに、わざわざ写真を取って加工しアップロードするなどの一手間をかけていた。それが億劫で、iPadを使いメモを取るようになったのである。&lt;/p&gt;&#10;&lt;p&gt;その程度の用途においては、現状のiPad Air 2 + スタイラスペンでも決して悪くない。iPad Pro + Apple Pencilにはとてもかなわないと思ったけれど、少なくともその組み合わせの半分、いや1/3程度の値段であることを思えば、悪くないどころかこれが&amp;quot;適切&amp;quot;ではないかと思う。&lt;/p&gt;&#10;&lt;p&gt;…などと考えて我慢しているが、元より大型タブレットを長年渇望していた私なので（「&lt;a class="link" href="https://hack-le.com/44729540-2/" &gt;12インチ以上の大型のAndroidタブレットが欲しい – 或る阿呆の記&lt;/a&gt;」）、そのうちにiPad Pro 12.9インチは買ってしまいそうだ。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01EM7RVLC&amp;linkId=19ea2b5ebb6bc6f345f735fab93b0d2a" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;ちなみに、私がiPad Air 2使っているスタイラスペンはこれ。ADONIT PIXEL。Bluetooth対応でパームリジェクション機能付き。パームリジェクションは本格的に使おうとすると誤作動が多いが、ちょっと使う程度ならば良い具合に機能してくれる。メモアプリはGood Notes。アプリ大事。</description></item><item><title>Kindle Fire 7 タブレットを購入。想像以上に使い勝手が良い</title><link>https://hack-le.com/fire7/</link><pubDate>Mon, 03 Jul 2017 01:08:30 +0900</pubDate><guid>https://hack-le.com/fire7/</guid><description>&lt;p&gt;先日、Kindle Fire 7タブレットを購入した。目的は読書用である。他にKindle PaperwhiteやiPadなども持っているが、安価で読書専用に使えるタブレット端末もあったほうがよいと考え、Kindle Fire 7を買った。また板が増えてしまった。いざ使ってみると、想像以上に使い勝手がよく、5,000円程度で手に入る代物とは思えない。&lt;/p&gt;&#10;&lt;h2 id="読書用に"&gt;読書用に&#10;&lt;/h2&gt;&lt;p&gt;先日Kindle Fire 7のタブレットを購入した。プライム会員であれば、特典クーポンを使って5,000円という破格の価格で買える。Amazonのコンテンツを楽しむのに最適化されており、素のAndroidではなく、用途は限られる。逆に言うと、用途を限ってしまえばそこそこ使える端末である。&lt;strong&gt;私の場合は読書&lt;/strong&gt;だ。&lt;/p&gt;&#10;&lt;p&gt;私は既に複数のスマートフォンや電子リーダ、タブレットを持っている。Kindle Paperwhiteのほか、9.7インチのiPad Air 2、10.5インチのAndroidタブレットKALOS 2、5.2インチのXperia Z3。これらを使って電子書籍を読書することはもちろんできる。&lt;/p&gt;&#10;&lt;p&gt;しかし、Kindle PaperwhiteはKindleストア本以外の自炊ファイルが使いづらい（使えないことはないが…）。モノクロの制約もある。10インチクラスのiPadやKALOS 2は大判の技術書には良いが、小説を読むのには大きすぎる（参考「&lt;a class="link" href="https://hack-le.com/40261398-2/" &gt;iPadではなかなか小説を読もうという気にならない&lt;/a&gt;」）。Xperia Z3は小説程度は読めるものの、現物でそれなりの大きさの本を長時間じっくり読むのには不向きだし、なによりスマートフォンは何かと使用していることが多いので、読書端末としては微妙だ。&lt;/p&gt;&#10;&lt;p&gt;それで結局、えいやと買ってしまった。実は以前、同じ7インチクラスのタブレットであるNexux 7も所持していたがあまり使わなかったということがあったのだけれど、あの頃はまだまだハードウェアは熟れておらず、レスポンス等に不満があった。私自身もタブレットを使いこなす環境を整えられていなかった。今は電子書籍での読書のために、NASにある自炊本をストリーミングで読めるように環境を整えている（外出先からでもアクセスできるようにと、OpenVPNサーバーまでたてた「&lt;a class="link" href="https://hack-le.com/rpiopenvpn/" &gt;Raspberry PiをOpenVPNサーバーにした…とても簡単で有難い&lt;/a&gt;」）。今ならば、きっと有効に使えるはずだ。&lt;/p&gt;&#10;&lt;h2 id="想像以上の使い勝手"&gt;想像以上の使い勝手&#10;&lt;/h2&gt;&lt;p&gt;Amazonプライム会員なので、お急ぎ便で購入の翌日に届いた（田舎なので当日に届くことはまずない）。開封して早速使ってみると、これが思っていたよりもサクサクと動くので驚いた。&lt;strong&gt;Webブラウジングはあまり期待していなかったのだけれど、問題なくできる&lt;/strong&gt;。ただ、解像度は7インチで600x1024と決してよくはないので、文字は若干滲んでいる。&lt;/p&gt;&#10;&lt;p&gt;とはいえ&lt;strong&gt;想像以上に良好なレスポンスである&lt;/strong&gt;。まったくもってストレスフリーだ。&lt;/p&gt;&#10;&lt;p&gt;OSの制限で、そのままではGoogle Playストアを使うことができないという大きな問題があるが、これを導入する方法も確立されている。私は「&lt;a class="link" href="http://omolite.webcrow.jp/fire/google_play/" target="_blank" rel="noopener"&#10; &gt;root取得不要で簡単にFireタブレットでGoogle Playを動かす方法&lt;/a&gt;」の記事を参考にさせていただいた。この記事のとおりにやって、無事に問題なくGoogle Playストアを動かすことができた。ありがたい。&lt;/p&gt;&#10;&lt;p&gt;といっても、Fireタブレットを通常のAndroid端末のように使うのはやはり筋悪とも思う。私の場合は、ごく限られた用途でかつ、Google Playストアにしかないアプリが使いたかったので、Google Playストアを導入したが、素のAndroidのように使いたいのであれば、通常のAndroidタブレットを買うべきだと思う。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01J90PKEM&amp;linkId=c4a2697e259947d28df57c98afd36eed" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;7インチはやはり5-6インチクラスに比べるとやや重く、片手で長時間持てるようなものではないが、ほとんどの本を読むことができる大きさで、そこそこ使っている。このタブレットが、プライム会員ならば5,000円程度で手に入れることができるのには驚くほかない。Amazonは本当に凄い…。</description></item><item><title>結局Parallels Desktopのアップグレードは見送った</title><link>https://hack-le.com/parallels-desktop10up12/</link><pubDate>Thu, 29 Jun 2017 01:10:27 +0900</pubDate><guid>https://hack-le.com/parallels-desktop10up12/</guid><description>&lt;p&gt;現在Parallels Desktop 10を持っている。最後かもしれないアップグレードのセールチャンスが先日あったが（25%OFF）（参考「&lt;a class="link" href="https://hack-le.com/parallels-desktop12/" &gt;Parallels Desktopを買うタイミングが悩ましい&lt;/a&gt;」）、結局アップグレードしなかった。金銭的な問題というより、OSをアップグレードさせる気が当面しないことと、Windowsを使い続けないといけないのか？という自問自答の末だったように思う。&lt;/p&gt;&#10;&lt;h2 id="現状で別に困っていない"&gt;現状で別に困っていない&#10;&lt;/h2&gt;&lt;p&gt;私は確かにWindowsから100%離れられているわけではない。ホビー用途では時折思い出したようにWindows用のゲームをすることがあるし、仕事でもWindowsにしか対応していないソフトウェアを使わなくてはいけないこともある。しかし、それは決して高頻度というわけではなく、この一年間で仮想化ソフト上でWindowsを起動したことはそう多くはない。今の構成はMac mini 2012 + OSX 10.11 + Parallels Desktop 10 + Windows 7であるが、これで特に何も困っていない。&lt;/p&gt;&#10;&lt;h2 id="sierraに上げる気がない"&gt;Sierraに上げる気がない&#10;&lt;/h2&gt;&lt;p&gt;OSのアップグレードもする気がない。Sierraに何も魅力も感じない。むしろデメリットのほうが多いと感じる。触らなければ判断もできまいと考えて、MacBook AirにはSierraを入れているが、別に便利になったことはなく、Karabinerが未だ未対応であること等不利益のほうが現状多い。&lt;/p&gt;&#10;&lt;p&gt;そのうちに、Sierra以上でないと使えないサービスやソフトウェアなども増えてくるのだろうし、さすがにそうなれば乗り換えざるを得ないのであるけれど、そうなるのはまだまだ先のことだろう。&lt;/p&gt;&#10;&lt;p&gt;また、Sierraの次のHigh Sierraはファイルシステムの変更がある。不具合が起きる可能性は高いだろう。&lt;/p&gt;&#10;&lt;p&gt;などと考えていると、私がOSをアップグレードさせるのは随分先のことになるだろうなと思う。使用しているMac miniが壊れるほうが先かもしれない。何しろ今夏で五度目の夏だ。日がな一日スクリプトをぶん回し、CPUの平熱が70-80度くらいだったりするのに、実によくもってくれている。中身はSATAとはいえ500GBのSSDを含んだFusion Driveと16GBのメモリ、CPUもIvy BridgeとはいえCore i7のクアッドコア、性能は十分だ（あの頃のMacは良かった…）。今年も乗り切ってくれると期待したい。&lt;/p&gt;&#10;&lt;h2 id="windowsを使い続けようとも思っていない"&gt;Windowsを使い続けようとも思っていない&#10;&lt;/h2&gt;&lt;p&gt;もっとも、Macを現状で使い続けるとしても、Windows 7のサポート期限が2020年1月なのだから、どんなに頑張ってもそこがタイムリミットとなる（さすがにその頃にはmacOSのアップグレードをしていると思うが……）。&lt;/p&gt;&#10;&lt;p&gt;だが、いまだWindowsから離れられていないとはいえ、個人用途では着実にWindowsから離れられつつある。今後、何万円もだしてWindowsを買う日が来るとは今のところ思えない。もしどうしてもWindowsが必要ということであれば、それはもう仕事なのだから、経費で買うのが筋だろう。&lt;/p&gt;&#10;&lt;h2 id="なんだかお寒い"&gt;なんだかお寒い&#10;&lt;/h2&gt;&lt;p&gt;ということで、金銭的にどうこうというよりは、本当に自分はこのソフトを使いたいのかという自問自答の末に、結局買わなかったという感じだ。この決定には、WindowsのみならずMacの停滞も絡んでいる。どちらかでもアップグレードしていれば、Parallels Desktopもアップグレードさせざるを得ないからだ。&lt;/p&gt;&#10;&lt;p&gt;私にとって現状は、まったくワクワクのないお寒い状況なのだなと思う。現状維持で十分なんて結論を下したいわけではなかったのだが。それでも昔ならば、興味本位でアップグレードさせていたように思うから、私自身が歳を取ったということでもあるか。なんとも、なんとも……。&lt;/p&gt;</description></item><item><title>Parallels Desktopを買うタイミングが悩ましい</title><link>https://hack-le.com/parallels-desktop12/</link><pubDate>Thu, 22 Jun 2017 14:55:56 +0900</pubDate><guid>https://hack-le.com/parallels-desktop12/</guid><description>&lt;p&gt;Parallels DesktopはMacユーザー御用達の仮想化ソフトである。通常版は8500円、アップグレード版は5300円だが、しょっちゅうセールしているので、その時を狙って買うのが経済的に優しい。ちょうど今も、11周年バースデーセールで25%OFF。素数の年を祝うのは珍しいが、要はセールの口実になればなんでもよいのだろう。したがって、今は年に何度か訪れる買い時の一つだ。しかしそろそろバージョンアップも行われるだろうしなどと思うと、中々悩ましい。Windowsを動かすことは多くはないしなぁ。&lt;/p&gt;&#10;&lt;p&gt;（追記）結局見送った「&lt;a class="link" href="https://hack-le.com/parallels-desktop10up12/" &gt;結局Parallels Desktopのアップグレードは見送った&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="windowsが必要なこともある"&gt;Windowsが必要なこともある&#10;&lt;/h2&gt;&lt;p&gt;2017年、最近はWebブラウザさえあればたいていのことはできるし、また各種サービスや周辺機器がMacにも対応してくれることが多くなった。だが、まだまだWindowsが必要な作業は残っているものだ。私の場合は、電子工作で使うようなモジュールや、測定器の開発環境を使うために、時折Windowsを起動する必要がある。&lt;/p&gt;&#10;&lt;p&gt;たまにWindowsを使うためだけにPCを用意するのは大仰なので、Mac上で仮想化ソフトを動かして使う。一応Windowsのマシンも所持してはいるが、いわゆる2in1というやつで、スペックがあまりよくない。あくまでホビー用途である。それに、Mac上で動かすほうが操作性やら何やらがネイティブよりもむしろ良いとも感じる。&lt;/p&gt;&#10;&lt;h2 id="parallels-desktopを使っている"&gt;Parallels Desktopを使っている&#10;&lt;/h2&gt;&lt;p&gt;仮想化ソフトでは無償のVIrtualBoxなどもあり、Macにも対応しているのだが、一般的には有償のVMware FusionかParallels Desktopを使っている人が多いようだ。どうせWindows自体が高いのだから、仮想化ソフト代を節約するよりは使いやすいものを使おうということだろうか。私も、LinuxはともかくWindowsをVirtualBoxで動かそうという気にはならない。&lt;/p&gt;&#10;&lt;p&gt;私が使っているのはParallels Desktopで、確か大昔、体験版で一通り比較した時にグラフィックがVMware Fusionよりちゃんと動いたからという理由だったと記憶している。といっても、私はたまにWindowsを使うことがある程度なので、VMware Fusionでも問題はないだろうと思う。ライセンスの制限のことなどを考えると、むしろVMware Fusionのほうがよいかもしれない。Parallels Desktopは1台のみだが、VMware Fusionは複数台インストールしてよいことになっており、複数台のMacを持つ身としては非常に有難い。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、私のMacBook AirでOSの仮想化はちょっとばかり荷が重いので、別に仮想化ソフトをインストールしたいとも思わず、馴染みのあるParallels Desktopからわざわざ乗り換えようというほどではない。&lt;/p&gt;&#10;&lt;h2 id="アップグレード版の買い時ではあるが"&gt;アップグレード版の買い時ではあるが…&#10;&lt;/h2&gt;&lt;p&gt;現在Parallels Desktopのバージョンは12。私が使っているのはバージョン10。このバージョンはSierraをサポートしていない。そろそろアップグレードを考えないといけないだろう。ちょうど11周年バースデーセールとやらで、通常5,300円のところ25%OFFの3,975円となっている。&lt;strong&gt;バンドルセールとかいう使わないソフトの抱き合わせセールより有難い&lt;/strong&gt;（と言いつつ昔それでついてきた1Passwordをいまだに使っているが…）。買い時というやつである。&lt;/p&gt;&#10;&lt;p&gt;しかし、私のメインデスクトップマシンであるMac miniはいまだEl Capitanであるし、また当面アップグレードさせる予定はない。もしアップグレードさせるとすれば、もう少し待って、一気に先日発表されたHigh Sierraにしてしまう気がする。&lt;/p&gt;&#10;&lt;p&gt;恐らく、バージョン12が正式にサポートするのはHigh Sierraまでであろう。そうすると、今買ってしまうと、来年の秋に出るであろうmacOSの新バージョンへの乗り換え検討時にこのソフトの存在が足枷となってしまう。&lt;/p&gt;&#10;&lt;p&gt;今さら新しいOSを一刻も早く試したいと思うわけではない。だがMacの買い替え時期などとかぶると、有無を言わさず新OSになる。その頃どうなっているかはわからないが、2018年の秋〜冬にHigh Sierraの次のOSを早速使っている可能性はそれなりにあるだろう。となると、この時期にアップグレードさせるのはなんとも微妙である。&lt;/p&gt;&#10;&lt;p&gt;だが、アップグレード版を購入できるのは2つ前のバージョンまで。つまり、例年夏頃に新バージョンが発売されることを思うと、アップグレード版をセール価格で購入できる最後のチャンスかもしれない（来月もなにかしてそうな気もするが）。Parallels Desktopの値付けは絶妙で、アップグレード2年おきと通常版3年おきで年単位の価格があまり変わらない。つまり、アップグレード版を2年おきに買うほうがよいということだ。&lt;/p&gt;&#10;&lt;p&gt;（追記）…と思っていたのだけれど、あれから、なんだかいつまでたってもアップグレード版の宣伝が毎年くる。ということは、まだまだ使える……のだろうか、よくわからない。&lt;/p&gt;&#10;&lt;p&gt;ただし、通常版については40%オフという大幅な割引がなされることもあり、それを見計らってバージョン13を購入できれば、そちらのほうがリーズナブルである。&lt;/p&gt;&#10;&lt;p&gt;……などと考えだすと非常に悩ましいのであるが、せいぜい1,000円2,000円の話であるし、必要なソフトなのだから、グダグダ考えていないでアップグレードせいよと思うが、それでも心定まらない小市民の私であった。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、Parallels DesktopにはPro Editionという年払いのサブスクリプションプランもあり、こちらは今買うと（アップグレードに限り）永続的に60%オフ（10,000円/年→3,975円/年）という内容だが、私の用途では必要ないので除外。というか、さすにがここまで値を下げられると最初の値付けがおかしいのでは？と思えてならぬ。&lt;/p&gt;</description></item><item><title>WithingsのActivité、二年間で電池交換4回、謎のトラブルも</title><link>https://hack-le.com/activite-2years/</link><pubDate>Fri, 16 Jun 2017 02:41:23 +0900</pubDate><guid>https://hack-le.com/activite-2years/</guid><description>&lt;p&gt;WithingsのActivitéを使っている。アナログ時計にしか見えないのに、実はBLE搭載のスマートウォッチというところが気に入った。使い始めてちょうど2年ほど。つい先日、時計が止まっていたと思ったら電池交換の時期だった。これで四度目。八ヶ月の電池持ちの触れ込みなので、ちょっと多いが、これは（恐らく）システム的なトラブルを電池切れと誤認したケースが混じっているから。時計として安定しているとは言い難い。&lt;/p&gt;&#10;&lt;h2 id="四度目の電池交換"&gt;四度目の電池交換&#10;&lt;/h2&gt;&lt;p&gt;WithingsのActivitéを購入したのは2015年5月のこと。それから2016年6月までに、計4回の電池交換をすることになった。つまり電池1つあたりで平均六ヶ月だが、仕様では八ヶ月なのでちょっと短い。&lt;/p&gt;&#10;&lt;p&gt;が、これは消費電力が大きいからではない。恐らく、電池持ちは仕様通り8ヶ月である。問題はトラブルが多いことだ。そして、電池切れではないのに電池切れだと思って電池交換をしたために、平均すると電池持ちが短いという結果になってしまっている。&lt;/p&gt;&#10;&lt;p&gt;参考として、これまでに起きたトラブルの記事を確認する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;「&lt;a class="link" href="https://hack-le.com/45797691-2/" &gt;Withings Activité の電池を交換。時計がずれると思っていたら…&lt;/a&gt;」2015年10月、2016年6月に電池交換&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/activitecal/" &gt;「Withings Activitéの時刻がずれると思ったら針がずれていた&lt;/a&gt;」…2016年10月に電池交換&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hack-le.com/activitestop/" &gt;「Withings Activitéが止まったが、電池を入れ替えたらまた動き出した&lt;/a&gt;」）…この時は電池を出し、また元通りに入れ直すとなおった&lt;/li&gt;&#10;&lt;li&gt;「&lt;a class="link" href="https://hack-le.com/activite-matatomaru/" &gt;Withings Activitéがまた止まったが、一晩たったら治った謎&lt;/a&gt;」&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;2016年10月に2回記事を書いている。針ずれと突然の停止時の記事である。針ずれの時に電池交換をしているが、先の電池交換が6月で、4ヶ月しか経っていないことを考えると、電池切れだったとは考えづらい。針ずれの二週間後にもまたトラブルが起きて、Activitéが止まってしまったが、この時は電池を入れ替えるのではなく、同じ電池を&amp;quot;入れ直す&amp;quot;だけで症状が治っている。これは明らかに電池切れではない。&lt;/p&gt;&#10;&lt;p&gt;さらにその3ヶ月後、またまたActivitéが止まってしまった。この時は、何もせずに一晩放置するとなおった。&lt;/p&gt;&#10;&lt;p&gt;そしてそれから数ヶ月、2016年6月頭、Withingsが突然止まったが、これは時期的に電池切れと思う。2015年10月に入れ替えた電池が、公称通り約8ヶ月もったということだ。しかし、最初と2回目の電池切れでは、止まるのではなく&amp;quot;針が遅れる&amp;quot;という症状だったのだが……。&lt;/p&gt;&#10;&lt;p&gt;これまでのトラブルを振り返ると、電池切れだけではない、ソフトウェア的なトラブルが何度かあった、と考えざるを得ない。電池を交換するのではなく、入れ直すだけでなおったのは、システムがリセットされた結果ではないだろうか。一晩経って治ったケースは謎だが……。&lt;/p&gt;&#10;&lt;h2 id="安定はしていない"&gt;安定はしていない&#10;&lt;/h2&gt;&lt;p&gt;いずれにせよ言えることは、時計として見た時、お世辞にも安定しているとは言い難いことだ。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00V5PSM1S&amp;linkId=a5352a50e8f8a853ee2dbc5b0d7fdc17" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;久しぶりにAmazonを見ると、以前は高評価だったのにいつのまにか平均評価3という微妙なレートになっている。だが実際には真ん中の評価をする人はほとんどいない。高評価する者と低評価するものが拮抗しているのだ。そして以前は高評価であったことを考えると、残念ながら時間が経過するに連れて低評価を下す人が増えたということだろう。&#13;&#10;&lt;p&gt;それは製品の安定性とサポートに起因する。時計としては安定性に欠けるのは私自身の経験からしてもそう思う。私の場合は幸いなんとかなっているが、なんともならない場合、市場価格が5万円もするだけに、反発も大きい。&lt;/p&gt;&#10;&lt;p&gt;まぁ商品のジャンルが一応時計であるので、こういうガジェットに不得手な人が手にとってしまったというケースもあろう（なまじっか見た目がアナログ時計なだけに）。だが時計としては不安定でも、ガジェットとしてはまぁこんなものかとも思ってしまうのである。とはいえこの品質では、iPhoneがケータイを置き換えたように、スマートウォッチが従来の時計を置き換えることはないであろう。&lt;/p&gt;&#10;&lt;h2 id="気に入ってはいる"&gt;気に入ってはいる&#10;&lt;/h2&gt;&lt;p&gt;愚痴っぽい記事になってしまったが、シャレた外観であることには違いなく、なんだかんだ言って気に入ってはいる。私のような人間が、見た目にもシックなアナログ時計をしていることには意外性があるようで、興味を示されることもちょくちょくある。そんなとき、これスマートウォッチだよと言うと、皆驚いてくれるのがとても愉快だ。&lt;/p&gt;&#10;&lt;p&gt;少なくとも当分、私の左腕はActivitéに捧げ続けるだろう。ただ、次のApple Watchがもし本当に血糖値が測れて、かつ実用に耐える遠距離充電を実現すれば、その時は買い替えてしまうかもなぁ……（「&lt;a class="link" href="http://iphone-mania.jp/news-167700/" target="_blank" rel="noopener"&#10; &gt;次世代Apple Watchの血糖値モニタリング機能、着々と開発が進む - iPhone Mania&lt;/a&gt;」）。&lt;/p&gt;</description></item><item><title>Raspberry Piでも使いやすいGPSモジュールNEO6Mの基板で10-100kHzのPPS信号</title><link>https://hack-le.com/rpi-10kpps/</link><pubDate>Thu, 15 Jun 2017 17:41:55 +0900</pubDate><guid>https://hack-le.com/rpi-10kpps/</guid><description>&lt;p&gt;久しぶりにRaspberry Piをいじっている。今までRaspberry PiでGPSを使うときはAdafruitのUltimate GPSを使っていたのだが、これだとPPS信号が1Hzしか出せない。が、色々調べているとu-bloxシリーズのGPSならば、安価な上に1Hz以外のPPS信号を知り、今回実際に使ってみて、10kHzと100kHzを確認した。&lt;/p&gt;&#10;&lt;h2 id="raspberry-piで使いやすいとは"&gt;Raspberry Piで使いやすいとは&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Piで使いやすいGPSモジュールとは、冷静に考えるとよくわからない表現だが、つまり以下のような条件を揃えたGPSモジュールだと考えている。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;シリアル通信によりNMEA等で情報が得られる&lt;/li&gt;&#10;&lt;li&gt;PPS信号をGPIOピンで取り込める&lt;/li&gt;&#10;&lt;li&gt;Raspberry Piを電源の供給元として使える&lt;/li&gt;&#10;&lt;li&gt;小型&lt;/li&gt;&#10;&lt;li&gt;安い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Windows専用のドライバやソフトウェアなしで常用できるものと言えるかもしれない。以上の条件を満たすものとして、AdafruitのUltimate GPSを使っていた（「&lt;a class="link" href="https://hack-le.com/45528250-2/" &gt;Raspberry Pi にGPSモジュールをつけてStratum 0で時刻同期(スタンドアロン)&lt;/a&gt;」）。これはこれで便利だったのだが、色々調べていると、これよりも安価で、かつ1Hz以外のPPS信号が出せるu-bloxシリーズの存在を知った（PPS信号については「&lt;a class="link" href="https://hack-le.com/whatispps/" &gt;GPSでよくみるPPS信号とはなにか&lt;/a&gt;」）。このモジュールは設定の変更にはWindowsが必要なのだが、一度変更すればその設定が保たれるので、それくらいならばまぁよいだろう。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="http://seppina.cocolog-nifty.com/blog/2016/01/gpsneo6m-ant-4p.html" target="_blank" rel="noopener"&#10; &gt;GPS受信モジュールNEO6M-ANT-4Pはまじおすすめ、現在在庫数 76: セッピーナの趣味の天文計算&lt;/a&gt;」の記事はたいへん参考になった。大元のNEO-6Mは、データシート（「&lt;a class="link" href="http://aitendo3.sakura.ne.jp/aitendo_data/product_img/gps/NEO6/NEO-6_DataSheet_%28GPS.G6-HW-09005%29.pdf" target="_blank" rel="noopener"&#10; &gt;NEO-6_DataSheet_(GPS.G6-HW-09005).pdf&lt;/a&gt;」）によるとPPSがTimepulseと表現され、1kHzまでとなっているのだが、実際にはそれ以上の信号が設定できて、かつ使えるものであるらしい。個人的にはとても有用な機能だ。&lt;/p&gt;&#10;&lt;p&gt;問題は使いやすさだが、この基板は外付けアンテナを接続しやすく、シリアル通信のpinが2.54mmピッチとアマチュアにも優しい仕様である。ただ、PPS信号を取り出すところだけはややたいへんだ。細かいハンダ付けが必要になる。糸ハンダと細いコテ先があったほうがよい。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B012A8DIUI&amp;linkId=a7772786bb00a8454ca1ee0e7fca6f51" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00MQHLEPA&amp;linkId=c9345995ea8e6065b0b76348a9d56969" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;左側が今回購入したものである。右側は今回購入しなかったが、こちらはPPS信号も2.54mmのピンヘッダから取り出せる仕様なので迷った。もちろんピンヘッダから取り出せるほうが使い勝手がよい、が、値段がちょっと高い（比較すればだが…）。&#13;&#10;&lt;h2 id="使用感"&gt;使用感&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00ISMZMX2&amp;linkId=f6344819b749d91dec3257587715bf87" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;実際の使用については、トランジスタ技術2016年2月号の記事を大いに参考にさせてもらった。トランジスタ技術2016年2月号は、GPSモジュールを使ってアレコレしたい人には非常に有用な内容なので、是非入手することをお勧めする。見るたびに中古価格が微妙に値上がりしているので、買うならなるべく早めに入手しておいたほうがよいだろう（そろそろトラ技を電子で売ってもらえないだろうか…Interfaceはいつのまにか売られていたが…「[Tech Village 書庫＆販売 - エレクトロニクス分野の電子書籍販売サイト ／ CQ出版株式会社](http://cc.cqpub.co.jp/lib/)」）。&#13;&#10;&lt;p&gt;さて、今回の目的は1Hz以上のPPS信号を得ることである。初期設定では1Hzなので、設定の変更をしなくてはいけない。設定の変更には、残念ながら（？）Windowsのソフトu-centerが必要である。「&lt;a class="link" href="https://www.u-blox.com/ja/product/u-center-windows" target="_blank" rel="noopener"&#10; &gt;u-center Windows | u-blox&lt;/a&gt;」からダウンロードすることができる。&lt;/p&gt;&#10;&lt;p&gt;GPSモジュール基板とPCの接続には、USB-シリアル変換基板ないしケーブルを挟む必要がある。トラ技の記事ではUSB-シリアル変換基板を用いていたが、PCとシリアル通信するだけならば、個人的にはUSB-TTLケーブルを使うのが一番簡便ではなかろうかと思う。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00K7YYFNM&amp;linkId=aec9095a151a5167cff1dee1b2fde11d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;左の製品がその一例で、赤5V、黒GND、緑Tx(3.3V)、白Rx(3.3V)となっている。とはいえ、普通のケーブルではないので、変換基板を用意しておいたほうが使いやすいのはそうだろう。&#13;&#10;&lt;p&gt;接続したら、ソフトウェアを起動して設定を変更する。手順の詳細はトラ技を読むのが一番だが、ざっくりと箇条書きでまとめておく。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;「Receiver」→「Port」でポートの設定&lt;/li&gt;&#10;&lt;li&gt;「View」→「Sky View」で衛星捕捉状況の確認&lt;/li&gt;&#10;&lt;li&gt;「View」→「Configulation View」→「TP5」で周波数の変更&lt;/li&gt;&#10;&lt;li&gt;Frequency 10000Hz&lt;/li&gt;&#10;&lt;li&gt;Duty Cycle 50%&lt;/li&gt;&#10;&lt;li&gt;Freqency Locked, Duty Lockedを念のため合わせる&lt;/li&gt;&#10;&lt;li&gt;Send&lt;/li&gt;&#10;&lt;li&gt;「Receiver」→「Action」→「Save Config」でEEPROMに書き込み&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;EEPROMに書き込んだ後は、電源を落としても設定を忘れずにいてくれる。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5574&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;416&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/06/rpi.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;相変わらず見せる気の感じられない写真[/caption]&lt;/p&gt;&#10;&lt;p&gt;画像は実際に使っている時のものである。右側がGPSモジュール基板。やかましい青色が、PPS信号によるLEDで、最初の設定では毎秒点滅していたのが、10kHzの設定にすると点灯状態になる。&lt;/p&gt;&#10;&lt;p&gt;とはいえ点灯だけではなんともわからないので（だいたい20Hzくらいから人の目ではわからなくなる）、LED前の抵抗から線を引き出して、手元にあったミニオシロのDSO nanoで見たところ、たしかに10kHzの矩形波が見られた。後日、100kHzをDS203で見たところ、若干髭があったが、でるようだ。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5947&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;800&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/06/c41b6be788a6e6c7693847543715840b.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;100kHz[/caption]&lt;/p&gt;&#10;&lt;p&gt;とりあえず使えそう。&lt;/p&gt;</description></item><item><title>WWDC2017雑感：ハードもソフトも</title><link>https://hack-le.com/wwdc2017/</link><pubDate>Wed, 07 Jun 2017 00:09:12 +0900</pubDate><guid>https://hack-le.com/wwdc2017/</guid><description>&lt;p&gt;年に一度のお祭WWDCが終わった。&lt;strong&gt;3年放置のminiがやっぱりスルーなのは規定事項&lt;/strong&gt;として、ハードウェアが全般刷新。一番の大物はiMac Proだろうが、影響が大きいのは他Macのマイナーアップデートだろう。ソフトの発表も割と盛りだくさんで、なんのかんのいって去年のリズムに乗れないWWDCよりだいぶよかったのではなかろうか（「&lt;a class="link" href="https://hack-le.com/47784903-2/" &gt;WWDC 2016雑感：macOSに名称変更。リズムに乗れない会場になんとなく安心&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="macとか"&gt;Macとか&#10;&lt;/h2&gt;&lt;p&gt;気になったところをいくつか。WWDCの本旨はソフトウェアとはいえ、やはり一番盛り上がるのはハードウェア。&lt;/p&gt;&#10;&lt;h3 id="5000ドルのimac-pro拡張性なさげ"&gt;5000ドル〜のiMac Pro（拡張性なさげ）&#10;&lt;/h3&gt;&lt;p&gt;今回の一番の目玉はやはりXeon搭載iMac Proだろう（Apple的にはSiriを推したいかもしれないが、音声アシスタント分野はAmazonやGoogleに遅れを取っている。ついでにいうと個人的に興味が持てない…）。Xeon搭載、128GBのECCメモリ。最大18コアとはもう笑うしかない。スペースグレーはカッコいいな。RadeonでVRにも対応するスペック。発熱が気になる。&lt;/p&gt;&#10;&lt;p&gt;ただ、方向性的にはここ数年のApple的で、メモリの拡張性さえないらしい（「&lt;a class="link" href="https://9to5mac.com/2017/06/05/imac-pro-ram-and-space-gray-accessories/" target="_blank" rel="noopener"&#10; &gt;Apple says iMac Pro RAM won’t be user replaceable, Space Gray accessories not sold separately | 9to5Mac&lt;/a&gt;」「&lt;a class="link" href="http://taisy0.com/2017/06/06/83699.html" target="_blank" rel="noopener"&#10; &gt;｢iMac Pro｣はメモリを自分で交換出来ない仕様らしい | 気になる、記になる…&lt;/a&gt;」）。つまり最初に盛る必要があるのだが、このクラスのものを求める人だとなんだかんだいって100万になってしまうような気がする。&lt;/p&gt;&#10;&lt;p&gt;MacBook Proならともかく、デスクトップ、それもハイエンドのプロユースでこのスタンスは、大きく間違えていると思えてならない。Mac Proは失敗を認めて再設計されることが示唆されているし、このiMac Proが今の方向の終点であってほしい。あるいは、iMacとmini、Proで別系統の進化をしてほしい。&lt;/p&gt;&#10;&lt;h3 id="マイナーアップデートされたmacたち"&gt;マイナーアップデートされたMacたち&#10;&lt;/h3&gt;&lt;p&gt;話題を集めるのはiMac Proにしても、実際に影響を受ける人が多いのはその他Macの刷新だろう。CPUはKabyLakeに置き換えられた。MacBookのCPUCore Mではなくi5やi7がオプションで選択できるようになったのは大きな驚き。いけるの？後はお値段さえもう少し熟れてくれれば…。メモリ16GBまで対応も素敵。&lt;/p&gt;&#10;&lt;p&gt;MacBookProは半年というスピード更新となったが、あまり変わり映えしない。タッチバーなし13インチが200ドルほど値下げされたが、今回円安レートが適用されたので（というより前のレートが為替に比して謎に円高だった）結果的には値上がりという罠。タッチバーなしの15インチが出ていたら暴れた人多かっただろうけれど、さすがにそれはなかった。2016買った人もこれならまぁいいかと思ったのではなかろうか。第3世代iPadを掴まされた身からするとどうってことない。逆に、2017を待ってた向きには肩透かしである。&lt;/p&gt;&#10;&lt;p&gt;自分が正にそうで、MacBook Air 2013をそろそろリプレースしたいと思っていたが、これだとだいぶ悩ましい。そういえばMacBook Airも地味にプロセッサがアップデートされるようで、ディスコンディスコンと言われながらもしぶとく生き残っている。Macノートのエントリーモデルポジションということなんだろうか。&lt;/p&gt;&#10;&lt;p&gt;個人的に一番気になるのは、Proではない普通のiMacたち（「&lt;a class="link" href="http://japanese.engadget.com/2017/06/05/imac-7-core-i/" target="_blank" rel="noopener"&#10; &gt;速報：新iMac発表。ディスプレイ輝度向上、第7世代Core i、最大メモリ拡大など - Engadget 日本版&lt;/a&gt;」）。従来のUSBポートが残っているようで有難い。さらにThunderbolt 3に対応したことから、iMacを外部ディスプレイとして使うターゲットティスプレイモードに対応していることが期待される（追記：ダメだった！なんてことだ「&lt;a class="link" href="http://iphone-mania.jp/news-172108/" target="_blank" rel="noopener"&#10; &gt;iMacのターゲットディスプレイモード、今後も復活の予定はなし - iPhone Mania&lt;/a&gt;」）。あとは、27インチのメモリ拡張性が残されていれば（追記：こちらはできるようだ。有難い。参考「&lt;a class="link" href="https://corriente.top/post-43176/" target="_blank" rel="noopener"&#10; &gt;【レビュー】新型「iMac, 5K 27-inch (2017)」をチェック 「Kaby Lake」プロセッサと「USB-C/Thuderbolt 3」が搭載されてパワーアップ | CoRRiENTE.top&lt;/a&gt;」）。今のMac mini 2012が壊れた時、まだ来週が来なかったら（非常にありうる）iMacも検討しないといけないし、また当分手を付けられないのだろうから、今回のアップデートは重要である。&lt;/p&gt;&#10;&lt;h3 id="macos-high-sierra"&gt;macOS High Sierra&#10;&lt;/h3&gt;&lt;p&gt;この名前は予想外。マイナーチェンジっぽい名前だし、順番的にもそうだと思うのだけれど、ファイルシステムの変更があるらしいので波乱の予感。大丈夫だろうか。あとはVR対応だが、今のところ自分には関係のはない話である。興味はあっても中々手を出す資金も時間もないものだ。&lt;/p&gt;&#10;&lt;p&gt;それ以前にメインのMac miniはいまだEl Capitan。対応していないソフトも多く、あまりアップグレードしたくないのが本音である。&lt;/p&gt;&#10;&lt;h3 id="mac-miniはまた来週"&gt;Mac miniはまた来週&#10;&lt;/h3&gt;&lt;p&gt;ほとんどのMacが刷新される中、絶賛放置プレイ続行中のMac miniに来週は来るのか。どうしても希望を捨てられない。私のMac mini 2012は、五度目の夏を無事に乗り切れるだろうか…。&lt;/p&gt;&#10;&lt;h2 id="ipadとか"&gt;iPadとか&#10;&lt;/h2&gt;&lt;p&gt;ここのところあまり目立っていなかったが、今回は久しぶりに大きく取り上げられた模様。&lt;/p&gt;&#10;&lt;h3 id="ipad-pro512gb"&gt;iPad Pro、512GB&#10;&lt;/h3&gt;&lt;p&gt;10.5インチと12.9インチが発売。恐るべきスペックだが、タブレットはどこまでいってもタブレットである。でも欲しい。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;512GBのストレージが圧倒的&lt;/strong&gt;。ストレージはいくらあっても困ることはない。もっとも、それだけのお値段にはなってしまうが。&lt;/p&gt;&#10;&lt;h3 id="ios-11"&gt;iOS 11&#10;&lt;/h3&gt;&lt;p&gt;「&lt;a class="link" href="http://mobilelaby.com/blog-entry-ios-11-change-new-feature.html" target="_blank" rel="noopener"&#10; &gt;「iOS 11」の新機能と変更点まとめ｜携帯総合研究所&lt;/a&gt;」がとてもよくまとまっている。iPad向けの&lt;strong&gt;Dockとマルチタスク&lt;/strong&gt;が個人的にインパクトある。そしてついに、OS標準の&lt;strong&gt;ファイラ&lt;/strong&gt;が。これらは確かにiPadの使い勝手をよくするものだろう。まぁどれもいまさらといえばいまさらなのであるが。&lt;/p&gt;&#10;&lt;h2 id="全体的に"&gt;全体的に&#10;&lt;/h2&gt;&lt;p&gt;去年色々とやるせない思いをしたうえに翌日寝坊するという憂き目を見たので、今年はリアルタイム視聴はしなかったのだけれど、全体的に去年よりもだいぶ楽しそうなWWDCであったようだ。ハードウェアの発表があったばかりでなく、マルチタスクなどiOS 11の機能にも楽しみなものがあった。&lt;/p&gt;&#10;&lt;p&gt;iMac Proは凄いとは思うけれど、欲しいとは思わない。ここ数年のApple的進化の究極系だろう。まぁ実際に買うとなれば普通のiMac 27インチあたりだろうし、これは順当なアップデートであったようなので、後はメモリの拡張性が潰されていないことを祈るばかりだが、できれば再設計されるMac Proや、一応忘れられてはいないらしいMac miniに期待したいところだ。&lt;/p&gt;</description></item><item><title>KiCad 4.0.6でSW_PUSHのシンボルがすぐに見つけられなかったメモ</title><link>https://hack-le.com/sw_push/</link><pubDate>Tue, 30 May 2017 23:15:02 +0900</pubDate><guid>https://hack-le.com/sw_push/</guid><description>&lt;p&gt;最近、プリント基板を楽に作りたくて、PCB CADに手を出し始めた。オープンソースのKiCadを使うことにしたのだが、サンプル回路でよく見るプッシュスイッチSW_PUSHのシンボルが、すぐに見つけられなかったのでメモ。deviceライブラリになかった…。&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;まず、環境は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;OSX 10.11&lt;/li&gt;&#10;&lt;li&gt;KiCad 4.0.6&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;KiCadを使うならMacはあまり推奨されないらしいが、とりあえず今のところ不都合がないので使っている（といっても、まだほとんど使いこなせていないが…）。&lt;/p&gt;&#10;&lt;p&gt;今回困ったのは、手始めに参考書にのっていた回路図をそのまま作ってみようとしたところ、参考書ではdeviceライブラリにあると書いてあったプッシュスイッチのシンボルSW_PUSHがなかったこと。&lt;/p&gt;&#10;&lt;p&gt;もしかしてMacだから？と思ったけれど、Windows版で試しても同様であった。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="https://forum.kicad.info/t/switch-footprints-exist-just-no-schematic-symbols/5336" target="_blank" rel="noopener"&#10; &gt;Switch Footprints exist, just no Schematic Symbols - Layout / Footprints - KiCad.info Forums&lt;/a&gt;」より、&lt;strong&gt;switches.lib&lt;/strong&gt;をライブラリコンポーネント（「設定」→「ライブラリコンポーネント」）で追加してロードすればよい。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5485&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;535&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/05/switches.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;switchesを追加[/caption]&lt;/p&gt;&#10;&lt;p&gt;switches.libは、Mac版では通常/Library/Application Support/kicad/library下にある。&lt;/p&gt;&#10;&lt;p&gt;追加した後は、SW_PUSHなどの汎用的なスイッチのシンボルを無事見つけることができた。&lt;/p&gt;&#10;&lt;p&gt;ネットで入門者向けのページを見ていると、だいたいどこもSW_PUSHはdeviceにあるとあったのだが、どこかのバージョンで変わったのだろうか。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4789849279&amp;linkId=e63c5df7497f7757c9d79e286795783b" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;なお、私が参考にしている参考書はこれ。一人で始めるプリント基板作り。一人で始められるらしいので……。入門者向けにしてはサンプル回路がややゴツいので、先に「[KiCadで雑に基板を作る チュートリアル](https://www.slideshare.net/soburi/kicad-53622272)」で感じを掴んだほうがよいかなと思う。</description></item><item><title>ナイトシフトは使ってみると確かに目に優しい感じがする</title><link>https://hack-le.com/nightshift/</link><pubDate>Sun, 28 May 2017 10:52:17 +0900</pubDate><guid>https://hack-le.com/nightshift/</guid><description>&lt;p&gt;iOS 9.3より、ディスプレイのブルーライトを減らすナイトシフトが実装された。もう1年以上前のことだが、何分関心がなかったので、気にせずにいたのだが、最近ふとiPadで試しに使ってみたところ、確かに目に優しい感じがする。思ったより画面も綺麗だ。これはよい。&lt;/p&gt;&#10;&lt;h2 id="ブルーライトについて"&gt;ブルーライトについて&#10;&lt;/h2&gt;&lt;p&gt;いつ頃からか、&lt;strong&gt;ブルーライト&lt;/strong&gt;という言葉をよく聞くようになった。ブルーライトとは、その名の通り青い光である。人が感知できる光、可視光の波長はおおよそ400-800nm（ナノメートル、1nmは1mの10億分の1）とされており、波長によって色が異なる。可視光のうち、もっとも波長が短いものが青色の光だ。&lt;/p&gt;&#10;&lt;p&gt;波長と周波数は反比例の関係にあるので、波長が短ければそれだけ周波数が高い。そしてエネルギーは周波数に比例する（波長に反比例する）ので、可視光の中でも青色の光はエネルギーが高い。つまり、それだけ人体への影響も大きい……という理屈であるらしい。&lt;/p&gt;&#10;&lt;p&gt;青色の光よりさらに波長が短いものがUltra VioletであるところのUV、すなわち紫外線で、長時間浴びると肌をボロボロにさせるほど強いものであるが（オシャレとかではなく、健康のために男性も紫外線は気にしたほうがよい…まぁそもそも外に出なければ関係の話ではあるが）、紫外線は網膜まで届かない（参考「&lt;a class="link" href="http://blue-light.biz/about_bluelight/" target="_blank" rel="noopener"&#10; &gt;ブルーライトとは | ブルーライト研究&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;それで、夜間にブルーライトをカットする流れができたらしい。&lt;/p&gt;&#10;&lt;h2 id="本当に目に優しいのか"&gt;本当に目に優しいのか&#10;&lt;/h2&gt;&lt;p&gt;しかし、自分は元々眼精疲労に実感がなく、KindleやKoboといったE-ink端末を持っているものの、別に目に優しいと感じることもなかった。なので、ブルーライトの話は聞くものの、関心がなく、iOS 9.3にナイトシフトモードが実装されてから一年以上、一度もオンにしなかったのである。&lt;/p&gt;&#10;&lt;p&gt;が、ここ何ヶ月か慢性的な不眠、というより睡眠のリズムが整わない日が続き、いい加減疲労が溜まっていた。原因を調べると魔法の言葉ストレスで説明されていることも多いが、そればかりはどうにもならない。が、もう少し直接的な原因として、やはり睡眠時にまでタブレットをいじっているガジェット中毒の自分の行動もあるだろうと思った。&lt;/p&gt;&#10;&lt;p&gt;タブレットを見ないのが一番ではあるが、それができれば苦労しない。そんな折に目についたのが、iPadのナイトシフトである。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5472&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;452&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/05/2017-05-28_10_32_50_png.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;ナイトシフト[/caption]&lt;/p&gt;&#10;&lt;p&gt;そういえばナイトシフトなんてものもあった。ものは試しにやってみるか、とオンにしたところ、&lt;strong&gt;画面全体がじんわりと暖色&lt;/strong&gt;になった。なるほど。&lt;/p&gt;&#10;&lt;p&gt;確かに、&lt;strong&gt;目に入射する刺激が少なくなったことが実感できた&lt;/strong&gt;。画面の色は当然通常の色ではないが、決して不自然というほどではない。もちろんこの状態で絵画鑑賞などすべきではなかろうが、そんなことのほうが少ない。&lt;/p&gt;&#10;&lt;p&gt;これはいい。&lt;/p&gt;&#10;&lt;p&gt;私はこのナイトシフトをすっかり気に入ってしまって、Android 6.0を搭載しているXperia Z3でも同様のことが出来ないかと、ブルーライトカットのアプリを導入したうえ（Androidは7からOSレベルで夜間モードに対応しているようだが、6.0ではアプリで対応しなくてはいけない…アプリで対応できるのがAndroidの良いところといえばそうだろう）、そのアプリに課金までしたほどだ。良いアプリの開発者にはお金を出さなくてはならない。&lt;/p&gt;&#10;&lt;h2 id="ダークモードの意義"&gt;ダークモードの意義&#10;&lt;/h2&gt;&lt;p&gt;考えてみれば、白色光ほど刺激の強い光はない。白色光とはあらゆる光が混じったものである。その中には当然波長の短い、つまりエネルギーの大きな光もあるわけだ。しかし、画面は必ずしも白であることを必要としない。特に文字が主体のコンテンツにおいてはそうだ。&lt;/p&gt;&#10;&lt;p&gt;ああそうか、だからダークモードなんていう、暗いテーマを用意しているアプリがたくさんあるのだなと、いまさらながら気づいた。単なるデザイン的な好みの問題かと思っていたが（もちろんそれもあるだろうが）、それ以上に実利的な意味もあったのだ。したがって、真っ黒画面のターミナルは目に優しい。&lt;strong&gt;ターミナル最高&lt;/strong&gt;ということである。&lt;/p&gt;</description></item><item><title>『アップル、グーグルが神になる日』BLEの本だった</title><link>https://hack-le.com/apple-goole-ble/</link><pubDate>Mon, 22 May 2017 11:24:29 +0900</pubDate><guid>https://hack-le.com/apple-goole-ble/</guid><description>&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00VW7ZFPA&amp;linkId=2b48ab9bbb85d2c52b14c3fdfa9d9e1d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;アップル、グーグルが神になる日　ハードウェアはなぜゴミなのか？, 上原昭宏、山路達也著, 光文社新書, 2015&#13;&#10;&lt;p&gt;いろんな意味で光文社新書らしい、非常に刺激的なタイトルとサブタイトルであるが、内容的にはBLE（Bluetooeh Low Energy）の本であった。Raspberry Pi 3に内蔵された印象しかなかったが、聞くと確かに使えそうに思える……思えるが、どう使ってよいかはやはり思い浮かばない……。&lt;/p&gt;&#10;&lt;h2 id="ゴミの意味"&gt;&amp;ldquo;ゴミの意味&amp;rdquo;&#10;&lt;/h2&gt;&lt;p&gt;まず目を引くのはハードウェアはなぜゴミなのか、という文言である。脊髄反射でつい一言文句を言ってしまいたくなるが、読んでみると、どうやらこれはネガティブな意味で用いられているのではないようだ。大切なものはサービスであって、ハードウェアはそのための入れ物でしかない、いや、そうでなくてはいけない、&lt;strong&gt;ハードウェアをゴミとして捨てられるように、ビジネスを設計しなくてはいけない&lt;/strong&gt;のだと、そういうニュアンスである。&lt;/p&gt;&#10;&lt;p&gt;ネガティブなワードをポジティブ（？）な意味合いで用いるのは、個人的には好きな表現方法なのだけれど、それにしても勇気のあるタイトルだなと思う。読めばTwitterでもそのようなことを言っているらしい。色々な方面から厳しい言葉を投げかけられているだろうことは想像に易い。それでもなおそう言い続けるのは、意志あってのことだろうが、著者はだいぶ変わっている。&lt;/p&gt;&#10;&lt;h2 id="ble本"&gt;BLE本&#10;&lt;/h2&gt;&lt;p&gt;本書の内容は、一言で言うとBluetooth Low Energy、すなわちBLEに尽きる。BLEで以て、IoT（Internet Of Things）が現実味を帯びたという話。&lt;/p&gt;&#10;&lt;p&gt;個人的には、IoTはバズワードの親玉だと思っている（「&lt;a class="link" href="https://hack-le.com/44641377-2/" &gt;IoT の期待感と現実&lt;/a&gt;」）。しかし、著者はIoTをバズワードと認めながらも、バズワードを「当たり前になったからこそ死語となる」と考えているようで、たとえ皆に忘れ去られようと、一時的にでも概念が共有されることを評価するのは、確かに一理あると思った。&lt;/p&gt;&#10;&lt;p&gt;IoTの言わんとする概念が当たり前となるのは、随分先のような気もするが、それこそ著者が本書で提示する未来像である。そしてそのためのキーワードが、BLE、Bluetooth Low Energyである。&lt;/p&gt;&#10;&lt;p&gt;ガジェット好きであればBLEは嫌でも耳に入る言葉ではあるものの、それがどういうものか調べたことはなかったので、本書はけっこう勉強になった。Bluetoothの名を冠しているから、なんとなくその延長戦上にあるものだと思っていたが、どうやら従来のBluetooth…クラシック・ブルートゥースというそうだ…とは互換性がない、再設計されたものであるらしい。&lt;/p&gt;&#10;&lt;p&gt;以下のような特徴がある。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;従来のブルートゥース（クラシック・ブルートゥース）との間に互換性はない&#10;&lt;ul&gt;&#10;&lt;li&gt;両方に対応したものをBluetooth Smart Ready、BLEのみに対応したものをBluetooth Smartという&lt;/li&gt;&#10;&lt;li&gt;クラシックブルートゥースの問題…詳細なプロファイルが必要→10年後の使われ方を見越したプロファイルなど書けない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;2.4GHz, 10m, 1Mbps, &lt;strong&gt;0.1mW&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;BLEの役割&#10;&lt;ul&gt;&#10;&lt;li&gt;データを取得&lt;/li&gt;&#10;&lt;li&gt;機器を操作&lt;/li&gt;&#10;&lt;li&gt;存在を認識&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;アプセサリAppcessory…アプリケーション+アクセサリ&#10;&lt;ul&gt;&#10;&lt;li&gt;機器の備えている「機能」（キャラクタリスティック）とアプリによる「振る舞い」を分離（ex; 加速度センサという機能、歩数計というアプリ）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ざっくりの歴史&#10;&lt;ul&gt;&#10;&lt;li&gt;2006, ノキア Wibreeワイブリーという技術をベースにしている&lt;/li&gt;&#10;&lt;li&gt;2011…Apple iOS 5でコア・ブルートゥースというフレームワークを追&lt;/li&gt;&#10;&lt;li&gt;2013.7…Android 4.3で対応。2013.10 Windows 8.1で対応&lt;/li&gt;&#10;&lt;li&gt;2013…iOS 7iBeacon&#10;&lt;ul&gt;&#10;&lt;li&gt;デバイスはUUIDで紐付け&lt;/li&gt;&#10;&lt;li&gt;マーケティングのインパクト…店で目の前の商品の情報が出るデモ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;2015…Android 5.0でiBeacon&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;消費電力の少なさ&lt;/strong&gt;に驚き。0.1mWとは……。なるほどRaspberry Pi 3に採用されるだけある。iBeaconはコレを利用したものだったのか。表題でアップル、グーグルが神になる日とあるが、それはAppleとGoogleが主導して流れを作っているからということか。大事なことは、両者が作っているのはハードウェアではなく、&lt;strong&gt;ユーザー体験&lt;/strong&gt;だということだ。著者によれば、iPhoneの本質はハードウェアそのものではなく、iPhoneというユーザー体験だという。だからこそ、乗り換えにかかるコストは（金銭を除けば）非常に少ない。そのための仕組みとして、著者はiCloudを非常に評価している（個人的にはあまりよい印象はないが…）。&lt;/p&gt;&#10;&lt;h2 id="どうしたものやら"&gt;どうしたものやら&#10;&lt;/h2&gt;&lt;p&gt;BLEはIoTを実現させるのに十分なもので、そしてエンジニアは、それを使って面白いハードウェアを作るのではなく、素晴らしいユーザー体験をできるようにしなければならない、というのが本書の主張であると思う。タイトルは刺激的だが、主張自体は穏当である。新書にはよくあること。&lt;/p&gt;&#10;&lt;p&gt;それ自体は非常に理解できるのだが、問題は、具体的に何をしたらよいのか、やっぱり思い浮かばないということだ……。それがわかれば苦労するまいが……どうしたものやら…。&lt;/p&gt;</description></item><item><title>ファミリーライブラリが日本にくればKindle端末を母に買ってやれる</title><link>https://hack-le.com/familylibray/</link><pubDate>Sun, 21 May 2017 11:34:48 +0900</pubDate><guid>https://hack-le.com/familylibray/</guid><description>&lt;p&gt;先日、母の日セールでKindle端末が安売りされていた。読書をしなくなったという母に購入することを検討したが、色々と難しいところがあると考えてやめた（「&lt;a class="link" href="https://hack-le.com/book-management/" &gt;電子書籍は本の管理が面倒くさい…雲の上の不自由な本棚について&lt;/a&gt;」）。現時点ではある程度はガジェットに理解ある人でないと、電子書籍端末は使いこなせないだろう。だが一番のハードルは、やはりコンテンツを揃えなくてはいけないことではないだろうか。せめて&lt;strong&gt;ファミリーライブラリ&lt;/strong&gt;が日本でも実装されれば、取っ掛かりになるのだが。&lt;/p&gt;&#10;&lt;h2 id="kindleのハードル"&gt;Kindleのハードル&#10;&lt;/h2&gt;&lt;p&gt;AmazonのKindleは素晴らしい。それは確かだ。私は、Kindle Paperwhiteを持っているし、数百冊のKindle書籍を購入している。ほとんどのKindle書籍にDRMがかかっていることは悲しいけれど（僅かながら、非DRMのKindle書籍もある）、使い方を考えれば便利なものである。しかし、多くの人にとってはまだまだ難しい代物だろう。&lt;/p&gt;&#10;&lt;p&gt;先日は母の日セールとやらでKindle端末が安売りされていた。母の日に1万円のものをプレゼントするとなれば、&lt;strong&gt;贈り主もそれなりの年齢のはずだが、その「母」である人たちに、Kindle端末を自由自在に使いこなせる人はいったいどれだけいるのだろう&lt;/strong&gt;か。母の日と銘打ってはいるものの、実際には自分のために購入した人が多かったのではないかと思う（そしてAmazonもそれをわかっている）。&lt;/p&gt;&#10;&lt;p&gt;どうして母に購入するのが躊躇われるかと言えば、使い方の問題もあるけれど、それよりなにより、&lt;strong&gt;まずKindle書籍を購入するというハードルが高い&lt;/strong&gt;からだ。デバイスを買って終わりではない。コンテンツを買ってもらうことでコストを回収しようというモデルなのだから、当然といえば当然である。でなければ、これだけのデバイスを1万円で売ることなど出来まい。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、これから電子書籍を始めようという人にとって、Kindle書籍を揃えなければいけないのは些かハードルが高い。電子書籍自体に馴染みがなく、得体の知れないものである。よくわからないものにおいそれとお金は出せない。それだったら、今まで通り紙の本を買うのが自然だろう。&lt;/p&gt;&#10;&lt;p&gt;わかったらわかったで問題がある。Kindle書籍はKindleでしか読めないので、もし使ってみて「やはり電子書籍は気に入らないな」と思ったら、買った書籍がすべて無駄になってしまうし、Kindle以外のストア（Koboなど）を利用したいと思っても、そうやすやすと移行できるものではないとなれば、やはり抵抗があるだろう。&lt;/p&gt;&#10;&lt;p&gt;結局、&lt;strong&gt;既にiOSやAndroidのKindleアプリでKindle書籍を集めている人でなければ、Kindle端末など中々プレゼントできるものではない&lt;/strong&gt;。そしてそのような「母」はあまり多くはいないだろうし、私の母もそのご多分に漏れない。青空文庫にあるような古典を楽しめる人であれば良いのだが、そういう母もやはり多くはないものである（もしかしたら無料本ハンターになる可能性もあるが、それは読書を豊かにするものではないと思う）。私は電子書籍がもっと広まってほしいと願っているクチなので、布教の意味も込めてプレゼントしたいところであったが、使われないものを送っても仕方がない。&lt;/p&gt;&#10;&lt;h2 id="ファミリーライブラリがあれば"&gt;ファミリーライブラリがあれば&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;電子書籍の便利さは使いこなして初めてわかるもの&lt;/strong&gt;である。逆にいうと、使わなければその便利さはわからない。便利さがわかるまでには、少なくないお金と時間という初期投資が必要である。その投資をしようという人間は、元よりガジェット好きな人、嵩張る書籍の持ち運びに辟易としている人、出張や旅行・引越しが多い人などに限られるだろう。だが、それは決してマスではない。それでは電子書籍は広まらない。&lt;/p&gt;&#10;&lt;p&gt;どうすれば母のような人に電子書籍を楽しむきっかけを与えることができるだろうか。それにはやはり、最初からある程度楽しめるコンテンツを揃えておくしかないだろう。&lt;/p&gt;&#10;&lt;p&gt;米国では2014年より&lt;strong&gt;ファミリーライブラリ&lt;/strong&gt;なる仕組みが実装されているらしく（参考「&lt;a class="link" href="http://www.nikkei.com/article/DGXMZO79805690X11C14A1000000/" target="_blank" rel="noopener"&#10; &gt;米アマゾン、キンドルで家族内の電子書籍共有を可能に ：日本経済新聞&lt;/a&gt;」）、これは（仮想的に登録した）&lt;strong&gt;家族でKindle書籍を共有できる&lt;/strong&gt;というものらしいのだが、こういった仕組みがあれば、ハードルは随分下がるのではないかと思う。一冊の本を家族で共有するのは当たり前になされてきたことだし、&lt;strong&gt;技術的に共有や貸し借りの仕組みが作れるのであれば、是非とも導入してもらいたい&lt;/strong&gt;ものだ（もっと言えば、何も家族に制限する必要もない）。&lt;/p&gt;&#10;&lt;p&gt;もしファミリーライブラリが日本でも使えるようになれば、先に述べたとおり私は電子書籍の普及を臨む人間であるので、母の日セールをっきかけにKindle端末を母に贈るということはありえた（それで使ってもらえるかどうかは未知数だが…）。DRMについては日頃苦々しく思っているが、現状それをしなければどうにもならないのだということなら、せめてその枠組の中で実現できる利便性に目を向けてもらえないものだろうか。&lt;/p&gt;</description></item><item><title>電子書籍は本の管理が面倒くさい…雲の上の不自由な本棚について</title><link>https://hack-le.com/book-management/</link><pubDate>Tue, 16 May 2017 00:20:16 +0900</pubDate><guid>https://hack-le.com/book-management/</guid><description>&lt;p&gt;先日は、Amazonが例によって母の日セールでKindle Paperwhiteを大きく値下げしていた。私も検討してみたけれど、やめた。電子書籍はまだまだ難しいところがあり、全国のオカンの中で、これを使いこなせるのは少数ではないだろうか。&lt;/p&gt;&#10;&lt;h2 id="電子書籍は本の管理がメンドイ"&gt;電子書籍は本の管理がメンドイ&#10;&lt;/h2&gt;&lt;p&gt;Kindle Paperwhiteは電子書籍リーダーとしては非常に優れている。この素晴らしいデバイスが1万円前後で購入できるようになったことは、21世紀の大きな進歩の一つだろう。本を買ったり読んだりするだけならば、小説や新書の類については、もはや紙を超えているかもしれない。読むだけならば。&lt;/p&gt;&#10;&lt;p&gt;だが、読書とは本を買って読むだけだろうか。買った本を管理することも（多くは本棚でなされる）、管理している本から読みたい本を探したり選んだりすることも、読書体験の重要な一部ではないだろうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;現状の電子書籍は、本の読みやすさそのものではなく、本の管理に大きな問題がある&lt;/strong&gt;。本棚に相当する機能が酷いのだ。代表格のKindleもその例に漏れない（むしろひどいほうかもしれん）。&lt;/p&gt;&#10;&lt;p&gt;Kindleでは、疑似本棚機能としてコレクション機能がある。任意の本を1まとめにすることができる機能なのだが、コレクションに本を追加しようとすると、下のような画面で操作しなければならない。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5399&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;773&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/05/2017-05-12_02_58_34_jpg.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;605のリストから一つ一つチェックする[/caption]&lt;/p&gt;&#10;&lt;p&gt;赤枠で囲んだところはアイテム数で、ここでは605冊ある（私は優良顧客なのである。セール本無料本ハンターではないったらない多分）。605冊分のうち数冊ずつ表示される画面を1ページずつめくって、当該本のチェックボックスにチェックを入れる。阿呆か。&lt;/p&gt;&#10;&lt;p&gt;一応コレクションの整理はPCを使ってWeb上でも行える。ただ、時系列に購入したすべての本のリストから、一つ一つチェックを入れて操作するという手順自体は変わらず、やはりやってられない。他に何かやりやすい方法があるんだろうか…。&lt;/p&gt;&#10;&lt;p&gt;こうして頑張ってコレクションにくわえても、コレクションの勝手はよろしくない。コレクション内の本は、読んだ順番の時系列、タイトル順、著者順のいずれれかで並べられるが、多くの場合、時系列だけを使うことになるだろう。1ページあたりに表示される本が少ないうえ、画面の遷移も早いとは言い難いので、一覧性が非常に悪く、タイトル順で並べると何かと不便なのである。&lt;/p&gt;&#10;&lt;p&gt;結局、&lt;strong&gt;新しい本を読み続けるというスタイルには適しているが、それ以外のスタイルには適さない&lt;/strong&gt;。本棚とは実に素晴らしいものだったのだとよくわかる。唯一、キーワードによる検索機能だけが本棚に勝っている。&lt;/p&gt;&#10;&lt;p&gt;BookLiveなどはもう少しまともな本棚機能を備えているのだけれど（シリーズものはひとまとめにできるなど）、整理が難しいという根本的な問題はあまり変わっていない。&lt;/p&gt;&#10;&lt;h2 id="pcで管理できればよいが"&gt;PCで管理できればよいが…&#10;&lt;/h2&gt;&lt;p&gt;PCで自在に管理できれば、事情はだいぶ異なると思うのだが、どういうわけか今のところそのような管理機能は提供されていない。せっかく著者名、出版社、ジャンルなど各種のメタ情報があるのだから、PCの大きな画面と素早いレスポンスのもとで自由に操作させてもらえれば、本棚に勝るとも劣らないコレクションが作れるはずなのに。&lt;/p&gt;&#10;&lt;p&gt;仕方がないので、私は自前で蔵書管理のためのデータベースを用意している。まぁそもそも、私は複数の電子書籍ストアを利用しているから、自分が何の本を持っているのか、総合的に管理しないといけないので、たとえAmazonが素晴らしい管理プログラムを提供したとしても、限定的にしか利用しないだろう（それでもあれば非常に有難いが）。&lt;/p&gt;&#10;&lt;p&gt;複数ストアの本を横断的に管理するには、DRMが足枷となっている。つくづくDRMとは不便なものである。汎用的なepubやpdfファイルとしてダウンロード出来て、PCで管理して、自分の好きなデバイスとリーダーアプリで読めれば、どんなに素晴らしいだろうか。&lt;strong&gt;本棚は雲の上より自分の部屋にあってほしい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;仕様を理解し、割り切った使い方をすれば、現状でも電子書籍は便利に使える（なまじっか使えてしまうことが問題だと思っている）。だがそれを母に求めるわけにはいくまい。結局母には自分で買うにはやや高価なマグを贈った。高価とはいえマグなので、Kindleより安いが、私の母にとってはKindleより有用だろう。電子書籍が市井の人口に膾炙されるには、まだまだ多くの課題が残っている。&lt;/p&gt;</description></item><item><title>Kindle端末の初期セットアップで引っかかった…2段階認証のせいだろうか</title><link>https://hack-le.com/kindlepwinit/</link><pubDate>Fri, 12 May 2017 02:34:59 +0900</pubDate><guid>https://hack-le.com/kindlepwinit/</guid><description>&lt;p&gt;Kindle Paperwhiteを持っている。整理のために端末をリセットして、ログインしようとしたところ、Amazonの二段階認証のコードを入力するところから進まなくなってしまい、一時的に二段階認証を無効化する羽目になってしまった。一度ログインしてしまえば、再度二段階認証を有効化しても問題ないようだ。&lt;/p&gt;&#10;&lt;p&gt;（追記）コメント欄にて、「2段階認証の別のサインイン方法」でうまくいったとの情報いただきました。私は試せていませんが、ご参考までに（リンク「&lt;a class="link" href="https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201962400" target="_blank" rel="noopener"&#10; &gt;Amazon.co.jp ヘルプ: 2段階認証の別のサインイン方法&lt;/a&gt;」）&lt;/p&gt;&#10;&lt;h2 id="書籍の整理のためにリセット"&gt;書籍の整理のためにリセット&#10;&lt;/h2&gt;&lt;p&gt;私は自前で本を裁断しスキャンして取り込む、いわゆる自炊ユーザーであるけれど、Kindleなどの電子書籍ストアも大いに活用している。色々と不満はあるが、割り切って使えば便利である。&lt;/p&gt;&#10;&lt;p&gt;特にAmazonが誇るKindle Paperwhiteは非常によく出来たデバイスで、Kindleストアも便利なものだ。しかし、DRMでガチガチに固められているが故に、購入した本をKindleアプリないしKindleデバイスでしか読めないのは、やはり最低と言わざるをえない。リーダー自体はそれなりに良く出来ているのだが、問題は蔵書管理だ。&lt;/p&gt;&#10;&lt;p&gt;Kindleの蔵書管理機能は2017年の今でも貧弱で（電子書籍アプリはどこも似たようなものではあるが…）、いつまでたっても本棚は作れないし（コレクションという似非本棚っぽい機能はあるものの、これがまた面倒臭い）、削除一つとっても一々本を選択してやらねばならず、たとえばデバイスから100冊の本を削除しようとすれば、これはもう気が遠くなるような作業を要求される。&lt;/p&gt;&#10;&lt;p&gt;で、私はデバイスから削除したい本が100冊以上あった。これは、実はPCに接続すると簡単にできるらしいことを後で知った（参考「&lt;a class="link" href="https://o10e.org/blog/how-to-delete-all-books-from-kindle/" target="_blank" rel="noopener"&#10; &gt;Kindle端末から一括で書籍を削除する方法&lt;/a&gt;」）。しかし、其の時は迂闊なことにそこまで頭が回らず、色々と面倒くさくなっていて、「端末をリセットしてしまおう」と思い立ったのである。まあなんのかんのいって、綺麗サッパリさせるにはリセットが一番良い方法だとは思う。&lt;/p&gt;&#10;&lt;h2 id="初期セットアップでひっかかる"&gt;初期セットアップでひっかかる&#10;&lt;/h2&gt;&lt;p&gt;さて、リセットした後は再度ログインしなくてはならない。私はパスワード管理マネージャで長く無秩序な文字列を生成し使用しているから、この作業は非常に億劫だ。しかし早々あることではないのだからと自分に言い聞かせ、ぼちぼちと入力する。こういう時、人間とは不思議なもので、長大で無意味な文字列については間違えないのに、慣れ親しんだメールアドレスを間違えるということがままある。あった。つらい……。&lt;/p&gt;&#10;&lt;p&gt;悲しみを乗り越えて、正しいメールアドレスとパスワードを入力すると、私はAmazonでは二段階認証を有効化させているので、今度は6桁のパスコードが求められる。といっても、あの長々しいパスワードに比べれば、ラスボス後のイベント戦のようなもので、何の問題もない……と思ったのだが、何故かコード入力後、再びログイン画面に戻されてしまった。&lt;/p&gt;&#10;&lt;p&gt;まさか間違えたのだろうかと、憂鬱な気分で、メールアドレスとあの忌々しくも長過ぎるパスワードをまた入力し、そしてパスコードを入力……すると、ほどなくしてまたログイン画面に戻される。なんなんだ。&lt;/p&gt;&#10;&lt;p&gt;さすがに打ち間違いではない。なんとなく嫌な予感がして、二段階認証を無効化したうえで、再度挑戦してみると、今度はあっさりと認証され、再びKindleを使えるようになった。やはり、二段階認証のところで躓いていたらしい。うーん。&lt;/p&gt;&#10;&lt;p&gt;GoogleアカウントやApple ID並に、Amazonアカウントは乗っ取られたら困るアカウントであるから、二段階認証をしないわけにはいかないので、作業後に二段階認証をまた有効化させた。一応、Kindleは問題なく使えている。まぁ今まで使えていたのだから当然なのだが……。&lt;/p&gt;&#10;&lt;p&gt;二段階認証をしていると、Kindleデバイスの初期セットアップで引っかかる場合があるのだろうか。とてもじゃないが、もう一度再現試験をしてみようという元気はない…。&lt;/p&gt;</description></item><item><title>サードパーティのマグネット充電アクセサリでXperia Z3の充電部が取れた</title><link>https://hack-le.com/z3-toreta/</link><pubDate>Sat, 06 May 2017 16:14:27 +0900</pubDate><guid>https://hack-le.com/z3-toreta/</guid><description>&lt;p&gt;Xperia Z3のマグネット充電用の端子部が取れてしまった。使用している、マグネット充電用のサードパーティのアクセサリが強力過ぎたらしい。取れたというレビューを見たこともあったので、可能性は考えていたが、本当に取れるとは…。一応また取り付けることはできた。&lt;/p&gt;&#10;&lt;h2 id="xperia-z3は良いデバイスだ"&gt;Xperia Z3は良いデバイスだ&#10;&lt;/h2&gt;&lt;p&gt;もう2年以上使っているが、Sonyの&lt;strong&gt;Xperia Z3は非常に良いデバイス&lt;/strong&gt;だと自信を持って言える。自分の所持しているスマートフォンに満足できることは幸運なことだ。一市民にとってはそれなりの値段のするものであるから、一度購入してしまえば、よほどの不満が生じない限りはそうそう買い替えられるものではない。そして内心で「早く壊れないかなぁ」と買い替えの理由を探して使い続けることになる（そしてそのようなものに限って中々壊れない）。&lt;/p&gt;&#10;&lt;p&gt;自分は元々ガジェット好きであるから、買い替え欲求の閾値は人より相当低い。さほど不満がなくとも、不満がないことが不満だなどとわけのわからないことを言って、次のデバイスに乗り換えかねない、そんな人種である。さらにMac使いであるから、スマートフォンの本命もiPhoneシリーズであり、Xperia Z3は次に欲しくなるiPhoneが出るまでの繋ぎと思っていた。去秋におサイフケータイに対応したiPhone 7が発表された時には、実際に乗り換えを検討した。&lt;/p&gt;&#10;&lt;p&gt;が、なんやかんやいいつつ現在まで使い続けているし、また当面買い換える気も起きていない。&lt;/p&gt;&#10;&lt;p&gt;個人的に大きな問題であったAndroidの音楽アプリについては、Android版Apple MusicがVer.2.0で大きく改善されたことで、完全解決とまではいかずとも、ほぼ解決と言える状態にはなった（「&lt;a class="link" href="https://hack-le.com/android-applemusic2/" &gt;Android版Apple Music 2.0のアップデートは素晴らしい！&lt;/a&gt;」）。今なお怪しい挙動も見せるが、microSDカードが使えるという点で、総合的には本家iOS版を上回るかもしれない。&lt;/p&gt;&#10;&lt;p&gt;細かなところでiPhone/iOSに軍配が上がると思うことは多いのだけれど（細かなできの良さの積み重ねが、iOSデバイスの最大の美点であると思う）、このXperia Z3は白ロム市場で5万円で入手できたもので、iPhoneの市場価格などを見ると、総合的には非常に満足している。ガジェット好きとはいえ、しがない一市民の自分にとってプライスは最重要ファクターである。&lt;/p&gt;&#10;&lt;h2 id="防水機能のために"&gt;防水機能のために&#10;&lt;/h2&gt;&lt;p&gt;iPhone 7より前のiPhoneにたいする、Xperia Z3の明確な優位点として防水機能があった。防水は人によって使う・使わないがハッキリする機能でもあるので、使わない人にとっては心底どうでもよい話だったと思うが、使う人にとってはこれだけでデバイスの購入可否を決定しかねないほどの要素である。使わないという人だって、一度水没の憂き目にあえば意見を変えるはずだ（スティーブ・ジョブズがiPhoneを水洗トイレに落とす自分のような間抜けであればよかったのに）。&lt;/p&gt;&#10;&lt;p&gt;自分にとって防水はなくてはならない機能だ。防水とはつまり保護すべきところを密閉することである。Xperia Z3のmicroUSB端子のところにキャップがついているのはそういうことだろう。そのキャップが、使用して1年半もすると、少し緩んできた。&lt;/p&gt;&#10;&lt;p&gt;開閉を繰り返すたびに劣化していくのはキャップの機構的な宿命だ。これは仕方ない。充電するには開け閉めせざるを得ないし、自分はけっこうハードに使うほうなので、充電が1日1回で済むことはあまりなく、結果、劣化も人より早いだろう。&lt;/p&gt;&#10;&lt;p&gt;だが、Xperia Z3は思っていたよりもずっと良いデバイスで、できればまだもう少し使いたい。キャップの開け閉めをせずに充電できればと思うが、純正やサードパーティのDockによる充電は、ケースの影響もあってかどうにもうまくない。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00VS119B4&amp;linkId=2c11b9549690d5a0a5ccc6fa669d4223" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;そんな折に見つけたのが、サードパーティのマグネット充電のアダプターであった。その時の記事が「[Xperia Z3のUSBキャップが緩んできたので、マグネット充電のアダプター購入](/z3musettenjuden/)」である。&#13;&#10;&lt;h2 id="充電部が取れた"&gt;充電部が取れた&#10;&lt;/h2&gt;&lt;p&gt;これは非常に良いものだった。もはやUSBキャップを恐る恐る開閉する必要もない。毎日愛用しており、最近は2つほど追加注文して、予備も兼ねて自宅用に2つ、携帯用に1つ揃えたほどだ。&lt;/p&gt;&#10;&lt;p&gt;問題もあった。アダプターを、充電部に対して、正しい位置で垂直に取り付けなくてはならないのであるが、これがちょっと難しく、取り付けには慣れが必要であった。最初はこれがうまくできず、購入は失敗だったかと考えたくらいに癖がある。&lt;/p&gt;&#10;&lt;p&gt;ケースの関係で完全な垂直に取り付けられないことや、マグネットが強力過ぎるのか、正しい位置からずれたところでもピッタリとくっついてしまうことがよくあった。そんな時は、少しずらしてやる必要があるのであるが、ケースの関係で少し浮きやすくなっており、くっついたり取れたりを繰り返す状態になることがままあった。&lt;/p&gt;&#10;&lt;p&gt;これがよくなかったのだろう。ある時、いつものように少しずれたアダプターを所定の位置に動かそうとしたら、パカっと充電部が取れてしまった。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5347&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;646&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/05/1b4dcefe384304ef5c2bef7844e5c79b.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;取れてしまった…[/caption]&lt;/p&gt;&#10;&lt;p&gt;最初、何が起きたのかよくわからなかったが、アダプターに見たことのないソケットがくっついているのと、見慣れたXperia Z3に見慣れない穴が開いているのを確認して、どうやら吸盤の要領で充電部を取ってしまったらしいと気づいた。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5348&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;474&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/05/defbc2f152f86500437d7542c8fb65b2.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;こんな感じなのか…[/caption]&lt;/p&gt;&#10;&lt;p&gt;そういえば、そのようなレビューがAmazonにもあった。しかし、使用していた感触として、特に問題ないだろう、と思っていたのだが……来る時は急に来るものだなぁ。それは、そうか。&lt;/p&gt;&#10;&lt;p&gt;一応、&lt;strong&gt;充電部は元通りはめ込むことができた&lt;/strong&gt;。普段使いですぐに取れる状態でもなさそうだ。しかし、一度取れたところはやはり取れやすくなっているようで、その後もアダプターを使うと、簡単に取り外せてしまう。引き抜く時に取れるので、充電そのものはできる。だが、防水機能保全のためにマグネット充電にしたのに、こんなことになってしまっては何が何やらわからない。&lt;/p&gt;&#10;&lt;p&gt;まぁこういうことがあるので、Sony純正のマグネットはあまり強くないのだろうと思う。本来であれば、使用をやめるべきなのだが……防水云々は別にしても、USBのキャップ開閉をしなくてよいこのマグネット充電アダプターは単純に便利だ。できれば使いたい。だが使い続けるならば、もう少し丁重に取り扱わねばならないようだ。引き抜くときには捻って十字を作るようにし、なるべく力が加わらないようにするなどの工夫が必要がいるだろう。ううむ。&lt;/p&gt;&#10;&lt;p&gt;こういうことがあると、最近噂の遠距離充電などが実現すればよいのになぁと切に思う（しかしそれには当然ワットクラスの電磁波を飛ばすことになると思うのだが、とても信じられん…）。&lt;/p&gt;</description></item><item><title>iTunesで”this item in not eligible for the icloud music library”と言われた時の対処</title><link>https://hack-le.com/not-eligible-for-icloud/</link><pubDate>Sun, 30 Apr 2017 02:04:58 +0900</pubDate><guid>https://hack-le.com/not-eligible-for-icloud/</guid><description>&lt;p&gt;iTunes MatchやApple Musicを利用していると、iTunesで曲をAppleのサーバーに上げられる。が、曲の中にはアップロードに失敗するものもあり、そういうものは斜線を引かれた雲のアイコンで示される。で、iCloudライブラリにあげようとすると、&amp;ldquo;this item in not eligible for the icloud music library&amp;quot;というエラーメッセージが出てアップロードに失敗する。この時の対処法。&lt;/p&gt;&#10;&lt;h2 id="状態"&gt;状態&#10;&lt;/h2&gt;&lt;p&gt;特定の曲がiCloudミュージックライブラリにアップロードされない。iTunesでは斜線を引かれた雲のアイコンで示される。たとえば以下。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5293&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;593&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/6594388f49a16b6e88c0b63ae9562592.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;雲のアイコン[/caption]&lt;/p&gt;&#10;&lt;p&gt;何故桂枝雀なんてあるんだろうと思ったが、そういえば昔聞いた覚えがある。。。&lt;/p&gt;&#10;&lt;p&gt;それはいいとして、iCloudミュージックライブラリにアップロードしようとすると、&amp;ldquo;this item in not eligible for the icloud music library&amp;quot;というエラーダイアログが表示されてアップロードできない。&lt;/p&gt;&#10;&lt;h2 id="原因"&gt;原因&#10;&lt;/h2&gt;&lt;p&gt;Appleの公式サポート「&lt;a class="link" href="https://support.apple.com/en-us/HT203564" target="_blank" rel="noopener"&#10; &gt;About iCloud Music Library icons and status - Apple Support&lt;/a&gt;」によれば、原因は下記である。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h3 id="ineligible"&gt;Ineligible&#10;&lt;/h3&gt;&lt;p&gt;This icon appears next items that can&amp;rsquo;t be added to iCloud Music Library. A song might be ineligible if it wasn&amp;rsquo;t purchased from the iTunes Store or was purchased using a different Apple ID, or if the song file is larger than 200 MB, is longer than two hours, or was encoded at 96 Kbps or less.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;つまり、以下の曲はiCloudミュージックライブラリにアップロードできない。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;iTunes Storeより異なるApple IDで購入された&lt;/li&gt;&#10;&lt;li&gt;200MBより大きい&lt;/li&gt;&#10;&lt;li&gt;2時間より長い&lt;/li&gt;&#10;&lt;li&gt;96kbpsより小さい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;上記の曲について調べてみると、bit rateが32kbpsになっている。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5294&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;510&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/e884635cf8f7d78f8d3ccd9d87cdcb5d.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;32kbps[/caption]&lt;/p&gt;&#10;&lt;p&gt;この曲の場合は、ビットレートが低すぎることが原因であろう。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;対応はエラー条件によって異なる。ファイルサイズや曲が長すぎることであれば、分割するしかないだろう。ビットレートが低すぎる場合、アップコンバートしなくてはなるまい。「&lt;a class="link" href="https://discussions.apple.com/thread/7113938?start=0&amp;amp;tstart=0" target="_blank" rel="noopener"&#10; &gt;this item not eligible for icloud music library | Official Apple Support Communities&lt;/a&gt;」ではAAC形式でコンバートしなおしている。別にAACでなくても、96kbps以上ならなんでもよい。変換のやり方は「&lt;a class="link" href="https://support.apple.com/ja-jp/HT204310" target="_blank" rel="noopener"&#10; &gt;iTunes で曲を別のファイル形式に変換する - Apple サポート&lt;/a&gt;」を参照。&lt;/p&gt;&#10;&lt;p&gt;実際に変換したところ、無事アップロードされた。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5295&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;601&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/5822ec14dd1462ba94d7942ff7fbf973.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;斜線の雲アイコンが消えた[/caption]&lt;/p&gt;&#10;&lt;p&gt;Android版Apple Musicは先日の2.0でだいぶ勝手がよくなったので、そろそろちゃんと整理したいと思い色々いじっているが、なにしろ15年前から管理を続けているので、あちこちに綻びがある。最近エンコードした曲なら問題ないが、古い環境でエンコードしたやつはサードパーティのエンコーダを使っていたり、そもそもOSがWindowsだったりしたせいで、色々とカオス。スマホに移して文字化けするのはだいたいそれ。Apple Music自体のバグも多く、とりあえず既存のアートワーク破壊してまわるのは本当に勘弁してほしいです…。&lt;/p&gt;</description></item><item><title>macOS Sierraでもクリーンインストールすればメモリ4GBで足るらしい</title><link>https://hack-le.com/sierra4gb/</link><pubDate>Fri, 28 Apr 2017 17:36:59 +0900</pubDate><guid>https://hack-le.com/sierra4gb/</guid><description>&lt;p&gt;先日、MacBook Air 2013 11インチ(RAM 4GB)にmacOS Sierraをインストールしました。久しぶりのクリーンインストールです。思ったほどの不便もなく使っていますが、驚いたのはいつも逼迫していたメモリがやや余り気味であることです。これはSierraがEl Capitanより省エネ…ではなく、クリーンインストールしたおかげなのでしょうね。&lt;/p&gt;&#10;&lt;h2 id="クリーンインストールのついでにアップデート"&gt;クリーンインストールのついでにアップデート&#10;&lt;/h2&gt;&lt;p&gt;OSをアップデートさせようと、重い腰をあげたのは先週のことです。あまり気乗りしなかったのは、Sierraがリリースされてから続々報告された不具合が故で、特にPDFのトラブルは私を大いに躊躇させました（「&lt;a class="link" href="https://hack-le.com/sierra-scansnap/" &gt;macOS Sierra来たけれどScanSnapの問題があるのでアップグレードは当面おあずけ&lt;/a&gt;」）。その後も、別ハードではありますが特に新型MacBook Pro 2016絡みのトラブルの多さは、噂を聞くだけでなんとなく不安にさせられました。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、基本的にソフトウェア（特にOS）は最新のものにするのがよいと考えています。不具合もある程度修正され、PDFの問題も致命的というほどではなくなってきました（まだ問題はありますが…参考「&lt;a class="link" href="http://applech2.com/archives/20170405-preview-and-pdfkit-issue-continue-macos-10-12-4.html" target="_blank" rel="noopener"&#10; &gt;macOS Sierra 10.12.4ではプレビューアプリおよびPDFKitの一部不具合が修正されるも、新たな不具合が発生しているもよう。 | AAPL Ch.&lt;/a&gt;」）。そろそろ頃合いだろうか。&lt;/p&gt;&#10;&lt;p&gt;そんなことを考えながら、それにしてもMacBook Airの処理速度というか、作業中になにかとひっかかりのようなものを感じることが多い昨今、そういえば2010年に初めてMacBook Airを購入してからというもの、引き継ぎに引き継ぎを重ね、システムに多くのゴミが溜まっているだろうなぁなどと思い、ここは一つクリーンインストールでもしてみるかと思いました。そして、どうせクリーンインストールするなら、ついでにOSもアップデートしようと考え、クリーンインストールのついでという感じで、El CapitanからSierraにした次第です（「&lt;a class="link" href="https://hack-le.com/sierra-install/" &gt;ようやくmacOS Sierraをインストール&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="メモリが余っている"&gt;メモリが余っている&#10;&lt;/h2&gt;&lt;p&gt;Sierraに移行するにあたって多少不安があったことは否めませんが、いざ使ってみると思ったほど悪くはない。キーボードやマウスの設定を柔軟に変更できる、Karabiner（「&lt;a class="link" href="https://pqrs.org/osx/karabiner/index.html.ja" target="_blank" rel="noopener"&#10; &gt;Karabiner - OS X用のソフトウェア&lt;/a&gt;」）のようなシステムに密接に関わる便利アプリがまだ未対応であることはやはりちょっと痛手なのですが（LibreOfficeなど、Emacsキーバインドが完全に再現されないアプリがいくつかあるため、強制的にEmacsキーバインドの設定が手軽にできるKarabinerは重宝していた）、特にこれといった不具合はありません。まぁ、ハードはもうだいぶ熟れているだろうMacBook Air 2013年モデルですし、Sierraもすでに何度かマイナーアップデートを繰り返していますしね。まぁよかった。&lt;/p&gt;&#10;&lt;p&gt;肝心の挙動については、全体的に若干レスポンスがよくなったような「気がします」。体感速度というのは測れないから体感速度なわけで、よほど如実でなければハッキリと言えないのが残念なところです。しかしまぁ、少なくとも遅くなってはいない。アプリによっては、起動が明らかに早くなったといえます。&lt;/p&gt;&#10;&lt;p&gt;個人的に驚いているのが、いつもいつでも逼迫していたメモリが、ちょっと余り気味（といってもキャッシュには使われているようですが）であることです。メモリ足りない問題は、私に次のノートパソコンを新調させる大きな言い訳で、つい二ヶ月前には「&lt;a class="link" href="https://hack-le.com/mbram16gb/" &gt;MacBookのメモリが16GBになったら心揺らぐ&lt;/a&gt;」のような記事を書き、そのときのメモリの状況は下図のようでした。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4947&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;674&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/02/71a7bad23a6ee22b52ee88a87cee9409.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;2ヶ月前のEl Capitan時代[/caption]&lt;/p&gt;&#10;&lt;p&gt;だいたいいつもこのような感じで、スワップも随分発生していたようです。&lt;/p&gt;&#10;&lt;p&gt;それが今は、だいたい700MB-1GBくらい空いていて、下図のような感じ。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5266&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;661&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/8ea601b68cbfaec1527a1c77069a3329.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Sierra[/caption]&lt;/p&gt;&#10;&lt;p&gt;だいぶ良くなっています。アプリの使用状況を個別に見ないとなんとも言えんのですが、以前の詳細なデータが残っているわけでもなし、記憶が頼りですけれど、特にこれ！という要因は思い当たりません。色々なものの積み重ねじゃないかな。Sierraにしたからというより、クリーンインストールしたからというべきなんでしょうね、きっと。&lt;/p&gt;&#10;&lt;h2 id="まだまだ戦えてしまうのか"&gt;まだまだ戦えてしまうのか&#10;&lt;/h2&gt;&lt;p&gt;いずれにせよ、4GBでもまだまだ十分そうです。私はノートパソコンではエミュレータの起動などあまり負荷のかかる作業はしないようにしているので、作業内容によりけりなのはもちろんですが、Webブラウジング、メール、オフィス、テキストベースの開発といった作業ならば、問題はなさそう。MacBook Airでまだやれてしまうのか！&lt;/p&gt;&#10;&lt;p&gt;そのうちまた、以前のように逼迫し始めるのかなぁとも思います。しかし、どうしても今現在メモリが足りなくて、けれどお金はもっと足りなくて、という人は、OSをクリーンインストールすれば、まだもうしばらく繋げるかもしれないですね。それも長い&amp;quot;しばらく&amp;quot;になりそうな。&lt;/p&gt;&#10;&lt;p&gt;うーん、これじゃ現行の微妙なMacBook Proを買う意欲がわかない。困ったものだ（？）。&lt;/p&gt;</description></item><item><title>macOS Sierraをクリーンインストール後にやったこと</title><link>https://hack-le.com/sierrainit/</link><pubDate>Mon, 24 Apr 2017 12:07:59 +0900</pubDate><guid>https://hack-le.com/sierrainit/</guid><description>&lt;p&gt;macOS Sierraをクリーンインストールした後にやった後の個人的なメモです。こういうのは残しておくと自分の役に立つ。人の役に立つのかは微妙。私は他人の初期設定見るのけっこう好きですが。&lt;/p&gt;&#10;&lt;h2 id="環境設定"&gt;環境設定&#10;&lt;/h2&gt;&lt;p&gt;システム環境設定からいじることができるものを調整。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;キーボードでキーリピート速める&lt;/li&gt;&#10;&lt;li&gt;キーボードでスマート引用符とスマートダッシュを使わないようにする&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.piyo.tech/posts/2014-01-06-205101/" target="_blank" rel="noopener"&#10; &gt;Macで引用符を入力すると勝手に変換されるのをやめたい - ぴよログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;トラックパッドでタップでクリック、ポインタ速度速める&lt;/li&gt;&#10;&lt;li&gt;アクセシビリティからトラックパッドの3本指ドラッグ解禁&#10;&lt;ul&gt;&#10;&lt;li&gt;何故これがデフォルトじゃないんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイアウォールを「入」にする&#10;&lt;ul&gt;&#10;&lt;li&gt;インストール時にホームディレクトリの暗号化まで推奨してきたのに、何故FWがデフォルトで「切」なんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="アプリのインストール"&gt;アプリのインストール&#10;&lt;/h2&gt;&lt;p&gt;お楽しみ？使用するアプリのインストール。&lt;/p&gt;&#10;&lt;h3 id="app-storeから"&gt;App Storeから&#10;&lt;/h3&gt;&lt;p&gt;まずApp Storeからインストール。いつになったら軽くなんでしょう。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Xcode&lt;/li&gt;&#10;&lt;li&gt;iWork(Pages, Numbers, Keynote)&#10;&lt;ul&gt;&#10;&lt;li&gt;晴れて完全に無料化されました&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;GarageBand&lt;/li&gt;&#10;&lt;li&gt;ForkLift&#10;&lt;ul&gt;&#10;&lt;li&gt;2画面ファイラ。Terminalで開くショートカットがとても便利&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;CotEditor&lt;/li&gt;&#10;&lt;li&gt;Go2Shell&#10;&lt;ul&gt;&#10;&lt;li&gt;FinderにカレントディレクトリをTerminalで開くアイコンを追加できる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;LanScan&#10;&lt;ul&gt;&#10;&lt;li&gt;LAN内のデバイスをスキャンできるGUIソフト。地味に便利&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Pixelmator&lt;/li&gt;&#10;&lt;li&gt;Readkit&#10;&lt;ul&gt;&#10;&lt;li&gt;RSSリーダーとして。色々不具合あるけど使っている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Stuffit Expander&lt;/li&gt;&#10;&lt;li&gt;PopClip&#10;&lt;ul&gt;&#10;&lt;li&gt;いつのまに1,200円に&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="webから"&gt;Webから&#10;&lt;/h3&gt;&lt;p&gt;Web版。一時期brew caskとか使っていましたが、これはこれでメンテナンスがたいへんで、使わなくなりました。App Storeにあるやつもありますが、App Storeの制限の問題なのか、本家版より低機能だったり不安定だったりすることがあるので、Webからインストールパッケージを落とすことが多いです。App Storeの監視体制は、PCにはそぐわないように思います。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Dropbox&lt;/li&gt;&#10;&lt;li&gt;Google ドライブ&lt;/li&gt;&#10;&lt;li&gt;Google 日本語入力&lt;/li&gt;&#10;&lt;li&gt;Google Chrome&#10;&lt;ul&gt;&#10;&lt;li&gt;久しぶりに入れるとけっこうな拡張機能が死亡している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Evernote&lt;/li&gt;&#10;&lt;li&gt;Calibre&lt;/li&gt;&#10;&lt;li&gt;Simple Comic&#10;&lt;ul&gt;&#10;&lt;li&gt;2010年で更新止まってるけどMac用の漫画ビューアっていまだにこれが一番なんじゃなかろうか…&lt;/li&gt;&#10;&lt;li&gt;検索すると変なサイト出るけど本家は「&lt;a class="link" href="http://dancingtortoise.com/simplecomic/" target="_blank" rel="noopener"&#10; &gt;Dancing Tortoise | Simple Comic&lt;/a&gt;」GitHubにソースもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Atom&lt;/li&gt;&#10;&lt;li&gt;Android Studio&lt;/li&gt;&#10;&lt;li&gt;Coda&lt;/li&gt;&#10;&lt;li&gt;VirtualBox&lt;/li&gt;&#10;&lt;li&gt;Genymotion&#10;&lt;ul&gt;&#10;&lt;li&gt;個人用は「genymotion personal」で検索するとDLページが出て来る&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;KiCAD&lt;/li&gt;&#10;&lt;li&gt;uTorrent&#10;&lt;ul&gt;&#10;&lt;li&gt;OSのイメージとかのためよ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;LibreOffice&#10;&lt;ul&gt;&#10;&lt;li&gt;TeX&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;MacTeX&lt;/li&gt;&#10;&lt;li&gt;Vox for mac&#10;&lt;ul&gt;&#10;&lt;li&gt;mp3再生にいちいちiTunesは重すぎ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Skype&lt;/li&gt;&#10;&lt;li&gt;TeamViewer&lt;/li&gt;&#10;&lt;li&gt;1Password&lt;/li&gt;&#10;&lt;li&gt;Avast&lt;/li&gt;&#10;&lt;li&gt;BetterTouchTool&lt;/li&gt;&#10;&lt;li&gt;Clipy&lt;/li&gt;&#10;&lt;li&gt;Menumeters&lt;/li&gt;&#10;&lt;li&gt;Xquartz&lt;/li&gt;&#10;&lt;li&gt;Karabiner-Elements&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ここらへんがおわったらいったんDockの整理をしますが、驚くほど標準アプリが残らない。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5236&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;715&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/a90696ff5d4434c85c5bed8993c93346.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Dockはなるべく片付ける派[/caption]&lt;/p&gt;&#10;&lt;h3 id="homebrewから"&gt;Homebrewから&#10;&lt;/h3&gt;&lt;p&gt;とても便利。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;imagemagick@6&#10;&lt;ul&gt;&#10;&lt;li&gt;rubyのrmagickの互換性のため（「&lt;a class="link" href="https://hack-le.com/brewrmagick/" &gt;MacのHomebrewでimagemagickを入れているとgem install rmagickが失敗するようになったメモ&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;emacs&#10;&lt;ul&gt;&#10;&lt;li&gt;.emacs.d&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;li&gt;wget&lt;/li&gt;&#10;&lt;li&gt;gnuplot&lt;/li&gt;&#10;&lt;li&gt;octave&lt;/li&gt;&#10;&lt;li&gt;rbenv&lt;/li&gt;&#10;&lt;li&gt;pyenv&#10;&lt;ul&gt;&#10;&lt;li&gt;anaconda&lt;/li&gt;&#10;&lt;li&gt;paramiko&lt;/li&gt;&#10;&lt;li&gt;coincheck&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;peco&#10;&lt;ul&gt;&#10;&lt;li&gt;快適な履歴検索&lt;/li&gt;&#10;&lt;li&gt;…うまくいかない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;pandoc&lt;/li&gt;&#10;&lt;li&gt;odt2txt&lt;/li&gt;&#10;&lt;li&gt;cliclick&#10;&lt;ul&gt;&#10;&lt;li&gt;マウスを使う作業の自動化&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;scrapy&#10;&lt;ul&gt;&#10;&lt;li&gt;クローリング&amp;amp;スクレイピング&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="細かな設定"&gt;細かな設定&#10;&lt;/h2&gt;&lt;p&gt;とても面倒くさい。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;NASの設定（「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;li&gt;sshの設定&lt;/li&gt;&#10;&lt;li&gt;.bash_profile&#10;&lt;ul&gt;&#10;&lt;li&gt;パスの設定、履歴数、rbenvの変数設定など&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;.bash_aliases&lt;/li&gt;&#10;&lt;li&gt;ターミナルの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;monaco 12pt.&lt;/li&gt;&#10;&lt;li&gt;背景黒&lt;/li&gt;&#10;&lt;li&gt;Optionをメタキー&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;自分用binディレクトリのソフトリンクとパス設定&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>ようやくmacOS Sierraをインストール</title><link>https://hack-le.com/sierra-install/</link><pubDate>Sun, 23 Apr 2017 21:39:51 +0900</pubDate><guid>https://hack-le.com/sierra-install/</guid><description>&lt;p&gt;macOS Sierraがリリースされて半年以上経過しました。ここ最近の中でも特に不安定な印象で、特にPDF関係のトラブルが個人的にはかなり痛かったので、アップデートを避けていましたが、さすがにそろそろ落ち着いてきたかなぁと思い、まずノートのMacBook Airにクリーンインストールさせてみました。ぼちぼち使っています。&lt;/p&gt;&#10;&lt;h2 id="不安定な印象"&gt;不安定な印象&#10;&lt;/h2&gt;&lt;p&gt;macOSがリリースされてから半年以上が経過しました。元々私は新しいもの好きで、OSのアップデートも不具合を恐れずに試していましたが、最近はそういう元気もなく、まず安定して動いてくれないと困るなどと、つまらないことを考えるようになってしまいました。&lt;/p&gt;&#10;&lt;p&gt;特に今回のSierraはいつにもまして不具合の多い印象です。個人的に特に問題だと思ったのはPDF関係で、この問題はScanSnapはじめ多くのPDFを扱うソフトに影響を及ぼし、いまだ完全解決には至っていない模様（参考「&lt;a class="link" href="http://applech2.com/archives/20170405-preview-and-pdfkit-issue-continue-macos-10-12-4.html" target="_blank" rel="noopener"&#10; &gt;macOS Sierra 10.12.4ではプレビューアプリおよびPDFKitの一部不具合が修正されるも、新たな不具合が発生しているもよう。 | AAPL Ch.&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;私は自炊と呼ばれる書籍の電子化を頻繁に行っています。そんな私にとって、このPDF問題は致命的で、OSのアップデートを思いとどまらせるには十分な理由でした（「&lt;a class="link" href="https://hack-le.com/sierra-scansnap/" &gt;macOS Sierra来たけれどScanSnapの問題があるのでアップグレードは当面おあずけ&lt;/a&gt;」）。他、特に昨年発売したMacBook Pro 2016に絡む多くの諸問題は、旧型のMacBook Airに直接かかわらないまでも、OSとしての完成度に疑問符をつけさせましたし、またKarabinerが対応しないなどもネガティブな影響を及ぼしています。&lt;/p&gt;&#10;&lt;p&gt;その割に、Sierraの新機能にはこれといって魅力を感じない。強いていえば、iOSデバイスとクリップボードを共有できるユニバーサルクリップが良い感じでしょうか。iPadを隣においてMacを扱うことが多いですから、これは便利なことがあるかも。それくらいですね。Optimized Storageに至っては罠だと思っています（どこかの記事でこの機能を「勝手にオカンが部屋を整理してくれるような機能」というように表現していて笑いました。ありがた迷惑ということを端的に表している気がします）。&lt;/p&gt;&#10;&lt;h2 id="クリーンインストールのついで"&gt;クリーンインストールのついで&#10;&lt;/h2&gt;&lt;p&gt;ネガティブなことばかり書いてきました。いったいこの考えでなぜアップデートしようという気になったかというと、別に進んでやろうと思ったわけではありません。ただ、現在使用しているMacBook Airの処理速度に不満を感じることが多く、これは2010年以来のゴミが溜まりに溜まっていることも影響しているように思え、OSのクリーンインストールをすることにしたのです。で、&lt;strong&gt;どうせクリーンインストールするならアップデートもついでにやってしまおう&lt;/strong&gt;かと思った程度のものです。&lt;/p&gt;&#10;&lt;p&gt;なんだかんだと言ってはいますが、いずれはアップデートしなくてはならないものですから、早めに慣れておくにこしたことはありません。PDFの問題が気にかかるものの、完全解決に至っていないとはいえ、当初ほど致命的なものではなくなっているようです。それに、MacBook Airでは直接自炊したPDFを触ることもあまりないでしょうし。&lt;/p&gt;&#10;&lt;p&gt;また、4年以上Macを買い替えていない人間にはありがたいことに、先日ついにiWork等が無料化されたことにも（参考「&lt;a class="link" href="http://japanese.engadget.com/2017/04/19/iwork-garageband-imovie/" target="_blank" rel="noopener"&#10; &gt;iWork、GarageBand、iMovieが無料化。アップル製品新規購入者以外も気軽に利用可能に - Engadget 日本版&lt;/a&gt;」）、後押しされました。iWorkの無料化は、やや遅きに失した感もありますが…まぁでも嬉しい。&lt;/p&gt;&#10;&lt;p&gt;そんなこともあり、タイミングとしては悪くなかろうと考えました。ということで、いざアップデート&amp;amp;クリーンインストールです。&lt;/p&gt;&#10;&lt;h2 id="インストールそして使用感"&gt;インストール、そして使用感&#10;&lt;/h2&gt;&lt;p&gt;Macのクリーンインストールは久しぶりです。&lt;strong&gt;Apple IDの認証における二段階認証でPINコードを入力するとき、何故か7以外の入力ができないという謎の不具合&lt;/strong&gt;に見舞われ、PINコード7777が出るのを待つしかないのかと軽く絶望しましたが、画面を戻ったり進んだりしているうちに、正常に入力が受け付けられるようになりました。いったいなんだったんだろう。&lt;/p&gt;&#10;&lt;p&gt;出鼻をくじかれつつも、起動後は特に際立った不具合もなく使えています（Optimized Storage機能は無効化しました）。まだ完全に環境を移行できてはいませんが…。昔よりだいぶ楽になったとはいえ、最初の設定はいつになっても面倒くさいものです。&lt;/p&gt;&#10;&lt;p&gt;最初に使用しないものをDockから片付けたとき、私はいわゆる標準アプリをほとんど使っていないのだなと、ちょっと驚きました。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5228&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;352&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/56bfa54245c79513da93fda5191cb62b.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;整理後、Dockに残ったアプリ[/caption]&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Finderとメール、システム環境設定だけ&lt;/strong&gt;です。うーんなんてシンプル。美しい。しかもFinderはファイラとしてはほとんど使っていませんしねぇ。そのうえ以前メーラーとしてAirmailを使っていた時期もありました。一番使っている標準ソフトは冗談抜きでTerminalかもしれないなぁなどと思いつつ、ChromeやらForkLiftやらLibreOfficeやら、愛用のソフトウェアを入れていきます。&lt;/p&gt;&#10;&lt;p&gt;その経過で、特にChromeのエクステンションで、公開が停止されて新たに入れられないものがいくつかありました。また、使っていたアプリを改めてインストールする際、もう長いこと更新されていないことを知り、別のものに入れ替えたものもありました。&lt;/p&gt;&#10;&lt;p&gt;Karabinerについては、Karabiner-Elementsという簡易版がリリースされているものの、キーリピートの速度変更やEmacsキーバインドの適用はElementではすぐに対応できず、面倒臭くなり、これについては使い方そのものを改めることにしました。つまり、使わないということです。キーリピートの速度はシステム環境設定のアクセシビリティで変更できる程度を受け入れることにしました。&lt;/p&gt;&#10;&lt;p&gt;まだ完全に環境を整えられてはおらず、sshの設定など面倒臭いものも残っていますけれど、ひとまず一通りはやりました。何故かSpotlightで引っかからないアプリがあるなど、「ん？」と思うところもありますが、大きな問題はなさそうです。現在、この記事もSierra環境で書いています。おそらくはクリーンインストールのおかげで、ブラウザも少し軽くなったような気がします。Terminalの起動は明らかに早くなりました。これはちょっとうれしい。&lt;/p&gt;&#10;&lt;p&gt;色々と整理できるので、クリーンインストールは定期的にやるのが良いのでしょうが、やはり面倒臭さが先立ち、メインで使っているMac miniについてはクリーンインストールはしないだろうと思います。いずれにせよ、もうしばらくはEl Capitanで様子を見るつもりですけれど、Sierraも思っていたよりはだいぶ整っていそうなので、近いうちにあげようかなと思います。&lt;/p&gt;</description></item><item><title>Android版Apple Music 2.0のアップデートは素晴らしい！</title><link>https://hack-le.com/android-applemusic2/</link><pubDate>Tue, 11 Apr 2017 18:42:30 +0900</pubDate><guid>https://hack-le.com/android-applemusic2/</guid><description>&lt;p&gt;4月4日、Android版Apple Musicがバージョン2.0にアップデートされました。あまり期待していなかったのですが……今回のアップデートは最高でした。UIがiOSに近くなり見やすくなったのもありますが、それよりなにより、ついに&lt;strong&gt;レスポンスが改善されました&lt;/strong&gt;。iOS版並と言っていいと思います。やった！&lt;/p&gt;&#10;&lt;h2 id="レスポンスがいい"&gt;レスポンスがいい&#10;&lt;/h2&gt;&lt;p&gt;Android版Apple Musicの大型アップデート来ました。購読しているRSSのニュースで見た時には、フーンというくらいだったのですが、アップデートしてみて驚きました。&lt;strong&gt;レスポンスが非常によくなっている！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Android版Apple Musicは、iTunesで音楽管理をしている私にとって、現状の最適解です。というのは、自分のライブラリをクラウドにあげて、それを聴きたいときにだけ落として聞く、という使い方ができるのと、「よみがな」という日本語特有の大問題に対応できるからです（この「よみがな」問題さえなければ、もう少し選択肢も広がるのですが…）。&lt;/p&gt;&#10;&lt;p&gt;しかし、Android版Apple Musicには一点大きな問題があって、それは自前のライブラリのレスポンスが遅いことでした。ローカルに保存しているアルバムを、表示するだけで30秒くらい待たされたりとか、けっこうざらでした。そして最初の再生までにまた時間がかかるんだ。特に、Apple Musicにないようなアルバムでその傾向が顕著でしたが、現状そちらのほうが多いくらいなので（特に邦楽は）、もう本当に不便。&lt;/p&gt;&#10;&lt;p&gt;それが、今までのはなんだったのかというくらいに、ストレスのない範囲にまでレスポンスがよくなりました。すぐに曲が表示されるのはもちろん、再生までの時間も悪くない。iOS版並に早くなったと思います。Android版Apple Musicは、SDカードが使えたりと本家Apple Musicにはないメリットもありますし（iOSデバイスにはSDカードが使えるものがないので、iOS版にこの機能がないのは当たり前ですが）、むしろ本家超え？&lt;/p&gt;&#10;&lt;p&gt;次のiPhoneが出たら買い換えようかなと思っていた一番のモチベーションは、Android版Apple Musicがうんこだからというのが大きかったのですが、この出来ならまだ当分Xperia Z3でいいかなとも思います。というとAppleにとって旨味はなさそうですが、Apple MusicはAndroidユーザーには訴求力のあるサービスということで、全体的にはやはりよかったのではないでしょうか。&lt;/p&gt;&#10;&lt;h2 id="嬉しい"&gt;嬉しい&#10;&lt;/h2&gt;&lt;p&gt;いやー、ほんと、このアップデート、ここ最近で一番嬉しかったことかも。やっぱり音楽は癒やしですからねー……。毎月980円貢いでいる甲斐がありましたねー…私の好みを知りすぎて、オールドロックばかり薦めてくるから全然音楽性広がりませんが……。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5202&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;490&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/752b749114cffa43d31212935e2457e0.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;まったく&amp;quot;ニュー&amp;quot;感のないニューリリース[/caption]&lt;/p&gt;&#10;&lt;p&gt;まったく&amp;quot;ニュー&amp;quot;という感じがしません…。なんだか「どうせお前はコレが好きなんだろう？」と言われているような気がするのですが（実際好きですが…）、もう少し攻めてくれてもいいんですよ。&lt;/p&gt;&#10;&lt;p&gt;最近のApple関係は、デスクトップMacが方向性を見直されつつありそうな話もありますし、なんだか嬉しくなるニュースが多いですね。&lt;/p&gt;</description></item><item><title>Mac Proが良い方向に変わるなら、Mac miniにも希望を持ちたくなる</title><link>https://hack-le.com/miniisimportant/</link><pubDate>Thu, 06 Apr 2017 15:34:17 +0900</pubDate><guid>https://hack-le.com/miniisimportant/</guid><description>&lt;p&gt;唐突にMac Proがアップデートされました。今回はマイナーアップデートだったものの、完全な見直し（completely rethought)をしており&lt;strong&gt;Mac Proは見捨てられていない&lt;/strong&gt;ということがわかっただけでも収穫でしょうか。しかし私にとってそれ以上のニュースは「&lt;a class="link" href="https://www.macrumors.com/2017/04/04/apple-says-mac-mini-is-important/" target="_blank" rel="noopener"&#10; &gt;Apple Says Mac Mini is &amp;lsquo;Important&amp;rsquo; But Remains Tight-Lipped About Future Updates - Mac Rumors&lt;/a&gt;」こちらでして、Apple直々にMac miniは重要である、と。言及されたということが一つ大きいとは思いますが、うーん。でも、期待したいなぁ。定期の愚痴記事。&lt;/p&gt;&#10;&lt;h2 id="appleはmac-proを見捨てていないというメッセージ"&gt;AppleはMac Proを見捨てていないというメッセージ&#10;&lt;/h2&gt;&lt;p&gt;突然のMac Proのアップデート、Mac Pro 2017。来るかもとは言われていたのものの、いざ来るとやはりびっくりしますね。ただし、今回はマイナーアップデートです。これがこの高価なデバイスを使うだろうユーザーの多くを失望させることはAppleもわかっているらしく、次はもっとすごいのくるから！という言い訳付きだそうです（参考「&lt;a class="link" href="http://japanese.engadget.com/2017/04/04/mac-pro/" target="_blank" rel="noopener"&#10; &gt;速報：アップル、完全新設計の次世代Mac Proとプロ仕様ディスプレイを予告。アップグレード性重視、発売は来年以降 - Engadget 日本版&lt;/a&gt;」「&lt;a class="link" href="https://techcrunch.com/2017/04/04/apple-pushes-the-reset-button-on-the-mac-pro/" target="_blank" rel="noopener"&#10; &gt;Apple Introducing New Mac Pro, Pro iMacs and External Display Over Next Year&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;そんなこと言われたら、アップデートされたとはいえ現行を買う気はしなくなると思いますが…なにせMac Proです。Macは毎年買い換えるのがお得！なんて愛着の無いことを言う人もいますけれど、Mac Proはそういうわけにもいかないでしょう。&lt;/p&gt;&#10;&lt;p&gt;それでも、そうせざるを得ない状況であると、Apple自身が認めたということだと思います。&lt;strong&gt;Appleはプロユーザーを軽視していない、というメッセージを送る必要がある&lt;/strong&gt;と判断したのでしょう。ただいくら口だけでそう言っても、計画がうまくいっていないときの取引先みたいにしかならないので、マイナーアップデートという実際の行動も伴わせた。もちろん一番よいのは、皆を納得させるような、有無を言わさぬgreat desktopsを発表することでしょうけれど、まだまだその段階ではないのでしょうね。&lt;/p&gt;&#10;&lt;p&gt;Mac Proは拡張性を考慮してデザインを完全に見直しているそうですが、そうであるとすれば、それは正しい方向であると思え、期待できます。あのゴミ箱Macと揶揄された拡張性の著しく低いMac Pro 2013は、やはり失敗だったのではないでしょうか…。そのうち、マニアの間で高値でやりとりされるようになるかも。&lt;/p&gt;&#10;&lt;h2 id="mac-miniに期待したっていいじゃないか"&gt;Mac miniに期待したっていいじゃないか&#10;&lt;/h2&gt;&lt;p&gt;今回の件は、ティム・クックの言うgreat desktops in our roadmap（参考「&lt;a class="link" href="http://japanese.engadget.com/2016/12/20/mac/" target="_blank" rel="noopener"&#10; &gt;ティム・クック「素晴らしいデスクトップMacの計画がある」と発言。いまだ重要な製品のひとつと認める - Engadget 日本版&lt;/a&gt;」「&lt;a class="link" href="https://techcrunch.com/2016/12/19/apples-tim-cook-assures-employees-that-it-is-committed-to-the-mac-and-that-great-desktops-are-coming/" target="_blank" rel="noopener"&#10; &gt;Apple’s Tim Cook assures employees that it is committed to the Mac and that ‘great desktops’ are coming | TechCrunch&lt;/a&gt;」）とやらが口先だけではないことを示したとも言えます。そして、great desktopsにはiMacだけではなく、少なくともMac Proは入っているらしいことも。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、やはり私としてはもっとも気になるのはMac miniの来週です。これについては、「&lt;a class="link" href="https://www.macrumors.com/2017/04/04/apple-says-mac-mini-is-important/" target="_blank" rel="noopener"&#10; &gt;Apple Says Mac Mini is &amp;lsquo;Important&amp;rsquo; But Remains Tight-Lipped About Future Updates - Mac Rumors&lt;/a&gt;」の記事で、フィル・シラーのコメントが紹介されています。うーん、Mac miniは重要であるとは言うものの、それ以上何かあるわけではない。&lt;/p&gt;&#10;&lt;p&gt;まぁ、元々口先で語られることなど信用できないものです。&lt;strong&gt;メーカーなら、言葉ではなく製品でもって示してほしい&lt;/strong&gt;。そして現実は、2014年のMac miniは4コアがなくなったこと、内部拡張性が下がったこと、そしてそれ以来2017年4月現在まで、何一つアップデートされていないこと。そうである以上、来週の希望などもたないほうが気楽というものです。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、今回のMac Proのマイナーアップデート、そして刷新の計画と合わせて考えると、great desktopsとやらの計画を多少は信じていいような気がします。問題は、そのgreat desktopsの中にMac miniが入っているのかどうかなのですが。&lt;/p&gt;&#10;&lt;p&gt;正直言って、だいぶ諦めていました。しかし、今回のことが、もしApple内でMacの方向性が変わりつつあることを示しているのであれば、ちょっと期待してもいいのかなと、またそんな淡い希望を抱いています。Mac miniはプロユースとは言えませんが、自分でディスプレイを選べますし、拡張性もある程度はあるので、これはこれで便利で可愛いものです。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5188&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;505&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/04/ac08b80cdbce3b6d148d155a08a4a6d4.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;何か色々繋がっていて中身も色々入れ替わっているコンパクトで可愛い私のMac mini 2012[/caption]&lt;/p&gt;&#10;&lt;p&gt;ここ数年のMacはちっとも楽しくなくて、そして今の方向の進化（と言っていいんだろうか？）を続けるなら、そのうちにMacを使わなくなる日も来るかもな、なんて思っていたほどなのですが、もしそれがまた変わりつつあるのであれば、Mac miniにも良い変化をもたらすかもしれない。Mac miniはディスプレイのないMacBookじゃないんだよ、というところを見せて欲しいものです。&lt;/p&gt;</description></item><item><title>これからPC買う学生さんは理工系ならMac、文系ならChromebookでいいと思いますよ</title><link>https://hack-le.com/korekarapc/</link><pubDate>Tue, 04 Apr 2017 11:44:15 +0900</pubDate><guid>https://hack-le.com/korekarapc/</guid><description>&lt;p&gt;春ですね。なまじっかスマホやタブレットがあるばかりに、最近の学生さんはPCを持っていない人も多いそうですが、買いましょう。親御さんに補助してもらうのもよいでしょう。役に立ちますし、何よりもお値段以上に遊べます。&lt;/p&gt;&#10;&lt;h2 id="pc不要論について"&gt;PC不要論について&#10;&lt;/h2&gt;&lt;p&gt;昨今、PCはもはや不要という声もチラホラ出てきました。確かに、昨今のスマホはヘタなモバイルノートPCよりもハイスペックですし、スマホの画面はいくらなんでも小さいということであればタブレットという選択肢もあります。&lt;/p&gt;&#10;&lt;p&gt;初代iPadが出たのは私が学生時分の2010年で、あの頃のタブレットはまだまだマシンパワーも低く、解像度も荒くて、メインにはなりがたいものでした。しかし2017年にもなると、先日発売された第5世代iPadなどはあと10年くらいは第一線で普通に使えそうな代物になっていますし、2万円くらいの廉価な中華タブレットでも十分常用に耐えうるものが多く出ています。&lt;/p&gt;&#10;&lt;p&gt;そんではPCはいらないのかと言えば、まず理工系については間違いなくNO。PCでしかできない処理はたくさんあります。周辺機器の制御にもPCが必要です。それでは文系は、となると、これは確かにちょっと微妙なところかもしれません。しかし、&lt;strong&gt;キーボード一体型で制限のないブラウザが使えるという点で、やはりPCは必要と思います&lt;/strong&gt;。そして値段など考えると、Chromebookがいいのかな、と思います。&lt;/p&gt;&#10;&lt;h2 id="pcの利点について"&gt;PCの利点について&#10;&lt;/h2&gt;&lt;p&gt;PCのスマホやタブレットに対する利点をもう少し詳しく、私が思う大きなところを3つ、あげます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;大きな画面とキーボード&lt;/li&gt;&#10;&lt;li&gt;Webブラウザ&lt;/li&gt;&#10;&lt;li&gt;PC専用のソフトとハード&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;画面が大きいことによるメリットは言うまでもないのですが、キーボードはどうでしょうね。あのわけのわからんキー配置を覚えて、ブラインドタッチができるようになるまでの労苦があり、少なくとも「直感的」とはどう考えても言えない入力機構です。&lt;/p&gt;&#10;&lt;p&gt;しかし、今のところ、人類が最も速く楽に文字を入力することが出来る機器はキーボードです。スマホのフリック入力は革新的で、まぁまぁ速く、少なくともキーボード一本指打法よりかは良いのですが、しかしキーボードの打鍵速度と比べると、自転車とバイクくらい違います。特に記号が交じりだすとなかなか。レポートなど長文を入力するなら、やはりキーボードがよい。&lt;/p&gt;&#10;&lt;p&gt;そんなら、タブレットにキーボードを取り付けたら良いじゃないかという向きもありますが、これは漢字変換で気に入らないところがありますし、なにより毎回キーボードを取り付けるのが面倒臭い。ではキーボードカバーを常時取り付ければという考えもありますが、それこそ最初から素直にノートPC買いなされ、という話です。&lt;strong&gt;キーボードがあるのがPCのメリットなら、キーボードがないのがタブレットのメリットだと言えます。&lt;/strong&gt; メリットを殺しちゃいかん。&lt;/p&gt;&#10;&lt;p&gt;そして大きいのが、Webブラウザ（SafariやChrome、Firefox、IEなど）の本領を発揮できるということ。スマホやタブレットのWebブラウザは拡張機能などに制限がありますが、PCのWebブラウザにそんな制限はなく、あまりにも高機能でなんでもできてしまうので、一時はもうWebブラウザだけでいいんじゃないの？という考えが流行ったほど。その極致にChromebookがあります。&lt;/p&gt;&#10;&lt;p&gt;また、PCでしか使えないソフトウェア、PCでしか制御できないハードウェアの利用は、理工系ならば必須です。マニアックなソフトウェアや機器を使うことになります。文系だと、人によりけりかも。&lt;/p&gt;&#10;&lt;p&gt;…一点。そういうマニアックなものには、Windowsのみ対応というものも少なくないのですが、その点を考慮しても、そういったものは結局学校にあるPCを使うということが多いので、個人の持つPCとしては、私はやはりMacを勧めますよ。&lt;/p&gt;&#10;&lt;h2 id="何を買えばいいか"&gt;何を買えばいいか&#10;&lt;/h2&gt;&lt;p&gt;では、PCを買うとして、何を買うのがよいのか。大いに悩めばよいのですけれど、オススメなのは、理工系ならばMac、文系ならChromebookです。&lt;/p&gt;&#10;&lt;p&gt;理工系ならば開発環境を作る必要がありますが、それが楽なのがMacです。ノートパソコンで一番安いMacBook Airでも10万円とちょっと値が張りますが（もうラインナップから消えそう）、理工系にとってPCは商売道具なので、しゃあないですね。&lt;/p&gt;&#10;&lt;p&gt;一方文系ならば、必ずしも理工系のようにマニアックなことをするわけではないので、何も高いものを買う必要はありません。安いPCはいくらもあります。&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;この安いPCというのがクセモノです。2017年現在でも、やはり安いPCには安いなりの理由があります&lt;/strong&gt;。具体的には、挙動がめちゃ遅かったり、すぐに固まって動かなくなったり。イライラします。イライラすると、使わなくなります。ダメな循環です。&lt;/p&gt;&#10;&lt;p&gt;では、やはりそれなりのものを買うべきなのか。そこで登場するのがGoogle様が世に問うたChromebook。&lt;/p&gt;&#10;&lt;p&gt;Chromebookは、Webブラウザ最強だからもうWebブラウザさえ使えればいいんじゃないの、という思想をOSレベルにまで広げた、非常に尖ったデバイスです。上述のPCのメリット3、PC専用のソフトやハードについてはほぼ使えませんが、用途が限られているだけに、安い低スペックPCでも比較的快適に動作するという特徴があります。いや、最近のChromebookはAndroidアプリも使えるので、ある意味ハイブリッドかも。&lt;/p&gt;&#10;&lt;p&gt;ただ、ChromebookはMacと違い選択肢が多く、何を選べばよいのかが難しい。もっとも、少し前は日本だとほぼ選択肢がないような状況が続いていたので、選択肢があるのは嬉しい状況です。で、何を選べばよいのかは「&lt;a class="link" href="http://chromesoku.com/choice-of-chromebook-2017/" target="_blank" rel="noopener"&#10; &gt;後悔しないChromebook選び 2017 | Chrome速報&lt;/a&gt;」の記事がたいへん参考になります。&lt;/p&gt;&#10;&lt;p&gt;まぁ、私が今の学生に薦めるのであれば、そんなところです。&lt;/p&gt;&#10;&lt;h2 id="人に言えないものがたくさんある人もpc"&gt;人に言えないものがたくさんある人もPC&#10;&lt;/h2&gt;&lt;p&gt;ついでなので最後に閑話という名の（理解されない）本題。&lt;/p&gt;&#10;&lt;p&gt;あれこれと書いてきましたけれど、Chromebookはあくまでコスト上の観点から勧めているだけで、本音を言えば、やはりあらゆる人がMac,Windows,Linuxなどを搭載したPCを1台はを持つべきだと思っています。&lt;/p&gt;&#10;&lt;p&gt;その理由は、手元でデジタルデータを管理するのに必要だからです。私がもっとも重視していることです。&lt;/p&gt;&#10;&lt;p&gt;クラウドという言葉が流行って随分経ちました。スマートフォンやタブレット、またChromebookも、クラウドの利用を前提としたものです。このクラウドは便利なものですが、一つ注意しなくてはいけないことは、自分の財産であるデジタルデータを顔も知らない他人に預けているということです。&lt;/p&gt;&#10;&lt;p&gt;それはデータを人質に取られているようなものです。人に言えない動画とか画像とかをたくさん持っている人もいるかと思いますが、それらがある日突然消されたらどうでしょう。ありえない？ありえます。あったようです（参考「&lt;a class="link" href="http://kettya.com/2014/log022611545.htm" target="_blank" rel="noopener"&#10; &gt;蹴茶: クラウドの罠 アカウント自動削除のリスク [2014.2.26]&lt;/a&gt;」…この例はいわゆる誤爆なのですが）。&lt;/p&gt;&#10;&lt;p&gt;データは財産です。己の軌跡です。人生です。クラウドを利用するのは結構ですが、最終的な管理は自分のもとでなされるべきです。そしてそのためには、PCが必要です。&lt;/p&gt;</description></item><item><title>iPad新型(2017)出ましたね。これからタブレット買う人にはオススメです</title><link>https://hack-le.com/ipad2017/</link><pubDate>Sun, 26 Mar 2017 02:51:37 +0900</pubDate><guid>https://hack-le.com/ipad2017/</guid><description>&lt;p&gt;しれっとiPadの新型が出ましたね。ようやくAirの尾が取れて、無印iPadとなりました。まぁiPad Air 2とくらべてどうかと言われると大して変わらないんですが、iPad Air 2自体が既に完成していましたので…。iPad Air 2は2015年で私のもっとも満足度が高かった買い物の一つです。&lt;/p&gt;&#10;&lt;p&gt;ということで、買い替えとしては微妙ですが、これからタブレットを買う人にはオススメできる一品。iPadは総合的な完成度が本当に高い。&lt;/p&gt;&#10;&lt;h2 id="ipad-air-2は素晴らしいデバイス"&gt;iPad Air 2は素晴らしいデバイス&#10;&lt;/h2&gt;&lt;p&gt;iPad Air 2を購入して2年になります。iPad Air 2は、2015年に購入してもっともよかったデバイスです。本を読むには荒々しかったRetina以前の初代iPad、マシンパワーに問題があった新しかったiPad 3を経て、iPadはAirでついに完成したのだなぁと強く思います。iPad Air 2は使い勝手のよい指紋認証を搭載してもはや死角なし。たいへん素晴らしいデバイスになりました。&lt;/p&gt;&#10;&lt;p&gt;数ヶ月前に、iPadより少し安い値段で売られていた(4万円也)、AndroidのハイスペックタブレットKALOS 2を買いました。そのレビュー記事が「&lt;a class="link" href="https://hack-le.com/kalos2/" &gt;ハイスペックAndroidタブレット、KALOS 2を使って2週間目の使用感（追記あり）&lt;/a&gt;」です。Android 6.0、有機ELディスプレイのWQXGA、オクタコア、メモリ3GB、重量430gと、スペックを見ればiPad Air 2を圧倒するハイスペック端末です。microSDが使えるのも大きい。しかしながら、この&lt;strong&gt;KALOS 2を使えば使うほど、iPad Air 2の素晴らしさがよくわかりました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;KALOS 2は決して悪いデバイスではありません。値頃でハイスペックなAndroidタブレットを探しているのであれば、十分オススメできるものです（といっても、メーカーの社長に不幸があったため国内撤退し、既に入手困難っぽいですが）。&lt;/p&gt;&#10;&lt;p&gt;しかし、iPadと比べると……。たとえば画面の綺麗さですが、KALOS 2は鮮やかではあるもののちょっと鮮やか過ぎるうえ、暖色が強すぎたのですが、iPadはそのようなこともなく美麗な画面です。また、KALOS 2は調光に難のあるところがあり、たとえば寝転がってうつ伏せになって使うと、私の影に反応してしまうのか、突然暗くなりすぎるということがあります。そういうこともiPadではありません。また音について、KALOS 2の音は悪くはないのですが、iPadの音と比べると…iPadはいい音出していたのだなぁと思いました。挙動についても、KALOS 2はブラウザやゲームの画面遷移などちょっとしたところで引っかかりを感じることがよくありますが、iPadはこれが実にスムーズです。デザインも、KALOS 2は第一印象こそ悪くなかったものの、ずっと使っていると少しばかりチープに感じることがありますが、iPadはいつ手に持ってもたまらない質感がある。iPadのほうがやや重いのですが、それさえ高級さの証明であるように感じられて、どこか心地いい。ホームボタンがあるためiPadは上下左右がハッキリしており、暗闇でも手探りが向きがわかりやすいのもよい。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;つまり、いちいち細かいところでiPadの素晴らしさを実感する&lt;/strong&gt;のです。細かいところというのは、普段使っていて気になるところです。大手の通り一遍のレビューからはわからないところです。でも、&lt;strong&gt;一番大切なところ&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;繰り返しますが、KALOS 2は決して悪いデバイスではありません。iPadを使っていなければ、上にあげつらった点もさほど気にならなかったものと思います。しかし、iPadを使っていると、iPadの良さが際立つ。&lt;strong&gt;スペックからは見えない使い勝手の良さが、iPadにはあります&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;…なんでKALOS 2などというマイナーな機体との比較を延々書いたかというと、実はこの記事は元々KALOS 2の長期レビューの記事として書いていたのですが、iPadと比較して記事を書いていたところ、途中からiPad礼賛記事みたいになってしまったので、iPad新型発売と合わせて記事の趣旨を変えたのです。それほどiPadは素晴らしいということなのですよ。&lt;/p&gt;&#10;&lt;p&gt;……一つフォローしておくと、AndroidはiOSにはない自由さがあります。ですから、「Androidであること」に価値を見出すのであれば、KALOS 2をはじめ、iPadと競合するハイスペックAndroidタブレットには選択肢に入ります。実際、私はKALOS 2を気に入っており、iPadと一緒に充電台で仲良く充電されています。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/add6e84b296c241b36ffedfe20eeb6e5.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;仲良く充電、ついでにKindleも（iPadの影に隠れてiPhoneも…Xperiaは写真撮影のため欠席）&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="新型ipad2017は代わり映えしないが"&gt;新型iPad(2017)は代わり映えしないが…&#10;&lt;/h2&gt;&lt;p&gt;長々と、旧世代機にあたるiPad Air 2の良さを語ってしまいましたが、まぁ私は新型iPadを使っていないのだから仕方ありません。また、購入予定もありません。&lt;/p&gt;&#10;&lt;p&gt;デザインが変わらないのはもちろん、スペックを比較しても、ほとんど代わり映えしていないからです。CPUが少しよくなったくらいか。でも、iPad Air 2でも既に十分過ぎるほどよく動いてくれているので、まぁたいした変化とは言えません。重量は437-&amp;gt;469と重くなってますが、これはバッテリーが27.3Wh-&amp;gt;32.4Whの影響でしょうし、良し悪しですね。私は軽いほうがいいですが…。とはいえ、これもあまり差があるとは言い難いところではあります。&lt;/p&gt;&#10;&lt;p&gt;2017年の新型が2014年に発売されたデバイスと代わり映えしないという事実は、少なからぬ人を失望させたようです（Mac mini使いとしてその気持ちはすごくわかる）。しかしながら、より上位のデバイスとしてProがあるわけですし、またiPad Air 2は2017現在でも、最新機種に引けを取らない（実際KALOS 2は2016年のデバイス）素晴らしいデバイスであることは保証できます。&lt;/p&gt;&#10;&lt;p&gt;したがって、既に満足できるタブレットを持っている人が買い替えるようなものではありませんけれど、これからタブレットを購入する人にとっては、たいへんオススメのデバイスです。少しは値下げもされましたしね。&lt;/p&gt;&#10;&lt;p&gt;しかしiPadは値頃なのに、同時にきたiPhone SEがドル円換算でやけに高い（130円超え）のは謎です（参考「&lt;a class="link" href="http://japanese.engadget.com/2016/03/27/iphone-se/" target="_blank" rel="noopener"&#10; &gt;更新：日本のiPhone SEは高いから海外で買おうガイド(旅人目線のデジタルレポ 中山智) - Engadget 日本版&lt;/a&gt;」）。Appleはあまり差をつけないんですが……。&lt;/p&gt;</description></item><item><title>Macの「書類」とか「ピクチャ」を英語表記にする(El Capitan)</title><link>https://hack-le.com/mac-rm-localized/</link><pubDate>Sun, 26 Mar 2017 01:34:08 +0900</pubDate><guid>https://hack-le.com/mac-rm-localized/</guid><description>&lt;p&gt;Mac、OSX 10.11 El Capitanにおいて、「書類」「ピクチャ」「ミュージック」など、フォルダの表記が日本語になっているものを英語にするメモ。&lt;/p&gt;&#10;&lt;h2 id="やり方"&gt;やり方&#10;&lt;/h2&gt;&lt;p&gt;Macでは、最初からあるいくつかのフォルダが日本語名になっています。「書類」「ピクチャ」「ムービー」「デスクトップ」などです。これを英語表記に直したい。環境はOSX 10.11。&lt;/p&gt;&#10;&lt;p&gt;やり方は簡単で、「&lt;a class="link" href="http://qiita.com/is0me/items/0b7b846f1f0860629950" target="_blank" rel="noopener"&#10; &gt;Macのディレクトリを英語にする - Qiita&lt;/a&gt;」の記事のとおりでした。ありがとうございます。&lt;/p&gt;&#10;&lt;p&gt;具体的には、&lt;strong&gt;日本語表記になっているフォルダ内に、「.localized」という隠しファイルがあるので、それを削除したらOK&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5113&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;390&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/8b8687b7d0bfebfebcb69fc2ee55636f.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;英語表記のDesktopとDocumentsとDownloads[/caption]&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;元に戻したくなったら、元に戻したいフォルダ内にて、「.localized」の空ファイルを作成すればよいです。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Macでカレントディレクトリ内のpngを一括でjpgに変換する(逆も同じ)</title><link>https://hack-le.com/png2jpg/</link><pubDate>Wed, 22 Mar 2017 01:18:14 +0900</pubDate><guid>https://hack-le.com/png2jpg/</guid><description>&lt;p&gt;Macで、ターミナルよりカレントディレクトリにあるpngファイルを一括でjpgに変換します。逆も同じです。Macというよりbashですが。。。&lt;/p&gt;&#10;&lt;h2 id="準備"&gt;準備&#10;&lt;/h2&gt;&lt;p&gt;定番のImageMagickを使います。Homebrewでインストールするのが楽です。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://brew.sh/index_ja.html" target="_blank" rel="noopener"&#10; &gt;Homebrew — macOS 用パッケージマネージャー&lt;/a&gt;&lt;/p&gt;&#10;&lt;pre&gt;`brew install imagemagick`&lt;/pre&gt;&#13;&#10;&lt;h2 id="使用例"&gt;使用例&#10;&lt;/h2&gt;&lt;p&gt;たとえば、.pngファイルを.jpgファイルに変換するのは以下です。&lt;/p&gt;&#10;&lt;pre&gt;`for f in ./*.png; do convert "$f" "${f%.png}.jpg"; done`&lt;/pre&gt;&#13;&#10;&lt;p&gt;convertコマンドでpngをjpgに変換します。ダブルクォートをつけているのは、パス名に空白などが混じっていると、そこが区切りだと思われてしまうからです。${f%.png}.jpgは、${f}の末尾から.pngに最短一致する部分を取り除くという意味です(参考「&lt;a class="link" href="http://d.hatena.ne.jp/zariganitosh/20100921/get_file_name_ext_dir" target="_blank" rel="noopener"&#10; &gt;ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた&amp;hellip;。&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;スマホのスクリーンキャプチャ画像を一括してjpg変換する時に私はよく使っています。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5104&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;568&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/639acdd2f407a2e18bc2056131d56dbf.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;一括変換[/caption]&lt;/p&gt;&#10;&lt;p&gt;Dropboxのカメラアップロード機能はとても便利です。&lt;/p&gt;&#10;&lt;p&gt;jpgに変換する際、convertコマンドに-quality 100としてやることで、画像の劣化を最小限に抑えることもできます（参考記事「&lt;a class="link" href="http://qiita.com/tadsan/items/e718cf3a90fc29f61107" target="_blank" rel="noopener"&#10; &gt;コマンドラインから画像形式を変換する - Qiita&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;pngは結構取り扱いしづらいので、pdfに変換する時などは一度jpgに変換してからのほうがやりやすかったりします（参考「&lt;a class="link" href="https://hack-le.com/47521355-2/" &gt;Macで複数のpngファイルをpdfに変換する&lt;/a&gt;」）。当然、変換するほど画質は劣化するのですが。。。&lt;/p&gt;&#10;&lt;p&gt;jpg-&amp;gt;pngは、上記コマンドのpngとjpgを逆にします。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>いまさらXperia Z3 SO-01GをAndroid 6.0にアップグレード</title><link>https://hack-le.com/z3-6/</link><pubDate>Sun, 19 Mar 2017 15:07:45 +0900</pubDate><guid>https://hack-le.com/z3-6/</guid><description>&lt;p&gt;実にいまさらですが、Xperia Z3 SO-01GをAndroid 6.0にアップグレードしました。特に際立ったトラブルもなく使えています。挙動は早くなったような気がしますが、気がするだけかもしれない。バックグラウンドで動いていたと思われるアプリの中には、頻繁にクラッシュするようになったものもありますが、特に実害はない感じです。&lt;/p&gt;&#10;&lt;h2 id="z3ともうしばらく付き合うと決めたので"&gt;Z3ともうしばらく付き合うと決めたので&#10;&lt;/h2&gt;&lt;p&gt;Android 7.0が出て久しいのですが、いまさらOSをアップグレードしました。昔はOSのアップグレードと聞くとワクワクしたものですが、今は面倒な気分のほうが大きいのは、歳のせいでしょうか。感覚的には、以前とは違い現状で十分なものだからだというのが正直なところですが、私が学生時分にもそのようなことを言う大人は多くいたことを思うと、私もつまらんやつだと当時思っていた人たちの仲間入りしたということかもしれません。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、古いOSを使い続ける危険性については、それなりに承知しているつもりですし、また一ユーザーにとっては既存の環境で問題ないと思えても、開発者からすると古いOSを使うユーザーに合わせるため、便利なAPIが使えず不便な思いをすることがあることもわかっていますので、まぁできる限りアップデートにはついていくべきだとも思っています。&lt;/p&gt;&#10;&lt;p&gt;それで、次はiPhoneにしようかななどと思いつつも、少なくともあと半年以上は、あるいはもっと長く、このXperia Z3を使うことに決めたので、Xperia Z3のDoCoMo版であるところ、SO-01Gで使えるもっとも新しいAndroidのバージョン6.0に、アップグレードさせることにしました。&lt;/p&gt;&#10;&lt;h2 id="アップグレードに多少手間取る"&gt;アップグレードに多少手間取る&#10;&lt;/h2&gt;&lt;p&gt;いざアップグレードにさせようとしたとき、ちょっと手間取りました。というのも、Xperiaシリーズは、SonyからXperia Companion（旧PC Companion）というソフトウェアが出ていて、それを使ってPCとデバイスを直接繋げて、バックアップをとったり、アップデートをしたりすることができるのですけれど、このXperia Companionを用いた6.0へのアップグレードに、SO-01Gが対応していなかったのです。&lt;/p&gt;&#10;&lt;p&gt;となると、デバイスのソフトウェアアップデート機能を使うしかないのですが、これが中々うまくいきませんでした。色々調べると、どうやらドコモIDが必要であるとのこと。うーん。&lt;/p&gt;&#10;&lt;p&gt;私はIIJを使っているので、ドコモユーザーではありません。ですが、これも調べてみると、どうやらIDの取得だけであれば、PCのメールアドレスでもできるらしい。ちょっと何かしようとすると、すぐにネットワーク暗証番号（ドコモ契約時に設定する…当然契約していないのでなにもない）を求められて手詰まりですが、IDの取得だけはなんとか。&lt;/p&gt;&#10;&lt;p&gt;それで、ドコモIDを取得すると、なんとか無事ソフトウェアアップデートができるようになります。この時、ダウンロードを中断して、SSIDを変えて再開すると、これはまたエラーになるようですね。&lt;/p&gt;&#10;&lt;p&gt;それで、ようやくアップグレード完了です。ここまで長かった。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5063&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;490&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/05a98f30f1618583192e4ce526ab6b3e.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;6.0.1になりました[/caption]&lt;/p&gt;&#10;&lt;p&gt;字面にするとたいしたことはしていないのですが、ここに至るまで、えらい時間がかかりました。ドコモじゃないとAndroid 6.0にはできないのだろーか、などと思ったほどです。まぁなんとかなってよかった。それにしても、ドコモ系のアプリの鬱陶しさときたら。。。次は絶対にSIMロックフリーのものを買おう……。&lt;/p&gt;&#10;&lt;h2 id="特に問題はないがクラッシュ頻発のアプリがある"&gt;特に問題はないがクラッシュ頻発のアプリがある&#10;&lt;/h2&gt;&lt;p&gt;さて、その後のAndroid 6.0ですが、特に大きな問題はないようです。良くなったことも特にはない…いや、画面遷移などが早くなったような気がします。これが、エフェクトが短くなってそう感じるだけなのか、本当に早くなったのか、なんともわかりません。少なくとも遅くなってはいない。&lt;/p&gt;&#10;&lt;p&gt;気になるのは、いくつかのアプリがクラッシュすることです。それも、バックグラウンドで動いている時に。具体的に言いますと、&lt;strong&gt;三井住友銀行アプリが頻繁に落ちます&lt;/strong&gt;。銀行のアプリはあまり使いたくないんですが、SMBCはWebで通帳を見ようとすると、謎のエラーが出て見られないということがあるので、残高を見る時はアプリを使っています。アプリ自体は使えるのですけれど、これが他のアプリを使っている時に定期的に「クラッシュしました」とレポートしてくるのが鬱陶しい。&lt;/p&gt;&#10;&lt;p&gt;後は、Chromeが時々クラッシュします。これもバックグラウンドの時です。使っている時に落ちる、ということはありません。落ちるというと、真っ先に思い浮かぶのはメモリですが、3GBは十分なメモリ量だと思いますし、なによりバックグラウンドの時に落ちるというのはなんでしょうね。&lt;/p&gt;&#10;&lt;p&gt;それくらいでしょうか。Android 6.0といえば、SDカードの内部ストレージ化が面白い機能ですけれど、Xperia Z3では無効化されています。無理矢理有効化させることはできるようなので、内部ストレージがにっちもさっちもいかなくなったら試してみようかとは思いますが、安定して運用できるのかどうか微妙そうなので（情報が少ない…）、当面様子見です。&lt;/p&gt;&#10;&lt;p&gt;兎にも角にも、ようやくAndroid 6.0になりました。なんのかんのいって、Xperia Z3は良いデバイスです。もうちょっと頑張ってもらいましょ。&lt;/p&gt;</description></item><item><title>MacでXperia Z3(SO-01G, ドコモ版)のテザリングを有効にする（Android 6.0確認）</title><link>https://hack-le.com/so01gtethering/</link><pubDate>Sun, 12 Mar 2017 17:53:42 +0900</pubDate><guid>https://hack-le.com/so01gtethering/</guid><description>&lt;p&gt;ドコモ版のXperia Z3、SO-01Gは、格安SIMで運用している場合、デフォルトではテザリングができません。「&lt;a class="link" href="http://app-roid.com/blog-entry-1498.html" target="_blank" rel="noopener"&#10; &gt;ドコモ版XPERIA Z3（SO-01G）でMVNOのIIJmioでテザリングを有効化させる手順 お得生活大辞典&lt;/a&gt;」で、テザリングを有効化させる手順がありますが、Windows利用前提なので、本記事ではMacの場合について記述します。&lt;/p&gt;&#10;&lt;h2 id="ざっくり概要"&gt;ざっくり概要&#10;&lt;/h2&gt;&lt;p&gt;まず端末はXperia Z3 SO-01Gです。Android 6.0で確認しましたが、5.0でも同じと思います。6.0で特に支障がない感じなので、さしたる理由がなければいい加減6.0にしてしまっていいと思いますが。&lt;/p&gt;&#10;&lt;p&gt;ざっくり、以下の手順が必要です。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Android SDKをインストールする&lt;/li&gt;&#10;&lt;li&gt;端末のUSBデバッグをONにする&lt;/li&gt;&#10;&lt;li&gt;ADB Driverをインストールする # いらないかも&lt;/li&gt;&#10;&lt;li&gt;adbで端末の設定を変更する&lt;/li&gt;&#10;&lt;li&gt;テザリングできることを確認する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;WindowsとMacで異なるところは、本質的にはありません。「&lt;a class="link" href="http://app-roid.com/blog-entry-1498.html" target="_blank" rel="noopener"&#10; &gt;ドコモ版XPERIA Z3（SO-01G）でMVNOのIIJmioでテザリングを有効化させる手順 お得生活大辞典&lt;/a&gt;」の有難い記事にあるとおりなのですが、表面的な手順が異なります。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;手順を書きます。&lt;/p&gt;&#10;&lt;h3 id="android-sdkのインストール"&gt;Android SDKのインストール&#10;&lt;/h3&gt;&lt;p&gt;Android SDKのインストールは、AndroidのGoogle公式開発環境である、Android Studio経由が一番楽だと思います。これだけのためにAndroid Studioを入れるのは大仰かもしれませんが。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://developer.android.com/studio/index.html" target="_blank" rel="noopener"&#10; &gt;Android Studio と SDK ツールをダウンロードする | Android Studio&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;インストール記事はたくさんあるので、ここでは詳細は省きますが、参考記事をあげておきます。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://qiita.com/shuntaro_tamura/items/371b7b6427734355f3bd" target="_blank" rel="noopener"&#10; &gt;[Mac OS X]Android開発環境を構築する - Qiita&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="端末のusbデバッグをonにする"&gt;端末のUSBデバッグをONにする&#10;&lt;/h3&gt;&lt;p&gt;「設定」→「端末情報」→「ビルド番号」を数回タップで開発者向けオプションが使えるようになります。「開発者向けオプション」→「USBデバッグ」をONにします。&lt;/p&gt;&#10;&lt;h3 id="adb-driverをインストールする"&gt;ADB Driverをインストールする&#10;&lt;/h3&gt;&lt;p&gt;※この項目は、本当に必須か検証できていません。なくてもいけるんじゃなかろうかという気もします。まぁでも、Xperia使うならXperia Companionはインストールしといていいんじゃないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;Sonyの公式サイト「&lt;a class="link" href="http://www.sonymobile.co.jp/support/software/xperia-companion/" target="_blank" rel="noopener"&#10; &gt;Xperia Companion | サポート | ソニーモバイルコミュニケーションズ&lt;/a&gt;」より、Xperia Companion(旧PC Companion)をダウンロードします。ソフトウェアを実行したら、SO-01GとMacをUSB接続します。そうしたら、ドライバが自動的にインストールされるらしい。&lt;/p&gt;&#10;&lt;h3 id="adbで端末の設定を変更する"&gt;adbで端末の設定を変更する&#10;&lt;/h3&gt;&lt;p&gt;接続したまま、ターミナルを開きます。で、adbを実行して端末の中に入るのですが、adbのあるフォルダにPATHを通していない場合、adbコマンドのある場所を指定してやらないといけません。Android Studio経由の場合、恐らく~/Library/Android/sdk/platform-toolsではないかと思います。そこにあると仮定して、コマンドは以下。&lt;/p&gt;&#10;&lt;pre&gt;`$ cd ~/Library/Android/sdk/platform-tools&#13; $ ./adb shell&#13; -&gt; 端末に入る&#13; shell@SO-01G:/ $ settings get global tether_dun_required &#13; 1&#13; -&gt; 1がテザリング無効の状態なので、これを0にする&#13; shell@SO-01G:/ $ settings put global tether_dun_required 0 &#13; shell@SO-01G:/ $ settings get global tether_dun_required &#13; 0&#13; -&gt; 0になっていることを確認&#13; shell@SO-01G:/ $ exit&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;参考までに画面を。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4962&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;439&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/bdf024082787c59f37c6e3d49a632967.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;adb shellの実行画面[/caption]&lt;/p&gt;&#10;&lt;p&gt;終わったら、USB接続をやめて、いよいよ有効化の確認です。&lt;/p&gt;&#10;&lt;h3 id="テザリングできることを確認する"&gt;テザリングできることを確認する&#10;&lt;/h3&gt;&lt;p&gt;「設定」→「その他の設定」→「テザリング」より、テザリングを有効化させて、他の機器で繋げられることを確認します。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="まだまだ働いてもらうよー"&gt;まだまだ働いてもらうよー&#10;&lt;/h2&gt;&lt;p&gt;ロックマンみたいになってきたXperia、私にはもはや何が一番新しいのかわからない今日この頃ですが、Xperia Z3はまだまだ現役。ROM容量32GBが小さすぎる悩みを抱えつつ（SDカードにうつせるものばかりじゃないですからねー。内部ストレージ化する方法もネットにはありますが、安定性等考えて最終手段としてとっておきたい）、概ね満足しており、まだまだ頑張ってもらいたいところです。&lt;/p&gt;</description></item><item><title>RyzenでIntel焦ってMac mini大復活とかいう桶屋論法で来週の希望を捨てない</title><link>https://hack-le.com/ryzenintelokeyamini/</link><pubDate>Thu, 09 Mar 2017 21:37:52 +0900</pubDate><guid>https://hack-le.com/ryzenintelokeyamini/</guid><description>&lt;p&gt;最近PC界隈を賑わせているニュースといえば何と言ってもAMDの新作CPU、Ryzenです。Intelの半額でより高性能という触れ込みでしたが、AMDがAMDでAMDなので、眉唾な態度で様子を伺っていた人も多かったと思います。が、発売されて各人のレビューも出揃って、どうも今回は本物みたいだ、AMD復活という機運が高まり、口の悪い人はIntel焦ってると喜び、そして私はMac mini復活の夢を夢想する。&lt;/p&gt;&#10;&lt;h2 id="今度は本物"&gt;今度は本物&#10;&lt;/h2&gt;&lt;p&gt;AMDのRyzenが遂に発売されました。レビューも出揃い、どうやら今回は前評判に違わぬ出色の出来であることがわかってきました。もっとも、「ゲーム用途」では触れ込みほどではなく、必ずしもIntelに勝るわけではない、ということも示唆され、まぁ作り込みはこれからにしても、現時点において必ずしもすべての面で圧倒的にRyzenというわけではないこともわかりました。&lt;/p&gt;&#10;&lt;p&gt;しかし、私などはあまりうまく行き過ぎていると逆に不安になる性質ですから、これはむしろ安心材料という風にも考えられるのです。本当にあらゆる面でIntelを圧倒しているという情報ばかりだと、そんないいことばかりなはずがないとか、これから何かあるんじゃないのかとか、そういうネガティブなことを考えてしまいます。ですから、勝てないところもあるという話は、逆に「その程度の話なんだな」と思えるのです。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、私としてもRyzenには大いに興味そそられるところであり、冷めきっていた私の中の自作熱にまたなんとなく熱を感じるような今日この頃。最近のPCの停滞感は、AMDの停滞故だったのでしょうか。AMDの役割は大きかったのですねぇ。&lt;/p&gt;&#10;&lt;h2 id="でもmacユーザーだし"&gt;でもMacユーザーだし&#10;&lt;/h2&gt;&lt;p&gt;とは言っても、私はMacユーザーで、その呪縛から逃れることは当分できそうもありませんから、今後実際に組むかは微妙なところです。家で母用にしているマシン（AMDのA8-3870Kを使っています）が壊れたら、考えるかもしれませんが、まぁメインはまだ当分Macにせざるを得ないでしょう。&lt;/p&gt;&#10;&lt;p&gt;となると、今現在のMacはIntelと結託していますから、必然的にまだまだIntelユーザーとなります。しかし、AMDが頑張ればIntelも対抗しないわけにはいきません。「Intel CPUが安くなるからAMD頑張れ」とは時折見るあまりにも穿った論法ですが、皆がCPUを選択できるわけでもないので、一理あるわけです。&lt;/p&gt;&#10;&lt;p&gt;私は値段が安くなるかどうかは微妙なところだと思いますが、Ryzenのあからさまな多コア戦略を前に、しかもそれが功を奏しているとあっては、Intelの戦略にも変化が表れ、次にMac miniに搭載されるだろうCPUも再びクアッドコア化されるようなことはないだろうか、と期待しています。ならばそう、&lt;strong&gt;AMD大復活とはつまりMac mini大復活&lt;/strong&gt;！&lt;/p&gt;&#10;&lt;p&gt;……などと言いつつも、これはMac mini 2014が2コア化したのはソケットの問題であるという（Intelのラインナップのせい）という推論に基づいていますが、これについては「&lt;a class="link" href="http://kamosidhe.hatenablog.com/entry/Socket_is_not_the_reason_of_Mac_mini_Late_2014s_2_core_only_lineup" target="_blank" rel="noopener"&#10; &gt;Mac mini Late 2014が2コアCPUのみになったのはソケットが原因ではない - kamosidheのブログ&lt;/a&gt;」のような、むしろコストや今後の展開を見据えたAppleの戦略である（つまりAppleのせい）という説得力ある反論もあり、そうだとすればやはり夢は夢ということになります。&lt;/p&gt;&#10;&lt;p&gt;もっと言えばそもそもティム・クックはMac miniの存在を忘れているというやはり説得力のある説もありますのでCPUがどうなろうがMac miniは未来永劫来ない来週に向けて永遠の刻を刻むということも十分考えられるのですがすべては仮定ですしどうせなら幸せな夢を抱いて明日を生きたい寝る。&lt;/p&gt;</description></item><item><title>脱WindowsからのLinuxは時間をかけて</title><link>https://hack-le.com/windows2linux/</link><pubDate>Sun, 05 Mar 2017 20:07:29 +0900</pubDate><guid>https://hack-le.com/windows2linux/</guid><description>&lt;p&gt;還暦の母が現在Ubuntuをメインマシンとして利用していることを、「&lt;a class="link" href="https://hack-le.com/linuxmother/" &gt;還暦の母がLinuxマシンを使い始める&lt;/a&gt;」および「&lt;a class="link" href="https://hack-le.com/montherlinux/" &gt;我が母、UbuntuがWindowsじゃないことに一ヶ月経って気づく！&lt;/a&gt;」で記事にしました。&lt;/p&gt;&#10;&lt;p&gt;あれからかれこれ三ヶ月、未だ完全に脱Windowsできているわけではないようですが、最近は閉じられたWindowsノートの蓋に、母の趣味であるキルトやらなんやらが乗っかっていることも多くなってきました。OSの移行は、時間をかけて、少しずつ。一つずつ壁を乗り越えて。&lt;/p&gt;&#10;&lt;h2 id="壁を一つずつ乗り越えていく"&gt;壁を一つずつ乗り越えていく&#10;&lt;/h2&gt;&lt;p&gt;母がWindowsノートからデスクトップのUbuntuのLinuxマシンに乗り換えてもう三ヶ月になります。PCに関しては素人の母ですから、突然なにもかもを変えられるわけはなく、Linuxマシンをメインにしながらも、傍らにWindowsノートも置いている状況でした。一時期はほとんどデュアルディスプレイ状態であったようですが、最近はノートが閉じられていることも多く、そのうえに趣味のキルトやらなんやらが乗っかっている光景も見られるようになりました。&lt;/p&gt;&#10;&lt;p&gt;ここまで、色々な問題がありました。多くは私や姉が手を出さねばならないことで、やはり一人で移行するのは難しいのだろうなとも思います。具体的には、以下のような問題がありました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;メニューバーなどの文字が小さい&#10;&lt;ul&gt;&#10;&lt;li&gt;OSの問題というより、23インチフルHDが還暦の母には小さかったという問題。しかしメニューバーの文字サイズはOSに関わること。もちろん変更できるソフトはあるので難易度は低いが、母だけでは対応できなかったものと思う。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Microsoft Officeが使えない&#10;&lt;ul&gt;&#10;&lt;li&gt;予想された問題。しかしMS Officeが使えないということに気づくまでに約一ヶ月かかっていた 笑。オフィスソフトにも色々あることが実感としてわかっていなかった模様。しかし対応を教えると（odfな拡張子を使う）、これは案外すぐに受け入れられた模様。MS Officeが使えないことはやや不満げだったが、MS Officeの値段を言うと「え、ならいいかな…」と。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;家で使っているプリンタのドライバがメーカーから提供されていない&#10;&lt;ul&gt;&#10;&lt;li&gt;汎用ドライバはあるので使えないことはないが、色味などに若干問題あり。一応昔のUbuntu用のインストールスクリプトはメーカーから公開されていたものの、14.04では実行するとエラー。頑張れば対応可能かなとも思ったが、たいへんそうだし、またこのままでも特に問題ないとのことなので、汎用ドライバを使用する。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メール&#10;&lt;ul&gt;&#10;&lt;li&gt;予想された問題。何故か姉の利用するレンタルサーバーのメールサーバーに相乗りして独自ドメインまで持っているので、サーバーの設定に姉の助力が必要だった。よくわからない人は、全員Gmailを使ってくれたらいいのになぁと思う。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ここまで解決して、今はもうほとんどの作業がLinuxデスクトップマシンで出来るようになったようで、最近はノートパソコンが置物の台座になっていることも多くなりました。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4974&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;485&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/2b0744c5590951527537c874b3c2abfb.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;いつのまにか隅っこに追いやられたWindowsノート…ここまで長かった[/caption]&lt;/p&gt;&#10;&lt;p&gt;ただまだ問題はあるらしく、今ぶち当たっている壁は、iPhoneで撮影した写真をブログに上げること、のようです。iPhoneで撮影した写真をそのままアメブロなどのブログサービスにあげると、Exif情報の反映の問題で、縦向きの画像が横向きになったりするという問題があります。&lt;/p&gt;&#10;&lt;p&gt;これについて、私の解決案はスクリーンショットによる再撮影（「&lt;a class="link" href="https://hack-le.com/ameblophoto/" &gt;iPhoneやiPodで撮影した写真がアメブロなどで横向きになる場合の対応&lt;/a&gt;」）で、実際私がこのサイトでやっていることでもあります。少ない手間で、画像の縮小、トリミング、Exif情報の削除が一気に出来る最適解だと私は考えているのですが、母にとっては必ずしもそうではない様子。ファイルが複製されていく感じが馴染めないのかな、と思います。ファイラの操作に習熟していないからでしょう。&lt;/p&gt;&#10;&lt;p&gt;より本質的には、Windowsでやっていたやり方（どうやら、編集ソフトでドットを打ち上書き保存すると、回転情報が消されるらしい…）から変えることに抵抗があるのだと思います。WindowsからLinuxに移行しようとする際、多くの人はここで引っかかるのでしょうか。今までと操作が違うということに対する抵抗。だとすると、PC初心者ほどLinuxに馴染みやすいかもしれません。なんだかちょっと皮肉です。&lt;/p&gt;&#10;&lt;p&gt;改めて覚えることの少ない母でも、三ヶ月かけて少しずつ新しい環境に移行していきました。ならば、たとえばWindows 95以来Windowsシリーズしか触ったことありませんよ！という人であれば、&lt;strong&gt;一年くらいかけるつもりで&lt;/strong&gt;、じっくりと慌てず、１つずつ、新しいやり方に馴染み、移行していくのが良いのだろうと思います。&lt;/p&gt;&#10;&lt;h2 id="linuxで困ること"&gt;Linuxで困ること&#10;&lt;/h2&gt;&lt;p&gt;ところで母にLinuxをすすめておきながら、私自身といえばMacの呪縛から逃れられずにいて、それはまだまだ続きそうです。最近はAMDのRyzenがいよいよ本物らしいなどという素敵な話題もあり、また自作熱も上がってきたような気もする今日この頃ですが、しかしそれでパフォーマンスの向上が見込めたとしても、私の場合メインにはできまいなと思います。&lt;/p&gt;&#10;&lt;p&gt;それはやはり周辺機器の問題であったり、使用しているサービスが正式に対応していなかったりという問題です。もちろん頑張ればなんとかなることも多いのですけれど、その頑張りがもはや面倒です。しかも頑張ったところで、公式の対応には及ぶべくもなく。ということで、私自身はLinuxをサブに使うことはあれど、メインとしては使わないでしょう。&lt;/p&gt;&#10;&lt;h2 id="変化に理由を求めるようになった"&gt;変化に理由を求めるようになった&#10;&lt;/h2&gt;&lt;p&gt;閑話ですが…学生時代ならば、頑張れたかもなと思います。今にして思うと、あの頃は意味のないことを今より随分積極的にやっていました。それが楽しかった。お金がなかったということもあります。けれど、今はお金より時間が惜しい。頑張ることそのものに喜びも見いだせなくなってきました。&lt;/p&gt;&#10;&lt;p&gt;大人になって、変化そのものを楽しむことが難しくなってきたように思います。明確なメリットがないと、環境を変えようと思えない。母にしても、私の提供するデスクトップマシンが高速で、大画面で、それがお金をかけずに使えるというメリットがあったからこそ、移行したわけで。&lt;/p&gt;&#10;&lt;p&gt;あれもやりたい、これもやりたい、でも自分が使える時間はそう多くはない、そういうことに気づき、またそれを肌で実感するようになるにつれて、変化に理由を求めるようになりました。それは当然のことだと思いますし、また合理的だとも思います。しかし、何か寂しい気持ちもあります。何か一つくらいは、理屈抜きに新しい風に吹かれようと思えることを見つけたいものです。閑話でした。&lt;/p&gt;</description></item><item><title>ノートパソコンのディスプレイ汚れ防止…キーボードカバークロスは良いものだ</title><link>https://hack-le.com/keyboardcovercross/</link><pubDate>Thu, 02 Mar 2017 13:50:24 +0900</pubDate><guid>https://hack-le.com/keyboardcovercross/</guid><description>&lt;p&gt;別にキーボード専用のクロスというわけではないと思うのですが、液晶ディスプレイの清掃に使うような、マイクロファイバを謳う大判のクロス（クリーニングクロスと言うのでしょうか？）をキーボードカバークロスとして使っています。MacBook Air 11インチを使っていますが、キーボードの汚れがディスプレイに付着するのがずっと気になっていました。正規の使い方ではないと思いますが、なかなか良いです。&lt;/p&gt;&#10;&lt;h2 id="ディスプレイの汚れが気になる"&gt;ディスプレイの汚れが気になる&#10;&lt;/h2&gt;&lt;p&gt;もう三年半以上使っている、愛機MacBook Air 2013 11インチモデル。これはとても良いパソコンで、最近はバッテリーの警告表示なども出ているのですが、基本的には快調に使えています。メモリ容量が4GBであることに幾許かの不満がないではありませんけれど、クリティカルな問題ではありません。&lt;/p&gt;&#10;&lt;p&gt;一時期は在宅での作業が多く、あまりノートパソコンを使うこともなかったのですけれど、最近はまた外での作業が増えて、必然的にこのMacBook Airにも大活躍してもらっているのですが、そうすると気になるのが「汚れ」です。&lt;/p&gt;&#10;&lt;p&gt;まず脂性なため、キーボードがべたつきがちです。パームレストの変色は袖でガードしています…何を言っているのかわからない人は幸福な人です！（参考「&lt;a class="link" href="http://applech2.com/archives/29817716.html" target="_blank" rel="noopener"&#10; &gt;またMacBook Proのパームレストが手汗で腐食する季節がやって来る… | AAPL Ch.&lt;/a&gt;」）。そして液晶ディスプレイ、これがすぐに汚れるのですが、どうもキーボードの汚れが付着しているように見えて仕方ないのですけれど、蓋を閉じた時に接触しているのでしょうか？ここらへんは考慮されていると勝手に思い込んでいたのですが、汚れを見るとどうにもキーボード由来の気がしてなりません（MacBook Airではありませんが同じような結論に至った人の記事…「&lt;a class="link" href="http://elledie.hatenablog.com/entry/dirty-pc-display" target="_blank" rel="noopener"&#10; &gt;いつの間にかディスプレイが汚れるのはなぜかがわかった夏物語 - LIFE DRIPPER&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;ということで、キーボード全体をクロスで覆うことにしました。&lt;/p&gt;&#10;&lt;h2 id="キーボードカバークロスで覆う"&gt;キーボードカバークロスで覆う&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01NCRNMIL&amp;linkId=7af2cffd3d3a888389fbee5b47eccd7f" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;使用したのは←これでして、キーボードカバークロスなどと言っていますが、微細なファイバの、まぁいわゆるクリーニングクロスのでっかい版ということでしょう。両面のうち、片面を液晶ディスプレイ用、もう片面をキーボード清掃用、という風にわけて使っています。&#10;&lt;p&gt;ちょうどMacBook Airの本体をすっぽりと覆うくらいの大きさであることが気に入りました。恐らく、11-12インチクラスのノートパソコンであれば、いい感じに覆えるものと思います。ただ11.6インチのMacBook Airだと少しはみ出してしまうのですが、では13.3インチクラスではどうかというと、ちょっと足りないように思います。&lt;/p&gt;&#10;&lt;p&gt;実際に覆ったところは下図のような感じです。記事冒頭にあるのと同じ画像です。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/695ee1cdf6e054d2a6a7f0ac5930c49b.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;クロスで覆った&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;閉じると少しはみ出ます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/03/ba79b897a996480a9ad87e0cc1ac627a.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;閉じると少しはみ出る、浮く&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;蓋が完全に閉じませんが、問題なくスリープにうつります。キーボードカバークロスなどといっても、あくまでマーケティング的な目的として用途を明確に打ち出しているだけで、結局は微細なファイバのクロスなのでしょうから、液晶を傷つけるということもないでしょう。&lt;/p&gt;&#10;&lt;p&gt;良いところは、常にクロスがあるので、汚れが気になった時にさっと拭けることです。つまり、&lt;strong&gt;クリーニングと汚れ防止の両用&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14579&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;（当時使っていたクロスが消息不明なので、最後に買ったクロスのリンクを掲載）&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=b-m-g-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B000CQ738Y&amp;linkId=7fa44c132933b4754be8a13f35c12d8f" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;&#10;&lt;p&gt;クリーニングには←ディスプレイ用クリーニングリキッドをクロスに湿らせて使っています。液晶ディスプレイ用のウェットティッシュみたいなものもありますが、あれは使い切る前に乾いてしまいます。よほど大量に使う人でなければ、液体状のものが個人用途に向くでしょう。&lt;/p&gt;&#10;&lt;p&gt;[itemlink post_id=&amp;ldquo;14584&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;なお、公式のお手入れの仕方として「&lt;a class="link" href="https://support.apple.com/ja-jp/HT204172" target="_blank" rel="noopener"&#10; &gt;Apple 製品のお手入れ方法 - Apple サポート&lt;/a&gt;」によると、液晶の手入れとして以下の文言があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;警告：画面のお手入れにはアセトン含有洗剤を使わないでください。画面やディスプレイ用のクリーナーをお使いください。画面に直接クリーナーを吹き付けないでください。ディスプレイ内部に浸み込むと、障害の原因になる恐れがあります。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;画面に直接吹き付けるな、つまり前述のようにクロスに湿らせて使えということですね。&lt;/p&gt;&#10;&lt;p&gt;汚れもだいぶ防止されたし、常時クロスがあることからクリーニングの頻度も上がったし、よいことをしました。&lt;/p&gt;</description></item><item><title>MacBookのメモリが16GBになったら心揺らぐ</title><link>https://hack-le.com/mbram16gb/</link><pubDate>Sat, 25 Feb 2017 21:42:19 +0900</pubDate><guid>https://hack-le.com/mbram16gb/</guid><description>&lt;p&gt;そろそろ時期MacBookがアップデートされそうな時期になってきました。第二四半期中にはくるのではないか、そしてオプションで16GBが選べるようになるだろうという噂です。それが本当なら、今使ってるMacBook Air 11インチ（メモリ4GB）から買い替えてもいいかなぁと、ちょっと心揺らぎます。とはいえお値段がどうなるか次第なのですが…。&lt;/p&gt;&#10;&lt;h2 id="mba-2013に満足してはいるが"&gt;MBA 2013に満足してはいるが&#10;&lt;/h2&gt;&lt;p&gt;MacBook Air 2013 11インチモデルを使用しています。メモリが4GB、SSDが256GBのものです。2013年の7月に購入したもので、もうかれこれ3年半以上使っていることになります。&lt;/p&gt;&#10;&lt;p&gt;これはたいへん良い製品で、現状、モバイルノートとして大きな不満はありません。むしろ満足しています。&lt;/p&gt;&#10;&lt;p&gt;処理能力はさすがに早くはありませんが、持ち運びを前提としたノートPCですから、こんなものでしょう。たとえばGUIのAndroidアプリを開発したいとなれば厳しいですけれど、コマンドラインベースの開発であれば十分です。画面はRetinaだったらいいのになと思うこともありますが、是が非でもというほどではありません。ストレージ容量も256GBで十分です…本当はもっと欲しいのですけれど、言い出すとキリがないので、100-120GBに整理しました。最近はバッテリー関係で問題もあるのですが（「&lt;a class="link" href="https://hack-le.com/mba2013battery/" &gt;MacBook Air 2013 11インチ、使い始めて早3年半、ついに『バッテリーの交換修理』表示&lt;/a&gt;」）、いざとなれば多少のお金で交換もできますし、良いでしょう。&lt;/p&gt;&#10;&lt;p&gt;それでもあえて言うのであれば、やはりメモリ8GBは欲しかったということでしょうか。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4947&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;674&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/02/71a7bad23a6ee22b52ee88a87cee9409.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;いつもメモリはいっぱいいっぱい[/caption]&lt;/p&gt;&#10;&lt;p&gt;特に私は仮想化で他OSを動かすこともあるので、メモリはあればあるだけ有難い……もっと言えばCPUも本当は4コア欲しいのですが、それはさすがに「Proを買え」という話なので…（13インチ以下で4コアCore iのノートPCってあるんでしょうか？）。&lt;/p&gt;&#10;&lt;h2 id="メモリを増やすコスト"&gt;メモリを増やすコスト&#10;&lt;/h2&gt;&lt;p&gt;CPUの進化が停滞して久しい昨今ですが（AMDのRyzenには期待していますが…）、Macのメモリ容量については、MacBook Air 13インチでも8GBが標準になっていますし、現在のMacBookも8GBが標準という、嬉しい状況です。とはいえMacBook Proの最大容量が16GBというのは寂しくはありますが、これも2017年版では32GBMAXになるだろうという話です。&lt;/p&gt;&#10;&lt;p&gt;そしてMacBook Proの話の影に隠れていますが、もう一つ、MacBookのメモリ容量も、16GBのものが登場するのではないかと言われています。これはたいへん魅力的で、4GBと8GBの間に壁があるのは確かであるものの、中々これをもって買い換えようとは思えませんでしたが、16GBとなれば、ふむ。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、さすがにMacBookの標準が16GBになるとは考えづらいので、やはりオプションでしょう。つまり、MacBookでメモリをアップグレードさせるということなので、価格比較サイトにある激安店ではなく、Appleのオンラインストア経由で購入するということになります。いわゆるCTOですね。&lt;/p&gt;&#10;&lt;p&gt;したがって、コストの増大は相当なものになります。恐らく、通販サイトで売られる店頭モデルと比較したとき、数万円の差になるでしょう。それだけの価値があるか、否か。&lt;/p&gt;&#10;&lt;h2 id="メモリの増量は良い投資ではある"&gt;メモリの増量は良い投資ではある&#10;&lt;/h2&gt;&lt;p&gt;CTOの中でも、CPUはコストの割に……という感じですが、ストレージとメモリは投資の価値があります。これを増強することによって、より長く使えるようになるからです。&lt;/p&gt;&#10;&lt;p&gt;たとえば、私はMacBook Air 2010を、CTOでメモリ2GB-&amp;gt;4GBにしましたが、これは良い選択だったと思います。7年前のモデルとなってしまったこの製品は、いまだに姉の元で働いてくれていますけれど、もしメモリ2GBのままだったら、ちょっとつらかったのではないかな。今だって、もし2013年時点でメモリを8GBにしていたら、恐らく買い替えは考えなかったでしょうし。&lt;/p&gt;&#10;&lt;p&gt;あの頃に比べると、既に求められるリソースは飽和気味ではあるものの、進化は続いています。メモリ8GBか16GBかで、数年後にやってくる買い替えの時が、1年または2年、なんだったら3年くらい変わるかもしれない。また、買い換えるまでもずっとモバイルノートとしては十分過ぎる豊富なメモリを使えるのですから、こうなると、CTOで余分にかかる金額分だけの価値はある、かもしれない。&lt;/p&gt;&#10;&lt;p&gt;……とはいえ、カスタマイズによって20万円近くになってしまうようであれば、さすがにちょっと手が出ませんけどね……。それに、PCの買い換えは喜びでもあるので、長く買い換えなくて済むぞーというのが、私にとって本当に良いことなのかどうか……。故障のリスクだってありますしねぇ。&lt;/p&gt;&#10;&lt;p&gt;まぁ、出てもいないうちからあれこれ考えても仕方ないのですが、昨今の寂しいMac事情の中、少しでも楽しそうなことをつい考えてしまうのは仕方ないことです。ところでこの手の噂の発祥は、だいたいKGI証券のミンチー・クオ氏なのですが、これもまたご多分に漏れないようです。一体何者なんでしょう。&lt;/p&gt;</description></item><item><title>dB（デシベル）の計算を習得するための練習問題30問</title><link>https://hack-le.com/db/</link><pubDate>Thu, 23 Feb 2017 17:43:40 +0900</pubDate><guid>https://hack-le.com/db/</guid><description>&lt;p&gt;電波を扱う人が避けて通れないのがdB（デシベル）計算です。陸上無線技術士など電波系の資格試験ではもちろん、現場でも測定器の結果を見ながらその場でdBmからWに換算したりします。&lt;/p&gt;&#10;&lt;p&gt;dBの計算は難しくありません。dBの計算は、初歩的な対数の計算に過ぎず、&lt;strong&gt;覚えるべきことは僅か3つだけ&lt;/strong&gt;です。ただし、ちょっと癖があるので、練習の必要があります。ブラインドタッチみたいなものです。一度習得すれば、そうそう忘れません。&lt;/p&gt;&#10;&lt;p&gt;ということで、練習問題を30問ほど用意してみました。これがスラスラとできるようになれば、まず問題ないかと思います。&lt;/p&gt;&#10;&lt;h2 id="覚えることは3つしかない"&gt;覚えることは3つしかない&#10;&lt;/h2&gt;&lt;p&gt;dB（デシベル）とは何かは、他の解説記事に譲ります。デシベル計算において、おさえなくてはならないことは以下の3点です。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;電力比P1/P2をdBで表現する…[dB] = 10log(P1/P2)&lt;/li&gt;&#10;&lt;li&gt;1mW = 0dBm（でーびーえむ）&lt;/li&gt;&#10;&lt;li&gt;10log(2)=3, 10log(3)=5(または4.8)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;これだけ覚えておけば、あとはその場で導けます。余裕があれば、10log(7)=8.5も覚えると幅が広がりますが、あまり使わないので覚えてなくてよいです。&lt;/p&gt;&#10;&lt;p&gt;なお、対数については理解しているものとします。対数がわからない人は、別途勉強しなくてはいけません。対数は高校数学の範囲なので、調べれば色々出てくると思います。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、(\log{(xy)} = \log{x} + \log{y} )と(\log{(x/y)} = \log{x} - \log{y} )さえ受け入れてしまえば、よくわかっていなくても計算できます。。。ざっくりと概念を知ったら、dBの計算問題を通して対数そのものも体得する、というプランも悪くないかもしれません。&lt;/p&gt;&#10;&lt;h2 id="例題5問"&gt;例題5問&#10;&lt;/h2&gt;&lt;p&gt;習うより慣れよ。いくつかの例題でおさえます。次のdBmをmWに換算してください。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;0 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;3 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;6 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;8 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;10 dBm = ?&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;解答。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;0 dBm = 1 mW　これは定義です。&lt;/li&gt;&#10;&lt;li&gt;3 dBm = 0 dBm + 3 dB = 1 mW * 2 = 2 mW&lt;/li&gt;&#10;&lt;li&gt;6 dBm = 0 dBm + (3 + 3) dB = 1mW * (2 * 2) = 4 mW&lt;/li&gt;&#10;&lt;li&gt;8 dBm = 0 dBm + (3 + 5) dB = 1mW * (2 * 3)　= 6 mW&lt;/li&gt;&#10;&lt;li&gt;10 dBm = 0 dBm + 10 dB = 1mW * 10 = 10mW * 10 = 10 mW （10log10 = 10より、10dB = 10）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;これくらいは基本として…。&lt;/p&gt;&#10;&lt;h2 id="練習"&gt;練習&#10;&lt;/h2&gt;&lt;p&gt;もうちょっと難しい問題をやっていきます。&lt;/p&gt;&#10;&lt;h3 id="基本10問"&gt;基本10問&#10;&lt;/h3&gt;&lt;p&gt;基本問題。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;20 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;13 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;16 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;23 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-3 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-5 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-10 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;7 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;27 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-7 dBm = ?&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;解答。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;20 dBm = 0 dBm + (10 + 10) dB = 1 mW * (10 * 10) = 100 mW&lt;/li&gt;&#10;&lt;li&gt;13 dBm = 0 dBm + (10 + 3) dB = 1 mW * (10 * 2) = 20 mW&lt;/li&gt;&#10;&lt;li&gt;16 dBm = 0 dBm + (10 + 3 + 3) dB = 1 mW * (10 * 2 * 2) = 40 mW&lt;/li&gt;&#10;&lt;li&gt;23 dBm = 0 dBm + (10 + 10 + 3) dB = 1 mW * (10 * 10 * 2) = 200 mW&lt;/li&gt;&#10;&lt;li&gt;-3 dBm = 0 dBm - 3 dB = 1 mW / 2 = 0.5 mW&lt;/li&gt;&#10;&lt;li&gt;-5 dBm = 0 dBm - 5 dB = 1 mW / 3 = 0.33 mW&lt;/li&gt;&#10;&lt;li&gt;-10 dBm = 0 dBm - 10 dB = 1 mW / 10 = 0.1mW&lt;/li&gt;&#10;&lt;li&gt;7 dBm = 0 dBm + (10 - 3) dB = 1 mW * (10 / 2) = 5 mW&lt;/li&gt;&#10;&lt;li&gt;27 dBm = 0 dBm + (10 + 10 + 10 - 3) dB = 1 mW * (10 * 10 * 10 / 2) = 500 mW&lt;/li&gt;&#10;&lt;li&gt;-7 dBm = 0 dBm -10 dB + 3 dB = 1 mW / 10 * 2 = 0.2 mW&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="さらに基本10問"&gt;さらに基本10問&#10;&lt;/h3&gt;&lt;p&gt;次のdBmを、適切なW、mW、uW、nWにしてください。1W = 1000mW、1mW = 1000uW、1uW = 1000nW です。これくらいできれば資格試験には困らないかと。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;30 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-30 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-60 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;33 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;46 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-40 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-43 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-57 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-45 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-22 dBm = ?&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;解答。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;30 dBm = 0 dBm + (10+10+10) dB = 1 mW * (10&lt;em&gt;10&lt;/em&gt;10) = 1000 mW = 1 W&lt;/li&gt;&#10;&lt;li&gt;-30 dBm = 0 dBm - (10+10+10) dB = 1 mW / (10&lt;em&gt;10&lt;/em&gt;10) = 0.001 mW = 1 uW&lt;/li&gt;&#10;&lt;li&gt;-60 dBm = -30 dBm - (10+10+10) dB = 1 uW / (10&lt;em&gt;10&lt;/em&gt;10) = 0.001 uW = 1 nW&lt;/li&gt;&#10;&lt;li&gt;33 dBm = 30 dBm + 3 dB = 1W * 2 = 2 W&lt;/li&gt;&#10;&lt;li&gt;46 dBm = 30 dBm + (10+3+3) dB = 1W * (10&lt;em&gt;2&lt;/em&gt;2) = 40 W&lt;/li&gt;&#10;&lt;li&gt;-40 dBm = -30 dBm - 10 dB = 1 uW / 10 = 0.1 uW&lt;/li&gt;&#10;&lt;li&gt;-43 dBm = -30 dBm - (10+3) dB = 1 uW / (10*2) = 0.05 uW = 50 nW&lt;/li&gt;&#10;&lt;li&gt;-57 dBm = -60 dBm + 3 dB = 1 nW * 2 = 2 nW&lt;/li&gt;&#10;&lt;li&gt;-45 dBm = -60 dBm + (10 + 5) dB = 1 nW * (10*3) = 30 nW&lt;/li&gt;&#10;&lt;li&gt;-22 dBm = -30 dBm + (5+3) dB = 1uW * (3*2) = 6 uW&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;近似式なので、掛け算を使うか割り算を使うかでも答えは微妙に変わります。また、できれば3-&amp;gt;5dBより2-&amp;gt;3dBを優先。log(3)=0.48なので、ちょっと誤差が大きい（特に3は割り切れないことが多いので、割り算するとさらに…）。&lt;/p&gt;&#10;&lt;h3 id="応用5問"&gt;応用5問&#10;&lt;/h3&gt;&lt;p&gt;応用という程でもありませんが、初めてみるとぎょっとするかも。ここまでできれば、まず問題ないんじゃないでしょうか。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;12 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;2 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;11 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;21 dBm = ?&lt;/li&gt;&#10;&lt;li&gt;-42 dBm = ?&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;解答。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;12 dBm = 0 dBm + (3+3+3+3) dB = 1 mW * (2&lt;em&gt;2&lt;/em&gt;2&lt;em&gt;2) = 16 mW 12=20-8と考えてもよい。その場合100/(2&lt;/em&gt;3)=17 mW。誤差の理由は前述のとおり&lt;/li&gt;&#10;&lt;li&gt;2 dBm = 0 dBm + (12 - 10) dB = 1mW * (16/10) = 1.6 mW （上の問題より12 dB = 16） 2 = 10 - (5+3) と考えてもよい。その場合10/(2*3) = 1.7 mW&lt;/li&gt;&#10;&lt;li&gt;11 dBm = 0 dBm + (20 - 9) = 0 dBm + ((10+10) - (3+3+3)) = 1 mW * (10&lt;em&gt;10) / (2&lt;/em&gt;2*2) = 1 mW * 100 / 8 = 12.5 mW&lt;/li&gt;&#10;&lt;li&gt;21 dBm = 30 dBm - 9 dB = 30 dBm - (3+3+3) dB = 1 W / (2^3) = 0.125 W 21 = 3*7 と考えてもよい。その場合2^7 = 128mW&lt;/li&gt;&#10;&lt;li&gt;-42 dBm = -60 dBm + 18 dB = -60 dBm + (3+3+3+3+3+3) = 1 nW * (2^6) = 64 nW -42 = -30-12 と考えてもよい。その場合1uW/2^4=1uW/16=0.0625uW =62.5nW&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;近似式なので、考え方が変わると答えも微妙に変わります。その時々で、パッと思いついたほうで計算すればOKです。そんなもんです。&lt;/p&gt;&#10;&lt;h2 id="おまけ"&gt;おまけ&#10;&lt;/h2&gt;&lt;p&gt;補足的な。&lt;/p&gt;&#10;&lt;h3 id="215dbに迫ってみる"&gt;2.15dBに迫ってみる&#10;&lt;/h3&gt;&lt;p&gt;おまけの問題。&lt;/p&gt;&#10;&lt;p&gt;2.15 dBm = ?&lt;/p&gt;&#10;&lt;p&gt;2.15dB、それは半波長ダイポールアンテナの絶対利得。無線の資格を勉強中の人なら「出たー」という感じでしょうか。この2.15dBに迫ってみます。&lt;/p&gt;&#10;&lt;p&gt;基本的に小数点のつくデシベル計算は、手計算だとちょっと厳しい。試験でも出ませんし、現場の計算でもそこまでの精度は求められません。なのでまぁ、お遊びです。&lt;/p&gt;&#10;&lt;p&gt;今までの知識を使って、遊んでみます。&lt;/p&gt;&#10;&lt;p&gt;…計算中…&lt;/p&gt;&#10;&lt;p&gt;では。&lt;/p&gt;&#10;&lt;p&gt;まず2dB=(12-10)dBなので、(2^4)/10。次に3dBのとき真数2なので、1.6以上2以下…では面白くないですね、はい。&lt;/p&gt;&#10;&lt;p&gt;ここで思い出すべきは、10log(3)=5ではなく、実際には10log(3)=4.8のほうが近いということです。つまり、10-(4.8+3)=2.2なので、2.2dB = 10/(3*2)=1.666……うむ、1.67と考えましょう。1.6以上1.67以下。&lt;/p&gt;&#10;&lt;p&gt;ここまできたら2.1dBの値に迫れないだろうか。とにかく小数点が使えるものは……と、考えて、ここで、今まで一切使わなかった10log(7) = 8.5 を思い出します。これを使うと、2.1=(10-9) + 4.8 + 4.8 -8.5と書けます。よって、2.1dB -&amp;gt; (10/2^3) * (3^2) / 7 = 90/56 = 1.607&amp;hellip;…1.61と考えましょう。&lt;/p&gt;&#10;&lt;p&gt;ざっくりと、2dBは1.6、2.1dBは1.61、2.2dBで1.67…有効数字とか色々いい加減ですが勘弁。この感じでいくと、1.63くらいな感じがします。してください。&lt;/p&gt;&#10;&lt;p&gt;ということで、2.15 dBm = 1.63 mWくらいだろう！という推測。&lt;/p&gt;&#10;&lt;p&gt;さて、コンピュータを使って正解を求めると、2.15dBは……約1.64！おお近いではありませんかってもちろん知ってましたすみません。まぁこういう遊びをしていると、覚えられるということで、ご笑覧ください。コンピュータの有り難みがわかるというものです。&lt;/p&gt;&#10;&lt;h3 id="電圧比"&gt;電圧比&#10;&lt;/h3&gt;&lt;p&gt;電圧比は20log(P1/P2)と表現されるので、dBは電力の場合の2倍になります(P=IV=V^2/Rから類推)。たとえば電圧比が2倍のとき、デシベルは6dBです。&lt;/p&gt;&#10;&lt;h3 id="mwからdbmへの変換"&gt;mWからdBmへの変換&#10;&lt;/h3&gt;&lt;p&gt;mWからdBmへの変換は、上の計算の逆パターンです。たとえば送信電力が80mWと与えられていれば、80=10&lt;em&gt;2^3より10+3&lt;/em&gt;3=19dBm、くらいの計算はちょこちょこと必要です。そして90mWと言われれば、30mWの3倍だから14.8 + 4.8=19.6dBm…と計算してもよいですけれど、ほとんど100mWと考えて20dBm気持ち下、くらいの精度で十分です。だいたいでいいんです。だいたいで。&lt;/p&gt;</description></item><item><title>MacBook Airに「バッテリーの交換修理」警告が出て一ヶ月、何故か「正常」になった</title><link>https://hack-le.com/mba2013battery-after/</link><pubDate>Tue, 21 Feb 2017 19:59:24 +0900</pubDate><guid>https://hack-le.com/mba2013battery-after/</guid><description>&lt;p&gt;一ヶ月ほど前に「&lt;a class="link" href="https://hack-le.com/mba2013battery/" &gt;MacBook Air 2013 11インチ、使い始めて早3年半、ついに『バッテリーの交換修理』表示&lt;/a&gt;」という記事を書きました。使用しているMacBook Air 2013 11インチで、ついにバッテリーの警告が出るようになった、という話です。&lt;/p&gt;&#10;&lt;p&gt;アレからずっとその状態が続いていたのですが、最近、また状態が「正常」になりました。原因は不明ですが、ひょっとして電源アダプタの問題もあるだろうかと思っています。&lt;/p&gt;&#10;&lt;p&gt;（追記）一度放電などでリセットするとエラー情報が消えるのか「正常」になるようだ。そして一日中電源つなぎっぱでスクリプトをフル稼働などしなければ、警告は出ないらしい。使い方の問題か。&lt;/p&gt;&#10;&lt;p&gt;（さらに追記）その後なんのかんのあってまた警告が出た。やはりダメなものはダメらしい。&lt;/p&gt;&#10;&lt;h2 id="警告が消えた謎"&gt;警告が消えた謎&#10;&lt;/h2&gt;&lt;p&gt;バッテリーの警告表示は、私には少なからずショックなことでした。確かに、一般的なユーザーよりもそれなりにハードに使っているだろうとは思っていたものの、それにしてもまだ使い始めて3年半なのだがなぁとか、充放電回数も500に満たないのになぁ（Appleの仕様では1000を超えると劣化とみなされる）という気持ちは否めず。&lt;/p&gt;&#10;&lt;p&gt;とはいえ現実は現実なので受け入れていたのですが、ここ数日、何故か警告表示が消えました。謎です。&lt;/p&gt;&#10;&lt;p&gt;システムメニューより詳細を調べてみます。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4801&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;220&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/02/366b17f20c97c37a06c19f4a8ba83da1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;電源[/caption]&lt;/p&gt;&#10;&lt;p&gt;↑より、3726[mA] * 7765[mV] = 28.9 [W] で、前回（「&lt;a class="link" href="https://hack-le.com/mba2013battery/" &gt;MacBook Air 2013 11インチ、使い始めて早3年半、ついに『バッテリーの交換修理』表示&lt;/a&gt;」）と変わりません。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;電源容量の問題ではなかった&lt;/strong&gt;ということでしょうか。&lt;/p&gt;&#10;&lt;p&gt;とすると、なんだろう……。うーん、謎です。ここ一ヶ月半で何があったか？ううん……。強いてあげると、ここ一ヶ月半、ノートパソコンを持ち出す機会が増えたこと、そして純正の電源で充電する機会が増えたこと、があります。&lt;/p&gt;&#10;&lt;p&gt;というのも、私はMacBook Airの充電器として、純正のものとサードパーティーのものを所持しています。それで、家に設置しているのがサードパーティーのもので、持ち運び用には純正のものを使っていました。家にいる間は、サードパーティーの充電器に繋ぎっぱなしです。&lt;/p&gt;&#10;&lt;p&gt;それが、ここ一ヶ月は持ち出す機会が増えました。そうすることによって、以下の2つがあります。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;フル充電の状態で充電器に繋ぎっぱなしの時間が減った&lt;/li&gt;&#10;&lt;li&gt;純正の電源で充電する機会が増えた（サードパーティの電源の使用が減った）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;と、考えてみたものの、うーーーん……わからないなぁ。iPhoneなどでサードパーティー製の充電器や充電ケーブルが本体バッテリーの寿命を損なうという話もありますが…でもそれは主に急速充電絡みの話でしょうし。&lt;/p&gt;&#10;&lt;p&gt;よくわからないことばかりです。&lt;/p&gt;</description></item><item><title>データシートを読んで学ぶ、光ファイバ超入門</title><link>https://hack-le.com/opticalfiber/</link><pubDate>Tue, 21 Feb 2017 19:07:48 +0900</pubDate><guid>https://hack-le.com/opticalfiber/</guid><description>&lt;p&gt;最近、光ファイバを扱うようになりました。右も左も分からないまま、専門用語を聞いては調べ、なんとかやっています。私と同じような人に向けて、実用のための知識とイメージが手っ取り早く身につけられるよう、まとめます。&lt;/p&gt;&#10;&lt;p&gt;何を以て実用とするかは難しい問題ですが、現場の人間としては、まずデータシートをざっくりと読めるようになることが第一と考えます。そこで、本記事では、実際にTHOLABSで売られているケーブル「&lt;a class="link" href="https://www.thorlabs.co.jp/thorproduct.cfm?partnumber=P3-1550A-FC-1" target="_blank" rel="noopener"&#10; &gt;P3-1550A-FC-1 SMパッチケーブル、1460～1620 nm、FC/APCコネクタ、長さ1 m&lt;/a&gt;」のデータシートの内容を理解することで、光ファイバの基礎知識を学びます。&lt;/p&gt;&#10;&lt;h2 id="基礎知識"&gt;基礎知識&#10;&lt;/h2&gt;&lt;p&gt;いきなりケーブルのデータシートを見る前に、最低限必要なことについて書きます。&lt;/p&gt;&#10;&lt;h3 id="光ファイバの構造"&gt;光ファイバの構造&#10;&lt;/h3&gt;&lt;p&gt;光ファイバは、&lt;strong&gt;コア&lt;/strong&gt;と呼ばれる石英ガラスの芯を中心に、&lt;strong&gt;クラッド&lt;/strong&gt;と呼ばれる異なる屈折率の石英ガラスで囲んだものです。屈折率を調整することで、光がコアとクラッドの境界で全反射し、コア内のみを伝搬するようにします。&lt;/p&gt;&#10;&lt;p&gt;大きさとして、コア径は10umだったり50umだったり色々ですが、クラッド径は基本的に125um。&lt;strong&gt;髪の毛の太さが一般的に60um&lt;/strong&gt;なので、その細さがわかります。これに被膜を被せたものが&lt;strong&gt;心線&lt;/strong&gt;です。さらにその心線に保護部材を入れて補強したものが、私たちが実際に目にする&lt;strong&gt;光ケーブル&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;光ファイバはファイバ（繊維）であって、ケーブルではないということです。&lt;/p&gt;&#10;&lt;h3 id="シングルモードとマルチモード"&gt;シングルモードとマルチモード&#10;&lt;/h3&gt;&lt;p&gt;もう一点、光ファイバには主にシングルモードとマルチモードがあります。最初、このモードの意味がよくわからず引っかかったのですが、「光の通り道」の意だという解説がしっくりきました。光の通り道が一つのものがシングルモード、複数のものがマルチモードと考えればよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;マルチモードは光が複数の通り道を通ることで伝搬信号が歪んでしまうことから、コア径を小さくしてモードを一つに絞ったのがシングルモードである、という風にざっくりとイメージしておけば、ひとまずはよいかと思います。&lt;/p&gt;&#10;&lt;h2 id="データシートを見てみる"&gt;データシートを見てみる&#10;&lt;/h2&gt;&lt;p&gt;実際のデータシートを見てみます。今回は「&lt;a class="link" href="https://www.thorlabs.co.jp/thorproduct.cfm?partnumber=P3-1550A-FC-1" target="_blank" rel="noopener"&#10; &gt;P3-1550A-FC-1 SMパッチケーブル、1460～1620 nm、FC/APCコネクタ、長さ1 m&lt;/a&gt;」を見てみます。データシートをダウンロードできますので、それを参考に。&lt;/p&gt;&#10;&lt;h3 id="ファイバ仕様"&gt;ファイバ仕様&#10;&lt;/h3&gt;&lt;p&gt;まず、FIBER SPECIFICATIONを見ていきます。必要なところを引用します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;OPERATING WAVELENGTH RANGE…波長の範囲。1460-1620nm&lt;/li&gt;&#10;&lt;li&gt;MODE FIELD DIAMETER…モードフィールド径。9.5±0.5um@1550nm&lt;/li&gt;&#10;&lt;li&gt;CLADDING…クラッド径。125±1nm&lt;/li&gt;&#10;&lt;li&gt;COATING…被膜。250um±15nm&lt;/li&gt;&#10;&lt;li&gt;CUTOFF WAVELENGTH…カットオフ波長。1400±50nm&lt;/li&gt;&#10;&lt;li&gt;NA…0.13&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;上から順番に見ていきます。&lt;/p&gt;&#10;&lt;p&gt;波長の範囲はそのまんまです。汎用シングルモードと言われるものは光の波長が1310nmですが、これはそうではないということです。1460-1620nmの範囲では、1550nmの波長が使われるでしょう。使用される波長は、ある程度決まっています。あまり使われない波長を使うと特注に……。&lt;/p&gt;&#10;&lt;p&gt;次、モードフィールド径とあります。コア径のようなものですが、ちょっと違います。シングルモードにおいては、光がコア内からクラッド領域にも漏れ出すため、それを考慮した値です。つまり、コア径より若干大きくなります。逆に言うと、この項目があるということは&lt;strong&gt;シングルモード&lt;/strong&gt;です。マルチモードではコア径(CORE DIAMETER)の項目があります。&lt;/p&gt;&#10;&lt;p&gt;シングルモードではこの10umが一般的ですが、レーザーなど大きな出力なものでは、20umや30umのファイバが必要になることもります。そういったものはLMA(Large Mode Area)と呼ばれ、一般的なコア径のものより入手が難しいです。また、コア径の変換には、別途MFA(Mode Field Adapter)と呼ばれるものが必要になります。&lt;/p&gt;&#10;&lt;p&gt;クラッド径はそのまんまです。125um。&lt;/p&gt;&#10;&lt;p&gt;COATING…被膜と書きましたが、要は心線の径でしょう。250um。&lt;/p&gt;&#10;&lt;p&gt;カットオフ波長は、シングルモードにおいて、シングルモードが保てる最小の波長です。この場合、1400nm以下の波長では、シングルモードになりません。ここからも、1310nmの波長の光はこのファイバでは使えないと言えます。&lt;/p&gt;&#10;&lt;p&gt;NA(Numerical Aperture)は開口数と呼ばれ、ファイバに光が入る最大の入射角を示します。具体的には、(\rm{NA} = n \sin\theta )と表せます。nは屈折率で、空気の場合n=1です。θは入射角。ここで、データシートのNA=0.13とn=1を当てはめてθを求めると、θ≒7.5度になります。つまり、入射角7.5度までの光が、ファイバに入る、と解釈できます。けっこうシビア。…NAって最初に見た時、N/A(Not Applicable)かと思いました。。。&lt;/p&gt;&#10;&lt;p&gt;以上より、重要なことは、シングルモードであること、使える光の波長の範囲が1460-1620nmであること（汎用の1310nmはダメ）、モードフィールド径が10nmであること、です。&lt;/p&gt;&#10;&lt;h3 id="コネクタ仕様"&gt;コネクタ仕様&#10;&lt;/h3&gt;&lt;p&gt;ケーブルの模式図があるので、それも見ておきます。特にコネクタ部分が重要です。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4797&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;218&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/02/ce96c0f7dfc5283f0908dce7bfd09ce8.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;コネクタ部分[/caption]&lt;/p&gt;&#10;&lt;p&gt;FC/APC CONNECTOR WITH 3mm BOOT 2 PLACESとあります。ひとつひとつ見ていきます。&lt;/p&gt;&#10;&lt;p&gt;まずFCですが、これは&lt;strong&gt;FCコネクタ&lt;/strong&gt;という意味です。FCコネクタは、ツメを合わせてネジ巻きするもので、同軸でいうとSMAコネクタにガイドがついたような感じです。他に、カチッとプッシュプルで使えるSCコネクタやLCコネクタがあります。私はFCコネクタしか使ったことがありません。分野によって使われるコネクタの種類は異なるでしょう。&lt;/p&gt;&#10;&lt;p&gt;次にAPCですが、これは、端面の研磨方式です。研磨することで、ファイバ同士の接続が隙間なくできるようになります（「&lt;a class="link" href="http://www.aim-ele.co.jp/tech/optical-tech4/" target="_blank" rel="noopener"&#10; &gt;光ファイバーケーブル研磨の種類 | エイム電子株式会社&lt;/a&gt;」）。その研磨にも様々な方式がありますが、PC(Physical Contact)研磨を基本に、さらに8度カットしたものが、このAPC(Angled PC)研磨と言われるものです。物理的に考えれば想像がつきますが、APCとPCの間には互換性がなく、もしPCとAPCで接続したい場合は、「&lt;a class="link" href="https://www.thorlabs.co.jp/thorproduct.cfm?partnumber=P5-SMF28E-FC-1" target="_blank" rel="noopener"&#10; &gt;P5-SMF28E-FC-1 SMパッチケーブル、1260～1625 nm、FC/PC-FC/APC、長さ1 m&lt;/a&gt;」のような変換コードが必要です。&lt;/p&gt;&#10;&lt;p&gt;次に、3mm BOOTですが、3mmのチューブですよ、くらいの意味でしょう。BOOTと言われると起動的なブートが思い浮かびますが、ここではブーツ的なニュアンスかと。。。&lt;/p&gt;&#10;&lt;p&gt;2 PLACESは、2箇所、つまり両端にコネクタついてますよ、くらいの意味でしょう。&lt;/p&gt;&#10;&lt;p&gt;以上より、必要なところは読み取れると思います。&lt;/p&gt;&#10;&lt;h2 id="参考記事"&gt;参考記事&#10;&lt;/h2&gt;&lt;p&gt;本記事の作成において、下記リンク先の記事を大いに参考にし、学ばせていただきました。ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ファイバの基礎知識&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.optigate.jp/basic/cable.html" target="_blank" rel="noopener"&#10; &gt;光ファイバ/ケーブルの基礎知識 - 住友電工Optigate&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.jectec.or.jp/densen_kiso/tuushin/2-1.htm" target="_blank" rel="noopener"&#10; &gt;光ファイバ ｜ 電線の基礎知識 | 一般社団法人 電線総合技術センター【ＪＥＣＴＥＣ】&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.wdic.org/w/WDIC/%E5%85%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%90%E3%83%BC" target="_blank" rel="noopener"&#10; &gt;光ファイバー ‐ 通信用語の基礎知識&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.optigate.jp/basic/specifications.html" target="_blank" rel="noopener"&#10; &gt;光ネットワーク配線部材 仕様書の見方 - 住友電工Optigate&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;NAについて&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Numerical_aperture" target="_blank" rel="noopener"&#10; &gt;Numerical aperture - Wikipedia&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://optipedia.info/lsource-index/fiberlaser-index/fiber/parameters/numerical_aperture/" target="_blank" rel="noopener"&#10; &gt;ファイバーの開口数 (N.A.) | パラメーター|オプティペディア - Produced by 光響&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://d.hatena.ne.jp/soup16/20051001" target="_blank" rel="noopener"&#10; &gt;ファイバのNAとは、N.Aとは、開口数とは？ - いちからはじめる光通信入門マニュアル&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.thorlabs.co.jp/NewGroupPage9_PF.cfm?Guide=10&amp;amp;Category_ID=220&amp;amp;ObjectGroup_ID=6188" target="_blank" rel="noopener"&#10; &gt;Thorlabs.com - パワーメータ＆センサのチュートリアル&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;LMAについて&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://optipedia.info/lsource-index/fiberlaser-index/fiber/dcf-fiber/lma-fiber/" target="_blank" rel="noopener"&#10; &gt;Large Mode Area Fiber ( LMA fiber ) | ダブルクラッドファイバー|オプティペディア - Produced by 光響&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.optoscience.com/maker/nufern/tech/LMA-double_clad_fiber.html" target="_blank" rel="noopener"&#10; &gt;特性改善が進むファイバレーザ用LMA ダブルクラッドファイバ | NUFERN | オプトサイエンス&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;研磨、コネクタの種類&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.aim-ele.co.jp/tech/optical-tech4/" target="_blank" rel="noopener"&#10; &gt;光ファイバーケーブル研磨の種類 | エイム電子株式会社&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://e-f.jp/denki6/fiber.html" target="_blank" rel="noopener"&#10; &gt;光ファイバケーブル | コネクタの種類・規格と構造&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://optipedia.info/lsource-index/fiberlaser-index/fiber/optical-fiber-structure/patch-cords/" target="_blank" rel="noopener"&#10; &gt;パッチコード、コネクタ、端面研磨 | ファイバーの構造|オプティペディア - Produced by 光響&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;全体&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.thorlabs.jp/" target="_blank" rel="noopener"&#10; &gt;ソーラボジャパン トップ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.thorlabs.co.jp/NewGroupPage9_PF.cfm?Guide=10&amp;amp;Category_ID=220&amp;amp;ObjectGroup_ID=2410" target="_blank" rel="noopener"&#10; &gt;Thorlabs.com - カスタムファイバーパッチケーブル&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>2017年もMac miniの新型出なかったらどうしようかどうしようもない</title><link>https://hack-le.com/desktopmac/</link><pubDate>Wed, 15 Feb 2017 02:18:39 +0900</pubDate><guid>https://hack-le.com/desktopmac/</guid><description>&lt;p&gt;発売して間もないのに、早速MacBook Proの噂がまた聞こえてきますが、それにしてもMac mini、どうなるんでしょうね。ディスコンはいやだなぁは思いますけれど、かと言ってずるずると来週の淡い期待だけもたせられ続けられるのもつらいし、もうやる気がないなら、いっそ引導を渡してくれないかとさえ。&lt;/p&gt;&#10;&lt;p&gt;（追記 2017/5/2）ここ一ヶ月くらいで急に色々な噂が流れてきましたね。ちょっと期待していいんでしょうか…。&lt;/p&gt;&#10;&lt;h2 id="放置されるmac"&gt;放置されるMac&#10;&lt;/h2&gt;&lt;p&gt;Mac、特にデスクトップMacが放置されて久しいです。デスクトップMacは2年周期に入ったともいわれていましたが、もうMac miniは3年目に突入、Mac Proに至っては4年目。かろうじてiMacが2年目。2年周期どころではなかった。&lt;/p&gt;&#10;&lt;p&gt;一応、ティム・クックもデスクトップMacを重要と言います（参考「&lt;a class="link" href="http://japanese.engadget.com/2016/12/20/mac/" target="_blank" rel="noopener"&#10; &gt;ティム・クック「素晴らしいデスクトップMacの計画がある」と発言。いまだ重要な製品のひとつと認める - Engadget 日本版&lt;/a&gt;」）けれど、現状を見ると本当にそう考えているとは中々思えません。結局iPhone 7のこれなしでは生活できないと感じさせる革新的機能とは何だったのかわからず仕舞いですし（参考「&lt;a class="link" href="http://gigazine.net/news/20160506-iphone-7-indispensable-function/" target="_blank" rel="noopener"&#10; &gt;iPhone 7には「これなしでは生活できないと感じさせる革新的機能を搭載する」とクックCEOが発言 - GIGAZINE&lt;/a&gt;」）、明らかに注力しているAppleのドル箱製品iPhoneでもこれですから、デスクトップMacについてのリップサービスなど、どこまで信じられましょう。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、AppleとしてもVR時代の到来を予見しているようなので、足枷と評されることも多いMacのGPUは大きな進化を期待できるのかなとは思います。しかし、まぁ、どうせ、iMacでしょう。Mac Proは……どうかな、Sierraのコードに、次期Mac Proの痕跡があるという話もちらっとありましたが…（参考「&lt;a class="link" href="http://ascii.jp/elem/000/001/402/1402306/" target="_blank" rel="noopener"&#10; &gt;ASCII.jp：間もなく登場のiMacとMac ProはPolarisベースの新GPU｜Apple噂まとめ&lt;/a&gt;」）。というか、さすがに今年は出ないとねぇ……。そしてMac miniの噂は、まったく聞こえてこない。希望的観測やぼやきは時々聞こえてくる…この記事のような。&lt;/p&gt;&#10;&lt;h2 id="もう出てくれたらなんでもいい"&gt;もう出てくれたらなんでもいい&#10;&lt;/h2&gt;&lt;p&gt;2014年のMac miniは私を大いに落胆させました。クアッドコアモデルがラインナップから消失したからです。筐体内部にアクセスしようとすれば吸盤が必須になったり、メモリが直付けになったりという改悪もありました。これに不満を覚えたのが私だけではないことは、2012年モデルの中古市場価格の高騰という現象を見れば明らかでしょう。&lt;/p&gt;&#10;&lt;p&gt;ここ数年のAppleの傾向を見れば、もはや内部拡張性については望むべくもありません。しかし、せめてクアッドコアの復活はしてほしいという願いを、このブログでは再三書いてきました。しかし、いつまでたっても新型が出ないどころか噂さえ聞こえてこない昨今、最近は、&lt;strong&gt;新型が出てくれさえすればもうなんだっていいという気分&lt;/strong&gt;になってきました。&lt;/p&gt;&#10;&lt;p&gt;満足できる仕様でなくてもいい。ただディスプレイのない、一体型ではない、そしてプロユースでもない一般向けのデスクトップMacというジャンルが、存続さえしてくれれば。そういう気分です。&lt;/p&gt;&#10;&lt;p&gt;でも、それさえ叶わないような気もします。ティム・クックにとって、Mac miniなど時代遅れの遺物に見えているのかもしれません。そんなに利益が出るようなものでもないのでしょうし。といってAppleがMacを他社に渡すようなこともないだろうし、このまま消え行くのだろうか。もういっそ、ディスコンしてくれたほうがスッキリするかも……。&lt;/p&gt;&#10;&lt;p&gt;……サプライズないかなぁ……。&lt;/p&gt;</description></item><item><title>050のIP電話でPayPalやコンビニチャージなどプリペイド方式でチャージできる050 Free雑感</title><link>https://hack-le.com/050free/</link><pubDate>Sat, 11 Feb 2017 18:40:50 +0900</pubDate><guid>https://hack-le.com/050free/</guid><description>&lt;p&gt;&lt;a class="link" href="https://www.brastel.com/personal/apps/jpn/" target="_blank" rel="noopener"&#10; &gt;ブラステル｜050 Free（050フリー） - Brastel&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;プライベートの電話番号と仕事用の電話番号を分けたい、ということで、ブラステルの050 Freeを契約しました。プリペイド方式なのが嬉しい。050 Freeを選んだ理由と、使ってみた感触をメモします。&lt;/p&gt;&#10;&lt;h2 id="050free-を選ぶまで"&gt;050Free を選ぶまで&#10;&lt;/h2&gt;&lt;p&gt;数あるIP電話サービスから、なぜ050 Freeを選んだのか、です。&lt;/p&gt;&#10;&lt;h3 id="用途求めるもの"&gt;用途、求めるもの&#10;&lt;/h3&gt;&lt;p&gt;まず用途について書きます。用途は、仕事用の電話番号として利用することです。したがって、以下を求めています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;最低限の通話品質&lt;/li&gt;&#10;&lt;li&gt;プリペイド&lt;/li&gt;&#10;&lt;li&gt;発信者番号が通知できる（非通知にならない）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;通話品質については、回線交換方式ではないので、多くは求めません。コミュニケーションができるレベルであれば、よしとします。&lt;/p&gt;&#10;&lt;p&gt;プリペイドとは、つまりクレジットカード決済ではなく、現金チャージなどでプリペイドできるという意味です。会社に実費請求しやすいからです。これは私が零細企業に勤めていることが大きく影響しています。ある程度の規模の会社であれば、会社側で都合つけてくれるのでしょうし、そうあるべきなのでしょうが、零細というのは中々…。&lt;/p&gt;&#10;&lt;p&gt;そして、発信者番号が通知されること。非通知は、さすがにまずいので。&lt;/p&gt;&#10;&lt;h3 id="検討"&gt;検討&#10;&lt;/h3&gt;&lt;p&gt;前節の用途を考慮して、実際にサービスを検討します。&lt;/p&gt;&#10;&lt;h4 id="通話品質"&gt;通話品質&#10;&lt;/h4&gt;&lt;p&gt;通話品質についてですが、これは使ってみないとわからないので、&lt;/p&gt;&#10;&lt;p&gt;とはいえ、回線交換方式ではない以上、多くを求めてはいけないでしょう。話せればよいと思っています。&lt;/p&gt;&#10;&lt;h4 id="プリペイド"&gt;プリペイド&#10;&lt;/h4&gt;&lt;p&gt;実費請求するのに、クレジットカード方式は名義の問題などもあって、できれば現金チャージができるプリペイド式が望ましい。コンビニでチャージできると嬉しい。&lt;/p&gt;&#10;&lt;p&gt;という条件を満たすのは、これが案外少ない。普通に使えるのは、以下くらいじゃないかと思います。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.050call.net/call050/index/index.html" target="_blank" rel="noopener"&#10; &gt;050Call IP電話 スマートフォン向け無料通話アプリ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.brastel.com/personal/apps/jpn/" target="_blank" rel="noopener"&#10; &gt;ブラステル｜050 Free（050フリー） - Brastel&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.skype.com/ja/" target="_blank" rel="noopener"&#10; &gt;Skype | 友達や家族と無料通話&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;他になんかあるんですかね。&lt;/p&gt;&#10;&lt;h4 id="発信者通知非通知にならない"&gt;発信者通知（非通知にならない）&#10;&lt;/h4&gt;&lt;p&gt;イマドキは基本的に大丈夫だろう…と思いきや、信じ難いことに、2017年2月現在、Skypeは日本では発信者番号を通知することができません。Skypeアウト。&lt;/p&gt;&#10;&lt;h4 id="050callか050-freeか"&gt;050Callか050 Freeか&#10;&lt;/h4&gt;&lt;p&gt;そうすると、残るのは050 Callと050 Freeです。料金体系はまぁ似たようなものですが、前者は月額300円が必ずかかります。基本料金ではなく、最低料金という形です。まぁ大した額ではない。&lt;/p&gt;&#10;&lt;p&gt;ただ決済方法は、050 Freeのほうが随分融通がききます。コンビニチャージはもちろんですが、なんと&lt;strong&gt;PayPalも使える&lt;/strong&gt;。ブラステルのサイトには、特にそういう記述がないですが…使える↓。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4776&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;379&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/02/caacf1e31a2436f341abe5245ff9d5ef.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;050 Free[/caption]&lt;/p&gt;&#10;&lt;p&gt;PayPalだったらその場で任意の金額を振込が出来て、しかも領収書の発行も思いのまま。最高ですね。&lt;/p&gt;&#10;&lt;p&gt;ということで、050 Freeに決定です。&lt;/p&gt;&#10;&lt;h2 id="使用感普通だが最初のアナウンスがつらいが飛ばせる"&gt;使用感：普通だが、最初のアナウンスがつらい…が、飛ばせる！&#10;&lt;/h2&gt;&lt;p&gt;ということで使ってみました。使用感ですが……。&lt;/p&gt;&#10;&lt;p&gt;まぁ普通です。というとそれで終わってしまうのですが、30分ほど通話してみましたけれど、特に050系のIP電話として音質が優れているわけでも悪いわけでもなく、普通です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;普通でいいんです&lt;/strong&gt;。電話にそれ以上のことなんて求めません。特に設定をいじらずに、普通につかえているので、それでよいです。欲を言えば、Smartalkのように、着信通知と留守電が残ると有難いのですが、まぁ贅沢は言えません。&lt;/p&gt;&#10;&lt;p&gt;ただ一点、つらいなぁと思うのは、&lt;strong&gt;発信するときに、しばらくアナウンスが入ること&lt;/strong&gt;です。「○分話せます」とゆっくりと言われます。さらに謎の宣伝が入ることも合って、コールが開始するまで30秒以上待たされた時は、なんだかなぁと思いました。&lt;/p&gt;&#10;&lt;p&gt;（追記）コメント欄より、&lt;strong&gt;発信時にアスタリスク*を二回プッシュすればアナウンスをスキップできる&lt;/strong&gt;という情報をいただきました。やってみると、確かに飛ばせる！これは有難い。ありがとうございました。&lt;/p&gt;&#10;&lt;p&gt;全体的には、そこそこ満足しています。プライベートの電話番号を使わなくてよくなったのは、たいへん有難い。というか、もうプライベートの電話番号なんて、個人情報の登録くらいでしか使わないですしね。。。&lt;/p&gt;</description></item><item><title>LibreOfficeはMS Officeを代替できるか</title><link>https://hack-le.com/ms2libre/</link><pubDate>Sat, 04 Feb 2017 23:20:44 +0900</pubDate><guid>https://hack-le.com/ms2libre/</guid><description>&lt;p&gt;2024-04-20追記：今はExcel Onlineを利用している。ただLibreOffice Calcも検討している&lt;/p&gt;&#10;&lt;p&gt;私はMac用のMS Office 2011のライセンスを持っていますが、今年2017年にサポート期限を迎えるので、LibreOfficeへの移行をここ数ヶ月試みています。その感触をメモします。&lt;/p&gt;&#10;&lt;h2 id="環境と用途"&gt;環境と用途&#10;&lt;/h2&gt;&lt;p&gt;私の環境は以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;MS Office for Mac 2011&lt;/li&gt;&#10;&lt;li&gt;LibreOffice 5.2&lt;/li&gt;&#10;&lt;li&gt;MacBook Air 2013, Mac mini 2012&lt;/li&gt;&#10;&lt;li&gt;OSX 10.11 El Capitan&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;余談ですが、MacにはVanilla版というApp Store経由でインストールできるものがありますが、どういうわけか非常に不安定なので（恐らくApp Storeの制約のためか）、普通にサイトから最新版をダウンロードして使ったほうがよいです（参考「&lt;a class="link" href="https://hack-le.com/libreofficevanilla/" &gt;Mac版LibreOffice Vanillaがやけに不安定…本家は安定&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;用途は以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;レポートの作成&#10;&lt;ul&gt;&#10;&lt;li&gt;Writer, Calc, Impress&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;家計簿の作成&lt;/li&gt;&#10;&lt;li&gt;Googleアナリティクスの結果の解析&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;DrawとBaseは使っていません（Drawは非常に便利らしいが…）。また、幸いなことにExcelでVBAをガシガシ使うような必要もありません。&lt;/p&gt;&#10;&lt;p&gt;ライトな使い方ですが、多くの人はそうだと思います（特にオフィスソフトの乗り換えを検討しているような人は）。&lt;/p&gt;&#10;&lt;h2 id="たいがいのことは問題ないが慣れは必要"&gt;たいがいのことは問題ないが、慣れは必要&#10;&lt;/h2&gt;&lt;p&gt;ここ数ヶ月LibreOfficeをいじっていて、&lt;strong&gt;MS Officeで出来てLibreOfficeで出来なかったことは特にありませんでした&lt;/strong&gt;。以前はCalcでA:Aのような書き方ができないという、ちょっと悲しい仕様がありましたが、今はできます。&lt;/p&gt;&#10;&lt;p&gt;ただし、これできないのか？と&lt;strong&gt;思ったことはあります&lt;/strong&gt;。その後あれこれ調べてみると、出来る。&lt;/p&gt;&#10;&lt;p&gt;UIや操作性がMS Officeと異なるが故と言えます。それは慣れの問題です。個人的にはMS OfficeのリボンUIは好きでしたが（少数派？）、リボンUIが好きではないという人ならば、慣れさえすればLibreOfficeのほうがよいと思うかもしれません。&lt;/p&gt;&#10;&lt;p&gt;慣れが必要とはいえ、MS Officeもバージョンが変わればUI激変しますしね。Windows版とMac版の統一性のなさも半端ないです。その意味では、LibreOfficeのほうが変化が少ない分、最終的な学習コストは低いかも。もっとも、その学習を最小限にするためのリボンUIなのではとも思うのですが、あまりうまくいっているとは言い難いですしねぇ。。。&lt;/p&gt;&#10;&lt;p&gt;あと、Writerの本文のスタイルがデフォルトで標準と違う（「段落」になっている）のは、Wordより良いと思いました。Wordは普通にやると「標準」がデフォルトなので、これをいじると影響が大きい。私はWordの文章スタイルには「本文」を適用するようにしていますが、これはあまり広まっていない印象です。そもそも、Wordでちゃんとスタイルを意識して作成している人、悲しいことに私の身の回りにはあまりいませんが。。。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEWord%E5%86%8D%E5%85%A5%E9%96%80%E8%AC%9B%E5%BA%A7-%E6%96%B0%E7%89%88-%E7%BE%8E%E3%81%97%E3%81%8F%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E6%80%A7%E3%81%AE%E9%AB%98%E3%81%84%E9%96%8B%E7%99%BA%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E4%BD%90%E8%97%A4-%E7%AB%9C%E4%B8%80-ebook/dp/B087JSLJT9?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;crid=1KTV1EB5YWNOP&amp;amp;dib=eyJ2IjoiMSJ9.QbtOHegv8I5WPwx7C4eh50NviFcr2wRQ6RnJF06acd3G9qyezmv6A7tetMT02TlO25IFm3a2TLXK8i5meOqRP_ztKGjSH87OGHu5qYYBJksZFojfSuDZWMN5c3fHtiV2D6WMM4ao5OtxZDdSu2-Ttx83ITUVZoHPnmBbdxnPXpC1TfLzLnEBSqeH59AtiErf3LR9dlbg8i4DuquYYtGR-0V7sPDaCb8yLlzZ5HbK2a-00uL5FQYXiYcNnmQ3LywW.9p5kNrFvOk0XB7VIX_t44Zv1nNGFwRib5oJErC-pOEM&amp;amp;dib_tag=se&amp;amp;keywords=%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEWord%E5%86%8D%E5%85%A5%E9%96%80%E8%AC%9B%E5%BA%A7&amp;amp;qid=1713612899&amp;amp;sprefix=text%2Caps%2C192&amp;amp;sr=8-1&amp;amp;linkCode=ll1&amp;amp;tag=hackle12-22&amp;amp;linkId=b26f30eddd9d2fd2c7bed70316cbb0a2&amp;amp;language=ja_JP&amp;amp;ref_=as_li_ss_tl" target="_blank" rel="noopener"&#10; &gt;https://www.amazon.co.jp/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEWord%E5%86%8D%E5%85%A5%E9%96%80%E8%AC%9B%E5%BA%A7-%E6%96%B0%E7%89%88-%E7%BE%8E%E3%81%97%E3%81%8F%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E6%80%A7%E3%81%AE%E9%AB%98%E3%81%84%E9%96%8B%E7%99%BA%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E4%BD%90%E8%97%A4-%E7%AB%9C%E4%B8%80-ebook/dp/B087JSLJT9?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1KTV1EB5YWNOP&amp;dib=eyJ2IjoiMSJ9.QbtOHegv8I5WPwx7C4eh50NviFcr2wRQ6RnJF06acd3G9qyezmv6A7tetMT02TlO25IFm3a2TLXK8i5meOqRP_ztKGjSH87OGHu5qYYBJksZFojfSuDZWMN5c3fHtiV2D6WMM4ao5OtxZDdSu2-Ttx83ITUVZoHPnmBbdxnPXpC1TfLzLnEBSqeH59AtiErf3LR9dlbg8i4DuquYYtGR-0V7sPDaCb8yLlzZ5HbK2a-00uL5FQYXiYcNnmQ3LywW.9p5kNrFvOk0XB7VIX_t44Zv1nNGFwRib5oJErC-pOEM&amp;dib_tag=se&amp;keywords=%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEWord%E5%86%8D%E5%85%A5%E9%96%80%E8%AC%9B%E5%BA%A7&amp;qid=1713612899&amp;sprefix=text%2Caps%2C192&amp;sr=8-1&amp;linkCode=ll1&amp;tag=hackle12-22&amp;linkId=b26f30eddd9d2fd2c7bed70316cbb0a2&amp;language=ja_JP&amp;ref_=as_li_ss_tl&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;この「エンジニアのためのWord再入門講座」は良書です。オフィス嫌いの私にWordを使おうという気にさせてくれた本です（それまではTeXで全部やっていました…）。書店に行くと、オフィスソフトは妙な入門本が多いのですが、こういう本こそ広まってほしいと思います。しかしこの表題じゃ中々手にとってもらえまいな。何もエンジニアに限ったことではないと思うのですけれど。&lt;/p&gt;&#10;&lt;h2 id="いくつかの問題点"&gt;いくつかの問題点&#10;&lt;/h2&gt;&lt;p&gt;問題点もそれなりにあります。私が気になっているところをいくつか。&lt;/p&gt;&#10;&lt;h3 id="やや不安定"&gt;やや不安定&#10;&lt;/h3&gt;&lt;p&gt;MS Officeに比べると、動作は不安定だと思います。唐突にクラッシュすることが頻繁にあるので、こまめに保存しておかないと心臓に悪い。&lt;/p&gt;&#10;&lt;p&gt;これはOSの影響もあるでしょうか。私はほとんどMacで作業していますけれど、WindowsやLinuxだとどうなんでしょうね。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、クラッシュしてもしっかり復元できます。今までクラッシュしたことは数えるのも阿呆らしいほどですが、復元できなかったことはありません。&lt;/p&gt;&#10;&lt;h3 id="重い"&gt;重い&#10;&lt;/h3&gt;&lt;p&gt;MS Officeも決して軽いソフトとは言えませんが、LibreOfficeはさらに重いです。仮にもデスクトップPCで、Core i7 4コア搭載のMac mini 2012ならばさして問題に思うこともありませんが、MacBook Air 2013だと、なかなかカクカクしてくれます。特にImpressとDrawは重い。私がDrawを使っていない理由の一つはコレです。Impressを使わないわけにはいきませんが…。&lt;/p&gt;&#10;&lt;p&gt;でも、これもOSの影響あるかもですね。WindowsやLinuxだとそうでもない、のかも。&lt;/p&gt;&#10;&lt;h3 id="calcの保存に時間がかかる時"&gt;calcの保存に時間がかかる時&#10;&lt;/h3&gt;&lt;p&gt;これは多分行数の問題かなと思うのですが、保存にちょっと時間がかかるものがあります。列全体に罫線を引いたりすると怪しい感じ。といっても2,3秒です。10秒待たされるということはないので、許容範囲…ではありますが、Excelだとこういうことはなかったので、気になりました。&lt;/p&gt;&#10;&lt;h3 id="ms-officeファイルに書き込んで送り返してって言われると困る"&gt;MS Officeファイルに書き込んで送り返してって言われると困る&#10;&lt;/h3&gt;&lt;p&gt;多分&lt;strong&gt;最大の問題点&lt;/strong&gt;です。.xlsxや.pptxを閲覧するだけならあまり問題ないのですが、書き込んで上書き保存すると……まぁ色々変わりますね。レイアウトはまったく保証されません。せめてxが末尾についていなければ（2003以前のフォーマットならば）あまり問題にもならないのですけれど、さすがにもう2017年ですので、なかなか。&lt;/p&gt;&#10;&lt;p&gt;そもそもMS Officeを持っている前提にすべきではないと思いますが、仕事で使っていればそうも言ってられません。MS Officeオンラインも互換性についてはボチボチって感じですしねぇ。。。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、仕事じゃないなら何が何でも必須ということはないでしょう。仕事であれば、1台くらいMS Officeの入ったマシンを用意して皆で使うことも出来ましょうし、いちいちそんなことしてられないということならば、経費で買って（もらって）ください、ということで。&lt;/p&gt;&#10;&lt;h2 id="私は移行します"&gt;私は移行します&#10;&lt;/h2&gt;&lt;p&gt;使っていて思うのは、細かなところでMS Officeは勝手がよいな、と。さすがMSのドル箱、開発リソースが桁違いなだけはあるか。私が使っていないだけで、MS Officeにしかない便利な機能も多いでしょうし、LibreOfficeでもできるけど複雑になる場合などもあるでしょう（Excelでマニアックな関数使っている人など）。そういう人は素直にMS Officeで良いでしょう。&lt;/p&gt;&#10;&lt;p&gt;しかし、私含め、そんな人ばかりでもありません。MS Office 2016 Home &amp;amp; Businessは37,584円します。Office Soloなら1万円/年といったところです。自分にとってそれだけの価値があるのか、一考の余地は大いにある、いや、考えるまでもないのではないかな、多くのライトユーザーは！&lt;/p&gt;&#10;&lt;p&gt;私はLibreOfficeに移行します。&lt;/p&gt;</description></item><item><title>Withings Activitéがまた止まったが、一晩たったら治った謎</title><link>https://hack-le.com/activite-matatomaru/</link><pubDate>Fri, 27 Jan 2017 23:22:11 +0900</pubDate><guid>https://hack-le.com/activite-matatomaru/</guid><description>&lt;p&gt;Withingsのアナログ盤スマートウォッチActivitéがまた止まりました。前に電池を替えてからまだそんなに経過していないので、電池切れとも思えません。そもそも、電池が切れる前に、時刻が遅れるなどの兆候があるはず。それが突然止まりました。まいったなぁなどと思いつつ一晩立ってみると、いつの間にか復活していました。前もこんな感じだったような気がします。あまり安定しないのだろうか。&lt;/p&gt;&#10;&lt;h2 id="突然止まりまた動き出した"&gt;突然止まり、また動き出した&#10;&lt;/h2&gt;&lt;p&gt;Withings Activitéは、ガジェットとしては高い部類に入る5万円近いスマートウォッチです。スイス製のアナログ盤であるにも関わらず、Bluetoothでスマートフォンと同期し、歩数や睡眠のログを送ることができる小憎いやつ。&lt;/p&gt;&#10;&lt;p&gt;使い始めて一年と八ヶ月。やはりバッテリーの問題が大きいのか、スマートウォッチはいまだにややニッチな市場であり続けており、結果的にこの時計もまだまだ最前線。いいのか、悪いのか。&lt;/p&gt;&#10;&lt;p&gt;機能が絞られているだけに、トラブルはあまり多くはないものの、まったくないわけでもありません。時計として考えると、ちょっと多いのかも。バッテリー切れで時間が遅れるのは仕方ないとしても、時針がずれたり、分針がずれたり、突然止まったり（「&lt;a class="link" href="https://hack-le.com/activitestop/" &gt;Withings Activitéが止まったが、電池を入れ替えたらまた動き出した&lt;/a&gt;」「&lt;a class="link" href="https://hack-le.com/activitecal/" &gt;Withings Activitéの時刻がずれると思ったら針がずれていた&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;そして今回は、突然止まりました。ちょっと早いけれど、まさかバッテリー切れだろうか？うーん、などと思いつつ、出先で道具がなかったので放置していたところ、次の日、気づいたらしれっとなおっていました。時間もずれない。うーん。&lt;/p&gt;&#10;&lt;h2 id="電池切れとは思えない"&gt;電池切れとは思えない&#10;&lt;/h2&gt;&lt;p&gt;まず疑ったのは電池切れなのですが、以前に電池を交換したのは10月で、せいぜい3-4ヶ月の話ですから、これはちょっと考えづらい。Activitéの電池持ちは公称八ヶ月で、これについては、なるほど仕様通りらしいということがわかっています（「&lt;a class="link" href="https://hack-le.com/45797691-2/" &gt;Withings Activité の電池を交換。時計がずれると思っていたら…&lt;/a&gt;」）。また、電池切れの場合、経験的に、時刻が何度合わせても遅れるなどの兆候があるのですが、今回はそれもなかった。&lt;/p&gt;&#10;&lt;p&gt;10月にあった「&lt;a class="link" href="https://hack-le.com/activitestop/" &gt;Withings Activitéが止まったが、電池を入れ替えたらまた動き出した&lt;/a&gt;」の記事ですが、どうもこれと同じ症状だったように思えてなりません。このときは電池の入れ替えというアクションを行ってはいますが、二週間前に電池を交換していたことから、電池切れだった可能性は低いのです。&lt;/p&gt;&#10;&lt;h2 id="安定さは微妙"&gt;安定さは微妙？&#10;&lt;/h2&gt;&lt;p&gt;原因は結局わからずじまい。しかし、なんだかシステム的な、もっといえばソフトウェアに起因する問題のように思えます。それで、なにかをきっかけに再起動のようなものがかかり、症状が回復したと、そんな感じじゃなかろうか。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、時計として考えると安定さは微妙といえるのかもしれません。しかし、デジタルガジェットとしてはこんなものだという風にも考えられます。多機能とは結局そういうことなのでしょう。&lt;/p&gt;&#10;&lt;p&gt;……でもそんなに機能ないと思うのだけどなぁこの時計。トラブルは年に1,2回の電池切れだけであってほしいけれど……。&lt;/p&gt;</description></item><item><title>我が母、UbuntuがWindowsじゃないことに一ヶ月経って気づく！</title><link>https://hack-le.com/montherlinux/</link><pubDate>Mon, 23 Jan 2017 18:42:44 +0900</pubDate><guid>https://hack-le.com/montherlinux/</guid><description>&lt;p&gt;「&lt;a class="link" href="https://hack-le.com/linuxmother/" &gt;還暦の母がLinuxマシンを使い始める&lt;/a&gt;」にて、母がUbuntuをインストールしたマシンを使い始めた顛末を書きましたが、それから一ヶ月半、ついに、自分が使っているマシンがWindowsと呼ばれるものではない事実に気づいたようです！きっかけはやはりオフィス周りでした。&lt;/p&gt;&#10;&lt;p&gt;もちろん最初からWindowsでないことは告げましたし、だから父は止めていたのですが、よくわかんないけどとりあえず使えそうだから使うみたいな感じだったのでしょう。まぁそのうち、否応なく意識せざるを得なくなるだろうとは思っていました。&lt;/p&gt;&#10;&lt;p&gt;でも、結果としてけっこう使えているんですよ。つまり、先入観さえもたなければ、問題ないということの証左じゃないでしょうか。わからないということは強みでもある。むしろ鬼門はオフィスよりもプリンタだろうか。&lt;/p&gt;&#10;&lt;h2 id="やはりオフィス周りは一つの壁"&gt;やはりオフィス周りは一つの壁&#10;&lt;/h2&gt;&lt;p&gt;一ヶ月以上経ってついに「Windowsではない」ということに気づいた母ですが、そのきっかけはオフィスソフトでした。オフィスについては、私も鬼門であろうと前記事「&lt;a class="link" href="https://hack-le.com/linuxmother/" &gt;還暦の母がLinuxマシンを使い始める&lt;/a&gt;」にて予想はしていました。しかし一ヶ月以上経ってもなにも言わないので、問題なかったのか？とも思ったのですが、やはりそんなことはなかったようで。&lt;/p&gt;&#10;&lt;p&gt;LibreOfficeでエラーなくちゃんと取り扱おうと思えば、拡張子に気を使わざるを得ません。そして拡張子に気を使うと、何故今までどおりじゃダメなのか？という疑問が沸きますから、その先に、使用しているソフトがいわゆるMicrosoft Officeではないことを知り、そしてOS自体がMicrosoft Windowsでないことを知るのですね。&lt;/p&gt;&#10;&lt;p&gt;まぁとはいえ、OSが何かに気づかないレベルでの使い方ですから、最初からLibreOfficeでやれば、何の問題もないのです。Windowsマシンでも使う必要があるなら、WIndowsにもLibreOfficeを入れればいい。実際、私も既にLibreOfficeに移行しています。MS Officeを起動するのは、他人からもらったMS Office形式のファイルをPDFに変換する時くらいです。&lt;/p&gt;&#10;&lt;p&gt;Microsoft Officeがどうしても必要な状況というのは、Microsoft Officeにしかない機能が必須であるとか、MS Officeフォーマットのファイルを他社の人間と頻繁にやりとりする必要があるとか、そういう状況です。逆に言うと、そうでなければLibreOfficeでも問題がない。&lt;/p&gt;&#10;&lt;p&gt;だから、一つの壁ではあるけれど、まぁ超えられる壁だと思います。そして、ここまで来てしまった以上、この壁を超えざるを得ないでしょうし、まぁきっと超えられます。別に難しいことではありませんしね。えいやっとやってしまえば、案外たいしたことがない。&lt;/p&gt;&#10;&lt;p&gt;知らないからこそ踏み込める、知らないからこそ思い切って出来た、よくあることです。やってみれば、人間たいがいのことは出来るのだと思います……と、これは自分に言い聞かせなければいけませんね。私も最近、色々なことに臆病です。&lt;/p&gt;&#10;&lt;h2 id="むしろプリンタが問題か"&gt;むしろプリンタが問題か&#10;&lt;/h2&gt;&lt;p&gt;この一ヶ月見ていて、オフィスよりも問題だなぁと思ったのは、プリンタのほうです。ここ数年で、Linuxのプリンタ事情は随分よくなったと思います。うちではCanonのMG6230（複合機）を使っていますが、とりあえず動かすだけならば汎用のドライバで動きますし。&lt;/p&gt;&#10;&lt;p&gt;とはいえやはり色味などに問題もあり、メーカー提供のドライバなどもあるのですが、いざインストールスクリプトを実行してみるとエラーが出ます（そもそも対応がUbuntu 10.10！）。まぁ頑張ればインストールできそうな気もしますが、私自身はあまりプリンタを使わないし、また母もあまり気にしていないということなので、諦めました。&lt;/p&gt;&#10;&lt;p&gt;以前に比べれば使いやすくなったとは思うものの、ちゃんと使おうとすると、プリンタはまだまだ鬼門なのだなと思いました。最近だと、むしろいったんスマートフォンを経由したほうが簡単だったりするのかもしれませんね。MG6230もスマホのアプリがあるようで。&lt;/p&gt;&#10;&lt;p&gt;……閑話ですが、そもそも家庭用のプリンタはもう必要ない、が持論です。資料の閲覧にはタブレットがありますし、どうしても印刷したいものについても、コンビニのネットプリントが充実しています。プリンタのランニングコストは決して安くない…というか高いですから（そういうビジネス）、家で持つのが必ずしも経済的とは言えないと思うのです。……最寄りのコンビニが車で30分とかでしたらすみません、プリンタ買いましょう！&lt;/p&gt;&#10;&lt;h2 id="知らないことの強さ"&gt;知らないことの強さ&#10;&lt;/h2&gt;&lt;p&gt;閑話休題。&lt;/p&gt;&#10;&lt;p&gt;母がUbuntuという名前を覚えていないことはわかっていましたが、まさかWindowsでないことに気付いてさえいなかったということは、正直言って驚きました。逆に言うと、そんな状態でも使えていたわけです。Linuxを使うというと、ハードルが高いと考える人もいますが、実際には全然そんなことはない。有志の努力のおかげで、使うだけなら非常に楽になりました。有り難いことです。&lt;/p&gt;&#10;&lt;p&gt;オフィスや印刷など、いくつか注意すべき点はありますが、問題はいかに先入観を持たずに取り組めるのかじゃないでしょうか。Windowsとやり方は違っても、（インターネットを楽しむ、メールを読む、プレゼン資料を作るといった）多くの目的が達せられます。それは電車で行くのかバスで行くのか、その程度の違いでしかありません。興味のある人は、尻込みせずに是非トライしてほしいと思います。&lt;/p&gt;</description></item><item><title>WordPress: get_the_category()で取得した記事のカテゴリー一覧を、親のカテゴリーのIDに基づき並べ替える</title><link>https://hack-le.com/wpparentcat/</link><pubDate>Tue, 17 Jan 2017 20:01:54 +0900</pubDate><guid>https://hack-le.com/wpparentcat/</guid><description>&lt;p&gt;WordPressでは、get_the_category()により、記事のカテゴリーを配列で取得できます。この記事では、属するカテゴリーが複数あるとして、カテゴリーの親カテゴリーのIDに基づき並べ替えます。&lt;/p&gt;&#10;&lt;h2 id="やり方"&gt;やり方&#10;&lt;/h2&gt;&lt;p&gt;get_the_category()で取得した投稿記事のカテゴリーのオブジェクトの配列を、親カテゴリーのIDに基いて並べ替えます。つまり、オブジェクトのパラメータparent（親カテゴリーのID）に基づいてsortするということです。そのために、PHPのusort関数を用います。&lt;/p&gt;&#10;&lt;p&gt;コードは以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// カテゴリの取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;get_the_category&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 親カテゴリのID順&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sort_by_cat_parent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;usort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$categories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sort_by_cat_parent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;$categoriesの中が、親カテゴリーのID順にsortされます。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;参考にさせていただきました。ありがとうございました。今回始めてusort関数を使いましたが、ちょっとわかった気がします。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://d.hatena.ne.jp/donkphp/20090617/1245220037" target="_blank" rel="noopener"&#10; &gt;昔、PHPのusort関数がきもかったのに、今はそうでもない。 - donkのPHP日記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_the_category" target="_blank" rel="noopener"&#10; &gt;テンプレートタグ/get the category - WordPress Codex 日本語版&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://php.net/manual/ja/function.usort.php" target="_blank" rel="noopener"&#10; &gt;PHP: usort - Manual&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Octaveで反比例の二次元グラフを描画</title><link>https://hack-le.com/octaveplot/</link><pubDate>Mon, 16 Jan 2017 02:30:06 +0900</pubDate><guid>https://hack-le.com/octaveplot/</guid><description>&lt;p&gt;octaveで二次元グラフを描画します。反比例のグラフ((y = \frac{1}{x^2}))を描きます。&lt;/p&gt;&#10;&lt;h2 id="y--frac1x2--10-leq-x-leq-10-を描く"&gt;(y = \frac{1}{x^2} (-10 \leq x \leq 10) )を描く&#10;&lt;/h2&gt;&lt;p&gt;octaveで(y = \frac{1}{x^2} (-10 \leq x \leq 10 ) )のグラフを描きます。これが描けたら、だいたい二次元グラフ描画のことは思い出せると思うので。&lt;/p&gt;&#10;&lt;h3 id="自動範囲でプロット"&gt;自動範囲でプロット&#10;&lt;/h3&gt;&lt;p&gt;まず普通にplotします。&lt;/p&gt;&#10;&lt;pre&gt;`x = linspace(-10, 10, 1000);&#13; y = 1 ./ power(x,2);&#13; plot(x,y)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;linspaceのところは、-10から10まで、1000のデータ点数という意味です。グラフ描画の際によく使います。;をつけないと、行列が出力されてしまい鬱陶しいので、;をつけます。power(x,2)は2のべき乗です。/の前に.がつくのは、スカラー演算だからです。.がないと、行列演算になってしまい、この例だとエラーになります。&lt;/p&gt;&#10;&lt;p&gt;これを実行すると、以下のようなグラフが出力されます。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4656&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;560&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/01/plot1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;自動範囲指定[/caption]&lt;/p&gt;&#10;&lt;p&gt;今回の例の場合だと、ちょっとよくわからない感じです。yの最大値が大きすぎる感あります。&lt;/p&gt;&#10;&lt;h3 id="範囲を指定してプロット"&gt;範囲を指定してプロット&#10;&lt;/h3&gt;&lt;p&gt;axis([xmin xmax ymin ymax])とすることで、範囲を指定できます。以下のように書いてみます。&lt;/p&gt;&#10;&lt;pre&gt;`axis([-5 5 0 1])`&lt;/pre&gt;&#13;&#10;&lt;p&gt;以下のようなグラフが出力されます。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4657&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;560&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/01/plot2.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;範囲を指定[/caption]&lt;/p&gt;&#10;&lt;p&gt;わかりよくなった気がします。&lt;/p&gt;&#10;&lt;h3 id="装飾"&gt;装飾&#10;&lt;/h3&gt;&lt;p&gt;x軸とy軸のラベル名、グラフタイトル、凡例（グラフの右上とかにあるやつ）をつけます。グリッドもつけます。&lt;/p&gt;&#10;&lt;pre&gt;`xlabel('x')&#13; ylabel('y')&#13; title('y = 1/x^2')&#13; legend('y = 1/x^2')&#13; grid on&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以下のようなグラフが出力されます。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4658&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;560&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/01/plot3.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;装飾後[/caption]&lt;/p&gt;&#10;&lt;p&gt;いい感じです。&lt;/p&gt;&#10;&lt;h2 id="補足plot関数のフォーマット"&gt;補足：plot関数のフォーマット&#10;&lt;/h2&gt;&lt;p&gt;plot(x,y)は、plot(x,y,fmt)とすることで、ラインの色を変えたり、破線にしたり、ラインマーカーをドットにしたりできます。以下に例をあげます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ラインスタイル…-(実線,default) .(点) ^(インパルス)&lt;/li&gt;&#10;&lt;li&gt;マーカタイプ…+o*x&lt;/li&gt;&#10;&lt;li&gt;カラースタイル…k r g b m c w (黒 赤 緑 青 マゼンタ シアン 白)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;たとえば、以下のように書けます。&lt;/p&gt;&#10;&lt;pre&gt;`plot(x,y,'r+')`&lt;/pre&gt;&#13;&#10;&lt;p&gt;今回の例でこれを出力すると、以下のようなグラフが出力されます。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4660&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;560&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/01/plot4.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;フォーマットの例[/caption]&lt;/p&gt;&#10;&lt;p&gt;赤くて+な感じになりました。&lt;/p&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>MacBook Air 2013 11インチ、使い始めて早3年半、ついに『バッテリーの交換修理』表示</title><link>https://hack-le.com/mba2013battery/</link><pubDate>Tue, 10 Jan 2017 04:27:32 +0900</pubDate><guid>https://hack-le.com/mba2013battery/</guid><description>&lt;p&gt;[caption id=&amp;ldquo;attachment_4631&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;384&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/01/cac071d2085201b3d2ac7db521e929f6.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;バッテリーの警告表示[/caption]&lt;/p&gt;&#10;&lt;p&gt;MacBook Air 2013 11インチモデルを使用しています。購入したのが2013年7月なので、もうかれこれ3年半使っていることになります。性能的には特に問題ないのですが、ついにバッテリーが劣化してきたようで、電源アイコンをクリックすると『バッテリーの交換修理』の警告が出るようになりました。&lt;/p&gt;&#10;&lt;p&gt;まぁとはいえ、何時間かは持ちますし、使い続けます。修理する場合は14,000円ほどのようです（「&lt;a class="link" href="https://support.apple.com/ja-jp/mac-notebooks/repair/service/pricing" target="_blank" rel="noopener"&#10; &gt;Mac notebooks 修理サービス料金 - Apple サポート&lt;/a&gt;」）。半額程度でAmazonには互換品があり、自分で交換することもできるようです。&lt;a class="link" href="http://www.vintagecomp.com/shopexd.asp?id=5035" target="_blank" rel="noopener"&#10; &gt;Vintage Computer&lt;/a&gt;だと純正品が1万円。微妙。&lt;/p&gt;&#10;&lt;p&gt;続報：&lt;a class="link" href="https://hack-le.com/mba2013battery-after/" &gt;MacBook Airに「バッテリーの交換修理」警告が出て一ヶ月、何故か「正常」になった&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;[caption id=&amp;ldquo;attachment_4631&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;384&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/01/cac071d2085201b3d2ac7db521e929f6.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;バッテリーの警告表示[/caption]&lt;/p&gt;&#10;&lt;p&gt;ある日、バッテリーのアイコンをクリックすると上図の警告が表示されるようになりました。Appleのサポートページ「&lt;a class="link" href="https://support.apple.com/ja-jp/HT204054" target="_blank" rel="noopener"&#10; &gt;Mac ノートブックのバッテリーについて - Apple サポート&lt;/a&gt;」によると、下記の状態です。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;バッテリーの交換修理：バッテリーは正常に機能していません。適正な電源アダプタに接続している間は Mac を問題なくお使いいただけますが、できるだけ早く Apple Store 直営店または Apple 正規サービスプロバイダにお持ちください。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;どうも、Appleとしてはもうさっさと修理してほしい状態のようです。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、何時間かは問題なく使えます。バッテリーがどれくらい劣化しているのか調べるため、「メニューバーのAppleアイコン」→「このMacについて」→「システムレポート」→「電源」より状態を確認しました（下図）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4632&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;207&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2017/01/492d69612f400f2cb20caea62af3835e.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;電源の情報[/caption]&lt;/p&gt;&#10;&lt;p&gt;ここで重要なのは、&lt;strong&gt;完全充電時の容量(mAh)&lt;/strong&gt; と、&lt;strong&gt;電圧数(mV)&lt;/strong&gt; です。電源容量は通常[Wh]で表現されます。[W] = [A] * [V] ですので、3.755 * 7.688 = 28.9 [WAh]が、現在のバッテリーの電源容量と言えます。ここの数値はちょこちょこ変わりますが、まぁ大きくは変わらないでしょう。&lt;/p&gt;&#10;&lt;p&gt;Appleの技術仕様「&lt;a class="link" href="https://support.apple.com/kb/SP677?locale=ja_JP&amp;amp;viewlocale=ja_JP" target="_blank" rel="noopener"&#10; &gt;MacBook Air (11-inch, Mid 2013) - 技術仕様&lt;/a&gt;」によると、電源は38Whです。&lt;/p&gt;&#10;&lt;p&gt;すなわち、 28.9 / 38 = 0.76より、電源容量が本来の76%まで低下していると言えそうです。Appleの基準はわかりませんが、バッテリーが劣化していると判断されるには十分な理由に思えます。&lt;/p&gt;&#10;&lt;p&gt;（追記）「&lt;a class="link" href="https://hack-le.com/mba2013battery-after/" &gt;MacBook Airに「バッテリーの交換修理」警告が出て一ヶ月、何故か「正常」になった&lt;/a&gt;」にて、その後、電源容量が変わらないにも関わらず、警告表示が消えました。ということで、これが問題とは言い難いようです（一つの尺度にはなると思いますが）。&lt;/p&gt;&#10;&lt;h2 id="どう使用してきたか"&gt;どう使用してきたか&#10;&lt;/h2&gt;&lt;p&gt;3年半で劣化というのは、ちょっと早いような気もします。特に、前節のシステムレポートの図より「充放電回数」は447となっていますが、「&lt;a class="link" href="https://support.apple.com/ja-jp/HT201585" target="_blank" rel="noopener"&#10; &gt;Mac ノートブックのバッテリーの充放電回数を確認する - Apple サポート&lt;/a&gt;」によれば、バッテリーが消耗したとみなされるのはMacBook Air 2013 11インチでは1000です。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、私は普通の人より確実にPCを酷使しています。メインノートとして頻繁に使ってきましたし、また&lt;strong&gt;画面から離れているときさえも、電源アダプタをつけっぱなしにして一晩中スクリプトを動かし続けたり&lt;/strong&gt;などがざらでした（これは特によくなかったでしょう）。ノートパソコンとしては大きな負荷だったに違いありません。さらに、&lt;strong&gt;サードパーティ製の電源を使っていた&lt;/strong&gt;ことも、バッテリー寿命に影響があったかもしれません。&lt;/p&gt;&#10;&lt;p&gt;なのでまぁ、私としてはこんなもんだろうかという感じです。お疲れさん。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;対応として考えられるのは、「買い替え」「修理」「何もしない」です。&lt;/p&gt;&#10;&lt;h3 id="買い替えの検討"&gt;買い替えの検討&#10;&lt;/h3&gt;&lt;p&gt;残念なことに、MacBook Airは（ほぼ）ディスコンです。もし買い換えるとすればMacBookでしょう。この場合、軽量化、メモリの増強、ディスプレイの微細化があります。いずれもそれなりにインパクトがあります。その代わり、USB-Type C 1基のみ、という尖った拡張性となり、これは厄介でしょう。&lt;/p&gt;&#10;&lt;p&gt;買い替えした場合の効能はそれなりにあると思いますが（特にメモリ）、肝心の処理性能については、あまり向上しないでしょう。Core Mとはいえ、ベンチマークを見る限り、下がるということもなさそうですが。&lt;/p&gt;&#10;&lt;p&gt;PCのスペックは2011-2012年頃よりほとんど停滞しています。実際、本機は2013年のものですが、スペックは今なお最前線のものと比較して遜色がありません。寂しいですね。&lt;/p&gt;&#10;&lt;p&gt;モバイルノートに性能を求めても仕方ないかもしれませんが、デスクトップで使用しているMac mini 2012と比較して、Webブラウジング一つとっても快適さが落ちるので、スペックはあまり妥協したくないのが本音です。となると13インチのMacBook Proという選択もあるのですが、13インチ、1.3kgは私には大きく重いでしょうし、なんとも。&lt;/p&gt;&#10;&lt;p&gt;値段を考えると、今はいいかな。&lt;/p&gt;&#10;&lt;h3 id="修理"&gt;修理&#10;&lt;/h3&gt;&lt;p&gt;バッテリーの交換費用は、「&lt;a class="link" href="https://support.apple.com/ja-jp/mac-notebooks/repair/service/pricing" target="_blank" rel="noopener"&#10; &gt;Mac notebooks 修理サービス料金 - Apple サポート&lt;/a&gt;」によると現在14000円ほどなようです。うーん……高いとは言わないが安いとも言えない値段。つまり適正ということかもしれませんが、いずれにせよお財布には厳しい。&lt;/p&gt;&#10;&lt;p&gt;半額程度で、互換品がAmazonから購入できるようです。MacBook Air 2013 11インチは自分で交換できるようなので、残された数少ない拡張性…という言い方は拡張しているわけではないので、おかしいか。劣化した純正品vs互換品。まぁ互換品のほうがよいのでしょうけれど。うーん……。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="http://www.vintagecomp.com/shopexd.asp?id=5035" target="_blank" rel="noopener"&#10; &gt;純正バッテリ, MacBook Air 11インチ Mid 2013-Early 2015 - Vintage Computer&lt;/a&gt;」だと、純正品が1万円です。関税もありますし、確実性や手間なども考えると、これだったら公式でお願いしたほうがよいか……。&lt;/p&gt;&#10;&lt;h3 id="何もしない"&gt;何もしない&#10;&lt;/h3&gt;&lt;p&gt;ということで、&lt;strong&gt;当面何もしません&lt;/strong&gt;。多少劣化したからといって、使えないわけじゃなし。昔のノートパソコンはもっと持ちませんでしたけれど、あまり困ったことがありません。まぁもとより、バッテリー無しで長時間使用するシチュエーションが、私の生活ではあまりないのでしょう。&lt;/p&gt;&#10;&lt;p&gt;ということで、着実に劣化はしているようですが、「何もしない」というつまらない結論になりました。魅力的な新製品が出たら買い替えの言い訳になるかもしれませんが、当面は。愛着もありますし、まだまだ頑張ってもらいます。&lt;/p&gt;</description></item><item><title>Macでコマンドライン(ターミナル上)からスクリーンキャプチャ…ピクセル単位で領域も指定できる</title><link>https://hack-le.com/screencapture-on-mac/</link><pubDate>Mon, 26 Dec 2016 21:47:28 +0900</pubDate><guid>https://hack-le.com/screencapture-on-mac/</guid><description>&lt;p&gt;Macでは通常、Cmd+Shift+3 or 4で、スクリーンキャプチャを撮ることができます。3が全画面で、4が領域指定です。とても便利な機能です。&lt;/p&gt;&#10;&lt;p&gt;コマンドラインで使うこともできます。これにより、ピクセル単位で領域を指定したり、スクリプトに組み込んで利用したりすることができます。&lt;/p&gt;&#10;&lt;h2 id="使い所"&gt;使い所&#10;&lt;/h2&gt;&lt;p&gt;わざわざショートカットキーを使わず、&lt;strong&gt;コマンドラインを使ってスクリーンキャプチャを撮影する利点は、大別して2つある&lt;/strong&gt;と思います。一つは、ピクセル単位で正確な位置でスクリーンキャプチャを撮影できること。もう一つは、スクリプトに組み込めること。&lt;/p&gt;&#10;&lt;p&gt;つまり、画面上の情報を画像として保存し、それを利用することができます。これを使うと、たとえば、画面上の一部領域を一定時間ごとに毎度スクリーンキャプチャし、cmpコマンドで前回画面と比べれば、画面上の変化を簡易的に検出できます。&lt;/p&gt;&#10;&lt;h2 id="使い方"&gt;使い方&#10;&lt;/h2&gt;&lt;p&gt;screencaptureコマンドは、多分Command Line Toolsに同梱されていると思います。manでもマニュアルが見られますが、古いようで、領域指定の大事なオプションが記述されていません。-hオプションのほうが簡潔かつ詳しいです。&lt;/p&gt;&#10;&lt;h3 id="基本"&gt;基本&#10;&lt;/h3&gt;&lt;p&gt;まず、基本の使い方は以下です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ screencapture test.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これにより、全画面のスクリーンキャプチャがtest.pngに出力されます。わざわざコマンドラインから使う以上、あまりないと思いますが、-iオプションをつけることで、通常のインタラクティブなスクリーンキャプチャが使えます。&lt;/p&gt;&#10;&lt;h3 id="よく使うオプション"&gt;よく使うオプション&#10;&lt;/h3&gt;&lt;p&gt;基本的に-hで見るのがよいと思いますが、私がよく使うオプションはあまりないので、それだけまとめます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;-C…マウスカーソルをキャプチャ画面に含める&lt;/li&gt;&#10;&lt;li&gt;-t&amp;lt;format&amp;gt;…jpgなど画像フォーマットを指定できる。デフォルトはpng&lt;/li&gt;&#10;&lt;li&gt;-R&amp;lt;x,y,w,h&amp;gt;…領域を指定する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;特によく使うのは-Rの領域指定です。覚え方は&lt;strong&gt;R&lt;/strong&gt;ectangle。他にも時間差をつけたり、キャプチャ音を鳴らさなかったりなど、色々なオプションがあります。&lt;/p&gt;&#10;&lt;h3 id="用例領域指定してjpg保存する"&gt;用例：領域指定してjpg保存する&#10;&lt;/h3&gt;&lt;p&gt;以上の用例として、領域を指定したうえで、jpg保存する例を書きます。MacBook Air 2013、OSX 10.11 El Capitanにて、メニューバー左上のリンゴマークでも撮ってみます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ screencapture -R 17,0,20,20 -t jpg test.jpg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;-Rのところは、座標(17,0)から幅20px、高さ20pxの意味です。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="test" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/12/test.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;左図のようなものが撮影できました。&lt;/p&gt;&#10;&lt;p&gt;こんな感じです。&lt;/p&gt;</description></item><item><title>ようやくiOS 10.2 でスクリーンショット無音化が可能に</title><link>https://hack-le.com/silentscreenshot/</link><pubDate>Sun, 25 Dec 2016 21:54:00 +0900</pubDate><guid>https://hack-le.com/silentscreenshot/</guid><description>&lt;p&gt;OSのアップデートで嬉しくなったのは久しぶりです。ようやく、iOSでスクリーンショット音を無音化させることができるようになりました。シャッター音自体も小さくなったようです。さすがに不満が大きくなったとみえます。売上にも影響があると判断したかな。それとも、ティム・クックが日本に来た時iPhoneで写真を撮られて「うるせぇ！」と思ったかな 笑。iPhone 7が出て、買おうかなぁと浮足立っていた私の目を覚ましたのは、iPadの凄まじいスクショ音でした。そういう人もそれなりにいたんじゃなかろうか。&lt;/p&gt;&#10;&lt;h2 id="シャッター音が控えめ"&gt;シャッター音が控えめ&#10;&lt;/h2&gt;&lt;p&gt;シャッター音が少し控えめになったそうです。iOS端末のシャッター音は凄まじかった。ハードウェアの進化で音量が大きくなったのにくわえ、iOS 10で謎の音量アップというダブルパンチで、Apple自慢のスピーカーから、スクリーンショットのたびに耳を劈く稲妻のような爆裂シャッター音が鳴り響いていました。いくらなんでもおかしいと思った人は多かろうと思います。&lt;/p&gt;&#10;&lt;p&gt;シャッター音そのものの是非はあります。私はシャッター音は必要ないと考えていますが、別にあっても構いません。しかしながら、どれくらいの音量が適切かというのは、これはちょっとよく考えないといけないのではないかと、iPadをiOS 10にアップデートした時、強く思いました。&lt;/p&gt;&#10;&lt;p&gt;私はiPhone 7は手元にありませんが、iPad Air 2があります。これを使って試して試してみましょう……うむ、わかりません。&lt;strong&gt;相変わらずうるさい&lt;/strong&gt;と思いました。iOS 10にしてからは、iPadでスクリーンショットもほとんど撮らないようにしていたので、忘れました。。。うーん、でもちょっと小さくなったかな？少なくとも、地割れでも起きたのかとは思わないし。&lt;/p&gt;&#10;&lt;p&gt;まぁ、皆が控えめになったというので、きっとそうなのでしょう（いい加減な……）。&lt;/p&gt;&#10;&lt;h2 id="スクリーンショットの無音化"&gt;スクリーンショットの無音化&#10;&lt;/h2&gt;&lt;p&gt;それよりも、個人的にシャッター音より問題視していたのはスクリーンショット音です。これが消音できるのであれば、たいへんありがたいのですが……。さて、これは……&lt;strong&gt;素晴らしい！スクリーンショットの音が非常に音が小さくなり、また消音をオンにすると音そのものがでなくなりました！&lt;/strong&gt; これは嬉しい。有難い。&lt;/p&gt;&#10;&lt;p&gt;OSのアップデートで喜びを感じたのは久しぶりです。&lt;/p&gt;&#10;&lt;p&gt;シャッターの音量も、せめてもう少し小さくなるとよいですね。あまり意味があると思えないので、消音できてよいと思いますが、それが難しいことであれば、せめてXperiaくらいの音量になると良いと思います。&lt;/p&gt;&#10;&lt;p&gt;これでまた一つ、iPhoneの穴が埋まりました。今使っているXperia Z3が使えなくなったら、次はまたiPhoneかな。&lt;/p&gt;</description></item><item><title>2TBのSSDが6万円…オールSSDの時代も見えてきた…のかなぁ</title><link>https://hack-le.com/2tbssd6man/</link><pubDate>Wed, 14 Dec 2016 20:33:37 +0900</pubDate><guid>https://hack-le.com/2tbssd6man/</guid><description>&lt;p&gt;ここ一ヶ月ほど、SSDが急騰しており、また今後も円安・NANDフラッシュメモリ不足のダブルパンチで値上がり基調は続くのではないかと、悲観的な見方が広がっているようです。しかし、長期的にはやはり価格はさらに熟れていくものと思います。&lt;/p&gt;&#10;&lt;p&gt;現在、2TBのSSDが6万円です。SATAですが。なんとか手が届かなくもない値段です。だからといって買えませんが……。でも、オールSSDの時代が近づいているようにも思え、楽しみです。が、同時にSATAからPCIeの流れもあるのが微妙なところです。&lt;/p&gt;&#10;&lt;h2 id="初ssdから6年"&gt;初SSDから6年&#10;&lt;/h2&gt;&lt;p&gt;私の初SSDは、MacBook Air 2010ですから、もう6年も前になります（遠い目）。当時、本当はMacBook Proが欲しかったのですけれど、既に友人が所持しており、かぶるのも嫌だなぁと（その頃はまだギリギリ猫も杓子もMacではなかった）、ちょっと冒険してMacBook Airを購入したのです。スペック的にどうかなとも思ったのですが、これが想像以上に快適で、一体何故だと調べれば、ストレージの影響が大きいという話。&lt;/p&gt;&#10;&lt;p&gt;その後SSDの威力を改めて思い知ったのは、その3年後で、Mac mini 2012をSSDに換装した時でした。HDでもまぁ悪くないかなと思っていたのですが、SSDにしたら、これはもう、劇的に違った。いったい何故私はもっと早くSSDにしなかったのかと思いました。&lt;/p&gt;&#10;&lt;p&gt;そういうことがあったので、2016年も終わろうという昨今でもなお、食わず嫌いでHDで十分だと言っている人を見るにつけ、勿体無いことだなぁと思いますが、こればかりは、体感しないことにはきっとわからないでしょう。私とて、自分でストレージを換装するという経験があったればこそ、こう考えるに至ったわけですし。ただ、もしSSDにするか悩んでいるのであれば、それは迷わず、いますぐポチるがよいと言います。250GB程度のものであれば、安いものならば6-7000円程度です。本当に安くなりました。&lt;/p&gt;&#10;&lt;p&gt;昨今、トランプ円安（いわゆるアナリストと呼ばれる人たちが、揃いも揃って円高恐慌と叫んでいたのは、いったいなんだったのでしょう…思想が絡むと目は曇る、ということなのかな…他山の石とすべきか）とNANDフラッシュメモリ不足が重なり、値ごろ感のあった1TBクラスのSSDが若干値上がり傾向ですけれど、それでも3万円しません。まぁストレージで3万円は、私にはまだだいぶ厳しいですが、出せる人もそこそこいるでしょう。&lt;/p&gt;&#10;&lt;p&gt;そして、2TBクラスのものが、6万円。いや、やはり厳しいことには違いありませんが、射程内に入ってきたと思います。今、私は480GB SSD + 1TBのFusion Driveですから、オールSSDも現実味を帯びてきました（私の場合NASも必要ですが）。前述したように、現在は値上がり基調であるものの、長期的には値下がりするでしょうし、あと3年もすれば、購入圏内にも入ってきそうで、楽しみです。&lt;/p&gt;&#10;&lt;h2 id="sataとpcie"&gt;SATAとPCIe&#10;&lt;/h2&gt;&lt;p&gt;ただ、これらはSATA規格での話です。Appleが現在推し進めているのはPCIeのもので、こちらのお値段は、SATAタイプのSSDからさらに倍近い。従来のSATAに最適化されたAHCI(Advanced Host Contoller Interface)に代わり、NMVe(Non-Volatible Memory express)という規格を採用することで、PCIeをフル活用し、さらなる高速化が実現されており（このあたりのことは「&lt;a class="link" href="http://akiba-pc.watch.impress.co.jp/docs/dosv/1016690.html" target="_blank" rel="noopener"&#10; &gt;NVMeとAHCIの違いを理解する ～SSDのインターフェースを理解する 3～ - AKIBA PC Hotline!&lt;/a&gt;」がわかりやすかった）、MacBook Pro 2016のベンチマークなどは、目を見張るものがあります。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、現実には、個人用途において、PCIeの恩恵が体感できるシチュエーションは、あまりないようにも思えます。これが、エンタープライズの巨大サーバーとなると話は変わってくるようですが（参考「&lt;a class="link" href="http://techtarget.itmedia.co.jp/tt/news/1609/05/news02.html" target="_blank" rel="noopener"&#10; &gt;1秒当たり7500兆の処理でも不安、Facebookが熱望するフラッシュストレージ最新技術とは － TechTargetジャパン サーバ＆ストレージ&lt;/a&gt;」）、個人用途では、開発用途だったとしても、さすがにちょっとオーバースペックではなかろうか。少なくとも、HDからSSDに変えた時のようなインパクトは期待できまい。&lt;/p&gt;&#10;&lt;p&gt;体感できないスペックアップより、お値段のほうが多くの個人消費者にとっては大事なことです。将来的に、本命なのはPCIeのほうなのだろうとは思いますが、SATA規格でようやく射程内に入ってきたかも、という感じですから、PCIeのものの値段が熟れるのは、まただいぶ先なのでしょうねぇ……。さらにそれがMacの値段に反映される頃なると……昨今の、中身をいじらせない流れも合わせると……。&lt;/p&gt;&#10;&lt;p&gt;うーん、やっぱり、HDをNASに押し込められるのは、もうちょっと先なのかなぁ（それとも、SATAのSSDを換装できる今のMac mini 2012を、3年後くらいもまだ使っていたりするんだろうか……今の感じだと、壊れていなければそれもありえる……）。&lt;/p&gt;</description></item><item><title>IIJmioの3GBからDMM 1GBプランへの乗り換えを検討→引き続きIIJmioにする</title><link>https://hack-le.com/thinkiij2dmm/</link><pubDate>Tue, 13 Dec 2016 18:40:37 +0900</pubDate><guid>https://hack-le.com/thinkiij2dmm/</guid><description>&lt;p&gt;私はXperia Z3に、いわゆる安SIMを入れてつかっています。現在在宅で仕事をすることが多く、月のデータ使用量がほとんどありません。現在利用しているIIJmioでは、ミニマムスタートプランでも3GB/月、高速データ通信が使えるのですが、3GB使い切ったことはほとんどありません。恐らく、使い方を工夫すれば、DMM mobileの1GBプランでもいけそうです。で、検討したのですが、やはりIIJmioを当面続けることにしました。以下その考えの軌跡です。というか&lt;strong&gt;上図がそれ&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="データ通信だけ見ると年間差額は約5443円47off"&gt;データ通信だけ見ると年間差額は約5443円、47%OFF&#10;&lt;/h2&gt;&lt;p&gt;まず、私が現在契約しているのは、IIJmioのミニマムスタートプランプラン（タイプD…au回線はタイプA）です。スペックは以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;DoCoMo系&lt;/li&gt;&#10;&lt;li&gt;900円（税抜き）&lt;/li&gt;&#10;&lt;li&gt;SMS 140円（税抜き）&lt;/li&gt;&#10;&lt;li&gt;高速データ通信 3GB/月&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これまで、特に困ったことはありません。良いサービスだと思います。au回線のタイプAならば、SMSの費用が0円みたいで、羨ましいですが、au系は通信規格などけっこう罠があるので、私はDoCoMo系を使い続けるでしょう。&lt;/p&gt;&#10;&lt;p&gt;さて、私は現在在宅で仕事をすることが多く、3GB/月の高速データ通信は持ち腐れ状態です。恐らく、工夫すれば労無くして1GB/月に抑えることができるでしょう。1GBのデータプランといえば、DMM mobileが頑張っています。スペックは以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;DoCoMo系&lt;/li&gt;&#10;&lt;li&gt;480円（税抜き）&lt;/li&gt;&#10;&lt;li&gt;SMS 150円（税抜き）&lt;/li&gt;&#10;&lt;li&gt;高速データ通信 1GB/月&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これは、なかなか価格的訴求力があります。特にSMSを使わない場合、倍近い差が生じる。消費税も考慮すると、&lt;strong&gt;年間の差額は(900 -480) * 12 * 1.08 ≒ 5443円/年ほど&lt;/strong&gt;。ふむ。&lt;strong&gt;比率でいえば、480/900=0.53より47%OFF&lt;/strong&gt;です。ほぼ半額。&lt;/p&gt;&#10;&lt;h2 id="smsと乗り換えの手続きにかかる費用を考慮すると"&gt;SMSと乗り換えの手続きにかかる費用を考慮すると&#10;&lt;/h2&gt;&lt;p&gt;しかし、私はSMSは使う派です。もちろん、いまさらSMSによるやりとりなんてしません。ですが、本人確認や、二段階認証で使うことが多いのです。多くの場合、代替となる手段も用意されていますが（050電話など）、煩わしい。&lt;/p&gt;&#10;&lt;p&gt;また、セルスタンバイ問題もいまだないわけではないらしい。海外では音声通話にかかるコストがそれほどでもないようで、電話番号無しのデータSIMの需要が低いという話です。データ専用SIMは、割と日本のローカルな問題から生まれたものなんでしょうか。&lt;/p&gt;&#10;&lt;p&gt;以上より、月々150円程度の価値はあるものと考えています。そうすると、&lt;strong&gt;年間差額は(1040 - 630) * 12 * 1.08 ≒ 5,313円/年&lt;/strong&gt;となり、&lt;strong&gt;比率で言うと630/1040 = 0.60より40%OFF&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まだ価格的訴求力がありますが、乗り換えの場合、新規契約の手続費用3,000円がかかります。これを考慮すると、一年目は5,313 - 3,000 * 1.08 = 2,073円/年です。ただし、SMSの一ヶ月目が無料らしいので、&lt;strong&gt;一年目の差額は2,054 + 150 * 1.08 = 2,235円/年です。比率にして、17%！&lt;/strong&gt; うーん、なんだかお得感がなくなってきました。&lt;/p&gt;&#10;&lt;p&gt;ちょっと整理して、IIJmioからDMM mobileに乗り換えてnヶ月契約したとすると、以下のように書けます（消費税とユニバーサル料金除外）。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;IIJの場合… (900 + 140) * n = 1,040 * n&lt;/li&gt;&#10;&lt;li&gt;DMM mobileの場合… 480 + (480 + 150) * (n-1) + 3000 = 630 * n + 2,850&lt;/li&gt;&#10;&lt;li&gt;差額は上2式の差…410 * n - 2,850、比率はこれを1040 * nで割る&#10;&lt;ul&gt;&#10;&lt;li&gt;n&amp;gt;=7、つまり&lt;strong&gt;7ヶ月以上契約して初めてお得&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;n=12、つまり&lt;strong&gt;1年契約すると2,070円（税込み2,235円）お得、約17%OFF&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;n=24、つまり&lt;strong&gt;2年契約すると6,990円（税込み7,550円）お得、約28%OFF&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;こんな感じです。もちろん月数がたつたびに、価格などの不確定要素は強まります。&lt;/p&gt;&#10;&lt;p&gt;これをグラフ化すると、記事冒頭のグラフになります。下に再掲。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/12/otoku-2.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;緑の点線がお得率&lt;/strong&gt;。これまでの計算通り、お得になるのは7ヶ月以降で、15ヶ月目くらいでようやく20%OFFといったところ。そこからは、徐々に40%OFFへと近づいていくわけです。&lt;/p&gt;&#10;&lt;p&gt;うーーーーん、これはちょっと、どうでしょうね。少なくとも1年契約と考えると、17%OFFにあたる税抜き2,070円が差額ですが、これは……手間暇や不確定さを考えると、おいしくない。IIJmioに不満はなく、むしろiPhone対応などはどこよりもよくやっているなぁという印象で、一方DMMは、力を入れているのはわかりますが、その品質は未知数。&lt;/p&gt;&#10;&lt;p&gt;2年契約と考えると、差額は3割弱近くになり、価格も税抜き7,000円とそこそこです。それでも、言い換えると月290円の差……うーん。そもそも、2年後果たしていったい世の中はいったいどうなっているのでしょう。いやそれより、&lt;strong&gt;私は2年後いったいどんな生活をしているのでしょうか&lt;/strong&gt;。もしかしたら、1GBではまた足りない生活になっているかもしれない。いや、まずまともに生活をできているのか！？わからない、わからない……。&lt;/p&gt;&#10;&lt;h2 id="結論乗り換えるほどの価格的訴求力はない"&gt;結論：乗り換えるほどの価格的訴求力はない&#10;&lt;/h2&gt;&lt;p&gt;以上より、結論。&lt;strong&gt;これから格安SIMを使おうという人が新規契約をする場合は、DMM mobile 1GBプランは検討の価値あり&lt;/strong&gt;と思います。しかし、&lt;strong&gt;既にIIJmioなどでよくある3GBプランを利用している場合、わざわざDMM mobileに乗り換えてやるほどの価格的訴求力はない&lt;/strong&gt;でしょう。&lt;/p&gt;&#10;&lt;p&gt;というわけで、引き続き、IIJmioさんのお世話になることにします。当サイトでこの手の記事は珍しいですが、実はけっこうこういうことを考えるのは好きなタチで、ケータイ買い替えのたびに、考えられるケース毎にグラフ化していたりなんだりしています。&lt;/p&gt;</description></item><item><title>無線LANルータ TP-Link Archer C3150レビュー、木造2階建てなら死角無し</title><link>https://hack-le.com/tplinkc3150/</link><pubDate>Mon, 12 Dec 2016 00:04:37 +0900</pubDate><guid>https://hack-le.com/tplinkc3150/</guid><description>&lt;p&gt;TP-Linkの無線LANルータ、Archer C3150を購入しました。&lt;/p&gt;&#10;&lt;p&gt;今まで使っていたのは、NECのWR8700Nです。我が家は木造２階建てで、ルータを置いているのは2階の居室。1階に降りると、ルータのある部屋のすぐ下であるリビングならばよいのですが、トイレやお風呂場、廊下など、電波の届かないところがいくつかありました。&lt;/p&gt;&#10;&lt;p&gt;今回無線LANルータを新調したことで、今まで死角となっていたところでも電波が行き届くようになりました。たいへんハッピーです。&lt;/p&gt;&#10;&lt;h2 id="1階まで電波が届く無線lanルータが欲しい"&gt;1階まで電波が届く無線LANルータが欲しい&#10;&lt;/h2&gt;&lt;p&gt;私は11月から12月にかけて物欲が刺激されるようです。LGのウルトラワイドディスプレイ、BungBungameのハイスペックAndroidタブレットにつづいて、無線LANルータを購入してしまいました（ついでに200GBのmicroSDも）。そういえば去年もこの時期に、SSDを買い、NASを買い、ルンバを買い、Chromebookを買いました。まぁ、セールの時期ですからねぇ。Chromebook以外は、良い買い物でした。&lt;/p&gt;&#10;&lt;p&gt;今回購入したのは、TP-LinkのArcher C3150です。TP-Linkは日本ではまだ耳慣れない人も多いかと思いますが、海外では大きなシェアを握っています…などと言いつつ、自分も最近INTERNET Watchの記事（「&lt;a class="link" href="http://internet.watch.impress.co.jp/docs/column/shimizu/1031336.html" target="_blank" rel="noopener"&#10; &gt;【清水理史の「イニシャルB」】 相場を一気に引き下げた脅威のコスパ 2167＋1000Mbps対応の無線LANルーター TP-Link「Archer C3150」 - INTERNET Watch&lt;/a&gt;」）を見て知ったクチなのですが。&lt;/p&gt;&#10;&lt;p&gt;ちょうど、無線LANルータを新調しようかと考えていたところでした。というのも、数年前に数千円で購入したWR8700Nは、当時アパートで一人暮らし（というより一種のシェアハウス）をしていた自分にとっては不足のないものでしたが、今の木造2階建ての実家では、明らかに力不足だったからです（と書いたけれど、本当にアパートで使っていたやつだったかどうか定かではない…まぁどうでもいいか）。もう数年使っていますから、劣化もしていたかもしれません。&lt;/p&gt;&#10;&lt;p&gt;2階の居室に置いていたので、1階の電波事情があまりよろしくありませんでした。真下のリビングであればさほど問題ないものの、そこから離れると非常に電波が悪く、トイレやお風呂でスマートフォンが使えない状況。また、リビングの電波も届くとはいえ不安定らしく、しばしば機器の接続が不調になる。&lt;/p&gt;&#10;&lt;p&gt;Netgearのエクステンションを購入したのですけれど、これはこれであまり安定しませんでした。特にXperia Z3とは相性がよくないようで、まぁないよりはマシ、といった程度。無線機器は、使ってみるまでわからないところがあり、難しい。&lt;/p&gt;&#10;&lt;p&gt;ここは一つ、小細工せず、もっと電波範囲の広い優秀な無線LANルータを購入しようかと、そう考えていました。しかしなかなか、踏ん切りがつかなかったのですが、このTP-LinkのArchar C3150は、なかなか良いものに思え、Amazonでちょうどタイムセールが始まったこともあり、えいやっとポチった次第です。&lt;/p&gt;&#10;&lt;h2 id="tp-link-archer-c3150の使用感"&gt;TP-Link Archer C3150の使用感&#10;&lt;/h2&gt;&lt;p&gt;Archer C3150は、2016年12月現在、市場価格は2万円ほどです。タイムセールで15,800円で購入できましたが、それでも無線LANルータでこの価格は決して安くはありません。しかし、電波が届かないということで苦労していた以上、後悔しない買い物をと、家庭用としては十分に違いないと確信できる本製品を購入。&lt;/p&gt;&#10;&lt;p&gt;結果として、&lt;strong&gt;木造建築2階建ての我が家のどこでも電波が届くようになりました&lt;/strong&gt;。&lt;strong&gt;2.4GHzはもちろん、あまり期待していなかった5GHz帯も、かなり広範囲で繋がってくれます&lt;/strong&gt;。素晴らしい！&lt;/p&gt;&#10;&lt;p&gt;お風呂で使えたのはもちろんですが、リビングの電波事情もよくなったようで、いままでちょくちょくと通信の途切れることがあったPCが、非常に安定するようになったらしく、これはちょっと嬉しい誤算でした。&lt;/p&gt;&#10;&lt;h3 id="eo光の多機能ルータと併用する場合"&gt;eo光の多機能ルータと併用する場合&#10;&lt;/h3&gt;&lt;p&gt;ただ、我が家はeo光なのですが、&lt;strong&gt;eo光はモデム内蔵ルータが配られるために、せっかくのC3150をルータではなくアクセスポイントとして使わなくてはならない&lt;/strong&gt;のが悲しいところです。&lt;/p&gt;&#10;&lt;p&gt;私はこのモデム内蔵ルータというやつが好きではありません。ルータは自分で選びたいからです。しかし、配られるのだから仕方がない。ルータ機能をOFFにすることはできますが、そうするとひかり電話の子機が使えなくなるとマニュアルにはあります。まぁ、余計なことはしないほうがよいのだろうな。&lt;/p&gt;&#10;&lt;p&gt;したがって、せっかくのArcher C3150をルータとして全力出させてやれず、残念です。しかもこの設定がやや面倒で、「&lt;a class="link" href="http://www.tp-link.jp/faq-1199.html" target="_blank" rel="noopener"&#10; &gt;TP-Linkルーターをどのようにすればアクセスポイントモード(ブリッジモード)に設定できますか？(青い管理画面の機種) - TP-Link&lt;/a&gt;」にあるように、Webブラウザでアクセスして設定してやる必要があります。この点は、DIPスイッチで一発でブリッジモードに切り替えられたNECのWR8700Nのほうが楽ではありました。&lt;/p&gt;&#10;&lt;p&gt;（2016/12/25 追記）eo光の多機能ルータとの併用について、コメントをいただきました。LAN側では、DHCP機能のほか、もしルータ側でUPnP機能を使っている場合は、それも無効化させたほうがよいとのことです。また、eo光の多機能ルータに無線LAN機能がついている場合、多機能ルータ側の無線LANも切っておかないと、干渉するのかうまく動作しない、とのことです。参考までに。&lt;/p&gt;&#10;&lt;p&gt;（2017/03/13 追記）Archer C3150はOpenVPNのサーバー機能がありますが、ブリッジモードにするとこの機能も使えません。TP-Linkのサポートに言われました。。。考えてみればそうか。&lt;/p&gt;&#10;&lt;h2 id="きっとオーバースペックだけれど満足です"&gt;きっとオーバースペックだけれど、満足です&#10;&lt;/h2&gt;&lt;p&gt;このC3150は多くの機能を備えています。ルータは物理的に電磁波を飛ばすので、MIMOやビームフォーミングなどのアンテナ技術に加え、ノイズ処理など、アナログ的なノウハウが詰まっていることでしょう。&lt;/p&gt;&#10;&lt;p&gt;横文字の頼もしい言葉がメーカーページには並んでいますが……どうでしょうね、高等な技術も、それに対応する子機がなくては意味がありませんし、またあったとして、それが十分に機能するかは別の話ですしね。&lt;/p&gt;&#10;&lt;p&gt;C3150にはDFS(Dynamic Frequency Selection)の機能がないということで忌避する人もいますが、これも良し悪しじゃないでしょうか。DFSとはこのルータについて調べているときに知ったことですが、どうやら、5GHz帯には、気象レーダーと共有するチャネルがあり、それらを使うため、レーダーがいないかどうかを検知する機能であるようです。特に「&lt;a class="link" href="http://www.silex.jp/blog/wireless/2012/03/post-3.html" target="_blank" rel="noopener"&#10; &gt;無線 LAN と通信距離について(5)｜Wireless・のおと｜サイレックス・テクノロジー株式会社&lt;/a&gt;」の記事が参考になりました。&lt;/p&gt;&#10;&lt;p&gt;参考記事には、DFSについて以下のような記述があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;DFS が無線 LAN システムにとって厄介なのは、チャネルを使用するとき「レーダー等が居ないかどうか」を一定時間(１分)調べてからでなければ電波を出してはいけない、という規定です(※註)。この「チャネルを使用するとき」というのはシステム起動時のみならず、DFS が働いて別のチャネルに移動した後にも適用されます。このため、DFS 帯域で動く 802.11a システムは DFS が働いたとき少なくとも１分、条件が悪ければ(移動した先のチャネルでまたレーダーに引っ掛かったならば)もっと長時間にわたって通信が停止するリスクを抱えています。広帯域を使う 802.11ac では、DFS の影響は更に深刻になることが予想されます。&lt;/p&gt;&#10;&lt;p&gt;※註：もちろん、DFS には回路の複雑化や認証費用の増加などコスト面への悪影響もあります。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;うーん、これはかなり厄介そうです。使えるチャネルが増えるのは大きな魅力ですが、なかなか一筋縄ではいかなそう。高等な技術はそれだけ実装も難しく、機能があったからといって、それが十分安定して運用できるかどうかはまた別の問題。こんなことを考えていると、個人的には無理に対応しなくてもよいのではないかなと思います。こう言っては身も蓋もありませんが、所詮家庭用ですから。きっと、機能としては既にオーバースペックです。使い始めたばかりですが、今のところは十分満足しています。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01LYTYIKF&amp;linkId=1ec1c84ebddbcce1199a451d8ce8d161" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;無線LANルータに期待することは、派手な機能よりも、できるだけ広範囲に安定して電波を飛ばし、通信を滞りなく続けてくれることです。こればかりは、使い続けないとわかりません。わかる頃には、買い替えです。その意味では、NECのルータは、決して悪くありませんでした。よく頑張ってくれました。TP-Linkは、どうかな。頑張ってほしいな。</description></item><item><title>iPhoneやiPodで撮影した写真がアメブロなどで横向きになる場合の対応</title><link>https://hack-le.com/ameblophoto/</link><pubDate>Sun, 11 Dec 2016 00:10:50 +0900</pubDate><guid>https://hack-le.com/ameblophoto/</guid><description>&lt;p&gt;母はいまだに私が昔プレゼントしたiPod touchを使ってくれています。3.5インチ時代の、ジョブズの遺産です。この頃のデザインが私は一番カッコイイと思います。&lt;/p&gt;&#10;&lt;p&gt;それはさておき、iPod touchで撮影した写真をアメブロにアップロードすると、縦で撮った写真が横向きになるので、なんとかならないかと相談を受けました。その原因と対応について書きます。結論だけ書くとスクリーンキャプチャ（スクリーンショット）で再撮影が一番楽だと思います。&lt;/p&gt;&#10;&lt;h2 id="現象"&gt;現象&#10;&lt;/h2&gt;&lt;p&gt;iPhone(iPod touch)で、縦向きで写真を撮影した。PCで見た時、通常の画像ビューアーアプリで開くと、ちゃんと縦向き。しかし、それをアメブロなどのブログにアップロードすると、何故か横向きになってしまう。&lt;/p&gt;&#10;&lt;h2 id="原因"&gt;原因&#10;&lt;/h2&gt;&lt;p&gt;アプリケーションが写真のメタデータをどう解釈するかの違いと思われます。画像データには、「この画像はどういうものか」を記録する領域があり、メタデータと呼ばれます。&lt;/p&gt;&#10;&lt;p&gt;その中に、撮影日時や、画像を撮影した場所、撮影した方向などを記録したExif情報というものがあります。iPhoneやiPodで撮影した場合、撮影した時のデバイスの方向を元にして、画像の向きの情報が、Exif情報として残されます。&lt;/p&gt;&#10;&lt;p&gt;その情報をどう取り扱うかは、画像を開くアプリケーション側に委ねられます。多くのビューアーアプリでは、その情報をきちんと扱ってくれるので、問題ありません。しかし、ブログにアップロードするなどした場合、必ずしもその情報が反映されるとは限りません。その結果、Exifの画像の方向という情報が無視されてしまい、縦向きの画像なのに横向きの画像になってしまう、という現象が起きます（参考「&lt;a class="link" href="http://pastak.hatenablog.com/entry/2014/02/21/210742" target="_blank" rel="noopener"&#10; &gt;ブラウザーと画像のEXIFのお話 - Pastalablog in はてな&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;対応としては、Exifで画像の方向を指定するのではなく、画像自体を回転させて、かつそのようにExif情報を適切に書き換えることが考えられます。その具体的な方法は色々考えらますが、一番楽なのはスクリーンキャプチャだと思います。&lt;/p&gt;&#10;&lt;h3 id="スクリーンキャプチャで範囲指定撮影"&gt;スクリーンキャプチャで範囲指定撮影&#10;&lt;/h3&gt;&lt;p&gt;必要な画像を開いた状態で、スクリーンキャプチャで範囲を指定して撮影します。つまり、画像の再生産です。&lt;/p&gt;&#10;&lt;p&gt;これの良いところは、位置情報など、公開に注意を要する情報もなかったことにできることです。さらに、サイズ調整とトリミングも同時にできる（昨今のスマートフォンで撮影した写真は、ブログにそのまま上げるには大きすぎる）。実は私も、ブログに写真をアップロードするときは、スクショで再撮影しています。楽なんです。&lt;/p&gt;&#10;&lt;p&gt;まず、アップロードしたい写真を適当なアプリで開きます。その後、スクリーンキャプチャしますが、やり方をMac、Ubuntu 14.04、Windowsに分けて書きます。&lt;/p&gt;&#10;&lt;h4 id="macの場合"&gt;Macの場合&#10;&lt;/h4&gt;&lt;p&gt;Macの場合は、Cmd + Shift + 4を同時に押すと、範囲指定でスクリーンキャプチャを撮影することが可能です。なお、Cmd + Shift + 3で全画面撮影です。便利。&lt;/p&gt;&#10;&lt;h4 id="ubuntu-1404の場合"&gt;Ubuntu 14.04の場合&#10;&lt;/h4&gt;&lt;p&gt;Ubuntu 14.04の場合、Shift + PrintScreenキーで部分撮影できます。ちなみに、Alt + PrintScreenでアクティブウィンドウのみ撮影、PrintScreenで全画面撮影です。けっこう便利。&lt;/p&gt;&#10;&lt;h4 id="windowsの場合"&gt;Windowsの場合&#10;&lt;/h4&gt;&lt;p&gt;Windowsはちょっとややこしいです。「&lt;a class="link" href="http://komidori-info.com/archives/9036" target="_blank" rel="noopener"&#10; &gt;windowsスクリーンショットのやり方！範囲指定も簡単～♪ | komidoriの今が旬！！&lt;/a&gt;」の記事が素晴らしいのでここを参考にしてください。終わり。&lt;/p&gt;&#10;&lt;h3 id="わかる人向けimagemagickのconvert--auto-orientを使う"&gt;わかる人向け：Imagemagickのconvert -auto-orientを使う&#10;&lt;/h3&gt;&lt;p&gt;見出しだけみて何のことかわかる人向け別解。ImageMagickでもできます。さすが。&lt;/p&gt;&#10;&lt;p&gt;まず画像の方向の情報については、identifyコマンドで調べられます。たとえば以下のように。&lt;/p&gt;&#10;&lt;pre&gt;`$ identify -verbose hoge.jpg | grep -i orient`&lt;/pre&gt;&#13;&#10;&lt;p&gt;convertコマンドの-auto-orientオプションを使用することで、orientation情報に基づいた画像の回転と、Exif情報の書き換えが適切に行われます。以下に、hoge.jpgをhosei_hoge.jpgに変換する例を書きます。&lt;/p&gt;&#10;&lt;pre&gt;`$ convert -auto-orient hoge.jpg hosei_hoge.jpg&lt;code&gt;`&lt;/code&gt;&lt;/pre&gt;&#13;&#10;&lt;p&gt;画像は回転され、先のidentifyコマンドで確認すると、メタデータもたしかに書き換わっていることがわかります。&lt;/p&gt;&#10;&lt;p&gt;カレントディレクトリにあるjpgすべてに適用するには、以下です。&lt;/p&gt;&#10;&lt;pre&gt;` $ for f in *.jpg; do convert -auto-orient "${f}" "hosei_${f}"; done;`&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>ハイスペックAndroidタブレット、KALOS 2を使って2週間目の使用感（追記あり）</title><link>https://hack-le.com/kalos2/</link><pubDate>Sat, 10 Dec 2016 00:50:44 +0900</pubDate><guid>https://hack-le.com/kalos2/</guid><description>&lt;p&gt;板ばっかり買ってどうするんだろうと思いつつ、Androidタブレットが欲しくて、BungBungameという、あまり耳に馴染みのないメーカーの製品KALOS 2を購入してしまいました。スペックの割にはお値頃価格なのですが、色々と訳ありな製品です。&lt;/p&gt;&#10;&lt;p&gt;使用して2週間、用途によってはなかなかよいデバイスではないかと思いました。iPad Air 2と比べると、さすがに落ちますが、Androidならではの自由さがウリです。&lt;/p&gt;&#10;&lt;h2 id="ハイスペックの割にお値頃"&gt;ハイスペックの割にお値頃&#10;&lt;/h2&gt;&lt;p&gt;私はiPad Air 2を持っていますけれど、一つAndroidタブレットがほしいなぁと思っていました。AndroidはiOSにはない自由さがあります。スマートフォンでXperia Z3とiPhone 5を比べたとき、基本的な完成度はiPhoneの完勝というのが正直な感想ですが、それでもなお、AndroidにはiOSにはない魅力があります。AndroidとiOSの比較はこの記事の本旨ではないので、あまり深くはつっこみませんが、&lt;strong&gt;大事なことは、Androidであること&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;今回私が探したのは、大型の（といってもAndroidだと10インチクラスがせいぜいなのですが…）Androidタブレットです。それも、iPadに見劣りしないような、ハイスペックのものがいい……と思ったのですが、これがなかなかない。&lt;/p&gt;&#10;&lt;p&gt;HuaweiやASUSの「そこそこ」のスペックで安いものはまぁまぁあるのですけれど、それを超えると一気にXperiaになってしまうようで、そうなると、お値段的にもiPadに引けを取らない。&lt;/p&gt;&#10;&lt;p&gt;時折iPhoneやiPadをHuaweiの製品などと比べてボッタクリであるなどというような主張も見受けられますが、いやいや、ハイエンドはAndroidだって高い。まぁiPhoneはハイエンドの中でもちょっと高いなと思いますが、少なくともiPadについては、ハイエンドとしてはむしろ安いくらいだと思います。iPad Air 2の32GBなんて、現在実売はもう45,000円ほどで、これに対抗できるAndroidタブレットを、少なくとも私には見つけられませ……&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01E71LCCM&amp;linkId=336d04921890fa44a341298d5c88f358" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;見つけました。これです。KALOS 2。&#13;&#10;&lt;p&gt;公式ページは「&lt;a class="link" href="http://www.bungbungame.com/JP/products/products.aspx?name=KALOS2" target="_blank" rel="noopener"&#10; &gt;BungBungame&lt;/a&gt;」。主なスペックは以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CPU…Exynos 7420（オクタコア 2.1GHz, Samsung）&lt;/li&gt;&#10;&lt;li&gt;内蔵ストレージ…64GB&lt;/li&gt;&#10;&lt;li&gt;RAM…3GB&lt;/li&gt;&#10;&lt;li&gt;ディスプレイ…有機EL（Super AMOLED）、10.5インチ、2560 x 1600(WQXGA)&lt;/li&gt;&#10;&lt;li&gt;OS…Android 6.0&lt;/li&gt;&#10;&lt;li&gt;バッテリー…5800mAh&lt;/li&gt;&#10;&lt;li&gt;重量…430g&lt;/li&gt;&#10;&lt;li&gt;USB Type-C&lt;/li&gt;&#10;&lt;li&gt;microSDが使える&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;ええやん&lt;/strong&gt;。これで、&lt;strong&gt;現在の市場価格4万弱&lt;/strong&gt;です。元々は6万くらいしたそうですが。6万円と言われると微妙ですけれど、4万円ならば「ほぅ……」という感じです。特に&lt;strong&gt;10.5インチというのがいい&lt;/strong&gt;ですね。10:16ならば横幅14.1cmでしょうか。iPad Air 2がおおよそ14.8cmですから、3:4のiPadと遜色ない横幅とは、嬉しい。しかも有機EL。内蔵ストレージが64GBも地味に嬉しいですね。加えてmicroSDも使える。&lt;/p&gt;&#10;&lt;p&gt;ただ、ネックはメーカーです。BungBungame。どこだ。&lt;/p&gt;&#10;&lt;h2 id="bungbungameというメーカー"&gt;BungBungameというメーカー&#10;&lt;/h2&gt;&lt;p&gt;BungBungame、失礼ながらあまり馴染みがありません。調べてみると、どうやらPhoton2などWindowsタブレットを出したり、ゲームを出したりしているところらしい。そういえば、Photon2の名前は聞いたことがあるような。&lt;/p&gt;&#10;&lt;p&gt;ただ、年内の話で、社長に不幸があったそうです（参考「&lt;a class="link" href="http://pc.watch.impress.co.jp/docs/news/1014364.html" target="_blank" rel="noopener"&#10; &gt;BungBungameの社長が死去、ハードウェア開発終息へ - PC Watch&lt;/a&gt;」）。享年33歳、そんな若い人が引っ張っていたのですか……まだまだこれからだというところで、うーん、無念だったでしょうね。&lt;/p&gt;&#10;&lt;p&gt;元々会社の信用度もぼちぼちと言ったところだったようですが、このような状況ですから、今後のサポートについては期待してはいけないのでしょう。OSのバージョンアップなんてとてもとても。実売価格の引き下げには、こんな背景があったのですね。&lt;/p&gt;&#10;&lt;p&gt;まぁ、私は元よりサポートには期待していません。OSだって、いまだに4.4が広く使われているのですから、6.0ならばあと数年は問題ないでしょう。初期不良の交換さえしてくれれば、それでいいのです。&lt;/p&gt;&#10;&lt;h2 id="使い勝手"&gt;使い勝手&#10;&lt;/h2&gt;&lt;p&gt;スペックの割にたいへんお値頃、訳ありなのでそれも納得、ということで、えいやっと注文してしまいました。&lt;/p&gt;&#10;&lt;p&gt;さて、使い始めて2週間ですが……感じたのは以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;軽い！！&lt;/li&gt;&#10;&lt;li&gt;バッテリーはモリモリ減る&lt;/li&gt;&#10;&lt;li&gt;色味は鮮やかだが、赤がやけに強い&lt;/li&gt;&#10;&lt;li&gt;ブラウジングや基本操作はiPadほどではないがサクサク動く&lt;/li&gt;&#10;&lt;li&gt;3D描画は多少もたつく印象&lt;/li&gt;&#10;&lt;li&gt;サウンドは良くも悪くもない感じ&lt;/li&gt;&#10;&lt;li&gt;USB-Type C リバーシブルは素晴らしい&lt;/li&gt;&#10;&lt;li&gt;Androidである（当たり前）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;私の初USB-Type Cデバイスでもあります。以下、見ていきます。&lt;/p&gt;&#10;&lt;h3 id="軽い"&gt;軽い！！&#10;&lt;/h3&gt;&lt;p&gt;このデバイスを使って、&lt;strong&gt;一番感動したのはその軽さ&lt;/strong&gt;です。iPadより大きいのにiPadより軽い！まぁ、アルミ削り出しの高級感と比べると、多少チープな印象はありますけれど、角張ったデザインといい、私はけっこう好きです。&lt;/p&gt;&#10;&lt;p&gt;これを使ってからiPad Airを持つと、iPadが少し重たい印象さえうけます。この軽さはとてもいい。&lt;/p&gt;&#10;&lt;h3 id="バッテリー持ちは5時間程度"&gt;バッテリー持ちは5時間程度&#10;&lt;/h3&gt;&lt;p&gt;しかしながら、バッテリーはモリモリ減ります。最初の初期設定をしている間にもう10%近く減ってびっくり。Android自体、いまなおバッテリー食いのOSです。最初は種々のアプリのインストールでバッテリーもガンガン減りますが、5V-2Aの充電器で充電しながらなおバッテリーが減っていったのは目を疑いました。それでいながら、バッテリー容量は5,800mAhとこのサイズにしては少なめ。軽さの代償でしょうか。ディスプレイは有機ELで低消費電力なのでしょうけれど、プロセッサが頑張り出すと厳しい感じです。&lt;/p&gt;&#10;&lt;p&gt;参考までに、普通にブラウジングしていた時の電力消費のグラフを下図に示します。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4477&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1409&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="バッテリー消費の様子" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/12/8ea12df7302bdddd2d7761813798c359.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;バッテリー消費の様子[/caption]&lt;/p&gt;&#10;&lt;p&gt;アクティブに使っている時、1時間で約20%減っています。使い方、設定次第でしょうが、バッテリー持ちは5時間程度と考えておいたほうがよいかなと思います。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、こういうタブレットは居室でしか使わない人も多いと思うので、実際のところあまり問題ないのではないですかね。待機中の消費はほとんどありませんし。&lt;/p&gt;&#10;&lt;p&gt;あと、充電端子がUSB-Type Cです。充電が5V-2.4Aで、12V-1.5Aの急速充電対応ですが、アダプタは本製品に付属しておらず、対応するものがありません。しかしながら、コネクタがリバーシブルである恩恵は受けられます。Lightningもそうですけれど、リバーシブルは素晴らしい。&lt;strong&gt;USBのいたずらな妖精に悩まされずに済むのは嬉しいこと&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h3 id="ディスプレイは鮮やかだが赤々しい"&gt;ディスプレイは鮮やかだが赤々しい&#10;&lt;/h3&gt;&lt;p&gt;そしてディスプレイですが……綺麗は綺麗なのですけれど、やや暖色系が目立つというか、赤味が強いといいますか。他のディスプレイで感じたことのない違和感があります。iPadやPC用のディスプレイなどと並べて見ると、やはり赤味が強い。うむむ。&lt;/p&gt;&#10;&lt;p&gt;カラーの画像を楽しみたい人は、ちょっとつらいかもですね。実際、人物を見ると、我々は黄色人種であることだなぁと思います。うーん、ゲームや映画のような、映像が重要な用途を重視すると、うーん。&lt;/p&gt;&#10;&lt;p&gt;白黒の文書を読む分には、綺麗です。解像度も高く滑らか。このサイトを見るのにはうってつけです。なにしろ文字ばかりで画像のないサイトなので。&lt;/p&gt;&#10;&lt;h3 id="基本動作はサクサクだが3dはちょっともたつく印象"&gt;基本動作はサクサクだが3Dはちょっともたつく印象&#10;&lt;/h3&gt;&lt;p&gt;CPUはGalaxyなどでも使われるような、ハイエンド向けのものですので、オクタコアがどれだけ有効かは別にしても、さすがにブラウジング等は快適にできます。基本動作もひっかかりがありません。&lt;/p&gt;&#10;&lt;p&gt;ただ、これがグラフィックスとなると、3D描画などで、いくつか試してみた感じ、ちょっともたつきを感じます。iPadと比べた時、一番感じた違いは3D描画でした。&lt;/p&gt;&#10;&lt;p&gt;メーカー名やハイエンドタブレットであることを考えると、ゲーム用途に使われることを意識していると思うのですが、先のディスプレイのこともあり、個人的には、うーん、微妙です。やはり、ゲームやるならiPadが一番かなぁと思います。タッチ精度やレスポンスは、どうしたってiOSデバイスが現状強い。&lt;/p&gt;&#10;&lt;h3 id="サウンドは普通"&gt;サウンドは普通&#10;&lt;/h3&gt;&lt;p&gt;音に関しては、特に良いとも悪いとも感じません。つまり普通ということだと思います。iPad Air 2などは、この筐体でこれだけの音が出るのだなぁと感心しましたが、この機体に関してはそういうこともなく。&lt;/p&gt;&#10;&lt;h3 id="でもandroidはいい"&gt;でもAndroidはいい&#10;&lt;/h3&gt;&lt;p&gt;この機種の魅力はAndroidのタブレットであることです。iOSは非常に完成度の高いOSだと思いますが、Androidの自由度は、iOSにはない魅力です。&lt;/p&gt;&#10;&lt;p&gt;個人的に嬉しいのは、Sambaサーバーとファイル同期が簡単にできることです。iOSはそもそもディレクトリツリーの概念を取っ払っているので、GoodReaderのようなアプリを使うことで、擬似的に同じようなことはできるものの、やっぱりデータ管理はしづらいなぁというのが本音。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01BBU0UMU&amp;linkId=1111582463dfd419614d81fea1829f03" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;しかもmicroSDが使えます。今は200GBのものが1万円切っているんですね。現在注文中で、届くのが楽しみです。→（2016/12/28追記）届きました。200GBの増量は単純に有難いですね。Android 6.0ではmicroSDを本体メモリとして扱う機能がありますので、これを使うことで取り扱いも楽に。NASにある大量の自炊書籍を同期しています。便利！&#13;&#10;&lt;p&gt;これで、私が管理している多くの電子書籍を、自由に持ち歩けます。技術書は、自炊したものや、DRMフリーのストアから購入したものがけっこうあるので、Sambaサーバーと同期できると使いやすい。&lt;/p&gt;&#10;&lt;p&gt;iOSだと、GoodReaderがいまだにepub対応していないのがつらかったので、これが有難い。iBooksで開けばepub読めるんですけれど、そうするとGoodReaderで一元管理できず、ファイルがあちこちに散在することになり気持ちが悪い。iOSのアプリ単位でのファイル管理は、個人的にはどうも好かない。&lt;/p&gt;&#10;&lt;p&gt;Androidは融通がききます。好き勝手に変なアプリを入れることもできますし、自前のアプリも入れやすい。まぁ、そこらへんを制限しているからこそ、iOSは完成度が高いのだとも思いますが。でも、Androidの柔軟性もいいもんです。&lt;/p&gt;&#10;&lt;h2 id="総評"&gt;総評&#10;&lt;/h2&gt;&lt;p&gt;色々と書いてきましたが、ハイエンドのAndroidタブレットをリーズナブルに手に入れたいなら、悪くない選択肢だと思います。薦められるかと言われると、別にお薦めはしません。&lt;/p&gt;&#10;&lt;p&gt;一番の難点はディスプレイかなぁと思います。ちょっと暖色系が強い。まぁ頑張れば調整できるのかもしれませんが、タブレットでこんなところ調整するのもなぁ。これについて言及しているところを見かけないけれど、ひょっとして個体差なのだろうか……。&lt;/p&gt;&#10;&lt;p&gt;なんだかんだありますが、色々納得したうえで購入するのであれば、リーズナブルなデバイスであることは確かです。&lt;/p&gt;&#10;&lt;p&gt;2017年3月11日追記：iOSにはない、Androidらしい大技（microSDを内部ストレージ化、sambaサーバと同期、ファイラを使ったファイル管理など）が使えるのがよいところで、なんだかんだiPad Air 2と併用できています。ただ比較対象ができたことで、iPad Air 2のそつない優秀さがかえって際立ったのも事実です。4万クラスになると、iPad Air 2が見えてくるので、やはり「Androidであること」に価値を感じる人向けということになると思います。というかもう割と入手困難ぽいですが…。&lt;/p&gt;</description></item><item><title>還暦の母がLinuxマシンを使い始める</title><link>https://hack-le.com/linuxmother/</link><pubDate>Thu, 08 Dec 2016 00:22:39 +0900</pubDate><guid>https://hack-le.com/linuxmother/</guid><description>&lt;p&gt;最近ついにウルトラワイドディスプレイを購入してしまいました。それに伴い、これまで使っていた23インチのディスプレイがお役御免となりまして、せっかくだからと、家族に昔作った自作PCとセットで提供しました。OSはもちろんLinux。受け入れられるかなと思ったのですが、母は自分の遅すぎるノートPCに嫌気がさしていたのか、大画面とブラウジングの速さに惹かれたようで、ひとまず使ってみるとのことです。&lt;/p&gt;&#10;&lt;p&gt;（2016/12/14追記）使い続けそうな感じです。やはり処理速度と大画面ディスプレイの魅力か。なお母はいまだにUbuntuの名前を覚えていません 笑&lt;/p&gt;&#10;&lt;h2 id="液晶ディスプレイが余ったので"&gt;液晶ディスプレイが余ったので&#10;&lt;/h2&gt;&lt;p&gt;ここのところずっと、ウルトラディスプレイの購入を検討していました。ずっと悩んでいたのですが、最近NTT-xストアで安くなっていたのを見て、ついポチっと。それで、今まで使っていた今はなき三菱電機のdiamondcrysta 23インチディスプレイがお役御免となり、隠居先を探すことになりました。&lt;/p&gt;&#10;&lt;p&gt;デュアルディスプレイも考えたのですが、元より私はシングルディスプレイ派です。だからこそウルトラワイドなんてけったいな解像度のディスプレイを購入したわけです。なので、できれば他に用途を見出したい。&lt;/p&gt;&#10;&lt;p&gt;Fire TV Stickでも挿して、Amazonプライムビデオの閲覧用にでもしようかとか、いっそ売り払ってしまおうかなど色々と検討しました。そこでふと、そういえばあまり稼働していない自作マシンがあることを思い出し、ディスプレイとセットにすれば、家族用に良いのではないかと考えました。&lt;/p&gt;&#10;&lt;h2 id="linuxが家族に受け入れられるか"&gt;Linuxが家族に受け入れられるか&#10;&lt;/h2&gt;&lt;p&gt;とはいえ、このPCは自作マシン。OSはLinuxです。ディストリビューションは諸事情でUbuntu 14.04 LTS。せめて16.04にしたいところですが、まだもうしばらく使い続けます。まぁLTSなので、サポート終了の2019年まで時間はまだまだあります。&lt;/p&gt;&#10;&lt;p&gt;それはともかく、Linuxです。PC=Windowsで、Windows以外を使うのは上級者のやることだと思いこんでいる人たちに、果たしてこのLinuxマシンは受け入れられるだろうか。&lt;/p&gt;&#10;&lt;p&gt;受け入れられずとも仕方あるまいなと思いつつ、家族に提案してみたところ、やはり最初は「Windowsじゃないのはちょっと…」と言われましたが、実際に動いているところを見せたら、案外普通だと思ったのか、特に母が興味を示しました。&lt;/p&gt;&#10;&lt;h2 id="興味の理由画面の大きさとレスポンス"&gt;興味の理由…画面の大きさとレスポンス&#10;&lt;/h2&gt;&lt;p&gt;なんといってもディスプレイサイズが魅力であったようです。これまで15インチのノートPC（解像度は1366 x 768)を使っていた母にとって、23インチフルHDの広大な画面表示はたいへん魅力がある様子。&lt;/p&gt;&#10;&lt;p&gt;OS関係ないやんという話ですが、こんなもんです。PC=ディスプレイになっている人はけっこうな割合でいます。人は見た目が9割などと言いますが、彼らにしてみればコンピュータは見た目が10割です。そういえば、巷の女子高生はケースが豊富だからという理由でiPhoneを好むという調査結果がありましたね。あれも私にはカルチャーショックでした。&lt;/p&gt;&#10;&lt;p&gt;そして興味のもう一つが、処理速度です。いや、まさか母がCPUの型番を気にするわけはありません。単純に、アプリケーションの起動や、画面の描画が、母が使っているノートパソコンと比較すると早いということです。あらゆるレスポンスが2、3ランク上。&lt;/p&gt;&#10;&lt;p&gt;それもそのはずで、CPUはAMDがまだギリギリ輝いていた頃のA8-3870K、3GHzクアッドコア。メモリは16GBあり、またストレージはMacBook Air 2010のフラッシュメモリをSATAに変換して流用しています。母の使っている、昔のCeleron+HDなノートPCとは、その処理能力において雲泥の差がある。ブログをしている母にとって、この差は大きな魅力。&lt;/p&gt;&#10;&lt;p&gt;ということで、ブログの執筆やメールなど、今やっていることは一通りできることを知り、ひとまず使ってみることになりました。&lt;/p&gt;&#10;&lt;h2 id="意外な盲点表計算ソフトのシートタブやメニューバーが小さいという苦情"&gt;意外な盲点：表計算ソフトのシートタブやメニューバーが小さいという苦情&#10;&lt;/h2&gt;&lt;p&gt;使ってみて、意外な苦情というか、私にとっては思いもよらなかった苦情が、「メニューバーの文字が小さい」「表計算ソフトのシートのタブが小さい」といったものでした。これはOS、ソフトの欠点ではなくて、解像度とディスプレイサイズのバランスの問題です。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、23インチのフルHDは普通のサイズです。実際、私は小さいと感じたことはありません。しかし、母は小さいという。そういえば、以前もiPhoneのホーム画面にあるアプリの文字が小さいと愚痴っていました。なるほど、歳を取るとはそういうことらしい。&lt;/p&gt;&#10;&lt;p&gt;しかし、このあたりはシステムに食い込むところで、案外難しい。「&lt;a class="link" href="https://forum.openoffice.org/ja/forum/viewtopic.php?f=10&amp;amp;t=855" target="_blank" rel="noopener"&#10; &gt;『解決』Calc のシート下端にあるタブの表示を大きくしたいが？ (トピック) • OpenOffice.org コミュニティーフォーラム&lt;/a&gt;」のトピックを参考にさせていただき、Gnome Color Chooserというソフトを導入して、変更しました。システム的な変更になるので、その影響は広範にわたりますが、致し方ありません。&lt;/p&gt;&#10;&lt;p&gt;こういうところが、もっと柔軟に変えられるようになると良いのですが…。&lt;/p&gt;&#10;&lt;h2 id="鬼門はオフィス周り"&gt;鬼門はオフィス周り&#10;&lt;/h2&gt;&lt;p&gt;そして最大の鬼門はやはり、オフィス周りです。Microsoft最大の資産は、Microsoft Officeなのではないでしょうか。これがネックで、人にはLinuxを薦めづらい。&lt;/p&gt;&#10;&lt;p&gt;母などは、そもそもWordやExcel以外にオフィスソフトがあるという発想がありません。なので、Excelが使えないなど軽々しく言うと、それは表計算ソフトが使えないと受け取られる。そこで、いや、Excelは使えなくても、LibreOffice Calcのような代わりとなる表計算ソフトがあるのだと言うと、わけがわからなくなるようで、意味不明なことを言うなと、そんな顔をされます。&lt;/p&gt;&#10;&lt;p&gt;もう、面倒臭いので「まぁ今までやってきたことはできるよ」と、曖昧に言葉を濁しています。クチでいくら言っても徒労に終わることは、経験上よくよくわかっている。とにかくやってみて、体得してもらうしかない。&lt;/p&gt;&#10;&lt;p&gt;とにかく、ODFとPDFさえわかってもらえるようになれば、なんとかなるはずですが……うーん、これは今後、何度かサポートすることになるでしょうね。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、私は所持しているMicrosoft Office 2011 for Macのサポート期限が来年切れるので、LibreOfficeに移行済みです。レポートはWriterで書きますし、表計算はCalcを使います。プレゼンの機会がないので、Impressだけは未知数です（昔使ったときは、Microsoft Officeともっとも差を感じたのがこのプレゼンソフトでしたが、果たして今はどうなのかな…）。既にMicrosoft Officeを起動することはほとんどありません。docxファイルやxlsxファイルを送りつけられたときだけです。&lt;/p&gt;&#10;&lt;h2 id="linuxを使う還暦の母"&gt;Linuxを使う還暦の母&#10;&lt;/h2&gt;&lt;p&gt;こうして、還暦の母がLinuxを使い始めることになりました。本当を言えば、小学二年生の甥が、PCに興味があるというので、一つアカウントでも作ってやろうかと思っていたのですが、母はなるべく自分だけで使いたいらしく、ほぼ母の専用機となりました。管理者は私ですが。&lt;/p&gt;&#10;&lt;p&gt;といっても、今後どうなるかわかりませんけどね。私としても、一つのテストケースとして関心があるので、サポートはします……というかサポート無しには無理です。&lt;/p&gt;&#10;&lt;p&gt;そのサポートというのが、たいへん鬼門なのですが。&lt;/p&gt;</description></item><item><title>GPSでよくみるPPS信号とはなにか</title><link>https://hack-le.com/whatispps/</link><pubDate>Wed, 07 Dec 2016 04:43:30 +0900</pubDate><guid>https://hack-le.com/whatispps/</guid><description>&lt;p&gt;この記事は、最近PPS(Pulse Per Second)信号なるものを使うことになり、右も左も分からないまま、あれこれ調べたものを自分なりにまとめたものです。同じような人に向けて書いています。&lt;/p&gt;&#10;&lt;h2 id="pps信号とはなにか"&gt;PPS信号とはなにか&#10;&lt;/h2&gt;&lt;p&gt;PPS信号の説明と、その作られ方について。&lt;/p&gt;&#10;&lt;h3 id="まずは全体像"&gt;まずは全体像&#10;&lt;/h3&gt;&lt;p&gt;PPSとは、&lt;strong&gt;1秒間に1発だけでる非常に正確なパルス波&lt;/strong&gt;です。たとえば、以下は、Adafruit Ultimate GPSというGPSモジュールの、PPS出力を取得したものです（&lt;a class="link" href="https://hack-le.com/44771052-2/" &gt;Raspberry Pi のGPIO経由で入力信号を連続的に取得&lt;/a&gt;…デジタル入力ですがまぁ感じだけ掴んで下さい）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="PPS" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2015/09/4a17af92.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;PPS&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;この例の場合は、パルス波というより、1秒間に100ms、つまりデューティ比10%の矩形波ですが、とにかく1秒間に正確な1発、というのが味噌です。&lt;/p&gt;&#10;&lt;p&gt;ここでいう「正確」とは、立ち上がりが急峻で、（立ち上がり位置など）揺らぎが少ないということです（参考「&lt;a class="link" href="https://en.wikipedia.org/wiki/Pulse-per-second_signal" target="_blank" rel="noopener"&#10; &gt;Pulse-per-second signal - Wikipedia&lt;/a&gt;」）。よって、1秒間隔が、us、ns、なんんならpsの単位で正確です…が、これはモジュールに依存するのはもちろんですし、またPPS信号をどう使うかにもよります。何発ものPPS信号を平均化することによって精度を上げる、等。使い方次第です。&lt;/p&gt;&#10;&lt;h3 id="pps信号の作られ方"&gt;PPS信号の作られ方&#10;&lt;/h3&gt;&lt;p&gt;そんな信号がどうやって作られるかというと、その大元は原子時計です。ここの説明はなんとも難しいのですが、トランジスタ技術2016年2月号にある今江理人さんの説明を借ります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&amp;hellip;原子は, 外部との間で熱や電磁波（エネルギ）をやり取りすると、その状態、たとえば電子のスピンの方向や軌道が変わります. このとき, 取りうる状態が離散的なので, ある状態から別の状態へ変化する際取りうる状態間のエネルギ差も離散的になります. (トランジスタ技術, 2016年2月号, P.48, 今江理人）&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;うーん、ですね。定性的には高校物理でもやっている話なので、イメージを掴む程度に、なんとか受け入れます。原子のエネルギー状態は離散的→よって、ある状態から別の状態に遷移するのにかかる時間も離散的→その時間は原子固有→その性質を使えば時計になる、という感じでしょうか。&lt;/p&gt;&#10;&lt;p&gt;実際、現在1秒の定義には、セシウム原子のエネルギー遷移周波数が用いられています。したがって、正確な時間を測るにはセシウム発振器があれば最高ということになりますが、これはまぁちょっと庶民に手が出るようなものではありません。若干精度は落ちますが、ルビジウム発振器モジュールであれば、数十万円のものもあるそうです。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ庶民には縁遠いものですが、そのような高価な原子時計を積んだ衛星が宇宙を飛んでおり、我々はその信号を利用することができます。GPSですね。安いものなら千いくらで手に入るようなGPSモジュールから、そのような高精度のPPS出力を得ることができます。実際に得られるPPS出力の精度は、GPSモジュールに依存しますが（そもそもPPS出力がないものもある）、それでもus単位の正確さはあるでしょう。&lt;/p&gt;&#10;&lt;h2 id="ppsはなにに使えるか"&gt;PPSはなにに使えるか&#10;&lt;/h2&gt;&lt;p&gt;ここまで、PPS信号が非常に正確であること、また私たちは安価なGPSモジュールにより手軽に利用できることを述べました。しかし、PPS信号は単なるパルス波に過ぎないとも言えます。NMEAのように、シリアル通信してテキストで種々の情報がわかるような、便利なものではありません。&lt;strong&gt;情報量はLOWとHIGHだけの電気信号&lt;/strong&gt;なのです。それは何に使えるでしょうか。&lt;/p&gt;&#10;&lt;p&gt;一言で言うと、「基準」です。PPSを基準信号として使うことで、精度を上げることが期待されます。&lt;/p&gt;&#10;&lt;p&gt;具体的な例をあげると、たとえば、NTPの補正に使うことができます。PPS信号を取り込むことで、より正確な時刻を得ることができます（参考記事…「&lt;a class="link" href="http://nyanchew.com/jp/gps%E3%81%AEpps%E4%BF%A1%E5%8F%B7%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F-stratum-1-ntp%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9" target="_blank" rel="noopener"&#10; &gt;GPSのPPS信号を使った Stratum-1 NTPサーバの作り方 | Nyanchew&amp;rsquo;s Digital Life - ja1&lt;/a&gt;」実際にRaspberry Piで、us単位の精度のNTPサーバーを構築された人）。&lt;/p&gt;&#10;&lt;p&gt;他には、計測の基準信号として使うことが考えられます。たとえば2箇所で同時に計測を開始したい時、GPSモジュールから出力するPPS信号をAD変換のトリガにすれば、同時に計測を開始することができるでしょう。&lt;/p&gt;&#10;&lt;p&gt;ややマニアックですが、なにかしらのために基準信号を求める人にとっては、たいへん勝手の良いものだと思います。&lt;/p&gt;&#10;&lt;h2 id="pps信号を使える製品は"&gt;PPS信号を使える製品は&#10;&lt;/h2&gt;&lt;p&gt;さて、では実際にPPS信号を使える製品、つまりPPS出力のあるものはなんでしょうか。前述したGPSモジュールや、NTPサーバーといった製品に、PPS出力があることが多いです。特に安価かつ手軽なのはGPSモジュールでしょう。&lt;/p&gt;&#10;&lt;p&gt;私が使ったことがあるから、という理由で、AdafruitのUltimate GPSを紹介します。実際に使ってみた記事は「&lt;a class="link" href="https://hack-le.com/45528250-2/" &gt;Raspberry Pi にGPSモジュールをつけてStratum 0で時刻同期(スタンドアロン)&lt;/a&gt;」です。PPS用のピンをたてれば、手軽に3.3V、10%Dutyの矩形波が得られます。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://amzn.to/4d9xeYc" target="_blank" rel="noopener"&#10; &gt;https://amzn.to/4d9xeYc&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;あと、PPSはその性質上1Hzなわけですが、&lt;strong&gt;1Hzではないものが出力できるものとして、u-bloxシリーズに注目しています&lt;/strong&gt;。&lt;strong&gt;u-bloxでは、time pulseと表現され、専用のPCソフトを用いて、シリアル通信で簡単に周波数を設定できるようです。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;このあたりの情報は「&lt;a class="link" href="http://seppina.cocolog-nifty.com/blog/2016/01/10mhzgps-2940.html" target="_blank" rel="noopener"&#10; &gt;（改訂版）高精度10MHzの出力ができそうなGPS受信モジュール: セッピーナの趣味の天文計算&lt;/a&gt;」をたいへん参考にさせていただきました。また、トラ技2016年2月号では、NEO6M-ANT-3Pより10KPPSを引き出す実例があります。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://amzn.to/3Pjdc5Q" target="_blank" rel="noopener"&#10; &gt;https://amzn.to/3Pjdc5Q&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;トラ技2016年2月号は、GPSモジュールを使ってあれこれしたい人にとっては非常に素晴らしい号でした。見るたびに中古価格が微妙に上がっているので、興味のある人は買っておいたほうがよいと思います。1年間分のCDはとても高いですし。&lt;/p&gt;&#10;&lt;p&gt;CQ出版には、DRMフリーな電子書籍ストアもあるんですけどねー…「&lt;a class="link" href="http://cc.cqpub.co.jp/lib/" target="_blank" rel="noopener"&#10; &gt;Tech Village 書庫＆販売 - エレクトロニクス分野の電子書籍販売サイト ／ CQ出版株式会社&lt;/a&gt;」肝心のトラ技がまだないんです。Interfaceがいつのまにか販売されるようになったので、早くトラ技も売って欲しいですね（ついでに「&lt;a class="link" href="https://hack-le.com/40057753-2/" &gt;DRMフリーの電子書籍ストア&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;2026-05-12 今更追記：いつのまにかトラ技置くようになりましたね。でも2016年2月号なかったです😢&lt;/p&gt;&#10;&lt;p&gt;price表記のないお高そうなGPSモジュールだと、10MPPSが出力可なんてのもありました。IRIGタイムコードも出たり。でもPPSを柔軟に変更できる点で、安価なu-bloxのほうが私には嬉しいな。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/rpi-10kpps/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Raspberry Piでも使いやすいGPSモジュールNEO6Mの基板で10-100kHzのPPS信号&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/rpi-10kpps/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2017/06/c41b6be788a6e6c7693847543715840b.webp" alt="Raspberry Piでも使いやすいGPSモジュールNEO6Mの基板で10-100kHzのPPS信号" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/eleshop/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Raspberry Piとかやり始めた時に知っておきたかった電子工作系のネットショップ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/eleshop/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_6905_1789273552.webp" alt="Raspberry Piとかやり始めた時に知っておきたかった電子工作系のネットショップ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;</description></item><item><title>Mac mini 2012 + ウルトラワイド液晶ディスプレイとその使用感</title><link>https://hack-le.com/ultrawidemacmini/</link><pubDate>Sun, 04 Dec 2016 14:49:08 +0900</pubDate><guid>https://hack-le.com/ultrawidemacmini/</guid><description>&lt;p&gt;どうしようかなと思っていたのですが、結局ウルトラワイドの29インチディスプレイを購入してしまいました。29インチは縦の長さは23インチのフルHDのものと同じです。ただ横幅が広い。解像度にして2560 x 1080。私はゲームをするわけでも映画ファンでもないのですが、しかし画面領域が広いとできることが広がりますね。&lt;/p&gt;&#10;&lt;p&gt;ちゃんと動作するかも不安でしたが、しっかり動いてくれました。使い始めて10日ほどですが、購入に至るまでとその使用感をレビューします。&lt;/p&gt;&#10;&lt;p&gt;（2017/01/14追記）最近、ちょくちょく画面が乱れます。ケーブルが原因かも。&lt;br&gt;&#10;（2017/01/16追記）ケーブルを交換した拍子に、転倒して液晶が割れました。どうも、アーム底部のネジが緩んでいたっぽいです。モニタを斜めにして負荷がかかったらしく、ネジが飛びました。死にたい。ちなみにケーブル変えても変わらなかったので、画面の乱れの原因はケーブルではなかったものと思います。もうなんでもいいです。死にたい。&lt;/p&gt;&#10;&lt;h2 id="mac-mini-2012でウルトラワイド"&gt;Mac mini 2012でウルトラワイド&#10;&lt;/h2&gt;&lt;p&gt;私が使っているPCはMac mini 2012です。本当はそろそろPCを新調したい気持ちがあるのですが、スペックが停滞して久しく、高くなるのは値段ばかりのお寒い状況。Mac miniは2014になってクアッドコアがなくなり、新作についてもあまり期待ができない、というかディスコンにならないことをまず祈らなくてはならない。悲しいことです。&lt;/p&gt;&#10;&lt;p&gt;そのような状況ですから、今あるものをより活用する方向でものを考えています。まぁそれが本来のあるべき姿かもしれません。&lt;/p&gt;&#10;&lt;p&gt;それで、ディスプレイについて、それまで使っていた三菱電機の今はなきブランドDiamondcrysta 23インチモデルフルHD（倍速補間もできるモデル）から、29インチの2560 x 1080解像度のウルトラワイドディスプレイに乗り換えました。&lt;/p&gt;&#10;&lt;p&gt;ゲームをするわけではないので、4Kディスプレイにすることも考えました。「&lt;a class="link" href="https://support.apple.com/kb/SP659?locale=ja_JP&amp;amp;viewlocale=ja_JP" target="_blank" rel="noopener"&#10; &gt;Mac mini (Late 2012) - 技術仕様&lt;/a&gt;」によると、30Hzであれば4K表示もできそうです。また、実際に動いたという報告もあります。しかし、私は大画面のデスクトップPCにおいてはあまりRetinaを重視しないので、それであれば横幅を増やすほうが、出来ることが広がり、また見た目にも面白いと考えました。4Kが本当に安定して動くかも怪しい気がしますしねぇ。&lt;/p&gt;&#10;&lt;h2 id="lg-29um68-pとケーブルを購入"&gt;LG 29UM68-Pとケーブルを購入&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01C5KVQQO&amp;linkId=83d79ed525dd19a1a2319a9b06d0c381" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;製品はあまり選択肢がなくて、値段なども考えると実質的にLG一択です。私が購入したのは29UM68-Pで、相場としては30k - 35kとそこそこ。同サイズでもう少し値段がこなれた29UM58-Pというものもありますが、こちらは悲しいことにDisplayPortがありません。&#10;&lt;p&gt;先のリンク「&lt;a class="link" href="https://support.apple.com/kb/SP659?locale=ja_JP&amp;amp;viewlocale=ja_JP" target="_blank" rel="noopener"&#10; &gt;Mac mini (Late 2012) - 技術仕様&lt;/a&gt;」には、最大2台で2560 x 1600をサポートとありますが、よく見るとHDMI出力については「1080p解像度、最大60Hzに対応」とあります。さらに「&lt;a class="link" href="https://support.apple.com/ja-jp/HT202638" target="_blank" rel="noopener"&#10; &gt;Mac mini (Late 2012)：外部ポートとコネクタ - Apple サポート&lt;/a&gt;」を見ると、以下の記述が。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;HDMI ポート HDMI ポートには、互換性のある HDMI ディスプレイを接続するか、付属の HDMI-DVI アダプタで DVI ディスプレイを接続します。このポートで、最大 1920 x 1200 ピクセルの拡張デスクトップまたはビデオミラーリングモードを使うことができます。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;HDMI出力では2560pxのウルトラワイドな出力はできない&lt;/strong&gt;ということです。Thunderboltを使いなされということですね。この制限は変換を噛ませてもあります（参考「&lt;a class="link" href="http://blog.inmycab.com/macintosh/22530/" target="_blank" rel="noopener"&#10; &gt;mac mini のモニター接続ガイド 〜ポート変換アダプタ対応表〜&lt;/a&gt;」）。Mac mini 2012のThunerboltはThunderbolt 2です。「&lt;a class="link" href="https://support.apple.com/ja-jp/HT204154" target="_blank" rel="noopener"&#10; &gt;Thunderbolt ポートおよびディスプレイについて - Apple サポート&lt;/a&gt;」には以下のような記述があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;コンピュータ側のポートは Mini DisplayPort と似ています。Thunderbolt ポートかどうか確認するには、ポートの横または上に次の記号が表示されているか調べてください。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Mini DisplayPortと似ています、似ていますという言い方に色々と含みを感じます。稲妻マークがあればThunderboltです。まぁつまり、DisplayPortのminiな規格であるMini DisplayPortをAppleが独自拡張したのがThunderbolt 2、という認識であまり問題はないものと思います。&lt;/p&gt;&#10;&lt;p&gt;ということで、まずDisplayPortを搭載したディスプレイが必要です。これはもう、自然とLGの29UM68-Pです。LGというのがやや不安ですが、しかし今時そんなことを言っていてはiMacも買えなくなります。&lt;/p&gt;&#10;&lt;p&gt;次に、Thunderbold &amp;lt;-&amp;gt; DisplayPortのケーブルが必要です。ケーブルについては相性問題もよくある話なので、どうしたものかなと思いましたが、こういう時に頼りになるのがAmazonです。&lt;/p&gt;&#10;&lt;p&gt;（リンク消失）&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B014YOZHA0&amp;linkId=e871df73f8a1f93faf984e8f185926bf" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;&#10;&lt;p&gt;このケーブルは安い上に&lt;strong&gt;稲妻マークがない&lt;/strong&gt;という怪しさ満点の製品ですが、Macでも使用報告がレビュー欄にて多数されています。Amazonのレビューはジャンルによってはひどいものですが、こういうところでは種々の環境でのテスト結果がユーザーの声として集まっているので、本当に有難い。&lt;/p&gt;&#10;&lt;p&gt;中には外れを引いたようなレビューも混じっていますが、まぁこの値段ですのでそれくらいのリスクは仕方ない。&lt;/p&gt;&#10;&lt;p&gt;ということで、これを注文し、Mac miniとディスプレイを繋ぎました。どうなるかなと思ったのですが、&lt;strong&gt;特に問題なく使うことができました。素晴らしい！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="ディスプレイの品質"&gt;ディスプレイの品質&#10;&lt;/h2&gt;&lt;p&gt;さてLGのウルトラワイドの液晶ディスプレイはどんなものか。絵描きでもゲーマーでもない私は、液晶の品質を判断できるほど目が肥えているわけではありません。しかし、前に使っていた三菱電機のDiamondcrysta RDT233WX-Zという比較対象はあります。これはそれなりに評判のディスプレイだと思いますから、これと比較して特に違和感がなければ、それなりと思ってよいのではないか。&lt;/p&gt;&#10;&lt;p&gt;という気持ちで見てみたのですが……ううむ、なんだか、むしろRDT233WX-Zより鮮やかで美しく見えます。RDT233WX-Zはもう数年使っているので、多少の劣化もあるとは思いますが……少なくとも悪くなったという感じはしない。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="http://www.eizo.co.jp/eizolibrary/other/itmedia04/" target="_blank" rel="noopener"&#10; &gt;&amp;ldquo;画質の差&amp;quot;が丸わかり！――液晶ディスプレイの表示チェックをしてみよう | EIZO株式会社&lt;/a&gt;」の最初の2つのテストを見ると、最初のテストは3文字とも見える。次のテストは、2文字目は見えないが1,3,4文字はなんとか見える。2文字目はよーく見ると見えなくもない。前のディスプレイだと、2つめのテストは全部は見えなかった。&lt;/p&gt;&#10;&lt;p&gt;これは……少なくとも私は満足できる結果です。&lt;strong&gt;体感としても鮮やかであるし、簡易的な目視テストも良好なら、私は文句ありません&lt;/strong&gt;。LG、よいではないですか……。&lt;/p&gt;&#10;&lt;h2 id="ウルトラワイドの使用感"&gt;ウルトラワイドの使用感&#10;&lt;/h2&gt;&lt;p&gt;ウルトラワイドの使用感ですが、これは思った通りの勝手の良さです。&lt;strong&gt;やはり画面2分割でアプリケーションを左右に並べて使えることは素晴らしい&lt;/strong&gt;。これがフルHDの1920pxだとちょっと狭いのですが、2560pxもあれば、1アプリケーションあたり1280px、つまりいわゆるワイドディスプレイと同じだけの横幅を確保できるわけですから、問題ありません。&lt;/p&gt;&#10;&lt;p&gt;特にGUIが絡むプログラミングにおいて威力を発揮するだろうと思っていましたが、意外と普通の調べ物でも便利。たとえばこのブログの執筆でも、調べ物のウィンドウを開きっぱなしにしておけるのは、なかなかよい。&lt;/p&gt;&#10;&lt;p&gt;また、作業中なぜかずっと前面に出ずっぱりになるようなウィンドウがあっても（ScanSnap……）、端のほうに避けておけば邪魔にもならない。もう少しウィンドウの表示領域を調整してやって、常時iTunesのミニプレイヤーウィンドウを表示してやってもよいかな。&lt;/p&gt;&#10;&lt;h2 id="集中について"&gt;集中について&#10;&lt;/h2&gt;&lt;p&gt;ところで、私は必ずしも大きな画面が良いと思っているわけではありません。&lt;strong&gt;情報量が増えれば、それだけ人間の意識は散逸になる&lt;/strong&gt;と思うからです。最近、このサイトからサイドバーを廃した理由の一つはそれです。純粋に物を書くだけであれば、一番良いのはノートパソコンではないかとさえ思います（「&lt;a class="link" href="https://hack-le.com/47452491-2/" &gt;デバイスの大きさと距離感が作業に影響する…文筆にはノートパソコンが最適であると思う&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;しかし、調べ物を伴う作業や、またユーザーインタフェースに関わるような開発…GUIのアプリケーションなどにおいては、やはりそれなりの画面の大きさは必要です。また&lt;strong&gt;情報収集においては、画面の大きさがそのまま作業効率に直結することもしばしば&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;私のやりたい作業において、マルチディスプレイとなるとその煩わしさのほうが勝るかもしれませんが、大きなシングルディスプレイというのは、なかなか、悪いものではありませんね。&lt;/p&gt;</description></item><item><title>Xperia Z3のUSBキャップが緩んできたので、マグネット充電のアダプター購入</title><link>https://hack-le.com/z3musettenjuden/</link><pubDate>Sun, 27 Nov 2016 01:25:45 +0900</pubDate><guid>https://hack-le.com/z3musettenjuden/</guid><description>&lt;p&gt;[caption id=&amp;ldquo;attachment_4286&amp;rdquo; align=&amp;ldquo;alignleft&amp;rdquo; width=&amp;ldquo;222&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="無接点充電" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/29aa23936225482f1502e994ce3cd2bd.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;マグネット充電[/caption]&lt;/p&gt;&#10;&lt;p&gt;個人的にスマートフォンで重視している機能の一つに防水があります。Xperia Z3には防水機能がありますが、これの実現のため、microUSB端子のところにキャップがついています。使い始めて1年半、そろそろキャップが緩んできました。既に防水機能は落ちているでしょう。これ以上の劣化を防ぐべく、microUSBを用いない、マグネット充電用のアダプターを購入しました。&lt;/p&gt;&#10;&lt;p&gt;（2017/05/06 追記）繰り返し使用していたら、充電部がポコッと取れてしまいました。一応また取り付けられましたが、使用には注意を。特に引き抜くときに、ねじって十字を作るとよいと思います（「&lt;a class="link" href="https://hack-le.com/z3-toreta/" &gt;サードパーティのマグネット充電アクセサリでXperia Z3の充電部が取れた&lt;/a&gt;」））&lt;/p&gt;&#10;&lt;h2 id="スマホを浴室で使いたい"&gt;スマホを浴室で使いたい&#10;&lt;/h2&gt;&lt;p&gt;私はスマートフォンでは防水を重要視しています。この機能は、必要な人とそうでない人にきっぱりと分かれる機能だと思います。実際、日本のスマートフォンはガラパゴスだと揶揄されるような特徴の一つでした。今回AppleのiPhone 7が正式に対応したことで、もはやそのような扱いも受けなくなるとは思いますが……。防水とおサイフケータイは、世界に普及させたい良い機能でした。&lt;/p&gt;&#10;&lt;p&gt;ガラパゴスと言われながらも、日本のメーカーはスマートフォンに防水機能を搭載し続けました。それだけ求められていたのでしょう。日本に防水を好む人が多いのは、やはり風呂好きな民族であることと無関係ではないと思います。私もスマートフォンをお風呂で使いたいがために、防水機能を重視しているクチです。もっとも、いわゆる防水機能は浴室での使用を保証するものではありません。お風呂は通常お湯ですし、また浴室の湿気はスマホにかぎらず精密機器の天敵です。&lt;/p&gt;&#10;&lt;p&gt;しかし、即デバイスを潰してしまうようなものでないことも事実。実際、私はもう一年半以上日々のお風呂のお供にしていますし、誤って湯船に落としたことも一度ではありません。まぁ寿命を多少縮めているかもしれませんが、スマートフォンとは元より消耗品であり、また日々の生活に潤いをもたらすものですから、使いたいように使うべきなのです。&lt;/p&gt;&#10;&lt;h2 id="防水キャップが劣化"&gt;防水キャップが劣化&#10;&lt;/h2&gt;&lt;p&gt;防水機能を実現するために、Xperia Z3においてはmicroUSB端子にキャップをしています。これは多少煩わしさを伴います。それだけではなく、キャップは開閉するたびに少しずつ劣化していくという難点があります。できればあまりしたくないものですが、充電するのにケーブルを繋げる必要があるので、そうしないわけにもいきません。&lt;/p&gt;&#10;&lt;p&gt;しかし、Xperiaシリーズは、microUSB端子を使わない充電が可能です。というと、Qi規格の置くだけ充電が真っ先に思い浮かぶのですが、それとは違う、マグネットの充電端子を用いたものです。専用のドックに取り付けると、これにより充電させることができます。&lt;/p&gt;&#10;&lt;p&gt;ところが、このドックというのが曲者です。裸のサイズに合わせて作られているため、ちょっとしたケースを取り付けるだけで、入らなくなってしまうことがしばしば。これはXperiaに限った問題ではありませんが。そもそも、ドックに置くという行為自体が私にとっては煩わしい。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、私は長らくmicroUSBを使った充電をしていました。しかし、さすがにキャップの劣化が気になり、別の充電方法を考えないわけにはいかなくなってきました。&lt;/p&gt;&#10;&lt;h2 id="マグネット充電"&gt;マグネット充電&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00VS119B4&amp;linkId=2c11b9549690d5a0a5ccc6fa669d4223" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;どうしたものかと思っていたのですが、探してみると便利なものがありました。←です。ちょうどMacBookで使うような、マグネット式の充電用アダプターらしい（残念ながら最新のMacBook Pro 2016ではUSB-Cと置き換わり、廃止になりましたが）。これならば、ケースの厚みにもある程度対応できそうです。&#13;&#10;&lt;p&gt;ということで、早速注文しました。届いたものを装着したところ、ちょっとケースにひっかかりましたが、記事冒頭画像のように無事充電できました。&lt;/p&gt;&#10;&lt;p&gt;これでなんとか、microUSBの使用はデバッグなど最低限で済みそうです。iPhone 7の購入を考えていましたが、iPad Air 2におけるiOS 10の大きすぎるシャッター音を聞いた時にふと我に返り、よくよく考えてみると10万円払ってまで今ほしいものではないと思うようになってきたので、このXperia Z3にはもう少し頑張ってもらいたいところです（シャッター音はiOS 10.2で、スクショに関してようやく音を小さく、また無音化も可能な仕様になるという噂ですが）。&lt;/p&gt;</description></item><item><title>iPadのタブレットスタンドが思いの外便利である</title><link>https://hack-le.com/tabletstand/</link><pubDate>Thu, 24 Nov 2016 02:10:59 +0900</pubDate><guid>https://hack-le.com/tabletstand/</guid><description>&lt;p&gt;iPadをディスプレイ横に設置して使用するために、タブレット用のスタンドを購入しました。これまではブックスタンドを流用していたのですが、最近は本はすべて電子化してしまっているので、ブックスタンドとして使うことはほとんどなく、もっぱらタブレットスタンドとして使っていました。しかし、タブレット用途してはブックスタンドは色々と便の悪いところもあり、今回タブレットスタンドの購入に踏み切ったのですが、これが思いの外良かった。&lt;/p&gt;&#10;&lt;h2 id="やはり専用品は利点が多い"&gt;やはり専用品は利点が多い&#10;&lt;/h2&gt;&lt;p&gt;今回購入したのはこの製品です。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://amzn.to/3VvV2wF" target="_blank" rel="noopener"&#10; &gt;https://amzn.to/3VvV2wF&lt;/a&gt;（アフィリエイトリンク）&lt;/p&gt;&#10;&lt;p&gt;iPad Pro用と謳っていますが、別に小さい分には問題ないので、iPad Air2用に購入しました。&lt;/p&gt;&#10;&lt;p&gt;これまではブックスタンドを流用していて、まぁそれでも良いかと思っていたのですけれど、やはりブックスタンドにタブレットをおくのは見た目に不格好です。高いものでもありませんから、タブレットスタンドを今回購入してみました。&lt;/p&gt;&#10;&lt;p&gt;いざ使ってみると、やはり専用品はよく考えられています。まだ使い始めて二週間ほどですが、なかなか気に入りました。ブックスタンドと比較して、このタブレットスタンドには以下のような利点があります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;コンパクトである&lt;/li&gt;&#10;&lt;li&gt;角度がすぐに変えられる&lt;/li&gt;&#10;&lt;li&gt;下から充電できる&lt;/li&gt;&#10;&lt;li&gt;デザインがAppleっぽい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;今まで使っていたブックスタンドでは、これらがうまくできませんでした。しかもページを固定するための「止め」が、タブレットスタンドとしては邪魔だったのですが、当たり前ですけれどそれもなくなり、ハッピーです。充電用に下にホールがあるのも有難い。&lt;/p&gt;&#10;&lt;p&gt;また、下記のように大きさもコンパクトで、また明らかにApple製品を意識したデザインなので、見た目にもスッキリしました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="タブレットスタンドとApple Wireless Keyboard" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/479f9fc68b7b7c799051726ba244d6cd.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;タブレットスタンドとApple Wireless Keyboard&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;使ってみれば、便利なものです。もっと早く買えばよかったかな。&lt;/p&gt;&#10;&lt;p&gt;タブレットはPCとセットで使うとなかなか効果的です。特に書籍の電子化などをしている人にとっては、素晴らしい資料参照用デバイスです。タブレットを持っている人にはオススメです。&lt;/p&gt;</description></item><item><title>不満はあっても色々考えると結局Macになってしまう</title><link>https://hack-le.com/finallymac/</link><pubDate>Mon, 21 Nov 2016 03:17:58 +0900</pubDate><guid>https://hack-le.com/finallymac/</guid><description>&lt;p&gt;私は最近のMacの動向を苦々しく思っているクチです。割と本気で、また自作マシンで作ってLinuxに鞍替えしようかとも検討しました。最近はMicrosoftもオープンソース文化に歩み寄り、Windows 10ではBashまで導入されるなど喜ばしいニュースも耳に入ってきますから、Windowsへの回帰も検討しました。&lt;/p&gt;&#10;&lt;p&gt;しかし、色々考えていくと、まぁまだ当分はMacでいくか……と、そんな気分になり、結局、&lt;strong&gt;今のMac miniにできるだけ頑張ってもらおう、という結論&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="改めてmacの長所短所を考える"&gt;改めてMacの長所、短所を考える&#10;&lt;/h2&gt;&lt;p&gt;そもそも私は何故Macを使っているのだろうか。Macの長所はなんだろうか。Macの良いところはだいぶ前に「&lt;a class="link" href="https://hack-le.com/32323358-2/" &gt;MacのメリットはトラックパッドとUnix&lt;/a&gt;」という記事を書きましたが、特に考えは変わってません。これは主にソフトウェアについてですけれど、ハードウェアとしても素晴らしいと思う点があります。静音性です。過去に、「&lt;a class="link" href="https://hack-le.com/47107759-2/" &gt;自作PCを掘り起こして思い出したPCの騒音。Mac miniは静か&lt;/a&gt;」という記事で言及しました。&lt;/p&gt;&#10;&lt;p&gt;まとめると、Macの長所は以下であると考えます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;UNIXである&lt;/li&gt;&#10;&lt;li&gt;周辺機器や各種サービスが、サポートされていることが多い&lt;/li&gt;&#10;&lt;li&gt;トラックパッドが素晴らしい&lt;/li&gt;&#10;&lt;li&gt;静音性に優れる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;では、欠点はなんだろうか。「&lt;a class="link" href="https://hack-le.com/mini2mbp/" &gt;もうMac miniは諦めてMacBook Proを買ってしまおうか…&lt;/a&gt;」などで愚痴っていますが、Mac Pro以外は拡張性がなくなり（Mac Proも内部拡張性は皆無になってしまいましたが）、さらにマシンスペックが低い……というより、もうここ数年ほとんど変化がない。いや変化がないくらいならよいが、miniに至ってはダウンしている（クアッドコアがない！）。ストレージだけやたらと進化していますが、もはや体感できると思えない。というわけで、以下の不満があるわけです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;内部拡張性がない&lt;/li&gt;&#10;&lt;li&gt;マシンスペックが低い…あるいは性能に比して高い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;うーん……ふむ……。拡張性のなさに対する不満は、突き詰めるとコストの不満と言えます。CTOにかかる費用、故障時のコストがべらぼうに高くなることが不満なわけです（Mac Proの場合はまた話が変わってくると思いますが）。マシンスペックの問題はもう少し深刻で、金の問題ですらないこともある。金を払ってもコア数は増えない。そもそも新型自体がもう2年前、3年前という状況です。まぁ、Intel自体が停滞しているので、これはMacの問題とばかりも言い切れない面はありますが……。&lt;/p&gt;&#10;&lt;p&gt;しかし……こうして書き下してみると、先に上げた長所を潰すほどの短所ではないようにも思えます。&lt;/p&gt;&#10;&lt;h2 id="移行の難しさ"&gt;移行の難しさ&#10;&lt;/h2&gt;&lt;p&gt;Macから移行することは、先述したMacの長所を放棄することに繋がります。いくらWindowsがBashをサポートするようになったとしても、その使い勝手はMacとは比較にならないでしょう。Linuxを使えば、また一々ドライバの心配をしたり、サポートの心配をしたりせねばなりません。さらに、トラックパッドの素晴らしい使い心地を手放すのはつらいことです。Macのカタログスペックに現れない良さの一つに静音性がありますが、これを自分でやろうとすると、なかなかどうして、頑張らねばならない。&lt;/p&gt;&#10;&lt;p&gt;それに、私はiTunesを使って音楽管理をしていますから、これの移行は一筋縄ではいかんでしょうねぇ……まぁこれは私がAppleに囲い込まれているというだけの話ですが……。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;苦労をして、いくつかの勝手の良さを捨ててまで、得られるマシンスペックとは、拡張性とは、本当に私が必要とするものなのだろうか&lt;/strong&gt;。うーん、そうではないだろうな。&lt;/p&gt;&#10;&lt;h2 id="様子を見よう"&gt;様子を見よう&#10;&lt;/h2&gt;&lt;p&gt;以上をまとめると、&lt;strong&gt;今Macのマシンスペックは確かに見劣りするところがあるけれど、ソフトの良さを打ち消すほどではない。また、ハード面でも静音性については今なお特筆すべきものがある&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;となると、結局、もうしばらく様子を見るのが妥当ということか。少なくとも、私は現在のMac mini 2012の性能には満足していますし、身も蓋もないことを言えば、何も無理にマシンを新調する必要もありません。VR関係など、グラフィックスで重い処理を必要とする人でなければ、現行のスペックでも問題ないという現実があります。&lt;/p&gt;&#10;&lt;p&gt;それでも、仮想化を多用する私にとってクアッドコアは譲れないラインではあるので、Mac miniの新型だけはどうにかしてほしいですが、まぁ諦めたほうがよいのでしょうね…（そもそも出るのか？）。&lt;/p&gt;&#10;&lt;p&gt;最近のMacについてモヤモヤしているのは事実ですし、また色々と愚痴ってしまっていますけれど、結局Macから離れられそうないのもまた、現実なわけです。ならば仕方ない、今のMac miniに、もう少し頑張ってもらおう。使い始めてもう4年、いつかは壊れるものですし、その時には気持ち良く新しいMacに買い替えたいものですが。一番望みのありそうな次のiMacが、良いものになることを祈るばかりです（グラフィックス次第では買い替える気になるかも……）。&lt;/p&gt;</description></item><item><title>とにかくRaspberry Piにpython2 + numpy + matplotlibをインストールする</title><link>https://hack-le.com/py2nummat/</link><pubDate>Thu, 17 Nov 2016 00:15:14 +0900</pubDate><guid>https://hack-le.com/py2nummat/</guid><description>&lt;p&gt;以前「&lt;a class="link" href="https://hack-le.com/rpipython3/" &gt;とにかくRaspberry Piにpython3 + numpy + matplotlibをインストールする(pyenv使用)&lt;/a&gt;」という記事を書きましたが、pyenvを使うものでした。今回は、pyenvを使わず、現在Raspberry Piで標準に入っているpython 2を使い、numpy,matplotlibをインストールします。OSはRaspbian Jessie。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;以下で確認しました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Raspberry Pi 3&lt;/li&gt;&#10;&lt;li&gt;Raspbian Jessie, GUI環境なし, カーネル 4.4.31-v7+&lt;/li&gt;&#10;&lt;li&gt;python 2.7.9 + numpy 1.11.2 + matplotlib 1.5.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;python 3を使う場合は、上記のpyenvを使った記事「&lt;a class="link" href="https://hack-le.com/rpipython3/" &gt;とにかくRaspberry Piにpython3 + numpy + matplotlibをインストールする(pyenv使用)&lt;/a&gt;」で。&lt;/p&gt;&#10;&lt;p&gt;以前やったときはなんぼやっても失敗したんですが、いつの間にかうまくいくようになっていました。最新のRaspbianを使いましょう。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;手順は以下です。&lt;/p&gt;&#10;&lt;pre&gt;`# ソフトウェアのインストール&#13; sudo apt-get install python-dev python-pip&#13; # pipのアップグレード&#13; sudo pip install --upgrade pip&#13; # numpyおよびmatplotlibをインストール&#13; sudo pip install numpy psutil python-dateutil pytz tornado pyparsing six&#13; sudo pip --no-cache-dir install matplotlib&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;numpyとmatplotlibのインストールは非常に時間がかかります。また、普通にmatplotlibをインストールしようとするとMemory Errorになります（参考「&lt;a class="link" href="http://stackoverflow.com/questions/29466663/memory-error-while-using-pip-install-matplotlib" target="_blank" rel="noopener"&#10; &gt;python - Memory error while using pip install Matplotlib - Stack Overflow&lt;/a&gt;」）。以上でインストール完了です。&lt;/p&gt;&#10;&lt;h2 id="動作テスト"&gt;動作テスト&#10;&lt;/h2&gt;&lt;p&gt;インストールが正常に行われたか、以下のサンプルスクリプトを実行して確認します。グラフを表示して確認したいところですが、GUI環境なしなので、ファイルにグラフを出力して確認します。&lt;/p&gt;&#10;&lt;pre&gt;`# -*- coding: utf-8 -*-&#13; &#13; import numpy as np&#13; import matplotlib&#13; matplotlib.use("Agg")&#13; import matplotlib.pyplot as plt&#13; &#13; x = np.arange(-np.pi, np.pi, 0.01)&#13; y = np.sin(x)&#13; &#13; plt.plot(x,y)&#13; plt.savefig("test.png")&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;初回実行時はWarningが出ますが気にせず。下図のような、正弦波が一つ描かれたグラフtest.pngが生成されたらOKです。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_3833&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="test.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/2016/10/test-300x225.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;test.png[/caption]&lt;/p&gt;</description></item><item><title>MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)</title><link>https://hack-le.com/rnas104smbup/</link><pubDate>Tue, 15 Nov 2016 13:52:54 +0900</pubDate><guid>https://hack-le.com/rnas104smbup/</guid><description>&lt;p&gt;一年間私を悩ませ続けた問題が、ようやく一区切りつきました。MacとReadyNAS 104のやりとりが異常に遅いというものです。速度がよくて10MB/sしか出ない。対応後、Readで60MB/sまで改善しました。&lt;/p&gt;&#10;&lt;h2 id="環境と症状"&gt;環境と症状&#10;&lt;/h2&gt;&lt;p&gt;Macの環境は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Mac mini 2012, MacBook Air 2013 11インチ&lt;/li&gt;&#10;&lt;li&gt;OSX 10.11.6 （追記：Sierra(10.12.4)でも確認）&lt;/li&gt;&#10;&lt;li&gt;有線LAN、ギガビットイーサネット環境、無線は切っている&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ReadyNAS 104のファームウェアは6.5.0。&lt;/p&gt;&#10;&lt;p&gt;症状として、MacとReadyNASの通信が10MB/sしか出ない。プロトコルはSMB。AFPを使うと、Readで50MB/s、Writeで30MB/s出る。また、Windowsでは無線のクライアントでも20MB/s以上でるので、通信環境の問題ではない（ルータ周りのLANケーブルがすべてCat.5e以上であることを確認、ケーブル交換なども実施したが、改善せず）。したがって、Mac、あるいはReadyNASのMacに関する設定の問題と考えられる。&lt;/p&gt;&#10;&lt;p&gt;ちなみに「&lt;a class="link" href="https://wp.bmemo.pw/48" target="_blank" rel="noopener"&#10; &gt;MacでSamba, NASの接続が遅い時の対処法まとめ - wp.bmemo.pw&lt;/a&gt;」で紹介されている「net.inet.tcp.delayed_ack=0」でTCP遅延ACKのオフと、ReadyNAS側の設定として「&lt;a class="link" href="https://hvc-001.com/readynas-finder-access/" target="_blank" rel="noopener"&#10; &gt;ReadyNas に Finder でアクセスした時に表示が遅い時の対処法&lt;/a&gt;」の設定方法も実施済み。私の場合は残念ながらあまり変わりませんでした。。。&lt;/p&gt;&#10;&lt;h2 id="プロトコルの確認"&gt;プロトコルの確認&#10;&lt;/h2&gt;&lt;p&gt;まず大切なことは、AFPで通信しているのか、SMBで通信しているのかということです。現在のMacはSMBを優先するようになっているはずなので、特に意識しなければSMBでしょう。Finderの共有を見れば、SMBでマウントされているかどうかわかると思います（下図）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Finderの表示" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/80bba8a5bdf16b441042e891f1555785.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Finderの表示&lt;/em&gt;&lt;/p&gt;&#10;&lt;h3 id="smbとafpでの速度差"&gt;SMBとAFPでの速度差&#10;&lt;/h3&gt;&lt;p&gt;このとき、私の環境ではRead/Write共に10MB/s程度しか出ませんでした（下図）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="SMB使用時の速度" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/91b111bff0ef63569a34d92d74ef06a4.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;SMB使用時の速度&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;これは耐えられないほど遅い速度ではありませんが、有線LANであるメリットをまるで感じさせない速度でもあります。実際、Windowsマシンからは20MB/s以上の速度が「無線で」出ました。明らかに問題があります。&lt;/p&gt;&#10;&lt;p&gt;そこで、MacではレガシーとされるAFPで接続すると、速度が劇的に改善されました（下図）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="AFPでの接続時" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/e266053a4c2aaf6d1d96c31eec39dc32.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;AFPでの接続時&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Readが50MB/s、Writeが30MB/s出ています。激速ではありませんが、有線LANの恩恵を受けた速度ではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;ではAFP接続にすればよいのではないかというと、&lt;strong&gt;AFP接続にした場合、どういうわけか、Finderでのファイルのリスト表示が著しく遅くなりました&lt;/strong&gt;。SMBでも遅いのですが、AFPはちょっと信じ難いほど遅い。10以上ファイルがあると待たされる。100もファイルがあれば、10秒以上待たされる。これはちょっと実用的でない。&lt;/p&gt;&#10;&lt;p&gt;また、AFPは既にAppleからレガシーとされ、開発もストップしており、いつ切られてもおかしくない状態です。SMBを使うほうが無難なのです。&lt;/p&gt;&#10;&lt;h3 id="smbとafpについて"&gt;SMBとAFPについて&#10;&lt;/h3&gt;&lt;p&gt;状況を整理します。まず現在のMacでの標準はSMBです。しかし、速度が出ません。AFPにすると、最大速度は確かに早くなりますが、Finderでの表示が耐え難いほど遅くなりました。また、AFPはレガシーであり、開発がストップしています。SMBを使うことが望ましいとされています。&lt;/p&gt;&#10;&lt;p&gt;レガシーのAFPならばともかく、なぜ推奨のSMBでこんなことになっているかと言うと、MacにおけるSMBの実装に独自の拡張があるためという説が有力です。Mac同士であれば問題ないのですが、ReadyNASのように汎用的なサードパーティーのデバイスが絡むと話がややこしくなる。これは悪い意味でAppleらしい状況です。&lt;/p&gt;&#10;&lt;p&gt;SMBが推奨となったのはもう何年も前なのですけれど、この問題はいまだに解決しておらず、AFPのほうが速度が速いという理由で、いまなおAFPを使い続けている人もいます。まぁ、Appleからしてみれば自社製品ではないネットワークストレージを使ってくれるなということなのかもしれませんが、けったいな話です。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;この問題は、私をずっと悩ませてきました。SMBもAFPも一長一短ではありますが、SMBが推奨されるプロトコルであること、リスト表示がAFPより速いこと、10MB/sは遅いが耐えられないほどではないことを勘案して、SMBを使っていました。&lt;/p&gt;&#10;&lt;p&gt;しかしやはり使っているとどうにも遅さが気になります。やりきれない。他の人の動作報告を見れば、MacとReadyNAS 104でも50MB/sくらい出ているものがある。10MB/sはいくらなんでも遅すぎる。100BASE-T並ではないか。無線のWindowsマシンのほうが快適とは何事か。&lt;/p&gt;&#10;&lt;p&gt;というわけで一念発起し、ちょっと頑張って調べました。色々試したところ、「&lt;a class="link" href="https://forum.synology.com/enu/viewtopic.php?f=14&amp;amp;t=118918" target="_blank" rel="noopener"&#10; &gt;Mac OS X 10.11.5 slow data transfer - Synology Forum&lt;/a&gt;」にある方法で効果がありました。それは、/etc/nsmb.confに以下の内容を記述することです。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[default]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;signing_required=no&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;システムファイルなので、ターミナルからsudo権限で編集する必要があります。編集後は再起動。コマンドで書き込みする場合は以下でどうぞ。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo -s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;[default]&amp;#34; &amp;gt; /etc/nsmb.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo signing_required=no &amp;gt;&amp;gt; /etc/nsmb.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;reboot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再起動後、速度が劇的に改善しました（下図）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="改善後のSMBでの速度" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/ae723746ed1f8c1fe161c3be9f7d1ffc.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;改善後のSMBでの速度&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Readが60MB/s、Writeが40MB/s、心なしかAFPの時より速いくらいですね。よく理解していませんが、signing_required=noとは「&lt;a class="link" href="https://technet.microsoft.com/ja-jp/library/cc731957%28v=ws.11%29.aspx" target="_blank" rel="noopener"&#10; &gt;SMB のセキュリティ署名の必要性&lt;/a&gt;」に関することでしょうか？中間者攻撃対策としてセキュリティ上必要とされるようですが、我が家のLAN内でのやりとりなので、まぁよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;（追記）「&lt;a class="link" href="http://news.mynavi.jp/column/osxhack/184/" target="_blank" rel="noopener"&#10; &gt;新・OS X ハッキング! (184) NASのアクセス速度を改善する | マイナビニュース&lt;/a&gt;」にて本件の解説がされました。「パケット署名」だそうです。つまりSMBの仕様か。&lt;/p&gt;&#10;&lt;p&gt;これまでずっと悩まされ、Macだから仕方ないのかなとさえ思っていたのですが、なんとか速度が出るようになり、たいへんハッピーです。4GBのOSイメージが1分でコピーできました。嬉しいことです。macOS Sierraにアップグレードしたら、きっとまた対応しなくてはならないのでしょうけれど。&lt;/p&gt;&#10;&lt;p&gt;なお、「&lt;a class="link" href="https://forum.synology.com/enu/viewtopic.php?t=119838" target="_blank" rel="noopener"&#10; &gt;Slow file sharing on Mac using SMB - Synology Forum&lt;/a&gt;」によれば、/etc/nsmb.confではなく「&lt;del&gt;/Library/Preferences/nsmb.conf 」に上記の内容を書き込むとしていました。しかし、当該ファイルが見つからなかったので、/etc/nsmb.confを作成しました。&lt;/del&gt;/Library以下で編集するほうがMac的には行儀がよさそうなので、こちらを試してみてもよいかもしれません。/etc/以下はOSのアップデートで書き換えられそうですしねぇ…。&lt;/p&gt;&#10;&lt;p&gt;それにしても、調べていて不思議だったのは、人によっては特に何もせずとも50MB/sくらい速度が出る人もいるようであったことです。パケット署名の処理による速度低下が原因ということであれば、MacでReadyNAS 104を使う場合、パケット署名の無効化をしないと速度は10MB/s程度になってしまうように思うのですが…。&lt;/p&gt;</description></item><item><title>最近のMacが微妙だなぁなどと考えるうちに何故かウルトラワイドのディスプレイに興味</title><link>https://hack-le.com/ultrawide/</link><pubDate>Sat, 12 Nov 2016 23:56:48 +0900</pubDate><guid>https://hack-le.com/ultrawide/</guid><description>&lt;p&gt;愛機Mac mini 2012も使い始めて4年。そろそろ次のPCが欲しくなってきた今日この頃ですが、どうにもMacの元気がない。いっそ先日発表されたMacBook Pro 2016しようかと思うものの、15インチタイプは30万円するし、その割にタッチバーがついたということ以外にはさほど見るべきスペックアップもなく、どうにもスッキリしない。&lt;/p&gt;&#10;&lt;p&gt;それであれば、もっと別のことにお金をつかったほうが良いのではないか……そんな風に考えはじめ、色々と物色していると、気になったのが解像度2560 x 1080というウルトラワイドのディスプレイ。ふむ……。&lt;/p&gt;&#10;&lt;p&gt;（2016/11/26追記）買ってしまいました……ふふ……。&lt;/p&gt;&#10;&lt;h2 id="初めて見たときは意味がわからなかった"&gt;初めて見たときは意味がわからなかった&#10;&lt;/h2&gt;&lt;p&gt;ウルトラワイド、ワイドを超えるワイド。アスペクト比にして21:9。こういうディスプレイがあることは知っていました。初めて聞いたときは、意味不明だというのが正直な印象でした。&lt;strong&gt;いったい、そんなに横に長くしてどうするのか？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;わかりやすいユーザーは、コアな映画ファンやゲーマーでしょう。しかし私はそのどちらでもない。プログラミングや書類の作成において、調べものをしながら作業が出来るという利点もあげられますが、それであればディスプレイを追加するほうが安価で済むし、使える領域も大きい。&lt;/p&gt;&#10;&lt;p&gt;というわけで、私には無用の長物であると、長らくそう考えていました。&lt;/p&gt;&#10;&lt;h2 id="シングルディスプレイのこだわり"&gt;シングルディスプレイのこだわり&#10;&lt;/h2&gt;&lt;p&gt;しかし、マルチディスプレイは必ずしも勝手が良いものではありません。私は昔、トリプルディスプレイにしていたことがあります。23インチのディスプレイを3枚並べて、喜んでいました（人に見られた時、割とガチでドン引きされたのも良い思い出です）。しかし、現在はシングルディスプレイに戻しています。&lt;/p&gt;&#10;&lt;p&gt;なぜかというと、&lt;strong&gt;マルチディスプレイには以下のデメリットがあった&lt;/strong&gt;からです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;スペースを多く専有する&lt;/li&gt;&#10;&lt;li&gt;圧迫感がある&lt;/li&gt;&#10;&lt;li&gt;コードが多く必要&lt;/li&gt;&#10;&lt;li&gt;消費電力が大きい&lt;/li&gt;&#10;&lt;li&gt;アプリケーションによっては挙動が思い通りでない、安定しない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;一方で、&lt;strong&gt;得られるメリットは、多くの情報を俯瞰できること&lt;/strong&gt;でした。それは確かに大きなメリットであり、デメリットを打ち消すだけの価値があるものと思います。&lt;/p&gt;&#10;&lt;p&gt;しかし時代は移り、&lt;strong&gt;iPadなどタブレットが実用的に大きな役割を果たすようになると、必ずしも常に複数のディスプレイが必要ではないと思うようになりました&lt;/strong&gt;。必要な時だけ、タブレットで補完できるのではないか、そう考えるようになったのです。&lt;/p&gt;&#10;&lt;p&gt;もちろん、ディスプレイが複数枚あったほうが利便性は高い。しかし、上述のデメリットがあります。メリットとデメリットを天秤にかけたとき、そのバランスが次第に変わってきました。私はコマンドラインでの開発が主であることもあり、常に広い作業領域を要するわけではない。&lt;strong&gt;最終的に、私はディスプレイを人にあげて、シングルディスプレイに戻すことにした&lt;/strong&gt;のです。&lt;/p&gt;&#10;&lt;h2 id="gui絡みの開発があるとフルhdが狭く感じる"&gt;GUI絡みの開発があるとフルHDが狭く感じる&#10;&lt;/h2&gt;&lt;p&gt;それで大方満足していたのですが、最近Androidのアプリケーションを開発する機会がありました。&lt;strong&gt;GUIが絡むと、なるほど作業領域は広いほうがよい。&lt;/strong&gt; 今後はこういうことも増えそうです。それで、画面領域の拡張を考えるようになりました。&lt;/p&gt;&#10;&lt;p&gt;選択肢は２つ。より大きな画面のディスプレイに置き換えるか、ディスプレイを追加するか、です。しかし、私は前述のようにマルチディスプレイのデメリットは大きいと考えています。&lt;strong&gt;費用はかかるが、シングルディスプレイで済ませたい&lt;/strong&gt;。つまり置き換えです。&lt;/p&gt;&#10;&lt;h2 id="ウルトラワイドの選択肢"&gt;ウルトラワイドの選択肢&#10;&lt;/h2&gt;&lt;p&gt;そうすると、現在使用しているのは、三菱電機のいまはなきブランドDiamondcrysta RDT233WX-Z。23インチのフルHD、すなわち1920 x 1080です。品質も、私としてはまぁまぁのディスプレイです。&lt;/p&gt;&#10;&lt;p&gt;これを置き換えるということは、解像度は横幅2560px以上のもので、23インチ以上、かつ液晶の品質も悪くはないもの、となります。端的に言えば、27インチで2560 x 1440 のブランドものなどがそうでしょう。&lt;/p&gt;&#10;&lt;p&gt;しかし……この大きさのディスプレイを見ると思うのです。iMacの5Kディスプレイを。私はMacユーザーですから、それであればiMacを買ってしまうのが最適解なのではないか。そう思えてなりません。&lt;/p&gt;&#10;&lt;p&gt;うーん……iMac。今使っているMac mini 2012は優秀です。確かにiMacのほうがスペックは高い。しかし、30万出すほどのものだろうか。Macは2013年iMac Retina 5k以来、すっかり進化が止まってしまっています（最近の進化はタッチバー……ううん……）。拡張性はメモリだけ。ストレージさえいじれず。なんとも、食指が動かない。そろそろ新型も出そうですしねぇ……。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;などと思っていた時に思いついたのが、21:9という謎アスペクト、ウルトラワイドのディスプレイ&lt;/strong&gt;です。これの29インチモデルなど、どうか。これならば、Mac mini 2012でもギリギリ使える（Mac mini 2012のHDMIはフルHDまでしかサポートしていないという罠がありますが、mini displayportならば2560 x 1600までいける）。&lt;strong&gt;なにより面白い&lt;/strong&gt;。普通の人が見たら「なにこれ」です。&lt;/p&gt;&#10;&lt;p&gt;ただ、ニッチな解像度であるためか、選択肢はそう多くありません。まぁ、LGか、Dellか、という感じです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01C5KVQQO&amp;linkId=5da9f983fcaceb49f70a45426a2327d9" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;値段を考えると、LGかなぁ。LGの29UM68-PはDisplayport付きで（UM67は30000円を切ることも珍しくないようですが、Displayportがありません）、タイミングよく買えば35000円といったところですが。う～～ん。&#10;&lt;p&gt;LG、どうなんでしょうね、あまり良い印象がないのですが。まぁ次はAppleのディスプレイもLGというし、今はもう悪くないのかもしれませんが。うーん。&lt;/p&gt;&#10;&lt;p&gt;Mac mini 2012での動作報告もあまり見ないですしねぇ。果たしてちゃんと使えるのか。前モデルである29UM58-Pでの使用報告はいくつか見たものの。&lt;/p&gt;&#10;&lt;h2 id="macはどうなるんだろう"&gt;Macはどうなるんだろう…&#10;&lt;/h2&gt;&lt;p&gt;そもそもこれを買ってしまうと、当分4Kやら5Kやらはおあずけということが、自分の中で決定的になってしまうなぁと。次のiMacで思わず即購入してしまいたくなるようなとんでもないのが出るかもしれないし。出ないかもしれないし。&lt;/p&gt;&#10;&lt;p&gt;うーん、いや、Macにはもう期待しないほうが良いのだろうな。まさか、自分がウルトラワイドなんてものに関心を抱くようになるとは思いませんでしたが、それもこれも、最近のMacがイマイチ微妙だからだと思います。新しいMacに気持ち良く金を出す気になれないから、こうして周辺機器から環境を変えることを色々画策してしまっているのでしょう。&lt;/p&gt;&#10;&lt;p&gt;VRがにわかに盛り上がりつつある昨今、次のiMacではいよいよGPU周りに大きな変革があるとも言われています。そうであれば良いが、果たして……。もうしばらく信じて待つか、見切りをつけ、自分なりに新しい体験を求めるか。悩ましい……。&lt;/p&gt;</description></item><item><title>BSS138搭載ロジックレベルコンバータの入出力メモ</title><link>https://hack-le.com/bss138/</link><pubDate>Sun, 06 Nov 2016 23:34:26 +0900</pubDate><guid>https://hack-le.com/bss138/</guid><description>&lt;p&gt;「&lt;a class="link" href="https://www.switch-science.com/catalog/1193/" target="_blank" rel="noopener"&#10; &gt;BSS138搭載4CH-I2C用双方向ロジックレベルコンバータ - スイッチサイエンス&lt;/a&gt;」のロジックレベルコンバータを使って、3.3Vの矩形波を入力したとき、出力の5Vの波形がどうなるかを確認したときのメモです。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;AdafruitのUltimate GPSより出力されるPPS信号(1Hz, Duty 10%の矩形波)を入力にして、スイッチサイエンスで販売されている、FETとしてBSS138搭載のロジックレベルコンバータを通したとき、信号がどうなるかを確認しました。なお、3.3Vと5Vの電源は、Raspberry PiのGPIOピンからとりました。オシロスコープとして、TektronicsのMDO3024を用いました。&lt;/p&gt;&#10;&lt;p&gt;要は、Raspberry Piで使っているGPSのPPS信号を5Vに昇圧したかったのですが、遅延とかどうなるのかなと思ったので、調べてみたのです。&lt;/p&gt;&#10;&lt;h2 id="結果"&gt;結果&#10;&lt;/h2&gt;&lt;p&gt;まず全体は下図(400us/div)。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4050&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;800&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="全体" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/tek00006.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;400us/div 黄色：入力信号(3.3V) 青色：出力信号(5V)[/caption]&lt;/p&gt;&#10;&lt;p&gt;黄色が入力信号(3.3V)で、青色が出力信号(5V)です。6Vくらいまでオーバーシュートし、その後5Vに落ち着きます。&lt;/p&gt;&#10;&lt;p&gt;遅延を調べるため、もう少し細かく見ます(400ns/div)。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4051&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;800&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="遅延" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/tek00002.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;400ns/div[/caption]&lt;/p&gt;&#10;&lt;p&gt;5Vに昇圧するまで、だいたい1.5usくらいですかね。&lt;/p&gt;&#10;&lt;h2 id="おまけadafruit-ultimate-gpsのpps信号の立ち上がり"&gt;おまけ：Adafruit Ultimate GPSのPPS信号の立ち上がり&#10;&lt;/h2&gt;&lt;p&gt;おまけ。入力信号に使ったAdafruit Ultimate GPS（チップはMTK3339）のPPS信号の立ち上がりについて。下図。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4052&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;800&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="PPS信号の立ち上がり" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/11/tek00004.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;PPS信号の立ち上がり(黄色)[/caption]&lt;/p&gt;&#10;&lt;p&gt;だいたい7-8nsくらいでした。データシートを見るとジッター&amp;lt;10nsとあったので、こんなものでしょうか。ロジックレベルコンバータを通すと、あまり意味がない。&lt;/p&gt;</description></item><item><title>もうMac miniは諦めてMacBook Proを買ってしまおうか…</title><link>https://hack-le.com/mini2mbp/</link><pubDate>Thu, 03 Nov 2016 02:21:47 +0900</pubDate><guid>https://hack-le.com/mini2mbp/</guid><description>&lt;p&gt;Mac mini 2012を愛用しています。クアッドコアCore i7 2.3GHz、メモリ16GB、SSD 480GB + HD 1TBのFusion Driveです。先日MacBook Pro 2016が発表されました。これを受けて、もういい加減Mac miniの新型は諦めて、MacBook Proを買おうかどうか、悩んでいます。もうMac miniには期待してはいけないのでしょう……。&lt;/p&gt;&#10;&lt;h2 id="クアッドコアがなくなって"&gt;クアッドコアがなくなって&#10;&lt;/h2&gt;&lt;p&gt;Mac mini 2014には大いに落胆させられました。クアッドコアモデルが無かったからです。そのうえ裏蓋も吸盤無しには開けられないようにさせられたうえ、メモリがオンボードに。これは本当にやめてほしかった。そして残された拡張性はSATAのみ。&lt;/p&gt;&#10;&lt;p&gt;その結果、旧型の2012年モデルの中古相場が急騰するという事態になりました。Macはあまり値下がりしないことで有名ですが、&lt;strong&gt;いくらなんでも2年前のモデルが値上がりするのは異常事態&lt;/strong&gt;と言えます。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;あれからさらに二年、Mac miniは音沙汰ないどころかディスコンの噂さえまことしやかに流れています&lt;/strong&gt;。相変わらずクアッドコアモデル復活を渇望する声は耐えませんが、もう、あまり期待しないほうがよいのだろうなと、昨今の流れを見ていると思います。&lt;/p&gt;&#10;&lt;p&gt;Mac miniのみならず、Macそのものが、ここ数年代わり映えしません。Mac Proなんてもう3年以上音沙汰無し。Proユースのユーザーは、数は少なくとも上客で、大事にすべきだと思うのですが。クック……。&lt;/p&gt;&#10;&lt;p&gt;この状況では、Mac miniの新型がいつ出るのかもわからないし、出たところで、どうせ今のモデルと大差ないデュアルコアモデルなのだろうと思います。まさか小型化してApple TVみたいにはしないと思いますが。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、クアッドコアの小型デスクトップはもう望むべくもあるまい。&lt;strong&gt;期待しないほうが、気持ちが楽&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="macbook-proはどうか"&gt;MacBook Proはどうか&#10;&lt;/h2&gt;&lt;p&gt;そんな中、MacBook Proは久方ぶりにフルモデルチェンジとなりました。やはり&lt;strong&gt;マシンスペック自体は、グラフィックス以外大して変わっていません&lt;/strong&gt;（ストレージは進化したようですが、もはや体感できると思えない）。しかし、申し分ない。&lt;strong&gt;15インチモデルならば、クアッドコア&lt;/strong&gt;です。私がMac miniに求めていたスペックはこれです（ディスプレイなしのMacBook Airではなく）。&lt;/p&gt;&#10;&lt;p&gt;もう、&lt;strong&gt;MacBook Pro 15インチを買ってしまおうか&lt;/strong&gt;、と思い始めています。ちょうど、パワーのあるノートパソコンが欲しかったところでもあります。最近はもっぱら自宅勤務が多いのですが、家では外部ディスプレイに繋げばよい。時折車で他所に行くことも有りますが、車ならば15インチでも問題ない。電車を使うときは、今までどおり11.6インチのMacBook Airを持ち運べばよい。そして、&lt;strong&gt;Mac miniにはサーバーとして余生を過ごさせる&lt;/strong&gt;。Macにとって最適なサーバーはMacですから。iTunesも使えるし。うむ、無駄がないように思える。&lt;/p&gt;&#10;&lt;p&gt;引っかかるのは、やはりそのお値段。&lt;strong&gt;15インチ、SSD512GBの最上位モデルは税込み30万&lt;/strong&gt;。マシンスペック自体は、旧型から大して変わっていないのにね。円高レートでこれですから、円安だったら恐ろしいことになっていましたね。少し待てば、通販では25万円くらいには下がるかもしれませんが。それにしても高いには違いない。ま、他に金の使いみちがあるわけでもないので、いいんですが……。&lt;/p&gt;&#10;&lt;p&gt;かつてMac mini 2012を6万円で購入しました。メモリは8GB2枚組が5,000円。あの頃はよかったんだなぁ。&lt;/p&gt;&#10;&lt;h2 id="imacはストレージがねぇ"&gt;iMacはストレージがねぇ…&#10;&lt;/h2&gt;&lt;p&gt;ところで、どうせ大枚をはたくのであれば、&lt;strong&gt;iMacという手&lt;/strong&gt;もあります。Mac miniはどうなるかわからないにしても、iMacはさすがに来春には出るでしょう。そろそろまた大きな変化があるやもしれぬ。&lt;/p&gt;&#10;&lt;p&gt;ただ、iMacではFusion Driveを選ぶことになると思いますが、そうするとSSD領域は恐らく128GBでしょう。SATAとはいえ、今のMac miniはSSDが480GB。いかにiMacのSSDが早いとはいえ、128GBでは、HDにアクセスする頻度も増えるはず。そうすると、必ずしも今より快適になるとは言い切れない。もし快適度が下がろうものなら……それは非常に許し難い。&lt;/p&gt;&#10;&lt;p&gt;また、どうにも一体型のデスクトップには抵抗感が拭えません。もうPCのスペックが停滞して久しいので、一体型を買っても長く使えるのだろうとは思うのですが。&lt;/p&gt;&#10;&lt;p&gt;などと考えていると、あまりiMacという気にはならないのです。&lt;/p&gt;&#10;&lt;h2 id="寂しいなぁ"&gt;寂しいなぁ&#10;&lt;/h2&gt;&lt;p&gt;それにしても……なんとも寂しいなぁ。MacBook Proも新しくなっているのはわかるのですが、中身のマシンスペックは据え置きという感じ。デスクトップは音沙汰無しでどうなることやら。もうPCの時代は終わったのだと実感させられます。&lt;/p&gt;&#10;&lt;p&gt;なんだかなぁ……。タブレットはiPadがRetina化するところまではワクワクしましたが、もう既にいくところまでいった感がありますし、スマートフォンはねぇ……あまりワクワクはしないんですよねぇ……iPhone 7のSuica対応は嬉しいですが……。&lt;/p&gt;&#10;&lt;p&gt;ま、アレですね……Raspberry Pi、これが今一番素敵です。&lt;/p&gt;</description></item><item><title>Apple TV 第2世代をiOSデバイスからBluetoothで検出することはできない</title><link>https://hack-le.com/appletv/</link><pubDate>Tue, 01 Nov 2016 02:30:08 +0900</pubDate><guid>https://hack-le.com/appletv/</guid><description>&lt;p&gt;いまさらApple TV 第2世代の話もないですが、ちょっとトラブルがあったので。表題のとおり、Apple TV 第2世代を、iOSデバイスからBluetoothで検出することはできません。これは第3世代以降の機能です。Appleのサポートページにもあります。&lt;/p&gt;&#10;&lt;h2 id="ソフトウェアアップデート61より"&gt;ソフトウェア・アップデート6.1より&#10;&lt;/h2&gt;&lt;p&gt;Apple TVはソフトウェア・アップデートにより、その機能を拡張することがあります。ネット上ではApple TV(第3世代/第2世代)がアップデートでBluetooth接続によるAirPlayが利用可能に、という内容の記事が散見されますが、これは正確ではありません。「&lt;a class="link" href="https://support.apple.com/ja-jp/HT202157" target="_blank" rel="noopener"&#10; &gt;Apple TV (第 2 および第 3 世代) ソフトウェアアップデートについて - Apple サポート&lt;/a&gt;」には以下の文言があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Apple TV ソフトウェア・アップデート 6.1&#10;（略）&#10;また、ネットワーク上でマルチキャストや Bonjour トラフィックがブロックされている環境や、AirPlay デバイスが異なるサブネット上にある環境において、AirPlay デバイスが Bluetooth で Apple TV を検出できるようになりました (iOS 7.1 以降が搭載された iPhone 4s 以降、iPad (第 3 世代以降)、iPad mini (初代または第 2 世代)、または iPod touch (第 5 世代)、および Apple TV (第 3 世代) が必要です)。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Apple TV(第3世代)が必要です、とハッキリ明記&lt;/strong&gt;しています。したがって、従来どおり、&lt;strong&gt;iPhoneのようなiOSデバイスで、Apple TV(第2世代)をBluetoothで検出することはできません&lt;/strong&gt;。これが仕様です。&lt;/p&gt;&#10;&lt;p&gt;念の為、&lt;strong&gt;Appleのサポートにも電話で聞いてみましたが、それで間違いないと回答&lt;/strong&gt;されました。&lt;/p&gt;&#10;&lt;p&gt;Bluetoothのキーボードが利用できることなどから、Bluetooth自体は有しているでしょう。しかし、それをどのように利用できるのかはまた別の問題といえます。極端な話、Bluetoothモジュールを単体で購入して取り付ければ、なんでもBluetoothで自由自在に使えるようになるのかというと、そんなことはないわけです。&lt;/p&gt;&#10;&lt;p&gt;この話題について、しっかりと第3世代以降のことであると明記している記事もあります。一方、第3世代/第2世代のアップデートとしか書かず、それだけ見ると第2世代でも対応していると受け取ることができるような書き方の記事もあります。はからずも、そのサイトの情報サイトとしての質がわかる試験紙のような話題でした。やはり、&lt;strong&gt;大切なことは、公式情報にちゃんとあたること&lt;/strong&gt;ですね。&lt;/p&gt;&#10;&lt;p&gt;以上、いまさらな話でした。&lt;/p&gt;&#10;&lt;h2 id="余談p2pのairplay"&gt;余談：P2PのAirPlay&#10;&lt;/h2&gt;&lt;p&gt;調べている際、個人的に興味が引かれたのは、「&lt;a class="link" href="https://support.apple.com/ja-jp/HT202157" target="_blank" rel="noopener"&#10; &gt;Apple TV (第 2 および第 3 世代) ソフトウェアアップデートについて - Apple サポート&lt;/a&gt;」にあるソフトウェア・アップデート7.0の以下の文言です。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Apple TV ソフトウェア・アップデート 7.0&#10;（略）&#10;P2P の AirPlay：お使いの Apple TV (モデル A1469 以降) に、ゲストの Mac または iOS デバイスからワイヤレスネットワークに接続することなく直接 AirPlay できます。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;ちょっとびっくりしました。モデルA1469は第3世代の一部モデル名ですが、P2PでダイレクトにiOSデバイスからAirPlayできるとは……。「&lt;a class="link" href="http://applech2.com/archives/41079671.html" target="_blank" rel="noopener"&#10; &gt;Apple TV（Model A1469）とiOS 8デバイスでP2P AirPlayミラーリングをする方法。 | AAPL Ch.&lt;/a&gt;」の記事に利用する方法が乗っています（対応デバイスも明記されていますね）。まずBluetoothでセッションを確立し、その後Wi-fiを入にする……要は、セッションの確立にBluetooth、データのやりとりにWi-fiを用いる、AirDropと同じのような感じと思われます。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;P2Pでダイレクトに転送が出来るのは、面白い機能&lt;/strong&gt;です。管理されないネットワークは夢があります。個人的には一度使ってみたい。Apple TVがあれば、その場でiPhone持っている人の画面を手軽にTV出力できる……使い所は非常に限定的っぽいですが、それだけにハマれば便利そうです。そうですね、たとえば……ほ、ホームパーティーとか……Oh, パーリーピーポー。&lt;/p&gt;</description></item><item><title>ページ速度改善のためnginxで圧縮を有効にする（WordPressでも有効）</title><link>https://hack-le.com/nginxgzip/</link><pubDate>Sun, 30 Oct 2016 13:21:34 +0900</pubDate><guid>https://hack-le.com/nginxgzip/</guid><description>&lt;p&gt;&lt;a class="link" href="https://developers.google.com/speed/pagespeed/insights/?hl=ja" target="_blank" rel="noopener"&#10; &gt;PageSpeed Insights&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Googleのページ速度測定ツールとしてPageSpeed Insightsがあります。これを実行すると、特に速度対策してないサイトではたいてい「圧縮を有効にする」ようにと注意されます。他にも複数注意されますが、圧縮は&lt;strong&gt;簡単な割にスコアが大幅に上がりやすい項目&lt;/strong&gt;です。また、WordPressなど使っていると、ソースコードをいじるのも一苦労ですが、この項目については簡単に実行することができます。&lt;/p&gt;&#10;&lt;p&gt;本記事では、nginxで圧縮を有効にするやり方についてメモします（Apacheにあらず）。&lt;/p&gt;&#10;&lt;h2 id="ページ速度の測定と改善"&gt;ページ速度の測定と改善&#10;&lt;/h2&gt;&lt;p&gt;ページ速度の測定にはいくつかのスタンダードがありますが、そのうちの一つがGoogleのPageSpeed Insightsです。これを使ってみた所、当サイトのスコアはPC版が69点、モバイル版が57点でした。これはよくないスコアで、いわゆる赤点でしょうか。まぁ特に速度改善の対策らしい対策はしていないので、そのことを思えばこんなものなのかもしれませんが。&lt;/p&gt;&#10;&lt;p&gt;色々とGoogleから注意されましたが、その中の「圧縮を有効にする」を実行したところ、PC版が83点(+14点)、モバイル版が66点(+9点)となりました。及第点とはいきませんが、&lt;strong&gt;赤点は脱することができた&lt;/strong&gt;ようです。&lt;/p&gt;&#10;&lt;p&gt;追記：どうやらこの調整をしていたときはサーバーがたまたま重かったのか、応答速度が遅く、その後再測定すると86点/69点に。まぁ大して変わりませんが。&lt;/p&gt;&#10;&lt;p&gt;WordPressは大きなソフトウェアなので、自分でさっといじれるところが少なく、Googleからの有難い助言も、すぐ実行できるものばかりではありません。その中でこの圧縮は、nginxの設定だけで済み、かつ大幅なスコア改善が期待できる項目です。是非ともやっておきたいですね。&lt;/p&gt;&#10;&lt;h2 id="圧縮を有効にするとは"&gt;圧縮を有効にするとは&#10;&lt;/h2&gt;&lt;p&gt;圧縮を有効にするとは、コンテンツを圧縮して転送するデータ量を減らそうというものです。基本的に、Webサーバーのソフトの設定で対応することになります。Apacheであったり、nginxであったりです。いずれも、設定ファイルにちょっと付け加えるだけで、gzipで圧縮する設定にすることができます。&lt;/p&gt;&#10;&lt;p&gt;使用するうえで、注意しなくてはいけないこともあります。圧縮処理を行うため、CPUの負荷は上がるという点です。また、処理する時間がかかります。したがって、&lt;strong&gt;なんでもかんでも圧縮すればよいというものではない&lt;/strong&gt;といえます。たとえば小さすぎるファイルや、jpeg画像のように既に十分圧縮されているものは、圧縮の効果が薄いどころか逆効果になるかもしれません。また、もしアクセスが多すぎてCPUに余裕がない場合も、この設定は藪蛇かもしれません（そんな心配してみたいですね）。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、それが定量的にどれくらいなのかは難しい問題です。その難しい問題を泥臭く頑張るのことをチューニングというわけですが、今回はあまり頑張らず、まぁこんなものだろうという設定にします。&lt;/p&gt;&#10;&lt;h2 id="nginxでのやり方"&gt;nginxでのやり方&#10;&lt;/h2&gt;&lt;p&gt;nginxでのやり方をメモします。nginxの設定ファイルをいじりますが、設定ファイルの基本は「&lt;a class="link" href="//hack-le.com/nginx/" &gt;nginxの設定ファイル nginx.conf の読み方 超入門&lt;/a&gt;」という記事に書きましたので、設定ファイルの場所や、コンテキストやディレクティブ、MIMEタイプといった用語がわからない場合はご参照ください。&lt;/p&gt;&#10;&lt;p&gt;gzip圧縮転送として、gzipディレクティブを使います。これはhttp,server,locationコンテキスト内で使えます。locationコンテキスト内での使用例を以下に示します。&lt;/p&gt;&#10;&lt;pre&gt;` location / {&#13; try_files $uri $uri/ @wordpress;&#13; # gzip圧縮&#13; gzip on;&#13; gzip_min_length 1k;&#13; gzip_types text/css text/javascript application/x-javascript application/javascript application/json image/svg+xml;&#13; gzip_disable "msie6";&#13; &#13; }&#13; `&lt;/pre&gt;&#13;&#10;&lt;h1 id="gzip圧縮以下が適用例です一つずつ見ていきます"&gt;gzip圧縮以下が適用例です。一つずつ見ていきます。&#10;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;gzip on;により、gzip圧縮転送を有効&lt;/strong&gt;にします。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;gzip_min_length 1k;で、圧縮対象の最小のファイルサイズを指定&lt;/strong&gt;します。この場合1kB。なお、デフォルト値は20です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;gzip_typesは、圧縮を有効にするファイルの種類を指定&lt;/strong&gt;します。text/htmlについては指定せずとも圧縮が有効化されます（入れるとダブってるよと警告されます）。なお、text/htmlやtext/cssはMIMEタイプと呼ばれます。MIMEタイプとは、簡単に言うとWeb上における拡張子みたいなものです。たとえば、.cssはMIMEタイプにおいてtext/cssと表現されます。この対応は、/etc/nginx/mime.typesで定義されています。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;gzip_disableは、圧縮を無効にするユーザーエージェントを指定&lt;/strong&gt;します。特定のブラウザについては圧縮しないとか、そういうことです。&amp;ldquo;msie6&amp;quot;は特別な符号で、ME IE 6 SV1未満について最適化されています（これらのブラウザは圧縮の実装に不具合があるそうです）。もっとも、MS IE6を使ってこのサイトを覗く人はほとんどいません。今月は全体の0.015%ほどあったようですが、果たしてちゃんとこのサイト表示はされているのでしょうか。&lt;/p&gt;&#10;&lt;p&gt;以上の設定を、適切なところに配置します。WordPressを使っている場合、locationコンテキストがphpとそれ以外で分散しているかもしれませんが、その場合両方に配置します。serverコンテキスト内に配置してしまうのが手っ取り早い？&lt;/p&gt;&#10;&lt;p&gt;設定が完了したら、設定ファイルを再読込です。CentOS 7の場合（つまりsystemdの場合）は以下。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo nginx -t&#13; -&gt; 設定ファイルの文法が正しいことを確認&#13; $ sudo systemctl reload nginx.service&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="gzip圧縮したファイルを用意して転送するgzip_staticについて"&gt;gzip圧縮したファイルを用意して転送するgzip_staticについて&#10;&lt;/h2&gt;&lt;p&gt;さて、gzipをonにした場合、毎回圧縮処理が行われますが、これは前述したとおり負荷の増加と処理時間というデメリットがあります。それで、この処理を減らすために、&lt;strong&gt;圧縮したファイルを用意しておいて、それを使うという方法&lt;/strong&gt;があり、nginxにおいてはgzip_staticというディレクティブでその機能を有効化できます。しかし、これは標準的な機能ではなく、使用するには、自前でnginxをビルドしなくてはなりません（コンパイルオプションは&amp;ndash;with-http_gzip_static_module）。&lt;/p&gt;&#10;&lt;p&gt;したがって、ここではこの機能は利用しないものとします。興味がある人は各自調べてください。&lt;/p&gt;&#10;&lt;h2 id="効果"&gt;効果&#10;&lt;/h2&gt;&lt;p&gt;ところで、この効果ですが……確かにスコアは上昇したものの、体感としてはあまり変わらないですね。ただ、見やすいページとしてGoogleには多少なりとも好印象を与えられるようになった……のではないかな？多分。&lt;/p&gt;&#10;&lt;p&gt;他にも修正せよとされる項目がいくつもあるのですが、WordPressに依存するところも多く、おいそれとは手が出しづらい。WordPressは便利なのですけれど、個人のブログサイトにはちょっと複雑過ぎるかもしれません。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4774178667&amp;linkId=59dadcd672ffc8c655e417c764ecc93e" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;今回の設定には、「nginx実践入門」を大いに参考にさせていただきました。この本、一通りまとまっていて便利です。技術評論社のサイトでも電子データが直販されています。&#13;&#10;&lt;p&gt;&lt;a class="link" href="https://gihyo.jp/dp/ebook/2016/978-4-7741-7936-0" target="_blank" rel="noopener"&#10; &gt;nginx実践入門 | Gihyo Digital Publishing&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;DRMフリー（厳密にはソーシャルDRM）なので、好きなデバイスとソフトで読めてオススメです。&lt;/p&gt;</description></item><item><title>MacBook Pro 2016の所感とかMac miniの来ない来週とか色々</title><link>https://hack-le.com/mbp2016/</link><pubDate>Sat, 29 Oct 2016 16:34:08 +0900</pubDate><guid>https://hack-le.com/mbp2016/</guid><description>&lt;p&gt;ついにMacBook Pro 2016が発表されました。まぁ大方のリーク通りであり、特になにか目新しいこともなかったのですが。Touch Barが一番のウリというのもな。一方、今の円高がお値段に反映されたのは嬉しいですね。しかも1ドル99円レートですよ。iPhoneなんて112円レートなのに大サービスではないですか。&lt;/p&gt;&#10;&lt;h2 id="macbook-pro-2016の所感"&gt;MacBook Pro 2016の所感&#10;&lt;/h2&gt;&lt;p&gt;今回唯一の新作。久方ぶりのフルモデルチェンジとなったMacBookProについてあれこれ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://www.apple.com/jp/macbook-pro/?afid=p238%7CsLTu2UrFg-dc_mtid_20925emn40401_pcrid_154346136215_&amp;amp;cid=wwa-jp-kwgo-mac-slid-" target="_blank" rel="noopener"&#10; &gt;MacBook Pro - Apple（日本）&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;公式ページを見ながらつらつらと。&lt;/p&gt;&#10;&lt;h3 id="軽くなったがバッテリーは減った"&gt;軽くなったがバッテリーは減った&#10;&lt;/h3&gt;&lt;p&gt;MacBook Proはだいたい噂通りのアップデートです。スペックはグ&lt;strong&gt;ラフィックの向上&lt;/strong&gt;が見られますが、他は代わり映えしないようです。PCのスペック停滞は本当に寂しい限り。ただ、&lt;strong&gt;少し軽くなりました&lt;/strong&gt;。これは嬉しいですね。13インチはMacBook Airと遜色なくなり、15インチは2kgから1.8kg。まだ重いといえばそうですが。&lt;/p&gt;&#10;&lt;p&gt;が、&lt;strong&gt;その分バッテリー容量が減りました&lt;/strong&gt;。ただし、15インチモデルについては、動作時間は9時間から10時間に上がっている……のですけれど、実際的なレビューを見ると、やはりだいたい数時間くらいでバッテリーが切れているようですし、まぁあまり期待できないのだろうと思います。MacBook Proでネットとメールしかしないという人もそういないでしょうし。負荷のかかる作業をすれば、バッテリーをどれだけ積んでいるのかが大事になる。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、それはやはり重さ、サイズとのトレードオフなので、まぁこれはこれで良いのかなと思います。MacBook Proを充電できない環境で使い続けることはあまりないように思えますので。&lt;/p&gt;&#10;&lt;h3 id="消えたファンクションキー"&gt;消えたファンクションキー&#10;&lt;/h3&gt;&lt;p&gt;13インチのTouch Bar非搭載モデル以外では、&lt;strong&gt;ハードウェアとしてのファンクションキーが消えました&lt;/strong&gt;。日本語において、ファンクションキーはひらがな変換、カタカナ変換という重要な機能があります。ですが、これはCtrlキーを使って同じことができるので、まぁさほど問題ないのかな、と。思いつつ、ファンクションキーに機能を割り当てているソフトウェアなどもありますが。でもそういうソフトも、だいたいキー割り当ての変更が柔軟にできることが多いので、やはり問題ないか。&lt;/p&gt;&#10;&lt;p&gt;Escキーの廃止は、主にviを愛用している人から非難轟々のようです。とはいえこれもCtrl + [で問題ないような気もするのですが。私はemacs派なので別にいいですが。&lt;/p&gt;&#10;&lt;h3 id="touch-barの未来は"&gt;Touch Barの未来は&#10;&lt;/h3&gt;&lt;p&gt;消えたファンクションキーの変わりに得られたのが、Touch Barです。うーん、まぁ面白そうな気もするのですが、どうでしょうね。これがついたせいで値段もワンランク上がっていると思うと、うーん。&lt;/p&gt;&#10;&lt;p&gt;ソフトが対応しないことにはなんにもなりませんが、しかしその対応には今後数年を要するでしょうし。特にワクワクはしませんね。使ってみたいとは思いますが。というか、使ってみないことにはわからなそうです。&lt;/p&gt;&#10;&lt;h3 id="sierra対応がkarabiner的に"&gt;Sierra対応が…Karabiner的に&#10;&lt;/h3&gt;&lt;p&gt;個人的に今のところ一番のネックが、Sierra対応であったりします。というのも、現在Macのキー設定全般を変更することができる非常に便利なソフト、Karabinerが対応していないので…。Emacsキーバインドや、キーリピート速度の変更などが簡単にできる。たいへん有難いソフトです。これが対応しないことには、ちょっとなかなか、Sierraには移行しづらい。&lt;/p&gt;&#10;&lt;h3 id="thunderbolt-3だけ"&gt;Thunderbolt 3だけ&#10;&lt;/h3&gt;&lt;p&gt;外部インタフェースがThunderboltだけになりました。まぁこれは時代の趨勢なので、先取りということでよいのですが、ただ電源のMagSafe2はとてもよいものだったので、これだけ残念です。島野製作所との問題の影響もあるのでしょうか。&lt;/p&gt;&#10;&lt;p&gt;USB-C to USBのアダプタは安いものがそれなりにありますし、それが使えるでしょうから、まぁ当面は良いでしょう。&lt;/p&gt;&#10;&lt;h2 id="macbook-air-11インチのディスコン"&gt;MacBook Air 11インチのディスコン&#10;&lt;/h2&gt;&lt;p&gt;噂通り、MacBook Airの11インチがディスコンとなりました。スペック的には仕方ないでしょう。既に12インチのMacBookにサイズ、重さで負けていますし。ただ、問題はお値段です。MacBook Airの廃止はつまり、Macノートの最安モデルがなくなることを意味します。13インチもギリギリ残っていますが、これもそのうちなくなってしまうのでしょう。そうすると、後に残るのはMacBookとMacBook Proだけです。&lt;/p&gt;&#10;&lt;p&gt;うーん……まぁ、PC自体がもはや一定以上のマニア向けのコンピュータであるということなのかもしれません。MacBookがもう少し安くなってくれるとよいのですが。&lt;/p&gt;&#10;&lt;h2 id="他macシリーズの為替レート反映"&gt;他Macシリーズの為替レート反映&#10;&lt;/h2&gt;&lt;p&gt;ひょっとしたら一番のニュースかもしれません。&lt;strong&gt;現在の円高傾向が反映されて、Macシリーズが全般的にお値打ちとなりました&lt;/strong&gt;。しかもドル円レートが99円ほどで、最近の微妙な円安傾向も考えると、非常に嬉しい。まぁそれでも、1年以上古いモデルを私は買う気になれないのですけれど、MacBookなど、うーん、ちょっと、魅力的です。&lt;/p&gt;&#10;&lt;p&gt;一方で、Brexitで急激なポンド安となったイギリスでは、値付けが上がったようです。そういえば、日本も円安になり始めたとき、古い製品の価格が上がり阿鼻叫喚となりました。&lt;/p&gt;&#10;&lt;p&gt;ちょっと話が逸れますが、この為替レートの反映を、単に値上げとか値下げとか報道するのはやめてほしいものです。アメリカ本国では価格が変わっていないこと、ドル円レートで換算するとそれなりになることなどを、きちんと解説し、またタイトルにも為替の文字を入れるなどすべきでしょう。&lt;/p&gt;&#10;&lt;p&gt;たいていの人はこういったニュースだけを見聞きするので、値下げとか値上げという言葉だけを無邪気に信じ、現在の開発動向と絡めて考えたり、在庫処分ではないのかなどと考えたり、そういう筋違いな邪推を生む源になっています。本国でのpriceが下がった時、つまり本当に値下げがあった時とごっちゃにもなりますし、よろしくないと思います。&lt;/p&gt;&#10;&lt;h2 id="mac-miniは"&gt;Mac miniは？&#10;&lt;/h2&gt;&lt;p&gt;ところで世界中の人が気にしているMac miniはどうなったんでしょうか。いや、本気で今回の発表に期待していたわけではありませんが。正直、もう期待できないんでしょうね。さすがにもうだいぶ諦めています。&lt;/p&gt;&#10;&lt;p&gt;最近は、いっそMacBook Proを購入して、それを宅内兼ちょっとモバイル重量級用のマシンにしてしまおうかとも思っています。家ではMacBookProを使い、持ち歩く必要があるときは、11インチのMacBook Airを使い、車移動の時などは15インチのMacBookProを使う。&lt;/p&gt;&#10;&lt;p&gt;仮想マシンを動かさなくてはいけないような作業をする時など、現在使っているMacBook Airではやはり非力なので、MacBookProは欲しいなぁと思っていたのです。&lt;/p&gt;&#10;&lt;h2 id="閑話これからのpc"&gt;閑話：これからのPC&#10;&lt;/h2&gt;&lt;p&gt;今回の発表で一番印象的だったことは、Touch Barでも値下げでもやはりこなかったMac miniの来週でもなく、MacBook Air 11インチのディスコンでした。13インチのディスコンも時間の問題ではないかと思います。そうなると、一番安いものでもMacBookのお値段税込み14万円也。&lt;/p&gt;&#10;&lt;p&gt;PCは、再び値上がりしていくのかな。廉価なモデルは薄利多売が基本だと思いますが、多売できるほど売る相手がいなくなってきているのか。それはもちろん、スマートフォンとタブレットのせいで。Microsoftも最近は明確に舵取りの方向を変えました。Surfaceはハッキリと高級路線です。&lt;/p&gt;&#10;&lt;p&gt;唯一、Chromebookが廉価なノートパソコンの道を模索し続けています。ですが、Chromebookは私が思うPCとはちょっと違う。Chromebookは非常にタブレットに近いと思います。&lt;/p&gt;&#10;&lt;p&gt;私にとってPCとは、管理と自動化をしてくれるものです。膨大な個人のデータベースを管理し、そのデータベースを休むこと無く加工してくれたり、時には解析してくれるものです。&lt;/p&gt;&#10;&lt;p&gt;ただ、それが一般的でないことは理解しています。皆がPCを使うのは、ネットで買い物をしたり、オフィスソフトで書類を作成したり、メールをしたりするためです。それもPCの立派な役目の一つですが、それだけであれば確かにChromebookでよいでしょう。データはクラウドで管理すればよい。&lt;/p&gt;&#10;&lt;p&gt;でも、それは必ずしもPCでなくてはいけない作業ではないと思うのです。まだまだ過渡期で、タブレットでは不十分なところがあるから（オフィスソフトの互換性や機能、文字入力の貧弱さなど）、Chromebookの活躍する余地があるわけですが、この先、どうなるか。&lt;/p&gt;&#10;&lt;p&gt;個人の保持していたコンテンツも、音楽はストリーミングサービスが隆盛、電子書籍はKindleの形態が主流、写真管理さえも、無制限に容量を使えるクラウドサービスは昨今珍しくない。&lt;/p&gt;&#10;&lt;p&gt;もはや、手元にPCを置き、データを管理し、アレコレしたい人は少数派なのでしょう。少数派相手の商売なのだから、当然薄利多売というわけにはいかない。すなわち、PCが高くなる。&lt;/p&gt;&#10;&lt;p&gt;これはよいことなのだろうか。私は、一家に一台サーバーがあって、車を管理するように、家計簿を管理するように、コンピュータの管理（それはすなわちデータの管理）が人々にとって当たり前のものとなる、そんな風になるといいなと、そう思っていたのですが、きっとそうはならないのでしょうね。そして、&lt;strong&gt;データは管理するのではなく、管理されるのが普通になる&lt;/strong&gt;。それは、私の思っていた未来ではないなぁ。&lt;/p&gt;&#10;&lt;p&gt;なんてことを、MacBook Air 11インチモデルのディスコンから思いました。閑話でした。&lt;/p&gt;</description></item><item><title>ReadyNAS 104を使って1年。使い勝手、使用感の雑感</title><link>https://hack-le.com/readynas104year/</link><pubDate>Wed, 26 Oct 2016 14:56:23 +0900</pubDate><guid>https://hack-le.com/readynas104year/</guid><description>&lt;p&gt;NETGEARのReadyNAS 104を購入してもうすぐ1年が経過します。4台のハードディスクを挿入し、何も設定せずともRAIDを組んで、sambaサーバーになってくれる、お値段の割にはよいものです。色々苦労もさせられましたが、今のところ調子よく動いてくれています。&lt;/p&gt;&#10;&lt;h2 id="便利だったところ"&gt;便利だったところ&#10;&lt;/h2&gt;&lt;p&gt;使ってみてよかったことを書いていきます。&lt;/p&gt;&#10;&lt;h3 id="設定が楽"&gt;設定が楽&#10;&lt;/h3&gt;&lt;p&gt;ファイルサーバーは個人的に面倒なサーバーの一つなのですが、特に何もせずとも、最初から必要十分な機能が使えるのは有難いことでした。&lt;/p&gt;&#10;&lt;p&gt;また、システムがLinuxであるので、特に新しいことを覚える必要もなく、どこをどういじればよいのかだいたい見当がつくのもよかった。&lt;/p&gt;&#10;&lt;h3 id="手間いらずのraid"&gt;手間いらずのRaid&#10;&lt;/h3&gt;&lt;p&gt;NASを使う大きな理由の一つは、手軽にRAIDを扱えることだと思います。実際、この一年間でSeagateのHDが一つ死んでしまったのですが、その時は特にダメージもなく復旧させることができました（「&lt;a class="link" href="//hack-le.com/47583583-2/" &gt;ReadyNas 104 のHD交換完了。NASは楽だなぁ…&lt;/a&gt;」）。このときはNASを使っていてよかったなと思いました。&lt;/p&gt;&#10;&lt;p&gt;定期的にバックアップを別に取っているので、RAIDがなくても被害はそんなに大きくなりませんが、データの損失がゼロというのはやはり嬉しい。サーバーが使えない期間もなかったし。&lt;/p&gt;&#10;&lt;h3 id="sshでログインして直接ファイルを編集操作できる"&gt;SSHでログインして直接ファイルを編集・操作できる&#10;&lt;/h3&gt;&lt;p&gt;ログインしてfindやgrep、rmといったUnixコマンドを使用できるのはたいへん便利でした。root権限も得られるので、なんでもできます。実際、TimeMachineの残骸を片付けるときや、正規表現を用いてファイル検索をして削除などしたい時に、非常に便利でした。なにより&lt;strong&gt;rsyncが使える&lt;/strong&gt;のが有難い。&lt;/p&gt;&#10;&lt;h2 id="不便だったところ"&gt;不便だったところ&#10;&lt;/h2&gt;&lt;p&gt;思ったより不便に感じたこともあります。&lt;/p&gt;&#10;&lt;h3 id="ちょっと負荷をかけると落ちる"&gt;ちょっと負荷をかけると落ちる&#10;&lt;/h3&gt;&lt;p&gt;このNASを購入した当初は、Linux(Debian)でrootも取れるし色々出来るぞと意気込んでいました。しかし、いざ使ってみるとリソース不足のためか、ちょっと何かしようとするとすぐにフリーズ。標準機能のバックアップさえひっかかったのはまいりました。本当に応答ゼロになってしまい、Webサーバーが反応しない、ログインできないのはもちろん、ボタンさえも受け付けなくなってしまう。電源コードを何度か抜く羽目になってしまいました（壊れなくてよかった）。&lt;/p&gt;&#10;&lt;p&gt;結局、作業は1つずつ行う、サーバーとして必要な最低限の機能のみ使う、ということで落ち着きました（「&lt;a class="link" href="//hack-le.com/46372213-2/" &gt;ReadyNAS 104の安定した運用に至るまで&lt;/a&gt;」）。owncloudなんてやってみようかなという野望もあったのですが、まぁしないほうがよさそうです。&lt;/p&gt;&#10;&lt;h3 id="timemachineでトラブル頻発"&gt;TimeMachineでトラブル頻発&#10;&lt;/h3&gt;&lt;p&gt;ReadyNASはTimeMachineサーバーの機能もあります。初めの間はこれを利用していました。ネットワーク越しということもあってだいぶ遅いですが、バックアップから復元までちゃんとできました。&lt;/p&gt;&#10;&lt;p&gt;ただ、これはReadyNASが悪いのかTimeMachineのバグなのか微妙なところですが、エラーも頻発しました。特にバックアップで一度の変更が大きすぎると失敗率が上がるような印象で、最初のバックアップは段階的にバックアップを行う羽目になりましたし、また運用を始めてからも、ちょくちょうとバックアップが壊れて、また最初からやり直すこと事態になりました。&lt;/p&gt;&#10;&lt;p&gt;そんなこともあって、結局TimeMachineサーバー機能は使わなくなってしまいました（「&lt;a class="link" href="//hack-le.com/47700477-2/" &gt;結局TimeMachineはNASを使わず外付けハードディスクを利用するようになった&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h3 id="macとの相性"&gt;Macとの相性&#10;&lt;/h3&gt;&lt;p&gt;これはReadyNASの問題というわけではないのですが、Mac固有の問題が多くあります。そのあたりは「&lt;a class="link" href="//hack-le.com/46001270-2/" &gt;Macでファイル共有の悩み…文字コード（濁点）、sambaの遅さ、iSCSIの対応&lt;/a&gt;」でつらつら書いています。文字コードの問題、レスポンスがなんだか遅い（ファイラの問題もあるか…Finderならばそれなりに速いがForkLiftでは遅い）、iSCSIイニシエータが高い。ここらへんはWindowsなら問題ないのですが。うーむ。&lt;/p&gt;&#10;&lt;p&gt;なお、Mac&amp;lt;-&amp;gt;ReadyNAS間のファイル転送速度が遅いという問題に長らく悩まされてきましたが、これは解決しました（「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="全体的に"&gt;全体的に&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00CHABREE&amp;linkId=d8c6984adab8322cf0728f99516e780c" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;**概ね満足**しています。特にハードディスクの障害にすんなり対応できたのは嬉しかったですね。とはいえ、**Windowsならば本当に最高だと思うのですが、Macにとって最高のサーバーはやはりMacなのだろうなとも思います**。明日（日本時間的には明後日明朝）ようやくMacの発表がされるともっぱらの噂ですが、新しいMacをそろそろ購入しようかとも画策中です（Mac miniは期待できないのでしょうけれど…）。そうすると、現在使っているMac miniが浮くので、そちらをサーバーにするのがよいかもしれないな、などと考える今日この頃です。</description></item><item><title>Withings Activitéが止まったが、電池を入れ替えたらまた動き出した</title><link>https://hack-le.com/activitestop/</link><pubDate>Sun, 23 Oct 2016 01:22:06 +0900</pubDate><guid>https://hack-le.com/activitestop/</guid><description>&lt;p&gt;Withingsのスマートウォッチ、Activitéを愛用していますが、午後4時くらいから時計の針が止まりました。アプリもデバイスを見つけられない。試しに電池を取り替えてみると、再び動き出しました。電池切れではないと思います。恐らく内部的なトラブル。ここ一ヶ月でトラブルがちょいちょい起こっています。うーん。&lt;/p&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;特に時刻のずれなどが起きていないのに、唐突に針が止まりました。アプリでもデバイスを検索できません。また、電池は今月替えたばかりでした。というわけで、電池切れではないと思います。&lt;/p&gt;&#10;&lt;h2 id="対応"&gt;対応&#10;&lt;/h2&gt;&lt;p&gt;電池を交換しました。すると、再び動き始め、アプリでスマートフォンと同期することができました。止まっていた間のデータは取得できませんでした。&lt;/p&gt;&#10;&lt;h2 id="考えられる原因"&gt;考えられる原因&#10;&lt;/h2&gt;&lt;p&gt;なんらかの事由により、システムが停止していたのではないかと思います。バッテリーの入れ替え作業を行ったことにより、システムが再起動したのではないかと。&lt;/p&gt;&#10;&lt;p&gt;電池切れの可能性はまずないでしょう。電池は今月交換したばかりですし、またこれまでの傾向から、完全なバッテリー切れを起こす前に、針が遅れるなどの兆候が見られるはずだからです。今回はそれがなく、唐突に止まっていました。なので、システムエラーと考えます。&lt;/p&gt;&#10;&lt;p&gt;ここ一ヶ月で、電池切れに起因しない針のずれが、分針と時針でそれぞれ1度ずつありました。ちょっと不安になりますね。購入してからまだ一年半ほど。それなりのお値段がするものですし、もっと安定してほしいものですが……。とにかく故障だけは勘弁してほしいものです……。&lt;/p&gt;</description></item><item><title>pythonのPyYAMLでブロック形式で書き込み（dump出力）</title><link>https://hack-le.com/pyyamlfloat/</link><pubDate>Sat, 22 Oct 2016 19:00:19 +0900</pubDate><guid>https://hack-le.com/pyyamlfloat/</guid><description>&lt;p&gt;pythonのPyYAMLでYAMLを取り扱うとき、出力はyaml.dump()を使いますが、ブロックスタイルで出力したいのにフロートスタイルで出力されることもあります。ブロックスタイルに指定して出力するには、オプションとしてdefault_flow_style=Falseを加えます。&lt;/p&gt;&#10;&lt;h2 id="サンプル"&gt;サンプル&#10;&lt;/h2&gt;&lt;p&gt;Python 3.5 + PyYAMLにて、yaml.dump()でブロックスタイルで出力します。オプションに、default_flow_style=FalseとすればOKです。&lt;/p&gt;&#10;&lt;p&gt;サンプルを以下に。&lt;/p&gt;&#10;&lt;pre&gt;`$ python&#13; &gt;&gt;&gt; import yaml&#13; &gt;&gt;&gt; sample = {'apple': 100, 'ringo': 200}&#13; # フロートスタイル（デフォルト）&#13; &gt;&gt;&gt; print(yaml.dump(sample))&#13; {apple: 100, ringo: 200}&#13; &#13; # ブロックスタイル&#13; &gt;&gt;&gt; print(yaml.dump(sample, default_flow_style=False))&#13; apple: 100&#13; ringo: 200&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;参考：「&lt;a class="link" href="http://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank" rel="noopener"&#10; &gt;PyYAMLDocumentation – PyYAML&lt;/a&gt;」&lt;/p&gt;</description></item><item><title>Kindle マンガモデルの所感…Amazonが日本を意識したことに意義が</title><link>https://hack-le.com/kindlemanga/</link><pubDate>Wed, 19 Oct 2016 01:22:46 +0900</pubDate><guid>https://hack-le.com/kindlemanga/</guid><description>&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01FIG3SMC&amp;linkId=d08768fa325a04ca79014dcc8b311ddf" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;Kindleからマンガモデルと称したモデルが、日本限定で発売されるようです。といっても、特色としてはストレージ容量が32GBということだけのように思えます。私の考えは「[電子書籍で漫画を読むなら iPad を使えば間違いない](//hack-le.com/47424339-2/)」から変わりません（iPadはスクショがうるさいのがアレですが）。ただ、Kindleが漫画を意識したことには意義があるかもしれません。&#13;&#10;&lt;h2 id="kindleで漫画を読むうえでの問題点"&gt;Kindleで漫画を読むうえでの問題点&#10;&lt;/h2&gt;&lt;p&gt;従来のKindleデバイス（E-ink）で漫画を読む場合、下記の問題点があります。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;ストレージ容量が小さい（シリーズを通して保存することもままならない）&lt;/li&gt;&#10;&lt;li&gt;見開きにはサイズが小さい&lt;/li&gt;&#10;&lt;li&gt;白黒でカラーが楽しめない&lt;/li&gt;&#10;&lt;li&gt;レスポンスが悪い&lt;/li&gt;&#10;&lt;li&gt;（基本的に）Kindleストア前提&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以上の問題に対し、1と4について部分的に対応したのが今回と言えそうです。ただし、4のレスポンスについては本モデルだけではなく、他の端末でも同様の機能が提供されるそうです（参考「&lt;a class="link" href="http://japan.cnet.com/entertainment/35090698/" target="_blank" rel="noopener"&#10; &gt;Kindle Paperwhiteに日本限定のマンガモデル&amp;ndash;ストレージ8倍、ページめくりが高速化 - CNET Japan&lt;/a&gt;」）。つまり&lt;strong&gt;Kindle Paperwhiteのストレージ容量を多少増加させたモデル&lt;/strong&gt;と言えましょう。&lt;/p&gt;&#10;&lt;p&gt;ローカルストレージ32GBは、漫画を多く読む人間にとって必ずしも多くありません。しかし、Kindleデバイスの使い方（読みたい本だけ都度落とす）を考えると、それなりに対応可能な容量ではあるでしょう。ですから、&lt;strong&gt;1のストレージ容量の問題については、だいぶ解決したと考えてもよい&lt;/strong&gt;と思います。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;4のレスポンスについては、あくまでソフトの対応のようですが、あまり期待しないほうが良いのではないか&lt;/strong&gt;と思います。Kindleサイトには以下の文言があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;「快速ページターン」でマンガのページめくりのスピードが33%アップ。さらに「連続ページターン」機能は、画面を長押しすれば、ページが高速で切り替わるのでお気に入りのシーンまで簡単に飛ばし読みが可能。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;まだ不足と思います&lt;/strong&gt;。私はKindle Paperwhiteを持っていますが、33%どころか、数倍レベルになってほしい。というより、ページめくりのスピードが議論されている間はまだまだな気がします。連続ページターンは便利なシーンがあるかもしれません（でもサムネイルなどを利用して1秒で数十ページは見渡せないと真に実際的とは言い難い）。&lt;/p&gt;&#10;&lt;p&gt;そのほかにあげた問題については解決していません。2の見開き問題については、「見開きフルスクリーンビュー」という機能がサイトにて言及されていますが、&lt;strong&gt;ディスプレイの大きさが6インチである以上やはり見開きには厳しいということに変わりはない&lt;/strong&gt;でしょう。6インチは漫画には小さいことが多いですよ。と言いつつ5インチのスマホでもけっこう読んでいるので、対応できる漫画はそれなりに多いと思いますが。&lt;/p&gt;&#10;&lt;h2 id="結局買いなのか"&gt;結局買いなのか&#10;&lt;/h2&gt;&lt;p&gt;以上より、&lt;strong&gt;私のKindle マンガモデルの評価は従来のKindleとさほど変わりません&lt;/strong&gt;。ただし、少なすぎるローカルストレージという大きな問題については大部分解決したと思うので、&lt;strong&gt;Kindleストアでだけ大量に漫画を買う人は、その漫画の傾向次第では悪くないもの&lt;/strong&gt;と思います。&lt;/p&gt;&#10;&lt;p&gt;その漫画の傾向とは、上述した問題点が問題にならない漫画、すなわち &lt;strong&gt;「見開き表現が少なくて、カラーがない」漫画&lt;/strong&gt;です。まんがタウンなどの4コマ漫画を主に読んでいる人などはよいでしょう。一方、進撃の巨人やワンピースのような、迫力のあるシーンを見開きで多々表現するようなアクションシーンの多い漫画には微妙と思います。Kindleサイトでは弱虫ペダルが表示されていますけれど、私見ではこれもちょっと「うーん」ではないかと感じますね。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、&lt;strong&gt;昨今の漫画は明確にスマホを意識したつくりになっているものも多い&lt;/strong&gt;ので、最近の漫画であれば、読みやすい漫画も存外多いかとは思います。特にWebが母体の作品（ガンガンオンラインなど）は非常にスマホを意識した作品が多いですね。具体的には、一昔前の4コマ漫画といえば、1ページ8コマがお決まりでしたが、今は1ページ4コマであったりします。そういったものならばKindleでも読みやすいでしょう。&lt;/p&gt;&#10;&lt;p&gt;ただ、そういうのは&lt;strong&gt;カラーをふんだんに使っていたり&lt;/strong&gt;（印刷を前提にしない）、&lt;strong&gt;Webが母体なだけに専用アプリを出していることも多々&lt;/strong&gt;。本当に楽しもうと思ったら、アプリが必要（特にcomicoなんてそうですね）。この場合&lt;strong&gt;Kindle専用デバイスであることが足かせになります&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;以上をまとめて&lt;strong&gt;一言で言うと、Kindleストアで買ったかりあげクンを全巻通して読むのにうってつけ&lt;/strong&gt;という感じです。まぁ微妙ですね。E-inkの制限とKindleストア前提の制限がある限り、仕方ないかもしれません。E-inkにこだわりがない限り、&lt;strong&gt;漫画読むなら普通のタブレットを私はオススメします&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="日本を意識している"&gt;日本を意識している&#10;&lt;/h2&gt;&lt;p&gt;デバイスとしての評価は微妙でも、&lt;strong&gt;Amazonがこうして日本に特化したマンガモデルを出したということ自体に意義がある&lt;/strong&gt;ようにも思います。Kindleの仕様は、ジェフ・ベゾスは漫画を読まないのだなぁということがよくわかる仕様です。そのせいか、漫画大国日本においては不十分な点があまりに多かった。皮肉な見方をすれば、本モデルの登場は、そのことを逆説的に証明したとも考えられます。&lt;/p&gt;&#10;&lt;p&gt;Kindle Unlimitedでは人気タイトルの削除などというチョンボを開始早々かます羽目になったことからも、Amazonは日本の漫画事情をまだ甘くみていたように思います。私は利用していますが、現状タイトルの変動が大きい…これでは読み放題サービスとしての安心感がない。&lt;/p&gt;&#10;&lt;p&gt;しかし、こうして部分的とはいえ、ある程度日本に特化した、日本を意識したデバイスを出すようになったということは、Amazonの姿勢に変化が起きていると考えられるのではないでしょうか。そういう意味で本モデルの登場を歓迎したいと思います。楽観的かな。&lt;/p&gt;</description></item><item><title>iPhone 7は買わずにもうしばらくXperia Z3で粘ろうか</title><link>https://hack-le.com/iphone7xperiaz3/</link><pubDate>Fri, 14 Oct 2016 01:30:18 +0900</pubDate><guid>https://hack-le.com/iphone7xperiaz3/</guid><description>&lt;p&gt;早くとも来年だろうと思われていたSuicaに早速対応し、さらに防水防塵、256GBなど穴を埋めて、驚きは少ないながらよくまとめてきたiPhone 7、購入意欲があったのですが、最近iOS 10にアップデートしたiPad Air 2の、さらに大きくなった&lt;strong&gt;パシャアア！という耳を劈くスクショ音が私の目を覚ましました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;うーん、今のXperia Z3も、細かな不満はあるけれど、大きな不満があるでもなし、少なくともスクショ音は鳴らないし、もう少しこのまま粘るかどうか、悩み中です。&lt;/p&gt;&#10;&lt;h2 id="xperia-z3の細かな不満"&gt;Xperia Z3の細かな不満&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;iPhone、というよりiOSデバイスの良いところは、なんといっても安定感&lt;/strong&gt;だと思うのです。アプリのクラッシュもあまりないし、いきなりシステムが再起動を始める、なんていうのもまずない。ネットワーク機器などの外部機器との相性トラブルもあったことがない（iPhoneでテストしてない機器はまずないだろうというのもあるでしょうか）。あらゆるレスポンスが早く、タッチ精度も良い。&lt;/p&gt;&#10;&lt;p&gt;これらはカタログにはない、細かな点です。しかし、Xperia Z3を使っていて不満に思う点でもあります。特に通信関係の不満はそれなりにあって、一番困るのが、&lt;strong&gt;実質的にほとんど通信できないのに、微弱なWi-fiをいつまでも掴んで離さないこと&lt;/strong&gt;。これはiPhoneを使っていた時にはほとんどなかったのですが、Xperia Z3だとしょっちゅうあります。最初はiPhoneよりも電波の受信範囲が広いのかと思ったのですが、そういうことではなさそうです。&lt;/p&gt;&#10;&lt;p&gt;追記：Wi-fiの設定で「接続不良のとき無効にする」という設定項目があることを知りました。これを使えば問題ないのかな？&lt;/p&gt;&#10;&lt;p&gt;外部機器とのトラブルも多い。職場のネットワークでは、iPhoneではスムーズなのに、ちょくちょく通信が詰まるといいますか、遅いことがある。いくつかのBluetooth機器ではペアリングに不具合があることもありました。購入したNetgearのエクステンダーに至っては、なぜだか認証が通りません（まぁこれは、Netgearのエクステンダー自体あまりよい代物ではなかったので、一概にXperiaが悪いとも言えませんが）。&lt;/p&gt;&#10;&lt;p&gt;長く使っていると挙動が全体的に遅くなり（再起動すると早くなる…Windowsじゃあるまいし…）やけにレスポンスが悪いときもあるし、タッチ精度も違和感を感じることがある。&lt;/p&gt;&#10;&lt;p&gt;なんでしょうね。むしろこういうことが少ないiOSデバイスが、本当によく出来ているのだと言うべきなのだとも思います。自由さを犠牲にしたうえでの安定なのでしょう。でも、便利です。だから、Suica対応、おサイフケータイ対応に防水の悲願が達せられるのであれば、またiPhoneにしようかとにわかに購入意欲が沸いたのです。&lt;/p&gt;&#10;&lt;h2 id="xperia-z3に大きな不満はない"&gt;Xperia Z3に大きな不満はない&#10;&lt;/h2&gt;&lt;p&gt;しかし、先日iPad Air 2をiOS 10にして、スクリーンショット音にしたとき、そのあまりの音に驚き、げぇと思い、よくよく考えてみればiPhone 7にするとまたこのスクショ音と付きあわなければならないということを思い出しました。その音はあまり大きくて、つい「&lt;a class="link" href="//hack-le.com/ios10shutter/" &gt;iOS 10のシャッター音がいくらなんでも大きすぎてiPhone購入を躊躇うレベル&lt;/a&gt;」という記事を書いてしまったほど。少なくともXperiaはスクショ音がせずシャッター音も控えめである点においては、iPhoneよりも優れています。&lt;/p&gt;&#10;&lt;p&gt;さて、こうして一つ、明確にXperiaの（私にとっては大きな）優位性を目の当たりにすると、iPhone購入に傾いて心にストップがかかりました。確かにXperia Z3に対する細かな不満はあるものの、大きな不満はありません。全体的にはむしろ良いデバイスだと思っています。AndroidはiOSより自由度が高く、ウィジェットやPi Controlのような面白い使い方もできますしね。うーん、もうしばらく、この子と付き合っていくのも悪くないかな。&lt;/p&gt;&#10;&lt;p&gt;一端そう思い始めた途端、さしてiPhone 7を欲しいとも思わなくなってきたので、不思議なものです。&lt;/p&gt;&#10;&lt;h2 id="android最大のネックは音楽アプリ"&gt;Android最大のネックは音楽アプリ&#10;&lt;/h2&gt;&lt;p&gt;ただ一点、iPhoneにしたら劇的によくなるんだよなぁと心揺れる点があります。音楽です。&lt;/p&gt;&#10;&lt;p&gt;これは私の使い方、管理の仕方によるところが大きいとは思うのですが、Xperia、というよりAndroidを使い続けるうえで最大のネックが音楽アプリなのです。Androidにおける音楽アプリの問題については、昔「&lt;a class="link" href="//hack-le.com/43705796-2/" &gt;Androidのよいミュージックアプリが見つからない&lt;/a&gt;」という記事を書きました。いまだに良いものがなく、結局Apple Musicを使っています（「&lt;a class="link" href="//hack-le.com/46809984-2/" &gt;Android のミュージックプレイヤーは Apple Music を使うことにした&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;月額料金はかかるものの、Apple MusicのiCloud Music Libraryは良いものです。ライブラリをクラウドにアップできて、欲しい分だけデバイスに落とせる。しかもAndroid版はSDカードが使える。この点はたいへん素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;しかし……&lt;strong&gt;レスポンスが遅い&lt;/strong&gt;。遅すぎる。アーティストやアルバムを選択したら10秒待たされるなんてのもザラです。3G環境ならばともかく、Wi-fi環境はもちろん、曲をダウンロードしてオフラインでも同じくです。iOS版はそんなこともないのですが。というか、ライブラリにないストリーミングのほうがレスポンスが早い。どうしてそうなるのか……。&lt;/p&gt;&#10;&lt;p&gt;まぁAndroidにも対応しただけ有難く思うべきなのかもしれません。少なくとも、最初に記事を書いた時には、Xperiaとは別に以前使っていたiPhoneをiPod touchとして別途持ち歩くということをしていたので、それをしなくても良いというだけでも……。&lt;/p&gt;&#10;&lt;p&gt;まぁ、色々と思う所ありますが、もうしばらく様子見とします。&lt;/p&gt;</description></item><item><title>Withings Activitéの時刻がずれると思ったら針がずれていた</title><link>https://hack-le.com/activitecal/</link><pubDate>Tue, 11 Oct 2016 11:50:01 +0900</pubDate><guid>https://hack-le.com/activitecal/</guid><description>&lt;p&gt;私はWithingsの活動量計機能付腕時計、Activitéを使っています。ここしばらく、時計がずっと2,3分遅れていました。電池切れがあるとそういう症状になるので、もうバッテリー切れか？と電池を交換するも改善せず。調べてみると、分針がずれていました。そして数日後、今度は時針がずれていました。&lt;/p&gt;&#10;&lt;h2 id="症状時計が一定時間遅れるずれる"&gt;症状：時計が一定時間遅れる（ずれる）&#10;&lt;/h2&gt;&lt;p&gt;時計が常にずれるのはよろしくない症状です。以前にもありましたが、そのときは電池切れで、下記の記事に顛末を書きました。&lt;/p&gt;&#10;&lt;p&gt;/45797691-2/&lt;/p&gt;&#10;&lt;p&gt;今回もそうだろうかと、電池を交換しても改善せず。ソフトウェアを確認すると最新。うーんと悩んだ末、アプリより、「スマートウォッチの針を合わせる」を実行してみると、果たして、針がずれていました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="activete" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/2016/10/f7cb25a93e9dcedc6d814122ad583b13-253x300.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;アプリのメニューより「マイデバイス」からデバイスを選択すると、いろいろ設定できます。&lt;/p&gt;&#10;&lt;p&gt;なんの弾みでずれたのかはわかりませんが、このときはこれで解決することができました。&lt;/p&gt;&#10;&lt;h2 id="今度は時針がずれた"&gt;今度は時針がずれた&#10;&lt;/h2&gt;&lt;p&gt;さて、それから数日すると、今度は時針がおかしいことに気づきました。ちょうど分針をあわせるという作業をした後だったので、もしやと思い、同じように針を合わせてみると、やはり時針がずれている。うーん。&lt;/p&gt;&#10;&lt;p&gt;まぁ、すぐに直せたのですが、こう立て続けに針のずれがあると、ちょっと不安になりますね。これまでは全然そんなことがなかっただけに。まだ購入してから一年半くらいなのですが。ガジェットとはいえ、腕時計の色が濃い製品ですし、55,000円の買い物ですから、できるだけ長いおつきあいをしたいものです。&lt;/p&gt;&#10;&lt;p&gt;Apple Watchもだいぶ熟れてはきたようですし、Suicaが使えるようになると、これは少し欲しい気持ちもでてきますけれど、時計はやはりアナログが格好がいいですからねぇ。&lt;/p&gt;&#10;&lt;p&gt;それにしても、時針がずれているのは、なんだか非常に妙な感じでした。分針が15を指しているのに、時針が刻みの位置にぴたりといると、今何時なのかが一瞬ではわかりません。不思議なものです。&lt;/p&gt;</description></item><item><title>旧版：とにかくRaspberry Piにpython3 + numpy + matplotlibをインストールする(pyenv使用)</title><link>https://hack-le.com/rpipython3/</link><pubDate>Tue, 04 Oct 2016 15:22:36 +0900</pubDate><guid>https://hack-le.com/rpipython3/</guid><description>&lt;p&gt;表題どおり、Raspberry Piにpython3、numpy、matplotlibをインストールすることを目的とした記事です。OSはRaspbian（GUIなし）。バージョン管理するわけではないのですが、既存のpython2との兼ね合いもあり、pyenvを使います。&lt;/p&gt;&#10;&lt;p&gt;Raspbian Stretchだとエラー出たので改訂→「&lt;a class="link" href="https://hack-le.com/rpipython3-stretch/" &gt;とにかくRaspberry Piにpython3 + numpy + matplotlibをインストールする(pyenv使用) – 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;以下で確認しました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Raspberry Pi 2 or 3&lt;/li&gt;&#10;&lt;li&gt;Raspbian Wheezy or Jessie, GUI環境なし&lt;/li&gt;&#10;&lt;li&gt;pyenv + python 3.5.2 + numpy 1.11.2 + matplotlib 1.5.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;現在、標準はpython2です。これを使うやり方は「&lt;a class="link" href="https://hack-le.com/py2nummat/" &gt;とにかくRaspberry Piにpython2 + numpy + matplotlibをインストールする&lt;/a&gt;」を参照。&lt;/p&gt;&#10;&lt;p&gt;今回、python3の環境構築にpyenvを使いますが、筋悪でしょうかね？python2とpython3を共存して使うのには、とても楽だと思うのですが。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;手順は以下です。pyenvのインストールは「&lt;a class="link" href="https://github.com/yyuu/pyenv" target="_blank" rel="noopener"&#10; &gt;GitHub - yyuu/pyenv: Simple Python version management&lt;/a&gt;」を参考に。&lt;/p&gt;&#10;&lt;pre&gt;`# pythonのインストール&#13; sudo apt-get install -y libssl-dev libbz2-dev libreadline-dev libsqlite3-dev&#13; git clone https://github.com/yyuu/pyenv.git ~/.pyenv&#13; echo 'export PYENV_ROOT="$HOME/.pyenv"' &gt;&gt; ~/.bashrc&#13; echo 'export PATH="$PYENV_ROOT/bin:$PATH"' &gt;&gt; ~/.bashrc&#13; echo 'eval "$(pyenv init -)"' &gt;&gt; ~/.bashrc&#13; exec $SHELL&#13; pyenv install -l&#13; # 最新のバージョンを調べる. ここでは3.5.2とする&#13; pyenv install 3.5.2&#13; pyenv global 3.5.2&#13; pyenv rehash&#13; python --version&#13; # インストールしたバージョン（ここでは3.5.2） が表示されたらOK&#13; &#13; # numpyおよびmatplotlibをインストール&#13; sudo apt-get install -y pkg-config libjpeg8-dev libpng12-dev libfreetype6-dev&#13; pip install --upgrade pip&#13; pip install numpy psutil python-dateutil pytz tornado pyparsing six matplotlib&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;numpyとmatplotlibのインストールは非常に時間がかかります。以上でインストール完了です。&lt;/p&gt;&#10;&lt;h2 id="動作テスト"&gt;動作テスト&#10;&lt;/h2&gt;&lt;p&gt;インストールが正常に行われたか、以下のサンプルスクリプトを実行して確認します。グラフを表示して確認したいところですが、GUI環境なしなので、ファイルにグラフを出力して確認します。&lt;/p&gt;&#10;&lt;pre&gt;`# -*- coding: utf-8 -*-&#13; &#13; import numpy as np&#13; import matplotlib&#13; matplotlib.use("Agg")&#13; import matplotlib.pyplot as plt&#13; &#13; x = np.arange(-np.pi, np.pi, 0.01)&#13; y = np.sin(x)&#13; &#13; plt.plot(x,y)&#13; plt.savefig("test.png")&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;初回実行時はWarningが出ますが気にせず。下図のような、正弦波が一つ描かれたグラフtest.pngが生成されたらOKです。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_3833&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="test.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/2016/10/test-300x225.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;test.png[/caption]&lt;/p&gt;</description></item><item><title>iOS 10のシャッター音がいくらなんでも大きすぎてiPhone購入を躊躇うレベル</title><link>https://hack-le.com/ios10shutter/</link><pubDate>Mon, 03 Oct 2016 00:10:54 +0900</pubDate><guid>https://hack-le.com/ios10shutter/</guid><description>&lt;p&gt;（2016/12/18追記）iOS 10.2になり、シャッター音が小さくなりました。また、スクリーンショットは無音化させることができるようになりました。さすがにAppleもでかすぎると思ったようです。&lt;/p&gt;&#10;&lt;p&gt;先日、私のiPad Air 2をiOS 10にアップグレードしました。まぁ特に変わらないなと思いながら使っていたら、スクリーンショットの音が大きすぎて、夜自室で一人びっくりしました。ただでさえ大きかったシャッター音がさらに大きくなっていて、もはや騒音レベル。iPhone 7を購入する予定でしたが、それを躊躇うレベルで大きすぎます。本当に防犯の役割を果たしているかも非常に疑わしい昨今、さすがにそろそろ見直すべきではないでしょうか。&lt;/p&gt;&#10;&lt;h2 id="ものには限度があるだろう"&gt;ものには限度があるだろう&#10;&lt;/h2&gt;&lt;p&gt;ちょっと、iOS 10にしたことを後悔しています。それくらいシャッター音が大きい。大きすぎる。ただでさえ大きかったのに、さらに大きくなっている。&lt;/p&gt;&#10;&lt;p&gt;iPadは基本的に家で使っているので、周囲の人を気にする必要はありませんが、それでも私自身があまりに音が大きすぎてびっくりしています。耳障りで不快な音です。私はよくスクリーンショットをとりますから、これはちょっと本当にどうにかしていただきたい。&lt;/p&gt;&#10;&lt;p&gt;言うまでもなく、シャッター音は防犯になりません。（怪しげな）無音アプリの流通は周知の事実です。犯罪者にはなんの抑止力にもなりません。通信業者の「防犯対策してますよ」というポーズ以上の意味はありません。バカを見るのは一般ユーザーだけです。&lt;/p&gt;&#10;&lt;p&gt;これまでも十分に大きかったのに、何故より大きくしたのか、理解に苦しみます。「&lt;a class="link" href="https://www.buzzfeed.com/daichi/why-japanese-smartphone?utm_term=.ej89xapP0#.yue3dNyaq" target="_blank" rel="noopener"&#10; &gt;マナーモードでもシャッター音が鳴る日本のiPhone その起源はあの芸能人 - BuzzFeed News&lt;/a&gt;」の記事によると、Appleは日本の通信業者の基準（法律ではなく、業者の自主規制の模様）に従っているだけとありますが、それでは大きくしたのは基準が変わったからなのでしょうか。本当に？&lt;/p&gt;&#10;&lt;p&gt;だいたい、日本の企業であるSonyのXperia Z3は、少なくともこんな耳を劈くようなレベルの音は鳴らしませんし、スクリーンショットは無音でとれます。これくらいであれば、私もとやかく言う気はありません。&lt;/p&gt;&#10;&lt;p&gt;しかし、iOS 10のこのシャッター音は大きい、大きすぎる。自室でスクリーンショットを取った時、その音の大きさに自分が驚いてしまう。これは異常だと思います。とても阿呆らしい。建前上必要だとしても、ものには限度があるでしょう。&lt;/p&gt;&#10;&lt;p&gt;iPhone 7では、バグを利用して無音にする手法も公開されていますが（残念ながらiPadには適用できませんでした）、面倒ですし、なにより件の手法では普通に音楽も楽しめない。私はスクリーンショットは頻繁に使うし、飯の写真を日記代わりにとっているので、この件は非常につらい。毎回食卓でこんな音が鳴ったら、苛々してしまいそうです。iPhone 7、購入予定でしたが、初めて躊躇いを感じました。&lt;/p&gt;&#10;&lt;p&gt;…ちょっと話がずれますが、この話は外食時の撮影行為そのものに対する苦言に結びつけられることもありますけれど、それはちょっと議論の次元が違います。この自主規制は、盗撮という明確な「犯罪」を防止することを目的としたものです。一方で、外食時の撮影行為そのものは一般的な犯罪ではなく、各店のローカルルールの問題であり、マナーの問題であり、あるいは気にいる・気に入らないという主観の問題です。通信事業者も別に外食時の撮影行為を公式に規制しようとしているわけではありません。ですから、外食時の撮影は、マナーの問題として、この盗撮防止のシャッター音問題とは別に議論すべきことだと思います。&lt;/p&gt;&#10;&lt;p&gt;……閑話休題。Xperia Z3、決して悪いデバイスではないのですよね。iPhone 7のほうが確実に普段使いには快適だろうとも思うのですけれど、うーん、なんだかなぁ。小さなことではありますが、こういう小さな苛々は、排出されず蓄積されていくものです。うーん、iPhone 7への乗り換えで、一つ、悩ましいことができてしまいました。Xperia Z3に、まだまだ頑張ってもらおうか……。うーん……。&lt;/p&gt;</description></item><item><title>Chromebookの難しい使いドコロ</title><link>https://hack-le.com/chromebookuse/</link><pubDate>Sun, 02 Oct 2016 02:51:39 +0900</pubDate><guid>https://hack-le.com/chromebookuse/</guid><description>&lt;p&gt;久しぶりにChromebookを動かしています。この記事はまさにChromebookで書いているものです。たまに使うと、それなりに使いやすく、なかなかよいなとも思うのですが、では普段使っているかというと、あまり使っていません。そもそも開発作業もする私にChromebookはメインノートとしては力不足であり、またセカンドノートも必要ない人間なのだということがわかりました。&lt;/p&gt;&#10;&lt;h2 id="webは重い"&gt;Webは重い&#10;&lt;/h2&gt;&lt;p&gt;税込み2万円弱で購入したノートパソコンであることを考えれば、十分過ぎるほどのパフォーマンスであるとは思います。値段を考えれば。&lt;/p&gt;&#10;&lt;p&gt;そう、値段を考えれば、です。当たり前かもしれませんが、どうしてもそういう評価になります。サイト一つ開くのにも、やけに時間がかかることが多い（最近またそのようなサイトが増えたような気がします…）。複数タブで一気に開こうものなら、固まりかねない。Webブラウジングはもっとも基本的な操作、用途でありながら、もっともリソースを食うものでもある。&lt;/p&gt;&#10;&lt;p&gt;私の使っているChromebookは、HPのChromebook G3というもので、これのCPUはCeleronのN2830かN2840と、あまり良いものではありません。現在日本で手に入れることのできるChromebookのスペックはどれも似たり寄ったりなものです。なので、まぁ今日本でChromebookを使えば、だいたいどれもこれと同じようなパフォーマンスではないのかと予想しますが、これは私の求める水準にはちょっと届いていない。&lt;/p&gt;&#10;&lt;p&gt;しかし、前述した通り、このマシンは2万円です。費用を考えれば、私の評価は厳しすぎるのでしょう。実際、姉に触らせてみたところ、パフォーマンスは良好であると判断していました。また、私の父母はさらに遅いWindowsのマシンを使っていますから、一般的には、決して悪いものではなかろうとも思います。&lt;/p&gt;&#10;&lt;p&gt;セカンドノートとしては使えるかもしれませんが、これまでの生活から、私はセカンドノートがなくても良い人間であることがわかりました（その点については私も多数派に含まれるようです）。それで、私が持っていても腐らせるだけなので、姉に貸してあげることにしました。もし使うようであれば、そのままあげるつもりです。使わないということであれば、売り払うでしょう。&lt;/p&gt;&#10;&lt;h2 id="微妙な立ち位置"&gt;微妙な立ち位置&#10;&lt;/h2&gt;&lt;p&gt;現在の日本において、&lt;strong&gt;Chromebookは微妙な立ち位置&lt;/strong&gt;だと思います。廉価な割り切って使えるデバイスですが、そういう割り切り方をできる人は、ある程度知識を持つ人です。ある程度知識を持っている人は、だいたい好きな人です。好きならば、それなりに金をかけることも厭いませんから、それなりにお金を出して高性能なマシンを持っているでしょう。となると、廉価とはいえパフォーマンスのよくないマシンを使う道理はない。できることも限られるし、Emacsキーバインドも使えないし…。&lt;/p&gt;&#10;&lt;p&gt;一方で、PCは手段以上の何者でもなく、できるだけ金をかけたくないと考える人にとっては、Chromebookはなかなか受け入れがたいように思えます。たとえば私の父母のPCを利用する用途は、私からすればChromebookで十分なものですが、しかしWindowsとは当然ソフトが違いますから、ハードルは高いでしょう。&lt;/p&gt;&#10;&lt;p&gt;わかる人からすれば、UIが異なるだけで、基本的な機能は変わらないのに、と思うところですが、そのUIが異なるだけで、大混乱を起こす人は多くいます。そういう人は、本当のところをわからずに使っているのですが、残念なことにそのほうが多数派であるというのが現実でしょう。さらにオフィスソフトなどは、ファイルのフォーマットの違いについても理解が必要です。&lt;/p&gt;&#10;&lt;p&gt;ある程度PCのことはわかっているが、PCにお金はかけたくない。そういう人にとって、Chromebookはうってつけであると思いますが、かなり少数派のように思えます。自分の周囲の人間で考えると、うまくハマりそうな友人・知人の顔もいくらか思い浮かびますが、そう多くはありません。そんなようなことを考えていると、Chromebookは微妙な立ち位置であるなぁと思います。&lt;/p&gt;</description></item><item><title>会社のメールサーバーをGoogle AppsのGmail独自ドメイン運用に乗り換え</title><link>https://hack-le.com/gmail/</link><pubDate>Mon, 26 Sep 2016 12:14:57 +0900</pubDate><guid>https://hack-le.com/gmail/</guid><description>&lt;p&gt;私の勤め先は社員数人の零細企業です。最近メールサーバーをお名前.comのレンタルサーバーからGmailに乗り換えました。メールサーバーを止めた（というよりDNS設定後にGmailの設定が完了するまでの）時間は20分弱でした。会社のアドレスでGmailが使えるというのは、良いものですね。Googleの各種サービスも利用できますし。&lt;/p&gt;&#10;&lt;h2 id="乗り換えの動機"&gt;乗り換えの動機&#10;&lt;/h2&gt;&lt;p&gt;私は現在、社員数人（にも関わらず誰が社員なのかイマイチ判然としない）の零細企業に勤めています。お名前.comのレンタルサーバープランを使ってメールを利用していたようですが、諸事情でプランを切り替える必要が出てきました。&lt;/p&gt;&#10;&lt;p&gt;契約していたプランは非常に古く、サービス内容に比して値段だけがやけに高いうえ、上位プランには直接乗り換えられない（=新規契約が必要→移行でしばらくメールサーバーが止まる）という最低な状況でした。どうせ停止が回避できないのであれば、信頼性があるGoogle Apps for Workはどうかと議論し、最近切り替えをしました。&lt;/p&gt;&#10;&lt;h2 id="その他の候補"&gt;その他の候補&#10;&lt;/h2&gt;&lt;p&gt;その他にも候補はありました。お名前.comの上位プランや、Xサーバー、さくらのメールボックス、ConoHaのアプリケーション・サーバーなどです。&lt;/p&gt;&#10;&lt;p&gt;お名前.com、Xサーバーについては、レンタルサーバーでWebサイトと紐付けというのがネックでした。今回、メールサーバーとWebサーバーを紐付けした契約内容であることが、立ち回りを制限していたので、それはもう避けたい。&lt;/p&gt;&#10;&lt;p&gt;同じサービスを利用すると色々便利で安く済みますが、いざ何かがあって、逃げ出そうとした時、途端に困る。それが囲い込みの狙いであり、それ故の安さなのですから、致し方ない面はありますけれど、それにしてもいざという時の面倒さを考えると、多少維持費が安いくらいでは割に合わないと思う今日この頃です。トラブルが起きて、サポートを受ける時、ローコストの代償がなにかを痛感することになります。&lt;/p&gt;&#10;&lt;p&gt;さくらのメールボックスは、あまり評判がよろしくない。迷惑メール業者の温床という側面もあるようで、サーバーのブロックリストに登録されていることもあるとか、なんとか（参考「&lt;a class="link" href="http://www.love2labo.com/meiwakumail#i-5" target="_blank" rel="noopener"&#10; &gt;[ブログ運営]独自ドメインからのメールがGmailで迷惑メールにされるときの対処法 | Love2Labo.com&lt;/a&gt;」）。また、なにげにNSをさくらにしなければならないのもつらい。さらにDKIMの利用にはドメイン移管まで必要な模様。うーん、却下。年間1,000円という安さなので、個人利用ならばよいかもしれません（だから業者の温床に、という側面も？）。&lt;/p&gt;&#10;&lt;p&gt;ConoHaのアプリケーション・サーバーは、メーリングリストがないのがつらい。また、個人的に最近利用しているのですけれど、Gmailに送ると迷惑メール扱いされます（現在対策を調べ中…）。採用事例もあまり見当たらない。うーん、却下。&lt;/p&gt;&#10;&lt;p&gt;と、色々考えていくと、もうGoogleに頼ってしまうのが、一番楽なんじゃないのかな、という結論です。500円/月・ユーザーはレンタルサーバーなどに比べると多少割高ですが、信頼性を考えれば、それだけの価値があるサービスだと思います。Googleドライブなどもついてきますしね。&lt;/p&gt;&#10;&lt;h2 id="空白時間は20分弱で済んだ"&gt;空白時間は20分弱で済んだ&#10;&lt;/h2&gt;&lt;p&gt;ユーザーが10人以下であれば、移行は無償期間中に完了できます。Google Appsは30日の無償期間があり、その間は10人以下のユーザーを登録できるからです。&lt;/p&gt;&#10;&lt;p&gt;なので、まずは登録だけ済ませて、管理画面などを見て回り、作業は後日にぼちぼちと一人でやりました。作業は、オペレーターに接続してサポートをお願いできます。しかし、なるべく影響が少ないように、変更作業を夜中にしたこと、電話が億劫だったこと、段階的に乗り替えをしたかったことなどの理由で、特にサポートはお願いしませんでした（でも、電話してGoogleのオペレーターと一緒にやるほうがよいと思います）。&lt;/p&gt;&#10;&lt;p&gt;特に煩雑な手順などはなく、簡単なDNSのレコード設定をするだけで、設定は終わりました。DNSのレコード設定を変更してから、Googleで設定が完了するまでは空白の時間となりますが、結局20分弱で済みました。&lt;/p&gt;&#10;&lt;h2 id="その後の使用感"&gt;その後の使用感&#10;&lt;/h2&gt;&lt;p&gt;設定完了後は、とても快適です。多少トラブルがあるかとも思いましたが、（少なくとも私は）まったくありませんでした。Gmailが利用できるというのは、たいへん便利ですね。IMAPを使えるのも嬉しい。Googleの二段階認証も使えます。以前より、セキュリティも多少よくなったのではないかな（とはいえ、まだ二段階認証は私しか使っていません…今の時代必須なので、これは会社で徹底したいのですが、まぁもうしばらく落ち着くまでは…）。遅延があるという心配もありましたが、それもない。恐らく、Gmailで遅延があるのは転送などを利用した時ではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;Gmailは情報も多いので、あまりサポートもいらない……だろうと思ったのですが、やはり本当にPCが不得手な人にとっては鬼門のようで、年配の人にはいろいろいじったがよくわからないと言われました。うーん、でも、Gmailが特別難しいということもない（むしろ簡単な部類でしょう）ので、それに関しては、もう仕方がない。&lt;/p&gt;&#10;&lt;p&gt;Googleのサービスも使えるし、なかなかよいものですね。&lt;/p&gt;</description></item><item><title>macOS Sierra来たけれどScanSnapの問題があるのでアップグレードは当面おあずけ</title><link>https://hack-le.com/sierra-scansnap/</link><pubDate>Wed, 21 Sep 2016 06:53:55 +0900</pubDate><guid>https://hack-le.com/sierra-scansnap/</guid><description>&lt;p&gt;macOS Sierraがきました。しかし、私が使っているScanSnap関係で、重大なバグがあるようなので、当面はおあずけです（「&lt;a class="link" href="https://www.pfu.fujitsu.com/imaging/news/news20160914.html" target="_blank" rel="noopener"&#10; &gt;イメージスキャナ | ScanSnapのmacOS Sierraへの対応状況について | PFU&lt;/a&gt;」）。まぁそんな、楽しみにしていたわけではないので、よいのですが。&lt;/p&gt;&#10;&lt;p&gt;追記：当初ScanSnapの話ばかりだったので、PFUの問題かとも思いましたが、どうもOSの問題のようです。未だ完全解決ではないものの、macOS 10.12.3ではそこそこ解決に向かっている模様（「&lt;a class="link" href="http://news.mynavi.jp/news/2017/01/24/076/" target="_blank" rel="noopener"&#10; &gt;Apple「macOS Sierra 10.12.3」リリース、PDF書類の問題などを修正 | マイナビニュース&lt;/a&gt;」）。しかしこれじゃSierraにアップデートする気にはなれないですねー……。&lt;/p&gt;&#10;&lt;h2 id="バックアップを取れというが"&gt;バックアップを取れというが…&#10;&lt;/h2&gt;&lt;p&gt;PFUのページにある通り、本当に重大な問題です。ページには、以下のような記述があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;過去にScanSnapで作成したPDFファイルをmacOS Sierraの「プレビュー」にて編集、または検索可能なPDFにして保存した場合、一部のページが白紙ページとなって保存される場合があります。 また、白黒ページはカラーのページとして認識されてしまいファイルサイズが大きくなります。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;検索可能なPDFにして保存した場合、というのがちょっとよくわかりませんが、いずれにせよ、こんなことを書かれていてはおちおち閲覧も怖くてできません。対応として、バックアップを推奨していますが…。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;※なお、macOS Sierraにアップグレードされる際は、これまでにScanSnapで作成したPDFファイルのバックアップを必ず事前にお取りください。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;うーん、正直どれがそうだったかなんて、いちいち覚えていませんし、またそもそもバグが生じたときにすぐに気付けるのか、どうか。一部のページが白紙ページになるという症状ですから、気づかないこともありそうです。&lt;/p&gt;&#10;&lt;p&gt;特に急がない人にとっては、この問題が解決されるまではアップグレードはおあずけというのが現実的に思えます。ScanSnapも使えませんしねぇ。最近はもうあまり自炊をしなくなったので、私の使用頻度はあまり高くありませんが。&lt;/p&gt;&#10;&lt;h2 id="何故こんなバグが"&gt;何故こんなバグが？&#10;&lt;/h2&gt;&lt;p&gt;それにしても、よくわからないバグです。PFUからのメール通知を見たときは驚きました。これから作成するPDFファイルのみならず、過去に作成したPDFファイルにまで影響を及ぼす可能性があるとは……。&lt;/p&gt;&#10;&lt;p&gt;PFUは「macOS Sierraに起因した事象」といいます。やや含みを感じなくもない微妙な言い回しです。海外のサイトを回ると、英語では“to the PDF engine embedded in macOS,”と表現しているようです。こちらのほうが理解しやすい。&lt;/p&gt;&#10;&lt;p&gt;追記：その後、他のサードパーティアプリでも、PDF関係で様々な不具合が生じていることを知りました。macOSの問題であるようです。噂では、iOSとmacOSのフレームワークを共通化させようとしているせいだろう、とのこと（参考「&lt;a class="link" href="http://applech2.com/archives/20170104-how-to-check-macos-v-10-12-2-preview-app-issue.html" target="_blank" rel="noopener"&#10; &gt;macOS Sierra 10.12.2のプレビューアプリによりScanSnapなどのドキュメントスキャナで処理したOCRレイヤーが破壊される条件と対処法。 | AAPL Ch.&lt;/a&gt;」）。なんだかな。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00T2B5L52&amp;linkId=8b82c19fde09318254ec6e934e53ae52" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Raspberry PiでOS新規インストール後にやっていること</title><link>https://hack-le.com/rpijessieliteinit/</link><pubDate>Mon, 19 Sep 2016 01:02:35 +0900</pubDate><guid>https://hack-le.com/rpijessieliteinit/</guid><description>&lt;p&gt;個人的なメモです。Raspberry Pi 2あるいは3に、Rasphian Jessie Liteをインストールした後、初期設定として行うことをメモします。&lt;/p&gt;&#10;&lt;h2 id="初期設定ソフトウェアの導入"&gt;初期設定、ソフトウェアの導入&#10;&lt;/h2&gt;&lt;p&gt;最初の設定と、聖書に導入するソフトウェアについて記述します。&lt;/p&gt;&#10;&lt;h3 id="raspi-configで初期設定"&gt;raspi-configで初期設定&#10;&lt;/h3&gt;&lt;p&gt;sudo raspi-configを実行し、領域の拡張、言語の設定、I2C、SPIの有効化をします。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 Expand Filesystem&lt;/li&gt;&#10;&lt;li&gt;[LC] 5 -&amp;gt; I1 -&amp;gt; ja-jp.UTF-8 UTF-8&lt;/li&gt;&#10;&lt;li&gt;[TZ] 5 -&amp;gt; I2 -&amp;gt; Asia -&amp;gt; Tokyo&lt;/li&gt;&#10;&lt;li&gt;[Wi-fi] 5 -&amp;gt; I4 -&amp;gt; JP Japan&lt;/li&gt;&#10;&lt;li&gt;[SPI] 9 -&amp;gt; A6 -&amp;gt; Yes&lt;/li&gt;&#10;&lt;li&gt;[I2c] 9 -&amp;gt; A7 -&amp;gt; Yes&lt;/li&gt;&#10;&lt;li&gt;[Update] 9 -&amp;gt; A0 -&amp;gt; Yes&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;終了後、rebootをかけます。&lt;/p&gt;&#10;&lt;h3 id="ソフトウェアのアップデート"&gt;ソフトウェアのアップデート&#10;&lt;/h3&gt;&lt;p&gt;最初のapt-get updateおよびupgrade、またrpi-updateでカーネルのアップデートをします。rpi-updateはliteだと入っていないみたいなので、wgetで落とします（参考：「&lt;a class="link" href="http://qiita.com/typo-kun/items/ec36ce2311c1e08d88f3" target="_blank" rel="noopener"&#10; &gt;古いバージョンのRasbianにrpi-updateが入ってなかった時 - Qiita&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;pre&gt;`sudo apt-get update &amp;&amp; sudo apt-get -y upgrade&#13; wget https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update&#13; sudo mv rpi-update /usr/bin/&#13; sudo chown root.root /usr/bin/rpi-update&#13; sudo chmod +x /usr/bin/rpi-update&#13; sudo rpi-update&#13; sudo reboot&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;コーヒーでも飲みながら、のんびり実行します。&lt;/p&gt;&#10;&lt;h3 id="最初にインストールするソフトウェア群"&gt;最初にインストールするソフトウェア群&#10;&lt;/h3&gt;&lt;p&gt;個人的に、最初に入れるソフトウェアです。&lt;/p&gt;&#10;&lt;pre&gt;`# 基本的なソフト、エディタ、Python、I2C、SPI周り(多分に趣味含む) &#13; sudo apt-get -y install byobu&#13; sudo apt-get -y install emacs tig rsync ruby gnuplot octave python-dev python-pip python-spidev i2c-tools python-smbus&#13; # サウンドまわり&#13; sudo apt-get -y install alsa-utils sox libsox-fmt-all&#13; sudo apt-get -y install python-pyaudio&#13; # pythonまわり&#13; sudo pip install --upgrade pip&#13; # 数値解析周り&#13; sudo pip install numpy psutil python-dateutil pytz tornado pyparsing six&#13; sudo pip --no-cache-dir install matplotlib &#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;コーヒーをおかわりします。&lt;/p&gt;&#10;&lt;h2 id="ネットワークの設定"&gt;ネットワークの設定&#10;&lt;/h2&gt;&lt;p&gt;IPアドレスやSSHなどの設定を行います。&lt;/p&gt;&#10;&lt;h3 id="ipアドレスの固定"&gt;IPアドレスの固定&#10;&lt;/h3&gt;&lt;p&gt;IPアドレスを固定します。Raspbian Jessieになって、従来の/etc/network/interfacesの編集から、/etc/dhcpcd.confの編集に変わりました（参考：&lt;a class="link" href="http://qiita.com/MarieKawasuji/items/b088ffb252a92eee8f5d" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi に固定IPアドレスを割り当てる方法（Raspbian Jessie） - Qiita&lt;/a&gt;）。参考記事より、/etc/dhcpcd.confに以下を追記します。&lt;/p&gt;&#10;&lt;pre&gt;`interface eth0&#13; static ip_address=192.168.0.30/24&#13; static routers=192.168.0.1&#13; static domain_name_servers=192.168.0.1&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;この場合、IPアドレスが192.168.0.30に固定されます。ルータは192.168.0.1で、DNSサーバーを兼ねます。設定後はrebootまたはサービスの再起動。&lt;/p&gt;&#10;&lt;h3 id="sshの設定"&gt;SSHの設定&#10;&lt;/h3&gt;&lt;p&gt;SSHの設定を行います。具体的には、鍵の生成、Port番号の変更、rootログインの禁止、鍵認証のみ(パスワード認証の禁止)です。&lt;/p&gt;&#10;&lt;pre&gt;`ssh-keygen&#13; # パスフレーズは設定しないのでenter連発&#13; # パスフレーズ設定したい人はする&#13; &#13; # ログインするクライアントのPCの公開鍵を登録する&#13; # クライアントPCの鍵を仮に id_rsa_client.pub とする&#13; cd ~/.ssh&#13; cat id_rsa_client.pub &gt;&gt; authorized_keys&#13; &#13; # クライアントから鍵認証でログインできるか確認する&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;鍵認証については「&lt;a class="link" href="https://hack-le.com/20462465-2/" &gt;SSHで鍵認証を用いて、パスワードなしでログインする方法&lt;/a&gt;」の記事を参照。&lt;/p&gt;&#10;&lt;p&gt;次に、/etc/ssh/sshd_configの設定変更。ポート番号の変更、rootログインの禁止、鍵認証のみ（パスワード認証の禁止）。ここで、鍵認証からのログインを忘れると、sshでログインできなくなってしまうので注意（そうなったらシリアル通信で設定変更するか、最初からやり直す）。&lt;/p&gt;&#10;&lt;pre&gt;`# 任意のPort番号に。ここでは仮に16816とする&#13; sudo sed -i 's/Port 22/Port 16816/' /etc/ssh/sshd_config&#13; sudo sed -i 's/PermitRootLogin without-password/PermitRootLogin no/' /etc/ssh/sshd_config&#13; sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;終わったら念のために/etc/ssh/sshd_configで各項目がちゃんと変更されているか確認。確認したらreboot。reboot後、指定のPort番号でログインできるかを確認。&lt;/p&gt;&#10;&lt;h2 id="種々の設定"&gt;種々の設定&#10;&lt;/h2&gt;&lt;p&gt;その他の個人的にしている設定。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;/etc/fstabの設定（外付けハードディスクの利用など）マウント手順は「&lt;a class="link" href="//hack-le.com/45232735-2/" &gt;Ubuntu 15.04 で2TB超え(3TB)のHDをマウントする(CUI)&lt;/a&gt;」&lt;/li&gt;&#10;&lt;li&gt;crontabの設定&lt;/li&gt;&#10;&lt;li&gt;バックアップ用スクリプトの設定&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;以上。&lt;/p&gt;</description></item><item><title>ジャンパワイヤ破損で電圧降下</title><link>https://hack-le.com/wire/</link><pubDate>Tue, 13 Sep 2016 20:56:53 +0900</pubDate><guid>https://hack-le.com/wire/</guid><description>&lt;p&gt;また、しょうもないことで時間を無駄にしてしまいました。最近必要があって3.3Vから5Vへのロジックレベル変換モジュールを購入したのですが、なんぼやっても3.3Vから昇圧せず、なんだろうなーと思っていたら、ジャンパワイヤが破損。下から調べろ、ですね。。。しかし、0ならともかく微妙に電圧降下…嫌な壊れ方するもんですね。&lt;/p&gt;&#10;&lt;h2 id="ロジックレベルの変換"&gt;ロジックレベルの変換&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Piを使っていて、信号レベルを3.3Vから5Vに引き上げる必要がありました。FETを一つ噛ませれば良いらしいですが、スイッチサイエンスから便利なモジュールが手頃な値段で売っていたので（「&lt;a class="link" href="https://www.switch-science.com/catalog/1523/" target="_blank" rel="noopener"&#10; &gt;ロジックレベル双方向変換モジュール - スイッチサイエンス&lt;/a&gt;」）そいつを利用することにしました。Raspberry Piの3.3V出力と5V出力を入力にすることで、3.3Vの信号を5Vに変換できます。&lt;/p&gt;&#10;&lt;p&gt;ところが、いざ使ってみると、なんぼやっても3.3Vのまま。配線を見なおしても問題ないし…4chありますが、chを変えても同じだからモジュールが原因とは考えづらいし…。&lt;/p&gt;&#10;&lt;p&gt;そもそも電圧は出ているのだろうか、とジャンパワイヤにプローブ引っ掛けてオシロで見ると、3Vちょっとしか出ていない。しかも波形が汚い。波打っている。おおう、まさかRaspberry Piが？と一瞬思いましたが、んな阿呆なとワイヤを取り替えて見ると、果たして、5V出力。ワイヤだったか……。&lt;/p&gt;&#10;&lt;h2 id="0ならすぐに気づいたと思うのだけれど"&gt;0ならすぐに気づいたと思うのだけれど&#10;&lt;/h2&gt;&lt;p&gt;文字で書くとすぐですが、実際にはわかるまでにけっこう時間をくいました。結果だけ見るとすぐにわかりそうなものですけれど、なまじっか電圧が出ていないわけではなかったので、ケーブルよりモジュールのほうに目が行ってしまった感があります。0Vなら、さすがにすぐに電圧出てる？と気づいたと思うのですが。&lt;/p&gt;&#10;&lt;p&gt;いや、電圧自体は見ていたのですが、その時手元にあった測定器がDS203。「&lt;a class="link" href="https://www.seeedstudio.com/DSO-Quad-4-Channel-Digital-Storage-Oscilloscope-p-736.html" target="_blank" rel="noopener"&#10; &gt;DSO Quad - 4 Channel Digital Storage Oscilloscope&lt;/a&gt;」ですが、なかなか怪しげな代物で、買ったばかりで使い慣れていないためにキャリブレーションにもちょっと自信がなく、見極められなかった。。。反省です。&lt;/p&gt;&#10;&lt;p&gt;それにしても、写真のとおりちょこっと破損しているのですが、こんな微妙な壊れ方するもんですね。勉強になりました。&lt;/p&gt;</description></item><item><title>このiPhone 7は欲しい…FeliCa対応、256GB、防水、円高…Macはなし</title><link>https://hack-le.com/iphone7/</link><pubDate>Thu, 08 Sep 2016 12:32:55 +0900</pubDate><guid>https://hack-le.com/iphone7/</guid><description>&lt;p&gt;Appleの発表会がありましたね。正直あまり期待していなかったのですが、いいなと思ってしまいました、iPhone 7。FeliCa対応は来年だと思っていましたよ。びっくりです。これが一番大きい。Apple Watchも価値がでてきます。そしてついに防水対応し、256GBの大容量。穴がなくなった感じですね。円高で値段も熟れている。ちょっと、購入を考えています。そしてMacは残念ながら無し、まぁSierra待ちでしょうか。&lt;/p&gt;&#10;&lt;h2 id="iphone雑感"&gt;iPhone雑感&#10;&lt;/h2&gt;&lt;p&gt;各メディアから様々なまとめ記事が出ていますが、TechCrunchの「&lt;a class="link" href="http://jp.techcrunch.com/2016/09/08/20160907apple-officially-unveils-the-iphone-7-and-iphone-7-plus/" target="_blank" rel="noopener"&#10; &gt;Felica対応にデュアルカメラ、iPhone 7の全貌が明らかに | TechCrunch Japan&lt;/a&gt;」がわかりやすくコンパクトであると思いました。以下、私の雑感です。&lt;/p&gt;&#10;&lt;h3 id="apple-payのfelica対応思ったより早い"&gt;Apple PayのFeliCa対応！思ったより早い&#10;&lt;/h3&gt;&lt;p&gt;ついに正式発表。&lt;strong&gt;Apple PayのFeliCa対応。それも、なんと本当に今年中にSuica対応&lt;/strong&gt;するとか。&lt;/p&gt;&#10;&lt;p&gt;必要ない人にはなにが良いのかわからないのがおサイフケータイですが、必要な人には素晴らしい朗報です。おサイフケータイの良さは以前「&lt;a class="link" href="//hack-le.com/osaifu/" &gt;おサイフケータイをオススメできる人…財布嫌いなガジェット好きにうってつけ&lt;/a&gt;」で語りました。&lt;/p&gt;&#10;&lt;p&gt;AppleのFeliCaおよびSuica対応は、詳しい人ほど懐疑的な人が多かった印象です。技術的な障壁はもちろん、Appleがわざわざ日本に合わせるか？という至極もっともな（そして最大の）疑問がありました。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、関係者の努力が窺える記事が多数出る中、これは来年くらいには期待できそうだな、というのが私の印象でしたが、まさか本当に今年とはなぁ。今年iPhoneにSuica来るぜといつものように飛ばした日経も、直前には弱気になって、Suicaは対応は来年かも、にトーンダウンしていましたが。それでも結果的に日経が今回は当てた感じか。うーん、これはなかなか、サプライズではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;しかも、FeliCa搭載は今回日本向けのみ。今回は任天堂大活躍だったそうですので、珍しく日本が目立った形ですね。まぁ、日本は世界でも珍しいiPhone一強国ですし（Sony……）、Appleにとっては大事にして損がない国だと思います。中国など、人数とビジネスチャンスは多くとも、その付き合いづらさはもう身に沁みていることでしょう。シェアは今ひとつ握れず、一党独裁の政府からは難癖をつけられ、けったいなコピー商品も多数作られて、一筋縄ではいかない国です。その点、日本は非常にやりやすい国と思います（それが国として良いことなのかどうかは別にして）。&lt;/p&gt;&#10;&lt;p&gt;こうなると、Apple Watchにも価値が出てきます。Suicaに対応した唯一のスマートウォッチになるのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;これを機に、FeliCaの海外展開にも期待したいところですが……。日本だけ仕様を変えるというのもコストでしょうし、いずれはグローバルに……iPhoneにチップさえ搭載されていればやりようはあるはず……。&lt;/p&gt;&#10;&lt;p&gt;※：「&lt;a class="link" href="http://iphone-mania.jp/news-133957/" target="_blank" rel="noopener"&#10; &gt;これぞガラパゴス！国内向けiPhone7のApple Pay、海外では規格違い使えず - iPhone Mania&lt;/a&gt;」だそうです。うーん、厳しい。でもこれについては、理由があっての規格なので、ガラパゴスと言ってしまうのも。&lt;/p&gt;&#10;&lt;p&gt;※：さらに続報「&lt;a class="link" href="http://taisy0.com/2016/09/18/74289.html" target="_blank" rel="noopener"&#10; &gt;｢iPhone 7｣、海外版にも日本版と同じFeliCa対応チップが搭載されていた事が明らかに | 気になる、記になる…&lt;/a&gt;」だそうです。つまり上記の記事は誤報ですね。しれっと削除されて今は「&lt;a class="link" href="http://iphone-mania.jp/news-136497/" target="_blank" rel="noopener"&#10; &gt;iPhone7のNFCチップは海外版も日本版と同じFeliCa対応と判明！ - iPhone Mania&lt;/a&gt;」という記事が出ています。何故発売後に情報が二転三転変わるのか…。&lt;/p&gt;&#10;&lt;h3 id="256gbの大容量"&gt;256GBの大容量&#10;&lt;/h3&gt;&lt;p&gt;ついに256GBモデルが出ました。嬉しい。音楽も本もたくさん詰め込める。Apple Music？クラウド？&lt;strong&gt;どこでも快適なネット環境が用意されていると思ってはいけない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;iPhone/iPadが地味に強いのは、他の追随を許さない大容量ストレージ&lt;/strong&gt;だと思います。生産量が桁違いだからこそ、コストを抑えてできるんでしょうし、またAppleも大容量であることを重視しているのでしょう。&lt;/p&gt;&#10;&lt;p&gt;iPodの時代から、Appleは大容量のストレージのデバイスをずーっと用意してくれていました。MP3ミュージックプレイヤーの黎明期、iPodを購入した一番の理由はそのストレージ容量でした。その後も、Appleだけが、iPod Classicとして大容量のミュージックプレイヤーを出し続けてくれた。256GBは、HDのiPod含めても過去最大ではないですか。これならスティーブ・ウォズニアックも満足……するかな？512GBを要求しそうですね。&lt;/p&gt;&#10;&lt;p&gt;思えば私にとってのAppleの入り口はiPodでした。まさかこんなに囲い込まれてしまうとはなぁ……。&lt;/p&gt;&#10;&lt;h3 id="防水防塵"&gt;防水・防塵&#10;&lt;/h3&gt;&lt;p&gt;Apple Watchで防水・防塵の必要性も高まった中、iPhoneにもそろそろ来るかな？と思っていました。これも地味に大きい。値段を考えると、お風呂で使うのは勇気がいるでしょうけれど。スティーブ・ジョブズがトイレにiPhoneを落としていれば、きっととっくの昔に実装されていたのでしょう。&lt;/p&gt;&#10;&lt;h3 id="円高"&gt;円高&#10;&lt;/h3&gt;&lt;p&gt;値段が少し熟れました。主に&lt;strong&gt;為替相場、すなわち円高（といっても100円ですが)の影響&lt;/strong&gt;によるものと思います。Appleはジャパン・プレミアをつけないグローバル企業です。それでもSIMロックフリー版が、iPhone Plus 256GBが税込み12万近いので、決してお安くはないですね。でも、それだけの価値があるデバイスじゃないでしょうか。電話にそんな金は出せないという人もいますが、スマートフォンは決して電話じゃありません。スティーブ・ジョブズのすごいところは、どう考えても電話じゃないものを電話と言い張って売ったところだと、誰かが言っていましたが、本当にそう思います。電話の名目だからこそ、うちの母でも持っている。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、学生さんには贅沢な一品であることは確か。これがPCならば、MacはUNIXベースでプログラミングなどにもうってつけであることから、学生さんにもオススメですが、スマートフォンにおけるiPhone/iOSのAndroidに対する優位性は、そういうことでもありませんし、まぁ学生さんはHuaweiでいいと思います。いやフリーテルでもなんでもいいですが。まぁ、好きなデバイスを揃えるのは、大人になってからの楽しみですね。&lt;/p&gt;&#10;&lt;p&gt;これにあわせて、iPadも大幅に値下がりしました。円高+値下げで、けっこう安くなっています。12.9インチのiPad Proなんて、13万円-&amp;gt;10万円と3万近い値下げ。&lt;/p&gt;&#10;&lt;p&gt;※：何故か円高と円安を逆に書いていたので修正しました。恥ずかしい。&lt;/p&gt;&#10;&lt;h2 id="総じて穴が埋められた"&gt;総じて、穴が埋められた&#10;&lt;/h2&gt;&lt;p&gt;なんというか、&lt;strong&gt;これまでiPhoneの穴とされていたところが、一気に埋められた&lt;/strong&gt;感じがします。いったいどのあたりにクックのいうこれなしでは生活できない要素があるのかはわかりませんけれど、大きなブラッシュアップであることは間違いありません。3.5mmイヤホンジャックの廃止などもありますが、Lightningで対応できるし、そもそも無線が主流になるでしょうから、そんなに困らないでしょう（私は有線けっこう使いますけど…）。&lt;/p&gt;&#10;&lt;p&gt;うーん、ちょっと食指が動きます。あと一念待つつもりだったのですが…。今のXperia Z3を使い出してまだ一年半ですし。二年縛りはありませんが…。うーん、うーん……どうしよう……。&lt;/p&gt;&#10;&lt;h2 id="macはなし"&gt;Macはなし&#10;&lt;/h2&gt;&lt;p&gt;Macはダメでした。発表なし。まぁ、もうPC自体がメインストリームではありませんし、仕方がない。Sierraと一緒にお披露目でしょうか。為替の反映もその時にされるでしょう。&lt;/p&gt;&#10;&lt;p&gt;グラフィックスの向上についてはもう随分前から囁かれていますし、次のMacはちょっと期待しています。Mac Proもいい加減に刷新しないと。ディスコンの噂も聞こえますけれど、それはないと思います。プロユースを蔑ろにしてはいけない。既にしていると言われると、アレなんですが……内部拡張性の切り捨ては是々非々ですけれど、もう3年何もないのはなぁ……。プロユースのユーザーは、数は少なくとも一番の上客だと思うのですが。会社が危ない時に支えてくれるのは、Mac Proを愛用しているような人たちでしょう(iPhoneユーザーはきっと潮が引くように去っていく）。&lt;/p&gt;&#10;&lt;p&gt;そしてMac miniは果たしてどうなるのか、クアッドコア復活はあるのか、というか存続するのか、世界中の70億人が大注目しています。すればいいのに。&lt;/p&gt;</description></item><item><title>Ping-t で LPIC 300 のWeb問題集が出ました</title><link>https://hack-le.com/pingt300/</link><pubDate>Tue, 06 Sep 2016 00:36:56 +0900</pubDate><guid>https://hack-le.com/pingt300/</guid><description>&lt;p&gt;&lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LPIC/オラクルマスター/ITパスポート/ITILファンデーション総合学習サイト&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Webベースの勉強サイト、Ping-tでLPIC300対応のWeb問題集が出ました。けっこうかかりましたね。本当は303あたりを期待していたのですが、次は304を予定しているそうです。コマ問はいつになるのかな。&lt;/p&gt;&#10;&lt;h2 id="半ば諦めていました"&gt;半ば諦めていました&#10;&lt;/h2&gt;&lt;p&gt;私はLPICのレベル1から2まで、Ping-tのみでとおしました（「&lt;a class="link" href="//hack-le.com/47349677-2/" &gt;Ping-t だけ使った勉強法で LPIC Level 1と2 は問題なし&lt;/a&gt;」）。いずれの試験も、恐らくは8-9割の正答率で突破できたので、Ping-tについてはけっこう信用しているのです。ただ、LPICのレベル3については、残念ながら対応が追いついていませんでした。私がPing-tと契約した昨年11月、2015年中にするとされていたレベル3対応は、やがて2015年度になり、ついに2016年中になり…予定は予定ですので、というような但し書きはあったものの、これを当てにして一年という長期契約を選んだ自分にはつらかった。&lt;/p&gt;&#10;&lt;p&gt;正直もう対応されることはないんじゃないかと、半ば諦めていたのですけれど、このたび300に正式に対応したということで、たいへん有難い。次は304,303の順番で予定しているようですが、まぁそのへんは今年中に出れば御の字でしょうか。&lt;/p&gt;&#10;&lt;p&gt;LPICレベル3は折を見て取得するつもりであったので、早速300の問題に取り組んでいます。できれば303を優先的にやりたかったのですが。しかし、303は書籍の問題集でさえ現行版に対応したものがない…。まぁ、そんなに焦ってやるものでもなし、できそうなところからやっていくことにしましょう。&lt;/p&gt;&#10;&lt;h2 id="わかりやすいがこれでいけるか"&gt;わかりやすいがこれでいけるか？&#10;&lt;/h2&gt;&lt;p&gt;まだSambaの基礎しか手を付けていませんが、やはりPing-tはわかりやすい。私にとって、覚えるには問題集の形式が一番良いらしい。ただ、LPICもレベル3にもなれば、試験も相応の難易度と予想されます。果たして、今回もPing-tだけでいけるかどうか……。なにしろ試験代が30,000円です。ちょっとばかり怖い。体験談が出そろうのも時間がかかりそうです。うーん、過去の体験談を参考にするしかないのか……。&lt;/p&gt;&#10;&lt;p&gt;まぁ、そういう心配は、まず全部解けるようになってからすることにしましょう……まずは、出来るようにならないと。また勉強だ。&lt;/p&gt;</description></item><item><title>入院していたルンバが帰ってきました、電話してから10日ほど</title><link>https://hack-le.com/roombasupport/</link><pubDate>Thu, 01 Sep 2016 15:42:40 +0900</pubDate><guid>https://hack-le.com/roombasupport/</guid><description>&lt;p&gt;「&lt;a class="link" href="//hack-le.com/roomba870/" &gt;購入して八ヶ月のルンバ 870が入院することに…後車輪が回らない&lt;/a&gt;」より、後車輪に不具合が出て入院したルンバが修理されて帰ってきました。サポートに電話したのが20日(土)、引取にきたのが23日(火)、帰ってきたのが30日(火)。なるほど、だいたい10日くらいですね。&lt;/p&gt;&#10;&lt;h2 id="サポートの対応は好印象"&gt;サポートの対応は好印象&#10;&lt;/h2&gt;&lt;p&gt;12月に購入したルンバなので、だいたい八ヶ月で不具合があったことになります。不具合の内容は、後車輪の片方が正常に回らなくなったというもの。この程度であれば、自分でもタイヤを購入すれば交換できるでしょう。ただしタイヤ代一万円也。さすがにちょっとね。&lt;/p&gt;&#10;&lt;p&gt;サポートに電話したところ、サポートのお姉さんがたいへん感じよく応対してくれました。非常によく指導されているのだと思います。サポートにはあまりよい思い出のない私ですが、今回ばかりはよかった。&lt;/p&gt;&#10;&lt;p&gt;一点、23日の午前に引き取りをお願いしていたのですが、なぜか夕方に指定されていました。まぁ、最初に夕方の場合何時からになるのかを質問したので、その印象で勘違いされてしまったのだと思います。&lt;/p&gt;&#10;&lt;h2 id="引取から一週間で退院"&gt;引取から一週間で退院&#10;&lt;/h2&gt;&lt;p&gt;特に保証書なども添付せずに送付したため（必要であると言われなかった）、どうなるかなと思っていたのですが、預けてからちょうど一週間後にルンバが戻ってきました。内容はタイヤの交換。&lt;/p&gt;&#10;&lt;p&gt;退院後に早速起動させると、問題なく動いてくれました。ルンバに活躍してもらうために自分では掃除をしませんでした。嘘です面倒臭かったんです。ルンバは本当に有難い。床が綺麗になりました。&lt;/p&gt;&#10;&lt;h2 id="ロボットは日頃のメンテと保証が大事と再認識"&gt;ロボットは日頃のメンテと保証が大事と再認識&#10;&lt;/h2&gt;&lt;p&gt;やはりロボットにはトラブルがつきものです。サポートが非常によく教育されていたのも、サポートが大切だから、つまり&lt;strong&gt;逆に言えばそれだけトラブルが多い&lt;/strong&gt;のだと考えられます。まぁ今回は一年以内だったのでメーカー保証がききますが、一年過ぎると、どうかな。私はクロネコヤマトの長期保証に加入しておりますが、いざという時、今回のように対応してもらえるのかしら。5年保証ですけれど、あと4年間、何事もなく動いてくれるのかなぁ。&lt;/p&gt;&#10;&lt;p&gt;あと、メンテナンスも大事ですね。可動部の塊ですから、自分で掃除できるところは、休日にでもちょくちょくやりたいものです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00S61QT1Y&amp;linkId=389a937e534aabedcfe8e5d1c2a400eb" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;関係のない余談：ロボットではないですがミニミニなドローンを購入しました。小さすぎて航空法の規制対象外になっているようなやつです。クアトロックスWiz(赤)は操作が下手くそ過ぎたせいで3日で壊しました（笑）。でもちょっと難しい機体にように思えます。今はSyma のX3で遊んでいます。こちらのほうが多少簡単に思える。Amazonで2,500円と安価で良いおもちゃ。&#13;&#10;&lt;p&gt;そのうちちゃんとした機体で、プログラミングして自動操縦で空撮したりモノを運ばせたりできなたら楽しいな、などと夢を見ています。夢と言ったらあかんか。&lt;/p&gt;</description></item><item><title>Chromeからask.comを削除する(Windows 10)</title><link>https://hack-le.com/askcom/</link><pubDate>Tue, 30 Aug 2016 14:13:59 +0900</pubDate><guid>https://hack-le.com/askcom/</guid><description>&lt;p&gt;父のPCが最近やたらネットが切れると言われ、まぁ家族のことだからとサポートしていたのですが、いじっているとなんでか毎度毎度ask.comなる謎のドメインにアクセスしている。しかも見てみると、Chromeの起動ページもそれ。あー、またこの手のやつか……と削除しようとしたら、やはり例によって苦戦したという話です。&lt;/p&gt;&#10;&lt;h2 id="症状"&gt;症状&#10;&lt;/h2&gt;&lt;p&gt;環境はWindows 10、Google Chrome。Chromeの起動ページがask.com。デフォルトの検索エンジン（アドレスバーから入力して調べるやつ）もask.com。普段からなにかとask.comと通信していて、挙動が遅い。ひどい時は止まる。&lt;/p&gt;&#10;&lt;h2 id="ほっといてはいけない"&gt;ほっといてはいけない&#10;&lt;/h2&gt;&lt;p&gt;アンインストールが一筋縄でいかず、めげそうになるかもしれません。しかし、こういうものを放っておいて良いことなど一つもなく、一方悪いことはたくさんあります。簡単に消去させないようにしているアプリが、まともなわけはないのです。足抜けできない組織がまともじゃないのと一緒です。&lt;/p&gt;&#10;&lt;p&gt;確かに、PCに致命的な損傷を与える類のものではないかもしれませんが、常に怪しげな通信が行われており、&lt;strong&gt;いったいどんな情報がask.comに送られているやらわかったものではありません&lt;/strong&gt;。潜在的にどのような危険性があるかもわかりません。実際、タスクマネージャでみるとけっこうな負荷がかかっていて、いったいなにをしていたのやら。マシンのパフォーマンスにも、けっこう影響していたのではないか。&lt;/p&gt;&#10;&lt;p&gt;このアプリを好き好んで入れた人はいないと思いますが、いつの間にか入っていて、普段の挙動が邪魔そのもので、消そうとしても消せない、&lt;strong&gt;誰がどうみたってこんなものは悪意の塊&lt;/strong&gt;です。&lt;strong&gt;組織の公式ページもあまり信用しないほうがよい&lt;/strong&gt;と思います。消し方の手順とか載っていますが、そのとおりやっても消えなかったり。そもそも、消し方の手順を載せるくらいなら、元から煩雑な手順なしに消せるようにすべきだし、そもそも勝手に入っているような異常な状況を作ってはいけない。まぁ、公式の対応は、形だけでしょう。&lt;/p&gt;&#10;&lt;p&gt;また、&lt;strong&gt;アンインストールのために怪しげなフリーソフトは入れるべきではありません&lt;/strong&gt;。それによって&lt;strong&gt;別の何かを連れ込まれる可能性&lt;/strong&gt;があります。そもそもこのアプリが入っているのは、そういう怪しげなソフトを入れたことが発端な可能性が高い。できるかぎり、&lt;strong&gt;OSの標準機能で対応したほうがよい&lt;/strong&gt;でしょう。&lt;/p&gt;&#10;&lt;h2 id="削除までの手順"&gt;削除までの手順&#10;&lt;/h2&gt;&lt;p&gt;以下に削除までの手順を書きます。しかし、この手のやつは各環境によって侵食具合や名前などがちょくちょく変わりますので、同じようにはいかないかもしれません。まぁでも、基本的な考え方はだいたい同じです。&lt;/p&gt;&#10;&lt;h3 id="プログラムのアンインストール"&gt;プログラムのアンインストール&#10;&lt;/h3&gt;&lt;p&gt;まず最初にすべきは、怪しいプログラムをアンインストールすることです。コントロールパネルよりプログラムのアンインストールを選択し、&lt;strong&gt;名前のどこか****にaskが付いている怪しいやつをすべて削除&lt;/strong&gt;。一つではない可能性があります。私は２つありました。片方は「Shopping App by Ask」だったかな。質が悪いものだと、まったく関係のない名前であることもあるようです（参考「&lt;a class="link" href="http://d.hatena.ne.jp/ogohnohito/20131219/p1" target="_blank" rel="noopener"&#10; &gt;起動の度にAsk.comの検索のページが… ホームページからも削除できない - まりふのひと&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h3 id="ブラウザの拡張機能のアンインストール"&gt;ブラウザの拡張機能のアンインストール&#10;&lt;/h3&gt;&lt;p&gt;ブラウザの拡張機能として、Ask.comの何かがインストールされていることがあります。Chromeの場合は、設定→拡張機能より、それらしいものを削除。ただ、私の場合これは問題ありませんでした。&lt;/p&gt;&#10;&lt;h3 id="関連フォルダの削除"&gt;関連フォルダの削除&#10;&lt;/h3&gt;&lt;p&gt;まだまだ掃除は続きます。本当にしつこい。次は、関連フォルダの削除です。C:\でAskがつくフォルダを検索しましょう。何か出てくるかもしれません。私の場合、「C:\Program Files (x86)\AskPartnerNetwork」 が出てきました。Googleで検索すればわかりますが、これもAsk.com関係です。&lt;/p&gt;&#10;&lt;p&gt;ポチッと削除…できればよいのですが、「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」とか言われて削除できませんでした。再起動直後でもダメ。どうも、勝手にプロセスが起動してしまっているらしい。&lt;/p&gt;&#10;&lt;p&gt;タスクマネージャを開きます。開き方は「&lt;a class="link" href="http://pc-karuma.net/windows-10-task-taskmanager/" target="_blank" rel="noopener"&#10; &gt;Windows10 - タスクマネージャーを起動する方法 - PC設定のカルマ&lt;/a&gt;」を参照していただくとして、ここで何か怪しいプロセスがないか確認します。あるはずです。そいつが動いています&lt;/p&gt;&#10;&lt;p&gt;私の場合、「APN Updater」および「Ask Toolbar」なるプロセスが動いていました。実際、プロセスの場所を開くと上述したAskPartnerNetworkフォルダが開きます。APNはAskPartnerNetworkの略なのでしょうね。こいつらを、タスクマネージャから選択して、右クリックから終了させました。&lt;/p&gt;&#10;&lt;p&gt;その後、当該フォルダの削除を実行すると、今度はOK。すっきり。このプロセスたち、けっこうな負荷をかけてくれており、実際マシンにとって少なからぬ影響があったのではなかろうかと推察します。&lt;/p&gt;&#10;&lt;h3 id="タスクマネージャで怪しいプロセスが動いていないか確認"&gt;タスクマネージャで怪しいプロセスが動いていないか確認&#10;&lt;/h3&gt;&lt;p&gt;ここまですれば、ひとまずプログラムは掃除できたのではないかと思いますが、一応タスクマネージャで、他に怪しいプログラムが動いていないか確認します。問題なければ、OKじゃないかな。&lt;/p&gt;&#10;&lt;h3 id="ブラウザのデフォルト検索エンジン起動ページホームページの再設定"&gt;ブラウザのデフォルト検索エンジン、起動ページ、ホームページの再設定&#10;&lt;/h3&gt;&lt;p&gt;まだお掃除は残っています。本当に本当にしつこい。&lt;strong&gt;ブラウザの設定&lt;/strong&gt;です。特に、デフォルトの検索エンジンと、起動ページ（とホームページ）が書き換えられている可能性が高いです。これらはブラウザの設定項目なので、プログラムのアンインストールとは別に対応する必要があります。&lt;/p&gt;&#10;&lt;p&gt;Chromeの場合、「設定」より、「起動時」「デザイン」「検索」の項目をそれぞれ確認し、ask.comのページを開くようになっている部分を、消します。私の場合、「起動時」と「検索」を変更する必要がありました。ホームページは何故かてつかずでした。↓の部分のことです。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Chrome設定画面(Mac版)" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/2016/08/54dae77d90d444084391d1c6a1285bfe-300x287.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Chrome設定画面(Mac版)&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;これはMac版ですが、項目自体はWindows版も変わりません。設定項目の中身はお好みで。とにかくask.comを追い出しましょう。&lt;/p&gt;&#10;&lt;h2 id="お疲れ様です"&gt;お疲れ様です&#10;&lt;/h2&gt;&lt;p&gt;以上です。しんどい。最初に述べたとおり、この手のやつは症状や侵食の仕方などに個体差みたいなものがあり、プログラムの名前が違ったりなんだりしますが、やるべきことはあまり変わりません。レジストリまではいじらなくてもよいと思うんですけどね…。どうしてもダメなら最終奥義・初期化がありますが…。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、今回この症状を発見する発端となったネットブチ切れは、これを解決してもなおりませんでした。悲しい。&lt;/p&gt;</description></item><item><title>おサイフケータイをオススメできる人…財布嫌いなガジェット好きにうってつけ</title><link>https://hack-le.com/osaifu/</link><pubDate>Sun, 28 Aug 2016 08:32:30 +0900</pubDate><guid>https://hack-le.com/osaifu/</guid><description>&lt;p&gt;ジョギングの帰りにホームセンターのカインズホームに寄り、電源タップを購入しようとレジに持って行きました。財布を持っていませんでしたが、ケータイがあるし……と思いきや、カインズホームの電子決済はクレジットカードのみ。あらら、と残念に思いつつ商品を戻したのですが、当然のようにレジに持って行った自分に驚きです。いつの間にかそういう感じになっていたんですねぇ。&lt;/p&gt;&#10;&lt;p&gt;本記事では、私にとって非常に便利な、しかし他人にとっては必ずしもそうではない「おサイフケータイ」というサービスが、どんな人に向いているのかについて、私の実体験からくる感触に基づいて書きます。私の見解を一言で言うと、&lt;strong&gt;おサイフケータイは財布が嫌いな人向けのサービス&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="メリットとデメリット"&gt;メリットとデメリット&#10;&lt;/h2&gt;&lt;p&gt;最初に、メリットとデメリットをざっくりまとめます。まずメリット。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;財布をもたなくてよい（こともある）&lt;/li&gt;&#10;&lt;li&gt;財布を出さなくてよい（こともある）&lt;/li&gt;&#10;&lt;li&gt;履歴が残る&lt;/li&gt;&#10;&lt;li&gt;デジタルデバイスで決済が出来る&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これのどこがメリットなのか？と思う人は、おサイフケータイは向いていないでしょう。特に最後は、デジタルデバイスによる決済そのものに喜びを感じる、というものなので、まぁある種の特殊な性癖みたいなものです。&lt;/p&gt;&#10;&lt;p&gt;次にデメリット。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;紛失すると面倒臭い&lt;/li&gt;&#10;&lt;li&gt;紛失しなくても機種変更すると面倒臭い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;紛失は想像するだけで嫌になります。また、ガジェット好きにとっては、機種変更に伴う手続きの煩雑さは大きな枷となるでしょう。&lt;/p&gt;&#10;&lt;p&gt;以上をまとめると、表題の通りおサイフケータイは「財布嫌いなガジェット好き」にうってつけ、ということになります。&lt;/p&gt;&#10;&lt;p&gt;以降、もう少し細かく見ていきます。&lt;/p&gt;&#10;&lt;h2 id="財布を持ち歩きたくない人のためのサービス"&gt;財布を持ち歩きたくない人のためのサービス&#10;&lt;/h2&gt;&lt;p&gt;おサイフケータイは、必要のない人にとってはまったくもって不要なサービスで、その有用性は非常に理解し難いものです。しかし、有難い人にとっては本当に有難い代物。どういう人にとって有難いかというと、それは簡単で、&lt;strong&gt;できるだけ財布を持ち歩きたくない&lt;/strong&gt;、持ち歩くのが面倒臭い、持ち歩くのを忘れる、そういう人です。そして&lt;strong&gt;財布を持っている時でさえ、できれば財布を出したくない&lt;/strong&gt;、財布を出すのが億劫だ、財布を探すことに異常に心的エネルギーを消費する、そういう人です。ATMに並びたくない、&lt;strong&gt;財布の中から1円玉を探すことは人生の浪費だと思っている&lt;/strong&gt;、そういう人です。&lt;/p&gt;&#10;&lt;p&gt;そういう人もいるのです。私です。そして私など所詮この世界においてはどこにでもいる一人の坊やですから、私以外にもそういう人はいるのでしょう。おサイフケータイを愛用している人たちというのは、大なり小なり、財布が嫌い、あるいはあまり好きではないのだと思います。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、それ以外の人にとっては、ちょっと微妙なサービスかもしれません。財布を持ち歩く場合でも、電子決済の利便性は認める人が多いでしょうけれど、世の中にはクレジットカードという便利なものがあります。おサイフケータイが使えるということはクレジットカードも使えます。そして、おサイフケータイに対応しているところはだいたいクレジットカードにも対応しているものです。ならば、&lt;strong&gt;クレジットカードを使えば良い&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;しかし、防犯上の観点から、クレジットカードをなるべく持ち歩きたくないという人もいるかと思います。そういう人にとっても、&lt;strong&gt;プリペイド式で使えるおサイフケータイには利点&lt;/strong&gt;があります。おサイフケータイはだいたいオートチャージ機能も備えていますが、落とした時のことを考えて、私は使っていません。チャージの操作をすることで、「俺は金を使っているんだ」という感覚を忘れないようにしているというのもあります。&lt;/p&gt;&#10;&lt;p&gt;もう一つ、最初にあげましたが、「財布を出さなくて良い」をメリットと考えるのであれば、&lt;strong&gt;クレジットカードは財布ないしカード入れに入れいていることが多いでしょうから、それらを取り出す機会を減らせるおサイフケータイにはメリットがあります&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁとはいえ、おサイフケータイも、ましてクレジットカードもどこでも使えるわけではありません。電子決済自体、まだまだ途上のサービスです。汎用性において現金にかなうものはありませんから、究極的に財布を持たない、出さないということはありえず、そのためおサイフケータイは中途半端なサービスのように感じられても不思議はありません。しかし、&lt;strong&gt;財布が必要な機会を減らすことはできますから、それにどれだけの価値を見いだせるか&lt;/strong&gt;、ということです。&lt;/p&gt;&#10;&lt;h2 id="履歴が残るレシートいらず"&gt;履歴が残る→レシートいらず&#10;&lt;/h2&gt;&lt;p&gt;電子決済の良い所の一つは、履歴が残ることです。&lt;strong&gt;私のようにレシートを貯めることができない人間でも、履歴を見ることはできます&lt;/strong&gt;。クレジットカードも履歴は残るのですが、即時性という点で、おサイフケータイには利があります。&lt;/p&gt;&#10;&lt;p&gt;実際、私は過去何度も家計簿に挑戦し、そのたび失敗してきたのですが、ここ1年くらいで、ようやく定着しました。&lt;strong&gt;家計簿が定着できたのは、おサイフケータイの履歴機能のおかげ&lt;/strong&gt;です。支払いを極力おサイフケータイにすることで、後から履歴を確認し、家計簿をつけるのに利用しました。&lt;/p&gt;&#10;&lt;p&gt;レシートの保存はもちろん、写真を取るのも面倒で続かなかったのですが、この方法は、私に向いていたようです。多分、&lt;strong&gt;財布嫌いはレシートも嫌い&lt;/strong&gt;です（自分調べ）。経費の申請に使うとなると、レシートもなくせませんが。&lt;/p&gt;&#10;&lt;h2 id="デジタルデバイスで決済できる喜び"&gt;デジタルデバイスで決済できる喜び&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;所有しているスマートフォンで決済できる、それそのものが喜び&lt;/strong&gt;です。今後は、スマートウォッチによる決済も広まっていくでしょう。&lt;strong&gt;決済時になるあの効果音を聞くと、快感を感じます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;Suicaの効果音は、スピード勝負の仕事人なので仕方ないとは思うのですが、ちょっと味気ないです。一方、Edyの効果音はいかにも払ったという感じがしてよいですね。底深い賽銭箱に賽銭を投げて響くエコーのようです。&lt;/p&gt;&#10;&lt;p&gt;ちょっと何を言っているのかわからない、と言われるとすみません。&lt;/p&gt;&#10;&lt;h2 id="なくした時のことは考えたくない"&gt;なくした時のことは考えたくない&#10;&lt;/h2&gt;&lt;p&gt;便利なものですが、もしデバイスを紛失してしまったら…紛失しなくても、故障してしまったら…もう考えるだけで面倒臭いです。考えたくもありません。&lt;/p&gt;&#10;&lt;p&gt;また、機種変更の際には、使用しているブランドが多ければ多いほど、面倒臭い手続きをすることになります。&lt;/p&gt;&#10;&lt;p&gt;これは、明らかにデメリットです。もう少し、なんとかならないものか…（これは二段階認証など、デバイスと紐付いた管理システム全般に言えることです）。&lt;/p&gt;&#10;&lt;h2 id="なけりゃないで死にません"&gt;なけりゃないで死にません&#10;&lt;/h2&gt;&lt;p&gt;私はiPhoneを使っていた時期があります。最近になって、FeliCaに対応するなどの噂も流れていますが（「&lt;a class="link" href="//hack-le.com/iphonesuica/" &gt;iPhoneでSuicaが使える日も遠くない？&lt;/a&gt;」）、少なくともこれまでiPhoneではおサイフケータイが使えなかったし、これからも当面はそれが続くでしょう。iPhoneを使っていた時、当然おサイフケータイは使えません。&lt;/p&gt;&#10;&lt;p&gt;で、その時私はどうしていたかというと、普通に財布を持ち歩いていました。そして、それを特別不便だと感じることはあまりありませんでした（iPhoneに乗り換えてしばらくは、財布を忘れてあばばばば、ということも何度かありましたが）。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;おサイフケータイはあれば便利ですが、なければないで、まぁ、という感じ&lt;/strong&gt;です。おサイフケータイを非常に良いサービスと考え、愛用している私でもそうなのですから、多くの人にっておサイフケータイが必須のものでないことは自明でしょう。&lt;/p&gt;&#10;&lt;p&gt;でも、&lt;strong&gt;あれば便利&lt;/strong&gt;です。iPhoneから今のXperiaに乗り換えて、またおサイフケータイを使い出しましたが、やっぱり便利だな、としみじみ。今は家計簿におサイフケータイの履歴機能を使っているので、もはや「なくてはならない」とさえ言えるかもしれません。&lt;/p&gt;&#10;&lt;p&gt;まぁ色々書いてきましたが、&lt;strong&gt;財布が嫌いでガジェットが好きな人なら、まず間違いなく便利なサービス&lt;/strong&gt;だと思います。&lt;/p&gt;</description></item><item><title>nginxでBasic認証(パスワードによる認証)</title><link>https://hack-le.com/nginxbasic/</link><pubDate>Fri, 26 Aug 2016 12:51:58 +0900</pubDate><guid>https://hack-le.com/nginxbasic/</guid><description>&lt;p&gt;nginxでBasic認証を行います。ユーザー名とパスワードを入力させるアレです。パスワードファイルを作成し、nginxの設定ファイルでパスワードファイルの場所を指定します。&lt;/p&gt;&#10;&lt;h2 id="basic認証について"&gt;Basic認証について&#10;&lt;/h2&gt;&lt;p&gt;Basic認証は、パスワード認証の一つです。ページにアクセスするとユーザー名とパスワードを求めるダイアログを表示させることができます。手順が簡単で、ほとんどすべてのブラウザで対応していることから、広く使われています。特にテストページの公開などでは役立つのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;手順としては、ユーザー名と（暗号化した）パスワードを記述したパスワードファイルを作成し、nginxの設定ファイルでパスワードファイルを指定するだけです。とてもお手軽。内部的には、ngx_http_auth_basic_moduleを利用します。&lt;/p&gt;&#10;&lt;h2 id="パスワードファイルの作成"&gt;パスワードファイルの作成&#10;&lt;/h2&gt;&lt;p&gt;パスワードファイルの作成については、Apache互換の方法と、opensslコマンドを使った方法の2種類あります。前者はつまりhtpasswdコマンドを利用したものですが、nginxでApacheのツールを使うのも筋悪ですし、ここでは後者の方法を採用します。&lt;/p&gt;&#10;&lt;p&gt;まず、パスワードファイルの書式は以下です。&lt;/p&gt;&#10;&lt;pre&gt;`username:password&#13; username:password:comment`&lt;/pre&gt;&#13;&#10;&lt;p&gt;コメントは必須ではありません。また、passwordは暗号化した文字列です(平文も可ですが当然非推奨）。暗号化した文字列の生成には、opensslコマンドを用います。たとえば、パスワードを1234とした場合（言うまでもなくこのパスワードは最低です）、コマンドは以下です。&lt;/p&gt;&#10;&lt;pre&gt;`openssl passwd 1234`&lt;/pre&gt;&#13;&#10;&lt;p&gt;この場合、パスワード1234がcrypt()により暗号化されます。デフォルトではcryptです。が、「&lt;a class="link" href="http://qiita.com/STSynthe/items/5387bc33e7be315ae338" target="_blank" rel="noopener"&#10; &gt;NginxでBasic認証させる件 - Qiita&lt;/a&gt;」の記事によると、暗号化はcryptよりもMD5ベースのものがよいとされ、その場合は-apr1をオプションとして付記します。&lt;/p&gt;&#10;&lt;p&gt;実際、標準のcryptではパスワードが8文字以下しか使えないようで、8文字以上のパスワードを入力しても、以下の警告文が出て切り詰められてしまいます（参考「&lt;a class="link" href="http://blog.trippyboy.com/2014/apache/htpasswd-basic%E8%AA%8D%E8%A8%BC%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%A8%E6%96%87%E5%AD%97%E6%95%B0%E5%88%B6%E9%99%90/" target="_blank" rel="noopener"&#10; &gt;[.htpasswd] Basic認証パスワードを確認する方法と文字数制限の巻 - TrippyBoyの愉快な日々&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;pre&gt;`Warning: truncating password to 8 characters`&lt;/pre&gt;&#13;&#10;&lt;p&gt;これはちょっと危ないので、先の記事にならい-apr1オプションを使うことにします。&lt;/p&gt;&#10;&lt;p&gt;さて、パスワードファイルはどこに置いてもよいのですが、ここでは仮に/etc/nginx/hogehogeとします。hogeユーザーのパスワード1234を、パスワードファイルhogehogeに記述するには、以下のコマンドを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`echo "hoge:$(openssl passwd 　-apr1 1234)" | sudo tee -a /etc/nginx/hogehoge`&lt;/pre&gt;&#13;&#10;&lt;p&gt;hoge,1234,etc/nginx/hogehoge の各部分は適宜変更。teeコマンドは、パイプできた文字列を標準出力とファイルの両方に出力に出力するコマンドです。T分岐のイメージですね。-aは追記を意味します。もちろん、viなどで/etc/nginx/hogehogeを直接編集してもよいです。これで、パスワードファイルの作成は完了です。&lt;/p&gt;&#10;&lt;p&gt;このままだと履歴にパスワードが残って嫌な感じなので、私は~/.bash_historyより当該の履歴を削除します。&lt;/p&gt;&#10;&lt;h2 id="設定ファイル"&gt;設定ファイル&#10;&lt;/h2&gt;&lt;p&gt;次に、作成したパスワードファイルを、nginxが読み込むように設定します。/etc/nginx/nginx.confあるいは、includeした設定ファイルの、http、server、location、limit_exceptコンテキスト内に、auth_basicおよびauth_basic_user_fileディレクティブを記述します。&lt;/p&gt;&#10;&lt;p&gt;具体的に、www.example.comサーバー用の設定ファイル、/etc/nginx/conf.d/www.example.com.conf があると仮定すると、以下の様な記述になります。&lt;/p&gt;&#10;&lt;pre&gt;`server {&#13; listen 80;&#13; listen [::]:80;&#13; server_name www.example.com;&#13; index index.html index.php;&#13; root /usr/share/nginx/html;&#13; &#13; # Load configuration files for the default server block.&#13; include /etc/nginx/default.d/*.conf;&#13; &#13; # たとえば以下のように記述します&#13; auth_basic "password_site";&#13; auth_basic_user_file /etc/nginx/hogehoge;&#13; &#13; error_page 404 /404.html;&#13; location = /40x.html {&#13; }&#13; &#13; error_page 500 502 503 504 /50x.html;&#13; location = /50x.html {&#13; }&#13; }&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;認証をかけたい場所によって、auth_basicおよびauth_basic_user_fileディレクティブの記述する場所を適宜変更します。&lt;/p&gt;&#10;&lt;p&gt;ここまで終わったら、nginxで設定ファイルを再読み込みします。CentOS 7においては、systemdを使います。&lt;/p&gt;&#10;&lt;pre&gt;`sudo systemctl reload nginx.service`&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4774178667&amp;linkId=53f30f805a52968653c8d50eb8cb474c" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;書籍「nginx実践入門」を参考にしました。本書は、技術評論社のサイトから電子版を買うことも出来ます。一通りのことがわかりやすくまとまっている本です。</description></item><item><title>リップルノイズの小さい直流電源の捜索</title><link>https://hack-le.com/ripplenoise/</link><pubDate>Tue, 23 Aug 2016 15:34:57 +0900</pubDate><guid>https://hack-le.com/ripplenoise/</guid><description>&lt;p&gt;リップルノイズの小さな(数mVp-p以下)電源を探しています。できるだけ小型のものをと、当初はスイッチング電源を探していましたが、市販のものではどれも厳しく、結局リニア電源(シリーズ電源)を使うことに。&lt;/p&gt;&#10;&lt;h2 id="スイッチング電源でいけるか"&gt;スイッチング電源でいけるか&#10;&lt;/h2&gt;&lt;p&gt;直流安定化電源の重要なスペックの一つに、リップルノイズがあります。たいていの用途ではあまりシビアに考える必要もないかもしれませんが、たとえば高精度の観測機器に用いる場合などはノイズとの戦いですから、電源ノイズは一つ大きな問題です。&lt;/p&gt;&#10;&lt;p&gt;電源には大きく分けて、スイッチング電源とリニア電源があります。違いについては「&lt;a class="link" href="http://www.tdk.co.jp/techmag/emc2/200702/index2.htm" target="_blank" rel="noopener"&#10; &gt;第10回 電源のEMC対策｜なるほどノイズ(EMC)入門2｜TDK Techno Magazine&lt;/a&gt;」が参考になります。リニア電源はシリーズ電源ともいいます。恥ずかしながら、なぜシリーズ電源というのか調べて見るまで知らなかったのですが、安定化回路において抵抗を直列（シリーズ）に入れて制御することから、シリーズ電源と言うそうです（&lt;a class="link" href="http://www.tdk.co.jp/news_center/publications/power_electronics_world/pdf/aaa70611.pdf" target="_blank" rel="noopener"&#10; &gt;参考&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;p&gt;リニア電源はでっかいトランスの塊なので、大きくて重い。排熱も大きく効率もよくない。できればスイッチング電源でいきたいところです。しかし、24Vくらいで探すと、だいたいのスイッチング電源はリップルノイズが100-200mVp-p程度、低ノイズを謳っているもので50mVp-p程度というのが標準的なスペックのようです。これではちょっと厳しい。これ以上のものを求めるのであれば、自分たちで設計して頑張るしかないのでしょう。&lt;/p&gt;&#10;&lt;p&gt;結局、リニア電源で探すことになりました。&lt;/p&gt;&#10;&lt;h2 id="電源探しの旅"&gt;電源探しの旅&#10;&lt;/h2&gt;&lt;p&gt;必要な電圧がどうもハッキリしないのですが、可変式のものはやはり図体がでかい。その中でも比較的コンパクトなもので探していくと、以下のようなものが見つかりました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;菊水電子工業 PMX-Aシリーズ…&lt;a class="link" href="https://www.kikusui.co.jp/catalog/?model=pmx-a" target="_blank" rel="noopener"&#10; &gt;コンパクト直流安定化電源（CVCC）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;菊水電子工業 PMC-Aシリーズ…&lt;a class="link" href="https://www.kikusui.co.jp/catalog/?model=pmc-a" target="_blank" rel="noopener"&#10; &gt;汎用コンパクト電源（CVCC）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;菊水電子工業 PMCシリーズ…&lt;a class="link" href="https://www.kikusui.co.jp/catalog/?model=pmc" target="_blank" rel="noopener"&#10; &gt;ローコスト・コンパクト電源（CVCC）&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;高砂製作所 TPシリーズ…&lt;a class="link" href="http://www.takasago-ss.co.jp/dc/tp2.htm" target="_blank" rel="noopener"&#10; &gt;【ＴＰシリーズ直流電源】仕様&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;24Vなどよくある電圧のものであれば、COSELやTDKラムダの比較的小型なものが扱えるのですが。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;TDKラムダ NNSシリーズ…&lt;a class="link" href="http://www.tdk-lambda.co.jp/products/sps/ps_unit/nns/indexj.html" target="_blank" rel="noopener"&#10; &gt;リニア電源 NNSシリーズ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;COSEL Gシリーズ…&lt;a class="link" href="https://www.cosel.co.jp/product/powersupply/G/" target="_blank" rel="noopener"&#10; &gt;Gシリーズ｜製品情報&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;TDKラムダは「スイッチング電源の専業メーカーです」といいながらしれっと出していますね。COSELのGシリーズは消費電力次第で幅50mmのものもありなかなか小型。リップルノイズも3mVp-p程度で問題なし。通販サイトでサクッと買えるし、これでよければ使いたいところです。&lt;/p&gt;</description></item><item><title>購入して八ヶ月のルンバ 870が入院することに…後車輪が回らない</title><link>https://hack-le.com/roomba870/</link><pubDate>Sat, 20 Aug 2016 18:40:36 +0900</pubDate><guid>https://hack-le.com/roomba870/</guid><description>&lt;p&gt;昨年12月上旬、Amazonで購入したルンバ 870の後部車輪が正常に回らなくなりました。最初はゴミが引っかかっている程度だろうと軽く考えていたのですが、どうもそうではなく、サポートに電話して入院することになりました。やはりロボットはサポートが大事ですね。電話の応対は非常に丁寧でしたが、果たして今後の展開はどうなるでしょうか。&lt;/p&gt;&#10;&lt;h2 id="ルンバのためなら片付けられる"&gt;ルンバのためなら片付けられる&#10;&lt;/h2&gt;&lt;p&gt;ルンバは、私の去年の買い物で一番満足度が高いものです。12月時点で、Amazonのセールで5万円弱で購入しました。今は普通に、その時より若干安い値段でAmazonで売られていますね。まぁデジモノですから仕方ない。&lt;/p&gt;&#10;&lt;p&gt;ルンバの購入以来、私の生活は目に見えて変化しました。端的に言うと、部屋が片付きました。これはルンバが掃除してくれていることはもちろんですが、ルンバが掃除しやすいように部屋の環境を整えたことが非常に大きいです。足の踏み場がないようでは、ルンバは活躍できません。&lt;strong&gt;お掃除ロボットとしては皮肉なことに、ルンバが活躍できるのはある程度片付いた部屋&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;ルンバは本当に本当に可愛いです。この可愛いルンバが、私の無精のせいで本来の性能を発揮できない、などということがあってよいはずはなく、ウォールシェルフや壁掛けのギタースタンドを購入したりして、とにかく足場という足場を作り、またそれが継続されるような環境作りに励みました。結果椅子を部屋の外にやるという最低限の行動だけで、ルンバが走り回れるようになりました。部屋は、本当に綺麗になったと思います。ルンバのおかげです。可愛いルンバのためなら頑張れる。&lt;/p&gt;&#10;&lt;p&gt;これには同居の母も喜びました。いまだに私の部屋が荒れていたことを内心苦々しく思っていたものの、もう私も30手前、言いづらかったようです。私としては、以前の状態もアレはアレで一つの秩序だったのですけれど、第三者の目にはただの汚い部屋として映っていたのでしょう。感性の違いは同居人にとって大きな問題ですが、一つ解決された、かな。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、ルンバはその可愛さで、実際に私の生活環境を変えた良い製品です。&lt;/p&gt;&#10;&lt;h2 id="タイヤがきちんと回らない"&gt;タイヤがきちんと回らない&#10;&lt;/h2&gt;&lt;p&gt;そんなルンバですが、どうも調子が悪い。小さな円を描きくるくると回り、「エラーコード10」、左右のタイヤを確認せよ、とメッセージを発して止まってしまいます。ルンバがエラーを吐いて止まること自体は初めてではありません。糸くずや紙などが絡まって、二進も三進もいかなくなったというケースなどよくあります。この時点では、まぁどうせそんなところであろうと、軽く考えておりました。&lt;/p&gt;&#10;&lt;p&gt;しかし、内部を見ても特にひっかかっているものはない。埃を清掃したけれど、どうもそういう問題ではない気がする。後部車輪に触れてみると、なんだか少し重い気がする。ん？と思ってもう片方のタイヤを触ると、こちらはスムーズに動く。む、む。&lt;/p&gt;&#10;&lt;p&gt;ちょっと嫌な予感がしながらも、ドライバーも持ってきて取り外せるところは取り外し、関係ないだろうなと思いつつ丁寧に掃除。また、取扱説明書にのっとって、タイヤを数回回したり、叩いたりしてみるも、改善せず。ここにきてようやく、どうも簡単に済む話ではなさそうだ、ということに気づきました。サポートに連絡しなければいけない事態らしい。やれやれです。&lt;/p&gt;&#10;&lt;h2 id="サポートに連絡電話の応対は好印象だがこの後はどうなる"&gt;サポートに連絡…電話の応対は好印象だが、この後はどうなる？&#10;&lt;/h2&gt;&lt;p&gt;どんな時でも、サポートへの連絡は気が重いものです。慇懃無礼な対応であればまだマシ、場合によっては「横柄」という言葉すら浮かぶようなオペレータに繋がることもあります。サポートとのやりとりで、製品やメーカーそのものが嫌いになることも珍しくはありません。ルンバは嫌いになりたくないなぁ。しかし、連絡しないわけにはいかない。1,000円の買い物ではありません。50,000円の買い物なのです。&lt;/p&gt;&#10;&lt;p&gt;連絡にあたり、ユーザー登録をしておいたほうが、話は早いだろうなと考え、「&lt;a class="link" href="http://www.irobot-jp.com/" target="_blank" rel="noopener"&#10; &gt;アイロボット公式サイト | iRobot&lt;/a&gt;」にてユーザーおよび製品の登録をしました。後述しますが、これは正解でした。一応、公式サイトにはメールフォームも用意されており、そこから連絡をすることも可能なのですが、営業日のみの返信となっていますし（今日は土曜日）、なにより経験上こういう相談はできるだけ対面に近い連絡方法を取ったほうが話がスムーズに運びます。一番良いのは直接相談ですが、現実にそれは難しいので、次点・電話連絡です（チャットが可能であればそれも考えます）。&lt;/p&gt;&#10;&lt;p&gt;製品番号と保証書、およびAmazonの明細書を手元に控え、言うべきことを整理して、いざ電話。…「ただいまたいへん混み合っております」。まぁこれくらいは想定内です。お茶でも沸かして待ちますか…と思いきや、30秒もしない間にオペレータに繋がりました。思ったよりも、早い。&lt;/p&gt;&#10;&lt;p&gt;オペレータのお姉さんは、たいへん丁寧な応対でした。「ご不便おかけします」と恐縮しきりで、私の訴え一つ一つに丁寧に相槌を打ち、同情し、そしてまた「ご不便おかけします」と恐縮するものですから、なんだかこちらが申し訳なくなってしまうほどでした。そのように応対するよう、指導されているのでしょう。&lt;/p&gt;&#10;&lt;p&gt;昔、姉がアイロボットのサポートについて非常に丁寧だったと言っていたことを思い出しました（姉もルンバユーザーです）。どうやら、かなりしっかりとしたサポート体制を整えているようです。さすがですね。ロボット事業は、サポートが命（クロネコの長期保証にも加入していますけれど、クロネコの対応はどうなんでしょうねぇ…）。&lt;/p&gt;&#10;&lt;p&gt;結局、来週に佐川急便が我が家に手配され、引取にくるとのこと。「ご丁寧に有難うございました」と言って切りました。&lt;/p&gt;&#10;&lt;p&gt;特に保証書をを要求されませんでしたが、大丈夫なのかな？ネット通販では、保証書無しで交換したことがあります。まぁ、購入の記録は残っていますしねぇ。取扱説明書の裏表紙なので、必要がなければ出したくありません。必要であればまた要求するでしょう。そもそも、保証対象になるかどうか、まだわからないですし。しかし、特に落下などもなく、床もフローリングの狭い部屋です。問題が起きるとは、思えない。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B0093X8WBE&amp;linkId=5fd109201561a2c0092555e260d4be9a"&gt;&lt;/iframe&gt;今のところはまだ好印象。でも、本番はこれから。スムーズに、無償で修理されることを期待していますが、さてどうなるか…。タイヤって、買うと一万円くらいするんです…。これは困るなぁ。</description></item><item><title>MacBookにするか、MacBook Proにするか</title><link>https://hack-le.com/mbormbp/</link><pubDate>Thu, 18 Aug 2016 22:36:12 +0900</pubDate><guid>https://hack-le.com/mbormbp/</guid><description>&lt;p&gt;やや不思議な悩みかもしれませんが、MacBookにするか、それともMacBook Proの新型(2016)を待つかで悩んでいます。いずれにせよ、MacBook Proの新型の発表は待たなくてはなりませんが。MacBook Airは私が現在愛用しているマシンですけれど、難しい立ち位置になりましたね。&lt;/p&gt;&#10;&lt;h2 id="どこまでの作業をノートパソコンでやるか"&gt;どこまでの作業をノートパソコンでやるか&#10;&lt;/h2&gt;&lt;p&gt;MacBookとMacBook Proは、明確にターゲット層が異なりますから、この二機種で悩むのは一見妙なことです。しかし、個人の利用においてノートパソコンの用途は必ずしも明確ではありません。私などはデスクトップのMacを使って作業をすることが多く、最近は通勤時間が惜しいということで、必要がなければ在宅での勤務を許可してもらっているのですが、そうなるとノートパソコンに求められる機能というのは限定的です。しかし、今後どうなるのかわからないのだし、できることは多いほうがよいだろうという考えもあります。&lt;/p&gt;&#10;&lt;p&gt;あくまでサブマシンとして見た時、MacBookの携帯性は非常に有難い。一方で、サブとはいえやはりスペック不足、拡張性不足は否めない面もあるでしょう。また、&lt;strong&gt;基本的な作業であるWebブラウジングが、案外もっとも処理能力を要するものの一つ&lt;/strong&gt;であることも、私を悩ませます。現に、MacBook Airを使っていると苛つきを覚えることがありますし、所有している低スペックのChromebookがイマイチ活躍できていないのも、肝心にWebブラジングであまりにももたつくことが原因です。そしてもう一つ、性能から考えるとやや値段が高い。まぁこれは仕方ないかもしれませんが。&lt;/p&gt;&#10;&lt;p&gt;一方で、MacBook ProはMacBookより明らかに快適かつ幅広い用途で使うことができます。値段もその性能を考えれば致し方無いかな。今現在のモデルは古めかしい感じが否めませんが、それも今年大きく刷新されるともっぱらの噂であり、恐らくそれは現実となるでしょう。しかし、当然のことながら、携帯性においてMacBookにはかなうはずもありません。小さなサイズでも13インチ、カバンがいっぱいになりますね。また、1.58kgという重さはさすがに気にする必要があります。&lt;/p&gt;&#10;&lt;p&gt;結局、どこまでをノートパソコンに求めるのかと、携帯性の鬩ぎ合いです。&lt;/p&gt;&#10;&lt;h2 id="macbook-airの微妙な立ち位置"&gt;MacBook Airの微妙な立ち位置&#10;&lt;/h2&gt;&lt;p&gt;現在、両機種の中間点にMacBook Airがありますが、これも微妙な立ち位置です。個人的には、今なお一番バランスが取れている機種だと思います。13インチについては店頭モデルのメモリも8GBになり、たいへん使いやすくなりました。現在2013年モデルのMacBook Airを使っていますが（この記事もそれで書いています）、たいへん満足しています。しかしながら、では次のMacノートもMacBook Airかと言われると、これは感覚として、ないだろうな、と思います。&lt;/p&gt;&#10;&lt;p&gt;やはり、&lt;strong&gt;ノートパソコンにおいて携帯性というのは非常に大きな魅力&lt;/strong&gt;です。これで、12インチとより広い画面でありながら、現在のMacBook Air 11インチよりも軽く、また遜色ない大きさのMacBookがあるとなれば、やはりそちらに魅力を感じてしまうのは致し方無いところです。処理能力も向上しているようですし。&lt;/p&gt;&#10;&lt;p&gt;MacBook Airに大きな刷新があれば、また話は変わるかもしれませんけれど、それもなさそうです。というより、MacBookがまさにその大きな刷新にあたるのでしょう。おかげでAirはディスコンの噂さえまことしやかに流れています。ディスコンはちょっと、勘弁してほしいなぁと思うのですが。&lt;/p&gt;&#10;&lt;p&gt;さらにややこしいのはiPad Proの存在です。なんと言われようと、ツリー構造のディレクトリによる管理を捨て、端末で作業もできないiPad ProをPCの代わりにする気はまったくありませんが、一般的なニーズにおいて、iPad ProがMacBook Airを食い始めているのも事実。&lt;strong&gt;前門のMacBook、後門のiPad Pro、MacBook Airの前途は多難&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="どうしたものか"&gt;どうしたものか&#10;&lt;/h2&gt;&lt;p&gt;まぁそんなわけで、次のPCはMacBookかMacBook Proの新型かと考えているわけですが、MacBookはたいへん尖ったマシンなので、色々思うところもあり、さりとてMacBook Proは、在宅作業も多い私にとって持ち出すマシンはサブであるのに、携帯性を犠牲にし過ぎていないかという気持ちもあり、微妙なところです。&lt;/p&gt;&#10;&lt;p&gt;Macはもう2年周期になってしまっているのかもしれませんが、MacBookについては例外的にまだ1年周期であるようにも思います。2017年まで、MacBookを待つのも良いかな。現在のMacBook Airも、さしあたって大きな不満があるわけではない、むしろ満足度は高いのですから。これもまた私を悩ませる、というか実は一番私を悩ませているところなのですが、もう使い始めて3年、そろそろマシンの新調をしたいという気分を抑えられなくなりつつあります。ちょっとした病気みたいなものです。&lt;/p&gt;&#10;&lt;p&gt;まぁ、秋に発表されるらしいMacBook Pro 2016を待ちますか。この待ちが、一番楽しい時かもしれません。&lt;/p&gt;</description></item><item><title>USB-microUSB変換アダプタで Raspberry Pi をコンセントに直付けして室温表示</title><link>https://hack-le.com/usbrpitemp/</link><pubDate>Sun, 07 Aug 2016 16:15:10 +0900</pubDate><guid>https://hack-le.com/usbrpitemp/</guid><description>&lt;p&gt;Raspberry PIをコンセントに直付けして、室温と湿度が表示されるような感じにしてみました。&lt;strong&gt;変換アダプタでRaspberry Piを支えるという力技&lt;/strong&gt;がホビーっぽくていいじゃないか。&lt;/p&gt;&#10;&lt;h2 id="使ったもの"&gt;使ったもの&#10;&lt;/h2&gt;&lt;p&gt;今回使ったのは以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Raspberry Pi 3&lt;/li&gt;&#10;&lt;li&gt;Raspberry Pi 3 電源アダプタ(5V/2.5A)&lt;/li&gt;&#10;&lt;li&gt;USB-microUSB変換アダプタ&lt;/li&gt;&#10;&lt;li&gt;気温・気圧・湿度センサBME280&lt;/li&gt;&#10;&lt;li&gt;OLED キャラクタディスプレイWEH001602A&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;日本橋のシリコンハウスで、OLEDのキャラクタディスプレイが棚に飾られていてつい欲しくなってしまって買ってしまい、なにか使い道はないかなぁと思って作りました。室温・湿度、あと流動的な私の予定を表示しています。&lt;/p&gt;&#10;&lt;p&gt;各パーツの使い方は「&lt;a class="link" href="//hack-le.com/45440923-2/" &gt;Raspberry Pi で使っているセンサとかGPSモジュールとかまとめ&lt;/a&gt;」を参照ということで。&lt;/p&gt;&#10;&lt;p&gt;あ、それと、今回基板にセンサ直付したんですが、これは失敗で、Raspberry Piが熱をもつ→基板に伝わる→センサに影響というコンボが起きたので、&lt;strong&gt;センサは外に出しましょう&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="言いづらい言うのが面倒なことを表示"&gt;言いづらい、言うのが面倒なことを表示&#10;&lt;/h2&gt;&lt;p&gt;私は今実家暮らし（正確な意味での実家ではありませんが、他に良い言葉も思いつきません）なのですが、父母の体感温度と私の体感温度は非常に違うらしく、私はリビングが暑くて仕方ないのです。しかし、普通に考えて30度超えは暑いと言ってよいでしょう。ということで、実際に数値を表示して、&lt;strong&gt;無言のうちに「暑い」というメッセージを送ろう&lt;/strong&gt;という狙いがまず一つ。&lt;/p&gt;&#10;&lt;p&gt;もう一つは、私の予定はたいへん流動的で、次の日どこで仕事をするのか（在宅であることも多い）毎回違い、しかもその予定は直前になって変更されるということもざらですから、それを毎回毎回伝えるのが億劫でした。まぁ同居している以上、そういう煩わしさは避けられませんが、しかし案外こういったところで我慢できなくなるのも事実。&lt;/p&gt;&#10;&lt;p&gt;まぁせめて、&lt;strong&gt;予定を表示しておけば、何度も予定を聞かれることは****なかろう&lt;/strong&gt;と、そういう気持ちで取り付けました。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00ADZIF2W&amp;linkId=5673d005238156bd954bbf8abfa22b73" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;最初はブレッドボードにパーツをぶっさしていたのですが、特に室温の表示が案外と母に好評だったので、少し真面目に運用しようかと、ユニバーサル基板に取り付けました。そして、せっかくだからと、電源アダプタのUSBの向きがちょうど上向きでしたから、USB-microUSB変換をつけて、それでRaspberry Pi本体を支えるという、たいへん雑な取り付けを行い、コンセント直付っぽくしました。この適当感、剥き出し感がいいじゃないか。&#13;&#10;&lt;h2 id="安定性がまさかのacアダプタ"&gt;安定性が…まさかのACアダプタ？&#10;&lt;/h2&gt;&lt;p&gt;しかし、いざ運用してみると、どうにも安定しません。ブレッドボード時代は安定していたので、まずハンダ不良を疑い、つけ直しました。すると、多少マシになったかなと思ったのも束の間、自室でテストしているときは問題ないのですが、いざリビングで運用を始めるとまったく安定しない。自室では数時間連続で稼働しても問題ないのに、リビングでは数分ともたない。正直、ハンダはこれ以上なんともしようがない気がするのだが…。&lt;/p&gt;&#10;&lt;p&gt;ひょっとしてと、次にUSB-microUSB変換アダプタを疑いました。ちょっと考えづらいですが、いかにも中華の怪しげな製品ですし。で、通常のUSB-microUSBケーブルに変更してみたのですが、やはりダメ。変換アダプタではなさそう。&lt;/p&gt;&#10;&lt;p&gt;次に疑ったのは、ACアダプタです。自室のテスト時とリビングでの運用では、ACアダプタが異なりました。しかし、リビングで用いているACアダプタは、Raspberry Pi 3で使うための2.5Aという高出力な代物。お値段もそこそこします。一方、自室で使ったACアダプタは、他のオーディオ製品の付属品で、1.6A程度のもの。&lt;/p&gt;&#10;&lt;p&gt;うーんしかし、最大電流はそうでも、安定的かどうかとなれば、それは仕様には見えないものですから、ダメもとでも取り替えてみるしかない。実際、今までRaspberry Piを使っていて、ACアダプタを変えるとよくなった、ということをよく経験してきました。あり得る、か。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01COSONFS&amp;linkId=1b367eed114c320c0ef28a14be4cf1aa" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;というわけで取り替えてみると……**安定しました**。えぇーという感じです。ダメだったのは「[USB ACアダプタ 5V/2.5A（microB USBケーブル付） - スイッチサイエンス](https://www.switch-science.com/catalog/2649/)」で、恐らくAmazonで売っている←も同じだと思うのですが、2.5A出力できるということで、定番ではないでしょうか。しっかりしていそうだと思ったのですが…こういう結果でした。よかったほうは、確かBluetoothスピーカーの付属品なのでよくわかりません。。。&#13;&#10;&lt;p&gt;しかし、ブレッドボードではこの電源アダプタで問題もなかったんですよねぇ…うーん…？なんとも釈然としません。しかし、結果は結果として受け止める以外にありません。まだ私の見落としている瑕疵があるのかもしれませんが、このACアダプタに対する信頼は、ちょっと揺らぎました。&lt;/p&gt;</description></item><item><title>Python3で意図せずしてfloatに…VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future</title><link>https://hack-le.com/numpywarning/</link><pubDate>Wed, 03 Aug 2016 02:35:44 +0900</pubDate><guid>https://hack-le.com/numpywarning/</guid><description>&lt;p&gt;Pythonで、以前から「VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future」という警告が出て、なんだろうなと思っていたのですが、どうやら意図せずして要素数がfloatに、つまりary[3]となるべきところがary[3.0]のような状況になっていました。python3では6/2=3.0なんですね。&lt;/p&gt;&#10;&lt;h2 id="除算すると小数に"&gt;除算すると小数に&#10;&lt;/h2&gt;&lt;p&gt;Python３では、普通に / を用いて除算すると、整数同士でもfloatになるようです。具体的には、6/2 = 3.0 となります。これを避けるには、 / ではなく // を用います。すると、6//2 = 3 です。また、7//2 = 3です。正直こちらの挙動のほうが馴染みがあります…。&lt;/p&gt;&#10;&lt;p&gt;これは有名というか当たり前なんでしょうけれど、恥ずかしながら知りませんでした（参考：「&lt;a class="link" href="http://minus9d.hatenablog.com/entry/20131015/1381849395" target="_blank" rel="noopener"&#10; &gt;Python 3ではまったこと - minus9d&amp;rsquo;s diary&lt;/a&gt;」）。環境によって警告が出たり出なかったりしたのは、バージョン違いによるものだったのか…。&lt;/p&gt;&#10;&lt;p&gt;警告というか、本来エラーが出るべきところです。実際、通常はエラーです。が、私は今回numpyを使っていて、numpyだとary[3.0]のように書いてもちゃんと処理してくれるようなのです。が、間違いは間違いなので、警告が出る、といったところでしょうか。&lt;/p&gt;&#10;&lt;h2 id="numpyonesはデフォルトfloat64"&gt;numpy.onesはデフォルトfloat64&#10;&lt;/h2&gt;&lt;p&gt;もう一つnumpy絡みで。&lt;a class="link" href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html" target="_blank" rel="noopener"&#10; &gt;numpy.ones — NumPy v1.11 Manual&lt;/a&gt;によると、numpy.onesはデフォルト値がfloat64。なので、numpy.onesを演算に組み込むと、値がfloatになってしまいます。これも引っかかりました。整数の演算に組むこむのであれば、dtypeでintを指定してやらないといけません。&lt;/p&gt;&#10;&lt;p&gt;動的型付け言語は便利ですが、意識しなくてよいわけではないですしね。こういう間違いをすると凹みます。&lt;/p&gt;</description></item><item><title>最近SSDなどストレージがまた安くなりましたね</title><link>https://hack-le.com/ssdstrage/</link><pubDate>Wed, 27 Jul 2016 18:15:12 +0900</pubDate><guid>https://hack-le.com/ssdstrage/</guid><description>&lt;p&gt;ストレージがまた最近安いですね。上図はシリコンパワーの240GBSSDの価格推移チャートですが、だいたい去年の2月くらいから一気に安くなったようです。去年の11月にSSDを新調しましたが、結果的には一番高い時期だったかな…。&lt;/p&gt;&#10;&lt;h2 id="480gbクラスが12000円240gbで6000円"&gt;480GBクラスが12000円、240GBで6000円…&#10;&lt;/h2&gt;&lt;p&gt;SSDが本当に安い。「&lt;a class="link" href="http://akiba-pc.watch.impress.co.jp/docs/price/monthly_repo/1012316.html" target="_blank" rel="noopener"&#10; &gt;240～480GB SSDを中心に廉価機種が増加、「謎製品」扱いの960GBが税抜き19,999円 - AKIBA PC Hotline!&lt;/a&gt;」によると、6,000円を割る240GBクラスもあるそうな。実際カカクコムのグラフ見ても、最近本当に安い。480GBで、探してみると11,000円を割っているのもNTT-Xストアにありました…（「&lt;a class="link" href="http://nttxstore.jp/_IIUL_SL14676337_kkc_kkc" target="_blank" rel="noopener"&#10; &gt;シリコンパワー 【SSD】SATA3準拠6Gb/s 2.5インチ 7mm 480GB SP480GBSS3S55S25 - NTT-X Store&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;一例として、この界隈で比較的息が長いっぽいものの価格チャートを記事冒頭に引用しましたが、これを見るとだいたい去年の2月くらいに一気に安くなって、それからまだじわじわと安くなっています。他の製品について見ても、だいたいそんな感じなので、全体としてもそういう流れなのでしょう。&lt;/p&gt;&#10;&lt;p&gt;私が今のMac miniで新しいSSDに買い換えたのが去年の11月でしたけれど、振り返ってみると、一番高い時期に購入してしまったのかな。まぁ、SSDの相場は水物なので、仕方ありません。それに、あの時はもう何かしらマシンをいじりたくて仕方なかったので、2月まで待つとか絶対に無理でしたし。&lt;/p&gt;&#10;&lt;h2 id="欲しいなぁとは思うけれど"&gt;欲しいなぁとは思うけれど&#10;&lt;/h2&gt;&lt;p&gt;まぁそんなわけなので、ちょっとまた新しく買うには早すぎるのですが、チャートを見たりSSDが安い、という記事をみる度に、&lt;strong&gt;ああ欲しいなぁ&lt;/strong&gt;と思ってしまうわけです。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="http://akiba-pc.watch.impress.co.jp/docs/price/monthly_repo/1012315.html" target="_blank" rel="noopener"&#10; &gt;外付け8TB HDDの特価品が税抜き19,999円に、3TBは過去最安クラスの6,480円を記録 - AKIBA PC Hotline!&lt;/a&gt;」という記事もあるように、SSDがというよりストレージ全体が安くなっている感じでしょうか。2TBハードディスクも、ようやくタイの洪水（もう5年前…あの頃相場はすぐに戻ると言っていたアナリストは今何しているのだろう）前の水準になりました。やっすい。&lt;/p&gt;&#10;&lt;p&gt;でもHDはさすがにもういりません。というか、データ容量は少なくしていきたいと思っています。有効活用できればいいんですけどね。常に自分の蔵書データを機械学習させて、自分の知りたいこと、関心のあることについて答えてくれるプログラムとか、できないものかしら。そういうのがあれば、HD容量を増やすことも考えるのですが。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B017D7H7IU" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;閑話休題。しかし、SSDはまだ活用の余地があります。自作のLinux用PCがあるのですが、これは大昔MBAについていたフラッシュストレージを流用しているので、ここに2.5インチSSDを突っ込むのは大いにありです。240GBならそんなにお値段しません。Amazonでも6,000円台で買えます。&#13;&#10;&lt;p&gt;いやまぁ…別にそんな焦って買う必要はまるでないんですけどね。ただ見ているとふつふつと物欲が…。あかん、しっかりせいよ俺、あかん。&lt;/p&gt;</description></item><item><title>nginxの設定ファイル nginx.conf の読み方 超入門</title><link>https://hack-le.com/nginx/</link><pubDate>Thu, 21 Jul 2016 20:06:46 +0900</pubDate><guid>https://hack-le.com/nginx/</guid><description>&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ir-jp.amazon-adsystem.com/e/ir?t=hackle12-22&amp;l=as2&amp;o=9&amp;a=4774178667"&gt;&lt;/p&gt;&#10;&lt;p&gt;このサイトはapacheではなくnginxで稼働しています。といっても、主には勉強のためです。本記事は、私のように最近nginxを触り始めた人に向けて、「&lt;strong&gt;最初の状態のnginx.confにある各項目の意味がなんとなくわかるようになること&lt;/strong&gt;」を目的とした記事です。何はともあれ、まずはここからだと思うのです。&lt;/p&gt;&#10;&lt;h2 id="設定ファイルの最初の状態"&gt;設定ファイルの最初の状態&#10;&lt;/h2&gt;&lt;p&gt;nginxの設定ファイルは、/etc/nginx/nginx.confです。Version 1.6.3においては、最初は以下の状態になっています。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;user&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;worker_processes&lt;/span&gt; &lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;error_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/error.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;pid&lt;/span&gt; &lt;span class="s"&gt;/run/nginx.pid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;events&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;worker_connections&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;log_format&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$remote_addr&lt;/span&gt; &lt;span class="s"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;$remote_user&lt;/span&gt; &lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$time_local]&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$request&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$status&lt;/span&gt; &lt;span class="nv"&gt;$body_bytes_sent&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$http_referer&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$http_user_agent&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$http_x_forwarded_for&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/access.log&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;sendfile&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;tcp_nopush&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;tcp_nodelay&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;keepalive_timeout&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;types_hash_max_size&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/mime.types&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;default_type&lt;/span&gt; &lt;span class="s"&gt;application/octet-stream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Load modular configuration files from the /etc/nginx/conf.d directory.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# See http://nginx.org/en/docs/ngx_core_module.html#include&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# for more information.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/conf.d/*.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="s"&gt;default_server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:80&lt;/span&gt; &lt;span class="s"&gt;default_server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="s"&gt;/usr/share/nginx/html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Load configuration files for the default server block.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/default.d/*.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;404&lt;/span&gt; &lt;span class="s"&gt;/404.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/40x.html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="mi"&gt;502&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt; &lt;span class="mi"&gt;504&lt;/span&gt; &lt;span class="s"&gt;/50x.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/50x.html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="基礎知識ディレクティブコンテキスト"&gt;基礎知識：ディレクティブ、コンテキスト&#10;&lt;/h2&gt;&lt;p&gt;早速見ていきます…といきたいところですが、まず基礎知識を確認します。&lt;/p&gt;&#10;&lt;p&gt;まずざっと見渡してみると、http{ }とかserver{ }、location / {}などが目につきます。これらは&lt;strong&gt;ディレクティブ&lt;/strong&gt;と呼ばれる、基本的な構成要素です。ブロック{ }だけではなく、includeなどもディレクティブです。つまり、ブロック{ }で囲む構文と、include hoge;のように、セミコロンを使った構文があり、ディレクティブによって構文が決まっています。&lt;/p&gt;&#10;&lt;p&gt;ブロック{ }内の記述は、そのブロック内でのみ有効です。その範囲を&lt;strong&gt;コンテキスト&lt;/strong&gt;といいます。たとえば、&lt;strong&gt;httpディレクティブのブロック内は、httpコンテキストと定義されます&lt;/strong&gt;。ディレクティブによって、どのコンテキストで使えるかが決まっているので、非常に重要なポイントです。たとえば、serverディレクティブはhttpコンテキスト内でしか使えません。また、明示されていませんが、&lt;strong&gt;どのブロックにも囲まれていないところはmainコンテキストとして扱われます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;以上を基礎知識として、一つ一つ見ていきます。&lt;/p&gt;&#10;&lt;h2 id="解説"&gt;解説&#10;&lt;/h2&gt;&lt;p&gt;では、見ていきましょう。&lt;/p&gt;&#10;&lt;h3 id="mainコンテキスト内"&gt;mainコンテキスト内&#10;&lt;/h3&gt;&lt;p&gt;まずはmainコンテキスト内の記述から。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;user&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;worker_processes&lt;/span&gt; &lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;error_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/error.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;pid&lt;/span&gt; &lt;span class="s"&gt;/run/nginx.pid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;まず、user ninx;は、nginxの実行ユーザーをnginxとする、という意味です。通常このままで良いと思いますが、Debian系列においてはwww-dataにするのが慣習だそうで、実際WikiのソフトウェアDokuWikiのサポートページでは、Ubuntu + nginxでのインストール案内でユーザー名をwww-dataとしています（参考：「&lt;a class="link" href="https://www.dokuwiki.org/ja:install:nginx" target="_blank" rel="noopener"&#10; &gt;ja:install:nginx [DokuWiki]&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;worker_processesディレクティブは、その名の通りワーカーのプロセス数です。&lt;strong&gt;nginxは、複数のワーカープロセスを、一つのマスタープロセスで制御する仕組み&lt;/strong&gt;で、ワーカープロセスは基本的にCPUのコア数と同じにしておけばよいのですが、autoとすることで、自動的にCPUのコア数分割り当ててくれます。&lt;/p&gt;&#10;&lt;p&gt;error_logディレクティブは、errorファイルの場所です。syslogと同様のパラメータによるエラーレベルも指定できて、指定しない場合はerror以上のエラーが吐き出されます。&lt;/p&gt;&#10;&lt;p&gt;pidディレクティブは、先述のマスタープロセスのPIDを出力する、PIDファイルのパスを指定します。&lt;/p&gt;&#10;&lt;h3 id="eventsコンテキスト内"&gt;eventsコンテキスト内&#10;&lt;/h3&gt;&lt;p&gt;nginxの特徴にイベント駆動型であることがよく挙げられますが、それに関するコンテキストです。このコンテキストは省略できません。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;events&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;worker_connections&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;worker_connectionsディレクティブは、一つのワーカーが処理できるコネクション数を指定します。チューニングのポイントになりそうですが、まぁ最初はこのままでよいかと。&lt;/p&gt;&#10;&lt;h3 id="httpコンテキスト内"&gt;httpコンテキスト内&#10;&lt;/h3&gt;&lt;p&gt;次に、httpコンテキスト内を。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;log_format&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$remote_addr&lt;/span&gt; &lt;span class="s"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;$remote_user&lt;/span&gt; &lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$time_local]&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$request&amp;#34;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$status&lt;/span&gt; &lt;span class="nv"&gt;$body_bytes_sent&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$http_referer&amp;#34;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$http_user_agent&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$http_x_forwarded_for&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/access.log&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;sendfile&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;tcp_nopush&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;tcp_nodelay&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;keepalive_timeout&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;types_hash_max_size&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/mime.types&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;default_type&lt;/span&gt; &lt;span class="s"&gt;application/octet-stream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Load modular configuration files from the /etc/nginx/conf.d directory.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# See http://nginx.org/en/docs/ngx_core_module.html#include&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# for more information.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/conf.d/*.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Additional configuration omitted for brevity&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;log_formatディレクティブは、ログファイルの書式を指定し、その書式に名前をつけます。ここでは、mainという名前の書式を作っています。&lt;/p&gt;&#10;&lt;p&gt;access_logディレクティブは、アクセスログのパスと、その書式を指定します。書式の指定には、log_formatで定義したものを使用します。&lt;/p&gt;&#10;&lt;p&gt;sendfileディレクティブは、内部的にsendfile()システムコールを用いるかどうかを指定します。tcp_nopushディレクティブは、sendfileディレクティブ有効時に、TCP_NOPUSHオプションを有効にするかどうかを指定します（LinuxではTCP_CORKオプションだそうです）。有効にすると、最も大きなパケットサイズで送信します。tcp_nodelayディクレティブは、tcp_nopushと同じく、TCP_NODELAYオプションを有効にするかどうかを指定します。小さなパケットを待たずに送信するものとのことです。&lt;/p&gt;&#10;&lt;p&gt;これらは高速化のためのオプションで、非常に内部的なものですから、ちょっと（いやだいぶ）難しいのですが、基本はonにしておいてよいものと思います。ただ、何か問題が起きたら、offにしてみるのも一つかもしれません（参考「&lt;a class="link" href="http://kore1server.com/287/Laravel%E3%81%A8Nginx%E3%81%AE%E5%BF%AB%E9%80%9F%E4%BB%95%E7%AB%8B%E3%81%A6%E3%80%81%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E6%B7%BB%E3%81%88%E3%81%AA%E3%81%84%E3%81%A7%E2%80%A6" target="_blank" rel="noopener"&#10; &gt;LaravelとNginxの快速仕立て、キャッシュを添えないで…&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;keepalive_timeoutディレクティブは、クライアントと常時接続する時間を指定します。ずっとアクセスしてくれているユーザーに対して、いちいち繋ぎ直したりしないためのものですね。しかし繋ぎ続けることは負荷になりますし、パフォーマンスとリソースのトレードオフです。&lt;/p&gt;&#10;&lt;p&gt;types_hash_max_sizeディレクティブの前に、includeディレクティブを見ます。&lt;/p&gt;&#10;&lt;p&gt;includeディレクティブは、設定ファイルを取り込むもので、ここで取り込んでいるのは/etc/nginx/mime.typesです。MIMEタイプとは、Webの世界における拡張子みたいなもので、たとえばhtml拡張子は、MIMEタイプにおいてはtext/htmlです。「&lt;a class="link" href="http://www.tohoho-web.com/wwwxx015.htm" target="_blank" rel="noopener"&#10; &gt;拡張子とMIMEタイプ&lt;/a&gt;」の解説がわかりやすいです。その関連付けをするのがtypesディレクティブで、mime.typesを見ると、ずらずらと関連付けリストが並んでいます。&lt;/p&gt;&#10;&lt;p&gt;で、そのうえでtypes_hash_max_sizeディレクティブですが、「&lt;a class="link" href="http://nginx.org/en/docs/http/ngx_http_core_module.html#types_hash_max_size" target="_blank" rel="noopener"&#10; &gt;Module ngx_http_core_module&lt;/a&gt;」および「&lt;a class="link" href="http://nginx.org/en/docs/hash.html" target="_blank" rel="noopener"&#10; &gt;Setting up hashes&lt;/a&gt;」に解説があるのですけれど、ちゃんと理解できていません…。まぁとりあえず設定ファイルのままで。&lt;/p&gt;&#10;&lt;p&gt;default_typeは、MIMEタイプがわからなかった時に用いられるものです。ここでは、application/octet-streamというMIMEタイプになります（参考：「&lt;a class="link" href="http://heartbeats.jp/hbblog/2012/02/nginx03.html" target="_blank" rel="noopener"&#10; &gt;nginx連載3回目: nginxの設定、その1 - インフラエンジニアway - Powered by HEARTBEATS&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;また、最後にincludeでconf.dディレクトリ以下のものを読み込むようになっています。一つの設定ファイルにあれこれ書くと管理しづらいので、たとえば管理するサーバーごとなどに、設定ファイルをわけたほうが、使いやすいです。&lt;/p&gt;&#10;&lt;h3 id="serverコンテキスト内"&gt;serverコンテキスト内&#10;&lt;/h3&gt;&lt;p&gt;serverコンテキストは複数作れて、また先に記述したほうが優先される、というわけではないことに注意しなければいけません。特に複数のサーバーを管理し、デフォルトサーバーが何かを決めるうえでは注意。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="s"&gt;default_server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:80&lt;/span&gt; &lt;span class="s"&gt;default_server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="s"&gt;/usr/share/nginx/html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Load configuration files for the default server block.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/default.d/*.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;404&lt;/span&gt; &lt;span class="s"&gt;/404.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/40x.html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="mi"&gt;502&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt; &lt;span class="mi"&gt;504&lt;/span&gt; &lt;span class="s"&gt;/50x.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/50x.html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;listenディレクティブは、使用するIPアドレス、ポートを指定するものです。また、default_serverオプションをつけると、それがデフォルトサーバーとして扱われます。listen 80;は、ポート番号80を利用することを示します。また、listen [::]:80;ですが、これはIPアドレス:ポート番号の書式で、かつ[::]は…これは、IPv6のものですね。まぁ、IPｖ６アドレスの全部くらいの扱いと思えばよいと思います。このように、listenディレクティブは一つのserverコンテキスト内で複数使えます。&lt;/p&gt;&#10;&lt;p&gt;server_nameディレクティブは、ホスト名を指定します。server_name _;は、catch_allを意味します（参考：「&lt;a class="link" href="http://nginx.org/en/docs/http/server_names.html" target="_blank" rel="noopener"&#10; &gt;Server names&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;rootディレクティブは、ドキュメントルートを指定します。つまり、そのWebサーバーにおけるツリー構造の最上部となるディレクトリですね。&lt;/p&gt;&#10;&lt;p&gt;includeディレクティブは解説済みなので飛ばし。&lt;/p&gt;&#10;&lt;p&gt;locationディレクティブは、任意のURI毎に異なる設定をするためのものです。ここではURIが / に一致するもの…まぁつまり全部ですね。中身は空なので、影響しません。locationディレクティブには修飾子があって、 locationに=とか~とかがついていたりします。マッチの仕方を完全一致にしたり正規表現にしたりといったことを示します。詳しくは「nginx location 修飾子」とかで調べる。また、名前をつけてやれば、location @hogeのような使い方も可能。&lt;/p&gt;&#10;&lt;p&gt;要は、phpファイルにアクセスがあったときだけ挙動を変えたり、特定のページのURIが変わったので、そのページの時だけリダイレクトで飛ばしたりといった風に使うものです。&lt;/p&gt;&#10;&lt;p&gt;error_pageディレクティブは、見ればだいたいわかると思いますが、エラーが存在しない時に表示されるページを指定するものです。具体的には、404ページの在り処。その次のlocationディレクティブは、エラーページの時の設定を指定するものですが、設定が空なので影響ありません。&lt;/p&gt;&#10;&lt;p&gt;以上です。&lt;/p&gt;&#10;&lt;h2 id="参考書"&gt;参考書&#10;&lt;/h2&gt;&lt;p&gt;今回の記事作成にあたって、大いに参考にしたのは下記の「nginx実践入門」です。私のような初心者にも役立つ良い本だと思います。一冊は本を持っておいたほうが、なにかと良いでしょう。オススメです。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-WEB-DB-PRESS-plus/dp/4774178667?_mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;crid=21JOJK2B6MV6T&amp;amp;dib=eyJ2IjoiMSJ9.vQFRlJEuN4soXIeKImwPJRzEzpuuYQkx8PZRygNW7RzwEg3ffUqD1REAMbOGU4uGeQPTn919xHdFXCMgKaaQo6FJO_h9E6YMBXOY8JSHc9Mdp3oh1UlCkheTFNxoGx4Dklp-NphIufu-1peVqiW4tKTM4MhUkq-_uqua0qT7eUlmJEpAiACVAU9kuKTL55wh3DaUXsXH42QgFAWEMNaDCahT_mZpSONcgFu2WCFfxTjuMl7lP3Ih0L911iQUPDpdreXcga5YddjPpjk9vgxmuxYAgyjuPVo5wZI09iqCgh0.DAfGhD-7D3qSTrCmIOmhcM59tcOeZYNOz1bIUa0x5iI&amp;amp;dib_tag=se&amp;amp;keywords=nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80&amp;amp;qid=1708266691&amp;amp;sprefix=nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%2Caps%2C168&amp;amp;sr=8-1&amp;amp;linkCode=ll1&amp;amp;tag=hackle12-22&amp;amp;linkId=992a237dc0d1f56b0cdda500e5013667&amp;amp;language=ja_JP&amp;amp;ref=as_li_ss_tl" target="_blank" rel="noopener"&#10; &gt;https://www.amazon.co.jp/nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-WEB-DB-PRESS-plus/dp/4774178667?_mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;crid=21JOJK2B6MV6T&amp;amp;dib=eyJ2IjoiMSJ9.vQFRlJEuN4soXIeKImwPJRzEzpuuYQkx8PZRygNW7RzwEg3ffUqD1REAMbOGU4uGeQPTn919xHdFXCMgKaaQo6FJO_h9E6YMBXOY8JSHc9Mdp3oh1UlCkheTFNxoGx4Dklp-NphIufu-1peVqiW4tKTM4MhUkq-_uqua0qT7eUlmJEpAiACVAU9kuKTL55wh3DaUXsXH42QgFAWEMNaDCahT_mZpSONcgFu2WCFfxTjuMl7lP3Ih0L911iQUPDpdreXcga5YddjPpjk9vgxmuxYAgyjuPVo5wZI09iqCgh0.DAfGhD-7D3qSTrCmIOmhcM59tcOeZYNOz1bIUa0x5iI&amp;amp;dib_tag=se&amp;amp;keywords=nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80&amp;amp;qid=1708266691&amp;amp;sprefix=nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%2Caps%2C168&amp;amp;sr=8-1&amp;amp;linkCode=ll1&amp;amp;tag=hackle12-22&amp;amp;linkId=992a237dc0d1f56b0cdda500e5013667&amp;amp;language=ja_JP&amp;amp;ref=as_li_ss_tl&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Amazonを紹介しましたが…なんと、&lt;strong&gt;この本は、技術評論社のサイトでpdfとepubが購入できます&lt;/strong&gt;！（「&lt;a class="link" href="https://gihyo.jp/dp/ebook/2016/978-4-7741-7936-0" target="_blank" rel="noopener"&#10; &gt;nginx実践入門 | Gihyo Digital Publishing&lt;/a&gt;」）。しかも&lt;strong&gt;DRMフリー&lt;/strong&gt;です（購入者の情報が書籍内に記述されるソーシャルDRMですが、まぁ普段使いには困りませんので）。技術評論社の書籍は、けっこう電子書籍化されていることが多いので、欲しい本の出版社が技術評論社であったら、ポチる前に検索をかけてみると良いと思います。&lt;/p&gt;</description></item><item><title>iPhoneでSuicaが使える日も遠くない？</title><link>https://hack-le.com/iphonesuica/</link><pubDate>Mon, 18 Jul 2016 23:41:54 +0900</pubDate><guid>https://hack-le.com/iphonesuica/</guid><description>&lt;p&gt;良いニュースです。「&lt;a class="link" href="http://s-max.jp/archives/1697179.html" target="_blank" rel="noopener"&#10; &gt;今後のiPhoneがおサイフケータイ（FeliCa）に対応しそう！JR東日本がNFC Forumに働きかけ、2017年4月以降はグローバルモデルで対応にーーいよいよ日本のガラパゴス状態は解消か - S-MAX&lt;/a&gt;」によれば、NFC ForumにてFeliCaが標準仕様に含まれる見込みとなり、AppleもNFC Forumのスポンサーであるため、この標準規格を採用するだろう、つまりiPhoneがFeliCaに対応するだろう、という話です。本当にそうなれば、素晴らしいですね。&lt;/p&gt;&#10;&lt;h2 id="北海道でもsuicaが使えてハッピーです"&gt;北海道でもSuicaが使えてハッピーです&#10;&lt;/h2&gt;&lt;p&gt;モバイルSuicaを使い始め、ICカードを持ち歩かなくて良いという利便性を享受しています。関西在住ですけれど、奈良交通にも対応し、&lt;strong&gt;関西でSuicaが使えない場面はもうあまりない&lt;/strong&gt;はずです。&lt;strong&gt;北海道に行ってきたのですが、そこでも使うことができました&lt;/strong&gt;。といっても、今回私が行ったのは、札幌とその周辺くらいなので、北海道は広いですから、全域となるとどうかわかりませんが。まぁしかし、札幌から遠方に行くとなれば、北海道では電車よりもやはり車ではないでしょうか。Suicaがあれば、だいたい困らないのだと思います。&lt;strong&gt;バスでも使えた&lt;/strong&gt;のが非常に有難かったです。&lt;/p&gt;&#10;&lt;p&gt;ところで、北海道ではKitacaというのがよく使われているようですね。当然、持っていません。耳慣れない交通系ICカードのブランドを聞くと、ああ他所の地に来たのだなと思います。一番衝撃だったのは広島のパスピーです。言ってはなんですが、パチモン感があります。アレとアレを混ぜたのか？いや、そんなことはないのでしょうけれど。&lt;/p&gt;&#10;&lt;h2 id="iphoneが対応したら買ってしまうなぁ"&gt;iPhoneが対応したら買ってしまうなぁ&#10;&lt;/h2&gt;&lt;p&gt;おサイフケータイは、私がスマートフォンでAndroidを利用しているもっとも大きな理由です。まぁ、iPhoneにちょっと飽きたからというのと、iPhone 6が値段の割に当時非常に微妙に思えた（今も思っている）というのもありましたが。さすがに今年中に対応するということはないでしょうけれど、来年に対応するということは十分にありそうです。まぁ、そこからソフトウェアの対応などにまた時間がかかるにしても、少なくとも2,3年で十分にありえる話になったということですから、これは大きな進歩だと思います。&lt;strong&gt;JR東日本はじめ、関係者は相当頑張られたことでしょうが、有難いこと&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;iPhoneでおサイフケータイが普通に使えたら、高くても買い換えてしまうだろうなぁ&lt;/strong&gt;。Xperia Z3+Androidも決して悪い端末ではないのですが、まともに通信できのにいつまでも微弱なWi-fiを掴んだままだったり、アプリが異常にオチたり、レスポンスが遅かったり、タッチ精度が時々変だったり、ミュージックプレイヤーになかなかよいものがなかったり、プレミアムオートで写真を取るとご飯が光ったりと、色々細かな不満点があるのです。。。&lt;/p&gt;</description></item><item><title>奈良交通でSuicaが使えてハッピーです</title><link>https://hack-le.com/narasuica/</link><pubDate>Mon, 11 Jul 2016 23:02:41 +0900</pubDate><guid>https://hack-le.com/narasuica/</guid><description>&lt;p&gt;ちょっとローカルトーク。関西では、交通系のICで最もよく使われるのは&lt;strong&gt;ICOCA&lt;/strong&gt;です。次点でPiTaPaでしょうか。関東の人は&lt;strong&gt;Suica&lt;/strong&gt;でしょうから、関西に出張や旅行した時には、戸惑うでしょうね（逆もまた然りなんですが）。電車については、Suicaでもだいぶ問題なくなりましたが、バスは長らく対応していませんでした。&lt;/p&gt;&#10;&lt;h2 id="奈良交通でもsuica"&gt;奈良交通でもSuica！&#10;&lt;/h2&gt;&lt;p&gt;が、「&lt;a class="link" href="http://cards.hateblo.jp/entry/kansai-rosenbus-suica/" target="_blank" rel="noopener"&#10; &gt;阪神バス、阪急バス、奈良交通、京阪バスなどでSuicaやPASMOが使えるように！関西国際空港からの一部のリムジンバスもその対象です。 - クレジットカードの読みもの&lt;/a&gt;」の記事にもあるように、4月1日から主要なバスでSuicaが使えるようになりまして、奈良交通もその一つでした。公式サイト「&lt;a class="link" href="http://www.narakotsu.co.jp/rosen/cica/" target="_blank" rel="noopener"&#10; &gt;ICカード乗車券「CI-CA」｜奈良交通&lt;/a&gt;」の対応表にもあります。それでも、奈良交通で使えるというのは半信半疑でしたが（なぜならば奈良交通だから）、恐る恐るケータイを置いてみたら、ピッと反応。ちゃんと、使えました。ちょっと感動です。&lt;strong&gt;奈良交通でスマホによる電子決済する日がくるとは！&lt;/strong&gt; 今の子に&lt;strong&gt;バスカード&lt;/strong&gt;って言ってもわからないかもしれないなぁ。&lt;/p&gt;&#10;&lt;h2 id="モバイルsuicaを使いたかった"&gt;モバイルSuicaを使いたかった&#10;&lt;/h2&gt;&lt;p&gt;私は関西在住ですから、ICOCAがあれば事足りるといえばそうなのですが、Suicaには一つ、他の交通系ICにはない利点があります。&lt;strong&gt;モバイルSuicaの存在&lt;/strong&gt;です。おサイフケータイで、交通系の決済ができる。これは嬉しい。&lt;/p&gt;&#10;&lt;p&gt;おサイフケータイは実に便利です。毎日電車にのるならともかく、私は普段は車ですから、ICOCAはちょくちょく持ち歩くのを忘れます。しかし、おサイフケータイならば大丈夫。&lt;strong&gt;ICOCAを持ち歩かない日はあっても、ケータイを持ち歩かない日はない&lt;/strong&gt;。また、&lt;strong&gt;電子決済の履歴を後で参照して家計簿をつけている身としても、モバイルSuicaで交通系の決済ができれば、非常に管理しやすい&lt;/strong&gt;。実際、私の家計簿でこれまで一番適当だったのが、交通系でした。履歴を参照できないからです。それが、できるようになった。有難い。&lt;/p&gt;&#10;&lt;p&gt;おサイフケータイは、かつてはガラパゴスと揶揄された日本独自のケータイ機能の一つでしたが、これは非常に便利なものなのです。まぁそれについては、最近はAppleもGoogleもこぞって参加しようとしていることから、否定する人はもはや少数派であると思いますが。これに加えて、防水・防塵は本当によいものなので、こういった機能こそグローバル・スタンダードになって欲しいものです。&lt;/p&gt;</description></item><item><title>[書評] 人工知能は人間を超えるか：一般向けとして硬派な入門書</title><link>https://hack-le.com/aihaningenwokoeruka/</link><pubDate>Mon, 04 Jul 2016 01:12:19 +0900</pubDate><guid>https://hack-le.com/aihaningenwokoeruka/</guid><description>&lt;p&gt;&lt;a class="link" href="https://www.amazon.co.jp/gp/product/B00UAAK07S/ref=as_li_ss_il?ie=UTF8&amp;amp;camp=247&amp;amp;creative=7399&amp;amp;creativeASIN=B00UAAK07S&amp;amp;linkCode=as2&amp;amp;tag=hackle12-22" target="_blank" rel="noopener"&#10; &gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=B00UAAK07S&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=hackle12-22"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://ir-jp.amazon-adsystem.com/e/ir?t=hackle12-22&amp;l=as2&amp;o=9&amp;a=B00UAAK07S"&gt;&lt;/p&gt;&#10;&lt;p&gt;本書は人工知能の研究者・松尾豊氏による2015年の入門書で、一般向けだと思いますが、&lt;strong&gt;非常に硬派なつくり&lt;/strong&gt;となっています。今の人工知能の研究者は、長い冬の時代を耐え忍んできた人たちなので、これがまた一過性のブームではないんだ、という想いが強いのでしょう。世間一般の強い期待、逆に分野の近い研究者たちからの冷めた目に答えるべく、本書では、&lt;strong&gt;既にできていること、できそうなこと、できそうにないことを、意識して明確にしようと努めている&lt;/strong&gt;ようです。&lt;/p&gt;&#10;&lt;h2 id="適正な期待値を求めて"&gt;適正な期待値を求めて&#10;&lt;/h2&gt;&lt;p&gt;胡散臭い目で見る研究者に対しては、&lt;strong&gt;ディープラーニング&lt;/strong&gt;という技術によって、人工知能は既に実用の段階に入っている、もうこれは使える技術なんだと訴えかける一方で、一般の人には、これ（ディープラーニング）がSF映画などから想起されるような、&lt;strong&gt;夢の技術ではない&lt;/strong&gt;ことを示しています。&lt;/p&gt;&#10;&lt;p&gt;特に印象的なのは、「&lt;strong&gt;人工知能はまだ出来ていない&lt;/strong&gt;」と断言しているところでしょうか。純粋学究的な意味において、人工知能とは本当に人工的に作られた知性であるべきだが、今はまったくそのような状況ではない。そもそも、&lt;strong&gt;人工知能という言葉自体、研究者の数だけ定義があるような、実は曖昧な概念&lt;/strong&gt;であるようです（本書では、人工知能学会誌の、研究者と人工知能の定義の表を以ってそれを示しています）。人工知能という言葉から想起されるものは人それぞれですが、それはつまり、まだまだこれだと思えるようなものが出来ていないからなんでしょう。確かに、&lt;strong&gt;人工知能は出来ていない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、それでは実際的な議論はできないので、世間一般で言われている人工知能とはつまりどういうものなのか、本書では4つのパターンに類型化しています。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;単純な制御プログラム…家電にありがち&lt;/li&gt;&#10;&lt;li&gt;古典的な人工知能…将棋のプログラムや掃除のロボット&lt;/li&gt;&#10;&lt;li&gt;機械学習を取り入れた人工知能&lt;/li&gt;&#10;&lt;li&gt;ディープラーニングを取り入れた人工知能&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;歴史的経緯を踏まえながら、本書が熱く語るのは、4つ目のディープラーニングについてです。これがこそ、人工知能が三度世間の注目を浴びる要因となったものです。&lt;/p&gt;&#10;&lt;h2 id="ディープラーニングが注目されるわけ"&gt;ディープラーニングが注目されるわけ&#10;&lt;/h2&gt;&lt;p&gt;本書において、過去の人工知能研究がいかにして壁にぶつかったか、そしてそれをディープラーニングにより超えることができるかもしれないものとしています。具体的には、以下のような壁があったとのことです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;知識を集めれば賢くなるが、&lt;strong&gt;多すぎて記述しきれない&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;関係ある知識だけを取り出して使うことは難しい「&lt;strong&gt;フレーム問題&lt;/strong&gt;」&lt;/li&gt;&#10;&lt;li&gt;シマウマがシマシマのあるウマだと理解できない「&lt;strong&gt;シンボルグラウンディング問題&lt;/strong&gt;」&lt;/li&gt;&#10;&lt;li&gt;特徴量を用いる機械学習において、&lt;strong&gt;何を特徴量とするかは人間が決めなくてはいけない&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これらの壁によって、人工知能は過去大いに期待されながら、頓挫しました。大きなブームは二度あり、特に日本においては第５世代コンピュータの名の下に多額の予算を計上されながら、あまり成果が得られなかったということもあります。そうして、人工知能は冬の時代を迎えるわけです。実際、私の学生時代も、人工知能というのは、基本的には「終わった分野だ」と異分野の研究者には思われていたように思います（少なくとも私のいた研究室のスタッフは、そのように考えていたと思いますし、私もなんとなく調べて、そんなような印象を受けました）。&lt;/p&gt;&#10;&lt;p&gt;しかし、ディープラーニングならばこれらの壁を超えるかもしれない。ディープラーニングは、特徴を自ら見つけ出すことが出来る、特徴から「概念」を取り出せれば、それに名前を付けることでシンボルグラウンディング問題はクリアできるし、特徴を使って知識を表現すれば厳密にフレーム問題は解けなくても、そうそう問題は起きないだろう（人間もフレーム問題は厳密には解いていない）、と。&lt;/p&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;ディープラーニングで「概念」なるものを獲得できるかもしれないとしている&lt;/strong&gt;のですが、この概念の説明で突然言語学者ソシュールが出てきて、記号とは概念（シニフィエ）＋名前（シニフィアン）であり、概念（シニフィエ）を自ら獲得できるかもしれない、というように説明されています。うーん、ここでいきなりソシュールが出るあたりに、違和感を感じます。こういう時は、だいたい飛躍があるときです。多分、一番説明が難しく、また一番の頑張りどころで、かつポイントなのだと思います。&lt;/p&gt;&#10;&lt;p&gt;ディープラーニングにより概念（シニフィエ）を獲得する、これはつまり、どういうことなのか。ここまでがだいたい4章の内容で、5章以降で、ディープラーニングの技術的な説明をしてくれます。&lt;/p&gt;&#10;&lt;h2 id="概念を獲得するとは"&gt;概念を獲得するとは&#10;&lt;/h2&gt;&lt;p&gt;天気予報などを通して、ディープラーニングで特徴を獲得する具体的な説明をしてくれるのですが、これがなかなか難しい。正直、ここは実際に技術に触れないとちゃんと理解できないだろうと思います。少なくとも、今の私にはかなり荷が重かった。&lt;/p&gt;&#10;&lt;p&gt;ただ、実例をとおして朧げながら、イメージは掴めます。実例の中でも、&lt;strong&gt;Googleのネコ&lt;/strong&gt;は、ディープラーニングの本では必ず紹介される、有名でわかりやすい例で、本書でも取り上げられています。Youtubeなどから適当に画像を切り出して、コンピュータに学ばせたところ、ネコに反応するようなノードを得ることができた、と。あとはそれにネコのラベルを貼るだけ（その作業は人がする）。これは確かに、ディープラーニングが概念を獲得する、の具体的な意味として理解しやすい。&lt;/p&gt;&#10;&lt;p&gt;また、この例で、Googleだからできた&lt;strong&gt;膨大な計算量&lt;/strong&gt;についても触れています。昔できなかった計算が、今は出来るということも、重要です。ただ、ふと思ったのは、私が目を通した他の入門書では、むしろそういった点がことさらに強調されている印象なのですが、本書はそこまで強調しません。多分、そこは本質ではないということでしょう。&lt;/p&gt;&#10;&lt;h2 id="人工知能は人間を超えるか"&gt;人工知能は人間を超えるか&#10;&lt;/h2&gt;&lt;p&gt;ここまでの多くの記述の後に、最後にようやく、表題に直接答えるような話。表題に対する答えは、本書においてはNO、あるいは現時点で心配することではない、でしょうか。ディープラーニングで概念を獲得したとしても、それはイコール知能をもつことでは到底ありまえん。純粋学究的な人工知能には、まだまだ遠い。そこに至る糸口さえつかめていない。&lt;/p&gt;&#10;&lt;p&gt;この問題について考えるとき、&lt;strong&gt;キーワードはシンギュラリティ（技術的特異点）&lt;/strong&gt; です。等比級数a[n]=r*a[n-1]においてr&amp;gt;1となるような時がくるのか。つまり、人工知能が自分を超える人工知能を自ら生み出せる日はくるのか。これは、先の特徴表現を学習する話とは、随分離れた話です。自己再生産とは、そんな簡単なものではない。&lt;/p&gt;&#10;&lt;h2 id="総評"&gt;総評&#10;&lt;/h2&gt;&lt;p&gt;全体的に、非常に硬派な入門書だと思います。勉強になりました。内容は熱がありながらも慎重です。最近はテレビでも人工知能が取り上げられることが多くなりましたが、それによって無用な心配をしている人も多い印象です。そういう人には、本書の内容を噛み砕いて説明できれば、よいかもしれません。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00UAAK07S" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>新しいMacまでの先は長そう…Mac mini 2012を持たせなくては</title><link>https://hack-le.com/newmac/</link><pubDate>Tue, 21 Jun 2016 23:50:53 +0900</pubDate><guid>https://hack-le.com/newmac/</guid><description>&lt;p&gt;&lt;strong&gt;微妙だなぁと思いながら購入したMac mini 2012でしたが、いざ使い出してみると非常に良いマシン&lt;/strong&gt;で、もう&lt;strong&gt;三年半ほど&lt;/strong&gt;使っています。当時は非常に円高で、本体価格が6万円ほど、メモリ8GB*2が5,000円と今では信じられない価格でした。&lt;/p&gt;&#10;&lt;h2 id="3年半ほど使っているmac-mini-2012"&gt;3年半ほど使っているMac mini 2012&#10;&lt;/h2&gt;&lt;p&gt;半年ほどしてSSD 256GBをたしか17,000円ほどで購入し、二年半ほどして480GBのSSDを18,000円ほどで購入、元々あった1TBのHDと合わせてFusion Driveを構成、また256GBのSSDは何故か購入時の半値よりも高く売れて（オークション、すっかり相場が上がりましたね。売る分にはよいですが…）、それにMagicTrackpadとApple Keyboardを結局買ってしまったから、なんだかんだで、&lt;strong&gt;本体周りで10万円ほど&lt;/strong&gt;でしょうか。モニタなども合わせると、さらに数万円上乗せですが…。&lt;/p&gt;&#10;&lt;p&gt;それでも、iMacを購入することを考えれば、随分安く済んでいるし、また&lt;strong&gt;遊べてもいます&lt;/strong&gt;（ガジェット好きにとっては大事なことです）。特に480GB SSD + 1TB HDのFusion Driveなどは、拡張性の高い（高かった）Mac miniならではの構成でしょう。過去にも記事にしましたが、ある程度重い使い方をする人にとっては、Fusion DriveでSSD領域 128GBは、足りない思うんですよねぇ…（「&lt;a class="link" href="//hack-le.com/46496771-2/" &gt;Fusion Driveの感触…オススメできる人、できない人 : 或る阿呆の記&lt;/a&gt;」）。まぁ、Retinaディスプレイばかりはどうにもなりませんが。しかし、私はPCにおいてはRetinaはさほど重視していません。店頭で触っても、iPadの時のような感動は、無かった。画面が大きいし、顔とディスプレイの距離も離れているので、むべなるかな。&lt;/p&gt;&#10;&lt;h2 id="mac-proかimacかいずれにせよ来春か"&gt;Mac Proか、iMacか、いずれにせよ来春か…&#10;&lt;/h2&gt;&lt;p&gt;本当をいえば、&lt;strong&gt;Mac miniの後継に一番期待したいのですけれど、まぁ昨今の流れを見るに、期待するだけ悲しくなるだけでしょう&lt;/strong&gt;から、次のMacは、iMacか、あるいは気張ってMac Proか。まぁ、どちららかといえば、iMacでしょうか。というより、Mac Proは、Proの名を冠していながら内部拡張性が非常に乏しく、まぁ外部拡張性に舵を切ったということなのでしょうけれど、そんな、ケーブルでゴテゴテするの、嫌ですしねぇ…。&lt;/p&gt;&#10;&lt;p&gt;ただ、いずれにせよ、&lt;strong&gt;まずは次モデルを待ちたい&lt;/strong&gt;ところです。というのも、MacはGPUがネックなところがありましたが、そろそろVRが流行りだしそうなこともあって、&lt;strong&gt;次あたり、GPUの大幅な強化が期待される&lt;/strong&gt;とのこと（参考：「&lt;a class="link" href="http://iphone-mania.jp/news-111903/" target="_blank" rel="noopener"&#10; &gt;アップル、新Macに高性能GPU「Polaris」を搭載か―VR技術を視野に - iPhone Mania&lt;/a&gt;」）。そうなれば、嬉しいですね。Ocurus Riftも対応してくれると、夢が広がるのですが（参考：「&lt;a class="link" href="http://www.gizmodo.jp/2016/03/20160307noculus_riftmacgpu.html" target="_blank" rel="noopener"&#10; &gt;「Oculus RiftのMac対応はGPU性能が向上したらね」創立者、語る : ギズモード・ジャパン&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;しかし、新しいiMacはIntelのCPUの計画からいくと、早くとも来春だろうという話（参考：「&lt;a class="link" href="http://taisy0.com/2016/06/21/70819.html" target="_blank" rel="noopener"&#10; &gt;次期｢iMac｣シリーズの登場は来春か ｰ デスクトップ向け次期Coreプロセッサの登場時期が明らかに | 気になる、記になる…&lt;/a&gt;」）。まだまだ先は長い。それまで、今のMac miniをしっかり持たせなくては。&lt;/p&gt;&#10;&lt;p&gt;スペック自体は何の問題もなくて、性能だけを見れば、一年とわずこの先二年でも三年でも余裕で使えてしまいそうですが、故障というのもありますので。&lt;strong&gt;Mac mini、相変わらず爆熱&lt;/strong&gt;です。今も仮想でAndroidを動かしているのですが、&lt;strong&gt;CPU温度が85度&lt;/strong&gt;になっています。おおぅ……。今年の夏を乗り切ってくれるでしょうか……乗り切ってくれなかったら、どうしようかなぁ……。&lt;/p&gt;</description></item><item><title>Android版Chrome 51 タブとアプリの統合廃止</title><link>https://hack-le.com/47786300-2/</link><pubDate>Thu, 16 Jun 2016 08:00:44 +0900</pubDate><guid>https://hack-le.com/47786300-2/</guid><description>&lt;p&gt;いつぞやから、Android版Chromeでタブとアプリの統合なる機能が実装されました。Chromeのタブの一つ一つをアプリとして扱うよ、的なものです。Google様の言うことだからとなるべく使うようにしていたのに、いつの間にか廃止となりました。&lt;/p&gt;&#10;&lt;h2 id="いつの間にか実装されていつの間にか廃止"&gt;いつの間にか実装されていつの間にか廃止&#10;&lt;/h2&gt;&lt;p&gt;この機能がデフォルトでONになったのか、それともアップデート時に執拗に薦められてONにしたのかは覚えていませんが、最初うざったいと思ったものの、アプリとして扱えると、画面下部のナビゲーションバーを使ってタブの操作がある程度できるようになることに気づき、使うようになりました。手の小さい私におって、Xperia Z3のような大型スマホの操作は、苦労するのです。が、強烈にアピールしていた割には、&lt;strong&gt;あっさりと機能が削除&lt;/strong&gt;されました。なんだったんでしょう。この変遷は、いろんな意味でGoogleらしい。&lt;/p&gt;&#10;&lt;h2 id="過渡期の痕となったか"&gt;過渡期の痕となったか&#10;&lt;/h2&gt;&lt;p&gt;調べてみると、バージョン51からの仕様変更らしい。「&lt;a class="link" href="http://blog.nirareba.net/archives/2341" target="_blank" rel="noopener"&#10; &gt;Chrome仕様変更 タブとアプリの統合が無くなる | mixed digitable&lt;/a&gt;」の記事の人は非常に共感するところです。Chromeのタブ操作をしようと思うと、画面の上まで指を伸ばさないといけないんですよね…これがつらい。&lt;strong&gt;アプリとして操作できると、前述したように、ナビゲーションバーでタブの削除、移動ができるので、けっこう便利&lt;/strong&gt;でした。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、&lt;strong&gt;この問題の本質は、操作できる場所を画面上部に固めすぎということ&lt;/strong&gt;です。しかし、タブとアプリの垣根をなくすという試みは、Webアプリ自体を意識してのものでしょうから、どうもそんな流れはこなさそうな昨今、この機能の追加と削除を過渡期の試行錯誤として、マニアックな歴史的知識として埋没させるのは、妥当な判断と思います。実際、操作には便利でしたが、タブで埋まる起動アプリ一覧を見ていると、筋悪な感が否めませんでした。&lt;/p&gt;&#10;&lt;p&gt;なお、操作できる場所が届かない問題について、一部のAndroid端末や、iPhoneにおいては必要に応じて画面全体を縮小する、あるいは上部を下にずらすという、力技で解決しています。Xperiaでも実装されればいいのに。&lt;/p&gt;</description></item><item><title>6年続いている私的Evernoteの使い方</title><link>https://hack-le.com/47337782-2/</link><pubDate>Wed, 15 Jun 2016 08:00:21 +0900</pubDate><guid>https://hack-le.com/47337782-2/</guid><description>&lt;p&gt;（追記 2024-06-24）もう使ってません……。しかし、まぁ、こんなときもありました、という記録として記事は残します。&lt;/p&gt;&#10;&lt;p&gt;Kinksを聴いていたら8歳の甥っ子に「変な音」呼ばわりされた今日この頃、時代はどんどん変わっていきますね。そんな私がまだ学生の頃でした、Evernote を使い出したのは。まるで自分専用の Google のようなものが手軽に作れるツールに思えて、コレクター的な性向のある私は好んで使ったものです。本記事は、私のEvernoteの使い方の事例です。&lt;/p&gt;&#10;&lt;h2 id="使い始めて早6年試行錯誤の連続"&gt;使い始めて早6年、試行錯誤の連続&#10;&lt;/h2&gt;&lt;p&gt;Evernoteは便利です。WindowsとMacの両方にクライアントソフトがあることも好ましい（いまだLinuxには対応していないのですが。さりとてWeb版は使いづらい）。しかしながら、その使い方は試行錯誤の連続で、&lt;strong&gt;何度ノートブックを再構築したかわかりません&lt;/strong&gt;。再構築は今でも定期的に行います。&lt;/p&gt;&#10;&lt;p&gt;そんな&lt;strong&gt;再構築に続く再構築の果てに、何年も生き残り続けているノートブックがあります&lt;/strong&gt;。それらは頻繁に、あるいはたまに（しかし大事な場面で）使われる、実用的なノートブックといえましょう。そこの含まれるノートは、日記であったり、昔の掲示板のログであったり、家にある家電や情報機器のマニュアルであったり、ゴミ出しの日であったり、また書類作成時に参考にするテンプレートであったり、あるいは仕事で定期的にあげられる報告書の類であったりです。なるほど。そこには、重要な共通項があるように思えます。&lt;/p&gt;&#10;&lt;p&gt;本記事では、自由度が高く、それ故にどう使ってよいかわからないと言われることが多いEvernoteについて、&lt;strong&gt;紆余曲折経ながらも使い続けている私のノートブックを記すことで、一つの使い方を提示します。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="私の実例"&gt;私の実例&#10;&lt;/h2&gt;&lt;p&gt;適当に並べていきます。多少被っているような項目もありますが、気にしない。&lt;/p&gt;&#10;&lt;h3 id="食事記録"&gt;食事記録&#10;&lt;/h3&gt;&lt;p&gt;私は食事の記録をつけています。特に理由はありません。他人には主に自分が見返すためといいますが、実際のところ見返すことはほとんどありません。では何故記録をつけているのだろうか。謎です。まぁ、趣味なのだと思います。世の中には自分のへそにたまるゴミを集め続けている奇っ怪な蒐集家もいますから（「&lt;a class="link" href="http://blog.livedoor.jp/loveai0221/archives/33944909.html" target="_blank" rel="noopener"&#10; &gt;世界に実在する変わったコレクションを所有するコレクター17人 : なんでも&lt;/a&gt;」）、まぁそれに比べれば一般的な趣味だといえます。&lt;/p&gt;&#10;&lt;p&gt;以前はEvernote Foodという、Evernote公式の食事記録アプリがありましたが、それもなくなりました（「&lt;a class="link" href="//hack-le.com/45585704.html" &gt;さようならEvernote Food : 或る阿呆の記&lt;/a&gt;」）。今世にある食事記録アプリは、SNSの一環として提供されているものが多く、完全な代替アプリはないようなのですが、先の記事のコメントで紹介してもらったSnapDishアプリで今はEvernoteを利用しています。SNSなのにSNSに参加しないことによる、妙な疎外感を感じつつ（「&lt;a class="link" href="//hack-le.com/archives/46946712-2/" &gt;Evernote Food の代替に SnapDish は使えるか : 或る阿呆の記&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;p&gt;食事は毎日するものなので、必然的にEvernoteも毎日使うことになるのですが、それはけっこう大事なことだと思います。毎日使っていると、なんとなく、慣れます。この慣れが、人間には大事なことらしいと、思うようになりました。&lt;/p&gt;&#10;&lt;h3 id="日記"&gt;日記&#10;&lt;/h3&gt;&lt;p&gt;一時期、日記をデジタルに移行しようとしたことがありました。その際、メモの保存先としてEvernoteを使いました。まぁ、今はアナログ的な、紙ノートのメモに戻っているのですが。今でも、読書メモやひとことメモ、写真メモなどを時折残しています。&lt;/p&gt;&#10;&lt;h3 id="家電や情報機器のマニュアル"&gt;家電や情報機器のマニュアル&#10;&lt;/h3&gt;&lt;p&gt;家にある家電や情報機器のマニュアルを保存しています。ネット上で公開されているものはもちろん、付属しているクイックスタート的なペラ紙も、写真で撮影して保存します。こういうのは、探せばだいたい出てくるものではあるのですが、意外と探すのが面倒臭いものです。&lt;/p&gt;&#10;&lt;h3 id="ライセンスコード暗証番号"&gt;ライセンスコード、暗証番号&#10;&lt;/h3&gt;&lt;p&gt;オフィスや購入したソフトウェアのライセンスコードや、銀行の暗証番号などを写真で記録しています。こういった機密情報を保存する場合は、必ずEvernoteの二段階認証を利用しなくてはなりません（「&lt;a class="link" href="https://evernote.com/intl/jp/contact/support/info/2fa/" target="_blank" rel="noopener"&#10; &gt;Evernote の 2 段階認証について | Evernote&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、普通のWebページのパスワードについては、パスワード管理マネージャを利用しています。あくまで、物理的に保存する必要があるコードの書かれた紙など対象です。&lt;/p&gt;&#10;&lt;h3 id="税金保険地域のお知らせ"&gt;税金、保険、地域のお知らせ&#10;&lt;/h3&gt;&lt;p&gt;要は身の回りのお知らせということです。&lt;/p&gt;&#10;&lt;h3 id="掲示板のログ"&gt;掲示板のログ&#10;&lt;/h3&gt;&lt;p&gt;すぐに流れてしまうような匿名掲示板のログを保存します。これは、案外、けっこう見ます。「昔○○について話し合ったことがあるはずなんだけど…」という朧げな記憶にヒットしてくれます。これは、Googleではできないことです。特にマイナーなスレッドであればあるほど…そして、掲示板のスレッドのほとんどは、マイナーなスレッドです。&lt;/p&gt;&#10;&lt;h3 id="気に入ったコンテンツ"&gt;気に入ったコンテンツ&#10;&lt;/h3&gt;&lt;p&gt;画像とか、Web小説とか、面白いテキストとか、コピペとか、なんでもよいです。EvernoteWebクリッパーでクリップできるものなら、なんでも。&lt;/p&gt;&#10;&lt;p&gt;あとで検索すればよいではないか、とか、ブックマークすればよいではないか、と思う向きもあるかもしれません。それは大きな間違いです。ネット上のあらゆるコンテンツが、ずっとネット上にあり続ける保証なんて、どこにもありません。&lt;strong&gt;ネット上の創作物は、ある日突然消えます&lt;/strong&gt;。それは必ずしもアーカイブされていません。また、一度辿り着いた場所であるはずなのに、どうやっても辿りつけない場所というのもがありますが、それはこういう「自分にとって」面白いコンテンツでよくあります。&lt;/p&gt;&#10;&lt;p&gt;忘れられる権利などが叫ばれて久しい昨今ですが、インターネットは、消えてほしい情報は消えず、消えてほしくない情報は消える場所です。&lt;/p&gt;&#10;&lt;h3 id="なんらかのプロジェクトで必要になって集中的に集めた資料"&gt;なんらかのプロジェクトで必要になって集中的に集めた資料&#10;&lt;/h3&gt;&lt;p&gt;仕事で多いですが、個人的なプロジェクトでもよいです。何かプロジェクトであって、そのために集めた、Webページ、pdf、いろいろなものを一つのノートブックに集めると、後々になっても、参照することがちょくちょくあります。「あのノートはあのノートブックにあるはず」というのが、なんとなく記憶に残っていて、さっと探しやすいし、関連した情報が集まっているので、けっこう便利です。&lt;/p&gt;&#10;&lt;h3 id="pdfの報告書テンプレートなど"&gt;PDFの報告書・テンプレートなど&#10;&lt;/h3&gt;&lt;p&gt;これはまず仕事でしょうが、pdfで上がってくる、あるいは自分で仕上げた報告書を集めておくと、後で検索で引っかかってくれて、たいへん便利です。また、PDFでなんらかの書類のテンプレートなどあると、これも便利で、テンプレートはたまにしか使わないものが多いですが、こういうものが検索できると、非常に捗ります。まぁ、仕事でEvernoteなんて使えない、という人も多いでしょうが、使える環境であれば、手軽なPDF全文検索システムとして有効活用できます。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;雑多ですが、以上のノートブックが、数年間の時の流れに耐え続けている私のEvernoteノートブックです。大別すると、以下の二種類だと思います。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ローカル情報など、Googleで探しづらい情報&lt;/li&gt;&#10;&lt;li&gt;一覧にしたい情報&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;要は、いかにして自分に最適化するか&lt;/strong&gt;、なのだと思います。逆に、&lt;strong&gt;一般的なこと、万人向けのことは、その都度Google検索するのが一番よいでしょう&lt;/strong&gt;。そして&lt;strong&gt;一番大事なことは、適当にダラダラと続けることではないでしょうか&lt;/strong&gt;。日記もそうですけれど、完璧主義は、続きませんよ。&lt;/p&gt;</description></item><item><title>関西在住だがモバイルSuicaデビュー</title><link>https://hack-le.com/47750880-2/</link><pubDate>Sat, 11 Jun 2016 22:56:55 +0900</pubDate><guid>https://hack-le.com/47750880-2/</guid><description>&lt;p&gt;転勤族の家庭で育ち、生まれも育ちも関西人というわけではありませんが、もう関西に住み始めてかれこれ15年近くになります。私の言葉はいまだに生粋の人からは関西弁と認めてもらえていませんけれど、一番馴染みのある地域が関西です。その証拠に、交通系ICといえばICOCAが思い浮かびます。ICOCAは便利なのですが……このたび、Suicaデビューしました。おサイフケータイ、すなわちモバイルSuicaのため、です。ICOCAの牙城関西で、モバイルSuicaはどうなのか？&lt;/p&gt;&#10;&lt;h2 id="androidスマートフォンのiphoneに対する優位性"&gt;AndroidスマートフォンのiPhoneに対する優位性&#10;&lt;/h2&gt;&lt;p&gt;&amp;ndash;2016年10月26日追記：&lt;strong&gt;想像していたよりもずっと早く、iPhoneでおサイフケータイ、しかもSuicaが対応しました&lt;/strong&gt;。びっくりです（参考：「&lt;a class="link" href="//hack-le.com/iphone7/" &gt;このiPhone 7は欲しい…FeliCa対応、256GB、防水、円高…Macはなし&lt;/a&gt;」）。というわけでこの節の内容は古いです。nanacoなど他のサービスはまだAndroidのみですが、時間の問題でしょう。&amp;ndash;&lt;/p&gt;&#10;&lt;p&gt;Androidスマートフォンの、iPhoneに対する明らかな優位の一つは、やはりおサイフケータイだと思います。まぁ、北米ではApple Payがデビューして久しいですが、日本に上陸するのはまだ先のことになりそうですし、なったとしても、交通機関で使えることはないでしょう。おサイフケータイが使えるジャケットなどもありますが、スマートなんだか不格好なんだか、という感が否めません。&lt;/p&gt;&#10;&lt;p&gt;Xperia Z3を使い始めて一年以上経ちましたが、クレジットカードの登録などが面倒臭くて対応しなかったモバイルSuicaに、ついに手を出しました。このためにわざわざクレジットカード（ビューカード）を作るのは億劫でしたが、これも年会費ただのため…。&lt;/p&gt;&#10;&lt;h2 id="関西でも問題ない"&gt;関西でも問題ない&#10;&lt;/h2&gt;&lt;p&gt;関西はICOCAとPiTaPaがよく使われていますが、最近はSuicaもだいぶ対応してきました。電車はほとんど問題ありません。特に最近のニュースで大きかったのは、バスの対応でしょうか（「&lt;a class="link" href="http://cards.hateblo.jp/entry/kansai-rosenbus-suica/" target="_blank" rel="noopener"&#10; &gt;阪神バス、阪急バス、奈良交通、京阪バスなどでSuicaやPASMOが使えるように！関西国際空港からの一部のリムジンバスもその対象です。 - クレジットカードの読みもの&lt;/a&gt;」）。主な電車とバスで使えれば、まず困ることはないでしょう。奈良交通でも使えるのは意外過ぎです……。奈良交通はけっこうすごいところ走ります。ローカルトークですが。&lt;/p&gt;&#10;&lt;h2 id="これで家計簿がつけられる"&gt;これで家計簿がつけられる&#10;&lt;/h2&gt;&lt;p&gt;私が電子決済にこだわる理由には、現金を出さなくて済むという便利さ、セキュアさもあるのですが、もう一つ大きな理由として、記録機能があります。&lt;/p&gt;&#10;&lt;p&gt;私はここ二年ほど、ようやく真っ当に家計簿をつけられるようになったのですが、それというのも電子決済で記録が残っているからです。ふと思った時に、記録を参照して、表計算ソフトで家計簿をつける、このスタイルでなくては、どうにも私は家計簿をつけられないらしい。レシートなんて絶対に管理できない。といって、出入金を自分でしっかり記録することもできない。&lt;/p&gt;&#10;&lt;p&gt;そんな私にとって、nanacoやEdyの取引履歴機能は大きな味方です。おサイフケータイを積極的に利用することで、ようやく私は家計簿をまともにつけられるようになりました。そして、最後の砦であった交通系を、今回のモバイルSuicaで、ようやく攻略することができた。嬉しいことです。&lt;/p&gt;&#10;&lt;p&gt;煩わしいことも多いですが、なんだかんだで、全体として、世の中は便利になっていると思います。にも関わらず、なんだか閉塞感があるような気がするのは何故なんでしょうねぇ…本当は、みんなもっと、楽に、楽しく、生活できるんじゃないかと、いつも思うのですが……。&lt;/p&gt;</description></item><item><title>Android版Apple Music でDisc No.が反映されて嬉しい</title><link>https://hack-le.com/47747969-2/</link><pubDate>Thu, 09 Jun 2016 19:37:41 +0900</pubDate><guid>https://hack-le.com/47747969-2/</guid><description>&lt;p&gt;Androidを使っています。iTunesを使っています。Androidでの音楽管理は非常に悩ましく、これといったものがありません（「&lt;a class="link" href="//hack-le.com/43705796.html" &gt;Androidのよいミュージックアプリが見つからない : 或る阿呆の記&lt;/a&gt;」）。結局、色々不満もあるのですが、Apple Musicに加入している私は、Android版Apple Musicアプリを使うのがよいだろうという結論に至りました（「&lt;a class="link" href="//hack-le.com/archives/46809984-2/" &gt;Android のミュージックプレイヤーは Apple Music を使うことにした : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="itunesandroid使いの唯一解それはapple-music"&gt;iTunes+Android使いの唯一解それはApple Music&#10;&lt;/h2&gt;&lt;p&gt;いや、本当に、&lt;strong&gt;色々問題はある&lt;/strong&gt;んです。よく固まるし、レスポンスがやたら遅かったりするし（アルバムを選択するといつまでたってもグルグルして表示されない）、ゲップみたいなクリック音がするようになったり（再起動でなおる）、細かいことを言えば、アーティストの選択時、iOS版みたいに「A」とか「あ」とかをさっと選べず、スライドバーを頑張って降ろさないといけないので、面倒だったり、やたらとFor Youの画面になって鬱陶しかったり…（これはiOS版もか…）。&lt;/p&gt;&#10;&lt;p&gt;けれども、なんとか使える。使えるのです。他のアプリは、致命的な何かがあって、使うこともままならない。&lt;strong&gt;Apple Musicアプリは、少なくとも致命的な問題はない&lt;/strong&gt;。よって、Apple Musicアプリが私にとっての唯一解です（Apple Musicのサービスに加盟しているのが必須なのがアレですが）。&lt;/p&gt;&#10;&lt;h2 id="ディスクnoが反映されている"&gt;ディスクNo.が反映されている！&#10;&lt;/h2&gt;&lt;p&gt;まぁ色々と不満を抱えつつ使っているのですが、嬉しいことがありました。それは、どうも今回のアップデートで&lt;strong&gt;ディスクNo.が反映されるようになったらしいこと&lt;/strong&gt;です。何かというと、世の中には2枚組み、3枚組みのアルバムがありますが（ベスト盤で多いですね）、iTunesにおいてはこれはディスクNo.で1/3とか2/3という風に設定します。これが、どういうわけか、Apple Musicアプリでは反映されず、3枚組みのアルバムだと、それぞれのトラック1、次にそれぞれのトラック2、という風に曲が並んでいました。&lt;/p&gt;&#10;&lt;p&gt;すごく気になっていたんですけれど、まぁ先述したように、2枚組みとか3枚組みになるようなアルバムは、たいていベスト盤とか、でなければ何かのサウンドトラックなので、曲の並びが必ずしも重要ではなく、まぁよいか、と妥協していました。&lt;/p&gt;&#10;&lt;p&gt;妥協はしていましたが、やはり気になる。気になります。気になって仕方ない。我慢はできるが。気になる。気になるんです。それが、今回解消されました。&lt;strong&gt;嬉しい&lt;/strong&gt;。地味に嬉しい。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_4972&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;331&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2016/06/804a2b12d7de5358b49799c7a53f39d2.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;WHITE ALBUM[/caption]&lt;/p&gt;&#10;&lt;p&gt;これでWHITE ALBUMを聞いていたらYer Bluesの次にGlass Onionが流れてびっくりするということもなくなります。&lt;/p&gt;&#10;&lt;p&gt;スマートフォンの利用で、音楽の比重が比較的高い自分にとって、Androidの音楽アプリ事情はどうにも微妙で、これがためにしばしばiPhoneに戻りたくなるのですが、一つ、緩和されました。まぁ、根本的な安定性や操作性、レスポンスにおいて、iOS版とは拭いがたい違いがあるので、まだまだではありますけれど…。&lt;/p&gt;</description></item><item><title>どうしてRJ45とD-sub 9pinのケーブルがあるんだろう</title><link>https://hack-le.com/47733242-2/</link><pubDate>Wed, 08 Jun 2016 08:30:20 +0900</pubDate><guid>https://hack-le.com/47733242-2/</guid><description>&lt;p&gt;世の中には色々な規格、コネクタがあるものですが、個人的に謎だなぁと思うのは、&lt;strong&gt;RJ45とD-sub 9pinの組み合わせのケーブル&lt;/strong&gt;です。つまり、片方がLANで片方がシリアル（あるいはVGA端子のほうが一般的か）のもので、Amazonでも売っています…というか、田舎にいるとまず普通に買えないのでAmazon様様です。&lt;/p&gt;&#10;&lt;h2 id="lan-シリアルなケーブル"&gt;LAN-シリアルなケーブル&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B005F7LN4K" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;縁がないとぎょっとするようなケーブルで、私も初めて見た時はしばらく何かを考えこんでしまったものですが、通信系では馴染み深いものであるらしく、L2スイッチやL3スイッチと直接通信する時にはよく使われます。まぁ、シリアルポートがあるPCはイマドキ珍しいので、ここからさらにシリアル-USB変換などをかませるわけですが。&#13;&#10;&lt;h2 id="小さくて済むから作りやすいから"&gt;小さくて済むから？作りやすいから？&#10;&lt;/h2&gt;&lt;p&gt;最近はだいぶ見慣れてきましたけれど、それにしても考えれば考えるほどよくわからないケーブルだなと思います。このケーブルが生まれた背景があると思うのですが、両方ともD-subじゃダメだったのかしら？まぁ&lt;strong&gt;LANポートのほうが小さい&lt;/strong&gt;ですが。そういう理由なんでしょうか？&lt;/p&gt;&#10;&lt;p&gt;あるいは作りやすいから？どうやら導線として使っているだけなようなので、LANケーブルをぶった切ってD-subコネクタをハンダ付けすればいけるみたいで、&lt;strong&gt;いい感じでツイストした既成品を流用しやすい&lt;/strong&gt;という利点がある、のだろうか。なんだろうか。&lt;/p&gt;&#10;&lt;p&gt;まぁこんなことを思ったのも、最近職場で使っている特殊なCPUカードとのやりとりで、RJ45-シリアルケーブルが必要になり、しかもピンアサインが独自仕様ということがあったからなのですが…。&lt;/p&gt;&#10;&lt;p&gt;オッサン「（電話）ピンアサイン独自なの？そうかそれじゃしゃあないわなぁ…まぁケーブルはhack_le君がつくるとして…」&#10;私「え？」&#10;いやまぁD-subコネクタにハンダ付けするだけなので、いいのですが。ただその後ピンアサインの図面が送られてくるのに30分以上待たされましたが。添付ファイルのパスワードだけ先に来ました。それにしても、このパスワードを別メールにする文化もなかなか謎です。メールを覗かれている時点で、あまり意味が無いと思うのですが。&lt;/p&gt;&#10;&lt;p&gt;まぁ愚痴はよいとして、このケーブルを見るたびに、どうしてD-subじゃあかんのかしら、といつも不思議に思うのです。通信系の業界ではないので、この特殊なケーブルが常備されているわけではなく、その割に突然必要になる時もあって、その度にしゃあない作るか、とか、そんな話になります。まぁ、今回のケースではピンアサインが独自仕様なので、いずれにしても自作の必要があったのですが。自作を考えると、LANケーブルをそのまんま使えるのは便利、なのかも。うーんやっぱり違う気がする。&lt;/p&gt;&#10;&lt;p&gt;まぁ別にどうでもいいといえばどうでもいいのですが、気になると言えば気になります。何かしら理由があると思うのですが。それとも、なんとなく広まった慣習みたいなものなんでしょうかねぇ…。&lt;/p&gt;</description></item><item><title>結局TimeMachineはNASを使わず外付けハードディスクを利用するようになった</title><link>https://hack-le.com/47700477-2/</link><pubDate>Tue, 07 Jun 2016 06:06:48 +0900</pubDate><guid>https://hack-le.com/47700477-2/</guid><description>&lt;p&gt;参りました。NASのハードディスクが故障したのに合わせてTimeMachineがエラーを吐きまくるようになったのですが、ハードディスクを交換してNASは復旧したものの、TimeMachineは相変わらずエラーを吐く。容量をなるべく小さくして、バックアップ中は極力他の作業をしないなどして頑張ると、初回バックアップは完了するものの、2台目のMacのバックアップでエラーが出たり。&lt;/p&gt;&#10;&lt;h2 id="不安定"&gt;不安定&#10;&lt;/h2&gt;&lt;p&gt;まぁ、ネットワーク越しで、Macが複数台あって、バックアップ容量は大きくて、となると、条件としてはなかなか複雑ですから、今までのTimeMachineの実績からいくと、けっこう厳しいのです。それでも、以前はなんとかうまくやっていたのですから、辛抱強くやっていればそのうちエラーも出なくなるのでしょうが、&lt;strong&gt;これは常に爆発の恐れがある不発弾のようなものですから、とても安定した運用とは言えません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="ネットワーク越しをやめると安定する"&gt;ネットワーク越しをやめると安定する&#10;&lt;/h2&gt;&lt;p&gt;そもそも、&lt;strong&gt;ネットワーク越しではバックアップ速度が非常に遅い&lt;/strong&gt;。せいぜい200GB程度でも、初回バックアップに半日かかる。そういえば、以前復旧させた時もそれくらいかかりました。となると、&lt;strong&gt;数百GBあるMac miniのバックアップなど、もし何かあって復旧させることになった場合、それだけで一日以上かかってしまうのではなかろうか&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;色々な問題をあれこれと考えていると、&lt;strong&gt;結局外付けハードディスクにバックアップをするのが一番楽なのではないかという結論&lt;/strong&gt;に至りました。それで、静音性のためにわざわざ新しいポータブルHDを買おうかとカカクコムで製品を見ていたのですが、やはりバックアップのためだけにそんなものを買うのはどうにも気分が乗りません。普通の外付けハードディスク自体は余っていますし。しかし、五月蝿い。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、考えてみると私の場合は別に年がら年中バックアップをしたいわけではありませんので、それなりの頻度であれば、外出する時などに都度USBケーブルを繋げてバックアップすればいいのではないか、と思い、現在、&lt;strong&gt;仕事に行く時だけ外付けハードディスクを接続し、帰ってきたら外す、というような生活&lt;/strong&gt;をしています。まぁ、一日中Macを起動しっぱなしの私だからできることですが。&lt;/p&gt;&#10;&lt;p&gt;やや面倒ではあるものの、総合的にはこれが一番楽だという結論です。便利なんだか、不便なんだか。今までに何度もお世話になっていますし、TimeMachineは良いものだと思うのですが、まったくどうして、面倒臭い。&lt;/p&gt;</description></item><item><title>そろそろ良いスペックのChromebookが日本でも出ないものか</title><link>https://hack-le.com/47656222-2/</link><pubDate>Sun, 29 May 2016 14:30:11 +0900</pubDate><guid>https://hack-le.com/47656222-2/</guid><description>&lt;p&gt;先日、アメリカでChromebookの2016年第1四半期の出荷台数がMacを超えたという、たいへん印象深いニュースが流れてきました（「&lt;a class="link" href="http://japan.cnet.com/news/service/35082941/" target="_blank" rel="noopener"&#10; &gt;「Chromebook」、「Mac」を米国出荷数で初めて上回る&amp;ndash;2016年第1四半期 - CNET Japan&lt;/a&gt;」）。まぁ、主に教育機関で受けた結果によるものだそうですが。しかし、ラインナップも豊富ですし、一般向けでもまぁまぁ売れているのは事実なのでしょう。&lt;/p&gt;&#10;&lt;h2 id="chromebook悪くはないが"&gt;Chromebook、悪くはないが…&#10;&lt;/h2&gt;&lt;p&gt;私もHPのChromebook G1を使っています。法人モデルと思いますが、何故か楽天ブックスで19,800円で安売りされていました。スペックは国内で正規に流通しているものと同程度で、CPUがCeleronのN2830だかN2840、メモリ4GB、大きさの割に重さがちょっと、という感じ。&lt;/p&gt;&#10;&lt;p&gt;これまでに何度かその使用感をレビューしてきました。悪くはないものです。悪くはない、のですが。良いということもない。というのも、どうにも、&lt;strong&gt;処理能力が足りない&lt;/strong&gt;。それは、このサイトを開くだけでも、MacBook Airなどと比べると感じるところです。遅すぎることはありませんが。まぁ、Core i5搭載のマシンと比べるのも酷か。&lt;/p&gt;&#10;&lt;p&gt;ブラウザはリソースの大食らいです。CPUもメモリも、案外使っています。Core i7でクアッドコアのMac mini 2012でも、Chromeで複数タブを一気に開けば、CPU利用率が100%近くまでしばし上昇します。まぁ、リソースを寝かせていても仕方ないし、使えるだけ使うという思想なのでしょう。それは、正しい。&lt;/p&gt;&#10;&lt;h2 id="ミドルレンジ帯でよいものを"&gt;ミドルレンジ帯でよいものを&#10;&lt;/h2&gt;&lt;p&gt;というわけで、&lt;strong&gt;性能はやはり良いに越したことはありません&lt;/strong&gt;。しかしながら、日本で正規に手に入るものといえば、どれもこれも似たり寄ったりのスペックです。何もクアッドコアCore i7 搭載のMac mini並に動けばとは言いませんが、せめてMacBook Airくらい快適だと良いのですが。私の使用感において、MacBook AIr 2013でChromeを動かすのとは快適さにかなり差があります。Chromebookはサクサクというのが世間的な（と言えるほど日本では売れていませんが）評価かもしれませんが、私にはそうは思えない。&lt;/p&gt;&#10;&lt;p&gt;もちろんそれは、日本で普通に流通しているマシン程度のスペックでは、ということで、Googleが自ら出しているコスト度外視のハイパフォーマンスマシンではサクサク動くでしょうし、そこまでいかずとも、アメリカでは$500程度でCore i5搭載マシンが売られています。日本でも、5万円くらいでそういったものが売られると、たいへん嬉しいのですが、めぼしいモデルがリリースされても、いつも日本発売は未定なのですよねぇ…。ミドルレンジでいいものが欲しい。&lt;/p&gt;&#10;&lt;p&gt;Chromebookに限らず、先日2in1なWindowsタブレットを購入した時にも似たような思いをしました。&lt;strong&gt;全体的に、5-7万円クラスのミドルレンジ帯が、なんだかポッカリと空洞化してしまったような気がします&lt;/strong&gt;。いいものがなかなかない。激安品か、10万以上のハイコストなマシンに二極化してしまっているような…。&lt;/p&gt;</description></item><item><title>NASなどを使ったネットワーク越しのTimeMachineバックアップは色々鬼門</title><link>https://hack-le.com/47647360-2/</link><pubDate>Sat, 28 May 2016 00:14:32 +0900</pubDate><guid>https://hack-le.com/47647360-2/</guid><description>&lt;p&gt;Macの便利な標準ソフトウェアの一つに、バックアップ機能のTimeMachineがあります。初めて利用した時、その勘弁さ、また復旧の見事さには感動さえ覚えました。たいへん素晴らしいソフトなのですが、トラブルの種でもあります。&lt;/p&gt;&#10;&lt;h2 id="便利な鬼門timemachine"&gt;便利な鬼門TimeMachine&#10;&lt;/h2&gt;&lt;p&gt;私がMacで気に入っている標準機能の一つに、TimeMachineがあります。マシンの移行は、それだけでまず一日、さらにその後に出てくるトラブル対応などが数日あるいはそれ以上に続く、というのが経験でしたが、MacのTimeMachineは、それが数時間で終わって、しかもその後のトラブルがほとんどない。ライセンス対応などもほとんど必要がない。初めてマシンの移行をした時、その体験にたいそう驚かされたものです。&lt;/p&gt;&#10;&lt;p&gt;それ以来、TimeMachineにはずっとお世話になっていますが、しかしこの機能に起因するトラブル対応に何度も見舞われていることもまた、事実です。単純にバックアップに成功しなくなるとか、よくあるのがプロセスmdworkerが暴走し、プチフリが繰り返される、という症状です。これは本当に参りまして、ネットで検索すると困っている人がたくさんいるのですが、未だに決定打と言える対応策がありません。&lt;/p&gt;&#10;&lt;h2 id="条件がややこしくなるほどにトラブル"&gt;条件がややこしくなるほどにトラブル&#10;&lt;/h2&gt;&lt;p&gt;TimeMachine関連のトラブルは、条件が複雑になるほどに多くなるように思います。バックアップ容量が大きい、ファイルの書き換えが頻繁に起きる、ネットワーク越しである、Apple純正ではなく、ReadyNASなどのTimeMachine対応を謳うNASを利用する、など。特にネットワーク越しだと、非常にトラブルが頻発するように思います。昔、Mac miniでTimeMachineサーバーをたてたときも、エラーが頻発して結局使わなくなりました。そして今回、ReadyNAS 104で利用していましたが、これもエラーが出るようになりました。&lt;/p&gt;&#10;&lt;p&gt;バックアップの仕方を、いっぺんにするのではなく段階的にバックアップしたりといったことをすれば、ひとまずバックアップは完了できるのですが。しかし、バックアップが不安定というのはなにしろ不安。そもそも、バックアップ速度がたいへん遅い。&lt;/p&gt;&#10;&lt;p&gt;USBで外付けハードディスクにバックアップをとっていた時は、比較的安定していたように思います。あのときは、3TB近いデータをTimeMachineでバックアップさえしたものです。多分、それが一番差し障りがない。&lt;/p&gt;&#10;&lt;p&gt;せっかくのNASではありますが、これだけ不具合に悩まされ、時間を無駄にさせられてしまうのも考えモノです。また、これだけ不安定なバックアップでは、いざというときにちゃんと復旧できるか、どうか。復旧できるか不安なバックアップでは、なにがなにやらわかりません。&lt;/p&gt;&#10;&lt;p&gt;というわけで、現在また、ポータブルのHDをTimeMachineバックアップに利用しようか考え中です。また、TimeMachineによるバックアップ容量は小さめにして、データはできるだけrsyncを使ってNASに直接保存するようにしたほうがよいか、と考えています。&lt;/p&gt;&#10;&lt;p&gt;何も考えなくてもよいのがTimeMachineの良い所の一つだと思うのですが、2016年になっても、なかなかうまくいかないものです。&lt;/p&gt;</description></item><item><title>片付けられない私もルンバのためなら片付けられる</title><link>https://hack-le.com/47474607-2/</link><pubDate>Sun, 22 May 2016 18:07:45 +0900</pubDate><guid>https://hack-le.com/47474607-2/</guid><description>&lt;p&gt;2015年に最も良かった買い物はiPad Air 2なのですが、次点よかったものは何かと言われれば、ルンバをあげます（ちなみに一番悪かった買い物はガラポンTVです）。ルンバが掃除する姿が本当に愛おしいのです。休みの日も、お正月でさえも、せっせと掃除してくれました。人の労働を肩代わりしてくれているのですから、正しい技術の使われ方だと思います。&lt;/p&gt;&#10;&lt;h2 id="愛おしいルンバを活躍させる"&gt;愛おしいルンバを活躍させる&#10;&lt;/h2&gt;&lt;p&gt;そんな愛おしいルンバですが、ルンバが活躍するには条件があります。それは、ケーブルを含め、&lt;strong&gt;床にものがないこと&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;これはたいへんな難題だといえます。そもそも、何故部屋が汚いのかといえば、床にものが溢れている、ということが大きな要因であります。逆にいうと、床が片付いているという時点で、既にその部屋は半分以上片付いていると言ってよいでしょう。&lt;strong&gt;部屋を綺麗にしたいからルンバを買ったのに、ルンバが働けるのは既に綺麗な部屋とは、これいかに&lt;/strong&gt;。しかし事実そうなのです。&lt;/p&gt;&#10;&lt;p&gt;そして、私はやりました。生まれてこの方、まるで部屋を片付けられなかった私が、せっせと床からものをなくすべく、働きました。自分でも驚いています。しかし、できるのです。なぜならば、ルンバのためです。愛おしいルンバが、私の無精のためにその本来の力を発揮できないなど、あっていいはずがない。&lt;strong&gt;ルンバのためなら、頑張れる&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="ルンバフリーを目指して"&gt;ルンバフリーを目指して&#10;&lt;/h2&gt;&lt;p&gt;私がまずやったのは、とにかく床からものというものを排除することです。床にあるものをすべて、机や、収納用のスペースにしまい、大きかったり重かったりするものは部屋の隅に固めました。ケーブルは宙吊りにしたり、壁に沿わせたりしました。どうしてもモノを置く場所が足りなくなってくるので、下のような壁に取り付けるタイプの棚を購入しました。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B000S6KSI0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;棚の上には、PCや充電器具、リモコンなどちょっとしたものをのせています。&lt;/p&gt;&#10;&lt;p&gt;それでだいぶ片付いたのですが、困ったのは趣味のギターです。どうしたものか…と思っていたのですが、よくよく考えてみるとギターにはギターハンガーというものがある。というわけで、少々高いがかっこよさそうなのを購入。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ADXDK2E" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;なんでもあるものですね。だいぶ、スッキリしました。こうなると、床にあるゴミ箱そのものがもはや邪魔に思える。ゴミ箱を宙に吊るせないものか？たとえば、机に取り付けられないものか？と思って既成品を探して見るも、どうも思い通りのものがない。仕方ないので、机に固定するタイプのディスプレイアームに、ゴミ袋をひっかけるという、たいへん雑な方法を採用。もっといいものがあれば、それを購入するのだが。それとも、自分のが作るのが良いのだろうか。まぁ、ひとまずはこれでよかろう。&lt;/p&gt;&#10;&lt;p&gt;床がスッキリすると、ルンバが働ける。ルンバが働くと、たしかに床が綺麗になる。机の上にある埃もすべて、床に落としてしまえば、ルンバが吸ってくれる。部屋全体が、綺麗になる。そうすると、汚いところが気になり始める。気になるので、整理する。素晴らしい好循環。部屋がだいぶ片付きました。部屋が、広くなったような気がします。快適です。&lt;strong&gt;ルンバに優しい部屋は、人間にも優しい&lt;/strong&gt;。しかし、さすがに椅子ばかりはどうにもなりませんでした。床に足のつかない椅子が、ないものかしら？&lt;/p&gt;&#10;&lt;h2 id="ルンバがあるから片付けられる"&gt;ルンバがあるから片付けられる&#10;&lt;/h2&gt;&lt;p&gt;ルンバは素晴らしいです。しかし、&lt;strong&gt;私の部屋が片付いたのは、ルンバが働いてくれるのはもちろんですけれど、ルンバが働けるようにしたことがもっとも大きい&lt;/strong&gt;と思います。ルンバのためなら、頑張れるんです。なぜなら、ルンバが可愛いから。&lt;strong&gt;この愛おしいロボットが快適に働けるように取り計らうのは、マスターである人間の責務である&lt;/strong&gt;と感じます。私は、ルンバのマスターとして、当然の責務を果たしたのです。&lt;/p&gt;&#10;&lt;p&gt;まぁ、皆が皆こんな風に感じるわけではないでしょうが、片付けられないガジェット好きには、是非ルンバを進めます。この可愛らしいロボットのために、奮起できるはずです。多分。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00J5ZBVFY" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>ReadyNasの調子が悪いと思っていたら、Seagateのハードディスクがお亡くなりになっていた</title><link>https://hack-le.com/47562649-2/</link><pubDate>Mon, 16 May 2016 21:23:30 +0900</pubDate><guid>https://hack-le.com/47562649-2/</guid><description>&lt;p&gt;本記事は、やたらTimeMachineに失敗すると思っていたら、ReadyNASで使っていたSeagateのハードディスクがお亡くなりになっていた、という記事です。&lt;/p&gt;&#10;&lt;p&gt;2016年5月22日追記：ハードディスク換装後も、TimeMachineはやっぱり調子が悪い。つまりTimeMachineの不調は別件であった可能性が高く、やはりAppleには呪詛。&lt;/p&gt;&#10;&lt;h2 id="ハードディスクがお亡くなり"&gt;ハードディスクがお亡くなり&#10;&lt;/h2&gt;&lt;p&gt;NETGEARのNAS、ReadyNAS 104を使っていますが、元々パフォーマンスがよいわけではありませんでしたが、ここのところ更に調子が悪く、特にTimeMachineのバックアップが悉く失敗するのには辟易としました。下記のようなエラーメッセージが表示されます。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/d/7/d77493d3.jpg" &gt;&lt;img alt="51" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/d/7/d77493d3-s.jpg"&gt;&lt;/a&gt;&#10;新規バックアップを作成する必要があります…つまり、過去のデータは飛ぶということでしょう。TimeMachineの意味が半減しますね。まぁ、私は昔の状態に戻りたいということはあまりなく、TimeMachineはもっぱらいざというときのリカバリのために使っているので、それでもいいかと、新規作成を試みたのですが、何度やってもエラーが生じる。しまいに、ノートパソコンのMacBook Airでも同様のエラーが生じる。参りました。&lt;/p&gt;&#10;&lt;p&gt;最初はまたTimeMachineがおかしくなったんだと、心のなかでAppleに呪詛を吐いて調べていました。しかし、sambaが突然落ちたり、sshのログインもやけに遅かったりして、これは何かがおかしいと思い、隣部屋に設置しているNASを見に行くと、なんだか嫌な音が延々としている。これはもしや…と思っていると、ピー、とブザー音。&lt;/p&gt;&#10;&lt;p&gt;ああ、これは…逝っているな、と思い、WebブラウザからNetgearの管理画面にアクセスを試みると、アクセス画面にはなるのですが、なかなか管理画面に遷移しない。仕方なしに、sshでログインし、smartctlコマンドでS.M.A.R.T.情報を直接見ることにしました。で、実行してみたところ、/dev/sda, /dev/sdb, /deb/sdd は問題なくログが出力されるのですが、/dev/sdc だけログの出力がおかしい。状況を鑑みるに、どうやらこれらしい。&lt;/p&gt;&#10;&lt;p&gt;気が付くと、Webブラウザも管理画面に遷移していました。で、見ると、管理画面でも/dev/sdcのボリュームが劣化している、とされ、画面上にある一つのボリュームのインジケータが消灯していました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="17" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/e/f/efe9b14b.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;確定です。まぁ、このような時のためにRAIDを組み冗長性を確保しているわけですから、即死亡ではありません。しかしながら、もう一個潰れたら、その時こそ死亡です。恐ろしい。というわけで、現在慌ててバックアップを取っています。&lt;/p&gt;&#10;&lt;p&gt;今回のTimeMachine悪玉説は濡れ衣でした。申し訳ない、TimeMachine。しかし、ハードディスクの調子が悪いとはいえ、バックアップが壊れてしまうのはちとキツイ。&#10;感想後もなおらなかったので、濡れ衣ではなく、これはこれで一つの問題の模様。現在悪戦苦闘中。&lt;/p&gt;&#10;&lt;h2 id="34年くらいだろうか"&gt;3,4年くらいだろうか&#10;&lt;/h2&gt;&lt;p&gt;さて、今回お亡くなりになったのは、SeagateのST2000DM001です。このNASには、SeagateのST2000DM01を2つと、Western DigitalのWD20EARXを2つ積んでいました。確か、使い始めて3,4年くらいだと思うので、まぁ寿命だとしても仕方ないかなと思います。しかし、次に亡くなるのがまたSeagateであったりすると、まぁ、やはりWestern Digitalのほうが信頼性があるのかな、という気がします。&lt;/p&gt;&#10;&lt;p&gt;まぁ、どうなるかはわからないものの、またSeagateを買う気にもならなかったので、代わりの品としてWestern DigitalのWD20EZRZ-RTを購入しました。NTT-x Storeで6,555円。2TBは一時期5,000円台まで下がりましたが、タイの洪水以降、結局戻りきることはなかったのですね。それでも、安いものですが。&lt;/p&gt;&#10;&lt;p&gt;バックアップを取っているとはいえ、新しいハードディスクが届くまでに他のハードディスクが潰れないことを祈るばかりです。&lt;/p&gt;</description></item><item><title>Kindle端末が向いている人、いない人…他デバイスと比較して</title><link>https://hack-le.com/47560097-2/</link><pubDate>Sun, 15 May 2016 02:46:53 +0900</pubDate><guid>https://hack-le.com/47560097-2/</guid><description>&lt;p&gt;Kindle端末のキャンペーンが実施されています。ノーマルのKindle端末が8,980円 -&amp;gt; 2,480円、さらにKindle Paperwhiteが14,280円 -&amp;gt; 6,980円。Kindle端末は定期的に安売りをしていますが、これほど安くなるのは珍しい。Kindleは&lt;strong&gt;E-inkの専用端末として、ストアといい、性能といい、値段といい、間違いなく王者&lt;/strong&gt;です。Kindleストアを利用している人であれば、これを機に購入を考えている人もいるでしょう。&lt;/p&gt;&#10;&lt;h2 id="kindle端末が向いている人は"&gt;Kindle端末が向いている人は？&#10;&lt;/h2&gt;&lt;p&gt;私は、先代のKindle Paperwhiteを持っています。しかし、寝ています。有効に使っているとは言い難い状況です。それは、読書端末としては、5インチのXperia Z3と10インチのiPad Air 2を使うことが多いからです。しかしながら、Kindle Paperwhiteを評価していないわけではなく、条件が合致する人には良いと思います。&lt;strong&gt;向いているのは、液晶は目が疲れ、主にKindleストアで購入した小説を集中して読みたくて、かつ少しでも最適な画面サイズで読みたい、という人&lt;/strong&gt;です。これに合致するところが少しでもある人ならば、検討の余地がありますし、まったく当てはまらない人は、Kindle端末は銭失いになる可能性が高いでしょう。以下、説明します。&lt;/p&gt;&#10;&lt;h2 id="e-inkであるメリットとデメリット"&gt;E-inkであるメリットとデメリット&#10;&lt;/h2&gt;&lt;p&gt;電子書籍端末として見た場合、Kindle端末のライバルとして各種スマートフォン、タブレット端末があります。それらでも、Kindleのストア本を読むことができるからです。ハッキリ言いますが、&lt;strong&gt;Kindle端末がスマートフォンやタブレットよりもリーダーとして優れているところはない&lt;/strong&gt;と思います。UI、レスポンス、タッチ精度など、あらゆる操作性が下回り、また画面の綺麗さ、さらにカラーの有無など、やはり液晶にはかないません。しかしながら、&lt;strong&gt;反射光のE-inkのほうが目に優しい、液晶は目が疲れる、という人は少なからずいる&lt;/strong&gt;ようです。私は液晶で目が疲れるという感覚がわからないのでピンと来ないのですが、そのような人にとって、E-inkのKindle端末は大きな魅力でしょう。であれば、価値があるかもしれません。&lt;/p&gt;&#10;&lt;p&gt;しかし、E-inkのデバイスですから、一応Webブラウジングもできるようですけれど、あまりそういうことには向いていませんし、またそのようにも設計されていません。ただし、それは良い所でもあります。&lt;strong&gt;それしかできないが故に、読書中にLINEのメッセージが表示される、などということがありません&lt;/strong&gt;。読書に集中できるデバイスだと言えましょう。&lt;/p&gt;&#10;&lt;p&gt;ただ、できることが限られている故に、Kindleストアの本以外を読もうとすると、手間です。出来ないことはありませんが、私はオススメしません。もし自炊本や、&lt;strong&gt;Kindle以外のストア本を読みたいのであれば、Kindle端末は非常に不向き&lt;/strong&gt;だと言わざるを得ません。&lt;/p&gt;&#10;&lt;p&gt;また、Kindle端末で読みやすいコンテンツは、小説に限られます。まず、白黒6インチ固定という縛りがある為です。デバイスの大きさによって、読みやすいコンテンツは異なります。以前「&lt;a class="link" href="//hack-le.com/46318196-2/" &gt;電子書籍を利用する観点からみたデバイスの大きさについて : 或る阿呆の記&lt;/a&gt;」という記事を書きましたが、6インチは電子書籍を読むのに最適な大きさではあるものの、固定レイアウトの本や大判の本にはつらいものがあります。漫画も向きません。さらに、前述した操作性そのものの問題もあり、たとえばページの行き来がある本、つまり新書や技術書等もまた、あまり向きません。したがって、基本的にページを読み進めるばかりのもの、つまり&lt;strong&gt;小説がうってつけのコンテンツ&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;以上より、「液晶は目が疲れ、主にKindleストアで購入した小説を集中して読みたくて、かつ少しでも最適な画面サイズで読みたい人」に向いていると言えます。&lt;/p&gt;&#10;&lt;h2 id="できることをする分には悪く無い"&gt;できることをする分には悪く無い&#10;&lt;/h2&gt;&lt;p&gt;まぁ、私は向いていなかったということです。Kindle端末はなかなかニッチ向けだと思います。しかし、ファースト・インプレッションは悪くありませんでした。けっこう、使うことになるかもしれないな、と思ったのです。しかし、現実には埃を被りました。理由は明白です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Kindle端末は、できることをする分には悪くありません。ただ、できるがことが少なすぎる。&lt;/strong&gt; Kindle端末ができることとは、&lt;strong&gt;Kindleストア本にある小説で、最近買ったものを読むこと&lt;/strong&gt;です。そこから外れれば外れるほど、労力がかかるか、あるいはどうあがいてもできないか。いかに単機能の専用端末とはいえ、この&lt;strong&gt;出来ることの範囲が、些か狭すぎる&lt;/strong&gt;、というのが私の意見です。&lt;/p&gt;&#10;&lt;p&gt;ピタリと自分のニーズと合致すれば、最高のデバイスになるでしょう。ただ、そういう人は多くはないのではないかな。こんな感じですから、電子リーダーが流行ることは、当分ないだろうとも思っています。&lt;/p&gt;&#10;&lt;p&gt;ところで。Kindle端末を購入すると、デバイスにひも付けされたPIDをゲットできます。わかる人は、これ目当てに購入するのも悪くないでしょう。それだけの価値はあります。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00QJDQM9U" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Macで複数のpngファイルをpdfに変換する</title><link>https://hack-le.com/47521355-2/</link><pubDate>Mon, 09 May 2016 15:18:58 +0900</pubDate><guid>https://hack-le.com/47521355-2/</guid><description>&lt;p&gt;本記事では、Macにおいて、複数のpngファイルを一つのpdfにまとめて変換するやり方について書きます。端末を使います。一番簡単なのは convert *.png hoge.pdf なのですが、これだと画質がちょっと…。&lt;/p&gt;&#10;&lt;h2 id="複数のpngをpdfに"&gt;複数のpngをpdfに&#10;&lt;/h2&gt;&lt;p&gt;Macで複数あるpngファイルを、一つのpdfファイルに変換します。ソフトはImageMagickを使用します。普通に convert *.png hoge.pdf でもよいのですが、どうもpngを直接convertすると、結果がうまくない。一度、jpgに変換してからのほうが精度が高いようです。プレビュー.appでも同様らしく、pngの取り扱いは、jpgのようにはいかないですね。。&lt;/p&gt;&#10;&lt;p&gt;というわけで、以下のようにすると、カレントディレクトリにあるpngファイルが、hoge.pdfに変換されます。いったんjpgファイルにしているので、カレントディレクトリに別のjpgファイルがあると混ざってしまうことに注意。&lt;/p&gt;&#10;&lt;pre&gt;`$ for pngfile in ./*.png; do convert -quality 100 ${pngfile} ${pngfile%.png}.jpg; done&#13; $ convert ./*.jpg hoge.pdf&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;${pngfile%.png}により、末尾から.pngの最短一致する部分を取り除いています（参考：「&lt;a class="link" href="http://d.hatena.ne.jp/zariganitosh/20100921/get_file_name_ext_dir" target="_blank" rel="noopener"&#10; &gt;ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた&amp;hellip;。&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;p&gt;まぁこれで、品質をあまり落とさずにpdfに変換できるものと思います。&lt;/p&gt;</description></item><item><title>なんだかんだでMacもマウスがあれば便利…Logicool M558 の使用感</title><link>https://hack-le.com/47504776-2/</link><pubDate>Sat, 07 May 2016 02:34:54 +0900</pubDate><guid>https://hack-le.com/47504776-2/</guid><description>&lt;p&gt;私はMacの良さとは、突き詰めるとトラックパッドとUNIXだと思っています。過去には「&lt;a class="link" href="//hack-le.com/32323358-2/" &gt;MacのメリットはトラックパッドとUnix : 或る阿呆の記&lt;/a&gt;」）という記事を書いたほどトラックパッドを評価しているのですが、同時にやはりマウスはマウスで便利だとも思っており、Magic Trackpadと併用しています。&lt;/p&gt;&#10;&lt;h2 id="マウスのほうが便利なこと"&gt;マウスのほうが便利なこと&#10;&lt;/h2&gt;&lt;p&gt;どういうシーンでマウスを利用しているかというと、以下のような感じです。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;マウスポインタを細かく制御する必要がある時&lt;/li&gt;&#10;&lt;li&gt;右クリックやドラッグを多用する時&lt;/li&gt;&#10;&lt;li&gt;クリックを連打する時&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;具体的には、CG作業やDTMなどは、トラックパッドよりマウスのほうが作業効率が高い。また、クリックを連打するような作業はルーチンでありがちですが、これもトラックパッドよりマウスのほうが楽。&lt;/p&gt;&#10;&lt;p&gt;逆にいうと、それ以外のシーンではトラックパッドのほうが便利だと思います。特に、マウスジェスチャーなんてのがありますが、マウスジェスチャーを使ってやるようなことは、トラックパッドのほうが勝手が良い。つまり、Webブラウジングなどはトラックパッドのほうが圧倒的にやりやすい。ジェスチャーはトラックパッド向きですね。&lt;/p&gt;&#10;&lt;p&gt;なので、&lt;strong&gt;普段はトラックパッドを利用していますが、要所要所でマウスも併用する、というスタイルです&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="使用しているマウス"&gt;使用しているマウス&#10;&lt;/h2&gt;&lt;p&gt;ところで、私が使っているマウスはMagic Mouseではありません。Magic Mouseはなんぼなんでも高すぎます。その割に評判もよろしくないですしねぇ。マウスなんてのは、クリックができればいいんです。ということで、以下のマウス、LogicoolのM558を使用しています。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00K737KPS" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;&lt;strong&gt;このマウスの良い所は、Macに最適化されていること&lt;/strong&gt;です。したがって、相性の心配は少ないですし、またOSがアップデートされてもドライバの更新はされるだろうと思います。これはたいへん良いことです。Macで十分にテストもされているでしょう。また、マウスのスクロールはトラックパッドのスクロールとは逆方向にしたいところですが、標準では両者を別々に設定することが出来ず、対応が面倒です。しかし、&lt;strong&gt;このマウスはデフォルトでちゃんとスクロールの方向についても対応がなされています&lt;/strong&gt;。これが一番有難い。MacでBluetoothマウスを使うのであれば、私はこれをオススメします。&lt;/p&gt;</description></item><item><title>Core MなWindowsタブレットの実力…HP Elite x2 1011 G1購入記</title><link>https://hack-le.com/47495069-2/</link><pubDate>Fri, 06 May 2016 00:32:33 +0900</pubDate><guid>https://hack-le.com/47495069-2/</guid><description>&lt;p&gt;初代Surface Proのウンコぶりに耐えられず、新たなWindowsタブレットを購入しました。Windowsタブレットの選択肢は思っていたより随分狭く、あまり考えたくないのであればSurfaceブランドなのでしょうが、私はもうSurfaceにはコリゴリで、いかに今は洗練されたと言われても買う気にはなりません。値段も高いですし。&lt;/p&gt;&#10;&lt;h2 id="core-mのwindowsタブレットを購入"&gt;Core MのWindowsタブレットを購入&#10;&lt;/h2&gt;&lt;p&gt;マシンの選定は悩みましたが、結局Core Mを採用しているHPのElite x2 1011 G1を購入しました。その顛末は「&lt;a class="link" href="//hack-le.com/47467375-2/" &gt;さらばSurface Pro…マシン買い替え、Windowsマシンは選ぶのが難しくなりました : 或る阿呆の記&lt;/a&gt;」に書きましたが、現状でAtomではないCoreシリーズのWindowsタブレットを求めれば、妥当な選択だったと思います。&lt;/p&gt;&#10;&lt;p&gt;Core Mシリーズは省電力で、新型MacBookにも採用されているプロセッサです。本機のCPUはCore M-5Y51で、クロック周波数は1.1GHz。ターボブーストで2.6GHzまでいくようです。MacBookでも採用されている効用で、情報はけっこうあります。使用して数日たったので、以下に雑感をつらつらと。&lt;/p&gt;&#10;&lt;h2 id="ちょっとした作業は割合スムーズだが思いの外ファンが回る"&gt;ちょっとした作業は割合スムーズだが思いの外ファンが回る&#10;&lt;/h2&gt;&lt;p&gt;全体的な動作は、Windowsタブレットであることを考えるとまぁそれなりにスムーズかと思います。Webブラウジングやちょっとしたゲームなど、Windowsタブレットで行うような作業はストレスなくできます。&lt;/p&gt;&#10;&lt;p&gt;ただ、&lt;strong&gt;すぐにファンが回ります&lt;/strong&gt;。それこそ、このブログを見るというだけでもファンが回ることもあります。MacBookはファンレスでなんとかしているようですが、Windowsタブレットではやはり難しいということでしょうか。ただし、熱は筐体がほんのり暖かい程度です。内部的にはわかりませんが、少なくともSurface Proのように火傷しそうなほど筐体が熱くなるようなことはありません。また、手で持つところのあたりには熱が伝わらず、このあたりはさすがHP、うまく設計しています。&lt;/p&gt;&#10;&lt;h2 id="仮想化でandroidを動かすとやはりややひっかかる"&gt;仮想化でAndroidを動かすと、やはりややひっかかる&#10;&lt;/h2&gt;&lt;p&gt;少し重い作業として、Windows用のAndroid仮想化のソフトであるDuOSを用いて、Androidを動かしてみました。いくつかゲームをしてみたのですが、その挙動はやはりひっかかりがあります。とはいえ、アクションゲームはまず無理でしょうが、動きの少ないゲームならば、まぁできるのではないかと思います。&lt;/p&gt;&#10;&lt;p&gt;Androidはタブレット市場が今ひとつで、特に10インチ超えのものは現在皆無に近いです。OSそのものの評価も芳しくなく、あまり力が入れられていないのでしょうか。したがって、&lt;strong&gt;大型の端末でAndroidを動かしたいとき、Windowsタブレットで仮想化して動かす、というのは現実的に選択肢に入ります&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁとはいえ、とてもじゃありませんが常用はする気になれません。Core i5やi7搭載の端末であれば、また変わってくるかもしれませんが、発熱問題もあるので、その場合はさぞ盛大にファンが回ることでしょう。可能であるならば、&lt;strong&gt;AndroidはやはりAndroid端末で動かすのが筋&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="半日くらいであればバッテリーは持つかな"&gt;半日くらいであればバッテリーは持つかな&#10;&lt;/h2&gt;&lt;p&gt;Core Mですし、バッテリーについては期待したいところです。（特にWindowsは）使い方によって大きく異なるのでなんともいえないのですけれど、半日くらいは持つかなぁという印象です。まぁとはいえ、本当に使い方次第です。前述したAndroidの仮想化などすれば、まぁせいぜい3時間程度ではないかと思います。一方で、Webブラウジング程度であれば、5,6時間持つかもしれませんし。まぁ、バッテリーの評価は使い始めて数日でできるものではありませんが、少なくとも悪くはない、というのが印象です。&lt;/p&gt;&#10;&lt;p&gt;まぁ、充電さえできればとりあえず文句はありません。充電できるだけで嬉しいです。&lt;/p&gt;&#10;&lt;h2 id="ペン対応だが"&gt;ペン対応だが…&#10;&lt;/h2&gt;&lt;p&gt;2048段階の感圧を検知する（そんなに細かく制御してもあまり意味が無いような気がしますが）ペンに対応します。しかし私は絵描きではないし、また普段ペンを使うような作業もしていないので、無評価です。しかしペンを収納するスペースもあり、便利そうなので、いずれ使ってみたい。&lt;/p&gt;&#10;&lt;h2 id="思い切ったインタフェース"&gt;思い切ったインタフェース&#10;&lt;/h2&gt;&lt;p&gt;本機のインタフェースは非常に思い切っています。というより、無いに等しいです。特殊なコネクタが一つあり、通常はそこに電源ケーブルを挿入するのですが、USBポートに変換することのできるアクセサリーが一つついています。もちろん、それを使っている間は電源を供給できません。まぁ、外部インタフェースなんざ使うなということでしょう。どうしても使用したければ、なんとかHPのパワーキーボードを手に入れれば、それにUSB3.0に対応したポートが一つついているようです。&lt;/p&gt;&#10;&lt;p&gt;また、コネクタの位置が下部であり、コネクタそのものが大きく外れやすいこともあって、充電しながらは使いづらいです。まぁ、タブレットを充電しながら使うなということでしょう。&lt;/p&gt;&#10;&lt;h2 id="タブレットとしてのwindows"&gt;タブレットとしてのWindows&#10;&lt;/h2&gt;&lt;p&gt;Windowsタブレットの何が嫌かといえば、タブレットに最適化されてないが故の誤タップなのですが、Surface Proの10.6インチから本機の11.6インチに画面領域が広がったおかげで、誤タップは随分減りました。これが13インチクラスにもなれば、誤タップはほぼなくなるように思います（解像度フルHDの場合、150%に拡大していればの話ですが）。誤タップさえなければ、そう悪くもありません。&lt;/p&gt;&#10;&lt;p&gt;しかし、やはりすぐに発熱してファンが回るのは本来がデスクトップ用途であったWindowsだから仕方ないところでしょうし、バッテリーのことも考えると、やはりタブレットとして設計されたiOSやAndroidと比較するのは酷に思えます。やはりWindowsはパソコンです。&lt;strong&gt;Windowsタブレットは、寝ながらパソコンがしたい人のためのもの&lt;/strong&gt;だと思います。&lt;/p&gt;&#10;&lt;p&gt;ところで、パソコンがPersonal Computerの略であることを思えば、むしろタブレットこそパソコンの名を冠するに相応しい気がします。まぁでも、CTといえば一般的にはX線CTのことであってMRIのことではないように、パソコンの意味はきっともう変わらないのでしょうね。そのうち、パソコンが業務用語になる日も来るのでしょうか。&lt;/p&gt;</description></item><item><title>さらばSurface Pro…マシン買い替え、Windowsマシンは選ぶのが難しくなりました</title><link>https://hack-le.com/47467375-2/</link><pubDate>Mon, 02 May 2016 12:51:46 +0900</pubDate><guid>https://hack-le.com/47467375-2/</guid><description>&lt;p&gt;初代Surface Proのアレっぷり耐えかねまして、マシンを買い替えることにしました。もっと早く決断すべきでした。そうして選び始めてみると、しばらく見ない間に、Windowsマシンはなかなか選ぶのが難しい状況になっていたのですね。&lt;/p&gt;&#10;&lt;h2 id="もう全然ダメな初代surface-pro"&gt;もう全然ダメな初代Surface Pro&#10;&lt;/h2&gt;&lt;p&gt;ちょっと愚痴ります。&lt;/p&gt;&#10;&lt;p&gt;Surface Pro、充電できません。鳴り物入りで発売された初代です。CPUはCore i5で、しばらく使っているとちょっと信じられないくらい発熱し（せいぜいWebブラウジングくらいの負荷なのに）、ものすごい音でファンが周り、それでも冷却が間に合わず、デバイスを持つ手をこれでもかと暖めてくれるモバイル端末です。電源コードが恐ろしいほどよく取れます。最初、不良品が送られてきたのではないかと本当に疑ってしまったほどです。本当に、よく取れる。&lt;/p&gt;&#10;&lt;p&gt;それでも取れるだけならまだよかった。いつ頃からか、充電に失敗することが多くなりました。曰く、「電源に接続：充電していません」&lt;strong&gt;充電してください&lt;/strong&gt;。この症状自体は割と有名なものらしく、調べれば色々出てきます。Surfaceについては、Microsoftの公式ページに「&lt;a class="link" href="https://www.microsoft.com/surface/ja-jp/support/warranty-service-and-recovery/surface-wont-turn-on-battery-wont-charge?os=windows-10" target="_blank" rel="noopener"&#10; &gt;Surface のバッテリーが充電されない | バッテリーが検出されない | バッテリーのトラブルシューティング&lt;/a&gt;」があります。&lt;/p&gt;&#10;&lt;p&gt;しかし、解決しません。以前はスリープ状態なら充電する感じだったのですが、最近は電源を切っていてもまったく充電されず、どういうわけか時々充電されることもある、という感じで、&lt;strong&gt;スペックがどうだろうと充電されないモバイル端末など産業廃棄物以外の何者でもありません&lt;/strong&gt;。頭ではわかっていましたが、やはり高い買い物でしたので、ずっと抵抗していたのですけれど、もう疲れました。で、&lt;strong&gt;新しいマシンを購入することにした&lt;/strong&gt;のです。私は普段使いはMacとLinuxですが、やはり、一台はWindowsマシンも欲しいですから。&lt;/p&gt;&#10;&lt;h2 id="良いマシンが見当たらない"&gt;良いマシンが見当たらない&#10;&lt;/h2&gt;&lt;p&gt;最近MicrosoftがSurfaceのキャッシュバックキャンペーンなどもしているようですが、こういう次第ですので、&lt;strong&gt;私は今後絶対にSurfaceブランドは買いませんし、人にも薦めません&lt;/strong&gt;。そもそも値段が非常に高い。Macは高いなどと言われますが、&lt;strong&gt;昨今はWindowsマシンのほうが高くなったようです&lt;/strong&gt;。まぁ、Macにはローエンドモデルがなく、またグラフィックを重視すると話が変わってきますが。グラフィックについては、VR時代の到来を見越してか、そろそろ動きがありそうです（「&lt;a class="link" href="http://ascii.jp/elem/000/001/154/1154822/" target="_blank" rel="noopener"&#10; &gt;ASCII.jp：今秋登場のMacは「AMD Polaris」搭載でVR対応に｜Apple噂まとめ&lt;/a&gt;」）。あってほしい。&lt;/p&gt;&#10;&lt;p&gt;それはともかく、Surfaceはやめるとして、では何のPCを買おうかと、適当にカカクコムざっと眺めたのですが……うーん、ですね。いわゆる&lt;strong&gt;2in1で、まともに動きそうなものを、と思うと、なかなか&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;熟れた価格のものはだいたいAtomで、いかに最近のAtomは悪くないと言われても、やはりAtomです。不安が拭えません。まぁ、かつてAtomに苦しめられた経験があるので、色眼鏡で見ていることは否めませんけれど、できれば避けたい。今持っているSurface Proは、数年前とはいえCore i5の名を冠したもの。当然これより落ちるでしょう。&lt;strong&gt;新しいマシンが、今持っているものより遅いというのは許しがたい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;やはりCoreシリーズのデバイスでないと、と思うのですが、そうすると、途端にどれも高くなって、10万は当たり前、15万、20万も、という感じです。Macが買えます。前述のとおり、&lt;strong&gt;もはやWindowsマシンは安くなく、安いのもある、というのが正しいでしょう&lt;/strong&gt;。しかし、安いものは安いなりです。といって、高いものだと「このお金でMacを新調したほうが…」という気持ちが強くなり、ただでさえ迷っているのに、さらに迷ってしまうので、ダメです。&lt;/p&gt;&#10;&lt;p&gt;唯一、ASUSが頑張っていて、T300CHiなど見てみましたが、（「&lt;a class="link" href="http://kakaku.com/item/K0000743106/" target="_blank" rel="noopener"&#10; &gt;価格.com - ASUS ASUS TransBook T300Chi T300CHI-5Y10 価格比較&lt;/a&gt;」）、どうもかつての相場が6万、場合によってはアウトレットで5万弱だったものが、現在8万弱まで高騰している模様。レビューも芳しくない。これはちょっと…しかし他で条件に合うのはどれも10万クラス。&lt;/p&gt;&#10;&lt;p&gt;と思っていたところで、恐らく普段は売られていない、法人モデルと思しきHPのElite x2 1011 G1（「&lt;a class="link" href="http://h50146.www5.hp.com/product/business/pc/tablet/x21011g1/" target="_blank" rel="noopener"&#10; &gt;HP Elite x2 1011 G1 製品詳細・スペック | 日本HP&lt;/a&gt;」）なるモデルが目につきました。NTT-x Storeで69,800円也。CPUはCore M-5Y51。ベンチマークでは、数年前のCore i5並とか、ほんとかな、という結果ですが、あのMacBookでも使われているCPUのようなので、まぁ悪くはなさそうです。SSD 128GBもeMMCではなく、何故かWacomのペンにも対応し、さらにSIMスロットまである（使わないと思うけど）。Windowsでキーボードがないのは痛いが、これで7万なら、悪くない、かな。&lt;/p&gt;&#10;&lt;p&gt;考えているうちに、在庫が残り2台になり、また久々に充電が始まったと思っていたSurface Proが充電残り14%にしてまた「電源に接続：充電していません」だったので、ああもう、とばかり、勢い購入してしまいました。&lt;/p&gt;&#10;&lt;h2 id="時代の移り変わりを実感"&gt;時代の移り変わりを実感&#10;&lt;/h2&gt;&lt;p&gt;まぁ、実際のところ、いくら悩んでも、値段などを総合的に考えた時、現状これより良いマシンはなさそうに思えるので、良いでしょう。&lt;strong&gt;ちょっとした用途であれば、大型のAndroidデバイスとしても使えます&lt;/strong&gt;しね。有償ですが、DuOSというAndroidエミュレータは非常に出来が良く、これを使うとかなり実機に近い（といっても当然及びませんが）感覚で使えます。Androidの大型タブレット市場は絶望的ですし（「&lt;a class="link" href="//hack-le.com/44729540-2/" &gt;12インチ以上の大型のAndroidタブレットが欲しい : 或る阿呆の記&lt;/a&gt;」）、買うからには、使い倒さねば。&lt;/p&gt;&#10;&lt;p&gt;Windowsマシン（というかPC自体）の購入は久しぶりですが、それにしても、なんだかWindowsマシンのラインナップが、たいへん元気がなくなってしまっているように思えました。Windowsが、というより、PC市場の元気がないのだとも思いますが、それにしても、そこそこの値段でそこそこのマシンが多くあったのが、Windows市場の魅力だと思っていたのですが。時代は変わっているようです。だからこそ、MicrosoftもSurfaceで高級路線に走っているのでしょう。私は買いませんが（しかし、私のトラウマを除くと、ハイエンドの2in1を、と思うとSurface以外はどうでしょうね。Sonyがすっかりやる気をなくしてしまっているのが痛いところです）。&lt;/p&gt;&#10;&lt;p&gt;HPのマシンがどんなものか、&lt;strong&gt;考えてみれば初のCore M&lt;/strong&gt;なのでちょっと楽しみです。まぁどんなものでも、少なくとも充電はできるでしょう！&lt;/p&gt;</description></item><item><title>デバイスの大きさと距離感が作業に影響する…文筆にはノートパソコンが最適であると思う</title><link>https://hack-le.com/47452491-2/</link><pubDate>Sun, 01 May 2016 13:57:24 +0900</pubDate><guid>https://hack-le.com/47452491-2/</guid><description>&lt;p&gt;私は複数のデバイスで作業をします。23インチディスプレイに繋げたデスクトップPCとしてMac mini、外出用のノートパソコンとしてMacBook Air（以下MBA）、第二のノートパソコンとしてHPのChromebook G3、それにタブレットにiPad Air 2、スマートフォンでiPhone 5とXperia Z3、各デバイスに役割が割り当てられています。経験的に、一番文筆作業がしやすいのは、ノートパソコンであるように思えます。&lt;/p&gt;&#10;&lt;h2 id="ノートパソコンのほうが記事を書くのが捗る気がする"&gt;ノートパソコンのほうが記事を書くのが捗る気がする&#10;&lt;/h2&gt;&lt;p&gt;家で作業する時は、基本的にデスクトップマシンであるMac miniを利用します。一番性能が高いですし、また画面も大きく見やすいのですから、当然のことです。ただまぁ、時にはスクリプトをずっと稼働させている時や、居間で作業をしたい時などに、MBAやChromebookの出番が回ってきます。いつでもどこでも、作業ができるのがノートパソコンのパワフルなところです。ブログ記事などは、ちょっとした時間に書くものですから、有難いですね。&lt;/p&gt;&#10;&lt;p&gt;そうしてMBAやChromebookでブログ記事を書く作業をしていると、&lt;strong&gt;不思議な事に、ノートPCのほうがデスクトップよりもなんだか作業が捗るような気がしています&lt;/strong&gt;。非常に計測し難いものなので、あくまで感触ではあるのですが、そう思います。&lt;/p&gt;&#10;&lt;h2 id="ノートと黒板"&gt;ノートと黒板&#10;&lt;/h2&gt;&lt;p&gt;考えてみると、ありそうなことです。PC市場の成長と共に青春を過ごした私は、画面の解像度は高く、またサイズは大きい方がよいに決まっているし、可能であればマルチディスプレイにしたほうがよいだろう、と長らく信じてきました。一時期は23インチのディスプレイを3つ並べていたこともあります。それが、&lt;strong&gt;大画面、複数画面は電気代ばかり要して実は作業効率を落とすものなのではないかという疑念&lt;/strong&gt;が生じたのは、3年ほど前のことで、その時にシングルディスプレイに戻しました。それは今も続いていて、正解だったかなと思っています。&lt;/p&gt;&#10;&lt;p&gt;理屈としては、それと同じことでしょうか。「&lt;a class="link" href="//hack-le.com/46318196-2/" &gt;電子書籍を利用する観点からみたデバイスの大きさについて : 或る阿呆の記&lt;/a&gt;」の記事においては、10インチクラスの端末では小説はむしろ読みづらいとしましたが、これと同じかもしれません。極端な話、黒板に文字を書くのはノートに書くより書きづらい。つまり、&lt;strong&gt;画面は大きければ良いというものではない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;確かに、大きな画面が必要な作業はあります。最近ホビーでUnityをいじっていますが、やはりCGを扱うような作業では、それなりの画面の広さが必要です。しかし、私の普段の作業は、ブログの記事を書いたり、コーディングしたり、Webブラウジングしたりといったことが主です。これらの作業において、&lt;strong&gt;ノートの黒板の境目は、案外小さなところにあるのではないか&lt;/strong&gt;。小説と漫画でさえ、読みやすいタブレットの大きさは違います。況やCG作業と文筆作業をや。&lt;/p&gt;&#10;&lt;h2 id="境界線はどこにある"&gt;境界線はどこにある&#10;&lt;/h2&gt;&lt;p&gt;なんとなく、&lt;strong&gt;文筆作業ややプログラミングをするうえで、最適なサイズは、11-15インチのどこか、つまりノートパソコンのサイズであるように感じます&lt;/strong&gt;。特に、12,13インチあたりが、くさいような。その人の視力、感じ方、体格などもあるので、もちろん一概に言えるものではありませんが、23インチが文筆に最適だ、ということはないように思います。&lt;/p&gt;&#10;&lt;p&gt;調べ物のために、書く領域と調べる領域の両方が必要で、そのために大きな画面を用意している、という人もいるでしょうが（私もそうです）、これも一考の余地があるように思います。画面&lt;strong&gt;が大きくなれば、自然と画面との距離も広がる&lt;/strong&gt;からです。&lt;strong&gt;画面との距離感もまた、大事&lt;/strong&gt;だと思っていて、やはり、大型ディスプレイを用いたときの一般的な距離は、ちょっと遠すぎる、そんな風に感じます。&lt;/p&gt;&#10;&lt;p&gt;それで、最近は、&lt;strong&gt;隣にiPadを置いたり、もう一台ノートパソコンを置くほうが捗るのではないか&lt;/strong&gt;、と思うようになりました。コピペの問題などもありますが、タブレットは脇に置くデバイスとしてうってつけだと思います。&lt;/p&gt;&#10;&lt;h2 id="他の作業との兼ね合い"&gt;他の作業との兼ね合い&#10;&lt;/h2&gt;&lt;p&gt;問題は、作業は文筆作業ばかりではないということです。前述のCG作業のように、大きな画面を要する作業をすることもあるので、やはりディスプレイは必要です。さらに、なんとなくブラウザでWebブラウジングする用途においては、大型の部類に入る23インチもなかなか良い大きさであり、逆に11インチはやや狭く感じることもあります。 &lt;strong&gt;「書く」と「見る」では、必要とされる視野が異なる&lt;/strong&gt;のでしょう。&lt;/p&gt;&#10;&lt;p&gt;フルスクリーン機能などを使って、その差をある程度埋めることもできると思います。デバイスは、できれば少ないほうがよい。しかし大きさは決まっている以上、一つですべてをこなすのはかえって非効率である。自分にとっての最適解を求めて、試行錯誤を重ねています。&lt;/p&gt;</description></item><item><title>映画「スティーブ・ジョブズ」を見ました。Appleファンなら見てもよいのでは</title><link>https://hack-le.com/47300765-2/</link><pubDate>Thu, 28 Apr 2016 18:00:03 +0900</pubDate><guid>https://hack-le.com/47300765-2/</guid><description>&lt;p&gt;あまり映画は見なかったのですが、最近はAmazonプライムビデオを見ることが多く、ちょくちょくと映画も見ています。で、以前より気になっていた映画の一つである、「スティーブ・ジョブズ」を見ました。&lt;/p&gt;&#10;&lt;h2 id="ダメなコミカライズのような端折り"&gt;ダメなコミカライズのような端折り&#10;&lt;/h2&gt;&lt;p&gt;自伝も未だ積読状態なのですが。私のように映画を見ない人間でも、Appleファンなら気になっている人はけっこういるのではないでしょうか。映画としての評価はあまり芳しくないようで、まぁそれも無理からぬかなと思いましたが、Appleファンなら、あるいはガジェットオタクならけっこう楽しめるのではないかな。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;話はかなりスピード感があります&lt;/strong&gt;。思い出したのは、昔のゲームのコミカライズです。最初は丁寧に描き、序盤は走り、中盤は駆け抜け、後半以降は描くことすらされない、そういう漫画がよくありました。いや、最近でもその傾向は変わらないかもしれませんね。本来数十時間かかるような、長い長いゲームを漫画で表現することは、たいへん難しいことのようです。&lt;/p&gt;&#10;&lt;p&gt;増して、スティーブ・ジョブズのような濃い人生を歩んだ人間を、二時間で描けとなれば、その労苦は筆舌に尽くしがたいものであることもむべなるかな。正直な感想を言えば、この映画でとても描けたとは言えますまい。私は予備知識がありますから、まだなんとか話の筋らしきものはわかりましたが、一緒に見ていた母は、半分寝ていたようです。話についていけなかったのでしょう。仕方ありません。&lt;strong&gt;色々なことを描こうとし過ぎて、結果何も描けなかった。そういう印象です。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="ロジックボードがあるだけで楽しい"&gt;ロジックボードがあるだけで楽しい&#10;&lt;/h2&gt;&lt;p&gt;恐らく、一般的にはあまりよろしくない映画であったと思います。けれど、&lt;strong&gt;コンピュータが主題というだけで、ガジェットオタクな人であれば楽しめるところもある&lt;/strong&gt;のではないでしょうか。パソコンの黎明期に振れられるだけでも、IBMやらHPやらの単語が飛び交うだけでも、ロジックボードが注目の的になっているだけでも、なんだか見ていて楽しい。&lt;/p&gt;&#10;&lt;p&gt;また、Appleファンにとっては、よく知る人物が画面の中を在りし日の姿で動き回る…いや、キャストがたいへんよく似ているのですよ。感心しました。ワームホールから引っ張りだしてきたのか？というくらいによく似ています。そんな彼らが、闊達に議論を交えている姿を見るだけでも、ワクワクするというもの。実際、私は終始画面に食い入るように見ていました。次の展開が気になって仕方ない。まぁ、わかるだけに、話をとても端折っている、ということもわかってしまうのですが。&lt;/p&gt;&#10;&lt;p&gt;一応、ジョブズの解雇、そして復帰がハイライトになっているようです。復帰後のことは描かれません。終盤は描かれない。一番おもしろかったのは、序盤の大学で燻っていた頃のジョブズを描いていたところかもしれません。まぁ限られた時間の中で、メリハリをつけようとしたのだと思うのですが、その割にどこがポイントだったのかはよくわからず、結果としては、印象はダメなコミカライズなのです。まぁそんな感じですので、一般にオススメできるかと言われると微妙なのですが、ガジェットオタクな人、Appleが好きな人、つまりこのブログの記事にたどり着くような人であれば、Amazonの星以上には楽しめるのではないでしょうか。&lt;/p&gt;</description></item><item><title>電子書籍で漫画を読むなら iPad を使えば間違いない</title><link>https://hack-le.com/47424339-2/</link><pubDate>Tue, 26 Apr 2016 22:49:26 +0900</pubDate><guid>https://hack-le.com/47424339-2/</guid><description>&lt;p&gt;本記事は、電子書籍で漫画を読むのにiPadが最適であると思う理由について、私の経験から記述したものです。私は複数のタブレット、スマートフォンを所持しており、それらを用いて電子書籍をよく読んでいます。&lt;/p&gt;&#10;&lt;p&gt;2016/10/19追記：Kindle Paperwhiteマンガモデルなんてのが発表されましたが、私の評価は変わりません「&lt;a class="link" href="//hack-le.com/kindlemanga/" &gt;Kindle マンガモデルの所感…Amazonが日本を意識したことに意義が&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="漫画は電子書籍でしか読まない"&gt;漫画は電子書籍でしか読まない&#10;&lt;/h2&gt;&lt;p&gt;ここ三年以上、電子書籍以外で漫画を購入していないと思います。昔のマニアックなやつを買おうと思えばそういうわけにもいかないでしょうが、&lt;strong&gt;ある程度最近の漫画（ここ十数年くらい）であれば、まぁだいたい電子化されました&lt;/strong&gt;。いまだされていないのもありますが、電子化されていないから購入しない、ということが既に自分にとっては普通のことです。&lt;/p&gt;&#10;&lt;p&gt;電子書籍には色々と問題があるのは事実ですが、それなりに便利に使えます。むしろ、問題はそれなりに使ってしまえていることかもしれません。それなりに便が良いばかりに、根本的な解決をしようというモチベーションが上がらない。&lt;/p&gt;&#10;&lt;p&gt;まぁ、今はそのことは置いておきます。とにかく、現状の電子書籍はそれなりの便があり、また私は愉快に使っているということです。以前「&lt;a class="link" href="//hack-le.com/46318196-2/" &gt;電子書籍を利用する観点からみたデバイスの大きさについて : 或る阿呆の記&lt;/a&gt;」という記事を書きましたが、今回はさらに狭く、「漫画を読む」という一点に絞って、電子書籍を読むデバイスについて語ります。まぁ、&lt;strong&gt;結論から言えば、なんも考えずに iPad 買えば幸せ&lt;/strong&gt;だよ、という話なのですが。&lt;/p&gt;&#10;&lt;h2 id="デバイスに求められる条件"&gt;デバイスに求められる条件&#10;&lt;/h2&gt;&lt;p&gt;まずざっくりと、漫画を読む上で求められるデバイスのスペックについて列挙します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;大きさ… 10インチ&lt;/li&gt;&#10;&lt;li&gt;解像度…フルHD以上. アスペクト比4:3推奨&lt;/li&gt;&#10;&lt;li&gt;重さ…500g 以下&lt;/li&gt;&#10;&lt;li&gt;種々のサービスに対応する（KindleやKoboなど）…専用リーダーはNG&lt;/li&gt;&#10;&lt;li&gt;ローカルの容量…64GB以上&lt;/li&gt;&#10;&lt;li&gt;スペック…漫画だけならそれなりでいい&lt;/li&gt;&#10;&lt;li&gt;ディスプレイ…地味に大事&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;以上をまとめると、真っ先に思い浮かぶのは iPad です。最近は、Air か Proか、という話もありますが。もう少し、細かく見ていきます。&lt;/p&gt;&#10;&lt;h3 id="解像度フルhd以上で10インチは欲しい"&gt;解像度フルHD以上で10インチは欲しい&#10;&lt;/h3&gt;&lt;p&gt;電子書籍読む時に一番大事なのは、まず何よりも大きさです。これが4コマだけ読むのであれば何でも構いませんが（5インチでもまぁ読める）、漫画は見開き文化です。特にアクションがウリのものは。進撃の巨人なども、見開きが多いですね。こういった漫画で、見開きを1ページずつスライドして表示するのは、たいへん興ざめです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;見開きで楽しむのには、大きさがやはり10インチは欲しい&lt;/strong&gt;。iPad mini の7.9インチ、あれはかなりギリギリでしょう。漫画主体ならオススメできない大きさです。また、&lt;strong&gt;解像度はフルHD以上&lt;/strong&gt;。初代iPadで身にしみてわかりましたが、それくらいないと見開き表示にしたとき荒さが目立ちます。荒さが目立つと嫌になります。嫌になると読まなくなります。だから、HDクラスではダメで、フルHD以上が必要です。また、&lt;strong&gt;アスペクト比はワイドより4:3のほうが、電子書籍においては無駄がありません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;この条件を満たす代表格は iPad です。まぁ10.1インチのワイドなフルHD端末はいっぱいありますし、それでもいいですが。映画を見るのには、ワイドのほうがいいですね。私も最近はよくAmazonプライムビデオを閲覧するので、ワイドが欲しいなと思うことがあります。まぁ、本当に漫画だけ、でなければ、このあたりは総合的に判断する必要があるでしょうけれど、本記事はコミックビューアとしての用途にスポットを当てておりますので。&lt;/p&gt;&#10;&lt;h3 id="重さは重要"&gt;重さは重要&#10;&lt;/h3&gt;&lt;p&gt;重さは少なくとも 500g 以下、&lt;strong&gt;できれば 400g 以下&lt;/strong&gt;になるとよいのですが、10インチクラスで現状それを満たせるのは Xperia Tablet Z4 くらいのものなので、まぁ 500g 以下としましょう。&lt;/p&gt;&#10;&lt;p&gt;私は 初代Surface Pro も持っているのですが、これをなかなか使う気になれない理由（はたくさんありますけど）の一つに、重さがあります。900g はさすがに重い。これはタブレットとしてはとても気易い大きさではない。&lt;/p&gt;&#10;&lt;p&gt;900g は極端にしても（一応Surfaceはタブレットの区域だそうですが）、Air 以前のiPadは 600g 以上ありました。かつて新しかった iPad 3 を使っていた身からすると、iPad Air 2 に乗り換えた時、まず感動したのはその重さでした。Air 2 になってから、iPad の使用頻度が激増したのですが、その理由の一つに重さがあることはまず間違いありません。&lt;strong&gt;肉体的にももちろんですが、精神的な面においても、重さというのは存外重要なファクター&lt;/strong&gt;なのだと思います。&lt;/p&gt;&#10;&lt;h3 id="種々のサービスに対応する"&gt;種々のサービスに対応する&#10;&lt;/h3&gt;&lt;p&gt;残念ながら、電子書籍のプラットフォームは現在まったく統一されていません。多様性があるのはよいのですが、&lt;strong&gt;問題はストアとリーダーがワンセットになっていること&lt;/strong&gt;です。Kindleで購入した書籍はKindleアプリまたはKindle端末で見ることを要求されますし、Koboで購入した書籍についても同様です。したがって、&lt;strong&gt;ストアに縛られないためには、複数のアプリを利用できることが必要&lt;/strong&gt;です。故に、Kindle端末などの専用リーダーではなく、&lt;strong&gt;OSが通常のiOSあるいはAndroidのタブレットであること&lt;/strong&gt;が求められます。&lt;/p&gt;&#10;&lt;p&gt;なお、制限はDRMによってなされていますが、技術書ではDRMフリーの書籍が散見されるものの、DRMフリーの漫画はちょっと見たことがありません。いえ、まったくないことはないのでしょうが、メジャーではないでしょう。これは残念なことです。&lt;/p&gt;&#10;&lt;p&gt;最近はWeb雑誌も多いですしね。「&lt;a class="link" href="http://www.ganganonline.com/" target="_blank" rel="noopener"&#10; &gt;ガンガンONLINE | SQUARE ENIX&lt;/a&gt;」や「&lt;a class="link" href="http://ganma.jp/" target="_blank" rel="noopener"&#10; &gt;GANMA!(ガンマ) - ガンマで、マンガを、ガマンしない。&lt;/a&gt;」、「&lt;a class="link" href="http://plus.shonenjump.com/rensai_index.html" target="_blank" rel="noopener"&#10; &gt;少年ジャンプ＋&lt;/a&gt;」など色々あります。こういったものを楽しむのにも、専用リーダーはよろしくありません。自分のサービスだけを楽しめ、という思想は現代的ではないと思うのですが、Amazonが自サービスに拘るのは不思議です。&lt;/p&gt;&#10;&lt;h3 id="ローカルの容量はある程度必要"&gt;ローカルの容量はある程度必要&#10;&lt;/h3&gt;&lt;p&gt;漫画は画像の塊ですから、一冊だけで数十MB以上あります。画質のよいものであれば、100MBを超えるものもあります。したがって、&lt;strong&gt;ローカルの容量はある程度ないと、快適な楽しみ方ができません&lt;/strong&gt;。具体的には、64GB以上あると、何も考えなくてよいと思います。本当に漫画だけであれば、32GBでもそれなりだと思いますが、しかし昨今32GBというのは中途半端な容量ですし、まぁストレージは64GB以上がよかろうと思います。&lt;/p&gt;&#10;&lt;p&gt;自炊メインであれば、NASなどにデータを置いて、ストリーミングで楽しめばよいのではないか、という見方もあるでしょう。それは可能です。私などはそうしてもいます。しかし、常にデータをストリーミングで楽しめる環境かというと、けっこう厳しいのではないでしょうか。自宅でしか使わない、DRMでガチガチのストアなんか使わない、データは全部サーバーにある、という人であればよいでしょうが。&lt;/p&gt;&#10;&lt;h3 id="マシンのパワーはそこそこでよいがディスプレイは大事"&gt;マシンのパワーはそこそこでよいがディスプレイは大事&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;漫画しか読まないのであれば、マシンのパワーはそこまで必要ありません&lt;/strong&gt;。透明テキスト付きのPDFなんかは、非常にマシンのパワーを要するのですが、漫画であればjpgの塊を読むだけの話です。新しかった iPad 3 以前並のパワーのマシンだと、ちょっとしんどいところがあるかもしれませんが、逆にいうと、それ以降のマシンであればまず問題ないかと思います。10インチクラスであれば、CPUもそこそこのはずです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;それよりも、ディスプレイ&lt;/strong&gt;です。ディスプレイのほうが大事です。まぁ、ディスプレイがまともなやつを選ぼうと思えば、自ずとマシンのパワーも問題ないでしょう。&lt;strong&gt;私があまり安物を薦める気になれないのは、安価なマシンでコストカットの犠牲となっているパーツがディスプレイだから&lt;/strong&gt;です。漫画は視覚で楽しむもの。まぁ、たいていの漫画はまだまだモノクロですし、モノクロを楽しむ分にはそこまで拘らなくても、という考えもあるでしょうが、ここは、ケチるところでもないかなと思います。&lt;/p&gt;&#10;&lt;h2 id="まとめると-ipad"&gt;まとめると iPad&#10;&lt;/h2&gt;&lt;p&gt;以上の条件をまとめると、まぁ iPad が思い浮かびます。&lt;strong&gt;特にOSのコダワリがなければ、iPad 64GB で良い&lt;/strong&gt;と思います。Air か Pro かという問題がありますが、まぁ予算次第です。私が今から買うとすれば Pro ですが、一般的には Air で十分でしょう。既にタブレットのスペックアップは停滞していますので、今買ったタブレットは長く使えるものと思います。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00OT3VU58" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#10;&lt;h2 id="番外電子書籍化が難しそうな漫画-カスミ伝"&gt;番外：電子書籍化が難しそうな漫画 カスミ伝&#10;&lt;/h2&gt;&lt;p&gt;ところで、私の本棚にはまだスキャンしていない漫画があります。多くは面倒臭いからですが、&lt;strong&gt;例外的に自炊そのものが困難として手を付けていない漫画&lt;/strong&gt;があります。唐沢なをきのカスミ伝です。だってこんなんだよ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/d/f/df70c06e.jpg" &gt;&lt;img alt="17" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/d/f/df70c06e-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;付録があったり、シール部分があったり、袋とじがあったり、折り込みがあったり、ありとあらゆる自炊泣かせの要素がてんこもり。&lt;strong&gt;奇しくも、アナログでできるがデジタルでできないことを体現する漫画になっていました&lt;/strong&gt;。もっとも、それがいかに特殊なものであるかともいえます。でも、しっかりとKindle化されてるんですよね。どんな感じになってるんでしょう。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0154EEQBU" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Ping-t だけ使った勉強法で LPIC Level 1と2 は問題なし</title><link>https://hack-le.com/47349677-2/</link><pubDate>Sun, 24 Apr 2016 15:44:49 +0900</pubDate><guid>https://hack-le.com/47349677-2/</guid><description>&lt;p&gt;自分はLPICはなんとなく難しそうな印象だったのですが、いざやってみるとそうでもありませんでした。実際、IT系の資格としても、エントリー的なポジションのようです。そうだったのですね。&lt;/p&gt;&#10;&lt;p&gt;本記事では、LPIC Level 1から2までの取得において、自分がやってきた勉強方法、勉強時間について記述します。&lt;/p&gt;&#10;&lt;p&gt;なお、これまでに受けた試験の雑感は以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/45818596-2/" &gt;LPIC 101(Ver4.0) 合格 Ping-tだけで十分のよう : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/47002400-2/" &gt;LPIC 102 合格 Ping-t だけで十分 : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/47281707-2/" &gt;LPIC 201 合格。勉強法はPing-tのみ。勉強時間は24時間 : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/47339281-2/" &gt;LPIC 202 に合格し、ようやくレベル2 を取得。LPIC 202 の勉強時間、難易度、雑感 : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="勉強法ping-tのみ"&gt;勉強法：Ping-tのみ&#10;&lt;/h2&gt;&lt;p&gt;勉強法ですが、これはWebの「&lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LPIC/オラクルマスター/ITパスポート/ITILファンデーション総合学習サイト&lt;/a&gt;」のみで行いました。参考書の類はほぼ読んでいません。中古で買った試験旧バージョンのものを流し読みした程度で、実質的にPing-tのみです。それでも、十分でした。&lt;/p&gt;&#10;&lt;p&gt;勉強の進め方は次のとおり。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Web問題集を2週してすべて金にする&lt;/li&gt;&#10;&lt;li&gt;コマ問を1週&lt;/li&gt;&#10;&lt;li&gt;問題集を模擬試験形式&lt;/li&gt;&#10;&lt;li&gt;コマ問を全問選択でランダム20-30問 を繰り返し、模擬試験正答率が9割、コマ問正答率が8割を問題なく取れることを確認&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;20 - 30 時間もあれば、まずこなせる&lt;/strong&gt;と思います。私はだいたい25時間程度かかっていました。合格のためだけならば、必ずしもコマ問は必要ないかもしれませんが、コマ問は以外なほどあっさり終わらせられますし、また記憶の定着には確かに役立つと思うので、面倒ですが私はオススメします。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;問題集を解く際、解説はなるべく目を通すよう心がけました&lt;/strong&gt;。何度も同じ解説を目にしているうちに、いつの間にかなんとなく覚えているような感じです。実際に答えの単語を書くと覚えやすいですが、 &lt;strong&gt;「書く」よりも「見る」「読む」を繰り返すほうが、定着率は高いと思います&lt;/strong&gt;。たまには「書く」のも良いと思いますが、どうしても「書く」は時間がかかりますので。&lt;/p&gt;&#10;&lt;p&gt;LPIC 101から初めて、100時間ほど勉強すれば、たいていの人はレベル2まで問題なく習得できるものと思います。要領よくやれば、もっと短時間でも可能でしょう。&lt;/p&gt;&#10;&lt;h2 id="lpic-level-2-のあと"&gt;LPIC Level 2 のあと&#10;&lt;/h2&gt;&lt;p&gt;LPIC はどうもレベル3までいかないと、あまり人に言えるようなものでもなさそうなので、そこまでやり始めるからにはそこまで頑張らないといけないと思います。が、その前に、これまでに学んだ内容で、ホビーなり仕事なりに活かせそうなところを、ちょっと実践に取り入れてみようと思っています。具体的には、&lt;strong&gt;自分が管理しているVPSについて、これこれしていているのでセキュアであるし、また現状こうなので問題ない、とハッキリ言えるようになろう&lt;/strong&gt;と思っていて、以下の作業を考えています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;VPSで、ログなどをメールで定期的に送る&lt;/li&gt;&#10;&lt;li&gt;fail2ban の活用&lt;/li&gt;&#10;&lt;li&gt;自サイトのSSL可（このブログではない）&lt;/li&gt;&#10;&lt;li&gt;Apache の設定を見直し&lt;/li&gt;&#10;&lt;li&gt;journalctl を用いたログの管理&lt;/li&gt;&#10;&lt;li&gt;OpenVPN の利用&lt;/li&gt;&#10;&lt;li&gt;やれそうだったら nginx への移行&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;まぁまだちょっと漠然としていますが。遠隔での管理は、私の用途では OpenSSH でほぼ事足りているのですけれど、&lt;strong&gt;ssh は Windows クライアントからは使いづらい&lt;/strong&gt;のが現状です（Windows 10で標準サポートするという噂も聞きますが）。まぁ私は Windows は補助的にしか使いませんが、周囲はやはりそうでもないわけです。OpenVPN による管理のほうが、Windows クライアントにはまだ優しいところがありそうなので、まぁ一つ勉強がてらやってみようか、という感じです。nginx は、Raspberry Pi で利用したいがためですね。apache で簡単なWebアプリを構築すると、けっこう重たいことがわかるので、軽いと評判の nginx ならばどうだろうか、という希望です。&lt;/p&gt;&#10;&lt;p&gt;落ち着いたら、LPIC 303あたりを受験しようと思っています。Ping-t が対応してくれればよいのですが。Ping-t に問題がある旧試験の301,302 と内容が近い 300 を先にやるかも。&lt;/p&gt;&#10;&lt;p&gt;（追記2017/07/06）以上の事項はほとんど達成しました。ログを毎日収拾してメールで送り、fail2banでしつこい阿呆をbanし、当サイト（ではないと言いつつ）をSSL化し、nginxに移行しました。OpenVPNはVPSでは必要ないのでしていませんが、宅内でサーバーをたてました。別に試験勉強をしたおかげでできたわけではありません。都度、調べて実装しました。ただ、こういうことができる、ということを知ったという点において、試験の意義があったと思います。そのために数万円……高いですね。試験受けなくても同じことできたなとは思うけれど、しかし合格証はモチベーションになるのも確かだし……難しいとこですなぁー。&lt;/p&gt;&#10;&lt;h2 id="資格は手段である"&gt;資格は手段である&#10;&lt;/h2&gt;&lt;p&gt;色々と思うところはあるのですが、あまり先のことを考えないようにしようと思います。今まで生きてきて、私はあまり野心的に自分から人を巻き込んで大きなことをしようとするタイプでもないことは、もう十分にわかっています。私はいわゆる自己完結型の人間なのかもしれません。だからこそ日記が続くのかもしれないし、SNS全盛の今日に、ネットの孤島で長々と独白するようなブログを延々と続けられるのかも。であるとすれば、そのように育ってきましたし、いまさらそれが変わるとも思えません。しかし、ネットの孤島とはいえオープンであることは事実なのだから、やはり他者との関係を求めているのでしょうか。自分のことほどわからないものです。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、自分にとって本当に必要なこと、自分が本当に実現したいことに向けて、自分のできることを１つずつ増やしていこうと、資格も含め、すべてはそのためのことであると、今はそんな風に考えています。&lt;/p&gt;</description></item><item><title>MacBook Airの隙がなくなった。13インチ が標準メモリ 8GB にマイナーアップデート</title><link>https://hack-le.com/47381184-2/</link><pubDate>Thu, 21 Apr 2016 00:12:54 +0900</pubDate><guid>https://hack-le.com/47381184-2/</guid><description>&lt;p&gt;新型MacBook発売のニュースの陰に、しれっとMacBook Air 13インチがマイナーアップデートしました（「&lt;a class="link" href="http://japanese.engadget.com/2016/04/19/13-macbook-air-ram-8gb-retina/" target="_blank" rel="noopener"&#10; &gt;13インチMacBook Air、価格据置きでRAMが標準8GBにアップグレード。Retinaディスプレイは不採用 - Engadget Japanese&lt;/a&gt;」）。標準のメモリが4GBから8GBにアップグレードです。値段は据え置き。&lt;/p&gt;&#10;&lt;h2 id="メモリはmacbook-airでほぼ唯一の考えどころだった"&gt;メモリはMacBook Airでほぼ唯一の考えどころだった&#10;&lt;/h2&gt;&lt;p&gt;これはたいへん嬉しいですね。これまで8GBにしようと思ったら、オンラインストアでCTOするしかなかったわけですが、&lt;strong&gt;これからは通販で値下げされたものを購入することができる&lt;/strong&gt;ことになります。とてもお財布に優しいですね。庶民には有難いことです。&lt;/p&gt;&#10;&lt;p&gt;私は現在 2013年のMacBook Air 11インチを愛用しています。これはたいへん良いマシンで、購入した当時はCPUに不安を感じていたものですが、&lt;strong&gt;実際に使ってみると1.3GHzというクロック周波数からは想像もつかない良好なパフォーマンスを発揮&lt;/strong&gt;してくれました。もちろん、解析スクリプトや仮想化など高負荷な作業を行えば、それなりに重たくはなります。しかし、日常のたいていの作業ではほとんど問題になりません。PCIeのフラッシュメモリで I/O の性能が良いせいなのか、処理によってはクアッドコア Core i7 のMac miniでももたつく処理がスムーズにできることさえあります。&lt;/p&gt;&#10;&lt;p&gt;満足度が高く、まだまだ当分使えてしまいそうだなぁというMacBook Airですが、&lt;strong&gt;一点気になっていたのは、メモリ容量&lt;/strong&gt;です。先にあげた高負荷な作業の１つ、仮想化などは、メモリが8GBであればその重さは幾分緩和されるように思えます。もっとも重要な作業の１つであるWebブラウジングも、より潤沢にキャッシュを使えるのでレスポンスがよくなりそうです。&lt;/p&gt;&#10;&lt;p&gt;メモリ容量が8GBになることは、次の買い替え要件における個人的な必要条件でした。まぁ、現状でも十分使えているので、即買い替え、には至りませんが、一歩、マシンの新調に近づいた感があります。MacBook Pro の標準が16GBになったりはしませんかねぇ。&lt;/p&gt;&#10;&lt;h2 id="11インチの行方は"&gt;11インチの行方は&#10;&lt;/h2&gt;&lt;p&gt;Appleが今ノートパソコンで力を入れているのは明らかに MacBook で、MacBook Air はその立ち位置が微妙です。ディスコンの噂さえチラホラと聞こえてきます。今回こうしてマイナーアップデートされたということは、まぁ当分 MacBook とは共存してくれるのでしょう。それは嬉しいことです。MacBook は面白いマシンですが、さすがにパフォーマンスに心配があります。店頭でちょっと触っただけでも、今使っているMacBook Air 2013以上のもたつきが Safari で感じられました。私はそれなりに高負荷の作業もしますから、MacBookはまだまだ力不足でしょう。さりとて、MacBook Proはなかなか踏ん切りが付かない。&lt;strong&gt;ノートパソコンでRetinaを必ずしも重要視しない私にとって、MacBook Airはちょうどよい選択肢&lt;/strong&gt;なのです。バッテリーも持ちますし。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、動きのなかった11インチの行く末は心配です。2015年モデルを最後になくなってしまう、なんてこともまことしやかに囁かれています。最近ホビーで Unity などもいじることがあるので、次買うならば12インチ以上にしようかな、と思ってはいるものの、なくなるのは寂しい。見た目がコンパクトでスマートですし、持ち運びにも非常に良い大きさなのですが、アメリカ人には小さすぎるのでしょうかねぇ…。&lt;/p&gt;</description></item><item><title>Raspberry Pi でSPI通信のAD変換 MCP3008 を使う</title><link>https://hack-le.com/47361017-2/</link><pubDate>Mon, 18 Apr 2016 16:30:45 +0900</pubDate><guid>https://hack-le.com/47361017-2/</guid><description>&lt;p&gt;本記事は、Raspberry Pi で SPI通信できるAD変換の MCP3008 を利用することを目的とした記事です。MCP300xシリーズは、ラズパイ本だとよく出てくるので定番ぽいです。調べていると出てくる謎めいた式data = ((adc[1]&amp;amp;3) &amp;lt;&amp;lt; 8) + adc[2]をちゃんと解説します。&lt;/p&gt;&#10;&lt;h2 id="spi方式のadc-mcp3008"&gt;SPI方式のADC MCP3008&#10;&lt;/h2&gt;&lt;p&gt;以下のようなスペック。データシートは「&lt;a class="link" href="http://ww1.microchip.com/downloads/en/DeviceDoc/21295d.pdf" target="_blank" rel="noopener"&#10; &gt;21295d.pdf&lt;/a&gt;」。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;量子化ビット数：10bit&lt;/li&gt;&#10;&lt;li&gt;最大サンプリング周波数：200kHz(2.7V では 75kHz)&lt;/li&gt;&#10;&lt;li&gt;入力8ch（差動なら4ch）&lt;/li&gt;&#10;&lt;li&gt;動作電圧 2.7 - 5.5V&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;量子化は10bitですが、サンプリング周波数がMax 200kHzです。レートを落とせば8chまで使えます。OSがLinuxですし、連続的にではなく、単発あるいは断続的に取得する用途になると思うので、ch数の多さは魅力かもですね。安いし。例によってスイッチサイエンスさんから手軽に購入できます「&lt;a class="link" href="https://www.switch-science.com/catalog/list/?keyword=mcp3008" target="_blank" rel="noopener"&#10; &gt;Products - スイッチサイエンス&lt;/a&gt;」。Amazonでも。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0133B5ZUM" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B010AZHBDS" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="spiを使う準備"&gt;SPIを使う準備&#10;&lt;/h2&gt;&lt;p&gt;SPIが使えるように準備をします。&lt;/p&gt;&#10;&lt;pre&gt;`# カーネルのバージョンが3.18以上であることを確認。もしそれ以下なら rpi-update&#13; $ uname -r&#13; # SPI を有効化&#13; $ sudo raspi-config&#13; -&gt; 9 Advanced Option -&gt; A6 SPI より有効化、また有効化をデフォルトに設定（対話式）&#13; $ sudo reboot&#13; $ lsmod | grep spi&#13; -&gt; spi_bcm2835 がロードされていることを確認&#13; # SPI通信に必要なPythonライブラリをインストール(入ってるかも)&#13; $ sudo apt-get install python-spidev&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="ハードウェアの準備"&gt;ハードウェアの準備&#10;&lt;/h2&gt;&lt;p&gt;SPIは4線式で、またMCP3008は接続するところが多いので、ちょっと面倒です。「&lt;a class="link" href="http://qiita.com/masato/items/f089a17b1c9329eb7d03" target="_blank" rel="noopener"&#10; &gt;Raspberry PiのPythonからTMP36のアナログ温度センサとMCP3008のADコンバータを使う - Qiita&lt;/a&gt;」の記事がたいへん参考になります。ここでは以下のように接続しました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;RPi(5V, 2pin) &amp;lt; &amp;ndash; &amp;gt; MCP([Vdd,Vref],[16pin,15pin])&lt;/li&gt;&#10;&lt;li&gt;RPi(GND, 6pin) &amp;lt; &amp;ndash; &amp;gt; MCP([AGND,DGND],[14pin,9pin])&lt;/li&gt;&#10;&lt;li&gt;RPi(SCLK, 23pin) &amp;lt; &amp;ndash; &amp;gt; MCP(CLK,13pin)&lt;/li&gt;&#10;&lt;li&gt;RPi(MISO, 21pin) &amp;lt; &amp;ndash; &amp;gt; MCP(Dout, 12pin)&lt;/li&gt;&#10;&lt;li&gt;RPi(MOSI, 19pin) &amp;lt; &amp;ndash; &amp;gt; MCP(Din, 11pin)&lt;/li&gt;&#10;&lt;li&gt;RPi(CE, 24pin) &amp;lt; &amp;ndash; &amp;gt; MCP(CS, 10pin)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Vrefに入力した電圧以下の電圧を測定します。今回は5Vを入れたので、5V以下を測ります。量子化10bitなので、分解能は5V/2^10で約5mVです。SPIの用語等についても少し。CLK信号は、信号のやりとりのタイミングを決める基準となる信号です。MISOは味噌…ではなく、Master Input Slave Outputで、意味はそのまま。MOSIはその逆です。CE/CS は Chip Select だそうですが、WikipediaだとSS(Slave Select)になってますね（「&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%BB%E3%83%9A%E3%83%AA%E3%83%95%E3%82%A7%E3%83%A9%E3%83%AB%E3%83%BB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9" target="_blank" rel="noopener"&#10; &gt;シリアル・ペリフェラル・インタフェース - Wikipedia&lt;/a&gt;」）。AGNDはアナログ信号のグランド、DGNDはデジタル信号のグランドです。本当は分けたほうがよいのですが、まぁテストなので。&lt;/p&gt;&#10;&lt;p&gt;今回、Raspberry Pi の 3.3V 電圧を、100kオームの抵抗を挟んで、MCP3008の1pin、すなわち1chの入力信号としました。この3.3Vを測ります。&lt;/p&gt;&#10;&lt;h2 id="スクリプト"&gt;スクリプト&#10;&lt;/h2&gt;&lt;p&gt;スクリプトとその解説。スクリプトは「「&lt;a class="link" href="http://qiita.com/masato/items/f089a17b1c9329eb7d03" target="_blank" rel="noopener"&#10; &gt;Raspberry PiのPythonからTMP36のアナログ温度センサとMCP3008のADコンバータを使う - Qiita&lt;/a&gt;」を参考にさせていただきました。&lt;/p&gt;&#10;&lt;h3 id="スクリプトの実行"&gt;スクリプトの実行&#10;&lt;/h3&gt;&lt;pre&gt;`#!/usr/bin/env python&#13; # -*- coding:utf-8 -*-&#13; import spidev&#13; spi = spidev.SpiDev()&#13; # spi.open(bus,device)&#13; spi.open(0,0)&#13; # 解説参照&#13; def readAdc(channel):&#13; adc = spi.xfer2([1,(8+channel)&lt;&lt;4,0])&#13; print(adc)&#13; data = ((adc[1]&amp;3) &lt;&lt; 8) + adc[2]&#13; return data&#13; &#13; def convertVolts(data, vref):&#13; volts = (data * vref) / float(1023)&#13; volts = round(volts,4)&#13; return volts&#13; &#13; if __name__ == '__main__':&#13; # 1ch -&gt; 0, ..., 8ch -&gt; 7&#13; ch = 0&#13; data = readAdc(ch)&#13; print("adc : {:8} ".format(data))&#13; # MCP3008 の Vref に入れた電圧. ここでは 5V&#13; v = 5.0&#13; volts = convertVolts(data, v)&#13; print("volts: {:8.2f}".format(volts))&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;↑を~/spi/test.py として保存し、実行した結果↓&lt;/p&gt;&#10;&lt;pre&gt;`pi@raspberrypi:~/spi$ python test.py&#13; [0, 2, 186]&#13; adc : 698&#13; volts: 3.41&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;次節で解説。&lt;/p&gt;&#10;&lt;h3 id="解説"&gt;解説&#10;&lt;/h3&gt;&lt;p&gt;mainにある、readAdc(ch) は、ch のデバイス（ここではMCP3008）と送受信のやりとりをする関数です。spi.xfer2 で、データを送信し、それと同じだけのデータを受信しています。adc = spi.xfer2([1,(8+channel)&amp;lt;&amp;lt;4,0])は、00000001 1xxx0000 00000000 を送信しているのと同じです。最初の 00000001 はスタートビット。1xxx は ch によります。たとえば、1chなら0なので、1xxx - &amp;gt; 1000 だし、2ch は 1 なので、1xxx -&amp;gt; 1001 となります。また、1xxx の1は、シングルエンドという意味で、ここを0にすると差動方式です。最後の 1xxx から後ろは特に意味がありません。このあたりの詳細は、データシートの5節を見ると、テーブルとタイミング図がのっています。&lt;/p&gt;&#10;&lt;p&gt;さて、同じだけのデータも返ってきて、それが変数 adc に格納されます。データシートを見ると、スタートビットから4bitだけ送信したあと、1.5 bit分の長さでサンプリングし、その結果を Dout から 10bit で出力しています（下図）。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/7/0/7028f7c6.jpg" &gt;&lt;img alt="17" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/0/7028f7c6-s.jpg"&gt;&lt;/a&gt;&#10;データシートより抜粋&#10;受信した信号は [ 0, 2, 186 ]、すなわち 00000000 00000010 10111010 です。タイミング図を見て、必要なところを取り出し、整形しましょう。その部分が data = ((adc[1]&amp;amp;3) &amp;lt;&amp;lt; 8) + adc[2] に相当します。&lt;/p&gt;&#10;&lt;p&gt;まず最初のadc[0] = 0 、つまり 00000000 はスタートビットのところなので、無意味です。次の adc[1] = 2、つまり00000010 は、意味がありそうですが、数えると、最初の 4bit はこちらがチャネルなどの情報を相手に送っているところで、次の1bitはサンプリングの時間です。で、その次の1bit が Null で、その次の10bitがデータ本体ということになります。すなわち、00000010 のうち、上位6bit は必要ありません。それを式として表現すると、2進数11との論理積、つまり adc[1]&amp;amp;3 となります。これで下位2bitだけ取り出せました。この下位2bitは、データ全体では 9,10bit 目に相当するので、8bit 左にシフトし、その値に最後の1byteをくっつけると、求める値になります。この値が data で、readAdc() の返り値です。今回の例では、698 です。&lt;/p&gt;&#10;&lt;p&gt;さて、返り値 698 が実際に何 V であるかを計算するのが、convertVolts() です。これは簡単で、 Vref の電圧を量子化ビット分で除算した値で掛け算してやれば、求める電圧になります。ここでは、量子化10bitなので、 698 * 5.0V / 1023 となり、その計算結果が 3.41 V です。だいたいこんなところでしょうか。&lt;/p&gt;&#10;&lt;p&gt;見方がわかれば、MCP300xシリーズはデータシートを見ながら同じように使えるはず、です。&lt;/p&gt;&#10;&lt;h3 id="コメントより通信が失敗する場合"&gt;（コメントより）通信が失敗する場合&#10;&lt;/h3&gt;&lt;p&gt;コメント欄より、以下のような情報をいただきました。私が確認できておらず申し訳ないですが、ご参考までに。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;通信が失敗する方へ：&lt;/p&gt;&#10;&lt;p&gt;spi.open(0,0)&#10;の直後に&#10;spi.max_speed_hz = 1000000&#10;という行を挿入するとうまくいく場合があるようです.&lt;/p&gt;&#10;&lt;p&gt;「カラー図解 最新 Raspberry Piで学ぶ電子工作」補足情報 &lt;a class="link" href="https://raspibb1.blogspot.com/" target="_blank" rel="noopener"&#10; &gt;https://raspibb1.blogspot.com/&lt;/a&gt; の&#10;「PDF11：spidevを用いてAD変換を行うプログラムをkernel 4.9.43以降で使う場合」&#10;の項にあるとおり, kernel 4.9.43以降はkernelの変更によりSPI通信の最大周波数の設定が必要になったそうです.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;下記の記事を参考にしました。ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://qiita.com/masato/items/f089a17b1c9329eb7d03" target="_blank" rel="noopener"&#10; &gt;Raspberry PiのPythonからTMP36のアナログ温度センサとMCP3008のADコンバータを使う - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://blog.goo.ne.jp/fdfpy/e/17fea75c9320d1b008ac124a6fe99f67" target="_blank" rel="noopener"&#10; &gt;自分の部屋の温度をロギングしてみました。 - Raspberry Pi トライ日記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://sites.google.com/a/joekamphaus.net/raspberry-pi-spi-interface-to-mcp3002/" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi SPI interface to MCP3002&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>iPad Pro 9.7 インチと iPad Air 2 で悩む人は Pro を選ぶほうがいい</title><link>https://hack-le.com/47345030-2/</link><pubDate>Sat, 16 Apr 2016 03:45:35 +0900</pubDate><guid>https://hack-le.com/47345030-2/</guid><description>&lt;p&gt;新型の9.7インチ iPad が発売されたのが先月のことです。私はiPad Air 2で十分満足しているのですが、まぁ新型はやはり気になるので、なんとなくチェックはしていました。Air 2 は値引きして継続販売という状態ですが、Pro 9.7インチと比較した時、どちらがよいのかについて思うところを書きます。&lt;/p&gt;&#10;&lt;h2 id="大きいがマニアックな進化"&gt;大きいがマニアックな進化&#10;&lt;/h2&gt;&lt;p&gt;iPad Pro 9.7インチについて、各種レビューも揃ってきました。名前が Pro になったことが、一番の驚きとして受け止められているように思います（事前のリーク通りではありますが）。肝心な機能的な進化といえば、それは幾分マニアックなものといえましょう。端的に言えば、&lt;strong&gt;ディスプレイと音がよくなり、Apple Pencil に対応した&lt;/strong&gt;、といったところのようです。CPUおよびGPUの性能向上も付け加えられるべきでしょうか。しかし、私が持っている iPad Air 2 でも、タブレット端末で使われるような用途については、既にオーバースペックの感があります。まぁ、私が重いゲームをしないからかもしれませんが。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、この変化はそれなりに大きいとは思います。少なくとも、もし私がこれからiPadを買うとすれば、1万円の値引きがなされて、熟れた値段になったiPad Air 2よりも、iPad Pro 9.7インチを購入することは間違いありません。しかし、現実には既にiPad Air 2を持っていますから、新調するほどではありませんが。&lt;/p&gt;&#10;&lt;h2 id="スペックの停滞を踏まえた2つの考え方"&gt;スペックの停滞を踏まえた2つの考え方&#10;&lt;/h2&gt;&lt;p&gt;それでは、誰しもに iPad Pro 9.7 インチがオススメされるかといえば、それは微妙なところ。&lt;strong&gt;Apple Pencil が使いたいという目的があれば、考えるまでもなくPro一択ですが、そうでなければ、なかなか悩ましい問題&lt;/strong&gt;です。実際カカクコムでは相変わらず iPad Air 2 が売れているようですし、その選択は妥当なものでしょう。&lt;strong&gt;iPad Air 2 は既にタブレットとして完成されています&lt;/strong&gt;。かつての新しかったiPad（初めてRetina化されたiPad 3）は、数年でパワー不足という事態に陥りましたが、既にスペックは停滞しており、恐らく東京オリンピックが開かれる頃(2020年)になっても、iPad Air 2 は十分使えるものであると思われます。実際、タブレットよりも早くスペックの停滞が起きたPCは、2011-2012年頃のマシンであれば、その頃の最先端は今でも十分最前線で使えるものです。Sandy Bridge以降と言い換えてもよいでしょう。タブレットについても、現在同じようなことが言えます。&lt;strong&gt;ここ数年で、コンピュータの陳腐化の速度は著しく遅くなりました&lt;/strong&gt;。もはや、進化を見越してマシンを買う時代ではないのでしょう。&lt;/p&gt;&#10;&lt;p&gt;したがって、&lt;strong&gt;iPad Air 2 で十分とは、一般的には妥当な結論です&lt;/strong&gt;。一方、&lt;strong&gt;逆の考え方もできて、陳腐化が遅いからこそ、今ある最先端を買うことは価値がある、という結論&lt;/strong&gt;も導き出せます。&lt;strong&gt;iPad Pro 9.7 インチは、高いものかもしれませんが、高すぎるものではありません&lt;/strong&gt;。価格差分の価値はあります。しかし、ガジェットオタクな面のある私にとってはそうでも、では私の母にとってはどうかと考えると、それは違うでしょうね。&lt;strong&gt;Proに付加された価値は、マニアックな価値だから&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="悩む気持ちがある人は-pro-がいい"&gt;悩む気持ちがある人は Pro がいい&#10;&lt;/h2&gt;&lt;p&gt;あれこれ書いてきましたが、結局どちらがよいのか。これは、&lt;strong&gt;悩む気持ちが少しでもあるかないか、がリトマス試験紙になる&lt;/strong&gt;と思います。もし、少しでも悩むのであれば、恐らく Pro を買うべき人間です。多分その人は、マニアックな人だから。マニアックな人なので、マニアックな進化にもそれだけの価値を感じるでしょう。逆に、微妙だなぁという気持ちしかわかないのであれば、Air 2 のほうが賢い選択かもしれませんし、またそのような結論になる人のほうが、一般的には多かろうと重います。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01DSOF4AA&amp;linkId=9e4e517c085069aef0b992f7c988e871" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>LPIC 202 に合格し、ようやくレベル2 を取得。LPIC 202 の勉強時間、難易度、雑感</title><link>https://hack-le.com/47339281-2/</link><pubDate>Fri, 15 Apr 2016 09:19:19 +0900</pubDate><guid>https://hack-le.com/47339281-2/</guid><description>&lt;p&gt;LPIC 202 を受験し、合格しました。&lt;strong&gt;スコアは660/800で、これは思っていたよりは低かった&lt;/strong&gt;です。感触としては、9割くらいできたかな、と思っていたのですが。&lt;/p&gt;&#10;&lt;h2 id="ようやくレベル2取得"&gt;ようやくレベル2取得&#10;&lt;/h2&gt;&lt;p&gt;スコア詳細は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ドメインネームサーバー 87%&lt;/li&gt;&#10;&lt;li&gt;ウェブサービス 63%&lt;/li&gt;&#10;&lt;li&gt;ファイル共有 100%&lt;/li&gt;&#10;&lt;li&gt;ネットワーククライアントの管理 90%&lt;/li&gt;&#10;&lt;li&gt;電子メールサービス 75%&lt;/li&gt;&#10;&lt;li&gt;システムのセキュリティ 92%&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;メール絡みの問題が多く、メールサーバーは実装したことがないので（せいぜいOSXでコマンドラインのスクリプトが異常終了したときに、Postfixでメールを送信する程度）、苦手意識はあったのですけれど、Webサーバーについてはそれなりにやっているつもりだったのですが。よろしくないですね。&lt;strong&gt;記述問題は10問くらい&lt;/strong&gt;でした。もっと多いかと思いましたが。&lt;/p&gt;&#10;&lt;h2 id="勉強方法はping-tのみ勉強時間は24時間程度"&gt;勉強方法はPing-tのみ、勉強時間は24時間程度&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;勉強方法は、例によってPing-tのみ&lt;/strong&gt;です。他は一切使っていません。参考書は一冊も見ていません。ざっくりですが、勉強時間も記録していました。Web問題集を二周し、コマ問を一周し、あとは演習、という進め方で、それぞれにかかった時間は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Web問題集 一周目 10.75h&lt;/li&gt;&#10;&lt;li&gt;Web問題集 二周目 6.5h&lt;/li&gt;&#10;&lt;li&gt;コマ問 3.75h&lt;/li&gt;&#10;&lt;li&gt;模擬試験、コマ問 3h&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;全体で24時間ほど&lt;/strong&gt;です。201と変わらないですね。コマ問は全体から20問ランダム出問で8割以上、模擬試験は9割以上は取れる状態でした。&lt;/p&gt;&#10;&lt;h2 id="lpic-202-雑感難易度役に立つか"&gt;LPIC 202 雑感。難易度、役に立つか&#10;&lt;/h2&gt;&lt;p&gt;もっと難度が高いかと思っていましたが、受験してみるとさほどでもありませんでした。人にもよりますが、&lt;strong&gt;Ping-tで20-30時間も頑張れば、まず取得できるだろう&lt;/strong&gt;と思います。覚えることは確かに多いのですが、逆にいうと覚えるだけです。&lt;/p&gt;&#10;&lt;p&gt;実践的かと言われると、問題は解けるようになったものの、ではDNSサーバー、DHCPサーバー、Sambaサーバー、Webサーバー、LDAPサーバー、全部スムーズにちゃんと構築出来ますねと言われれば、それはちょっと厳しい。まぁ調べながらやれば、あまりおかしくない程度のものを構築・運用はできると思いますが。少なくとも、設定ファイルはまぁそれなりに読めるはずですし。&lt;/p&gt;&#10;&lt;h2 id="ちょっとおやすみ"&gt;ちょっとおやすみ&#10;&lt;/h2&gt;&lt;p&gt;次の段階として、LPICレベル3 を取得する意志はあるのですが、ここのところ試験勉強で他にやりたいことがあまり出来ていませんでしたので、&lt;strong&gt;試験はしばらくお休み&lt;/strong&gt;します。Ping-tもレベル3にはほとんど対応できていませんし。また、レベル2の内容は、実機で試したことがない内容も多かったので、出来る範囲でホビーでもいじってみようと思います。VPSでセキュリティの強化、メールサーバーの構築、Apacheの設定見直し、あとはカーネルのコンパイルといったようなことです。勉強だけしても、やってみないことには、あまり身につきませんので。sambaは、NASの設定を見直すくらいしかないですね。まぁ、あのけったいな設定ファイルを多少楽に読めるようになっただけでもよかったでしょうか。&lt;/p&gt;</description></item><item><title>Amazon Fire TV Stickの素晴らしさとガラポンTVの微妙さ</title><link>https://hack-le.com/47301105-2/</link><pubDate>Sun, 10 Apr 2016 17:57:25 +0900</pubDate><guid>https://hack-le.com/47301105-2/</guid><description>&lt;p&gt;最近ちょくちょくドラマや映画を見ています。Amazonプライムビデオのおかげです。私は動画コンテンツにはあまり興味が無いのだと思っていましたが、違ったようです。金曜ロードショーなど、どこぞの広告混じりで誰かに選ばれたものを、カットしながら、決められた時間にテレビの前に拘束されて見るのが苦手なだけで、ちゃんと&lt;strong&gt;環境さえ整えば、楽しんで映画やドラマを見ることができるのだということが、Amazonプライムビデオでわかりました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="amazonプライムビデオは面白い一方ガラポンtvは"&gt;Amazonプライムビデオは面白い…一方ガラポンTVは&#10;&lt;/h2&gt;&lt;p&gt;Amazonプライムビデオに、Fire TV Stickをフルに活用できている一方、&lt;strong&gt;ガラポンTVが置物化している&lt;/strong&gt;現実があります。両者の用途は違うように思えるかもしれません。Fire TV Stickは、地上波のみならず映画も含め、限られたいくつかのコンテンツを提供するストリーミングサービスです。ガラポンTVは、最近の地上波を個人的に、テレビという枠に縛られず楽しむためのサービスです。確かに、両者は違う。しかし、&lt;strong&gt;ある種の動画コンテンツを自由に楽しむためのものである点は共通しており、それは大きな共通点&lt;/strong&gt;です。個人の時間の使われ方において、両者は喰い合う部分も多くあるのではないでしょうか。&lt;/p&gt;&#10;&lt;h2 id="amazonプライムビデオを使って思ったガラポンtvのよくないところ"&gt;Amazonプライムビデオを使って思った、ガラポンTVのよくないところ&#10;&lt;/h2&gt;&lt;p&gt;とすると、Amazonプライムビデオ（+Fire TV Stcik）愉快に使われる一方で、ガラポンTVがほぼ置物化されているのはどういうことか。端的に言えば、&lt;strong&gt;ガラポンTVはまだまだ不自由過ぎる、使いづら過ぎる&lt;/strong&gt;、というのが率直な感想です。テレビという枠を広げたのがガラポンTVだと思うのですが、その枠はまだまだ狭く、また洗練されていません。それは、サービス内容、ハードウェア、ソフトウェア、すべてに渡っていえます。&lt;/p&gt;&#10;&lt;p&gt;たとえば、&lt;strong&gt;Webアプリでのレスポンスがいちいち遅い&lt;/strong&gt;。お気に入りの一覧を取得するだけで、数秒かかることもざら。一つのデバイスでしかいじっていないのに、&lt;strong&gt;多重視聴ですと言われて再ログインさせられることもよくあります&lt;/strong&gt;。普通に使っているだけで、&lt;strong&gt;一挙一動に苛つきます&lt;/strong&gt;。一昔前の、無理な低スペックに無理やりWindows Vistaを入れたマシンのようです。ハードウェアとソフトウェアの両方に問題があるように思えます。一方で、Amazonプライムビデオは、どのデバイスでも、Fire TV Stickのようなスティック型のものでも、非常に快適で驚かされました。&lt;/p&gt;&#10;&lt;p&gt;そのような状況であるのに、&lt;strong&gt;サービス内容はなかなか厳しい&lt;/strong&gt;。お気に入り登録という基本的な操作でも、ちょっと凝ったことをしようすると、何かよくわからないポイント（ガラポイントなるもの）を貯めることを強制します。倍速再生、アプリでの広告非表示、さらにオフライン再生のためのダウンロード、あらゆるものにポイントを課します。なんとも面倒臭い。月額を払ってプレミアム会員になると、ポイントのしがらみからも解禁されるようなのですが、&lt;strong&gt;ハードウェアも決して安いとは言えない値段であるのに、これはちょっといただけない&lt;/strong&gt;、というのが私の感想です。&lt;strong&gt;金を払ったところで、ハードとソフトはよくなりませんから、快適に使えるということもありません&lt;/strong&gt;し。なんともはや。&lt;/p&gt;&#10;&lt;p&gt;また、最近ハードディスクのデータが壊れていることがわかったから初期化せよ、初期化したら当然データは全部消える、という内容のにべもないメールが届きました。&lt;strong&gt;安定性も、よろしくない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;私の2015年の買い物で、ワースト1位のよくなかった買い物は、間違いなくガラポンTV&lt;/strong&gt;です。結局私に動画コンテンツは合わないのか？と思ったものですが、Amazonプライムビデオは予想外に楽しめているので、まぁ&lt;strong&gt;結局は品質の問題&lt;/strong&gt;だと思います。ガラポンTVのコンセプトはよいものです。地上波にはしがらみも多く、また少ない人数での開発はたいへんなのだろうと思いますが、そうは言っても、ものはモノですので、残念ながら現状では人に薦められません。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZVNYLS8" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>一台でオシロ、スペアナ、FG他になるTektronicsのMDO3024が素敵だった</title><link>https://hack-le.com/47291058-2/</link><pubDate>Fri, 08 Apr 2016 18:00:17 +0900</pubDate><guid>https://hack-le.com/47291058-2/</guid><description>&lt;p&gt;ダメ元で言うだけ言った感じだったのですが、職場でTektronicsのMDO3024を買ってもらえてたいへんハッピーです。これは&lt;strong&gt;オシロスコープなのですけれど、オプションでスペクトラムアナライザ、ファンクションジェネレータ(以下FG)、ロジックアナライザ、さらにプロトコルアナライザの機能などを付けて、すべて一台で済ませられるという優れもの&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="オールインワンな測定器"&gt;オールインワンな測定器&#10;&lt;/h2&gt;&lt;p&gt;スペアナはもちろんソフトウェアのなんちゃってではなく、ハードウェアとして実装されます。以前「&lt;a class="link" href="http://eetimes.jp/ee/articles/1512/24/news018.html" target="_blank" rel="noopener"&#10; &gt;テクトロニクス Chris Witt氏：“6-in-1”オシロに手応え、RFとパワーを狙う (1/3) - EE Times Japan&lt;/a&gt;」の記事を読んで、これは欲しいなぁと思っていました。&lt;/p&gt;&#10;&lt;p&gt;測定器として考えればたいへんお値頃だと思いますが、やはり安くはないものなので、使わない機能を無駄に付けてもしようがありません。ロジアナは正直ちょっと欲しかったのですけれど、ひとまずスペアナとFGの機能だけ付けてもらいました。それだけでも、&lt;strong&gt;3台の測定器を使って行っていた試験が、たった1台の測定器で行える&lt;/strong&gt;のですから、有難いことです。荷物は少なくて済むし、設置スペースも小さくて済むし、なにより電源コードが一つで良い。たいへん嬉しいですね。精度がいかほどかはちょっとわかりませんが、この測定器一台で済ませられる試験は多いと思います。これと、ハンディなVNA(ベクトルネットワークアナライザ)を用意すれば、もうほとんど全部出来てしまうのは、素晴らしいことだなぁ。&lt;/p&gt;&#10;&lt;h2 id="自分で自分に正弦波"&gt;自分で自分に正弦波&#10;&lt;/h2&gt;&lt;p&gt;現在差し迫って何かしなくてはいけない試験があるわけではありませんが、普段使っておかないといざという時にも使えません。というわけで、早速いじらせてもらいました。適当な写真ですが、背面にあるFGの出力から、前面のRF入力で受けて、スペクトラムを表示しています。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/1/d/1da5aca6.jpg" &gt;&lt;img alt="前面" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/1/d/1da5aca6-s.jpg"&gt;&lt;/a&gt;&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/b/d/bde4179c.jpg" &gt;&lt;img alt="背面" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/b/d/bde4179c-s.jpg"&gt;&lt;/a&gt;&#10;しっかりピークがたっています。オシロスコープとは思えません。オシロスコープとして使ってないのだから当たり前ですが。もちろん、4chのオシロスコープとしても便利に使えそうです。計算機能もついています。ただ、FGの出力設定がVpp単位しか見当たらないのですが、dBmでの設定はできないのでしょうか。まぁ無いとどうにもならないものではないですが…。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、実際の使い勝手は実践で使ってみないことにはわかりません。重さも軽くて持ち運びも楽そうでしたし、早く使ってみたいですね。&lt;/p&gt;&#10;&lt;h2 id="追記使ってみました"&gt;追記：使ってみました&#10;&lt;/h2&gt;&lt;p&gt;あれからしばらく経ちまして、使う機会がありました。というか使っています。&lt;/p&gt;&#10;&lt;p&gt;感触としては、基本的にオシロスコープとして使い、時々スペアナやFGとしても使う、という使い方にマッチしますね。オシロスコープとしての機能は十分です。一方、スペアナ、FGの機能は、おまけとまではいいませんけれど、本格的にちゃんと使うのであれば、やはり専用機が欲しいなと思いました。&lt;/p&gt;&#10;&lt;p&gt;オシロ中心の試験で、「ちょっと周波数帯域でもみたいな」と思ったときは、そのためにいちいちスペアナ立ちあげなくてよく、またオシロのFFT機能よりは扱いやすくかつ信頼性もあると思うので、良い感じでした。ちょっとちゃんと思い出せないのですが、使っていて「あれ、この機能がないのか」と思ったりもしたので、やはり専用機ほどの使い勝手はさすがに望んではいけないでしょう。FGは、出力設定にdBmが無いのが高周波を扱っている身だと不便です。&lt;/p&gt;</description></item><item><title>LPIC 201 合格。勉強法はPing-tのみ。勉強時間は24時間</title><link>https://hack-le.com/47281707-2/</link><pubDate>Thu, 07 Apr 2016 12:42:55 +0900</pubDate><guid>https://hack-le.com/47281707-2/</guid><description>&lt;h2 id="lpic-201-合格しました"&gt;LPIC 201 合格しました&#10;&lt;/h2&gt;&lt;p&gt;先日LPIC 201 の試験を受け、無事合格しました。202と同時受験を目論んでいたのですが、間に合いませんでした。スコアは 740 です。9割程度できているだろうという感触でしたが、まぁだいたいそのとおりでした。正答率は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;キャパシシティプランニング 87%&lt;/li&gt;&#10;&lt;li&gt;Linuxカーネル 77%&lt;/li&gt;&#10;&lt;li&gt;システムの起動 100%&lt;/li&gt;&#10;&lt;li&gt;ファイルシステムとデバイス 88%&lt;/li&gt;&#10;&lt;li&gt;高度なストレージデバイスの管理 100%&lt;/li&gt;&#10;&lt;li&gt;ネットワークの設定 100%&lt;/li&gt;&#10;&lt;li&gt;システムの保守 100%&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;記述式の問題が15問、全体の1/4あったのが印象的です。しかし、単純にコマンド名やファイル名を問うもので、あまり難しくはありませんでした。カーネル周りは馴染みがないだけあって、成績がよくないですね。勉強していてもイマイチよくわからなかったところです。カーネル周りの作業はほとんどしたことがありませんし、当然でしょうか。試験後、本屋でカーネル関係の本を読んだ時、そこで使われている用語がある程度わかったことは嬉しかったです。&lt;/p&gt;&#10;&lt;h2 id="勉強法と勉強時間"&gt;勉強法と勉強時間&#10;&lt;/h2&gt;&lt;p&gt;勉強法と勉強時間について。&lt;/p&gt;&#10;&lt;h3 id="ping-t一本"&gt;Ping-t一本&#10;&lt;/h3&gt;&lt;p&gt;学習に用いたのは、Ping-t 一本です。他の参考書は一切使っていません。大昔に中古で購入した、古いバージョンのLPIC教科書しか持っておらず、ちょっと読んでみたところ、範囲の違い、情報の古さなど考えると読まないほうがマシかなと思いました。ですので、Ping-tのみです。それでも、正答率9割はあったと思われるので、&lt;strong&gt;合格にはPing-tだけで十分だと言えます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Web問題集を解く時、iPadが一番使いやすかった&lt;/em&gt;です。選択肢をタッチで選択できるのは楽だったし、何よりも顔と画面の距離が近いので、普通に本を読んで勉強しているみたいでした。顔と画面の距離は、けっこう大事なことだと思っていて、いかに大きなディスプレイでも、デスクトップPCでの学習は、タブレットを利用したものと比べると、やや効率が落ちるというのが個人的な感触です。同じく、コマ問もデスクトップPCよりノートPCのほうが、ちょっと捗る。人それぞれとは思いますが、参考までに。&lt;/p&gt;&#10;&lt;h3 id="かかった時間は24時間ほど"&gt;かかった時間は24時間ほど&#10;&lt;/h3&gt;&lt;p&gt;今回、勉強時間もメモしてみました。だいたい以下のような感じです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Web問題集を一周目 13.5時間&lt;/li&gt;&#10;&lt;li&gt;Web問題集を二周目 5.5時間&lt;/li&gt;&#10;&lt;li&gt;コマ問を一周 2.75時間&lt;/li&gt;&#10;&lt;li&gt;コマ問、模擬試験による演習 2時間&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;合計23.75時間&lt;/strong&gt;です。必ずしも集中した時間の使い方ではありませんでしたし、Web問題集の時間はもっと短くできそうに思います。&lt;strong&gt;要領よくやれば、半分くらいの時間で済むかもしれません&lt;/strong&gt;。とにかく問題集とコマ問を一通りといて、それが終わったら、コマ問を全範囲選択して20問程度、あるいは模擬試験60問をひたすら何度も解く、というような感じです。まぁWeb問題集を全部金にして、コマ問を一通り解けば、その頃には十分合格水準に達しているのではないでしょうか。&lt;/p&gt;&#10;&lt;h2 id="201の試験内容は役立つか"&gt;201の試験内容は役立つか&#10;&lt;/h2&gt;&lt;p&gt;201の試験範囲で、個人的に使うかなと思ったのは、システムの保守に関わるところでしょうか。vmstatやらiostatやらsarやらuptimeやらwやら、色々な形式の色々なコマンドがあるので、とっつきづらいところだと思うのですが、そのあたりのコマンドをまとめて覚えることができたのは、今後のサーバー運営で役立ちそうです。まぁ、使わないと結局身にはなりませんし。&lt;/p&gt;&#10;&lt;p&gt;RAIDまわりとカーネルまわりは、ちょっと機会がなさそうですねぇ。まぁ、概要はだいたい掴めたと思うのですが。&lt;/p&gt;&#10;&lt;p&gt;時折調べ物をしている時に遭遇する sysctl -w なんとかが何をしているのかわかったことは、ちょっと嬉しかったです。カーネルのパラメータを変更していたのですね。&lt;/p&gt;&#10;&lt;p&gt;LPICに限らず、資格勉強のようなインプット作業は、それだけでは実践的には特に何も変わりませんから、学習したことをどう活かすかが大切だと思います。202を合格したら、しばらく身につけた知識を血肉化させることを考えたほうがよさそうです（Ping-tもレベル3の新試験にはいまだ対応していませんし）。&lt;/p&gt;</description></item><item><title>Chromebook は現代のワープロ…しかしポテンシャルの発揮にはスペックがもっと必要</title><link>https://hack-le.com/47245254-2/</link><pubDate>Sat, 02 Apr 2016 23:47:33 +0900</pubDate><guid>https://hack-le.com/47245254-2/</guid><description>&lt;p&gt;Chromebookを購入して4ヶ月ほどたちました。わかっていたことですが、MacBook Airがあるため出番は微妙です。それでもそれなりには使ってきたので、用途は見えてきました。気軽に持ち歩ける文書の作成マシン、つまりワープロです。&lt;/p&gt;&#10;&lt;h2 id="chromebookを購入して4ヶ月"&gt;Chromebookを購入して4ヶ月&#10;&lt;/h2&gt;&lt;p&gt;購入してから、これをちゃんと使っているか、と言われると微妙なところです。私はMacBook Airを持っています。MacBook Airのほうが軽くてコンパクトです。MacBook Airは、けっこうバッテリーが持ちます。また、MacBook Airのほうが動作は軽やかです。そしてもちろん、Chromebookに出来てMacBook Airに出来ないことはありませんが、その逆は多いです。ですので、Chromebookの出番はあまり多くありません。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、まったく使わないわけではありません。スクリプトをずっと動かすためなどで、MacBook AirもMac miniも使えない、あまり使いたくない状況というのが、私の場合あります。そんな時、Chromebookは便利な二台目ノートです。今も、Chromebook でこの記事を書いています。&lt;/p&gt;&#10;&lt;h2 id="ワープロ用途が一番だという結論"&gt;ワープロ用途が一番だという結論&#10;&lt;/h2&gt;&lt;p&gt;しょっちゅう使っているわけではないとはいえ、もう4ヶ月ほど使っていますので、何の用途では使えて、何の用途では使えない、使いづらいのかも、だいたいわかりました。&lt;strong&gt;結論としては、ワープロとして、つまりテキスト入力用途のデバイスとして利用すると、Chromebookの真価を発揮できる&lt;/strong&gt;という結論です。また、詳細は後述しますが、一般にChromebookの用途とされる、Webブラウジングには微妙だと思います。ところで、今の子供はワープロと言われてもなんのことかわからないかもしれませんね。自分専用のワープロは、私が小学生の頃は羨ましかったものですが。&lt;/p&gt;&#10;&lt;p&gt;テキスト入力に特化したデバイスといえば、ポメラなんてものもあり、あれはあれで愛好家の多いデバイスなのですが、私には向きませんでした。現代のワープロは文字が打てればよいというものではないのです。作成したテキストは、即座に他のデバイスで利用できなくてはいけません。つまり、Wi-fiが使えるのみならず、オンラインストレージも使えなくてはいけない。すなわち、ブラウザが必要なのです。また、辞書も必要ですし、知りたいことがあったら、ネットで最新の情報をゲットしなくてはいけません。使いやすい日本語入力ソフトも必要です。これらすべてが、今時のワープロに要求される「単機能」なのです。というわけで、ポメラは使えず、といってなんとなく売る気にもなれず、部屋で小さなオブジェと化しています。&lt;/p&gt;&#10;&lt;p&gt;先に書いた要求事項を、Chromebookは満たしています。まぁ、残念なのはキーバインドの変更に制限があるということくらいでしょうか。しかし、それ以外については素晴らしい。&lt;strong&gt;Chromebookはまさに現代のワープロ&lt;/strong&gt;だといえます。&lt;/p&gt;&#10;&lt;h2 id="もっとスペックが必要だ"&gt;もっとスペックが必要だ&#10;&lt;/h2&gt;&lt;p&gt;テキスト編集に最適なデバイスであると結論づけたものの、それ以外の用途ではどうでしょうか。たとえば、Webブラウジングです。一般的におすすめされる用途でもあります。そう、たいていの場合、ChromebookはWebの閲覧、Youtubeなどでの動画視聴用途におすすめされることが多いのです。しかし、私は&lt;strong&gt;現状、Webブラウジング用途に使うには、良いデバイスが日本にはない&lt;/strong&gt;、と考えています。&lt;/p&gt;&#10;&lt;p&gt;何故かというと、理由はシンプルです。&lt;strong&gt;スペックが足りません&lt;/strong&gt;。Webブラウジングは、案外高い処理能力を要求します。MacBook Airと並べて使えば、ほとんどのサイトで、開くのに時間がかかることに、否が応でも気づくでしょう。画面があまり綺麗でないことに気づくでしょう。&lt;/p&gt;&#10;&lt;p&gt;これはChromebookそのものの瑕疵ではなく、ハードウェアの問題です。しかし、それは致し方ない面もあります。Chromebookは、安価に使えるマシンとして喧伝されているからです。安くするには、コストを削らなくてはいけない。CPU、メモリ、ストレージ、液晶は最低限のものになります。特にCPUと液晶の影響は大きいのではないでしょうか。いくらブラウザしか使わないとはいえ、それでもなお、快適なWebブラウジングにはまだスペックが足りません。&lt;/p&gt;&#10;&lt;p&gt;この問題が解決する日はくるのでしょうか。PCパーツが日進月歩だったのも数年前までの話で、ここ最近はハッキリと停滞していますから、いくら待っても、ローコストでは処理能力はあまり上昇しないのではないかと思います。多分、&lt;strong&gt;本当に快適なWebブラウジングができるChromebookを作ると、価格は5万円くらいにはなってしまう&lt;/strong&gt;でしょう。実際、アメリカで売られているCore i5搭載のAcerのChromebookなどは、500ドルで売られているようです（&lt;a class="link" href="https://www.amazon.com/Acer-Chromebook-NX-EF3AA-011-15-6-Inch-Netbook/dp/B00UPGWD5Y" target="_blank" rel="noopener"&#10; &gt;Amazon.com: Acer Chromebook NX.EF3AA.011 15.6-Inch Netbook (Black): Computers &amp;amp; Accessories&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;p&gt;まぁそれでも、本当に快適なMacやWindowsマシンにかかる値段を考えれば、安いものです。PCは毎日使う大切なものですから、無駄に金を払う必要はありませんが、&lt;strong&gt;必要以上に金を惜しんでもいけない&lt;/strong&gt;と思うのです。もっとChromebookが広まれば、日本でも多様なChromebookが売られるでしょう。もっと広まって、売れてほしいと思います。現状では、私からはWebブラウジングにはあまり勧めませんが、ブログの記事や、テキストの編集には最適のマシンですので、そういう用途のPCが一つ欲しいと考えている人は、是非Chromebook を使ってみては如何でしょうか。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B015W23ZW0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Kinldeで「コンテンツと端末の管理」から誤って本を完全削除してしまった場合の対応</title><link>https://hack-le.com/47186195-2/</link><pubDate>Sun, 27 Mar 2016 16:00:58 +0900</pubDate><guid>https://hack-le.com/47186195-2/</guid><description>&lt;p&gt;Kindleでは、よく期間限定で無料本などを配布していたりします。無料なのはよいのですが、読める期間が過ぎてもいつまでもライブラリに居座っているのがたいへん鬱陶しい。期間が過ぎた本をライブラリから削除するには、&lt;strong&gt;PCのサイトより、アカウントサービスにて、「コンテンツと端末の管理」から当該の本を削除する&lt;/strong&gt;必要があります。そこで、&lt;strong&gt;誤って削除してしまった場合はどうすればよいのでしょうか&lt;/strong&gt;？&lt;/p&gt;&#10;&lt;h2 id="誤削除したらどうなる"&gt;誤削除したらどうなる？&#10;&lt;/h2&gt;&lt;p&gt;この削除はけっこう重い処理であるらしく、Amazonのヘルプページ「&lt;a class="link" href="https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201252650" target="_blank" rel="noopener"&#10; &gt;Amazon.co.jp ヘルプ: Kindleライブラリからアイテムを削除する&lt;/a&gt;」には以下の様な記述があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;重要: コンテンツと端末の管理から商品を削除した場合、商品を再度購入しない限り、ダウンロードすることはできません。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;なかなか恐ろしい文言です。しかし、誤クリックは普通に考えられることですし、実際に起きます。起きました。その場合、本当に再購入するしかないのでしょうか。殺生な話ですし、そもそもシステム的に多重購入はできないはず。&lt;/p&gt;&#10;&lt;h2 id="カスタマーサービスに連絡"&gt;カスタマーサービスに連絡&#10;&lt;/h2&gt;&lt;p&gt;本題です。 &lt;strong&gt;「コンテンツと端末の管理」より、誤って削除してしまった場合の対応について&lt;/strong&gt;。これはAmazonとしては、普通ではないイレギュラーな事態として想定されているようで、ヘルプを見ても言及されていません（まぁ強いて言うなら、上述のにべもない文言がそれにあたりましょう）。もしかしたら自分が探せていないだけで、あるのかもしれませんが、私が探した限りでは見つかりませんでした。さてさて、&lt;strong&gt;困った時は、ちょっと気が重いですが、カスタマーサービス&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;Amazonのトップページ下部より、「カスタマーサービスに連絡」-&amp;gt; 「一般的な問い合わせ」-&amp;gt; 注文の選択 より、問い合わせをします。問い合わせ内容については、私は「そのほか」を選択し、誤って削除したので復元してもらえないか、という旨を簡単に明記して、チャットを行いました。まもなく担当者に繋がり、事情を説明したところ、すぐに復元してもらえました。大企業らしく、事務的ですが、丁寧な応対です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;誤って削除をするたびに、復元作業をカスタマーサービスからお願いしなくてはいけないのか、と質問したところ、Yesとのこと&lt;/strong&gt;です。人を介させるということは、Amazon的には、なにかしら悪用の恐れがある作業と見ているのでしょうかね？ちょっと思いつきませんが。&lt;/p&gt;&#10;&lt;p&gt;まぁ、気をつけるにこしたことはありませんけれど、誤ってしまうのが人間の常です。規約は様々な想定をしていますから、色々と怖いことが書いていますけれど（仕方ないのかもしれませんが、世知辛い世の中です）、相談してみれば、案外柔軟に対応してもらえることもあります。&lt;/p&gt;</description></item><item><title>自作PCを掘り起こして思い出したPCの騒音。Mac miniは静か</title><link>https://hack-le.com/47107759-2/</link><pubDate>Sat, 19 Mar 2016 13:17:19 +0900</pubDate><guid>https://hack-le.com/47107759-2/</guid><description>&lt;p&gt;色々あって、昔自作したPCでを掘り起こして起動させました。懐かしい。稼働している間は気にならなかったのですが、電源を落とすと、部屋がやけに静かになりました。なるほど、どうやらかなりうるさかったらしい。それに比べると、Mac miniの静かなこと…Mac miniの再評価です。&lt;/p&gt;&#10;&lt;h2 id="rosに興味があった"&gt;ROSに興味があった&#10;&lt;/h2&gt;&lt;p&gt;ロボットプログラミングが夢だという人は多いと思うのですが、私もその一人です。しかし今のところそういったことには縁がなくて、また周りにそれをしている人もいませんでした。そんな折、ROSというソフトウェアが、入門者には良いという話を知ったのです。ROSとはRobot Operating Systemの略だそうですが、現実にはオペレーティングシステムというよりミドルウェアというべきものだそうですね。まぁ、言葉のことはどうでもよくて、とにかく&lt;strong&gt;ROSを使えば私でもロボットプログラミングの真似事くらいは出来るかもしれない&lt;/strong&gt;と期待しました。&lt;/p&gt;&#10;&lt;p&gt;それで早速解説本を購入したのですが、それによると&lt;strong&gt;ROSのインストールはWindowsやMacでも可能ではあるものの、あまり引っかからずに使うのであればUbuntuを使うほうがよい&lt;/strong&gt;という話でした。それも仮想環境ではなく、ネイティブな環境を用意せよ、と。それで私は、MacにUbuntuをデュアルブートしようかと思っていたのですが、それはまぁなかなか手間なことです。特に私のデスクトップマシンであるMac miniなどはフュージョンドライブですから、余計にです。ノートはノートで、SSDの容量確保など個人的な課題もあり、なかなか億劫でやろうという感じになりませんでした。&lt;/p&gt;&#10;&lt;p&gt;そうして、気にかかりながらも何もしないまま時が過ぎていたのですが、ふと&lt;strong&gt;昔作った自作マシンのことを思い出しました&lt;/strong&gt;。現在職場でテスト環境の構築などで使ってはいるものの、有効利用しているとは言いがたく、あれを家に戻して使ってもよいのではないかと。というわけで、早速 Ubuntu 14.04 LTS をインストールすることにしました。来月には 16.04 が出るような時期なので、慣れてきたらアップグレードも試みたいところですが、ひとまず。&lt;/p&gt;&#10;&lt;h2 id="自作pcが五月蝿い"&gt;自作PCが五月蝿い&#10;&lt;/h2&gt;&lt;p&gt;このマシンは、組んだはよいものの、その後購入したMac miniがあまりに快適だったもので、結局半年程度しかフルには使われませんでした。それが今になってこうして陽の目を見ようとは、何があるかわからないものです。USBメモリに問題があるのか、grubのインストールで躓いたりしつつ、インストールを完了し、初期セットアップをします。この、&lt;strong&gt;インストール直後に、必要なソフトウェアを入れたり、設定を変更したりする作業がけっこう好き&lt;/strong&gt;です。この作業を好きだと思えるかどうかは、その人のコンピュータに対する第一適性を見るのに良い指標ではないかと思います。別に嫌いだからといって不向きというわけではありませんが。&lt;/p&gt;&#10;&lt;p&gt;そうして必要なソフトウェアを導入し、Ubuntu のデスクトップをまともに家でいじるのも久しぶりだなぁと懐かしく遊び、まぁ今日のところはこれくらいにしておくか、とシャットダウンしました。すると、ふっと部屋に静寂が訪れました。作業中はさほど気にしませんでしたけれど、なるほど、&lt;strong&gt;この自作マシン、なかなか音を発してくれていたようです&lt;/strong&gt;。ファンの回転音がすごい。&lt;/p&gt;&#10;&lt;h2 id="mac-mini-が静か"&gt;Mac mini が静か&#10;&lt;/h2&gt;&lt;p&gt;それに引き換え、このメインで使っている&lt;strong&gt;Mac mini 2012の静かなこと、静かなこと&lt;/strong&gt;。フュージョンドライブなので、作業によっては時折ハードディスクのカリカリという独特のシーク音もしますし（この音けっこう好きです）、ファンが本気を出すこともありますが（特に仮想環境を立ち上げたり、スクリプトを動かし続けたりすると）、基本的には静か。&lt;/p&gt;&#10;&lt;p&gt;別に、だからといってこの自作マシンが悪いというわけではありません。ただ、&lt;strong&gt;Mac miniの静音性は素晴らしい&lt;/strong&gt;と思います。ちょっと熱いのが玉に瑕なのですが、この静かさと引き換えなら仕方ないかもしれません。寿命が気にかかりますが、なんだかんだで3年以上酷使していて壊れる気配もありません。&lt;strong&gt;Mac miniとは実に良いマシンだなと、改めて思いました&lt;/strong&gt;。ああ、これでクアッドコアが復活してくれたら良いのですが。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;どういうわけかもたつく処理もある&lt;/strong&gt;のですけれど。たとえば端末で履歴の数を増やし過ぎると、履歴検索でアレコレカスタマイズしたとき、処理が重かったりします。しかし、遥かにスペックで劣るはずのMacBook Air 2013で、miniがもたついた設定でも軽々とこなせていたりするのは、I/Oのスペック、すなわちPCIeの恩恵ということなのでしょうか。CPUの問題とは思えません。&lt;strong&gt;体感的にはSATAで十分だと考えていましたが、そんなことも、ないのかなと思う今日この頃&lt;/strong&gt;ではあります。&lt;/p&gt;</description></item><item><title>ローカルにWordPressの試験環境を Vagrant + VirtualBox + CentOS 7 + Apache で構築する</title><link>https://hack-le.com/47039762-2/</link><pubDate>Wed, 09 Mar 2016 21:23:10 +0900</pubDate><guid>https://hack-le.com/47039762-2/</guid><description>&lt;p&gt;&lt;strong&gt;本記事の目的は、試験的にWordPressを動作させる仮想環境をVagrant + VirtualBoxで構築すること&lt;/strong&gt;です。WordPressのインストール自体はやったことをある人を対象としています。また、ゲストOSはCentOS 7.1です。&lt;/p&gt;&#10;&lt;h2 id="前提"&gt;前提&#10;&lt;/h2&gt;&lt;p&gt;本記事におけるホストOSはOSX 10.11、すなわちMacですが、Vagrantの基本的な操作さえ行えればほとんど仮想環境上での作業なので、ホストOSが何かはあまり問題ではないでしょう。また、Linuxの基本的なコマンド操作ができることを前提にしています。&lt;/p&gt;&#10;&lt;p&gt;元々はWordPressのバックアップ、復元をローカル環境で行う記事として書いていたのですが、仮想環境の構築だけでもけっこうなボリュームになってきたので、記事を独立させることにしました。&lt;/p&gt;&#10;&lt;h2 id="vagrantとvirtualboxのインストール"&gt;VagrantとVirtualBoxのインストール&#10;&lt;/h2&gt;&lt;p&gt;Vagrantを「&lt;a class="link" href="https://www.vagrantup.com/" target="_blank" rel="noopener"&#10; &gt;Vagrant by HashiCorp&lt;/a&gt;」より、VirtualBoxを「&lt;a class="link" href="https://www.virtualbox.org/" target="_blank" rel="noopener"&#10; &gt;Oracle VM VirtualBox&lt;/a&gt;」からダウンロード、インストールします。以前、MacではHomebrew Caskを使ってインストールしていましたが、バージョンアップが遅れ気味でトラブルが起きたので、結局公式サイトからバイナリパッケージを落として使うほうがよいという結論に落ち着きました…。&lt;/p&gt;&#10;&lt;h2 id="仮想環境の構築"&gt;仮想環境の構築&#10;&lt;/h2&gt;&lt;p&gt;OSのイメージは「&lt;a class="link" href="http://www.vagrantbox.es/" target="_blank" rel="noopener"&#10; &gt;A list of base boxes for Vagrant - Vagrantbox.es&lt;/a&gt;」にあるものを使います。今回は以下のように、~/vagrant フォルダにおいて作業しました。boxの名前は centos_71 とします。&lt;/p&gt;&#10;&lt;pre&gt;`$ cd mkdir&#13; $ mkdir vagrant&#13; $ vagrant box add centos_71 &lt;a href="https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box"&gt;https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box&lt;/a&gt;&#13; $ vagrant init centos_71&#13; $ vagrant up&#13; $ vagrant ssh&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上の手順で、仮想環境上のCentOSに接続できます。以下で接続を切り、仮想OSをシャットダウンします。&lt;/p&gt;&#10;&lt;pre&gt;`&gt; exit&#13; $ vagrant halt&#13; $ vagrant status&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;動作を確認したら、仮想環境にローカルからアクセスできるプライベートIPアドレスを割り当てます。作業フォルダにある Vagrantfile を編集し、以下の行のコメントアウトを外します。&lt;/p&gt;&#10;&lt;pre&gt;`config.vm.network "private_network", ip: "192.168.33.10"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;次に vagrant up したら 192.168.33.10 が有効になっています。ログイン後に ip addr show コマンドで確認できます（ifconfigなど馴染みのコマンドはレガシー扱いで入っていません）。なお、SSHの秘密鍵が作業フォルダの隠しフォルダ内 .vagrant/machines/default/virtualbox/private_key にあります。&lt;/p&gt;&#10;&lt;h2 id="wordpressを動作させるための環境を構築"&gt;WordPressを動作させるための環境を構築&#10;&lt;/h2&gt;&lt;p&gt;以下のコマンドで、WordPressを動作させるための環境を構築します。具体的には、必要なソフトウェアのインストール、Webサーバーとデータベースサーバーの起動、有効化を行い、WordPress用のデータベースを作成し、Apacheの設定をします。コピペの利便性のため、プロンプトは省略しました。なお、使用するイメージでは、デフォルトでEPEL有効、SELinux無効、ファイアウォール無効となっていましたので、このあたり特にいじっていませんが、場合によってはいじらないといけないかも。&lt;/p&gt;&#10;&lt;pre&gt;`# ソフトウェアのインストール&#13; sudo yum update&#13; sudo yum -y groupinstall "開発ツール"&#13; sudo yum -y install bash-completion unzip php php-gd php-mbstring php-mysql php-pspell php-xml php-xmlrpc mariadb mariadb-server&#13; # 必要ではないが個人的にインストールしているもの&#13; sudo yum install -y emacs tig byobu etckeeper&#13; # デーモンの起動と確認&#13; # systemctl status 実行時に、enabled と active を確認する&#13; sudo systemctl start httpd.service&#13; sudo systemctl start mariadb.service&#13; sudo systemctl enable httpd.service&#13; sudo systemctl enable mariadb.service&#13; systemctl status httpd.service&#13; systemctl status mariadb&#13; # データベースの準備&#13; # データベース名 wpdata, ユーザー名 wpdbuser, パスワード pass とする&#13; sudo mysql&#13; &gt; create database wpdata;&#13; &gt; grant all on wpdata.* to wpdbuser@'localhost' identified by 'pass';&#13; &gt; flush privileges;&#13; # Apache の設定&#13; # WordPress は/var/www/html 直下に展開するものとする&#13; sudo vi /etc/httpd/conf/httpd.conf&#13; # /var/www/html 以下の AllowOverride をAll に変更&#13; sudo systemctl restart httpd.service&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;Apacheの設定についてですが、WordPressはデフォルトのドキュメントルート/var/www/html 直下に展開するものとしました。以上で、WordPressの動作する環境(Apache + MariaDB)はOKです。&lt;/p&gt;&#10;&lt;h2 id="wordpressのインストール"&gt;WordPressのインストール&#10;&lt;/h2&gt;&lt;p&gt;公式サイト「&lt;a class="link" href="https://ja.wordpress.org/" target="_blank" rel="noopener"&#10; &gt;日本語 — WordPress&lt;/a&gt;」より、WordPressをダウンロードおよびインストールします。WordPressは /var/www/html 直下に展開するものとします。手順としては、公式サイトからのダウンロード、ファイルの展開、wp-config.phpの設定、/var/www/html以下の所有権をapacheに変更、です。WordPressのバージョンは4.4.2です。&lt;/p&gt;&#10;&lt;pre&gt;`# WordPressファイル群のダウンロードと展開&#13; # ホームディレクトリにwordpressをいったんダウンロード&#13; cd&#13; wget &lt;a href="https://ja.wordpress.org/wordpress-4.4.2-ja.zip"&gt;https://ja.wordpress.org/wordpress-4.4.2-ja.zip&lt;/a&gt;&#13; unzip wordpress-4.4.2-ja.zip&#13; sudo cp -a wordpress/* /var/www/html/&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;この後、WordPressの設定です。&lt;/p&gt;&#10;&lt;pre&gt;`# WordPressの設定&#13; # wp-config.php に前節のデータベース名、ユーザー名、パスワードを反映&#13; # 認証用ユニークキーの設定&#13; cd /var/www/html&#13; sudo cp wp-config-sample.php wp-config.php&#13; sudo vi wp-config.php&#13; cd ..&#13; # ディレクトリ所有権の変更&#13; sudo chown -R apache:apache /var/www/html&#13; # デーモン再起動による設定の反映&#13; sudo systemctl restart httpd.service&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;この後、ホストOSのブラウザから 192.168.33.10 にアクセスすると、WordPress の画面になるはずです。初期設定を行います。以上。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;以下のサイトを参考にしました。ありがとうございます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.webcyou.com/?p=4632" target="_blank" rel="noopener"&#10; &gt;web帳 | VirtualBoxとVagrantで開発環境を構築&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://qiita.com/balmychan/items/3e253f348f97fdbbb487" target="_blank" rel="noopener"&#10; &gt;VagrantをMacで使ってみる - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://qiita.com/ANTON072/items/2de0353c9e5973847035" target="_blank" rel="noopener"&#10; &gt;Vagrant使い方メモ - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://itpro.nikkeibp.co.jp/article/COLUMN/20080512/301299/" target="_blank" rel="noopener"&#10; &gt;Apacheサーバー構築法 - 第5回 設定を上書きする「.htaccess」：ITpro&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;また、CentOS 7 を学ぶにあたり、以下の「15時間でわかるCentOS」を参考にしました。この手のタイトルの類に漏れず、15時間ではわからないと思いますが、Webサーバーの構築に的を絞って詳述されており、学習には良い書籍だと思います。後半の項目はさすがに解説が足りていませんが、一通りは学べます。CentOS は7で大きく変わったので、6との違いが書かれているのも好印象でした。まぁLinux入門者向けではないのではないかという指摘はそうかもしれませんが。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4774172448" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>LPIC 102 合格 Ping-t だけで十分</title><link>https://hack-le.com/47002400-2/</link><pubDate>Fri, 04 Mar 2016 23:06:49 +0900</pubDate><guid>https://hack-le.com/47002400-2/</guid><description>&lt;p&gt;本日、LPIC102を受験し、無事合格しました。スコアは740で、最大800、500以上が合格であることを考えると、十分な結果だと思います。勉強代から受験代まで、すべて自費ですから、とにかく絶対に落ちたくない一心で、余裕を持って受験しました。Junior Levelだそうですが、兎にも角にも、これでなんとか私もLinux子供レベルは名乗ってよいということです。&lt;/p&gt;&#10;&lt;h2 id="ping-tだけで十分"&gt;Ping-tだけで十分&#10;&lt;/h2&gt;&lt;p&gt;さて、勉強方法ですが、それはひたすらPing-tでした。一応、受験直前には、大昔に中古で購入したあずき本も軽く卒読しましたが、内容はほとんどPing-tで勉強したことのおさらいという感じで、実質的にはPing-t一本といってもよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;Ping-tは、模擬試験ではだいたい95%、記述式ではコマ問を全分野選択したうえでランダム出題し、80-90%くらいをコンスタントに取れる状態までもっていきました。ここまでいくのにそう時間はかからなかったのですが、仕事が忙しかったことや、Ping-tで販売している割引チケットがなかなか取れなかったこともあり、結局今日まで受験が伸びてしまったことは悔やまれますが、まぁよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;とにかく言えることは、&lt;strong&gt;Ping-tさえやっておけばLPICレベル1は恐るに足らず&lt;/strong&gt;ということです。引き続き、LPICレベル2を取得すべく、Ping-tで精進していきたいと思います。&lt;/p&gt;&#10;&lt;h2 id="lpicレベル1は役に立つのか"&gt;LPICレベル1は役に立つのか&#10;&lt;/h2&gt;&lt;p&gt;ところで、LPICレベル1は果たして役に立つのでしょうか。私の考えとしては、それなりに役立つ知識を問うていると思いますが、試験問題だけ解いても実際に使えるかというのはまた別問題だと思います。sshコマンドについても随分学びますが、では試験問題が解けるからLinuxでSSHを使ってリモートログインを不自由なくできるかというと、それは恐らくできないでしょう。逆に、試験問題が解けなくても、SSHを利用した日常業務はこなせるものと思います。&lt;/p&gt;&#10;&lt;p&gt;ではLPICの試験は無駄なのかと言うと、そんなことはないと思います。基礎知識を体系的に身につけることで、たとえばSSHを学習する際、ネットの断片的な情報でも比較的楽に吸収できるでしょう。また、既にスキルとして習得している場合は、自分のやっていたことの意味を理解することができると思います。それはどうにも忘れてしまいがちなスキルの、長期的な記憶、本質的な理解に繋がるはずです。少なくとも、自分にはそう感じられました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;非常に実践的というわけではないのですが、実践するにあたり学習速度を大きく高める効能がある&lt;/strong&gt;と考えています。というわけで、LPICレベル2もやっていこう思ったわけです。それにまぁ、私のように名だたる企業に務めているわけではない身にとって、少なくともまったくの門外漢ではないですよということを示すことができるものでもありますしね……。&lt;/p&gt;&#10;&lt;p&gt;あと個人的に大きいかなぁと思うのは、&lt;strong&gt;Linuxを調べるうえでわからない言葉が減る&lt;/strong&gt;ことです。実務で使えるレベルではなくとも、一通りを体系的に学べるわけです。聞いたことはある、どういうものかなんとなく知っている、という状態は、見たことも聞いたこともない、という状態と比べると、心理的な抵抗感が非常に低い。これは、数値化することは難しいけれど、人間が学習するうえで非常に重要な要素だと思います。&lt;/p&gt;</description></item><item><title>Evernote Food の代替に SnapDish は使えるか</title><link>https://hack-le.com/46946712-2/</link><pubDate>Sat, 27 Feb 2016 18:39:21 +0900</pubDate><guid>https://hack-le.com/46946712-2/</guid><description>&lt;p&gt;早いもので、昨年9月30日より&lt;strong&gt;Evernote Foodが使えなくなってからもう五ヶ月がたとうとしています&lt;/strong&gt;。Evernote は最近あまり調子がよろしくないのか、広げていた風呂敷をたたみ始めています。&lt;/p&gt;&#10;&lt;h2 id="evernote-food-亡き後"&gt;Evernote Food 亡き後&#10;&lt;/h2&gt;&lt;p&gt;たしかに、Evernote は手を広げ過ぎていたかもしれません。ScanSnapとの連携くらいならまだしも、カバン、スタイラスペン…マーケットを見るたびに、どこに向かっているのだろうなぁ、と思ったものです。けれど、Evernote Foodは便利なアプリでした。&lt;/p&gt;&#10;&lt;p&gt;Evernoteは、アプリの標準機能で十分だから、と言っていましたが、それが表向きの言い訳であることを、アプリの愛好者であれば皆わかっていたでしょう。実際、同じことをEvernoteでやろうとしても、できません。時間帯によって、ランチやDinnerといった言葉を入れてくれる単純な機能が嬉しかった。位置情報からお店の情報を簡単に検索して入力できたのが嬉しかった。飯専用ノートブックにすぐに保存できるのが嬉しかった。デフォルトのノートブックは、決まっていますからねぇ…。大きな本体アプリと、小回りのきいた専用アプリという構成は、悪く無いと思うのですが。サードパーティ製のアプリも最近はあまり元気がありませんし。&lt;/p&gt;&#10;&lt;!--more--&gt;&#13;&#10;&lt;h2 id="snapdishで代用できるか"&gt;SnapDishで代用できるか&#10;&lt;/h2&gt;&lt;p&gt;そんなこんなであれこれと愚痴を言っていたら、有難いことにブログのコメント欄で&lt;strong&gt;SnapDishなるアプリ&lt;/strong&gt;を教えていただきました。これは飯に特化したSNS系のアプリですが、保存先にEvernoteを選べるので、Evernote Foodでやっていたようなこともできる、ということです。&lt;/p&gt;&#10;&lt;p&gt;まぁこういったものは使ってみなければわかりませんから、使ってみました。で、使用して何ヶ月かたっています。結論から言うと、&lt;strong&gt;使い方に注意すれば使えるが、SNS機能を使わないとなんだか肩身が狭い&lt;/strong&gt;、といったところでしょうか。&lt;/p&gt;&#10;&lt;p&gt;アプリの使用で肩身が狭いとはなんだかわけがわかりませんが、それは&lt;strong&gt;このアプリの本質がSNS&lt;/strong&gt;であることに起因します。あくまで飯をテーマにしたSNSなのです。飯写真をとると、自動でサーバーにアップされ、それは公開されます。そしていいね！の代わりに「もぐもぐ」という拍手を他ユーザーからいただきます。つまり、人に見せることを前提にしています。&lt;/p&gt;&#10;&lt;p&gt;さて、Evernote Food を使っている人たちは、そういう人でしょうか。少なくとも、私はそうではありませんでした。私にとってEvernote Foodは、あくまで&lt;strong&gt;飯を題材にした日記&lt;/strong&gt;でした。日記ですから、読者は自分だけです。したがって、食べかけだろうが、インスタントラーメンだろうが、平気で写真をとって、無秩序にあげていました。それが日記の日記たるところで、また素晴らしいところでもあります。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、人に公開するSNSとなればそういうわけにはいきません。食べかけの写真をアップするのはいかがなものかと思いますし、コンビニ弁当をアップするのも気が引けます。別に見栄を張っているわけではなく、&lt;strong&gt;わざわざ人にお見せする意味がない&lt;/strong&gt;からです。そんな写真を一瞬でもひと目にふれさせることは、迷惑行為になるのではないかとさえ思ってしまいます。まぁさすがにこれは考えすぎだと思いますが……。とにかく、&lt;strong&gt;Evernote Foodほど気軽ではない&lt;/strong&gt;、とは言えるのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;まぁ、手がないことはありません。&lt;strong&gt;公開した直後、写真を消せばよい&lt;/strong&gt;のです。そうすれば、まぁ基本的にひと目に触れさせることなく、またEvernoteに投稿した写真は消されませんから、かなりEvernote Food的に使えます。時間によってタイトルが自動で入力されるし、位置情報を利用した場所検索もできます。撮影できる写真が一枚だけなのはちょっとアレですが。ただまぁ、&lt;strong&gt;やはり面倒臭いので、手軽さを求めてアプリを使っているはずなのに、これではわけがわからない、と思う気持ちがないでもなく、結果、Evernote本体アプリを使うこともしばしば&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;また、一応アカウントを作っている以上、まったくアップしないのもなぁと思って、外食したときには消さずに残したりもしますが、そうすると&lt;strong&gt;不思議なことに、一つ二つはもぐもぐがつく&lt;/strong&gt;のですね。すると、違うんだ、俺はそういうつもりじゃないんだよ、と、真っ当な使い方をして楽しんでいる人たちに申し訳がないような、なんだかいたたまれないような気持ちになります。いや、これは自分が気にしすぎだと思うのですが。&lt;/p&gt;&#10;&lt;p&gt;とにかく、なんといいますか、&lt;strong&gt;本来のターゲットではない外様感&lt;/strong&gt;といいますか、なんだかそういう寂しい感じもするのです。というわけで、&lt;strong&gt;使ったり使わなかったり、という感じで、完全な代替には至っておりません&lt;/strong&gt;。使い方次第、あるいは心がけ次第では、かなりEvernote Foodに近い使用感も得られると思います。&lt;/p&gt;&#10;&lt;p&gt;飯系のSNSという新たな世界を垣間見れたのは少し面白かったです。いずれ本気で料理をするようになったら、使ってみようか……そんな日は来るのかな。そういえば、最近LINEがFoodieとかいうアプリをリリースしたそうですねぇ……これもSNSなんだろうな。LINEだし。&lt;/p&gt;&#10;&lt;h2 id="余談フリーミアムは幻か"&gt;余談：フリーミアムは幻か&#10;&lt;/h2&gt;&lt;p&gt;ところで、一時期もてはやされたフリーミアムモデルの代表格であるEvernoteの失速は、一つ象徴的な事として受け止める向きもあるようです（参考：「&lt;a class="link" href="https://newspicks.com/news/1237596" target="_blank" rel="noopener"&#10; &gt;元社員らに聞く「エバーノートはなぜ深刻な状況に陥ったのか」(前編)&lt;/a&gt;」、「&lt;a class="link" href="https://newspicks.com/news/1239485/body/" target="_blank" rel="noopener"&#10; &gt;岐路に立つエバーノート。新CEOで再起できるか(後編)&lt;/a&gt;」）。そうなのでしょうか。同じくフリーミアム代表格であるDropboxも、必ずしも順風満帆とはいっていないようです（参考：「&lt;a class="link" href="http://jp.techcrunch.com/2015/12/08/20151207failing-to-find-users-dropbox-will-shut-down-mailbox-in-february-2016-and-carousel-in-march/" target="_blank" rel="noopener"&#10; &gt;苦闘中のDropbox、Mailboxを来年2月、Carouselを3月に閉鎖―生産性ツール開発に全力 | TechCrunch Japan&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;日本のソシャゲで見られるガチャなど、品のないフリーミアムだと私は思っていますが、あれは今のところ（少なくとも経済的には）成功しているようですので、結局フリーミアムの行き着くところはあんなものなのかもしれません。そうであるとすれば、射幸心を煽るギャンブル性の強いもの、あるいは人が最も金を出す魔の領域であるエロス、あるいはその合わせ技がメインコンテンツとなるのでしょう。それは欧米人の厳しい感性からいけばあっという間に規制されてしまいそうです。既に規制されているという話も聞きますが、軽く調べてみるとどうにもノイズが多く、調べるのに骨が折れる領域です（そのこと自体が、魔の領域であることを示していますが）。&lt;/p&gt;&#10;&lt;p&gt;やはり、真っ当なのはEvernoteやDropboxのような健全かつ有益なサービスでしょう。無料でも便利に使え、さらに必要とする人間が適正な対価を支払うことで成り立つこれらのサービスは、金はないが意志と能力を持った学生や若い人にとって、強い味方です。やがて働きだし、自分で使える金がまとまって入るようになったら、より高い利便性と、恩返しの意味も込めて対価を払えばよい。なんとか、うまくいかないものだろうか。&lt;/p&gt;</description></item><item><title>SC2029: Note that, unescaped, this expands on the client side. について</title><link>https://hack-le.com/46909420-2/</link><pubDate>Tue, 23 Feb 2016 15:33:44 +0900</pubDate><guid>https://hack-le.com/46909420-2/</guid><description>&lt;p&gt;本記事は、シェルスクリプトの構文をチェックしてくれる便利なソフトshellcheckにおいて、表題のエラー「SC2029: Note that, unescaped, this expands on the client side.」がどのような時に出るのかについて書いたものです。&lt;/p&gt;&#10;&lt;h2 id="shellcheckの注意文"&gt;shellcheckの注意文&#10;&lt;/h2&gt;&lt;p&gt;shellcheckは、シェルスクリプトの構文チェックをしてくれる便利なソフトウェアです。これを使用して、以下のような注意が出ることがあります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;SC2029: Note that, unescaped, this expands on the client side.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;一見したところなんのことかよくわからなかったので、調べました。「[https://github.com/koalaman/shellcheck/wiki/SC2029](&amp;lt;a href=)&amp;quot;&amp;gt;SC2029 · koalaman/shellcheck Wiki · GitHub」によると、これはリモートホストで変数を展開したコマンドを実行するときに表示される注意文のようです。&lt;/p&gt;&#10;&lt;h2 id="クライアント側の変数かサーバー側の変数化"&gt;クライアント側の変数かサーバー側の変数化&#10;&lt;/h2&gt;&lt;p&gt;参考サイトの例文では、以下のコマンドを悪例として示されています。&lt;/p&gt;&#10;&lt;pre&gt;`ssh host "echo $HOSTNAME"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このコマンドは恐らく、リモートホストを表示したいのだろうと思われますが、これを実行すると、実際には $HOSTNAME がクライアント側の変数として展開されてしまい、クライアントのhostnameが表示されてしまいます。これはbashの仕様です。狙った動作をさせるには、この場合$HOSTNAMEの$をエスケープするか、あるいはダブルクォートをシングルクォートにしなければなりません。&lt;/p&gt;&#10;&lt;p&gt;さて、今回私のスクリプトでは、以下の状況でこの注意文が表示されました。&lt;/p&gt;&#10;&lt;pre&gt;`ssh hackle@"${hoge}" cat "${file}" &gt;&gt; "${file2}"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;変数file はスクリプト内で定義しています。したがって、クライアント側での展開で問題ありません。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;If you do want your string expanded on the client side, you can safely ignore this message.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;サイトでは以上のように、クライアント側の展開でよければ無視すればいいよ、と書かれていますから、今回この注意メッセージは特に気にする必要はない、ということになります。&lt;/p&gt;&#10;&lt;p&gt;まぁ、特に問題になるようなケースではありませんでしたが、bashの変数展開がどのようにされるかについては、よくよく理解しておかねばなりません。色々と気付かせてくれて、shellcheck は便利ですね。&lt;/p&gt;</description></item><item><title>Raspberry Pi で AD変換チップ ADS1015 を使って値を連続的に取得する</title><link>https://hack-le.com/46873492-2/</link><pubDate>Fri, 19 Feb 2016 14:06:13 +0900</pubDate><guid>https://hack-le.com/46873492-2/</guid><description>&lt;p&gt;Raspberry Pi でAD変換を行おうと思ったら、色々なチップがあると思いますが、今回は定番のADS1015を用います。販売元はAdafruitです。お値段は1,500円ほどと、少々かかりますが、I2C対応で使いやすいのが利点です。データシートは「&lt;a class="link" href="https://www.adafruit.com/datasheets/ads1015.pdf" target="_blank" rel="noopener"&#10; &gt;Ultra-Small, Low-Power, 12-Bit ADC with Internal Reference (Rev. C)&lt;/a&gt;」です。&lt;/p&gt;&#10;&lt;h2 id="ads1015の仕様"&gt;ADS1015の仕様&#10;&lt;/h2&gt;&lt;p&gt;主なスペックは以下の通りです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;通信方式：I2C&lt;/li&gt;&#10;&lt;li&gt;サンプリング周波数：128,250,490,920,1600,2400,3300 Hz に対応&lt;/li&gt;&#10;&lt;li&gt;4ch のシングルエンド または 2ch の差動信号&lt;/li&gt;&#10;&lt;li&gt;耐電圧 2.0 - 5.5V&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;シングルエンドで最大4chの入力があります（シングルエンド入力と差動入力の違いについては「&lt;a class="link" href="https://www.contec.co.jp/product/device/analog/basic.html" target="_blank" rel="noopener"&#10; &gt;アナログ入出力・A/D変換・D/A変換の基礎知識と用語集｜コンテック｜コンテック&lt;/a&gt;」を参照）。デフォルトは1600 Hzとなっています。入力インピーダンスが数Mオームはあるので、Raspbery Piで使う電圧程度なら過電流の心配はなさそうです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B013I1CQ9U" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;入手方法ですが、例によってスイッチサイエンスさんが仕入れてくれています（「[ADS1015搭載 12BitADC 4CH 可変ゲインアンプ付き - スイッチサイエンス](https://www.switch-science.com/catalog/1136/)」）。&#13;&#10;また、Amazonにもあります。&#13;&#10;&lt;p&gt;手軽なAD変換としてそのほかよく使われるものとしては、MCP3002やMCP3008などがあるでしょうか（「&lt;a class="link" href="//hack-le.com/47361017-2/" &gt;Raspberry Pi でSPI通信のAD変換 MCP3008 を使う&lt;/a&gt;」）。そちらはSPI対応となっています。&lt;/p&gt;&#10;&lt;h2 id="準備配線"&gt;準備、配線&#10;&lt;/h2&gt;&lt;p&gt;通信にはI2Cを利用しますから、まず Raspberry Pi でI2Cを使えるようにします。手順は「&lt;a class="link" href="//hack-le.com/45923317-2/" &gt;Raspberry Pi で I2C を使用する準備 : 或る阿呆の記&lt;/a&gt;」にまとめてある通りです。耐電圧は 2.0 - 5.5 V なので、3.3Vでも5.0Vでも使えるのですけれど、今回は 3.3V を利用します。そのほか、A0 - A3が、ADS1015のアナログ入力で、今回テストでA0を使います。なおI2Cアドレスは 0x48 ですので、要確認。&lt;/p&gt;&#10;&lt;p&gt;で、テスト用の配線ですが、とにかく電圧値を読みだすだけであれば、Raspberry Piの3.3Vを取り出して、そのまま A0 - A3 に入れたらよいと思うのですけれど、せっかくのAD変換で値が変化しないのもつまらないので、今回適当な抵抗と照度を測るCdSセルを3.3V(RPi) - A0の間に挟んでみました。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/8/7/870781ec.jpg" &gt;&lt;img alt="aaa" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/8/7/870781ec-s.jpg"&gt;&lt;/a&gt;&#10;例によってあまり人に見せる気を感じられない適当な写真ですが。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00YOENN8E" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="値を読み取る"&gt;値を読み取る&#10;&lt;/h2&gt;&lt;p&gt;まず、普通に一発分の値を読み取ります。有難いことに、AdafruitさんがPython用のライブラリを作成してくれているので、それを利用します。ソースコードをダウンロードするために、適当なディレクトリ下で以下を実行します（「&lt;a class="link" href="http://akkun49.blog.fc2.com/blog-entry-75.html" target="_blank" rel="noopener"&#10; &gt;ADS1015（A/Dコンバータ）を使ってみた。 - ついてる工房&lt;/a&gt;」を参考させていただきました）。&lt;/p&gt;&#10;&lt;pre&gt;`$ git clone &lt;a href="https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git"&gt;https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git&lt;/a&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ダウンロードしたディレクトリ下の、Adafruit_ADS1x15 ディレクトリ以下に、サンプルコードがありますので、そこで作業します。今回使うサンプルコードは ads1x15_ex_singleended.py で、まぁそのままでも使えるのですけれど、初期設定でADS1115用になっているようなので、35行目あたりの adc = ADS1x15(ic=ADS1115) となっている部分を、ADS1015 と書き換えてあげるとよいと思います。&lt;/p&gt;&#10;&lt;pre&gt;`$ cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_ADS1x15/&#13; # 別にvi でも nanoでもよいがとにかくテキスト編集&#13; $ emacs ads1x15_ex_singleended.py&#13; 35行目あたりを以下に書き換え&#13; adc = ADS1x15(ic=ADS1015)&#13; $ python ads1x15_ex_singleended.py&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで、電圧の値が V 単位で表示されたはずです。まぁコードを見ればわかると思いますが、設定としては、入力chとしてA0を使用、サンプリング周波数 250 Hz、4.096V レンジです。&lt;/p&gt;&#10;&lt;h2 id="値を連続的に取得する"&gt;値を連続的に取得する&#10;&lt;/h2&gt;&lt;p&gt;以上の一発分値を取得するのは、Power-down single-shot mode とされ、デフォルトです。低電力がウリのモードです。これに対し、常にAD変換をし続ける Continuous conversion mode もあります。その分電力は食います。本節ではこれを使ってみます。&lt;/p&gt;&#10;&lt;p&gt;前節と同じくads1x15_ex_singleended.pyを用います。 volts = adc.readADCSingleEnded(0, gain, sps) / 1000 の下に、以下のコードを挿入します。&lt;/p&gt;&#10;&lt;pre&gt;`volts = adc.startContinuousConversion(0,gain,sps)&#13; start_time=time.time()&#13; i=0&#13; while i &lt; 1000:&#13; volts = adc.getLastConversionResults()&#13; print(i,start_time - time.time(),volts)&#13; i += 1&#13; adc.stopContinuousConversion()&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;この状態で実行すると、 以下のような結果が出力されます。&lt;/p&gt;&#10;&lt;pre&gt;`(0, -0.0065038204193115234, 2968.0)&#13; (1, -0.007253885269165039, 2968.0)&#13; (2, -0.007879018783569336, 2968.0)&#13; (3, -0.008533000946044922, 2968.0)&#13; (4, -0.009218931198120117, 2976.0)&#13; (5, -0.009907007217407227, 2976.0)&#13; ...&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;左からループ回数、時間、電圧値(mV) です。コードを軽く解説すると、adc.startContinuousConversion で continuous mode に入ります。このとき、voltsには一番最初の値が格納されます。この状態になると、 adc.getLastConversionResults() でそのときのレジスタの値が返されるようになるので、それを1000回繰り返した後、ループを抜けて adc.stopContinuousConversion により元の single-shot mode に戻ります。時間を表示しているのはついでです。だいたい 0.7ms 毎に値取りにいけてるようなので、250sps(周期4ms)くらいは十分追っかけられそうです。雑ですが。&lt;/p&gt;&#10;&lt;p&gt;とはいうものの、実際にRaspberry Piで直接AD変換のレジスタの値を叩くような用途では、基本的にsingle-shot mode で十分な気がします。普通のAD変換ボードみたいに、どこかメモリに値をためて、それを取ってくるようにできたらいいんですけど…そういうのって何をどうすれば実装できるんでしょう…。&lt;/p&gt;</description></item><item><title>shellcheck で ls | grep が怒られた…ls の出力をパースしてはいけない？</title><link>https://hack-le.com/46848705-2/</link><pubDate>Wed, 17 Feb 2016 07:30:13 +0900</pubDate><guid>https://hack-le.com/46848705-2/</guid><description>&lt;p&gt;本記事は、シェルスクリプトの構文をチェックしてくれる便利なソフトshellcheckにおいて、ls | grep を使うなと言われることについて書いた記事です。ls | grep は定番の書き方だと思っていたのですが。色々調べてみたところ、特殊なファイル名が存在する場合、lsの出力は必ずしも正確ではないから、という感じでしょうか。&lt;/p&gt;&#10;&lt;h2 id="ls-をパースしてはいけない"&gt;ls をパースしてはいけない？&#10;&lt;/h2&gt;&lt;p&gt;shellcheckというソフトウェアを使って、シェルスクリプトの構文チェックをしています。シェルスクリプトは色々と罠の多い言語ですし、私のように独学で使っているものにとっては嬉しいソフトです。echo内でも変数をダブルクォートで囲んでないよと言われるなどちょっとお節介なところもあったりしますが、忘れがちなところですし、&lt;code&gt; &lt;/code&gt;はレガシーだから$( )にしようとか、forループにfindの結果突っ込むのは危ないとか、色々と教えてくれて有難い。で、今回 ls | grep で以下のような警告を受けました。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;SC2010: Don&amp;rsquo;t use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;英数字じゃないファイルネームのためにも、ls | grep を使わずにglobや条件式付きのforループで対応してください、というような内容だと思うのですが、何がまずいのでしょうか。なんとなく検索してみると、「&lt;a class="link" href="http://mywiki.wooledge.org/ParsingLs" target="_blank" rel="noopener"&#10; &gt;ParsingLs - Greg&amp;rsquo;s Wiki&lt;/a&gt;」やら「&lt;a class="link" href="http://unix.stackexchange.com/questions/128985/why-not-parse-ls" target="_blank" rel="noopener"&#10; &gt;shell - Why &lt;em&gt;not&lt;/em&gt; parse &lt;code&gt;ls&lt;/code&gt;? - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt;」などに、あれこれと ls の出力をパースしたりforループにつっこんではいけない理由が考察されています。なかなか読むのに骨が折れそうで、ちょっと読みきれていません。まぁ、基本的に、&lt;strong&gt;ls の出力は必ずしも実際のファイル名を正確に反映したものとは限らない&lt;/strong&gt;、ということになるのだと思います。大事なそうなところではあるので、暇を見てしっかりと理解したいところですが、まぁひとまずそんなところで。&lt;/p&gt;&#10;&lt;h2 id="ls--grep-の置き換え"&gt;ls | grep の置き換え&#10;&lt;/h2&gt;&lt;p&gt;とはいえ、&lt;strong&gt;個人的な運用においては、ls | grepでもまず問題になることはなさそうに思います&lt;/strong&gt;。たとえばlsの出力結果に特殊文字が入り込むようなケースって、どんなんでしょう？まぁだからといって放置してよい理由にはならないでしょうし、素直になおすことにしました。&lt;strong&gt;forループで * を使え、というのは確かですし、そちらのほうがわかりよい&lt;/strong&gt;とも思います。以下の感じでしょうか。&lt;/p&gt;&#10;&lt;pre&gt;`for file in *&#13; do&#13; ...&#13; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;&lt;strong&gt;ディレクトリだけといった条件があるなら、if文で[ -d ${file} ]; then なんちゃらみたいなのを挟めばよい&lt;/strong&gt;でしょう。&lt;/p&gt;&#10;&lt;p&gt;ただ、条件を指定してファイルの数を数える時、ls | grep -c 条件 なんてしたりしますが、これもfind | wcのほうが良いのでしょうか。find | wcも、細かいことを言い出すとそれはそれで色々ありそうに思えますが、少なくともshellcheck で警告は出ないし、良いのかな？どうなんでしょう。まぁそもそも、&lt;strong&gt;考えてみると ls | grep なんちゃらというのは、一見して何がしたいのかわかりづらいですし、そういう意味でもfindのほうが良いような気もします&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;というわけで、たとえばディレクトリ、隠しファイル以外のファイルを数えるコマンドとして、以下の様な感じにしてみました。&lt;/p&gt;&#10;&lt;pre&gt;`#ディレクトリと隠しファイルを除外してファイルのみ検索&#13; #before&#13; ls -p | grep -cv '\/'&#13; #after&#13; find . -type f -maxdepth 1 -not -name '.*' | wc -l | tr -d ' '&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;before は、ls で -pオプションをつけるとディレクトリ末尾に / がつくことを利用したものです。こちらのほうがコマンド自体はシンプルです。after は find コマンドで同じようなことを実現したもので、もしmaxdepthが1でない場合、隠しファイルの除外はもう少し煩雑になります（参考：「&lt;a class="link" href="http://qiita.com/ottijp/items/d7a20c52713474d293cc" target="_blank" rel="noopener"&#10; &gt;Macのfindでhidden fileを除いて検索する方法 - Qiita&lt;/a&gt;」）。tr -d &amp;rsquo; &amp;rsquo; は無くても大丈夫なケースはありますが、まぁいらない空白は取り除いておいたほうが良いと思います。うーん、コマンドが長くなってしまいました……。条件によっては、やっぱり ls | grep が使いたくなるでしょうし、なんとも微妙ですねぇ……。&lt;/p&gt;</description></item><item><title>Xperia Z3を一年近く使ってiPhoneよりいいかもと思い始めてきた</title><link>https://hack-le.com/46842323-2/</link><pubDate>Mon, 15 Feb 2016 20:52:48 +0900</pubDate><guid>https://hack-le.com/46842323-2/</guid><description>&lt;h2 id="メインはxperia-z3だが"&gt;メインはXperia Z3だが&#10;&lt;/h2&gt;&lt;p&gt;Xperia Z3をメインのスマホとして使い出したのは、去年の3月末頃だったでしょうか。中古、いわゆる白ロムとされるやつで、SIMロックフリーのiPhoneがあまり高いのと、iPhone 6のメモリが1GBというのにどうにも納得いかず、久しぶりにAndroidでも使うか、と手を出したような記憶があります。おサイフケータイを使いたかったのもありました。microSDも使えますしね。&lt;/p&gt;&#10;&lt;p&gt;というわけで使い出して、初めの間こそ好印象だったものの、使っていくうちにどうにもiPhoneから移行しきれないところが目立ち、結局、&lt;strong&gt;一応メインとしながらも、iPhoneも手放せない日が続くことになりました&lt;/strong&gt;。そのあたりの顛末は「&lt;a class="link" href="//hack-le.com/43815917-2/" &gt;Xperia Z3を買ったが結局iPhoneを使い出している : 或る阿呆の記&lt;/a&gt;」などの記事に書きましたが、まぁ全体的に大型化が手の小さい自分には厳しかったこと、ミュージックプレイヤーで良い物が見つからなかったこと、通信系がどうも不安定であったこと、などがあげられます。&lt;/p&gt;&#10;&lt;h2 id="慣れるとiphoneよりいいかも"&gt;慣れるとiPhoneよりいいかも&#10;&lt;/h2&gt;&lt;p&gt;通信系は相変わらず不安定なところがあるなと感じますが、Androidアプリの種類やその使い方もそれなりにわかってきて、たとえばWi-fiが不安定な時にはWi-fiのOn/Offなどもさっと出来るようになり（筋悪な対応だと思いますが）、色々な不便にもそれなりに対応できることがわかりました。iOSよりも自由度が高いので、基本的にrootが取れない、取らないことを前提にしているとはいえ、&lt;strong&gt;システムに密接なアプリが多く、多少のことであればなにかしらカバーできる&lt;/strong&gt;ようです。Androidのこういったところに慣れていると、iOSの不自由さにはイライラする人もけっこういるのでしょうね。ただiOSはその不自由さが快適さと表裏一体となっている面があるので、痛し痒しです。&lt;/p&gt;&#10;&lt;p&gt;大型で操作しづらいことについても、よく使うアプリの配置をできるだけ右下周辺に集めたり、ブラウザで上にありすぎて届かない検索窓を使う代わりに、ホームボタン（ボタンというのでしょうか？）から上スワイプで開くと真ん中くらいに検索窓があって指が届きやすいとか、まぁそういう&lt;strong&gt;細かな片手操作のノウハウも積み上がってきて、それなりに使えるようになってきました&lt;/strong&gt;。画面上部を下に下げるARROWSのスライドディスプレイが使えると、嬉しいんですけど（iPhoneでも同じようなの採用していますね）、まぁそうもいかないようなので。&lt;/p&gt;&#10;&lt;p&gt;そうして片手操作に慣れてくると、ギリギリ電子書籍が読める大きさであることなど、&lt;strong&gt;大画面の恩恵にも授かれて、なかなかどうして悪くない&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;大きな問題として残っていたのは、ミュージックアプリにこれと思うものがなかったことでしたが、これもApple Music Android版がリリースされたことで、解決しました（「&lt;a class="link" href="//hack-le.com/46809984-2/" &gt;Android のミュージックプレイヤーは Apple Music を使うことにした : 或る阿呆の記&lt;/a&gt;」）。まぁ、レスポンスの悪さなどまだ課題はありますが、少なくとも要求はそれなりに満たせてくれています。&lt;/p&gt;&#10;&lt;p&gt;iOSのほうが安定していると思いますし、アプリの挙動も不思議とキビキビしているように思うのですが（ハードウェアスペックでは負けているのにねぇ）、それでも&lt;strong&gt;AndroidにはiOSにはない多様性、自由度があります&lt;/strong&gt;。バックグラウンドでオンラインストレージ上のファイルをmicroSDに定期的に同期させて、ファイラでいじれるのが嬉しい。物理キーをアプリで利用できるのもよいですよね。音量ボタンで電子書籍のページめくりは、水場で使う時に嬉しいです。Xperia Z3などは防水防塵で、おサイフケータイも使えますし、カメラの物理キーが現場で手袋をしていても使えて嬉しいなど、iPhoneにはない良さが多くあります（カメラのソフトはややいただけませんが）。&lt;strong&gt;iPhoneは素直に使いやすいのですけれど、あれこれゴチャゴチャいじっていると、Xperiaもけっこういいな、と思うようになりました&lt;/strong&gt;。まぁ、こう思うまでに一年近くかかっているので、やはり慣れが必要なものかもしれませんが。&lt;/p&gt;</description></item><item><title>Android のミュージックプレイヤーは Apple Music を使うことにした</title><link>https://hack-le.com/46809984-2/</link><pubDate>Fri, 12 Feb 2016 01:19:52 +0900</pubDate><guid>https://hack-le.com/46809984-2/</guid><description>&lt;p&gt;以前「&lt;a class="link" href="//hack-le.com/43705796-2/" &gt;Androidのよいミュージックアプリが見つからない&lt;/a&gt;」という記事で、Androidで良いミュージックアプリが見つからず困っている旨の記事を書きました。本記事は、Apple的な解ではありますが、一つの解としてApple Musicを使うことにしたというものです。&lt;/p&gt;&#10;&lt;h2 id="決定打がなかったandroidのミュージックプレイヤーアプリ"&gt;決定打がなかったAndroidのミュージックプレイヤーアプリ&#10;&lt;/h2&gt;&lt;p&gt;Xperia Z3を使用しています。もともとはiPhoneを利用していました。Androidも随分熟れてきたおかげで、だいたいのことはXperiaでもできたのですが、私的にどうにも困ったことがありました。その一つが、ミュージックプレイヤーの問題です。OSXとiTunesで楽曲管理をしている私が、Androidでぶち当たった壁です。そのことについては、以前「&lt;a class="link" href="//hack-le.com/43705796-2/" &gt;Androidのよいミュージックアプリが見つからない : 或る阿呆の記&lt;/a&gt;」という記事を書きましたが、どのアプリを使っていてもなんらかの問題が生じます。主な問題点は以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;日本語が文字化けする&lt;/li&gt;&#10;&lt;li&gt;アルバムアーティストが使えない&lt;/li&gt;&#10;&lt;li&gt;ふりがながふれない&lt;/li&gt;&#10;&lt;li&gt;楽曲の表示スピードが遅い&lt;/li&gt;&#10;&lt;li&gt;トラック番号や再生時間が再生されない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;これらの問題がすべて、今回Apple謹製のミュージックアプリが出たことにより、解決&lt;/strong&gt;しました。&lt;/p&gt;&#10;&lt;h2 id="android版apple-musicはitunes使いにはうってつけ"&gt;Android版Apple MusicはiTunes使いにはうってつけ&#10;&lt;/h2&gt;&lt;p&gt;まぁ、細かな問題点はあります。楽曲の表示スピードについては、Apple Musicでもそんなに早いわけではなく、どういう処理をしているのかわかりませんが、非常に遅い。ひょっとしてSDカードの問題なんだろうか。また、日本語の表示も完全ではなく、文字化けこそしていないものの、濁点の付き方が変になっている曲名がいくつか見受けられました。しかし、それらは致命的な問題ではありません。&lt;/p&gt;&#10;&lt;p&gt;iPhoneより優れている面もあります。&lt;strong&gt;SDカードが使用できる&lt;/strong&gt;ことです。なんとなく128GBのmicroSDカードを挿入していましたが、最近のAndroidはSDカードに厳しい制限をかけていることもあり、あまり有効利用できていませんでした。しかし、Apple Musicのオフライン保存で使えるということで、その価値が一気に増したのです。&lt;/p&gt;&#10;&lt;p&gt;私がiPhoneを捨てることができない大きな理由の一つに、ミュージックプレイヤーアプリの問題があったので、このAndroid版Apple Musicによって、私のiPhone離れの野望に一歩近づきました。Appleにとってこれが良いことかどうかは微妙ですが、Apple Music自体は継続的な収入が望める有料サービスですし、そのサービスに加盟していることが前提の話ですから、Appleにとってもまぁ美味しいと判断したのでしょう。&lt;/p&gt;&#10;&lt;p&gt;Apple Musicは月額980円の有料ストリーミングサービスが本質であって、ミュージックプレイヤーとしての利用はオマケだと思うのですけれど、思いもかけず私が描いていた理想的なプレイヤーアプリだったという話でした。&lt;/p&gt;&#10;&lt;p&gt;2016年9月13日追記：いまも使い続けています。その不安定さは相変わらずです。妙にレスポンスが遅かったり。うーん、しかし、私の目的を果たせるのが現状これしかないからなぁ……。&lt;/p&gt;</description></item><item><title>アナログオシロスコープとデジタルオシロスコープの違い</title><link>https://hack-le.com/46747625-2/</link><pubDate>Mon, 08 Feb 2016 08:00:14 +0900</pubDate><guid>https://hack-le.com/46747625-2/</guid><description>&lt;p&gt;現場に入り始めの頃、どう見てもアナログ・オシロスコープだと思ったものをデジタル・オシロスコープだと言われて戸惑ったことがあります。だって、表示部がブラウン管ですよ、これアナログだからじゃないんですか、と。ところがこのオシロスコープにおけるアナログ、デジタルは歴史的経緯もあってけっこう微妙で、ついでに言うと、どうも世代によって言葉の使い方が違うようで、私は非常に混乱しました。一応今はなんとか整理がついたので、まとめておきたいと思います。&lt;/p&gt;&#10;&lt;h2 id="デジタルとアナログの違い"&gt;デジタルとアナログの違い&#10;&lt;/h2&gt;&lt;p&gt;オシロスコープのアナログ、デジタルの呼び名の変遷については、「&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%B7%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97" target="_blank" rel="noopener"&#10; &gt;オシロスコープ - Wikipedia&lt;/a&gt;」と「&lt;a class="link" href="http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1134304576" target="_blank" rel="noopener"&#10; &gt;デジタル・オシロスコープ と デジタル・ストレージ・オシロスコープ の違&amp;hellip; - Yahoo!知恵袋&lt;/a&gt;」が参考になります（どうも、電子系の話題は知恵袋の情報が多いような気がします）。ポイントは、&lt;strong&gt;アナログ・デジタルとオシロスコープの間には「ストレージ」が省略されている&lt;/strong&gt;、ということです。&lt;/p&gt;&#10;&lt;p&gt;何故ストレージが略されているかというと、アナログ・ストレージなんてもう絶滅しているので、わざわざ言う必要もない、という経緯だと知恵袋では解説されています。確かに、少なくとも私は見たことがない。きっとそうなのでしょう。となれば、&lt;strong&gt;表示部がブラウン管かどうかはアナログ、デジタルの区別からは関係がない&lt;/strong&gt;。まぁそう言われれば確かに、内部でAD変換をしていることと表示が液晶かブラウン管かなどというのはまた別の話です。ただ、AD変換 -&amp;gt; メモリに保存 -&amp;gt; 表示 というステップを必ず踏んでいるのであれば問題ないですが、Wikipediaには以下の記述があります。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;古くはアナログ・オシロスコープにアナログ-デジタル変換回路（ADC）でデジタル化したデータをメモリに蓄積し、それを表示する機能を装備したものをこう呼んだが、現在では入力信号をデジタル変換して処理し、表示するものがほとんどである。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;つまり、&lt;strong&gt;リアルタイムな表示は従来のアナログ・オシロスコープと同様のものがある&lt;/strong&gt;ということです（私のいた現場にもありました。リアルタイム表示の設定ボタンはREAL、と書いていました。そして筐体には、デジタル・ストレージ・オシロスコープの文字が…）。これを今の感覚でデジタル・オシロスコープと呼ぶのにはかなり違和感があります。Wikipediaもそのへんの区分について「古くはそう呼んだ」程度でぼかしているので、微妙なのでしょう。しかしながら、&lt;strong&gt;あくまでストレージを省略したものだと考えるのであれば、デジタル・オシロスコープと呼ぶことは少なくとも嘘ではない&lt;/strong&gt;。特に、昔からの技術者にとってその呼び方は違和感があるものではない。もっとも、本来的に同じ意味とはいえ、デジタル・ストレージ・オシロスコープとデジタル・オシロスコープではやはりニュアンスが違うのも事実だとは思いますが。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;デジタル・ストレージを採用しているものをデジタル・オシロスコープと言えば、とりあえず間違いではない&lt;/strong&gt;ということです。&lt;/p&gt;&#10;&lt;h2 id="人による呼び名の揺れについて"&gt;人による呼び名の揺れについて&#10;&lt;/h2&gt;&lt;p&gt;そうは言っても、表示がブラウン管であれば、若い技術者にとってデジタル・オシロスコープという感じはしません。前述したように、デジタル・オシロスコープとデジタル・ストレージ・オシロスコープではやはりニュアンスが違います。だから、&lt;strong&gt;ブラウン管のものはデジタル・ストレージ・オシロスコープも含めて全部アナログ・オシロスコープと呼ぶ人もいます&lt;/strong&gt;。そこで、デジタル・ストレージ・オシロスコープのすべてが、AD変換を通したものを表示しているのであれば、それは間違いであると明確に言えると思うのですが、中にはあくまでデータの保存にAD変換を採用しているだけ、というものもあるようなので、そう考えると&lt;strong&gt;あらゆるケースで必ずしも間違いである、とは言い切れない&lt;/strong&gt;。ややこしい話です。&lt;/p&gt;&#10;&lt;p&gt;そもそも、&lt;strong&gt;現実に現場でのやりとりにおいて大切なことは、言葉の正しい意味よりも、相手が何を言わんとしているか&lt;/strong&gt;、ということです。ですから、年配の人が「デジオシ（デジタル・オシロスコープ）持ってきて」といえば、それは表示の方式には拘らずデジタル・ストレージ・オシロスコープと考えてよいと思いますが、比較的若い人の場合は、少なくとも画面が液晶のオシロスコープを期待しているように思えます。まぁ、意味を把握したうえで、最終的にはケース・バイ・ケースということでしょうか。つまらん結論ですが。&lt;/p&gt;&#10;&lt;h2 id="結局どう呼べばいいのか"&gt;結局どう呼べばいいのか&#10;&lt;/h2&gt;&lt;p&gt;さて、呼び方には状況による揺れがあることをここまでつらつらと書いてきたわけですが、では自分で呼ぶ時にはどうすればいいのでしょうか。それはとても簡単で、&lt;strong&gt;自分からは何もつけずに「オシロスコープ」と言えば良い&lt;/strong&gt;と思います。このご時世、わざわざアナログとかデジタルとか指定する必要は、まずないはずです。&lt;/p&gt;&#10;&lt;p&gt;時が経てばオシロはほぼすべてデジタル・オシロスコープになりましょうから、そもそもデジオシ、などという言葉がなくなると思いますし（アナログ派は存在し続けるでしょうけれど、それも今のレコード愛好家のような立ち位置になるのではないでしょうか）、こういう悩みからも解放されるでしょう。とはいえ、&lt;strong&gt;現場にはまだまだ古い測定器が転がっています&lt;/strong&gt;から、知識として覚えておくと、無用な混乱をせずに済みます。&lt;/p&gt;</description></item><item><title>PCのカードから同軸の相手先にTTL信号が送れない場合（インピーダンス不整合）</title><link>https://hack-le.com/46733600-2/</link><pubDate>Wed, 03 Feb 2016 17:30:20 +0900</pubDate><guid>https://hack-le.com/46733600-2/</guid><description>&lt;p&gt;ちょっと特殊な状況かもしれませんが。状況としては、&lt;strong&gt;PCのカードからTTL信号を送信するのですが、相手側が同軸という状況&lt;/strong&gt;です。具体的には、NIのカードからTTLの制御信号をドライブ回路に送信する、という感じだったのですが、そのドライブ回路のTTLの受けが何故かSMAコネクタでした。で、やってみると、&lt;strong&gt;TTL信号が送信できない。オシロでみると、電圧がまったく出ていない。&lt;/strong&gt; 何故だろう？という状況です。&lt;/p&gt;&#10;&lt;h2 id="原因と対応"&gt;原因と対応&#10;&lt;/h2&gt;&lt;p&gt;PC(端子) &amp;mdash;- (SMA)ドライブ回路&lt;/p&gt;&#10;&lt;p&gt;原因としては、インピーダンスマッチングが取れていないからと思われます。同軸ということで、ドライブ回路の入力インピーダンスは恐らく50Ω。テスターで見ただけなので正確な値はわかりませんけれど、少なくともハイインピーダンスではなかったので、まぁ恐らく50Ωでしょう。ということで、オームの法則からI=V/Rより、&lt;strong&gt;抵抗が低い-&amp;gt;電流が多く流れる-&amp;gt;PCのカードからそんなにたくさん電流ながせない-&amp;gt;電圧降下&lt;/strong&gt; という現象が起きたものと考えられます。&lt;/p&gt;&#10;&lt;p&gt;対応としては、&lt;strong&gt;入力インピーダンスの50Ωを取っ払う&lt;/strong&gt;ことが考えられます。が、今回はそこのところが輸入品で、回路をいじるのはちょっと……ということだったので、&lt;strong&gt;電流を嵩上げする&lt;/strong&gt;方向で対応することなりました。最初はICをちょこっと挟めばいいんじゃない？という話だったのですけれど、どうも必要な電流が50mAらしく、そんな大量に出力できるICがなく、結局トランジスタを使いました。私にはそこらへんをさくっと作れる技量がないので、アナログに強いおっちゃんに回路を作ってもらいました。&lt;/p&gt;&#10;&lt;p&gt;アナログ周りはまったく不勉強で、色々とトラブルが起きます。勉強しないといけませんねぇ……。&lt;/p&gt;</description></item><item><title>Macで複数ページのpdfを一括でjpegにコマンドラインで変換する</title><link>https://hack-le.com/46678318-2/</link><pubDate>Thu, 28 Jan 2016 17:30:56 +0900</pubDate><guid>https://hack-le.com/46678318-2/</guid><description>&lt;p&gt;本記事の目的は、Macで複数ページのpdfを一気にjpegに吐き出す操作を、端末から行うことです。有名な方法としては、Automatorを用いたものがありますが、自動化には不適なので、ここでは端末を使います。というかAutomatorよくわからん…。&lt;/p&gt;&#10;&lt;h2 id="macにおけるpdfjpeg変換"&gt;MacにおけるPDF→JPEG変換&#10;&lt;/h2&gt;&lt;p&gt;OSXでpdfファイルをjpeg画像に変換しようと思ったら、&lt;strong&gt;標準のプレビューアプリを使うのが一番てっとりばやい&lt;/strong&gt;です。しかしこれだと、&lt;strong&gt;1ページずつしか出力できず&lt;/strong&gt;、とてもやっていられません。そこで複数ページを一括で変換する際は、&lt;strong&gt;Automatorを使用するやり方が有名&lt;/strong&gt;なようです。ようです、というのは私はこのAutomatorの使い勝手がイマイチよくわからず、あまり使ったことがないからです。&lt;/p&gt;&#10;&lt;p&gt;せっかくのUNIXですから、自動化にうってつけなのはやはりコマンドラインだと思います。ということで、&lt;strong&gt;Macの端末上からpdfをjpegに変換する手順&lt;/strong&gt;を書きます。おまけで、&lt;strong&gt;jpegをzipに圧縮&lt;/strong&gt;します。さらにおまけで、&lt;strong&gt;一連の処理を自動化したRubyスクリプト&lt;/strong&gt;も最後に付記します。&lt;/p&gt;&#10;&lt;h2 id="使用するソフトウェア"&gt;使用するソフトウェア&#10;&lt;/h2&gt;&lt;p&gt;使用するソフトウェアは&lt;strong&gt;ImageMagick&lt;/strong&gt;と&lt;strong&gt;Poppler&lt;/strong&gt;。ImageMagickのcovertコマンドだけでもjpegにはできるのですが、なんだか画質が荒い。同様に、Popplerのpdftoppmコマンドにも、toppmといいながら-jpegオプションがあるのですが、これもちょっと荒い。調整することもできるのかもしれませんが、ヘルプを見てもちょっとわからず。結局、&lt;strong&gt;pdftoppmで一度ppmにした後、convertでjpegにするのが簡単でかつ綺麗&lt;/strong&gt;でした（下図）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;alignnone&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/a/7/a771a346.png" &gt;&lt;img alt="スライド3" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/a/7/a771a346-s.png"&gt;&lt;/a&gt; pdftoppm -jpeg と pdftoppm -&amp;gt; convert の比較[/caption]&lt;/p&gt;&#10;&lt;p&gt;Homebrewがあることを前提に、以下のコマンドでインストールします。Homebrewがない場合はまずそのインストールから（「&lt;a class="link" href="http://brew.sh/index_ja.html" target="_blank" rel="noopener"&#10; &gt;Homebrew — OS X 用パッケージマネージャー&lt;/a&gt;」より、コピペ一発でインストール可）。&lt;/p&gt;&#10;&lt;pre&gt;`$ brew install imagemagick&#13; $ brew install poppler&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;参考：&lt;a class="link" href="http://qiita.com/labocho/items/dfd68bc4084b76a28b5c" target="_blank" rel="noopener"&#10; &gt;表示範囲 (CropBox) を考慮して PDF のサムネイルをつくる - Qiita&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="コマンドの実行"&gt;コマンドの実行&#10;&lt;/h2&gt;&lt;p&gt;input.pdf を、output-NUMBER.jpg のように出力する場合、以下のように実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ pdftoppm input.pdf buf&#13; -&gt; buf-1.ppm, buf-2.ppm ... と出力される&#13; $ convert *.ppm output.jpg&#13; -&gt; output-0.jpg, output-1.jpg ... と出力される&#13; $ rm -f *.ppm&#13; -&gt; いらないppmはお掃除&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;さらに、以下でoutput.zipにします。&lt;/p&gt;&#10;&lt;pre&gt;`$ zip -r -m output.zip output*.jpg&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;jpgファイルが残るのが鬱陶しい場合は、-jオプションを付記すると、zip圧縮後、jpg画像が残りません。その他の注意点としては、&lt;strong&gt;ファイル名に空白が挟まると、ワイルドカードからの展開の仕方によってエラーが起きる可能性があります&lt;/strong&gt;（通常は空白が区切りなので）。空白が含まれるファイルは多いので、なにかしらの対応が必要があるかもしれません（参考：「&lt;a class="link" href="http://linux.just4fun.biz/%E9%80%86%E5%BC%95%E3%81%8D%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88/%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E6%96%87%E5%AD%97%E5%88%97%E3%82%921%E8%A1%8C%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%81%86%E6%96%B9%E6%B3%95.html" target="_blank" rel="noopener"&#10; &gt;逆引きシェルスクリプト/スペースが含まれる文字列を1行として扱う方法 - Linuxと過ごす&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="おまけ一連の処理をまとめたrubyスクリプト"&gt;おまけ：一連の処理をまとめたRubyスクリプト&#10;&lt;/h2&gt;&lt;p&gt;私はちょいちょいpdfを画像化することがあるので、一連の処理を簡単なRubyスクリプトにしています。そのスクリプトをおまけでつけておきます。OSXって最初からRuby入ってたかどうか覚えていませんが、Rubyが使えるなら以下のスクリプトをコピペして、pdfファイルを引数に渡して実行すると、pdfをjpgで固めたzipに変換します。以下スクリプト名をpdf2zip.rbとしたときの使用例。&lt;/p&gt;&#10;&lt;pre&gt;`$ ruby pdf2zip.rb test/*.pdf&#13; -&gt; testディレクトリ以下に出力されます。&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以下ソースコード。&lt;/p&gt;&#10;&lt;pre&gt;`#!/usr/bin/env ruby&#13; # coding: utf-8&#13; &#13; require 'fileutils'&#13; &#13; class Pdf2Zip&#13; def initialize(file)&#13; @target_path = file&#13; @name = File.basename(file, ".pdf")&#13; @dir = File.dirname(file)&#13; end&#13; &#13; def to_zip&#13; files = _pdf2jpg()&#13; zip_file = _jpg2zip(files)&#13; end&#13; &#13; def _pdf2jpg&#13; buf = "#{@dir}/#{@name}"&#13; norm_ppm = Dir.glob("#{Regexp.escape(buf)}*.ppm")&#13; system('pdftoppm',@target_path,buf)&#13; ppm_list = Dir.glob("#{Regexp.escape(buf)}*.ppm")&#13; ppm_list = ppm_list - norm_ppm&#13; files = Array.new&#13; ppm_list.each{|f|&#13; next if File.extname(f) != '.ppm'&#13; jpg_name = f.sub(".ppm",".jpg")&#13; system('convert',f,jpg_name)&#13; files.push(jpg_name)&#13; }&#13; FileUtils.rm(ppm_list)&#13; return files&#13; end&#13; &#13; def _jpg2zip(files)&#13; zip_file = "#{@dir}/#{@name}.zip"&#13; zip_ary = ['zip','-r','-m',zip_file] + files&#13; system(*zip_ary)&#13; return zip_file&#13; end&#13; &#13; def to_s&#13; p @target_path,@dir&#13; end&#13; end&#13; &#13; # subroutine&#13; def pdf2zip(file)&#13; pdf_file = Pdf2Zip.new(file)&#13; puts file&#13; pdf_file.to_zip&#13; end&#13; &#13; def usage&#13; puts "Usage: $ ruby #{File.basename($0)} [FILES]"&#13; exit&#13; end&#13; &#13; # main&#13; usage if ARGV.size == 0&#13; usage if (ARGV[0] == '-h') or (ARGV[0] == '--help')&#13; flist = ARGV.dup if ARGV.size &gt; 0&#13; flist.each{|f| pdf2zip(f) if '.pdf' == File.extname(f)}&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ちなみに、私はzipをそのままcbzに変更することが多々有ります。その場合to_zip関数の最後の行に「FileUtils.mv(zip_file, zip_file.sub(&amp;rsquo;.zip&amp;rsquo;,&amp;lsquo;cbz&amp;rsquo;))」を付記するなどで良いでしょう。&lt;/p&gt;</description></item><item><title>BetterTouchTool のライセンス購入</title><link>https://hack-le.com/46667915-2/</link><pubDate>Wed, 27 Jan 2016 12:00:43 +0900</pubDate><guid>https://hack-le.com/46667915-2/</guid><description>&lt;p&gt;Macユーザーなら知らない人はいないんじゃないかと思うほど有名なソフト、&lt;strong&gt;BetterTouchToolが有償化&lt;/strong&gt;しました。トラックパッドをヘビーに使う人にはたいへん有難いソフトです。色々な葛藤があったと思いますが、有用なソフトにお金を払うのはごく当然のことに思えます。霞を食べて生きているわけではありませんし。&lt;/p&gt;&#10;&lt;h2 id="macの定番アプリbettertouchtool-の有償化"&gt;Macの定番アプリBetterTouchTool の有償化&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;値段については、Pay what you want、すなわち言い値&lt;/strong&gt;とのことで、いくつかの料金を選べました。また、&lt;strong&gt;一ユーザーの使っているコンピュータについてはいくらでもライセンスを適用可&lt;/strong&gt;ということです。私はRecommendedとなっていた、日本円にして738円のオプションを選択しましたが、もっと払ってもよかったかもしれません。Macを使わない日はない、つまりBetterTouchToolを使わない日はありませんし、開発が止まってしまっては困ります。&lt;/p&gt;&#10;&lt;p&gt;ライセンスを購入すると、Eメールが届き、メール内のリンクをクリックすると名前.bettertouchtoolという長々しい拡張子？のファイルがダウンロードできました。それを実行すると、ライセンス登録が完了です。ライセンス登録というと、あの意味不明な文字列をコピペして、ライセンス登録の項目がどこにあるかメニューから探して…というやや面倒な作業がたいていですが、そういった手間が省かれているのは楽なものです。&lt;/p&gt;&#10;&lt;h2 id="いつの間にかソフトに金を払うのに抵抗なくなった"&gt;いつの間にかソフトに金を払うのに抵抗なくなった&#10;&lt;/h2&gt;&lt;p&gt;典型的なネットユーザーであった私は、かつてWindowsマシンで色々なフリーソフトを好んで導入していたことがありました。実際、お金のない学生にとって費用のかからないソフトはたいへん有り難かったものです。まぁ、今でもそれは変わりませんが。&lt;/p&gt;&#10;&lt;p&gt;ただそのせいで、便利なものを開発してくれた人にお金を払うということに、抵抗を感じるようになってしまっていたことも事実です。それはソフトウェアの自由を信奉するが故というよりは、単純な貧乏根性や乞食根性が故であったように思います。ソースコードの開示についてはうるさいライセンスでも、別にお金を取ること自体は悪でもなんでもないのですが、まぁ、自分に都合よく自由を解釈していたのでしょう。でも、私のような人間も多かったのではないかな。&lt;/p&gt;&#10;&lt;p&gt;良くも悪くも、Appleのエコシステムは有料の文化ですが、そのおかげで「&lt;a class="link" href="https://jp.linux.com/news/252-zdnetjapan/425188" target="_blank" rel="noopener"&#10; &gt;アップル「App Store」、開発者の累計収入が250億ドルに到達&lt;/a&gt;」ということもありますし、まぁ、抵抗がなくなった因の一つはApple文化のおかげと言えるかもしれません。後はまぁ、無料といいながら無料でないものがあからさまに増え過ぎて、ちょっと嫌気がさしているのもあるかもしれませんが。&lt;/p&gt;</description></item><item><title>Chromebook一ヶ月使用しての所感：Webには快適だが、処理能力とディスプレイはもうすこい良いほうが</title><link>https://hack-le.com/46638051-2/</link><pubDate>Sun, 24 Jan 2016 18:18:02 +0900</pubDate><guid>https://hack-le.com/46638051-2/</guid><description>&lt;p&gt;Chromebookを購入して一ヶ月が経ったので、所感を綴ります。Chromebookについては、「&lt;a class="link" href="//hack-le.com/46352847.html" &gt;Chromebook 購入しました : 或る阿呆の記&lt;/a&gt;」と「&lt;a class="link" href="//hack-le.com/archives/46456525-2/" &gt;Chromebook 購入二週間の雑感 いつでもどこでも気兼ねなく使えるマシン : 或る阿呆の記&lt;/a&gt;」という記事も書いています。&lt;/p&gt;&#10;&lt;h2 id="購入して一ヶ月"&gt;購入して一ヶ月&#10;&lt;/h2&gt;&lt;p&gt;購入したのはHPのChromebook 11 G3で、主なスペックはCPUがCeleron N2840（エクステンションのSystemではN2830と表示されますが、公式カタログではN2840とありますし…まぁどちらも大して変わりません）、メモリ4GB、ストレージが16GB、解像度が1366x768、バッテリーが公称8時間、といったところです。現在日本で手に入るものとしては、標準的なスペックであるといえます（しかしこれを19,800円で手に入れることができたのは僥倖でした）。&lt;/p&gt;&#10;&lt;h2 id="手軽にwebを楽しめる"&gt;手軽にWebを楽しめる&#10;&lt;/h2&gt;&lt;p&gt;Chromebookを使っていて有難いのは、やはり&lt;strong&gt;物理的なキーボードの存在&lt;/strong&gt;です。本当に入力が楽。タブレットでの入力も言うほど悪くはないのですが、やはりある程度の文章を入力するには労苦が全然違います。そしてブラウザしか使えないが故にバッテリーの持ちもよく、&lt;strong&gt;インターネットが長時間、気軽に楽しめるデバイス&lt;/strong&gt;です。まぁ、寝っ転がりながらとか、テレビを見ながらさっと、などといったシーンではタブレットのほうが便利であることは間違いありませんが、しかしまとまった時間、座ってネットをするのであれば確実にChromebookのほうが勝手がよい。Webを楽しむという観点から見た時、Chromebookはたいへん価値があります。&lt;/p&gt;&#10;&lt;h2 id="処理能力とディスプレイに若干の不満"&gt;処理能力とディスプレイに若干の不満&#10;&lt;/h2&gt;&lt;p&gt;さて、最小限の役割しかもたないが故に、ハードウェアのスペックの割にはたいへん高いパフォーマンスを発揮することでChromebookは知られています。実際、それはそのとおりだと思うのですが、しかしながら、それでも&lt;strong&gt;処理能力には若干の不満&lt;/strong&gt;があります。&lt;strong&gt;多くのWebページで、表示までけっこう待たされます&lt;/strong&gt;。恐らくはCPUパワーの不足だと思うのですが…それともストレージがeMMCであることも一因なのでしょうか。&lt;/p&gt;&#10;&lt;p&gt;あとはディスプレイです。色が全体的に暗色がっているというか青みがかっているような印象で、&lt;strong&gt;サイトが見づらいなと思うことがちょくちょくあります&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;安定性はまぁまぁなのですが、ずっと使用していると動作が重くなったことがありました。再起動したらなおったのですが。まぁこれはWindowsやMacでもありがちですけどね。&lt;/p&gt;&#10;&lt;p&gt;以上は主にChromebookというよりはChromebook 11 G3というハードウェアに対する不満ですが、&lt;strong&gt;現状日本で入手しやすいChromebookのスペックはどれも似たり寄ったり&lt;/strong&gt;なので、まぁよいでしょう。もちろん、値段を考えればかなり健闘しているのは言うまでもありません。最近はWindowsマシンもまた随分安いものがありますが、Chromebookと同等のパフォーマンスがあるとは思えませんし。しかし、&lt;strong&gt;もうちょっとハイパフォーマンスのデバイスが、手頃な値段であってもよいなと思います&lt;/strong&gt;。4万くらいでMBA並に快適なものが手に入ると嬉しいですが。&lt;/p&gt;&#10;&lt;p&gt;あとはまぁ、キーバインドやタッチパッドのジェスチャーに融通をきかせてほしいとか、そういった不満もありますが、その点については前回記事にしたので。&lt;/p&gt;&#10;&lt;h2 id="使い方はまだ研究中"&gt;使い方はまだ研究中&#10;&lt;/h2&gt;&lt;p&gt;いまのところは家でダラダラとネットをする程度にしか使っていませんが、それでも不便に思うことはあります。たとえば写真を編集したいとか、ブログに画像をアップロードしたいとか、NASのデータを読み込んで編集したいといったことです。ローカルストレージを前提にしないので、今までの使い方がそのままでは通用しません。とはいえ恐らくこの程度のことであれば何かしらの解決方法はあるはずなので、運用についてはこれからも考えていきたいところです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B015W23ZW0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Windows一筋だった姉にMacBook Airをあげたら</title><link>https://hack-le.com/46578782-2/</link><pubDate>Sat, 16 Jan 2016 22:29:19 +0900</pubDate><guid>https://hack-le.com/46578782-2/</guid><description>&lt;p&gt;MacBook Air 2010 13インチをWindows一筋だった次姉にあげました。あまり気に入らないのではないかと思っていたのですが、存外気に入ったようです。特にトラックパッドの操作性が良かったらしい。&lt;/p&gt;&#10;&lt;h2 id="windows一筋"&gt;Windows一筋&#10;&lt;/h2&gt;&lt;p&gt;私には二人の姉がいて、次姉は昔からパソコン関係が好きな人です。我が家にパソコンが入り込んできたのは、ご多分に漏れずWindows 95からで、その流れで姉も自分のパソコンとしてWindows 98のマシンを購入したようです。当時はまだインターネットはあまり一般的とは言えませんでしたが、回線を引いて楽しんでいたようです。そもそも、個人がパソコンを持つこと自体がまだ一般的ではなかった時代です。まぁ好きだったのでしょうねぇ。&lt;/p&gt;&#10;&lt;p&gt;といっても、いわゆるギーク寄りの人ではありません。パソコンは専ら自分で絵を描いたり漫画を描いたりするのに利用していたようです。クリエイター寄りですね（このむず痒い響きのある言葉を当人は嫌がりそうですが）。私の趣味嗜好も、次姉からは大きな影響を受けていると思います。もっとも、次姉は長姉から影響を受けているので、そもそもの発端は長姉にあるのですが（長姉はオタク趣味はまるでありませんけど、耽美系が好きだったようなので）。&lt;/p&gt;&#10;&lt;p&gt;まぁそんなわけで、姉はもうかれこれ15年以上Windowsマシンを愉快に扱ってきたわけです。スマートフォンも好きなようですが、これもずっとAndroidを使っていますね。Apple文化には一切染まらずにきました。&lt;/p&gt;&#10;&lt;h2 id="macbookair-late-2010-13インチ-をあげた"&gt;MacBookAir Late 2010 13インチ をあげた&#10;&lt;/h2&gt;&lt;p&gt;そんな姉に、先日MacBook Airをあげました。型落ちもいいところで、MacBook Air Late 2010の13インチモデルです。ただし、SSDは256GB、メモリは4GBですから、&lt;strong&gt;CPUがCore 2 Duoで頼りないということを除けば、まだまだ使える代物&lt;/strong&gt;です。PCのスペック競争もようやく落ち着きましたね（ちょっとさびしい）。&lt;/p&gt;&#10;&lt;p&gt;ただまぁ、バッテリーがやや弱っていたり（充放電回数700超えだったはず…Appleの規定では、MBAは500以上は消耗したとみなされる）、またヒンジがゆるゆるになっていたり、トラックパッドの左側が左手をずっとおいていた影響下少し変色しているような感じがしていたりなど、歴戦をくぐり抜けてきたマシンらしい摩耗が見受けられます。&lt;/p&gt;&#10;&lt;p&gt;オークションで売り払うことも考えましたが、状態のよくない中古で、それなりの額の取引は気が引けたのもあり、せっかくだから身内で欲しがるひとがいるならあげようと考えました。ただまぁ、姉はWindows一筋ですから、Macはいらないかなと思っていたのですけれど、話してみると意外にも「欲しい」とのこと。それならばと、あげました。&lt;/p&gt;&#10;&lt;h2 id="意外と馴染んでいた"&gt;意外と馴染んでいた&#10;&lt;/h2&gt;&lt;p&gt;Xperia Z5Cのグローバル版をゲットするようなガジェット好きの次姉ですから、もちろんノートパソコンも持っているので、あまり使っていないのではないかなと思っていました。が、先日「MBA使ってる？」と聞いてみたところ、「あれ便利」と語られました。意外にも、馴染んでいたようです。&lt;/p&gt;&#10;&lt;p&gt;姉が何より驚いていたのは、やはり&lt;strong&gt;トラックパッドの勝手の良さ&lt;/strong&gt;でした。私もOSXのもっとも大きな魅力の一つがトラックパッドの操作性であると思います（参考：「&lt;a class="link" href="//hack-le.com/32323358-2/" &gt;MacのメリットはトラックパッドとUnix : 或る阿呆の記&lt;/a&gt;」）。曰く、「どうしてWindowsはこれを真似しないのかと思った」。やはり基本的な入力部分ですから、OSの制約もあるのでしょう。Windows 10ではかなり真似されているという話も聞きましたが、それにしてもちょっと遅かったですね。けっこう難しいのでしょうか？しかしChromebookはよく勉強しています。&lt;strong&gt;Chromebookの三本指スワイプによるタブ移動は逆にMacに取り入れてほしい&lt;/strong&gt;（三本指ドラッグも残してほしいですが）。&lt;/p&gt;&#10;&lt;p&gt;サードパーティではあるけれど、&lt;strong&gt;BetterTouchTool&lt;/strong&gt;（そろそろ有料化するようですね。それだけの価値はあります）を使えばさらに利便性は飛躍的に向上することを実演してみせると、「標準のままでも十分に便利過ぎるくらいだけどなぁ」と言っていましたが、かなり興味を持ったみたいです。まぁそのうち入れるだろうと思います。そういえば私も、BetterTouchToolの導入までは若干時間がかかりました。何しろそのままでも十分使いやすいので……。&lt;/p&gt;&#10;&lt;p&gt;また、&lt;strong&gt;MacBook Air 2010はもう5年以上前のマシンですが、それにしても一般的なWebブラウジング等の用途にかぎれば十分なパフォーマンスを発揮する&lt;/strong&gt;ことも、随分気に入っていたようです。とにかく使いやすく、職場にも持って行きたいが、MS Officeなどはどうしたらよいだろうかと相談されました。仮想化ソフトを起動して、スワイプでWindows画面に移れるのも「おぉー」と。私も最初やった時はちょっと感動しましたよ。&lt;/p&gt;&#10;&lt;p&gt;「なんでこれ手放したの？もう貰っちゃったから返さないけどね」と言われましたが、まぁそれより新しい機種持っていますし。今この記事を書いているのもMBA 2013ですし。しかし、正直そんなに使ってもらえるとは思いませんでした。元々CGを趣味で嗜んでいる姉は、当然Macについても気になるところはあったようなのですが、OSを換えるとこれまでに揃えたソフトや周辺機器も総入れ替えになるということで気乗りしなかったそうです。「ついに私もMacユーザーか」とどこか感慨深げに話していたのは、まぁ昔の時代を知る人だからでしょうね。今となっては絵描きにWindowsもMacもないでしょうし。&lt;/p&gt;&#10;&lt;p&gt;デスクトップはもちろんまだまだWindowsからも離れられないでしょうけれど、ノートパソコンとしての用途には十分のようでした。私としても、かつての愛機がまだまだ活躍できそうで嬉しいです。「みんなMac買ってるんはスタバでドヤ顔するためとちゃうんやでー」「このへんスタバないやん」「ああうん」そんな話をしました。でもコメダ珈琲はあるんですよ。&lt;/p&gt;</description></item><item><title>iPhone の 4.7 インチはちょうどいいかもしれない</title><link>https://hack-le.com/46551755-2/</link><pubDate>Thu, 14 Jan 2016 00:03:56 +0900</pubDate><guid>https://hack-le.com/46551755-2/</guid><description>&lt;p&gt;母がauの iPhone 6S に機種変更しました。羨ましい限り。MNPバラマキの恩恵に預かったようで、iPhone 6S本体代金を考えると、まぁまぁのお値段で購入できたようです。Android派でまた格安SIM運用を好む次姉は、「もっと安くできるのに」と不満気でしたが（そういいつつ、いつの間にかXperia Z5Cを購入していた！）、そのやり方を教えるのも一苦労ですので、そういったわかりやすさも含めての値段、と考えるべきでしょう。&lt;/p&gt;&#10;&lt;h2 id="キャリアでiphone-6sをはわかりやすい選択肢ではある"&gt;キャリアでiPhone 6Sを、はわかりやすい選択肢ではある&#10;&lt;/h2&gt;&lt;p&gt;私としても、節約できるところはすればいいのにとは思うのですが、このへんはちょっかいだしてもあまり有り難られませんしねぇ……そのうえ家庭内サポート業務ができては結局高い。しかし、電気代やガス代については1円の節約にも敏感な人たちが、通信費にはとんと無頓着なのは不思議なものです。&lt;/p&gt;&#10;&lt;p&gt;まぁ、わかりやすさ込でまぁまぁのお値段といっても、二年後に契約解除を忘れてしまうと話が変わってきます。まさにキャリア側の狙いはこれですし、そういう商売に付き合うのに嫌気が差したことは、私がキャリアから離れた理由の一つです。しかし最近はSIMロック解除の義務化などもあるので、以前より状況はよくなりました。私のiPhone 5も、SIMロックが解除できたらなぁとよく思います。いまだにiPhone 5でスペックとしては十分で、主にミュージックプレイヤーとして、つまりiPod touch的な使い方で活躍しています。GPSの精度もメインで使っているXperia Z3より何故か良い。&lt;/p&gt;&#10;&lt;h2 id="ちょっといじらせてもらったところ好感触"&gt;ちょっといじらせてもらったところ、好感触&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;私は手が小さいですし、スマホはポケットに入っていることを是とします&lt;/strong&gt;。ですから、iPhone 5とXperia Z3の両方を利用している私は、常々5.2インチのXperia Z3は普段使いには大きすぎると考えていました。iPhone 6Sは4.7インチで、店頭で触った印象は、Xperia寄りで「ちょっと大きすぎるかな」というものだったのですが、ここしばらく何度か触っている間に、ちょっと印象が変わりました。&lt;strong&gt;4.7インチ、けっこうよいかも&lt;/strong&gt;しれない。&lt;/p&gt;&#10;&lt;p&gt;まず&lt;strong&gt;ポケットにはギリギリ邪魔にはならないかな、というサイズ&lt;/strong&gt;です。もちろん4インチのiPhone に比べれば、多少の異物感はあるのですが、まぁあってもよいかな、と思えるサイズ。そして画面ですが、一番大きいなと思ったのは、&lt;strong&gt;右手で持った時、親指がギリギリ下方左端に届いたこと&lt;/strong&gt;です。いえ、Xperia Z3でもまったく届かないことはないのですが、ちょっと無理をする感じというか、手全体に力がはいる感じです。一方、iPhone 6Sはさほど無理せずとも左端に親指が届きました。これは大きくて、下画面だけでも楽にタッチできれば随分違います。&lt;strong&gt;ホームボタンをダブルタップすることで、上画面を下ろすこともできます&lt;/strong&gt;し（Androidでも実装している端末がありますが、Xperiaは何故か実装していないようですね。まぁ、たしかにあまりカッコよくはないですけど）。&lt;/p&gt;&#10;&lt;p&gt;端末自体も優秀で、何をするにもサクサク動くということも相まって、iPhone 6Sは非常に好印象です。4インチのiPhoneが出たら、次の買い替えではそちらを選ぶつもりでしたが、これならば、&lt;strong&gt;スペックも考慮に入れて、4.7インチを選んでもよいかもしれない&lt;/strong&gt;と思うようになりました。店頭の印象ではNGだったのですが、ある程度長い時間使ってみないと、わからないものですね。&lt;/p&gt;</description></item><item><title>ssh -L でポートフォワーディングしたら、その後ブラウザでポート番号が変更できなくて焦った話</title><link>https://hack-le.com/46539984-2/</link><pubDate>Tue, 12 Jan 2016 08:43:40 +0900</pubDate><guid>https://hack-le.com/46539984-2/</guid><description>&lt;p&gt;多分Chromeブラウザの仕様の話です。表題だけ見るとよくわかりませんが、example.comの80番にアクセスできずに焦った話です。&lt;/p&gt;&#10;&lt;h2 id="sshでトンネル"&gt;sshでトンネル&#10;&lt;/h2&gt;&lt;p&gt;sshの便利なオプションに-Lがあります。これを使うとsshサーバーを踏み台にすることができます。それで、VPSで借りている非公開のWebサーバーについて、ssh経由でアクセスして動作を確認していました。以下のような感じです。&lt;/p&gt;&#10;&lt;pre&gt;`$ ssh -L 22000:example.com:80 hackle@example.com&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;こうすると、localhost:22000でexample.comの80番に繋がります。80番を外部に公開せずに、Webサーバーの動作を検証できるわけです。&lt;/p&gt;&#10;&lt;h2 id="ブラウザでポート番号が勝手に指定される"&gt;ブラウザでポート番号が勝手に指定される&#10;&lt;/h2&gt;&lt;p&gt;そして、作業が完了していざWebサーバーを公開したまではよかったのですが、その後&lt;strong&gt;Chromeでexample.comにアクセスすると、勝手にポート番号が22000に指定されてしまう現象&lt;/strong&gt;に見舞われました。URLでexample.com:80と指定してもダメ。勝手にポート番号が22000に変更されます。どういうこっちゃ、と思ってChromeではなくSafariでアクセスしたところ、これまた同じ現象に見舞われました。iPadのChrome・Safariでも、iPhoneでも、Xperiaでも漏れなく撃沈。それでは……とコマンドラインのブラウザw3mでアクセスしてみると、これはちゃんとポート番号80で繋がりました。うーん、やはり&lt;strong&gt;クライアント側のブラウザの問題&lt;/strong&gt;であるらしい。&lt;/p&gt;&#10;&lt;p&gt;考えられることと言えばキャッシュくらいだよなぁと &lt;strong&gt;、「設定」→「その他のツール」→「閲覧履歴を消去」より、あらゆるキャッシュを軒並み削除&lt;/strong&gt;しました。そして再度example.comにアクセスしてみたところ、&lt;strong&gt;ちゃんと80番にアクセスすることができました&lt;/strong&gt;。やはり、&lt;strong&gt;キャッシュが何か悪さをしていたらしい&lt;/strong&gt;。Googleアカウントでログインしているので、他のデバイスにも伝搬してしまっていたのでしょう。しかしSafariにも伝搬したのは謎です。何か共有しているんでしょうか。&lt;/p&gt;&#10;&lt;p&gt;それにしても、何故にこういったことが起きたのかはなんとも釈然としません。お節介（？）が過ぎて謎めいたエラーが起きるのは、昔から変わらないですね。&lt;/p&gt;</description></item><item><title>Ping-t の問題とLPIC本試験の問題の差異について</title><link>https://hack-le.com/46519383-2/</link><pubDate>Sun, 10 Jan 2016 16:37:13 +0900</pubDate><guid>https://hack-le.com/46519383-2/</guid><description>&lt;p&gt;LPIC 101を取得してから、全然勉強していない管理人です。実は101を取得してから、102以降の勉強で利用すべくLPICの勉強サイトで有名なPing-tの有料会員になったので、勉強しないともったいないのですが……ダメですね。ぼちぼちやろうと思います。今月か来月くらいで102を取る感じで、まぁまったりと。→合格しました「&lt;a class="link" href="//hack-le.com/47349677-2/" &gt;Ping-t だけ使った勉強法で LPIC Level 1と2 は問題なし&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="ping-t-の問題は信用できるのか"&gt;Ping-t の問題は信用できるのか&#10;&lt;/h2&gt;&lt;p&gt;さて、本題ですが、Ping-t の問題と実際の本試験での問題の差異について、メッセージより質問をいただいたので、返信がてら記事を書きます。&lt;/p&gt;&#10;&lt;h3 id="問題文について"&gt;問題文について&#10;&lt;/h3&gt;&lt;p&gt;まず、「Ping-tと本試験で、問題文に違和感はないか」について。これは、あります。全体的に、LPICのほうが難しい聞き方といいますか、Ping-tのようにわかりやすい問題文ではありません。原因は大きく二つ、まず&lt;strong&gt;原文が英語の翻訳である&lt;/strong&gt;こと。この翻訳はあまり評判がよろしくなく、昔に比べるとだいぶ改善されたそうですが、日本語として不自然に感じる問題はちょくちょくあります。翻訳の質はよいとは言えないです。まぁ、英語の原文を確認できますから、最低限の英語力があればなんとかなると思います。もう一つの原因は、&lt;strong&gt;原文からして問題文自体が難しい&lt;/strong&gt;ことです。何が聞きたいのか曖昧で、答えが複数あるように思えてならない問題があります。そのときはそういうものとして、こちらで問題の真意を考えるしかありません。まぁ、&lt;strong&gt;そういう問題は少ないので、あまり深追いせず次の問題にうつったほうがよい&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h3 id="ping-tの問題は何問出題されるか"&gt;Ping-tの問題は何問出題されるか&#10;&lt;/h3&gt;&lt;p&gt;次に、「Ping-tで出題される問題が実際どれだけ本試験で出題されるか」ですが、これはすみません、&lt;strong&gt;わかりません&lt;/strong&gt;。&lt;strong&gt;問題文を持ち帰ることができない&lt;/strong&gt;ので、記憶だけが頼りなのですが、なにぶん試験を受けたのも何ヶ月か前ですから、記憶が曖昧です。ただ、感触として、問題がそのままというのは数が少なかったと思いますが、問われる知識の範囲はだいたい同じなので、いくつかのマニアックな問題を除けば、&lt;strong&gt;Ping-tで問われる知識を身につけておけば、まずまず対応できます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="追記-記述式複数選択式の問題の割合"&gt;(追記) 記述式、複数選択式の問題の割合&#10;&lt;/h3&gt;&lt;p&gt;2016年1月12日追記。「コマ問のような記述式の問題や、複数選択の問題は、何問出題されるか」について。前述したように、朧げな記憶が頼りですので話半分程度に。まず&lt;strong&gt;記述式の問題については、これは数問程度しか出なかった&lt;/strong&gt;ように覚えています。もっと出るかと思っていたので、拍子抜けした記憶があります。複数選択の問題については、特に意識していなかったので残念ながらよく覚えていないません。少なくはなかったと思いますが。&lt;/p&gt;&#10;&lt;h2 id="実際のところlpicは役に立つか"&gt;実際のところLPICは役に立つか&#10;&lt;/h2&gt;&lt;p&gt;ところで、ついでなのでLPICが実際のところ役に立つかどうかについて軽く触れます。勉強のモチベーションに大きく関わるところですので。この点については、資格にしては珍しく比較的実践的ではないかと感じています（少なくとも無線の試験よりは……）。&lt;/p&gt;&#10;&lt;p&gt;101を取得しただけの自分ですけれど、早速&lt;strong&gt;最新のCentOSやUbuntuでsystemdのコマンドが抵抗なく扱えました&lt;/strong&gt;し、オプションを覚えるのが億劫でイマイチつかってこなかった&lt;strong&gt;テキストフィルタ系のコマンドも、だいぶ使えるようになった&lt;/strong&gt;と思います。変化の早い時代ではありますけれど、シェルスクリプトの知識は非常に長く使えるものなので、一度しっかりとやっておいて損はありません。試験でもなければ、ちゃんと勉強しないですしねぇ……。POSIX原理主義のような考え方もありますし。まぁ、さすがにパッケージ管理コマンドのオプション地獄は辟易としますが（manコマンドもあるのだからそんなに細かく聞かなくても……）。&lt;/p&gt;&#10;&lt;p&gt;というか、自分も勉強しないとですね。少なくともLPICレベル2までは取得しようと思っています。今年度中に、102と201くらい合格できるとよいのですが。まったりやります。&lt;/p&gt;</description></item><item><title>Fusion Driveの感触…オススメできる人、できない人</title><link>https://hack-le.com/46496771-2/</link><pubDate>Fri, 08 Jan 2016 19:26:21 +0900</pubDate><guid>https://hack-le.com/46496771-2/</guid><description>&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/6/d/6d33867e.jpg" &gt;//hack-le.com/wp-content/uploads/imgs/6/d/6d33867e.jpg&lt;/a&gt;&#10;メインデスクトップマシンのMac mini 2012をFusion Driveにしてから一ヶ月以上経ちました。実際の使用感から、どういう人にオススメできるか、考察します。&lt;/p&gt;&#10;&lt;p&gt;2016年10月追記：使い始めて1年ほどたちますが、調子よく使えています。&lt;/p&gt;&#10;&lt;p&gt;2018年3月25日：まだ調子よく使えてます。最近SSD容量は大事かもと思いました「&lt;a class="link" href="https://hack-le.com/fusion-ssd-mba-imac/" &gt;Fusion Driveと純SSDの分かれ目…5年前のMacBook Airが最新のiMacに勝つ時 – 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="fusion-driveにしました"&gt;Fusion Driveにしました&#10;&lt;/h2&gt;&lt;p&gt;今回構築したFusion Driveは、SSD 480GB + HD 1TB の構成です。この構成は贅沢な構成だと思いますが、それでもiMacを購入していたかもしれないことを思えば、25万円近い節約なわけで、1TBのSSDを買ってもよかったんじゃないかと思ってさえいます。まぁしかし、ストレージを換えたところでロジックボードなどが故障すればどうしようもないし、また次のMacで2.5インチSSDが果たして使えるかも未知数ですから（現行ラインナップだともはやMac miniくらいですが、そのMac miniがもうちょっとねぇ）、まぁこんなものでしょう。長く使えるとよいのですが。&lt;/p&gt;&#10;&lt;h2 id="fusion-driveの良い点"&gt;Fusion Driveの良い点&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Fusion Driveの良い点は、なんといってもローカルにデータを気兼ねなく置けるところ&lt;/strong&gt;です。&#10;iTunesのデータなど、どうしても&lt;strong&gt;ローカルに置いたほうが勝手がよいけれど、SSDだとちょっともったいないなぁというデータはけっこうあります&lt;/strong&gt;。安定した運用という面からいくと、なんだかんだでローカルが一番です。しかもパーティションなど余計なことを考える必要もないので、とても楽です。標準のミュージックフォルダやピクチャフォルダ、ドキュメントフォルダにもガンガンデータを突っ込めます。&lt;strong&gt;標準のディレクトリ構成をそのまま使えるのは外付けにはない良さ&lt;/strong&gt;ですね。個人的に、一番の肝はそこだと思います。外付けだと、リンクを張ったりとか、アプリ側で保存先を変えたりといった作業が必要になりますから。&lt;/p&gt;&#10;&lt;p&gt;まぁとはいえ&lt;strong&gt;外付けも手軽で悪くはないのですけれど、どうしても五月蝿いし不格好&lt;/strong&gt;です。電源も余分に使うし。最近はバスパワーで静音・コンパクトなものが出て久しいですが、それだと容量が微妙ですし（3TBくらいならあるようですが）、だいたいそういったものは持ち運んでなんぼのものであり、据え置きにしてしまうと本来の携帯性を発揮させられず、また安定性など考えると果たしてどうだろうかと思ってしまいます。&lt;strong&gt;ケーブルを机の上から1本減らせるだけで嬉しい&lt;/strong&gt;ですしね。&lt;/p&gt;&#10;&lt;h2 id="fusion-driveの使い勝手"&gt;Fusion Driveの使い勝手&#10;&lt;/h2&gt;&lt;p&gt;さて、ではFusion Driveは実際のところどうなのか、1ヶ月以上使用した経験から書きますと、&lt;strong&gt;SSD寄りの体験ができます&lt;/strong&gt;。あくまでSSD寄りであって、SSDと同一なんてことはもちろんないです。Fusion DriveはHDをSSDに変える魔法ではありませんから、&lt;strong&gt;HDのデータを使った作業になれば、当然HD並の速度&lt;/strong&gt;になります。&lt;/p&gt;&#10;&lt;p&gt;これが&lt;strong&gt;もっとも顕著だったのは仮想マシンでの作業時&lt;/strong&gt;で、明らかにHD側のデータだったせいか、「あーそういえばHDって遅かったなぁ」ということを思い出させてくれました。最近はSSD側に移されたのか、だいぶ快適になりました。学習してくれたのですね。&lt;/p&gt;&#10;&lt;p&gt;冒頭に書いたように、私の構成はSSD 480GB + HD 1TBという贅沢なものですから、&lt;strong&gt;多分ほとんどのデータはSSD側にあるはず&lt;/strong&gt;です。ですから、これが一般的な構成、つまりSSD 128GB程度であると、作業によってはかなり不便を感じるところが多くなるのではないかな。少なくとも、仮想マシンなど&lt;strong&gt;大容量かつストレージの速度が大きく響くようなアプリケーションを使う人間は、結局大容量のSSDを用意しないと辛い&lt;/strong&gt;でしょう。&lt;/p&gt;&#10;&lt;p&gt;ただ、前節で述べたとおりFusion Driveは音楽データなども気兼ねなく置けるのがよいところです。気兼ねなくというのはほんとうに気兼ねなくで、標準のフォルダに何も考えずにデータを突っ込める。パーティションとか考えなくてよい。わざわざリンクとか作らなくてよい。これがとても嬉しい。&lt;strong&gt;人間がかけてきた一手間をマシンが肩代わりしてくれるのだから、これは技術の正しい使われ方&lt;/strong&gt;だと思います。&lt;/p&gt;&#10;&lt;p&gt;ただこれ、&lt;strong&gt;デュアルブートなどはどういうことになるんでしょう&lt;/strong&gt;。普通にできるのかな…（&lt;a class="link" href="http://ubuntuforums.org/showthread.php?t=2256018" target="_blank" rel="noopener"&#10; &gt;Dual boot OSX/Ubuntu on iMac fusion drive (step 3 install ubuntu ??)&lt;/a&gt;」）。それと、SSDとHDのどちらかが故障してもダメなわけで、リスクは単純に倍以上だなぁという。実際、HDだけが故障した場合とか、どういう症状になるんでしょうね。&lt;strong&gt;SSDとHDのどちらが故障したかなんて、どうやって判定すればいいのか&lt;/strong&gt;……一個一個試すしかないんだろうなぁ。&lt;strong&gt;トラブル対応は面倒臭そう&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="fusion-driveはどんな人にオススメか"&gt;Fusion Driveはどんな人にオススメか&#10;&lt;/h2&gt;&lt;p&gt;以上、Fusion Driveを使ってきた雑感ですが、結局どんな人にオススメできるかと言うと、&lt;strong&gt;大きなアプリケーションを利用せず、かつ音楽など大量のメディアデータを保有している人にはオススメ&lt;/strong&gt;です。一般的な人ともいえます。NASというものも世の中にはありますが、ネットワーク経由よりもローカルのほうが当然データは扱いやすい。特にiTunesを使うならそのほうがよいです。NASはトラブルの種です。&lt;/p&gt;&#10;&lt;p&gt;一方、&lt;strong&gt;仮想マシンなど大きなアプリケーションを利用する人にとっては、微妙なところ&lt;/strong&gt;です。まずこの手の人にとっては大容量のSSDはマストで、必要なものです。しかし、大容量のSSDを用意すると、Fusion Driveの有り難みが薄れます。それどころか、トラブル時の対応が煩雑になりそうですから、&lt;strong&gt;考え方によってはデメリットのほうが大きいかもしれません&lt;/strong&gt;。しかし、ローカルに標準構成で気兼ねなくデータを置ける恩恵には預かれますから、それを大きいと見るか、それとも運用のシンプルさを選んでSSDオンリー+NAS、外付けなどの構成にするか、それはその人の考え方次第となりましょう。なお私はFusion Drive + NAS です。トラブルどんと来い。嘘です。平和が一番。&lt;/p&gt;</description></item><item><title>WithingsのActivitéのメッセージがいちいち笑える</title><link>https://hack-le.com/46492571-2/</link><pubDate>Thu, 07 Jan 2016 01:34:09 +0900</pubDate><guid>https://hack-le.com/46492571-2/</guid><description>&lt;p&gt;WithingsのActivitéを使っています。&lt;strong&gt;Activitéは一見ただのアナログ盤の時計ですが、実はアクティビティトラッカーの機能を有しており&lt;/strong&gt;、歩数計と睡眠計の機能を備えていて、そのデータをBluetooth経由でスマートフォンに送信し、サーバー上に保存することができるのです。&lt;/p&gt;&#10;&lt;h2 id="アナログ時計っぽいアクティビティトラッカー"&gt;アナログ時計っぽいアクティビティトラッカー&#10;&lt;/h2&gt;&lt;p&gt;保存したデータはスマホアプリまたはWebアプリで解析されたものを見ることができて、自身の活動をわかりやすく可視化することができる優れものです。スマートウォッチに分類されるかされないか、微妙なところです。&lt;/p&gt;&#10;&lt;p&gt;似たようなものはけっこうたくさんあるのですが、Activitéのポイントは&lt;strong&gt;見た目が高級感あるスイス製アナログ時計&lt;/strong&gt;であること、そして機能を絞っているがゆえに&lt;strong&gt;ボタン電池で数ヶ月バッテリーが持つこと&lt;/strong&gt;です。また、外資らしく&lt;strong&gt;専用アプリケーションも熟れていて、オムロンなんかと比べるとわかりやすく使いやすいUI&lt;/strong&gt;を備えています。まぁそれでも、実際使い出すと睡眠計がなんかおかしいとか歩数計を一週間の棒グラフじゃなくて数ヶ月などの長期スパンにわたる折れ線グラフで見させてほしいとか、いろいろと不満点はあるのですが、まぁ&lt;strong&gt;トータルでは満足&lt;/strong&gt;しています。特に私のようないかにもApple Watchやらに手を出していそうなガジェットオタクがアナログ時計を身に着けているのは、人から見ても珍しいのでしょうか、けっこう好感触です。&lt;/p&gt;&#10;&lt;h2 id="アプリのメッセージがいかにも翻訳で笑える"&gt;アプリのメッセージがいかにも翻訳で笑える&#10;&lt;/h2&gt;&lt;p&gt;そんなActivitéを日々活用していると、&lt;strong&gt;海外製らしいおせっかいさ&lt;/strong&gt;で、アプリケーションからアドバイスや励ましの言葉が飛んでくることがよくあります。ただそのメッセージが、なんといいますか、いかにも海外のノリで、しかもそれをまるでGoogle翻訳のごとく直訳でくるものですから、&lt;strong&gt;日本人の感覚からいくと、非常におかしなもの&lt;/strong&gt;になっており、ぷふっと吹き出してしまうことしばしば。せっかくなので、これまでにとりためた印象的なメッセージをここに晒します。&lt;/p&gt;&#10;&lt;h3 id="あなたは確実に正しい方向に進んでいます"&gt;あなたは確実に正しい方向に進んでいます！&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="48" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/f/c/fc5fe539.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;教祖みたいです。&lt;/p&gt;&#10;&lt;h3 id="すばらしいあなたは確実に正しいことをしています"&gt;すばらしい！あなたは確実に正しいことをしています！&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="44" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/0/c/0c71f211.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;このまま壺とか売られそうです。&lt;/p&gt;&#10;&lt;h3 id="偉業達成に向かって進んでいます"&gt;偉業達成に向かって進んでいます！&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/5/e/5e316a61.jpg" &gt;&lt;img alt="58" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/5/e/5e316a61-s.jpg"&gt;&lt;/a&gt;&#10;調子のいいプレゼンみたいです。&lt;/p&gt;&#10;&lt;h3 id="月曜日は悪くないね"&gt;月曜日は悪くないね！&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/f/3/f3e87c08.jpg" &gt;&lt;img alt="12" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/f/3/f3e87c08-s.jpg"&gt;&lt;/a&gt;&#10;謎の上から目線。&lt;/p&gt;&#10;&lt;h3 id="1週1週努力を続けてくださいその努力は報われます"&gt;1週1週努力を続けてください！その努力は報われます！&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/6/8/6869799f.jpg" &gt;&lt;img alt="33" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/6/8/6869799f-s.jpg"&gt;&lt;/a&gt;&#10;偉そうに。&lt;/p&gt;&#10;&lt;h3 id="すべて順調ですか1日あたり3172歩を失いつつあります"&gt;すべて順調ですか？1日あたり3172歩を失いつつあります&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="33" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/0/d/0d56d5ec.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;歩数を失うって斬新な表現。&lt;/p&gt;&#10;&lt;h3 id="あきらめないであなたの活動レベルが低下しているようです"&gt;あきらめないで！あなたの活動レベルが低下しているようです&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/2/3/23da6ae0.jpg" &gt;&lt;img alt="43" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/2/3/23da6ae0-s.jpg"&gt;&lt;/a&gt;&#10;闘病患者の気分です。&lt;/p&gt;&#10;&lt;h2 id="総じて大袈裟"&gt;総じて大袈裟&#10;&lt;/h2&gt;&lt;p&gt;他にも色々変なことを言われている気がしますが、なんとなく保存していたのはこれくらいです。&lt;strong&gt;全体的にビックリし過ぎ&lt;/strong&gt;です。さらに&lt;strong&gt;表現が大袈裟で、かつ妙に上から&lt;/strong&gt;なのが共通の特徴でしょうか。マッチョな外人が両腕を広げて私のことをHey!とファーストネームで呼びかける光景が目に浮かびます。誰だよ。おもいっきり原語を直訳したせいでニュアンスが変になってしまっているのはそうなんでしょうけれど、そもそも&lt;strong&gt;日本人と欧米人で感性が大きく違うのだろう&lt;/strong&gt;と思います。特に「正しい」や「すべて」の使いどころが日本人とはだいぶ異なりますが、これは根本的な価値観、考え方の相違が表れているのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;あなたもWithingsのActivitéとアプリを使い、&lt;strong&gt;すべて順調で正しい生活&lt;/strong&gt;を送ってみませんか。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00V5PSM1S" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>電子書籍を利用する観点からみたデバイスの大きさについて</title><link>https://hack-le.com/46318196-2/</link><pubDate>Tue, 05 Jan 2016 17:46:41 +0900</pubDate><guid>https://hack-le.com/46318196-2/</guid><description>&lt;p&gt;本記事では、「電子書籍を読む」という一点に絞って、スマートフォンやタブレットといったデジタルデバイスの大きさ別使用勝手について書きます。もう少し一般的な記事としては、以前に「&lt;a class="link" href="//hack-le.com/46149996-2/" &gt;4,5,6,7,10インチ スマホorタブレットの各メリット・デメリットと適した生活スタイル : 或る阿呆の記&lt;/a&gt;」という記事を書きました。&lt;/p&gt;&#10;&lt;p&gt;（2018/07/19）11インチ以上でChromebookについて追記&lt;/p&gt;&#10;&lt;h2 id="電子書籍用途としてのタブレット"&gt;電子書籍用途としてのタブレット&#10;&lt;/h2&gt;&lt;p&gt;私のタブレットの主な使用用途に、電子書籍の閲覧があります。電子書籍はまだまだ一般に普及しているとは言い難いですし、現状見ていると果たして普及する日は来るのだろうかと不安にもなりますが、まぁ少しずつは人口も増えていると思いますし、気長に待ちましょう。&lt;/p&gt;&#10;&lt;p&gt;予備知識として、電子書籍には大きく&lt;strong&gt;画像タイプの固定レイアウト型&lt;/strong&gt;と、&lt;strong&gt;画像ではないリフロー型&lt;/strong&gt;に分かれることだけ（「&lt;a class="link" href="http://www.b-chan.jp/entry/book/fix-layout-reflow" target="_blank" rel="noopener"&#10; &gt;電子書籍の固定レイアウト型とリフロー型との違いについて学ぼう - 非天マザー by B-CHAN&lt;/a&gt;」）。前者はつまり画像をまとめたものです。jpgの固まりみたいなものです。一方、後者はWebページのように自由に文字の大きさや行間などを調整できるタイプです。自炊本などは画像ですので当然前者にあたりますし、Kindleなどで購入できる小説は後者のタイプが多いです。レイアウト重視の大判な本などは前者の形態であることも多いですが。デジタルの強みを活かせるのは後者なのですけれど、実際には画像タイプのものも多いのが実情です。&lt;/p&gt;&#10;&lt;h2 id="各大きさの使い勝手"&gt;各大きさの使い勝手&#10;&lt;/h2&gt;&lt;p&gt;各サイズについて、主に&lt;strong&gt;携帯性、操作性（片手で使いやすいかなど）、読みたいジャンルに適した画面の広さかどうか、という観点&lt;/strong&gt;からその使い勝手を書きます。同じ大きさでも、アスペクト比が16:9のワイドなのか4:3のスクエアなのかで随分と勝手が違うのですが、ややこしいので全部ひっくるめて書きます。書籍によって様々ではあるのですけれど、&lt;strong&gt;電子書籍目的であればたいてい4:3のほうが無駄が少なく&lt;/strong&gt;、画面を有効に使えます。したがって、&lt;strong&gt;解像度がもし選べるのであれば、4:3のほうがオススメ&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h3 id="4インチすべてにおいて小さい"&gt;4インチ：すべてにおいて小さい&#10;&lt;/h3&gt;&lt;p&gt;iPhone 5S以前や、小型のスマートフォンが4インチにあたりますが、&lt;strong&gt;電子書籍の利用を考えるとかなり厳しい大きさ&lt;/strong&gt;です。画像タイプの電子書籍は、余白をそぎ落として限界まで拡大した、文章主体の文庫本ならば、まぁなんとか読めないこともない、といったところです。では、文字主体のリフロー型ならばどうか？というと、これはもちろん読める、読めるのですが、どうしても一行、一画面あたりの文字数が少なくなりますから、やたらとページ数が多くなり、なんだかまどろっこしい。総文字数が変わるわけではないのですが、実際のところ読書スピードは遅くなると思います。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;電子書籍を主たる目的に考えるのであれば、オススメできない大きさ&lt;/strong&gt;です。一点だけ、その携帯性は非常に素晴らしい。しかし、電子書籍は比較的じっくり読むことが多いコンテンツですから、ミュージックプレイヤーのようには携帯性の重要度は必ずしも高くありません。&lt;/p&gt;&#10;&lt;h3 id="5インチ文庫なら可片手で楽ちん"&gt;5インチ：文庫なら可、片手で楽ちん&#10;&lt;/h3&gt;&lt;p&gt;5インチになると、文庫本サイズの小説であれば、リフロー型のものはもちろん、レイアウト固定型のものも比較的読みやすくなってきます。まぁ老眼気味の人などには辛いでしょうが。そして、このサイズは「&lt;strong&gt;片手読み&lt;/strong&gt;」と「&lt;strong&gt;ポケットに入ること&lt;/strong&gt;」がポイントです。&lt;/p&gt;&#10;&lt;p&gt;大きさが小さいので軽いうえに、&lt;strong&gt;電子書籍は複雑な操作をしませんから、手が小さい人でも片手読みが楽&lt;/strong&gt;です。片手が空くのは嬉しくて、たとえばお茶を飲みながらの読書が気楽にできます。また、5インチはギリギリポケットに入る大きさでもあるので、ポケットに忍ばせておき、たとえば家事や雑用の隙間時間にささっと読んではささっとやめる、&lt;strong&gt;スピーディーで細切れな読書に最適&lt;/strong&gt;です。読書は落ち着いてゆっくりしたいものですが、現実というのはそういつもいつも都合よくはいきませんから、意味のあることだと思います。&lt;/p&gt;&#10;&lt;h3 id="6インチ最適子供からお年寄りまで"&gt;6インチ：最適？子供からお年寄りまで&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;個人的に、6インチは電子書籍に最適な大きさだと思います&lt;/strong&gt;。特にアスペクト比がiPadのように4:3であれば、これで問題がない。&lt;strong&gt;大きさはだいたい十分で、しかも軽い&lt;/strong&gt;。電子書籍の操作程度ならば片手でも苦なく扱えるでしょう。&lt;strong&gt;落ち着いた読書にはうってつけ&lt;/strong&gt;だと思います。KindleやKoboなど、主要な電子書籍端末が採用しているだけはあります。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、&lt;strong&gt;固定レイアウト、画像タイプの本を読むのには、本によっては辛い&lt;/strong&gt;かもしれません。特に解像度がワイドな端末だと、6インチではまだちょっと厳しいかも。&lt;/p&gt;&#10;&lt;h3 id="7インチ大判以外はいける万能"&gt;7インチ：大判以外はいける万能&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;7インチも電子書籍には適した大きさ&lt;/strong&gt;です。ただ、6インチよりも若干重く、また大きさの分だけ片手操作などはしんどくなります。ですが、6インチでは若干辛いかな？という本も7インチならばだいたい快適に読めます。解像度がワイドでも大丈夫です。大判の本以外は、単ページでよければだいたいいけます。&lt;/p&gt;&#10;&lt;p&gt;使いやすさもそこそこに、&lt;strong&gt;読める本がもっとも幅広い大きさ&lt;/strong&gt;ではないでしょうか。&lt;/p&gt;&#10;&lt;h3 id="10インチ漫画見開き大判ならこれ"&gt;10インチ：漫画見開き、大判ならこれ&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;10インチは重い&lt;/strong&gt;です。&lt;strong&gt;持ち運びに適していません&lt;/strong&gt;。また、&lt;strong&gt;画面が広すぎて、普通の小説を読むのには逆にしんどい&lt;/strong&gt;です。画面が広いほうがしんどいなんてあるの？と思う人は教室の壁一面が1ページの本を想像してみたらよいでしょう。これは極端な例ですが、要は人間の大きさに適したサイズがあり、大きすぎても小さすぎてもダメということです。そしてそれは読みたいものによって微妙に変わります。少なくとも、小説を読むのに10インチは大きい。単行本ってそれくらいの大きさがあるのに、iPadだとしんどい感じがするのは何か不思議な感じがします。区切りの有無が一つのポイントかもしれません。まぁいずれにせよしんどいです。&lt;/p&gt;&#10;&lt;p&gt;しかし&lt;strong&gt;10インチが威力を発揮するジャンルもあります&lt;/strong&gt;。まずなんといっても&lt;strong&gt;漫画&lt;/strong&gt;です。&lt;strong&gt;漫画を見開きで読めます&lt;/strong&gt;。単ページならば6,7インチクラスでも十分ですが、見開きとなるとやはりこれくらいの大きさは欲しい。漫画は見開き文化ですから、是非とも見開きで読みたいものです。&lt;/p&gt;&#10;&lt;p&gt;あとは、&lt;strong&gt;大判の書籍&lt;/strong&gt;です。技術書や写真集など、大きさが必要な書籍は世に多くありますが、そういった書籍を読むのにもこれくらいの大きさは必要です。雑誌を読むのにも、これくらいの大きさがあるとよい…というか、雑誌だとまだ少し小さいかなというくらいです。&lt;/p&gt;&#10;&lt;h3 id="11インチ以上雑誌楽譜大判書籍写真集など"&gt;11インチ以上：雑誌、楽譜、大判書籍、写真集など&#10;&lt;/h3&gt;&lt;p&gt;以前はAndroidやiOSではそもそもデバイス自体がほとんどなくて（参考「&lt;a class="link" href="//hack-le.com/44729540-2/" &gt;12インチ以上の大型のAndroidタブレットが欲しい : 或る阿呆の記&lt;/a&gt;」）、どうしてもWindowsタブレットということになってしまいがちでした。まぁ金さえ払えばiPad Proという不動の王者がいますが。そしてAndroidタブレットは相変わらず不毛地帯です。しかし、Chromebookでもタブレットタイプのものが出て、Androidアプリも入れられるようになったことで、やや裾野が広がりました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;10インチの使い勝手をより極端にした感じ&lt;/strong&gt;でしょうか。まぁ、&lt;strong&gt;ノートPCでフルスクリーンにして閲覧する感じ&lt;/strong&gt;ですね。&lt;strong&gt;重いしとても使いづらい&lt;/strong&gt;のですけれど、&lt;strong&gt;楽譜や写真集など、限定的な用途で威力を発揮&lt;/strong&gt;します。漫画を雑誌並に贅沢な大きさで読みたい、という需要もあるでしょうか。&lt;/p&gt;&#10;&lt;h2 id="総評"&gt;総評&#10;&lt;/h2&gt;&lt;p&gt;以上より、&lt;strong&gt;用途が決まっていてかつ限定的であるならば、それに適した大きさのものが一つあればOK&lt;/strong&gt;です。だいたいは6インチの解像度4:3か7インチになるでしょうが、読むのがリフロータイプの小説オンリーで、かつ移動して読みたいというのであれば5インチも良い選択です。家で漫画しか読まない、と決まっているのであれば、10インチが幸せの近道です（外で読むならば、携帯性と見開きを天秤にかけることになりましょう）。一方で&lt;strong&gt;用途が広いと、どうしても2台持ち以上の選択肢を選ばざるを得ません&lt;/strong&gt;。私の場合は、携帯性を兼ねた5インチのデバイス(Xperia Z3)と、大きな書籍用に10インチのデバイス(iPad Air 2)を主に用いています。他にKindleなども持っていますが、出番は多くありません。&lt;strong&gt;3台以上は実用性というより趣味の領域&lt;/strong&gt;だと思います。&lt;/p&gt;</description></item><item><title>Chromebook 購入二週間の雑感 いつでもどこでも気兼ねなく使えるマシン</title><link>https://hack-le.com/46456525-2/</link><pubDate>Sun, 03 Jan 2016 13:39:02 +0900</pubDate><guid>https://hack-le.com/46456525-2/</guid><description>&lt;p&gt;何故か楽天ブックスでHPのChromebook G3を購入しました。スペックはCeleronのN2840とメモリ4GBの標準的なものです。しかし、カタログではN2840とあるのですが、実際エクステンションのSystemで調べてみるとN2830とあります。どちらが本当なんでしょう。まぁ両者はほとんど誤差なので、どちらでもよいですが……。&lt;/p&gt;&#10;&lt;p&gt;基本的に宅内でWeb閲覧およびブログ記事の更新をしたりするのに使っています。最近デスクトップマシンは空いていないことが多いし、家のどこでも使えるのでけっこう便利です。安価なマシンなので、無造作に使える感じが好ましいですね。まだ二週間ですので、一通りの機能に対するコメント程度のものですが、以下雑感をつらつらと。&lt;/p&gt;&#10;&lt;h2 id="よかったこと"&gt;よかったこと&#10;&lt;/h2&gt;&lt;h3 id="google-drive-100gb-を2年分もらえた"&gt;Google Drive 100GB を2年分もらえた&#10;&lt;/h3&gt;&lt;p&gt;Google DriveはGoogleが提供しているオンラインストレージですが、&lt;strong&gt;Google Driveの容量を100GB分/2年もらえました&lt;/strong&gt;。これはChromebook購入で当たり前の特典になるといいなと思います。継続的にハードウェアを買い換える理由にもなりますし。ただまぁ、実際のところこれを何につかうのかとなると、まだちょっと悩ましいのですが…。そもそも、Google DriveはMacだとよくエラーが出ていたりして、あまりイメージがよくないのです。Googleは勝手に色々なことをする企業でもあるので、データを預けるのに不安があるのもありますし。とはいえ便利なものだとは思いますから、利用の仕方についてはちょっと考えないとですね。&lt;/p&gt;&#10;&lt;p&gt;映画と音楽の特典もありますが、Chromebook上でしか見られなかったりして、あまり使う気にもなりません。まぁAmazon プライムビデオとApple Musicに加盟していますしこちらはあまり。&lt;/p&gt;&#10;&lt;h3 id="chromeの環境がそのまま使える"&gt;Chromeの環境がそのまま使える&#10;&lt;/h3&gt;&lt;p&gt;Chromeの環境がそのまま使えます。ChromeOSとはそういうOSなのですから、当たり前のことではあるのですけれど、わかってはいても、いざ目の前に普段使っているChromeの環境が展開されるとちょっと嬉しい。キーボードが想像よりだいぶうちやすいし、Google日本語入力が使えるし、いつもどおりのブラウザの作業ができます。&lt;strong&gt;当たり前のことが当たり前にできる&lt;/strong&gt;のは嬉しいことです。&lt;/p&gt;&#10;&lt;h3 id="バッテリーは確かにもつ"&gt;バッテリーは確かにもつ&#10;&lt;/h3&gt;&lt;p&gt;ブラウザしか使わないということもあり、バッテリーは非常に持ちます。MacBook Airも使い方を限定すれば相当持つのですが、それ以上に、だいたい7-8時間くらいは持ってくれます。Chromebook G3は公称8時間なので、まぁ&lt;strong&gt;だいたい公称通り&lt;/strong&gt;ということで、嬉しい限りです。あとはこれがどれだけヘタれずにいてくれるかですね。&lt;/p&gt;&#10;&lt;p&gt;ブラウザしかないため、&lt;strong&gt;バッテリーの持続時間が予測しやすい&lt;/strong&gt;のも地味にポイントだと思います。通常のノートPCでは、どうしても作業内容次第で大きく変動してしまいますので…。&lt;/p&gt;&#10;&lt;h2 id="気になったところ"&gt;気になったところ&#10;&lt;/h2&gt;&lt;p&gt;概ねでは満足しているのですが、気になった点をいくつか。&lt;/p&gt;&#10;&lt;h3 id="emacsキーバインドができない"&gt;Emacsキーバインドができない&#10;&lt;/h3&gt;&lt;p&gt;ちょっとばかりマニアックな要望だと思いますし、これができなくてもなんにも困らないという人は多いと思いますが、できないと辛いという人も全世界に多くいるはずです。いる。とどのつまり、キーバインドの変更は限定的にしかできないというのが問題の本質です。Ctrlと検索キーのスワップ、程度のことはできるのですけれど（これだけでもだいぶ有難いのですが）。&lt;/p&gt;&#10;&lt;p&gt;Mac は CtrlキーとCommandキーに役割を分けていますけれど、あれはたいへん素晴らしい設計だと思うので、真似してもらえると嬉しいのですけどね。Windowsなど通常のPCであれば、なんだかんだで融通がきくので、同じようなこともできるのですが。&lt;/p&gt;&#10;&lt;h3 id="タッチパッドのジェスチャーの融通がきかない"&gt;タッチパッドのジェスチャーの融通がきかない&#10;&lt;/h3&gt;&lt;p&gt;ChromebookのタッチパッドジェスチャーはMacに似せていて、悪くありません。少なくとも、&lt;strong&gt;マウスがないと使えたもんじゃないよ、という代物ではありません&lt;/strong&gt;。しかしながら、MacのBetterTouchToolのようなものがないので自分で拡張させることができず、ちょっと不満です。特にタブを閉じる操作はどうにかならないものか。デフォルトはタブに合わせて三本指タップなのですが、あまり便利ではありません。三本指ドラッグ（あまり愛好者の多いジェスチャーではありませんが私は好きです）がないのも不満です。 &lt;strong&gt;ジェスチャーをユーザーが定義できればよいのですが&lt;/strong&gt;。キーバインドの変更もそうですが、このあたりの変更は現状ちょっと難しそうです。&lt;/p&gt;&#10;&lt;h3 id="不具合shift矢印キーで削除される"&gt;不具合…Shift+矢印キーで削除される&#10;&lt;/h3&gt;&lt;p&gt;謎の不具合なのですが、特にこのブログ記事を書いている時に顕著なのですけれど（まぁ大量に文字入力したり文字を選択したりという作業をするのがブログ記事の草稿くらいだからですが）、Shift＋矢印で文字列を選択すると、時折選択した文字列が突然削除されます。Ctrl-zで戻りますが…。必ずではないのですけれど、頻発します。「&lt;a class="link" href="https://productforums.google.com/forum/#!topic/chrome-ja/Re1sUd59PTI" target="_blank" rel="noopener"&#10; &gt;Shift ＋ 矢印、でテキストを選択しようとすると文字が消去されてしまいます。 - Google プロダクト フォーラム&lt;/a&gt;」の記事にある通りです。記事のとおり、beta版にしたらひとまず不具合は収まったように思えます。&lt;/p&gt;&#10;&lt;p&gt;そういえば、以前は日本語入力周りでの不具合報告もなどもききましたし、&lt;strong&gt;まだまだ安定性という面では課題が多いのかもしれません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="ハードウェアについて"&gt;ハードウェアについて&#10;&lt;/h2&gt;&lt;p&gt;ハードウェアはChromebookの特徴というよりデバイスの特徴なのですが、なにしろ&lt;strong&gt;現在日本の市場に流通しているChromebookがどれも似たりよったり&lt;/strong&gt;ですので、書いておいてもよいかなと思います。私が使用したのはChromebook G3ですが、AcerやASUSが現在出しているC720やらCB3やらでも同じことが言えるのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;で、気になった点をいくつかあげますと、まず&lt;strong&gt;ディスプレイの色調が悪い&lt;/strong&gt;ことです。まぁディスプレイというのはコストダウンの肝の一つなのでしょうから、ディスプレイに拘って値段が上がってしまっても本末転倒なのですが、当ブログさえも青みがかっていてちゃんと表示できていないので、もう少し頑張ってほしいなと思います。また、&lt;strong&gt;CPUパワーもまだ十分とは言えない&lt;/strong&gt;と思います。CeleronのしょっぱいCPUであることを考えればかなり頑張っているし、レスポンスも悪いということはないのですが、やはり重いサイトではけっこうカクつきも見られるので、Celeron N2830やらN2840やらで十分ということはないです。スペックについてはまだまだ向上の余地があります。最後に、&lt;strong&gt;物理的な重さ&lt;/strong&gt;でしょうか。Chromebookはその特性上持ち運んで使うことが多いと思いますが、それにしてはやや重い。Chromebook G3の場合は11.6インチモデルで1.28kgですから、ちょっと重量感があります。&lt;/p&gt;&#10;&lt;p&gt;まぁ、いずれもコストと性能のバランスを見極めたうえで作られたのでしょうし、そう考えるとたいへんバランスが取れているとは思うのですが、やはりもう少しスペックアップしてもらいたいのが正直な感想です。&lt;/p&gt;&#10;&lt;h2 id="考えられる使いどころ"&gt;考えられる使いどころ&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;テキスト編集を主にする人には最良&lt;/strong&gt;ではないでしょうか。テキスト編集に必要な要素のほとんどすべてを兼ね備えています。キーバインドの変更さえできれば完璧なのですが。ポメラ的な需要もあると思うので、より小さいサイズのもの（10インチ未満）があると、面白いかもしれませんね。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;プログラミングは不可能ではないけれど、これを使ってしようとは思えません&lt;/strong&gt;。エディタに多く制限がありますし、やはりローカルでいろいろできないと便も悪いです。開発者向きとは言えないOSです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;オフィスの利用も、常用する人にはちょっと辛い&lt;/strong&gt;と思います。オンラインオフィスの反応はあまりよくありません。特にMS Officeは重い。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;純粋にテキスト編集およびWeb閲覧をメインに考えられる人にとって最適&lt;/strong&gt;だと思います。そこから外れれば外れるほど、やっぱり普通のOSがいいなぁと思うことが多いでしょう。&lt;/p&gt;&#10;&lt;h2 id="結局使いやすいのか"&gt;結局使いやすいのか&#10;&lt;/h2&gt;&lt;p&gt;いろいろと書いてきましたが、&lt;strong&gt;使いやすいのかと問われれば、Yes&lt;/strong&gt;です。個別的にとりあげるとそりゃ文句もあります。&lt;strong&gt;できるかできないかと言われればできるけれど、使いやすいかどうかと言われると使いやすくはないものが多い&lt;/strong&gt;のです。しかし、&lt;strong&gt;目的さえハッキリしていれば、やはり使いやすい&lt;/strong&gt;と言えます。&lt;/p&gt;&#10;&lt;p&gt;まさに「&lt;strong&gt;使い倒す&lt;/strong&gt;」という感じが似合います。壊れてもいいからくらいの勢いで。Macを持って行くには抵抗があるなという場所でも、Chromebookならば気兼ねなくもっていける…まぁそんな場所でいったいなんの作業をするのかという気もしますが、&lt;strong&gt;とにかくいつどこにでも躊躇いなく持っていける、気兼ねなく使える&lt;/strong&gt;、というのは大きいと思います。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B015W23ZW0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>お正月にも働くルンバが愛おしい</title><link>https://hack-le.com/46445393-2/</link><pubDate>Sat, 02 Jan 2016 14:50:58 +0900</pubDate><guid>https://hack-le.com/46445393-2/</guid><description>&lt;h2 id="環境さえ整えれば働き者"&gt;環境さえ整えれば働き者&#10;&lt;/h2&gt;&lt;p&gt;ルンバが働き者です。先月、Amazonのセールでルンバを購入しました。それ以来、定期的に部屋で動かしています。&lt;strong&gt;床にものがあるとルンバはちゃんと働いてくれないので、なるべく床にものを置かなくて済むよう整理&lt;/strong&gt;しました。生来不精で片付け嫌いの私ですが、&lt;strong&gt;ルンバのためと思えば片付けられる&lt;/strong&gt;のだから不思議なものです。楽器と椅子、ゴミ箱だけはどうしても対処しきれず、ルンバを動かすときに部屋の外に出しているのですが、まぁ1分もかからないことですから、自分で掃除機をかける手間を考えれば楽なものです。ベッドや机の下まできちんとやってくれるので、&lt;strong&gt;人間が適当にやる以上に綺麗になります&lt;/strong&gt;。おかげで部屋がずいぶん綺麗になりました。&lt;/p&gt;&#10;&lt;p&gt;昨日は元旦でしたが、ルンバはいつもと変わらずに働いてくれます。くるくる動きまわるルンバを見ていると、なにか愛おしく思えてきます。シャープがルンバもどきに人工知能で会話プログラムのようなものを搭載したものを開発していたような覚えがありますが、割と目先は悪くないような気がします。しかしながら、Siriレベルならともかく大手がやることでもないでしょう。そういうのは、零細やスタートアップが、しがらみなくほぼ一人のセンスだけで作ると良いものが出来上がるように思います。まだまだ、限定的にしかできないでしょうし。&lt;/p&gt;&#10;&lt;h2 id="もっともっと楽させてくれるはず"&gt;もっともっと楽させてくれるはず&#10;&lt;/h2&gt;&lt;p&gt;閑話休題。働いてくれているのはルンバばかりではなくて、大晦日の夜からMac mini上で個人的なスクリプトをずっと動かしています。Mac mini も働きものです。NASも動いています。そもそも今の全世界各地で稼働しているコンピュータがある（そしてそれをメンテしている人間も…ね）からこそこうしてインターネットが楽しめるわけで。&lt;strong&gt;コンピュータは働き者&lt;/strong&gt;です。これだけ働き者なのですから、我々人間はもっと暇になってもよさそうなものですが、なかなかそうはならず、それどころかそうなることを恐れている人もいるようです（まだなってもいないのに）。まぁ、お給金を貰わなければ暮らしていけませんから、その気持ちもわかります。&lt;strong&gt;コンピュータにとって難しいことは、我々人間の観点からみるとなかなか極端&lt;/strong&gt;で、代わりの仕事がバリバリの肉体労働となってしまうことも考えられ、皆が皆そういったタイプの労働に向いているわけでもありませんから、そうなると果たしてコンピュータの働きぶりが人の幸せにどれだけ寄与するのか、難しいかもしれません。&lt;/p&gt;&#10;&lt;p&gt;まぁ社会全体への影響はまだまだ先のこととして、こうして&lt;strong&gt;従来は人間が頑張らなくてはいけなかった家のことをマシンが肩代わりしてくれる領域は増えています&lt;/strong&gt;から、有効に使っていきたいものです。それにしても&lt;strong&gt;ルンバは可愛い&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00J5ZBVFY" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;</description></item><item><title>2015年雑感…デジモノばっかり</title><link>https://hack-le.com/46437935-2/</link><pubDate>Thu, 31 Dec 2015 22:56:15 +0900</pubDate><guid>https://hack-le.com/46437935-2/</guid><description>&lt;h2 id="更新すればアクセスは上がる"&gt;更新すればアクセスは上がる&#10;&lt;/h2&gt;&lt;p&gt;もうついに2015年が終わろうとしています。本ブログ的には、今年はこれまでになく頑張った年で、7月くらいから更新頻度を一気に高めました。それまではほとんど死にブログ状態だったので、こういうパターンはけっこう珍しいのではないかなと思います。今ちょっとGoogleアナリティクスを見てみたら、6月と12月を比較すると、アクセスは2.5倍(8400-&amp;gt;22000)、PVは3倍(10,0000-&amp;gt;31,000)になっていて驚きました……更新頻度はバカにできないですね。ただいつ頃からかトラッキングコードの挿入に若干の不備があったようで、一番変化の大きかった7月から8月のデータがまるっと抜けていたりと、昔のデータの信憑性はちょっと怪しいのですが。まぁでもかなり増えたのは間違いありません。&lt;/p&gt;&#10;&lt;p&gt;検索エンジンからの流入がメインのブログなので、元々新規率の非常に高いブログだったのですが、それが89%から30%になりました。これがよいのかどうかはよくわかりません。ただそんなに同じ人がきているのか？というのはちょっと意外でした。一見さんばかりだと思っていたので。まぁ有難いことですが。&lt;/p&gt;&#10;&lt;p&gt;というわけで、2016年もできるだけ更新頻度を下げずに頑張りたいと思います。&lt;/p&gt;&#10;&lt;p&gt;ちなみにここ一週間は全然更新していないのですが、年末でかなりドタバタしていたので仕方ありません。いくつか書き上がりそうな記事もありつつ、どれも完了しないまま今日に至りました。今日は異常に眠かった。&lt;/p&gt;&#10;&lt;h2 id="2015年あれこれ"&gt;2015年あれこれ&#10;&lt;/h2&gt;&lt;p&gt;記事一覧をざっと見ながら、心にひっかかったことをいくつか。&lt;/p&gt;&#10;&lt;h3 id="きっと盛り上がらない電子書籍"&gt;きっと盛り上がらない電子書籍&#10;&lt;/h3&gt;&lt;p&gt;2015年になりましたが、電子書籍は結局今年も盛り上がりませんでした。来年もきっと盛り上がらないのだろうなと思います。どこか大手が読み放題とか定額レンタルとか開始したら大盛り上がりでしょうけれど、動きがあるとすればAmazonですが、ないでしょうねぇ…。後は、もっとありえないでしょうけれど、DRM禁止とかね。素敵な夢です。夢ですが。&lt;/p&gt;&#10;&lt;p&gt;電子書籍は、今変に安定してしまっているのが問題だと思います。&lt;/p&gt;&#10;&lt;h3 id="そろそろスマートなんとかはもういいかと"&gt;そろそろスマートなんとかはもういいかと&#10;&lt;/h3&gt;&lt;p&gt;Apple Watchが販売されて久しいですが、もうほとんど話題に上らなくなりました。まぁでも、スマートウォッチ市場は元々がそんなものですし、これがiPhoneのように爆発的なヒットになると本気で信じていた人はあまりいないのでないかと思います。バッテリーの問題が大きいですよねぇ……。&lt;/p&gt;&#10;&lt;p&gt;私はWithingsの見た目アナログ時計な&lt;strong&gt;Activité&lt;/strong&gt;を購入しました。歩数計、睡眠計などがついた腕時計です。元々アクティビティトラッカーが欲しかったし、腕時計も必要だなと考えるようになっていたので、そんな私にはうってつけのアイテムでした。これはけっこう身の回りの人からの評判も良いです。Apple Watchもそうですが、汎用機として使うにはバッテリーがなぁ……腕にまいたところで、&lt;strong&gt;メールやSNSに気づけなかった言い訳が減るだけ&lt;/strong&gt;ですし……。まだちょっと、汎用機としては早いかなと思います。&lt;/p&gt;&#10;&lt;p&gt;ところで、そろそろなんでもかんでも頭にスマートつけるのはもうよいのではないかとも思う今日この頃です。もうスマートとついているだけで、自分などはかなり眉唾だなと思いながら見るようになりました。&lt;/p&gt;&#10;&lt;h3 id="大手参入でストリーミングが一段メジャーに"&gt;大手参入でストリーミングが一段メジャーに&#10;&lt;/h3&gt;&lt;p&gt;Apple MusicとAmazon プライムビデオ（プライムミュージック）はかなりインパクトがありました。元々SpotifyやらHuluやらありましたけれど、やはり大手がやると各種メディアも取り上げるので、一気にオカンも知っているサービスにのし上がりました。なんだかんだいいながら、テレビで大々的に取り上げられない限り、結局オタクの趣味で一蹴されてしまうのは、いまだに変わらないんですよねぇ…。&lt;/p&gt;&#10;&lt;p&gt;まぁそう言いながらも、私もAppleとAmazonの参入でようやくストリーミングサービスに手を出したのですから、まぁミーハーなものです。どちらもなかなか楽しい。Apple Musicは本当はもっと新しい音楽を追わないとと思って加入したんですけれど、結局昔聴けなかったアルバムばかり聴いていてダメです。来年はもっと広げたい。しかしむしろ古きをより掘り下げるほうが私向きか。意外とけっこうマイナーなところがそろっていて嬉しい。&lt;strong&gt;Amazon プライムビデオは、孤独のグルメのドラマが見れているだけでよかった&lt;/strong&gt;なと。Fire TV Stickと合わせると、家族で楽しめて非常に素晴らしい。こういう連携はやはり大手が強いですね。業界を牽引してきたスタートアップにも負けないでほしいですが。&lt;/p&gt;&#10;&lt;h3 id="急激に見るようになったiot"&gt;急激に見るようになったIoT&#10;&lt;/h3&gt;&lt;p&gt;言葉自体はそこそこ前からあったと思うのですが、IoTは今年になってやたらと見かけるようになった印象です。なんだろう？2016年も引き続き騒がれそうです。何か契機があったような感じもしないのですが、トレンドですね。私は眉唾だと思っているのですが（「&lt;a class="link" href="//hack-le.com/44641377-2/" &gt;IoT の期待感と現実 : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;これを受けてか、Raspberry Pi特集があちこちの雑誌でされて、最初は嬉しかったもののだんだん食傷気味に。その中でもCQ出版のトランジスタ技術とInterfaceはマニアックなところまで踏み込んでいましたね。Raspberry Piはもっと使いこなしたい。&lt;/p&gt;&#10;&lt;h3 id="mac-mini-は音沙汰無し"&gt;Mac mini は音沙汰無し&#10;&lt;/h3&gt;&lt;p&gt;今年はMac miniは特に動きがありませんでした。当ブログのコメントでも指摘があったのですが、まぁもう&lt;strong&gt;Macは全体的に二年周期に入ってしまった&lt;/strong&gt;ということなんでしょう。PCのスペックも停滞して久しいですから、それはよいのですが、それにしても2014年の仕様がいまだに最新とはなぁ。&lt;/p&gt;&#10;&lt;p&gt;結局、手持ちのMac mini 2012にSSD480GBとハードディスク1TBを追加してFusion Driveとして、お茶を濁しました。そうすると、PCへの物欲がすっと消えて、ああやはり拡張できるということは大事だなぁと。それとも、だからこそ拡張性をなくそうとしているのか？寂しい動きです。次のPC購入はいつになることやら……。本当に壊れるまで使えそうですMac mini 2012。&lt;/p&gt;&#10;&lt;h3 id="androidよりchromebookに期待"&gt;AndroidよりChromebookに期待&#10;&lt;/h3&gt;&lt;p&gt;先日Chromebookを購入しました。今のところ宅内でブログ記事を更新したりする程度にしか使っていませんが、なかなか面白い。ChromeのエクステンションにあるWriteboxなどは、テキストエディタとして想像以上に勝手が良くて、Simplenoteに置き換わりそうです。&lt;/p&gt;&#10;&lt;p&gt;正直Android端末についてはもう大方出尽くしたと思っていて、実際2015年特に面白いこともありませんでしたし、2016年もそう変わらないと思うのですが、Chromebookはまだまだこれからかと思います。OSはもう十分良いものですから、これに加えて各種便利なエクステンションや、&lt;strong&gt;Emacsキーバインドの実現（Macを真似してもいいんですよ！）&lt;/strong&gt; 、タッチパッドのジェスチャーをユーザー定義、Androidアプリの変換（現状でも試験的に出来るものはあるのですが）などがあると嬉しいですね。ハードウェアは、とにかく重さが課題でしょうか。軽くて薄くて値段が熟れた一品が国内で出ると、最高だなぁ。ASUSが出した&lt;strong&gt;Flip C100PA&lt;/strong&gt;なんて、かなり面白いと思います。タッチパネルがあって、軽くて、小さくて、コンバーチブルで、バッテリーもそこそこ、ちょっと早すぎた感はありますが、良いんじゃないでしょうか。Androidアプリが使えるようになれば、化けるのでしょうけれど……。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B015W23ZW0" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="来年はもっと深い記事がかけるように"&gt;来年はもっと深い記事がかけるように&#10;&lt;/h2&gt;&lt;p&gt;記事を見なおしてみると、デジモノガジェットのレビューと場当たり的なトラブルシューティングがたいていでした。あとは、まだ日本語の情報が多いとは言えないRaspberry Pi関連で、センサ関連のことなど。まぁ今の自分はこんな程度ということがよく表れているように思います。来年は、もっと技術的にも深い記事が書けるよう精進したい。&lt;/p&gt;&#10;&lt;p&gt;現実世界の話をするなら、仕事ももうそろそろ転機を迎えなくては……来年30歳になると思うと、恐ろしい。友人の第二次結婚式ラッシュも一段落し、自分もそろそろ考えにゃならんなとかいつまで自由にいられるんだろうとか憂鬱なことを考えつつ、さよならバイバイ20代。&lt;/p&gt;</description></item><item><title>Chromebook 購入しました</title><link>https://hack-le.com/46352847-2/</link><pubDate>Tue, 22 Dec 2015 16:55:29 +0900</pubDate><guid>https://hack-le.com/46352847-2/</guid><description>&lt;p&gt;以前から欲しい欲しいと言い続けていたChromebookを、先日ついに購入してしまいました。&lt;strong&gt;HPのChromebook G3&lt;/strong&gt;とかいうもので、スペック自体は特筆すべきところはなく、CPUはCeleronのN2840（デュアルコアで2.16GHz）、ストレージ16GB、メモリ4GB、バッテリーは標準使用で8時間、11インチで1366x768、重さ1.28kgといったところです。&lt;/p&gt;&#10;&lt;h2 id="ファーストインプレッション"&gt;ファースト・インプレッション&#10;&lt;/h2&gt;&lt;p&gt;今回購入に踏み切ったのは、価格が税込み19,800円であったことが理由です。どうにもChromebookはなかなか安くならず、メモリ4GBクラスだとどうしても2万円台後半になってしまうのですが、それが2万円切りということで、これはたいへんお得だと判断しました。もし「とても使い物にならない」と判断しても、ほぼ元値で売れるのではないかと思います。まだ使い出して間もないですから、大して何か書けることはないのですが、第一印象をつらつらと書きます。&lt;/p&gt;&#10;&lt;h3 id="いきなりフリーズのお出迎え"&gt;いきなりフリーズのお出迎え&#10;&lt;/h3&gt;&lt;p&gt;まず残念なことに、&lt;strong&gt;最初の初期設定画面でフリーズして出鼻をくじかれました&lt;/strong&gt;。調べてみると「&lt;a class="link" href="http://offthehook888.net/gadget-kaden/chromebook/set-up-freeze" target="_blank" rel="noopener"&#10; &gt;いきなりトラぶった！ASUS Chromebook C300MA-BLACKのセットアップでフリーズ – Off the hook!&lt;/a&gt;」という記事がありましたが、私の状況もまさに一緒です。まぁ、電源を落として再起動後は問題なく設定が完了したので、何か実害があったわけではありませんが、先行きが少しばかり不安になりました。あまり安定はしていない？&lt;/p&gt;&#10;&lt;h3 id="文字入力が快適"&gt;文字入力が快適&#10;&lt;/h3&gt;&lt;p&gt;しかし、その後の使用感については上々です。特に&lt;strong&gt;文字の入力の快適さ&lt;/strong&gt;については、非常に驚いています。MacでもGoogle日本語入力を利用していますが、レスポンスの良さはこちらのほうが上ではないだろうか。とてもスムーズです。&lt;strong&gt;キーボードも打鍵していて心地よい&lt;/strong&gt;。もちろんノートパソコンのキーボードですから、深めのキーストロークが好きな人には慣れないでしょうが（しかしキーストロークの深いノートパソコンなんてあるのでしょうか？）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;テキスト入力を主体に考えている人にとっては、非常に良い&lt;/strong&gt;ものと思います。controlキーの位置なども設定から変更可能なので、&lt;strong&gt;最低限のキーバインド変更には対応&lt;/strong&gt;しています。しかし、&lt;strong&gt;いわゆるEmacsキーバインドを使用したいという向きには、残念ながらまだサポートされていない&lt;/strong&gt;ようです。この点について、MacがデフォルトでEmacsキーバインドに対応し、かつControlキーとCommandキーで通常のショートカットとのキーコンフリクトの問題をクリアしていることは、Macの大きな魅力だと思います。まぁ、Windowsでも色々いじれば同じようなことはできますが。Chromebookでも、それができたら嬉しいのですけどね。パッと調べた限りでは、まだちょっと難しそうです。&lt;/p&gt;&#10;&lt;h3 id="全体的なレスポンスはそれなり"&gt;全体的なレスポンスはそれなり&#10;&lt;/h3&gt;&lt;p&gt;Chromebookは爆速である、というような評価も見受けられますが、&lt;strong&gt;速度感はまぁそれなり&lt;/strong&gt;です。遅くはありませんが、特別早くもありません。まぁ、これは私が普段使用しているノートがMacBook Air 2013だからそう思うのでしょう。&lt;strong&gt;スペックを考慮すれば、レスポンスはかなり良いのではないか&lt;/strong&gt;と思います。&lt;strong&gt;同価格帯の格安なWindowsマシンなどは及ぶべくもないのでしょう&lt;/strong&gt;…母の持っているCeleronのWindowsマシンなどは、途中寝てしまいそうになるくらい遅いですし、それどころか、&lt;strong&gt;私の持っているCore i5搭載初代Surface Proよりキビキビと動いている印象&lt;/strong&gt;です。まぁさすがにこれはSurface Proが遅すぎるような気がしなくもありません。持てなくなるくらい熱くなりますし、CPU本来の性能が発揮できていないのではないか…と、Chromebookには関係なのでこれくらいにしておきますが…。&lt;/p&gt;&#10;&lt;p&gt;そういえば、&lt;strong&gt;メモリ4GB中90%近く使用していました&lt;/strong&gt;。メモリはあるだけ使うという思想なのでしょう。しかし、実際にどれだけ速度に貢献しているのは未知数ですし、2GBモデルでも恐らく十分快適であると予想します。別に4GBだから爆速ってこともないですし、2GBモデル使っている人からも悪い話は聞かないですしねぇ…。しかしながら、&lt;strong&gt;メモリが少ないと精神に異常をきたす病もある&lt;/strong&gt;ので（きっと私もあなたも罹患している）、&lt;strong&gt;5,000円くらいの差額までなら4GBでいいんじゃないかな&lt;/strong&gt;、と個人的に思います。&lt;/p&gt;&#10;&lt;h3 id="タッチパッドはosxとは違う使いやすさ"&gt;タッチパッドはOSXとは違う使いやすさ&#10;&lt;/h3&gt;&lt;p&gt;タッチパッドが、&lt;strong&gt;安っぽいながらも使いやすい&lt;/strong&gt;。ChromeOSのタッチパッドは、OSXのトラックパッドをたいへん研究しているのだと思います。ジェスチャーはだいたい一緒なので、Macを使用している人はすぐに慣れるでしょう。加えてChromebookならではのジェスチャーもあり、特に三本指スワイプでタブの移動などは、Macにも取り入れて欲しいと思いました。&lt;/p&gt;&#10;&lt;p&gt;これについても、MacのBetterTouchToolのように自由に変更ができるものがあると、良いのですが。&lt;/p&gt;&#10;&lt;h3 id="ちょっと重い"&gt;ちょっと重い&#10;&lt;/h3&gt;&lt;p&gt;ソフトウェアについては、まぁChromeがOS化しただけあって、全体的に予想どおりの快適さでよいと思うのですが、ただハードを見た時、&lt;strong&gt;サイズの割にちょっと重い&lt;/strong&gt;かなと思います。11インチで1.28kgとは。これはChromebookの一般的な欠点ではありませんが、今回私が購入したマシンは、現在日本で普通に手に入るマシンの中では非常に標準的なものです。というか、Chromebookがあまり盛り上がっていない日本では、選択肢がほとんどないのが実情で、他のマシンを見てもだいたい同じようなスペックですから、まぁ指摘してもよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;Chromebookはやはり持ち歩いて使いたいという人が多いと思うので、&lt;strong&gt;重さについてはこだわってほしい&lt;/strong&gt;ところです。これは、今後発売されるデバイスに期待でしょうか。&lt;/p&gt;&#10;&lt;h3 id="端末が開けてびっくり"&gt;端末が開けてびっくり&#10;&lt;/h3&gt;&lt;p&gt;まだ実際に何をしたというわけではないのですけれど、Ctrl + Alt + t でターミナルが開けてびっくりです（参考：「&lt;a class="link" href="http://relog.xii.jp/mt5r/2011/08/chromebook-1.html" target="_blank" rel="noopener"&#10; &gt;Chromebookを勉強会で使ってみた（ら、便利機能を教えてもらえた） - 理ろぐ&lt;/a&gt;」）。もしかしてこれで色々遊べたりするんでしょうか？なにしろ元はLinuxですし。期待できそうです。&lt;/p&gt;&#10;&lt;h2 id="chromebookがもっと盛り上がるといい"&gt;Chromebookがもっと盛り上がるといい&#10;&lt;/h2&gt;&lt;p&gt;第一印象はだいたい以上のようなところで、悪くありません。私が購入したのはHPの恐らくは元々法人向けモデルで、一般流通しているものではありませんが、スペック的に見ても、AcerやASUSが出しているものとほぼ同じような使用感ではないかと思います。前述したとおり、&lt;strong&gt;現状国内では選択肢がなさすぎ&lt;/strong&gt;ので、全部同じようなものです。もっと盛り上がってほしいですね。&lt;/p&gt;&#10;&lt;p&gt;まだ使い始めですから、どういった用途でどういうアプリが使えるかや、バッテリーの実際（かなり持ちそうではあります）、安定性などはこれから探っていき、折を見てレビューするつもりです。今のところ、&lt;strong&gt;自分にとって一番辛いのはEmacsキーバインドが使えないこと&lt;/strong&gt;でした。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00SLYUMUU" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>TimeMachineは便利な鬼門</title><link>https://hack-le.com/46303879-2/</link><pubDate>Fri, 18 Dec 2015 03:53:25 +0900</pubDate><guid>https://hack-le.com/46303879-2/</guid><description>&lt;p&gt;ここしばらく、&lt;strong&gt;TimeMachineにずっと悩まされています&lt;/strong&gt;。バックアップの作成が失敗する、やけに時間がかかる、mdworkerが暴走する、プチフリーズが起きる、といった症状が発生します。TimeMachineを削除して、すべて止めてしまうと、こういった症状のすべてがなくなりますので、TimeMachineが起因となっていることは間違いありません。&lt;/p&gt;&#10;&lt;h2 id="バックアップの失敗プロセスの暴走"&gt;バックアップの失敗、プロセスの暴走&#10;&lt;/h2&gt;&lt;p&gt;mdworker自体はとどのつまりSpotlightなのですが、このSpotlightとTimeMachineの組み合わせは、どうも地雷のようで、昔から現在に至るまで、色々とバグ報告がなされていますね。&lt;/p&gt;&#10;&lt;p&gt;TimeMachineは、私がOSXで気に入っている機能の一つで、とても便利なものだと思います。データのバックアップだけならばたいしたことではないのですが、&lt;strong&gt;システム面も含めたバックアップはやはりOS標準の機能としてできたほうが有難い&lt;/strong&gt;ものです。しかしそれは正常に動いていればの話で、バックアップに無限の失敗を繰り返し、果ては日常の操作にも悪影響を及ぼすとなれば、さすがに話は変わります。&lt;/p&gt;&#10;&lt;h2 id="シンプルに運用すれば問題がないが"&gt;シンプルに運用すれば問題がない、が&#10;&lt;/h2&gt;&lt;p&gt;私もMacを使い始めてもう数年経ちますから、どんな時にエラーが起きるのかもなんとなくわかります。&lt;strong&gt;TimeMachineについては、USBで外付けハードディスクにバックアップを取るだけならば、あまりエラーは起きません&lt;/strong&gt;。しかし、どうもネットワーク経由のバックアップにしたり、複数端末のバックアップをとったり、&lt;strong&gt;何かしら複雑さが増すと、途端にエラーが増える&lt;/strong&gt;印象です。&lt;/p&gt;&#10;&lt;p&gt;大昔に「&lt;a class="link" href="//hack-le.com/26479988-2/" &gt;Mac miniをTime Machineサーバーにした : 或る阿呆の記&lt;/a&gt;」なんていう記事を書きました。Mac miniをTimeMachineサーバーにして、MBAのバックアップをしていたことがあったのです。その後記事にはしていませんでしたが、運用してからMBAのバックアップエラーが頻繁に発生し、結局TimeMachineサーバーとしては使わなくなったという経緯があります。原因はよくわかりません。調べると、設定ファイルを消すとか、Macでお約束の電源リセットを行うとか、バックアップを一から作り直すとか、対症療法的なことが色々と出てくるのですが、いずれも功を奏しませんでした。&lt;/p&gt;&#10;&lt;p&gt;結局、&lt;strong&gt;外付けハードディスクにUSB経由でバックアップするのが一番確実、という結論&lt;/strong&gt;です。かつ、バックアップ対象に仮想マシンなどを含めない。私の場合、仮想マシンを含めると、どうもこれまたエラーが発生しがちなのです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;何か一つが原因というより、様々な要素が複数絡み合って化学反応を起こしているような感じ&lt;/strong&gt;がします。ですから、今の私の環境である、複数端末で、仮想マシンを使用していて、ネットワーク経由でNASにバックアップする、というのは非常にエラーが発生しやすいのだと思います。&lt;/p&gt;&#10;&lt;p&gt;それにしても、mdworkerの暴走はいったいどういうわけなのだろうと思いますが…少なくとも、TimeMachineのディレクトリはSpotlightの対象外にしているのに。いったん暴走を始めると、TimeMachineが落ち着くか止まるまで、この暴走は続くようでした。前述しましたが、TimeMachineとSpotlightの組み合わせは、色々とやらかしてくれるようです。&lt;/p&gt;&#10;&lt;h2 id="無理をさせずに少しずつ"&gt;無理をさせずに少しずつ&#10;&lt;/h2&gt;&lt;p&gt;まぁ色々と苦労はありますが、バックアップをとらないわけにはいきませんし、Macでシステム面も含めたバックアップを取るとなればやはりTimeMachineが常道ですから、できれば使いたい。実はParallels Desktopを購入したときに、バンドルで&lt;strong&gt;Acronis True Image for Mac&lt;/strong&gt;がついてきたので、そちらを使うという手がないでもないのですが…しかしレビューを見るとNASの利用で引っかかっている人がいて、それだとTimeMachineと問題が変わらない（参考：「&lt;a class="link" href="http://zigsow.jp/review/337/276777/" target="_blank" rel="noopener"&#10; &gt;Mac標準の「Time Machine」と比較して - Acronis True Image for Mac ～ Mac環境をそのままフルバックアップ！ ～のレビュー | ジグソー&lt;/a&gt;」）。データに関わるところなので、テストもしづらいし、できればあまり頑張りたくない。&lt;/p&gt;&#10;&lt;p&gt;従来通り外付けハードディスクにバックアップすればそれで済むといえばそうなのですが、&lt;strong&gt;せっかくNASを導入したので、なんとかこれで運用したい&lt;/strong&gt;ところです。そんなわけで、できるだけシンプルになるように、バックアップを取るのをひとまずはMac miniのみにして、また仮想マシンはすべてTimeMachineの対象外にし、さらに初回バックアップの終了までは極力触らないようにする、というようにして、まずは数日確実な運用実績を作ろうとしています。そして安定稼働を確認できたら、改めてMBAのバックアップも取り、複数端末でのバックアップが安定してできるかどうか様子を見たいと思います。&lt;/p&gt;&#10;&lt;p&gt;本当に便利な機能なのですTimeMachineは、うまく動いている限り。&lt;/p&gt;</description></item><item><title>不調だったMagicTrackpadがいつのまにか快調</title><link>https://hack-le.com/46277434-2/</link><pubDate>Wed, 16 Dec 2015 01:46:32 +0900</pubDate><guid>https://hack-le.com/46277434-2/</guid><description>&lt;p&gt;もう数ヶ月前になりますけれど（関係ありませんがこの「数」のニュアンスは人によってどうもまちまちのようですね）、MagicTrackpadが不調でした。ポインタが飛び飛びになることが多々あり、それがあまりにも多く作業に支障をきたしていたので、新たにロジクールのT651というサードパーティのトラックパッドを購入しました。&lt;/p&gt;&#10;&lt;h2 id="代替品まで買ったのに"&gt;代替品まで買ったのに&#10;&lt;/h2&gt;&lt;p&gt;この&lt;strong&gt;T651はそれなりに便利で、操作性は純正と若干異なるものの慣れの範疇といえ（ちょっと重いというか、引っ掛かりがある感じだったのはマイナスでしょうか）、マルチタッチを利用する基本的なアクションはだいたい実現できました&lt;/strong&gt;。しかし、内部的にはマウス扱いとされているためか、&lt;strong&gt;BetterTouchToolを使えないという致命的な欠点&lt;/strong&gt;も持ちあわせてしました。逆にいうと、BetterTouchToolさえ使わなければ、まぁまぁ良い物だったといえます。&lt;/p&gt;&#10;&lt;p&gt;まぁしかし、&lt;strong&gt;使い勝手自体は純正のほうがやはり上&lt;/strong&gt;でして、T651を中心に使いながらも、純正もよく使っていました。そして、挙動がおかしくなったらT651に持ち替える、という感じです。常におかしいわけではありませんでしたので。&lt;/p&gt;&#10;&lt;p&gt;しかし、いつ頃からか…T651を購入して一ヶ月くらいたった頃からでしょうか、&lt;strong&gt;MagicTrackpadが不調になる頻度がだんだんと減ってきて、ついには全然不調にならず、快調といって差し支えないような状態になりました&lt;/strong&gt;。わけがわかりません。ハードウェア的な故障だと思っていたのですが、ひょっとするとなにかソフトウェアに問題があったのでしょうか？しかし、別にOSのアップデートを契機によくなったということもなく、なんといいますか、&lt;strong&gt;印象としては自然治癒&lt;/strong&gt;です。そんな阿呆なと思うのですが、現にここしばらく何の問題もなく使えてしまっています。&lt;/p&gt;&#10;&lt;p&gt;というわけで、せっかくの&lt;strong&gt;T651はお蔵入り&lt;/strong&gt;です。別に悪い製品ではありませんでしたが、結果的には無駄な、というかなんだかよくわからない出費となってしまいました。&lt;/p&gt;&#10;&lt;h2 id="次壊れたらmagictrackpad-2を買う"&gt;次壊れたら、MagicTrackpad 2を買う&#10;&lt;/h2&gt;&lt;p&gt;微妙な結末となった不調騒ぎではありましたが、まぁ一回味噌がついたとも言えます。今後もずっと安定して動く保証はありません。またいつおかしくなってもおかしくない。その時には、今度はMagicTrackpad 2を購入しようと思います。感圧タッチの利便性を私も享受したいものです。&lt;/p&gt;&#10;&lt;p&gt;…本当はさくっと買い換えようかとも思っていたのですけれど、&lt;strong&gt;なんぼなんでも高すぎます、MagicTrackpad 2&lt;/strong&gt;。本国の値段が$69 -&amp;gt; $129 と、ほぼ倍近い大幅な値上げとなり、さらに今は円安です。ということで、定価が税込み16,000円。さすがにポンと買えません。他になければ致し方ないと思いますが。今の為替レートが続く限りは、通販サイトで安くなっても14,000円くらいが関の山だろうなぁと思うと、キツイですね。感圧タッチ対応ソフトが増えるのにもまだまだ時間がかかるでしょうから、今は待ちです。&lt;/p&gt;</description></item><item><title>ReadyNASでTimeMachineのデータをsshでログインして直接削除</title><link>https://hack-le.com/46274190-2/</link><pubDate>Mon, 14 Dec 2015 01:32:48 +0900</pubDate><guid>https://hack-le.com/46274190-2/</guid><description>&lt;p&gt;先日、急にTimeMachineが失敗するようになりました。TimeMachineの保存先にはReadyNAS 104を使用しています。&lt;strong&gt;どうもTimeMachineは、ネットワークを経由すると不安定な印象&lt;/strong&gt;です。昔Mac miniをTimeMachineサーバーにして、MacBook Airのバックアップする母艦にしていましたが、この時もエラーが頻発した記憶があります。&lt;/p&gt;&#10;&lt;p&gt;原因がすぐ分かればいいな、と思って &lt;strong&gt;/var/log/system.logを見てみましたが、まぁよくわかりません&lt;/strong&gt;。こういう時はサクッと削除して、バックアップを再構築してしまうのが経験的に結局早いです。どうせそんな昔のデータを復元することなんてありませんし、さっさと作りなおしてしまいます。&lt;/p&gt;&#10;&lt;h2 id="readynas-104からtimemachineのデータを削除"&gt;ReadyNAS 104からTimeMachineのデータを削除&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="http://www.readynas.com/ja/?p=1097" target="_blank" rel="noopener"&#10; &gt;ReadyNAS と Mac Time Machine を使う : NETGEAR Japan ReadyNAS Community&lt;/a&gt;」によると、手順としてはまずMac側からTimeMachineに使うディスクを削除するようです。「システム環境設定」→「TimeMachine」→「ディスクを選択」→「ディスクを削除」でできます。これは通常通り。&lt;/p&gt;&#10;&lt;p&gt;問題は次の手順でして、記事によると、FinderよりafpでReadyNASに接続し、当該データを削除せよ、とあります。確かにちゃんとアクセスできて、削除操作もできる、できるのですが…これがなかなか終わりません。そのうち終わるかなと思って半日ほど放っておいたのですが、終わりません。&lt;strong&gt;きっと永遠に終わりません&lt;/strong&gt;。そんな気がします。&lt;/p&gt;&#10;&lt;p&gt;埒が明かないので、削除を中断し、別の手段を取ることにします。&lt;strong&gt;sshでReadyNASにrootでログインし、直接削除する&lt;/strong&gt;ことにしました。問題はTimeMachineのデータがどこにあるのかですが、findで探してみると、 /data/.timemachine/ReadyNAS 下にありました。隠しディレクトリでしたか…。以下のコマンドで削除します。&lt;/p&gt;&#10;&lt;pre&gt;`$ ssh root@192.168.x.xxx パスワード入力、ReadyNASにログイン&#13; # cd /data/.timemachine/ReadyNAS&#13; # ls&#13; -&gt; 削除したいディレクトリ名を調べます&#13; # rm -rfv Mac\ mini.sparsebundle/&#13; -&gt; 先のlsで表示されたディレクトリを消去します&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;実行すると、数分で削除できました。最初からこうしておけばよかった。&lt;/p&gt;&#10;&lt;p&gt;ReadyNASは今のところ割と気に入ってはいるのですけれど、&lt;strong&gt;マシンスペックが低いためかちょっと無理させるとすぐに止まる&lt;/strong&gt;ので神経を使います。しかも何のフォローもなく盛大に止まってくれて、ログインもできないので、何度かコンセントをぶちっと…怖い。今回の削除も大丈夫かなと心配していたくらいです。&lt;strong&gt;外付けハードディスクにバックアップしようとするだけで固まってしまう&lt;/strong&gt;ので、ReadyNASのバックアップは別途Raspberry Pi経由で行うようになりました。ReadyNASは初心者向けとされていますけれど、本当にLinuxって何？みたいな初心者が扱うとかなり苦労するのではないかなと思います。&lt;/p&gt;</description></item><item><title>相変わらず爆熱のMac mini 2012</title><link>https://hack-le.com/46271690-2/</link><pubDate>Sun, 13 Dec 2015 00:47:09 +0900</pubDate><guid>https://hack-le.com/46271690-2/</guid><description>&lt;p&gt;Macで使えるフリーのメンテナンスソフトとして有名な&lt;strong&gt;Magicanを、久しぶりにインストール&lt;/strong&gt;しました。MagicanはCPUとGPUの温度を表示してくれます。Mac miniは今日も変わらずに爆熱でした。&lt;/p&gt;&#10;&lt;h2 id="久々にcpu温度を確認"&gt;久々にCPU温度を確認&#10;&lt;/h2&gt;&lt;p&gt;便利なソフトウェアであるMagicanを、以前どうしてアンインストールしたのかよく覚えていないのですが、ある日突然それまで愛用していたものを綺麗サッパリと捨てたい衝動に駆られることは私にはよくありますし、またその衝動に身を任せることもしばしばあるので、まぁ特別に何かあったわけでもなかろうと思います。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Magicanの良い所は、何もいじらずとも必要な情報をわかりやすく提示してくれるところ&lt;/strong&gt;です。その提示される情報の中にCPU温度とGPU温度があります。ものぐさな私はあえてCPU温度を調べようという気にはなりませんが、まぁCPUやメモリの負荷を調べるついでに見られるのであれば、まぁ見ておこうかという気になります。&lt;/p&gt;&#10;&lt;p&gt;それで見てみると、やはり熱い。わかってはいたのですが。&lt;strong&gt;音楽を流しながらブログ記事を書くくらいであれば、だいたい50℃強&lt;/strong&gt;といったところですが（これもやや高めの気もしますが）、&lt;strong&gt;ちょっと負荷のかかるスクリプトを動かしたり、仮想環境を立ち上げると一気に温度は上昇し、80℃〜90℃を推移&lt;/strong&gt;します。&lt;/p&gt;&#10;&lt;p&gt;90℃近くになるとさすがの私も大丈夫だろうかと心配になります。しかし、今までも表示していなかっただけでそれくらいには熱くなっていわけです。使い出して特に不具合無く3年経とうとしていますから、そう考えると存外に丈夫なのかもしれません。まぁ一日中発熱しているわけでもないのですが、けっこうヘビーに使っているほうだと思いますし。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、USBファンをMac miniに敷いて動かすと良いという記事を以前どこかで見て、2000円くらいのものを購入して筐体の下に敷いていました。しかし、これを動かしてもCPUの温度上昇は抑えられませんでした。少なくとも&lt;strong&gt;この外部ファンは煩いだけでCPU温度の冷却にはあまり寄与していない&lt;/strong&gt;ようです。まぁ、考えてみればMac miniの構造上外からいくら風を吹かしたところであまりご利益はないように思えます。ただまぁ、筐体下から排風するようなので、浮かせたことによる意味は多少なりともあった…らいいなぁと思いますが、それもあまりないかな。裏蓋はたしかに熱くならないのですが。肝心のCPU温度に影響がない。見た目も不格好なので、取っ払ってしまいました。&lt;/p&gt;&#10;&lt;h2 id="熱問題はあるけれど"&gt;熱問題はあるけれど&#10;&lt;/h2&gt;&lt;p&gt;Mac mini 2014については、クアッドコアモデルがないことと、（予想していたとはいえ）メモリのオンボード化に幾分失望させられましたが、この熱問題については改善されたという報告もちらほら見ます。&lt;strong&gt;確かにネットの閲覧やオフィスくらいであれば、省エネ化の恩恵を大いに受けられる&lt;/strong&gt;でしょうけれど、構造自体がそんなに変わらない以上、&lt;strong&gt;高負荷をかければやはり発熱に排熱が追いつかないのは変わらないのではないか&lt;/strong&gt;と思われます。&lt;/p&gt;&#10;&lt;p&gt;今後もMac miniを使う上で熱は問題であり続けるでしょう。しかし、こうして3年は便利に使えていることも事実。これが5年以上となると果たして持つかなとは思いますが、元よりヘビーに使う人間であればそれだけ長期間使い続けることもないでしょうし、ライトに使う人間であれば熱問題はある程度解決していそうな感じですので、まぁ、これでいいのかなとも思います。&lt;/p&gt;&#10;&lt;p&gt;今年はさすがにもう望みはないでしょうけれど、2016年になったら、新型、出るでしょうか。Macはもうすっかり二年周期に入ってしまいましたね。陳腐化しないのはよいことですけれど、これで拡張性が保たれていれば何も言うことはないのですが。せめてストレージの拡張性は残してほしいですね。そしてCPUがクアッドコアでさえあってくれれば、今のMac miniが壊れても安心してリプレースできるのですが、まぁ叶わぬ夢のような気がしますし、次のMacはiMacになってしまうかな…まったく、Appleの狙い通りといったところでしょうか。Mac mini 2012、できるだけ長くもって欲しいなぁ。&lt;/p&gt;</description></item><item><title>iPad Pro には頑張って大型タブレット市場を盛り上げてほしい</title><link>https://hack-le.com/46249618-2/</link><pubDate>Thu, 10 Dec 2015 14:35:48 +0900</pubDate><guid>https://hack-le.com/46249618-2/</guid><description>&lt;p&gt;私は背の小さな人間ですので、座右の銘はスモール・イズ・ビューティフルなのですが、まぁ嘘ですが、UNIXでは是とされる金言もことハードウェアにおいては必ずしも当てはまりません。スマートフォンは大型化する一方で、タブレットはどちらかというと小型化というか、7-8インチくらいが主戦場になっているようですけれど、私は&lt;strong&gt;タブレットは10インチ以上が良い&lt;/strong&gt;と思っています。&lt;/p&gt;&#10;&lt;h2 id="大きいことが良いこともある"&gt;大きいことが良いこともある&#10;&lt;/h2&gt;&lt;p&gt;出先で持ち歩いて使うとか、電車の中でそれなりに快適に使いたいという用途においては、7インチくらいがちょうどよいのでしょう。しかし私にとってタブレットはゴロゴロと転がって使うものであり、リビングや自室でくつろいで使うものであり、机の上に置いてメインコンピュータであるデスクトップマシンの補助的に使うものです。&lt;/p&gt;&#10;&lt;p&gt;そのような使い方において、iPadの9.7インチという大きさはたいへん素晴らしく、初代は解像度の問題でたとえばコミックの見開き表示などに難がありましたが、Retina化を果たした今はほとんどのコンテンツを快適に閲覧することができるようになりました。&lt;/p&gt;&#10;&lt;p&gt;ですが、&lt;strong&gt;雑誌や新聞、大判の技術書、楽譜など、ものによっては閲覧するのにまだ小さい&lt;/strong&gt;ということもあります。私はあまり見ませんが、動画を見るのにも10インチはまだ少し小さいのではないかと感じる人もいるようです。&lt;strong&gt;より大型のタブレットが欲しいと思う需要はあります&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="大型需要の喚起をipad-proに期待"&gt;大型需要の喚起をiPad Proに期待&#10;&lt;/h2&gt;&lt;p&gt;しかしながら、大型タブレットの市場がいっこうに盛り上がりません。&lt;strong&gt;Androidは相変わらず去年Lenovoが出したYoga Tablet 2 Pro くらいしかまともな選択肢がない状況&lt;/strong&gt;です。やはり、需要が見込めないとメーカーは考えているのでしょう。そんな状況ですから、Apple のiPad Pro投入はたいへん心強いというか、頼もしいというか、&lt;strong&gt;是非成功して市場を開拓してほしい&lt;/strong&gt;ところです。&lt;/p&gt;&#10;&lt;p&gt;もっとも、AppleはiPad Proを、非常に創造的な用途に用いられることを想定しているようにも思えます。Proの名を冠し、わざわざ独自のペンを開発し、オーバースペックにも思えるスペックを搭載していることはその現れでしょう。値段設定も、それを反映したものといえるでしょうか。&lt;/p&gt;&#10;&lt;p&gt;実際、絵描きなどの目的で購入する人も比較的多いとは思います。しかし前述したような、&lt;strong&gt;単に大型のビューアーとしての需要&lt;/strong&gt;もあり、そう考えるとiPad Proはスペックも、何より値段もちょっと高すぎる。私としては、もう少し熟れたものがAndroidから出ればいいなと考えていて、そのためにもiPad Proにはまず大型タブレット市場をうまい具合に切り開いてほしいと願っています。&lt;/p&gt;&#10;&lt;h2 id="未来は期待できるか"&gt;未来は期待できるか&#10;&lt;/h2&gt;&lt;p&gt;とはいえ、タブレット市場自体が生まれてまだそんなにたっていない市場であるにも関わらず、&lt;strong&gt;既にだいぶ停滞気味&lt;/strong&gt;で、先日発表されたYoga Tab 3などは解像度などの面においてYoga Tablet 2と比べても見劣りするといいますか、熟れた値段でほどよいスペックというよりは、&lt;strong&gt;コストダウンを切り詰めるかお金をかけてスペックアップするかという両極端な方向性に舵を切っている傾向&lt;/strong&gt;もあり、そうだとすれば、あまり期待できないのかなとも思います。&lt;/p&gt;&#10;&lt;p&gt;実際、Yoga Tablet 2 Proも悪くはなく、今後熟れた値段でこれより良いものが出ることがあるのかを考えると、なんとも言えないなぁとも思います。まぁ、iPad Proも発売されてまだ間もないですし、もうしばらく様子を見る気ではありますが、結局どうにもならず、どこかのタイミングで結局Yoga Tablet 2 Proを買ってしまうことになるのかもしれません。なんだかなぁ。&lt;/p&gt;&#10;&lt;p&gt;私の一番の用途は電子書籍なのですけれど、&lt;strong&gt;透明テキスト付きのPDFファイルなんかは、読み込むのにけっこうスペックが必要&lt;/strong&gt;です。できればそれなりのCPUと、メモリ3GBくらいは搭載したものが、5万円くらいで手に入るようにならないかと願っているのですが、うーん難しいかなぁ。せめてYoga Tablet 2 Proが値下がりしてくれればと思うのですけれど、&lt;strong&gt;値下がりどころか値上がりの傾向&lt;/strong&gt;があります。まぁこれしかないものなぁ…。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00OCHGG46" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Airmail 2 から標準のメール.appに帰ってきました</title><link>https://hack-le.com/46226453-2/</link><pubDate>Tue, 08 Dec 2015 17:26:30 +0900</pubDate><guid>https://hack-le.com/46226453-2/</guid><description>&lt;p&gt;Airmail 2はOSX用のメールクライアントで、安くはありませんが、熟れたUIで使いやすく、個人的には気に入っていました。しかし個人的な問題が二点あります。一つはAPOPに対応していないこと（職場でどうしても必要で…脆弱性が見つかってもう何年もたつのになぁ「&lt;a class="link" href="http://www.ipa.go.jp/security/vuln/200704_APOP.html" target="_blank" rel="noopener"&#10; &gt;IPA 独立行政法人 情報処理推進機構：脆弱性関連情報取扱い：APOP方式におけるセキュリティ上の弱点（脆弱性）の注意喚起について&lt;/a&gt;」）。まぁこれは仕方ないです。もう一つはちょっと致命的で、どうも&lt;strong&gt;日本語の検索に問題&lt;/strong&gt;があり、正しく検索されません。&lt;/p&gt;&#10;&lt;h2 id="検索問題はやはり辛い"&gt;検索問題はやはり辛い&#10;&lt;/h2&gt;&lt;p&gt;以前「&lt;a class="link" href="//hack-le.com/45111005-2/" &gt;Macのメーラー Airmail 2 の使い勝手 : 或る阿呆の記&lt;/a&gt;」という記事を書きました。記事を書いた時点では、&lt;strong&gt;日本語の検索問題が自分以外にちっとも症例が見当たらない&lt;/strong&gt;ので、何かローカルな不具合なんだろうか、何かの拍子でなおることもあるんだろうか、などと考えてもいたのですが、同様の症状を抱えているというコメントをいくつかいただき、やはり&lt;strong&gt;自分だけの問題ではない&lt;/strong&gt;のだということがわかりました。&lt;/p&gt;&#10;&lt;p&gt;解決も難しそうであるし、サポートに連絡を取るのも英語が不得手な自分には荷が重いし、このまま付き合っていくしかないのかなぁと思いつつ、やはり不便は不便。で、個人的なAPOPの問題もあるしということで、せっかくの有料アプリではありましたが、再び標準のメール.appを使うことにしました。&lt;/p&gt;&#10;&lt;p&gt;Thunderbirdというのも考えたのですが、かつてThunderbirdを衝動的にアンインストールした時の記憶…4GBのMBAで1.2GBのメモリを使い、しかもマシンが重くなっていたという記憶と、最近のMozillaもあまり元気がなさそうに見えるなどの印象が引っかかって、それならば標準のメールアプリを使おうか、という気になりました。&lt;/p&gt;&#10;&lt;h2 id="早速のトラブルに見舞われつつ"&gt;早速のトラブルに見舞われつつ&#10;&lt;/h2&gt;&lt;p&gt;切り替えを始めたのがちょうどEl Capitanに乗り換えてからしばらくした頃です。El Capitanといえばメール関連の不具合が多く報告されていました。データ消失という憂き目を見た人もいたらしく、私もどんなものかなと思っていたのですが、私の場合データ消失にはならなかったものの、&lt;strong&gt;メールアプリを起動したら即落ちる&lt;/strong&gt;という状況になってしまいました。&lt;/p&gt;&#10;&lt;p&gt;色々とやってみた結果、メールのリダイレクト設定に起因する不具合だったのではないかと思います。追求するのが面倒臭くなって、メールのデータを全部消してしまったので、今となってはわかりませんが、恐らくはそうです（「&lt;a class="link" href="//hack-le.com/46072384-2/" &gt;El Capitanのせい？メール.app が落ちる…恐らくはリダイレクト設定のために : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;そんなトラブルに見舞われつつも、それを乗り越えてしばらくしたらまた安定して使えるように&lt;/strong&gt;なりました。メール一つ開くにしても、Airmailよりなんだか鈍重な印象をうけますが（というよりAirmailが軽やか？）、まぁ使えています。最近気づいたのですが、&lt;strong&gt;Spotlightの検索対象にも入っている&lt;/strong&gt;ということで、アーカイブされた昔のメールをさくっと検索できるのは、ちょっと嬉しい。検索がうまく働かなければ、昔のメールなんてストレージの肥やし以外の何者でもないですからねぇ…。&lt;/p&gt;&#10;&lt;p&gt;というわけで、多分珍しいAirmailからメール.appへの乗り換え記事でした。&lt;/p&gt;</description></item><item><title>大量の曲を持ち歩くのにiCloudミュージックライブラリは適しているが、運用に工夫は必要</title><link>https://hack-le.com/46207430-2/</link><pubDate>Sun, 06 Dec 2015 15:15:27 +0900</pubDate><guid>https://hack-le.com/46207430-2/</guid><description>&lt;h2 id="apple-musicについてきた"&gt;Apple Musicについてきた&#10;&lt;/h2&gt;&lt;p&gt;体験版から始めて、なんだかんだApple Musicを続けています。最近新しい音楽を聞かなくなった自分を変えるきっかけになればと思ったのですが、結局オススメされる音楽というのは私の視聴傾向から導き出されていますから、「昔聞こうと思っていたけどお金がなくて聞けなかった」アルバムばかりを聞くことになり、まったく音楽的には広がっていないなぁと自省する今日この頃です。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはよいのですが、Apple Musicに加入すると&lt;strong&gt;iCloudミュージックライブラリ&lt;/strong&gt;なるものが使えるようになります。これは、手持ちの曲をすべてAppleのサーバーに預けて、iPhoneなどのiOS端末から適宜ストリーミング再生できるようになる優れものです(25000曲というやや厳しい条件がありましたが、10万曲に緩和される見通し「&lt;a class="link" href="http://taisy0.com/2015/12/06/61962.html" target="_blank" rel="noopener"&#10; &gt;Apple、｢iTunes Match｣と｢iCloudミュージックライブラリ｣の上限曲数を引き上げ開始 | 気になる、記になる…&lt;/a&gt;」）。&lt;strong&gt;年間3,980円のiTunes Matchでも同様のサービスを使える&lt;/strong&gt;ことができます。しかし、手持ちではないApple Musicの曲に対する扱いや、DLしたファイルにDRMがつくかどうかなど、&lt;strong&gt;なかなか複雑な違い&lt;/strong&gt;もあります（参考「&lt;a class="link" href="http://appllio.com/apple-music-itunes-match-icloud-music-library" target="_blank" rel="noopener"&#10; &gt;iCloudミュージックライブラリとは──Apple MusicやiTunes Matchで音楽を管理する時の注意点まとめ | アプリオ&lt;/a&gt;」）。とはいえ、&lt;strong&gt;ローカルの曲をストリーミング再生することで、容量の少ないiPhoneなどでもライブラリを持ち歩きたい需要にはどちらも同じように応えてくれます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;Apple Musicに加入してよかったなと思ったのは、期せずしてついてきたこのiCloudミュージックライブラリでした。まぁ、これのおかげでたたでさえ複雑怪奇なiTunesが、さらなるカオス化をすすめてしまっているのも確かであり、痛し痒しでもあるのですけれど…。けれど、&lt;strong&gt;64GBしか容量のないiPhoneで、100GBのミュージックライブラリを持ち歩けるのは、嬉しい&lt;/strong&gt;。iTunes Match自体は割と前からあったサービスですし、最初アメリカでのみ始めったときは、随分羨ましく思ったものです。今になって、使うことになるとは。&lt;/p&gt;&#10;&lt;h2 id="オフラインでの運用に一考の余地"&gt;オフラインでの運用に一考の余地&#10;&lt;/h2&gt;&lt;p&gt;しかしながら、iCloudミュージックライブラリはストリーミングを基本とするものですから、インターネット環境には随分と気を使うようになります。&lt;/p&gt;&#10;&lt;p&gt;まず大きな問題は&lt;strong&gt;通信費の問題&lt;/strong&gt;で、これまで1GBを月に使うか使わないかの私が、1日に普通に200-300MBを使ってしまいがちになりました。ストリーミング再生というのはなかなか恐ろしい。オフラインの間に次に聴くだろう曲をダウンロードしておくという対応が考えられますが、そうするとなんだかストリーミング再生の手軽さが失われるようで、やや悲しい。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ネット環境の整備そのものが問題&lt;/strong&gt;でもあります。特に、私のようにiPhoneをほとんどiPod touchとして使っている身分では、必ずしもストリーミング再生ができる環境に身を置いているわけではありません。これも、やはり聴きたい曲についてはダウンロードしておく対応が必要です。&lt;/p&gt;&#10;&lt;p&gt;まぁつまり、&lt;strong&gt;いかにしてオフライン時、あるいはオンラインにおいてもできるだけ通信せずに、iCloudミュージックライブラリの利便性を享受するか、というのが問題&lt;/strong&gt;なのです。これがけっこう問題で、今のところできるのは、あらかじめアルバムや曲、プレイリスト単位で曲をダウンロードしておく、くらいです。もう少し、自動的に、かつ自分で何がオフライン再生できるのかを把握・管理しやすければ、使い勝手もよくなろうと思います。たとえば最近再生したものを集めたスマートプレイリストを、逐次ダウンロードする、などができれば随分やりやすく思えるのですが、そういうようなことをしようとすると、現状では一度iCloudミュージックライブラリをOFFにして、iTunesで同期した後、再度ONにする、などのような一手間がかかるようで、&lt;strong&gt;いったい便利なのか不便なのか悩ましい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;まぁ、Apple Music関係のバグ報告は耐えませんし、そもそもこのような旧態依然としたローカルのライブラリの運用はiCloudミュージックライブラリの思想から外れるものでしょうから、なかなか対応されることはないのかもしれません。なにか良いアプリがあれば…と思ったところで思い出しましたが、そういえば、昔サードパーティーのアプリを利用して、外でiTunesライブラリを聴く、というのを割と手軽に実現したような気もするのですが、結局使わなくなったのは、なぜだったかなぁ。なんだか、文字化けとか再生切れとか、問題が多発していたような気がします。ままならないものです。&lt;/p&gt;</description></item><item><title>4,5,6,7,10インチ スマホorタブレットの各メリット・デメリットと適した生活スタイル</title><link>https://hack-le.com/46149996-2/</link><pubDate>Wed, 02 Dec 2015 20:52:38 +0900</pubDate><guid>https://hack-le.com/46149996-2/</guid><description>&lt;p&gt;本記事は、私が実際に使った経験から、4,5,6,7,10インチのスマホ・タブレットの使い勝手を書き出し、メリット・デメリットを考慮のうえ、どんな生活スタイルにどのサイズのデバイスがうってつけかを、考察するものです。&lt;/p&gt;&#10;&lt;h2 id="スマホとタブレット"&gt;スマホとタブレット&#10;&lt;/h2&gt;&lt;p&gt;複数のスマホ、タブレットを使っています。振り返ってみると、4,5,6,7,10インチと、色々なサイズのデバイスを使ってきました。使い続けているものもあるし、ほとんど使わない、使わなかったものもあります。それぞれのサイズにメリットとデメリットがあり、その人の使用目的や持ち歩きスタイルによって、その使用感は大きく異なります。サイズによって、スマホ的な特徴、タブレット的な特徴のどちらがどれだけ色濃く出るかが変わるからです。&lt;/p&gt;&#10;&lt;p&gt;さっと何かをしたいのか、じっくり何かに取り組みたいのか、前者であればスマホがよいし、後者であればタブレットがよい。&lt;strong&gt;厄介なのは、そのどちらもが必要なこと&lt;/strong&gt;だということです。しかし、人によってどちらに重きをおくかは異なりますし、またその日その時その場所のシチュエーションによって、どちらが重要視されるかも変わります。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;各サイズがどんな人にオススメか、私の拙い経験から書き留めます&lt;/strong&gt;。なお、電子書籍用途に特化した記事もあります（「&lt;a class="link" href="//hack-le.com/46318196-2/" &gt;電子書籍を利用する観点からみたデバイスの大きさについて : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="各サイズの特色"&gt;各サイズの特色&#10;&lt;/h2&gt;&lt;p&gt;サイズごとに分けて記述していきます。&lt;/p&gt;&#10;&lt;h3 id="4インチ最短のアクション"&gt;4インチ：最短のアクション&#10;&lt;/h3&gt;&lt;p&gt;4インチで私が使用したデバイスはiPhone 5です。今もiPod touchとして現役でバリバリ使われています。&lt;/p&gt;&#10;&lt;p&gt;このサイズの素晴らしいところは、なんといっても&lt;strong&gt;取り回しの良さ、機動性の高さ&lt;/strong&gt;でしょう。&lt;strong&gt;ほとんどのズボンのポケットに入り、邪魔にならないサイズ&lt;/strong&gt;です。&lt;strong&gt;片手でさっと取り出して、さっと操作できる&lt;/strong&gt;のが魅力。特に一般的な女性や、手が小さい男性（すなわち私）にとって、&lt;strong&gt;片手で操作できる限界のサイズ&lt;/strong&gt;だといえます。昔は4インチでも大型扱いでしたが、今は4インチは小型の部類に入り、ホビット族には厳しい世の中です。IT業界は欧米の男性が動かしている面が如実に現れている部分だと思います。&lt;/p&gt;&#10;&lt;p&gt;取り回しの良さは、&lt;strong&gt;特にミュージックプレイヤー、メモ、ToDo、スケジュール管理、カメラ、ちょっとした調べ物といった用途で真価を発揮&lt;/strong&gt;します。最短のアクションで必要なツールにアクセスできるのです。もちろん操作は片手でOK。このスピード感は、4インチ以下の端末にしかないものといってよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、&lt;strong&gt;何か文章や動画などをじっくり閲覧するには、やはり画面が小さい&lt;/strong&gt;と認めざるを得ません。Webブラウジングや電子書籍は、どちらかというと不得手です。特に電子書籍については、かなり限定的にしか使えないものと考えたほうがよいでしょう。動画も、ちょっとしたライブ映像などを数分見るには良いのですが、ある程度長時間の映画、ドラマ、アニメなどを見るにはやはり寂しい。つまり、&lt;strong&gt;ある程度の時間を要する作業をしていると、不便さが際立ってくる&lt;/strong&gt;といえます。&lt;/p&gt;&#10;&lt;p&gt;以上より、&lt;strong&gt;4インチはザ・モバイルと言うべき大きさ&lt;/strong&gt;です。&lt;strong&gt;普段デバイスをポケットに入れておき、必要な時に最短時間で必要なことをしたい、という人向け&lt;/strong&gt;であるといえます。しかし、じっくりと文章を読んだりと動画を見たりなど、腰を据えた作業をモバイルに求めるのであれば、別にタブレットが不可欠でしょう。それも、持ち運び用と、屋内長時間用の二種類を必要とするかもしれません。&lt;/p&gt;&#10;&lt;h3 id="5インチモバイルの限界"&gt;5インチ：モバイルの限界&#10;&lt;/h3&gt;&lt;p&gt;最近はこのサイズが増えました。私が使用してきた5インチデバイスは、Xperia Z3 です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;5インチは、モバイルの限界を追求したサイズ&lt;/strong&gt;ではないでしょうか。モバイルと、モバイルでないものの境界線を探った結果、辿り着いた境地だと思います。基本的な特性は4インチで書いたものと同じなのですが、大型化の結果、メリットとデメリットがそれぞれ薄れます。&lt;/p&gt;&#10;&lt;p&gt;当然ながら、取り回しは4インチほどよくはありません。&lt;strong&gt;ポケットに入るかというと、微妙なところです。私はやや辛いと思います&lt;/strong&gt;。出来ないことはありません。しかし、日常的にポケットに入れようとは思いません。そもそもポケットに入らない、という服もけっこうあります。しかし、許容範囲だという人もいるでしょう。微妙なところです。胸ポケットならば余裕があるので、スーツや作業着には良いのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;片手での操作も、出来ないことはないが厳しいです。手の大きい人であれば、比較的楽にはなるでしょうが。私のように手の小さな人には厳しい。文字入力がまずしんどい。まぁ大方の人は、片手を基本にして補助的に両手を使う、という使い方になるように思います。&lt;/p&gt;&#10;&lt;p&gt;以上から、4インチデバイスのように、さっと取り出してさっと使う、というスピード感は若干薄れます。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、画面が大型化したおかげで、4インチデバイスの端末では辛いところのあった&lt;strong&gt;Webブラウジングや電子書籍は非常に楽&lt;/strong&gt;になります。特に電子書籍についてその差は非常に大きいです。5インチあればなんとか読む気になれます。画像タイプのもの（自炊本やデザイン性の高い電子書籍などにありがち）も、文庫本サイズのものであれば十分読めます。動画もまぁまぁ楽しめますし、モバイルでありながら、それなりにじっくりとコンテンツを楽しむことができるのが、大きな魅力といえます。&lt;/p&gt;&#10;&lt;p&gt;つまり&lt;strong&gt;5インチは、モバイルの範囲内で、モバイルで出来ることを限界ギリギリまで突き詰めた大きさ&lt;/strong&gt;です。&lt;strong&gt;スマホをズボンのポケットに入れず、他にタブレットを持っている人&lt;/strong&gt;に向いています。&lt;/p&gt;&#10;&lt;h3 id="6インチこれ一つでok"&gt;6インチ：これ一つでOK&#10;&lt;/h3&gt;&lt;p&gt;6インチはファブレットと呼ばれる領域（2017年、その呼び名はあまり聞かなくなりました）で、やけに高い機種が多いジャンルです。Kindleなどの多くの電子書籍リーダーが採用しているサイズでもあります。私が使用してきた6インチデバイスは、Kindle Paperwhite と Kobo glo です。少し前までは空白地帯でしたが、最近は安いのも含めて色々でてきました。&lt;/p&gt;&#10;&lt;p&gt;ファブレットなんて言いますけど、私はこれはタブレットだと思います。6インチにもなると、持ち運びはカバンが基本ですし（スーツの胸ポケットに入れている人もいるのでしょうか？）、アングロサクソンでも片手操作はできないものと思います。ただ、とても小型のタブレットです。外に持っていくには、非常に便が良い。&lt;/p&gt;&#10;&lt;p&gt;電子書籍リーダーにもなるくらいですから、ある種の電子書籍には最適なサイズです。私も、この大きさが一番良いのではないかと思うのです。文字主体の本がとても自然に読めます。漫画なども単ページであればそれなりの大きさで楽しめます。そして、&lt;strong&gt;軽い&lt;/strong&gt;。小さいだけあって、軽い。&lt;strong&gt;この軽さは、長時間手に持つような端末では思っている以上にきいてきます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;6インチは、タブレットの範囲内で、限界までスマホのメリットを取り入れようとした大きさ&lt;/strong&gt;とといえます。まず、&lt;strong&gt;なんでも一台でこなしたい人はこの大きさが候補に上がる&lt;/strong&gt;でしょう。多分、色々なことを我慢することになりますが、それは可能であると思います。あるいは、&lt;strong&gt;別にスマホがあるけれど、外でも使えるような小型のタブレットが欲しい人向け&lt;/strong&gt;です。特に4インチのスマホを持っている場合、外用のタブレットとして有力な選択肢になります。&lt;/p&gt;&#10;&lt;h3 id="7インチとにかく何か欲しいなら"&gt;7インチ：とにかく何か欲しいなら&#10;&lt;/h3&gt;&lt;p&gt;Nexus 7が切り開いた7インチ。中途半端だとか色々言われていましたが、いまやタブレットのスタンダード的なサイズです。私が使ってきたのはNexus 7(2012)、文鎮化などもしましたが、アレコレあってなんとか復活。その後は身内に譲りました。使われているのだろうか。&lt;/p&gt;&#10;&lt;p&gt;7インチという画面はそれなりに大きくて、その快適度はスマホとは一線を画します。さすがタブレット。ポケットに入れるのは無理というものですが、&lt;strong&gt;たいていのカバンにはすっぽりとおさまってくれるサイズ&lt;/strong&gt;でもあります。&lt;strong&gt;持ち運びがしやすく、画面もそれなりの大きさなので使いやすい&lt;/strong&gt;のが7インチタブレットです。10インチのタブレットはあまり持ち歩く気になれませんが、7インチならばまだ持ち歩こうかと思えますし、入るカバンも格段に多い。&lt;/p&gt;&#10;&lt;p&gt;これだけだと、6インチのものと使い勝手があまり変わらないような気がします。しかし、7インチは完全にタブレットです。スマホを買わずに6インチタブレット（ファブレット）一台で済ませる、なるほど可能かもしれません。しかし&lt;strong&gt;スマホを買わずに7インチタブレット一台で済ませる…それはちょっと無理なのではないかな&lt;/strong&gt;。そういう違いがあります。&lt;/p&gt;&#10;&lt;p&gt;であれば、6インチのほうがよいのか、というともちろんそう簡単なものではなく、&lt;strong&gt;当然ながら画面が大きい分6インチよりも見やすい&lt;/strong&gt;のです。できることも増えます。一方、大きい分どうしても重たくはなるので、読書端末として見た場合、6インチと7インチのどちらがよいのか、難しいところです。軽さと小ささを取るか、見やすさを取るか。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;外と中でそれぞれどれくらい使うかが一つの基準になりましょうか&lt;/strong&gt;。ほとんど外での利用を考えるのであれば、6インチが良いかもしれませんが、中での利用も多いのであれば、7インチはバランスの良い選択肢だと思います。つまり、&lt;strong&gt;7インチは外でも中でもタブレットを使いたい人向け&lt;/strong&gt;です。あるいは、このように利用シーンの多いサイズであることから、&lt;strong&gt;なんでも良いからとにかくタブレットなるものを使ってみたい人向け&lt;/strong&gt;ともいえます。&lt;/p&gt;&#10;&lt;p&gt;注意点ですが、&lt;strong&gt;7インチは他のサイズのデバイスにより最も存在意義が失われやすいサイズ&lt;/strong&gt;だとも思います。たとえば5インチと10インチのデバイスを他に持っていた場合、外では小回りのきく5インチを使って、中では10インチのタブレットを使う、という風になりがちです。なりました。自分の利用目的、利用シーンをよく考えないと、置物になりかねません。まぁとはいえ、デバイスが3台以上になってしまう人は、もはや所有そのものが目的化していることも往々にしてあります。ありました。&lt;/p&gt;&#10;&lt;h3 id="10インチごろ寝のお供"&gt;10インチ：ごろ寝のお供&#10;&lt;/h3&gt;&lt;p&gt;10インチは私がもっともヘビーに使っているサイズです。初代iPad、第三世代iPad、iPad Air 2と使ってきました。初代は期待していたほど使用しなかったのですが、Retina化したことで一気に使用頻度が増え、そしてCPUがパワーアップしたiPad Air 2はもう言うことがなく、毎日便利に使っています。Androidでは、KALOS 2というちょっとマイナーな機種を使っています。&lt;/p&gt;&#10;&lt;p&gt;さて、10インチの利用シーンですが…これはもう決まっているのです。&lt;strong&gt;10インチタブレットは、ごろ寝のお供&lt;/strong&gt;です。ベッドで寝っ転がって使うのです。ソファであくびをしながら使うのです。椅子に座ってお茶を飲みながら使うのです。&lt;strong&gt;堕落アイテム&lt;/strong&gt;なのです。&lt;/p&gt;&#10;&lt;p&gt;これだけではあんまりなので、もう少し真っ当なことも書きます。&lt;strong&gt;電子書籍としても使い勝手は良く&lt;/strong&gt;、漫画を見開きで読める、大判の技術書や楽譜も、縦置きにすればまぁ読める（本当はもっと大きいサイズが望ましいですが）といった利点があります。反面、文庫本の小説などは読む気になりません。&lt;strong&gt;動画を見るのにも十分な臨場感を得られる&lt;/strong&gt;サイズです。わざわざこれで音楽を聞こうとは思いませんが。&lt;/p&gt;&#10;&lt;p&gt;画面が小さなラップトップに近いくらいあるので、&lt;strong&gt;長時間の作業も比較的楽&lt;/strong&gt;にできます。実際、&lt;strong&gt;CGや音楽制作に関わる創造的なアプリケーションも多くあり&lt;/strong&gt;、利用している人も多いようです。私はiPadでは一切使ったことがありません…何度かトライもしているのですが、ファイルの取り回しなどが妙に不便というかなんというか。まぁでも、そういう用途の人もいるようです。&lt;/p&gt;&#10;&lt;p&gt;オフィスも使えますが…タブレットでオフィス目当ての人っているのでしょうか…本格的に使っている人、見たことないですが、まぁそういう人は素直にPCを買ったほうがよいと思います。&lt;/p&gt;&#10;&lt;p&gt;ということで、誤解を恐れずに言うと、&lt;strong&gt;10インチは堕落したい人向け&lt;/strong&gt;です。私は10インチが一番好きです。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;まとめとして、以下のような感じでオススメします。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;スマホをポケットに入れたい→4インチ&lt;/li&gt;&#10;&lt;li&gt;できる限りいろんなことをスマホでしたい→5インチ&lt;/li&gt;&#10;&lt;li&gt;2台持ちが嫌→6インチ&lt;/li&gt;&#10;&lt;li&gt;できる限り小型のタブレットが欲しい→6インチ&lt;/li&gt;&#10;&lt;li&gt;持ち運びやすいタブレットが欲しい→7インチ&lt;/li&gt;&#10;&lt;li&gt;何でもいいからタブレットが欲しい→7インチ&lt;/li&gt;&#10;&lt;li&gt;長時間の作業をする→10インチ&lt;/li&gt;&#10;&lt;li&gt;堕落したい→10インチ &lt;em&gt;Recommended!&lt;/em&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00OT3VUO4" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;最初にもあげましたが、関連記事として電子書籍用途に特化した場合の記事ものっけておきます→[電子書籍を利用する観点からみたデバイスの大きさについて : 或る阿呆の記](//hack-le.com/46318196-2/)</description></item><item><title>Raspberry Pi で使っているセンサとかGPSモジュールとかまとめ</title><link>https://hack-le.com/45440923-2/</link><pubDate>Mon, 30 Nov 2015 11:21:21 +0900</pubDate><guid>https://hack-le.com/45440923-2/</guid><description>&lt;p&gt;Raspberry Piは各種センサを簡単に扱えるのが素晴らしいですね。個人的に使っているセンサについてのメモです。GPSや気温センサ、AD変換、7セグメントディスプレイ、など。モータ系を全然使っていない！追記していきたいと思います。&lt;/p&gt;&#10;&lt;h2 id="センサ"&gt;センサ&#10;&lt;/h2&gt;&lt;h3 id="usb-気温センサ"&gt;USB 気温センサ&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B004FI1570" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;USBで使えるので、Raspberry Piだけでなく一般的なPCでも使用しやすいです。&#13;&#10;[USB温度センサーで室温をモニタリングしてみた(on Ubuntu Server 12.04) : 或る阿呆の記](//hack-le.com/25756352-2/)&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;インタフェース：USB&lt;/li&gt;&#10;&lt;li&gt;値段：1000円(送料で+500円)くらい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="i2c-気温センサlm75b"&gt;I2C 気温センサ：LM75B&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZCINXB8" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;データシードにアドレスマップもあるので、温度を取得するだけであれば、特にライブラリなど必要なく、シェルスクリプトだけでも頑張れる使いやすいセンサです。初期アドレス0x48で、アドレスがいじれるのは3bit分、すなわち最大で8台繋げることができます。&#13;&#10;[Raspberry Pi で温度センサ LM75B を使う : 或る阿呆の記](//hack-le.com/45197292-2/)&#13;&#10;[LM75B温度センサ（I2C接続） - スイッチサイエンス](https://www.switch-science.com/catalog/1813/)&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;インタフェース：I2C&lt;/li&gt;&#10;&lt;li&gt;分解能：0.125 ℃&lt;/li&gt;&#10;&lt;li&gt;精度：-25 - +100 ℃で ±2 ℃&lt;/li&gt;&#10;&lt;li&gt;測定範囲：-55 - +125 ℃&lt;/li&gt;&#10;&lt;li&gt;値段：400円くらい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="i2c-気圧気温センサbmp180"&gt;I2C 気圧、気温センサ：BMP180&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B014W7NS96" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;**気圧と気温**を取得できます。AdafruitがPython用のライブラリを作成してくれているため、使用も簡単です。ただ、以前LM75B、BMP180、BME280、職場にある某立派な観測装置で比較実験をしたことがあるのですが、その時BMP180だけ気温・気圧共に絶対値がやや低めにでていました。ハズレの個体だった？変化自体は他センサと比較してもよい感じでした。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;インタフェース：I2C&lt;/li&gt;&#10;&lt;li&gt;分解能：0.01 hPa、0.1 ℃&lt;/li&gt;&#10;&lt;li&gt;精度：0 - 65℃で ±1 hPa、±1 ℃&lt;/li&gt;&#10;&lt;li&gt;測定範囲： 300 - 1100 hPa&lt;/li&gt;&#10;&lt;li&gt;お値段：1200円くらい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00X38SNLE" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;←ですが**Amazonだと、どうも旧バージョンっぽいものがしれっと売っているので要注意**です。分解能が0.03hPaだったりと、スペックがやや低い。まぁ玩具として使う分には問題ないと思いますが。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://qiita.com/masato/items/d5c19a883b0ba3ec7d5b" target="_blank" rel="noopener"&#10; &gt;RaspberryPi - Raspberry Pi 2で気温・気圧・高度センサのBMP180を使う - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.switch-science.com/catalog/1598/" target="_blank" rel="noopener"&#10; &gt;BMP180 気圧センサ（気温センサ付き） - スイッチサイエンス&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="i2cspi-気圧気温湿度センサbme280"&gt;I2C,SPI 気圧、気温、湿度センサ：BME280&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZH6DTGY" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;これ一つで気圧、気温、湿度が測定できる優れものです。お求めやすく高機能なうえに、スイッチサイエンスさんがPythonライブラリを書いてくれたおかげで使いやすい。無駄に複合的なセンサを使うのは筋悪かもしれませんが、必要であれば非常に魅力的ではないでしょうか。なおI2CとSPIの両方で使えますが、私はI2Cでしか使ったことがありません。&#13;&#10;[Raspberry Pi 2で温湿度・気圧センサのBME280をPythonから使う - Qiita](http://qiita.com/masato/items/027e5c824ae75ab417c1)&#13;&#10;[BME280搭載 温湿度・気圧センサモジュール - スイッチサイエンス](https://www.switch-science.com/catalog/2236/)&#13;&#10;[BME280 温湿度・気圧センサモジュール - BME280 - ネット販売](https://strawberry-linux.com/catalog/items?code=12280)&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;インタフェース：I2C、SPI&lt;/li&gt;&#10;&lt;li&gt;分解能：0.18 hPa、0.01 ℃、0.008 %&lt;/li&gt;&#10;&lt;li&gt;精度：±1 hPa、±1 ℃、±3 %&lt;/li&gt;&#10;&lt;li&gt;測定範囲：300 - 1100 hPa、-40 - +85 ℃、0 - 100 %&lt;/li&gt;&#10;&lt;li&gt;お値段：1100 - 1600 円くらい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ad変換"&gt;AD変換&#10;&lt;/h2&gt;&lt;p&gt;アナログ値をデジタル値に変換する、AD変換(ADC)です。ちゃんとメモリがついていて、間断なく連続取得できるDAC用途のものを激しく希望します…。仕事で、USBで使えるものを、ちょいと怪しい？海外メーカーのやつを見つけて取り寄せ、なんとか使っているのですが。仕事絡みなのでちょっと記事にしづらい。&lt;/p&gt;&#10;&lt;h3 id="spi-mcp3008"&gt;SPI MCP3008&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0133B5ZUM" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B010AZHBDS" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;定番MCP300xシリーズの一つ、MCP3008です。最大8chで、量子化10bit、最大サンプリング周波数200kHz(多分8chだと25kHz)のAD変換。SPI方式です。&#13;&#10;[Raspberry Pi でSPI通信のAD変換 MCP3008 を使う](//hack-le.com/47361017-2/)&#13;&#10;&lt;h3 id="i2c-ti-ads1015"&gt;I2C TI ADS1015&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B013I1CQ9U" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;これも定番、テキサス・インスツルメンツのADS1015。最大3.3kHzというサンプリング周波数が特徴です。I2C通信で使いやすい。MCP300xシリーズよりちょっと高い。&#13;&#10;[Raspberry Pi で AD変換チップ ADS1015 を使って値を連続的に取得する](//hack-le.com/46873492-2/)&#13;&#10;&lt;h2 id="そのほか"&gt;そのほか&#10;&lt;/h2&gt;&lt;h3 id="uart-gpsモジュール-adafruit-ultimate-gps"&gt;UART GPSモジュール Adafruit Ultimate GPS&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00YXYGVS4" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZWB627M" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B007G5OCEC" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;シリアル通信、すなわちUARTを使います。アンテナは内部にもありますが、外部アンテナを使うこともできます。使ったほうがいいかなと思います。Adafruitで販売されていますが、国内では例によってスイッチサイエンスさんが頑張ってくれているので、Raspberry Piで使えるGPSモジュールとしては非常に入手しやすいです。バッテリーのボタン電池はCR1220ですが、なくても使うことはできます。スタンドアロンで使用する場合は、RTCとセットで使う必要があるかと思います。使い方などの詳細は別途記事にしました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/45528250-2/" &gt;Raspberry Pi にGPSモジュールをつけてStratum 0で時刻同期(スタンドアロン) : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/45307455-2/" &gt;Raspberry Pi で時刻をスタンドアロンでGPSと同期するなら、RTCモジュールとセットが良い : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.adafruit.com/product/746" target="_blank" rel="noopener"&#10; &gt;Adafruit Ultimate GPS Breakout - 66 channel w/10 Hz updates [Version 3] ID: 746 - $39.95 : Adafruit Industries, Unique &amp;amp; fun DIY electronics and kits&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="i2c-rtcモジュール-ds1307"&gt;I2C RTCモジュール DS1307&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B012BW0D0G" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;Raspberry Piはバッテリーがないためにハードウェアクロックがなく、ネットワークの無い環境で使用すると時刻を正確に保持できません。そのため、スタンドアロンで常用したい場合はRTC(リアルタイムクロック)モジュールを外付けする必要があります。色々あるのですが、私はスイッチサイエンスで販売されているDS1307の搭載されたものを使っています。ありがとうスイッチサイエンス。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/45262876-2/" &gt;Raspberry Pi 2 で RTC を使いスタンドアロンで時刻を保持 : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="7セグメントled"&gt;7セグメントLED&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B013I2P6DM" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;やはりスイッチサイエンスにある、シリアル通信でもSPIでもI2Cでもなんでもこいな7セグメントLEDのパッケージです。I2Cでいけるので、i2csetとi2cgetでなんでもできるのがお手軽だと思います。エラーもよくでるのですが。&#13;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="//hack-le.com/45642910-2/" &gt;Raspberry Pi でI2Cを使った7セグメントLEDで現在時刻を表示 : 或る阿呆の記&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="oled-キャラクタディスプレイ-weh001602a"&gt;OLED キャラクタディスプレイ WEH001602A&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="http://eleshop.jp/shop/g/gC4P123/" target="_blank" rel="noopener"&#10; &gt;【共立エレショップ】&amp;raquo; OLEDディスプレイ キャラクタ表示タイプ 16文字x2行 赤文字: 【能動・受動・機構パーツ】 &amp;laquo; 電子部品,半導体,キットの通販&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://www.winstar.com.tw/products/oled-module/oled-character-display/weh001602a.html" target="_blank" rel="noopener"&#10; &gt;WEH001602A - Winstar Display&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;日本橋のシリコンハウスで衝動買い。ネットでも買えるみたいですね。Raspberry Piでの使い方は「&lt;a class="link" href="http://www.raspberrypi-spy.co.uk/2012/07/16x2-lcd-module-control-using-python/" target="_blank" rel="noopener"&#10; &gt;16×2 LCD Module Control Using Python&lt;/a&gt;」のとおりに使えます。&lt;/p&gt;&#10;&lt;h3 id="33v---5v-双方向ロジックレベル変換ic"&gt;3.3V &amp;lt;-&amp;gt; 5V 双方向ロジックレベル変換IC&#10;&lt;/h3&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B011U11SKI&amp;linkId=74a1483c930f33425a6c386f760dbc06" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;Raspberry Piの信号は基本的に3.3Vですが、5Vの信号が必要なことが多々あります。そんなとき、この変換ICを使えば簡単に3.3Vと5Vの双方向変換が可能です。&#13;&#10;&lt;p&gt;スイッチサイエンスが販売しています。「&lt;a class="link" href="https://www.switch-science.com/catalog/1523/" target="_blank" rel="noopener"&#10; &gt;ロジックレベル双方向変換モジュール - スイッチサイエンス&lt;/a&gt;」。回路図も公開されており、中身はFETのBSS138なので、自分で作れば非常に安上がりでしょうけれど、これを使うほうが楽ではないかな。&lt;/p&gt;&#10;&lt;p&gt;使用には5V電源が必要ですが、Raspberry Piの5VDCが使えます。&lt;/p&gt;</description></item><item><title>久々にiTunesと格闘…Apple Musicでさらにカオスに</title><link>https://hack-le.com/46058817-2/</link><pubDate>Sat, 28 Nov 2015 01:00:54 +0900</pubDate><guid>https://hack-le.com/46058817-2/</guid><description>&lt;p&gt;Appleユーザーの避けられない壁、それがiTunesです。Macを使っているだけであればまぁなくてもよいのですが、iPhoneやiPadを使っていると、同期の問題もあり使わないわけにはいきません。元々、私はけっこう使いやすいと思ってiTunesを使っていたのですが（もう10年以上前のことです）、どんどんUIが変わり、ローカライズと称して勝手に曲の情報をいじり、動画だ、アプリだ、本だなんだとどんどん肥大化していき、最近はiCloudにApple Musicと、その混迷はとどまるところを知りません。&lt;/p&gt;&#10;&lt;h2 id="悪夢のitunes引っ越し作業"&gt;悪夢のiTunes引っ越し作業&#10;&lt;/h2&gt;&lt;p&gt;今回、外付けハードディスクをやめてデータはNASで管理する、という方針でPCの引越し作業をしていましたが、最後の最後、悪戦苦闘することになったのはやはりこのiTunesです。これは本当に苦労させられました。iTunesといえば、Macユーザーはもれなく利用しているはずですが、皆さんやはり苦労しているのではないでしょうか…。&lt;/p&gt;&#10;&lt;h2 id="曲のパスをまとめて変更icloudの罠"&gt;曲のパスをまとめて変更…iCloudの罠&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;ファイルの場所を変更した場合、それを反映させるには曲毎のパスを記述したxmlファイルを一気に変更して、変更したものをインポートする&lt;/strong&gt;方法があります。このやり方自体、どうにも筋悪な感が否めませんが、まぁそれでなんとかなっていました。私の場合は40MB近いテキストファイルの編集となりますが、まぁそんなに何回もやることではないので……。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;今回問題を難しくしたのは、Apple Music&lt;/strong&gt;です。Apple Musicに登録すると、どうやらライブラリの曲をiCloudにアップロードしてくれるようで、たとえ手元にファイルがなくても、ストリーミングで再生ができたりします。だから、極論するとファイルを全部消してしまってもストリーミングで聞くことができて、多分そういうことをしている人もいるんじゃないかなと思います。でも、私としてはそれは避けたい。&lt;strong&gt;基本的に、クラウドは信用すべきではない&lt;/strong&gt;と考えます。もちろん便利なサービスはどんどん使えばよいのですけれど、過信は禁物です。データはできる限り手元に置き、誰にも干渉されず、自分で管理できるようにしておくべきです。データをクラウドに保存するとは、畢竟自分の大切なデータの管理権を人に預けるということです。管理権が他人にある以上、いつどうなっても文句は言えません。いえ、文句は言えるかもしれませんが、文句を言ってもデータは返ってきません。&lt;/p&gt;&#10;&lt;p&gt;話が逸れました。閑話休題。クラウドにデータを預けることの危険性についてはいつかまとめて考えをメモしたいと思っていますが、それはこの記事の本題ではありません。今問題となっているのは、&lt;strong&gt;Apple Musicにより、ローカルにないデータもiTunes上に表示されるようになった&lt;/strong&gt;ことです。&lt;/p&gt;&#10;&lt;p&gt;さて、従来であれば、設定を記述したxmlファイルを消去し、その後必要な書き換えを行ったxmlファイルを改めてインポートすれば、曲のパスをまとめて変更することが可能でした。しかし、今回xmlファイルを消去した時点でiTunesを起動すると、&lt;strong&gt;iCloud上にアップロードされている曲がすべてiTunesのライブラリに表示される&lt;/strong&gt;ようになります。そして、この状態でxmlファイルをインポートすると…曲がダブります。すべての曲で、iCloud上にあるものと、ローカルにあるものの両方がライブラリに表示されるようになります。なんということ。…今にして思えば、この時点でiCloud上にあるものだけをすべて削除してしまえばよかったのかもしれません…。が、その時はそこまで頭が回らず、どうしたものかと思いました。&lt;/p&gt;&#10;&lt;p&gt;結局、&lt;strong&gt;一度iCloud上のものも含めてすべて削除することにしました&lt;/strong&gt;。そのうえで、バックアップしていたファイルをすべて、改めて取り込むことにしました。再生回数やプレイリストはリセットされてしまいますけれど、まぁ仕方ないですね。元々、&lt;strong&gt;iTunesで永続的にそういうデータの管理はできないものと、遠い昔に諦めました&lt;/strong&gt;。曲のレーティングとか、頑張るだけ悲しい思いをすることになります。&lt;/p&gt;&#10;&lt;h2 id="カオスの極み"&gt;カオスの極み&#10;&lt;/h2&gt;&lt;p&gt;それにしても、iTunes一つに、あまりにも色々なことをさせすぎていやしないでしょうか。なんだかんだと言いつつ、これだけの機能を曲がりなりにも実装できているのはすごいとも思うのですが、しかし多機能すぎてUIはゴチャゴチャする一方です。そこへApple Musicという新顔が加わったことで、カオス具合に拍車がかかりました。もっと、役割を分けてあげてもいいんじゃないかとも思うのですが…MacはUNIXの仲間なのに、どうにも「大きいことは良いことだ」的な傾向が。&lt;strong&gt;iTunesは、Macの中のWindows&lt;/strong&gt;だと私は思っています。&lt;/p&gt;</description></item><item><title>ReadyNASからのTimeMachine復元で苦労 OSのバージョンは合わせないと</title><link>https://hack-le.com/46112750-2/</link><pubDate>Fri, 27 Nov 2015 11:37:22 +0900</pubDate><guid>https://hack-le.com/46112750-2/</guid><description>&lt;p&gt;やはりSSDだけでは容量が心もとないので、先日 Mac mini 2012 にハードディスクを増設し、Fusion Driveにしました。SSD 480GB + HD 1TBで計1.5TB、必要にして十分な容量です。SSD分が多いので、パフォーマンスも心配ありません。Mac miniのハードディスク増設は、上段の場合ちょっとした作業になのですが、分解も慣れていましたし、Fusion Drive化はすぐに済んだのですが、たいへんだったのはそれからです。&lt;/p&gt;&#10;&lt;h2 id="復元失敗"&gt;復元失敗&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;TimeMachineからの復元に失敗&lt;/strong&gt;しました。復元を開始して、最初はうまくいっているように見えたのですけれど、終わった頃に見てみると画面に進入禁止の中心線を45度傾けたようなマークが。再起動してもダメ。うーん。Cmd+Rで起動して、ディスクユーティリティを開くと、&lt;strong&gt;ディスク容量を見る限りデータは入っている&lt;/strong&gt;みたい…ただ、起動ディスクがなく、起動できない模様。うーん？&lt;/p&gt;&#10;&lt;p&gt;もう一度復元を開始しようとしたら、&lt;strong&gt;バックアップを開けません&lt;/strong&gt;、ファイルが壊れているかも、などと言われてできません。ううん……こんなことは初めてです。考えられる要因がいくつか。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ハードディスクを増設して初めてフュージョンドライブ化した状態&lt;/li&gt;&#10;&lt;li&gt;ReadyNASを用いていたネットワーク経由での復元&lt;/li&gt;&#10;&lt;li&gt;そういえば最新のバックアップが何故か半日前&lt;/li&gt;&#10;&lt;li&gt;OSX Mountain Lionをクリーンインストールした状態からの復元(El Capitan)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;まぁ結論から言うと、&lt;strong&gt;恐らくは復元前と復元先のOSのバージョンが合っていなかったことが原因&lt;/strong&gt;です。とはいえ、今までもそれで復元を実行して、特に問題が起きたことはなかったのですが…まぁ、今までは外付けハードディスクから直接だったのが、今回はReadyNASを使っていたり、ストレージの状態が違ったりと、色々いじっていたので、そういうこともあるのかな、と思いました。&lt;/p&gt;&#10;&lt;h2 id="試行錯誤"&gt;試行錯誤&#10;&lt;/h2&gt;&lt;p&gt;成功に至るまで、アレコレしました。ノートPCのバックアップも同じくReadyNASで取っていたので、現在それで復元できるか実行。これも復元は開始しますが、結果はやはりダメ。容量から察するに、&lt;strong&gt;データ自体は復元されているようなのですが、起動しない。起動ディスクが見つからない&lt;/strong&gt;。そして、改めてもう一度復元しようとすると、バックアップが開けませんというにべもないお言葉。&lt;/p&gt;&#10;&lt;p&gt;最初Mac miniのバックアップが失敗したときは、最新のバックアップが半日前と古かったことから、ひょっとしてバックアップに失敗していて、何か不整合があったのだろうか、とも思ったのですが、二つのバックアップファイルで同じ現象が起きたので、そういう問題ではない。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ディスクの検証をすると正常&lt;/strong&gt;。ちゃんと認識されていますし、Fusion Driveの問題でもなさそうです。&lt;/p&gt;&#10;&lt;p&gt;ネットワーク越しであることで不安定になっているのか、あるいは噂に聞くOSのバージョンが合わないことによる不具合か。USBで使えるバックアップディスクを用意するのも手間ですし、まずはOSのバージョンを合わせて再チャレンジすることにします。&lt;/p&gt;&#10;&lt;p&gt;OSをクリーンインストール後、El Capitanにアップデートしました。ReadyNASも念の為再起動。再度Cmd+Rで起動し、復元を試みます。すると、先ほど「開けません」と言われたバックアップが再び開けるようになっています。そして、復元も開始できる。ひょっとしてひょっとするだろうか、と待つこと数時間。どうかな、と祈るような気持ちで見てみると、今度はうまくいっていました。&lt;/p&gt;&#10;&lt;p&gt;ということで、&lt;strong&gt;今回の悪戦苦闘はOSのバージョンが合っていなかったことが原因&lt;/strong&gt;ということです。今までここで引っかかったことはないのですし、つい先日もクリーンインストール直後のMountain LionからEl Capitanへの復元に成功していたのですが、まぁ前述の通りFusion Drive化やReadyNASの使用など、状況が変わっているので、制約が厳しくなったのか、どうか、まぁわかりませんが、そういうことです。ここに至るまで、実に丸三日（一回の復元で数時間かかりますからねぇ…）。&lt;/p&gt;&#10;&lt;h2 id="timemachineは便利だけれど"&gt;TimeMachineは便利、だけれど&#10;&lt;/h2&gt;&lt;p&gt;苦労しました。最初復元に失敗した時はやや絶望的な気分になりましたが、最終的にはうまくいってよかったです。アレコレと調べている間に、どこかのブログ記事で見かけた「&lt;strong&gt;TimeMachineは最高です。うまくいけば&lt;/strong&gt;」という文言に深く共感した次第。&lt;/p&gt;</description></item><item><title>Raspberry Piがあると簡易Linuxマシンとして使えて良いですね</title><link>https://hack-le.com/46099758-2/</link><pubDate>Wed, 25 Nov 2015 15:41:48 +0900</pubDate><guid>https://hack-le.com/46099758-2/</guid><description>&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00NEDEZWO" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;ext4でフォーマットする必要がありました。そのためにはLinuxのマシンがあると良いですが、サーバーもたてていないし、そのために仮想化でOSをインストールするのも面倒臭いし、どうしたものかな、と思っていたところへ、目に入ったのがRaspberry Pi。これでよかった、という記事です。&#13;&#10;&lt;h2 id="外付けハードディスクをext4でフォーマットする"&gt;外付けハードディスクをext4でフォーマットする&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00CHABREE" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;腑抜けの私は自宅サーバーをやめて、NETGEARのReadyNASを購入しました。これでRAID-5を組んでいるので、物理障害にはある程度強くなっているものの、**ヒューマンエラーの誤削除や論理障害には無力ですから、外付けハードディスクにデータをバックアップ**しなければなりません。**ReadyNASはボタン一つで外付けハードディスクにバックアップすることも可能**で、スケジュール登録もブラウザ上でできますし、とてもお手軽です。cronの書式なんだったかな、とか調べなくてもよいわけです。&#13;&#10;&lt;p&gt;便利なものだなぁと外付けハードディスクを取り付けると、認識しない。あら、と思って調べると、ext3ないしext4でないと認識しない、とかなんとか。本当に？そうなのかなぁ。マウントできないのはわかるけれど、認識してフォーマットくらいはできて然るべきじゃなかろうか。まぁでも、みんな大好きNTFSならともかく、OSX用のHFS+だしなぁなどと思いつつ、&lt;strong&gt;なんにしてもext4にしておくのがよいだろう&lt;/strong&gt;ということで、ext4でフォーマットすることにしました。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、今使っているマシンはMac miniです。OSXでext4は標準的ではありません。&lt;strong&gt;Linuxマシンがあれば話は早い&lt;/strong&gt;のですが、そんなもの…と思って机の端を見ると、&lt;strong&gt;Raspberry Pi&lt;/strong&gt;が転がっています。話が早い。&lt;/p&gt;&#10;&lt;p&gt;というわけで、Raspberry Pi に外付けハードディスクを繋げて、「&lt;a class="link" href="//hack-le.com/45232735-2/" &gt;Ubuntu 15.04 で2TB超え(3TB)のHDをマウントする(CUI) : 或る阿呆の記&lt;/a&gt;」の手順にしたがい ext4 でフォーマットしました。&lt;/p&gt;&#10;&lt;p&gt;フォーマット後、ReadyNASに外付けハードディスクを取り付けて、ブラウザで確認すると…うーん、認識していない。おかしいなぁそれならばと、ReadyNASをおもむろに再起動、ブラウザで再度確認。認識している。よかったよかった。…ひょっとして、わざわざRaspberry Piでフォーマットせずとも、再起動すれば認識くらいはしたのではなかろうか。まぁ、今さら確認する気力もないし、&lt;strong&gt;ext4であれば万事OKなのは間違いない&lt;/strong&gt;のだから、よしとしましょう。&lt;/p&gt;&#10;&lt;h2 id="実用上のraspberry-pi"&gt;実用上のRaspberry Pi&#10;&lt;/h2&gt;&lt;p&gt;今回のケースは微妙な感じではありましたが、&lt;strong&gt;ネイティブのLinuxマシンとして考ると、Raspberry Pi を置いておくのは実用上もけっこういいのかな&lt;/strong&gt;と思ったりしました。ReadyNASも、最初はSSHでrootログインできるDebianマシンだと喜んだものの、いざ触ってみると色々制限があるし、本業のNASが疎かになっても嫌だしで、あまりいじる気にもならなかったので、&lt;strong&gt;省スペースで省エネで、それなりに働いてくれるRaspberry Piは、Linuxの自宅サーバー亡き今案外役に立ってくれそう&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;NASはNASで楽だけれど、遊べるマシンが一台はあると楽しい。&lt;/p&gt;</description></item><item><title>PCの拡張性は嬉しい Mac mini のSSD換装、さらにHD増設予定</title><link>https://hack-le.com/46095514-2/</link><pubDate>Tue, 24 Nov 2015 17:01:31 +0900</pubDate><guid>https://hack-le.com/46095514-2/</guid><description>&lt;p&gt;Mac mini 2012のSSDを、256GBのものから480GBのものに換装しました。さらにHDの増設も見据えています。確かに一般的とは言い難いかもしれませんが、PCの拡張性は有難いものです。実際に増設した後の記事は→「&lt;a class="link" href="//hack-le.com/46496771-2/" &gt;Fusion Driveの感触…オススメできる人、できない人&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="imacよりssd"&gt;iMacよりSSD&#10;&lt;/h2&gt;&lt;p&gt;Mac miniはきっとどうせアップデートされないし、されたところでデュアルコアです。ということで、&lt;strong&gt;最近iMacを買うかどうか割と本気で検討&lt;/strong&gt;していました。30万近い出費。もちろん好きなコンピュータのことですから、惜しいわけではないのですけれど、そうは言っても必要のない出費は控えたい。今のMac miniにもそれほど不満があるわけでもないしな、でもそろそろ何か新しくしたいな…とそんなことを考えていた折にふと思いついたのが、&lt;strong&gt;SSDを大容量のものに換装する&lt;/strong&gt;ことです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00NPIYKFK" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;これは良い思いつきでした。すぐに**Sandiskの480GBのSSD**を注文し、換装しました。大容量なので、Parallels Desktopのデータも気兼ねなくSSD内に置くことができます（これまでは外付けハードディスク上に置いていた）。&#13;&#10;&lt;h2 id="やっぱりローカルのハードディスクも欲しい"&gt;やっぱりローカルのハードディスクも欲しい&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;SSDの購入に合わせてNASも購入し、部屋の外にシステムで必要なもの以外のデータを置くことで、部屋からハードディスクを追い出す&lt;/strong&gt;ことことができました。こうしてみると、外付けハードディスクの音というのは案外大きかったのだなと思います。今、とても静かです。まぁ、足元では不具合起きまくりのガラポンTVがまだガリガリ鳴らしているのですけれど…（ガラポンTVは今年一番後悔した買い物）。&lt;/p&gt;&#10;&lt;p&gt;ここで一つ問題が。iTunesです。&lt;strong&gt;iTunesのデータをNASに置いて、sambaでやりとりして管理することも可能なのですが、過去の運用実績だと、これが非常に不安定&lt;/strong&gt;でした。誤ってマウントしていない状態でiTunesを起動すると、iTunesのデータ置き場が勝手に変更されてしまうし…基本的にはデータをローカルに置いてやるほうが、運用上の手間なんかを考えると、楽です。&lt;/p&gt;&#10;&lt;p&gt;しかしそうなると、SSD480GBも若干心許ない。実際、iTunesだけで音楽、アプリのデータが合わせて170GB近いため、これを入れてしまうとカツカツになります。しかも、ほとんどは使われることのないデータですから、これをSSDに入れてしまってはもったいない…さりとて、ここで外付けハードディスクを導入しては本末転倒。&lt;/p&gt;&#10;&lt;p&gt;色々考えた末、&lt;strong&gt;内蔵ハードディスクを増設し、フュージョンドライブにしてみるか&lt;/strong&gt;と考えました。内蔵ならば、多分音もそんなに気にならないと思います。SSD部分が480GBもあれば、必要なものはほとんどSSDに入るでしょうから、パフォーマンスの低下もあまり考えなくてよいでしょう。それに、かねてから試してみたいと思っていました。ちょうどよい機会です。内蔵ハードディスク自体は、昔SSDと換装した時の1TBのやつが、まだ残っています。&lt;/p&gt;&#10;&lt;p&gt;というわけで、&lt;strong&gt;増設用のフレキシブルケーブルを注文&lt;/strong&gt;しました。これが非常にお高くて、何ヶ月か前に検討したときはAmazonでも5000円くらいだったのですが、これがいつのまにか品切れとなっており、現在は6000円の商品があるのみです。従来のケーブルだと、ベイが上段用と下段用でわかれるのですが、本製品は上下段両用だそうです。ほんまかいな。しかし、6000円はかなり高価。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B009Y5IQH6" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;といって、2000円くらいのノーブランドのやつは不安です。ストレージに繋がる部分ですから、あまり高価でも嫌ですが、といって安すぎるのも…いえ、実績があればよいのですけれど、Amazonのレビューなどを見る限りその実績が不安です。&lt;/p&gt;&#10;&lt;p&gt;もう少し安いのはないかなぁと、色々検討した末、Mac用品の通販でお馴染みのVintage Computerさんで「&lt;a class="link" href="http://www.vintagecomp.com/shop/shopexd.asp?id=3447" target="_blank" rel="noopener"&#10; &gt;Mac mini 2011/2012/2014用 HDD/SSD増設キット（上段ベイ用）&lt;/a&gt;」を購入することにしました。&lt;strong&gt;私のMac miniは初期型なので、SSDが下段についているので、上段用のものを購入&lt;/strong&gt;します（後期型はデフォルトが上段です。分解すればわかりますが、増設は後期型のもののほうが楽です）。海外通販なので関税がかかり、かつ送料も高くなりますが、それ含めても4,324円で購入することができました。5,000円と比べると、手間など考えてAmazonでいいかとも思いますが、6,000円と比べると、こちらのほうがよいかなと思いました。まぁ、それでもAmazonのほうが楽でよかろうという人も多いと思いますが。&lt;/p&gt;&#10;&lt;h2 id="拡張は楽しい"&gt;拡張は楽しい&#10;&lt;/h2&gt;&lt;p&gt;現在、ケーブルが届くのを待っています。iMacを購入すれば30万円の出費となるところでしたが、SSD、ケーブル、NASと合わせても45,000円くらいでおさまりました。しかも、こちらのほうが私の場合はよりよいパフォーマンスが提供されるように思いますし、なによりやっていて楽しい。マシンの新調もそれはそれで素晴らしくはあるのですが、まぁ金払って終わりといえばそうですから、やはり&lt;strong&gt;既存のものを拡張したほうが楽しい&lt;/strong&gt;。愛着もありますしねぇ。なにしろMac mini 2012のCPUはCore i7のクアッドコアで、いまだ第一線で十分戦えるものですから、まだまだ活用したいところです。&lt;/p&gt;&#10;&lt;p&gt;昨今はどんどんユーザーのいじれるところをなくしていく流れではありますけれど、やはりこういう&lt;strong&gt;拡張性というのは、実用的で、かつ楽しいもの&lt;/strong&gt;なので、残してほしいなぁと思います。まぁ、メーカーとしてはそれじゃ商売にならんよ、ということなのかもしれませんが…。&lt;/p&gt;</description></item><item><title>El Capitanのせい？メール.app が落ちる…恐らくはリダイレクト設定のために</title><link>https://hack-le.com/46072384-2/</link><pubDate>Mon, 23 Nov 2015 21:14:37 +0900</pubDate><guid>https://hack-le.com/46072384-2/</guid><description>&lt;h2 id="メールappが落ちる"&gt;メール.appが落ちる&#10;&lt;/h2&gt;&lt;p&gt;私が現在メインで使っているメーラーはAirmail 2なのですが、Airmail 2はAPOPをサポートしていないので、職場のAPOPのメールを受信するためだけにメール.appを使用しています（Thunerbirdに戻ろうかなぁと最近考え中…UIはよいのですが、Airmail 2は日本語の検索にも難があります「&lt;a class="link" href="//hack-le.com/45111005-2/" &gt;Macのメーラー Airmail 2 の使い勝手 : 或る阿呆の記&lt;/a&gt;」」）。&lt;/p&gt;&#10;&lt;p&gt;さて、そんなメール.appですが、どうも&lt;strong&gt;El Capitanにしてから様子がおかしい&lt;/strong&gt;。あまり使わないので、しばらく気づかず、まぁEl Capitan問題ないんじゃないかなとレビューし（「&lt;a class="link" href="//hack-le.com/45826350-2/" &gt;OSX 10.11 El Capitan インストール フルスクリーン関係は良くなったように思える : 或る阿呆の記&lt;/a&gt;」）、メール関係で運が悪くなければ大丈夫と書いたのですが、どうも私が運が悪かったということか。&lt;/p&gt;&#10;&lt;h2 id="調査リダイレクトが原因か"&gt;調査…リダイレクトが原因か&#10;&lt;/h2&gt;&lt;p&gt;症状としては、&lt;strong&gt;起動するとすぐに落ちる&lt;/strong&gt;。chmodコマンドにより、 &lt;strong&gt;.mboxファイルの権限をすべてリードオンリーにしたら落ちなくなった&lt;/strong&gt;ので、どうも何かのメールが悪さをしているように思えます。色々いじっていると、先に述べた職場のAPOPのメールをAirmail 2で使えるアドレスにリダイレクトしているのですが、これが悪いんじゃないか、と。どうもそんな気がします。ちゃんと、検証していませんが。というのは、もう&lt;strong&gt;面倒臭くなったので、メールをすべて消去し、ルールもすべてなくしてしまった&lt;/strong&gt;のです。人によってはそんなことは絶対にできないと考えるでしょうが、私は元々メールというのが好きではなく、メールのログがずっと溜まり続けていることに嫌悪を覚えるタチですから、まぁこれもいい機会だな、くらいの気持ちでした。そもそもPOPが好きではない。&lt;/p&gt;&#10;&lt;p&gt;といっても、直近のメールまで消してしまうとさすがに不都合がありますが、ノートパソコンにあるメール.appは無事なので（こっちはリダイレクト設定をしていない）、まぁそちらにログがあるから、いざとなればなんとでもなろう、という判断です。本当にいざとなれば、TimeMachineもありますし。&lt;/p&gt;&#10;&lt;h2 id="メールアプリのトラブルは痛い人も多かろう"&gt;メールアプリのトラブルは痛い人も多かろう&#10;&lt;/h2&gt;&lt;p&gt;さて、&lt;strong&gt;すべてキレイにしてしまったらさすがに直りました&lt;/strong&gt;。しかし、メール消失事件といい、こういったメールアプリのトラブルは、致命的であると考える人は多いのではないでしょうか。特に仕事関係の人は。まだまだPOPメールを利用せざるを得ない環境は多いですから、データの消失は人によっては致命傷になります。まぁ、そのためにも日頃からバックアップが大切です。でも、いざ何かことがあると、復元が面倒臭くて結局やらなかったりするのですが。&lt;/p&gt;&#10;&lt;h2 id="thunderbirdに戻ろうかな"&gt;Thunderbirdに戻ろうかな…&#10;&lt;/h2&gt;&lt;p&gt;Airmail 2はUIは良いと思うのですが、先に述べたとおりAPOPに対応していない為、職場のメールの必要上メール.appを使わざるを得なく、また検索に大きな問題を抱えているので、常用にはどうかという気持ちがあります。昔はThunderbirdを使っていました。いつぞや、4GBしかメモリがないMBAで1.2GBのメモリを使用しているのを見て、衝動的にアンインストールしてしまったのですが（私はそういうことがよくあります…非常に突発的に行動するのです）、まぁあれから随分と時も経っていますし、また使ってみるのも一興かもしれません。&lt;/p&gt;</description></item><item><title>ノート + タブレット は ノート だと思うよ…OSX搭載iPadの否定について</title><link>https://hack-le.com/46045571-2/</link><pubDate>Sun, 22 Nov 2015 00:11:51 +0900</pubDate><guid>https://hack-le.com/46045571-2/</guid><description>&lt;p&gt;最近Surface 4の話をちょくちょく見ます。&lt;strong&gt;2in1&lt;/strong&gt;という言葉を見かけるようになって久しい。タブレットとしてもノートPCとしても使える、という触れ込みです。一方で、&lt;strong&gt;タブレット端末を世界中に流行らせたAppleは、OSXとiOSを融合させることを頑なに否定&lt;/strong&gt;しています。&lt;/p&gt;&#10;&lt;h2 id="否定するapple押し出すmicrosoft"&gt;否定するApple、押し出すMicrosoft&#10;&lt;/h2&gt;&lt;p&gt;そりゃそうだろうなぁと思います。&lt;strong&gt;2in1なんて言いますが、タブレットとノートを合体させたら、それは結局ノート&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;Appleはタブレットとスマートフォンで今の地位に上り詰めた企業ですし、Microsoftはパソコンで今に至る企業ですから、結局はノートになってしまうような ノート + タブレットをAppleがやりたがらないのは当然ですし、Microsoftがやりたがるのも当然といえます。&lt;/p&gt;&#10;&lt;h2 id="ipadとmacのミックスなんて誰も欲しがらないは統計的に恐らく正しい"&gt;「iPadとMacのミックスなんて誰も欲しがらない」は統計的に恐らく正しい&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;OSXとiOSを合体させたがっている人は、まず間違いなくMacユーザー&lt;/strong&gt;ではないでしょうか。Macを使わずにiPadにOSXが載ればいいのに、なんて思っている人、多分いないと思います。その意味で、「&lt;a class="link" href="http://jp.techcrunch.com/2015/11/17/20151116cook-throws-shade-at-surface-book/" target="_blank" rel="noopener"&#10; &gt;Appleのティム・クック、「iPadとMacのミックス製品など誰も欲しがらない」とOS統合をはっきり否定 | TechCrunch Japan&lt;/a&gt;」は正しいと言えます。&lt;strong&gt;iPadユーザーという母集団に比べれば、Macユーザーなど誤差に過ぎない、という前提にたてば&lt;/strong&gt;、ですけれど。なお、私はその誤差の一部です。&lt;/p&gt;&#10;&lt;h2 id="機能を削ったところに最適化の肝がある"&gt;機能を削ったところに最適化の肝がある&#10;&lt;/h2&gt;&lt;p&gt;まぁ、実際iPadでOSXが使えたらなぁ、とよく思います。だからこそ、iPadでParallels Accessを起動して、デスクトップのMac miniにリモートアクセスなんてこともしています。仮想でWindowsを動かせば、Windowsも使えます。けっこう、便利なものです。でも、これは結局 &lt;strong&gt;「タッチに最適化したノートPCが欲しい」という欲求&lt;/strong&gt;なんだろうなと思います。Windowsタブレットを好んで選ぶ人も、結局タブレットではなく便利なノートPCが欲しいのでしょう。&lt;/p&gt;&#10;&lt;p&gt;タブレットの肝は、タッチインタフェースに最適化されていることももちろんですが、&lt;strong&gt;PCに比べて非常に強い制限がかかっていること&lt;/strong&gt;もあるでしょう。原則として一つのアプリが全面になって起動するとか、通常ディレクトリ構造を意識させないような作りであるとか。その制限がわかりやすい一方で、人によっては不自由でもあり、PCを愛用する人間にとってその不自由さが煩わしくもある。でも、&lt;strong&gt;だからといって機能をPCに近づけると、それはもうPC&lt;/strong&gt;です。いくらスペックが十分PC用のOSを動かせるようなものであったとしても、PCにするわけにはいかないでしょう、タブレットで成功したAppleとしては。逆に、MicrosoftとしてはなんとかPCとして勝負したいところでしょう。&lt;/p&gt;&#10;&lt;p&gt;そんなようなことを考えていると、朝令暮改を得意とするAppleでも、iOSとOSXの融合は、まずないのだろうなと思います。吸収なら、ありえるかもしれませんが。&lt;/p&gt;&#10;&lt;p&gt;ところで全然関係ありませんが、「ノート」ってずっと見てるとゲシュタルト崩壊してきます。&lt;/p&gt;</description></item><item><title>Chrome → Safari 移行を試みて二ヶ月、結局Chromeに帰ってきてしまいました</title><link>https://hack-le.com/45991995-2/</link><pubDate>Wed, 18 Nov 2015 00:16:55 +0900</pubDate><guid>https://hack-le.com/45991995-2/</guid><description>&lt;h2 id="chromeに戻ってきました"&gt;Chromeに戻ってきました&#10;&lt;/h2&gt;&lt;p&gt;Chromeに飽きてきた、と二ヶ月ほど前からSafariへの移行を試みていました。別段悪くもないし、新鮮味もありしばらくメインで使おうかと思いました、が。なんだかんだで、Chromeに戻ってきてしまいました。&lt;/p&gt;&#10;&lt;h2 id="safariで面倒だったこと"&gt;Safariで面倒だったこと&#10;&lt;/h2&gt;&lt;p&gt;細かい不満点は色々あったものの、戻るきっかけになったのは、&lt;strong&gt;Safariだと挙動に問題のあるサイトが複数あった&lt;/strong&gt;ことでしょうか。新しくタブが開けないことや、アカウントの新記録登録およびログインできないサイトなどがありました。そのたびにChromeを立ち上げるのは、なんとも面倒なものです。&lt;/p&gt;&#10;&lt;p&gt;恐らく、設定を変更すればSafariでも対応できるのではないかと思います。しかし、いちいち調べるのも面倒臭い。私は元々カスタマイズが好きなタチではありません。Windowsを使っていたときも、好きなソフトは最初に入れてからあまり手をいれる必要のないソフトでした。WindowsユーザーやLinuxユーザーには自分用に環境をカスタマイズを信条にする人も多いですが、そうでない人間にとってMacはちょうどよいかもしれません…合いさえすれば、ですが。と言いつつ、iTunesなどは昔ながらの3カラム形式に直したりしていますが…本当はiTunesを使わなくてもよいのが一番なのですけれど、同期の問題もあるのでそういうわけにもいかず。&lt;/p&gt;&#10;&lt;p&gt;話がそれました。まぁとにかく、Safariが無くても困りませんが、Chromeが無いと困るという場面がよくあったのです。それに、&lt;strong&gt;Safariにしてよかったと思ったことが、特に無い&lt;/strong&gt;。バッテリーの持ちがよくなったなんてこともないし（まぁSafariだけを動かしているわけではありませんから仕方がない）、メモリも恐ろしいほど使うし。4GBのMacBook Airで、いつぞやはSafariだけで3GB近く使用していたことがあり、さすがにどうかと思いました。眠らせておくよりもあるだけ使うという思想なのでしょうが、いくらなんでも全体の75%を使われるとちょっと気持ちが悪い。さながらSafaribookの様相です。同じくメモリのバカ食いで有名なChromeでも、せいぜい1.5GBくらいなのですが。その割に、レスポンスがChromeに比べるとワンテンポ遅い。&lt;/p&gt;&#10;&lt;p&gt;冒頭にも述べた通り、そんなに悪いブラウザではないのですけれど。結局、またまたChromeに戻ってきてしまいました。&lt;/p&gt;</description></item><item><title>Raspberry Pi で I2C を使用する準備</title><link>https://hack-le.com/45923317-2/</link><pubDate>Tue, 17 Nov 2015 11:34:47 +0900</pubDate><guid>https://hack-le.com/45923317-2/</guid><description>&lt;p&gt;Raspberry PiでI2C機器を使う記事で、毎回準備の段階についてあれこれ書くのは煩わしいので、記事を用意することにしました。本記事では、I2Cの概要と、実際にRaspberry Piで使う際に必要なことをまとめます。&lt;/p&gt;&#10;&lt;h2 id="i2cについて"&gt;I2Cについて&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Piで電子工作を始めると、I2Cという言葉をやたらと見るようになりますが、とっかかりの段階ではどうにも謎めいた言葉なので、まずI2Cについてから書きます。&lt;/p&gt;&#10;&lt;p&gt;まず、Raspberry Piで標準的に外部の機器とやり取りしようと思ったら、GPIOを利用します。&lt;strong&gt;GPIOピンは 0 or 1 のデジタル信号を入出力&lt;/strong&gt;します（1は具体的には3.3V）。LEDをチカチカさせるだけならそれでもよいのですが、たとえば温度センサから温度を読み取りたいとなると、それだけだとちょっと厳しいものがあります。そこでI2Cを使います。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;I2CはInter-Integrated Circuitの略&lt;/strong&gt;で、&lt;strong&gt;外部デバイスとやり取りするためのプロトコルの一つ&lt;/strong&gt;です &lt;strong&gt;。データ通信とクロック送受信の2本線&lt;/strong&gt;でやり取りします（実際は、他に電源用にVとGNDで2本使います）。非常にシンプルなプロトコルといえます。しかも、線を繋いでいくと機器を数珠繋ぎに接続できます。少ない線で多くのデバイスとやり取りできるわけです。やってみるとこれがとてもお手軽で有り難い。&lt;/p&gt;&#10;&lt;p&gt;しかし、データ通信を1本の線で行ういわゆる半二重通信のために、&lt;strong&gt;データの転送速度という点には制約&lt;/strong&gt;があり、あまり早くはありません。なので、ADコンバータや液晶ディスプレイのように、転送速度が必要なものは、&lt;strong&gt;4本の線を用いて全二重通信ができるSPI(Serial Peripheral Interface)&lt;/strong&gt; という通信方法が用いられるものがけっこうあります。&lt;/p&gt;&#10;&lt;p&gt;とはいえやはり線の少ないI2Cのシンプルさは使いやすく、環境系のセンサなどはI2Cが多いように思えます。実際、よく使うことになるでしょう。Raspberry Piにおいては、GPIOピンの一部を、I2C用のピンとして割り当てることができます。&lt;strong&gt;本記事では、その割り当て方と、割り当てた後に機器と接続して確認するまでの手順&lt;/strong&gt;を書きます。&lt;/p&gt;&#10;&lt;h2 id="ソフトウェアの準備"&gt;ソフトウェアの準備&#10;&lt;/h2&gt;&lt;p&gt;ここでは、3.18以降の新しいカーネルを使った、対話的な方法について記述します。3.10以前の古いカーネル、あるいは非対話的に有効化する場合は、後述の参考記事を参照。&lt;/p&gt;&#10;&lt;h3 id="カーネルのバージョンを確認"&gt;カーネルのバージョンを確認&#10;&lt;/h3&gt;&lt;p&gt;Raspberry PiでI2Cを使えるようにします。&lt;strong&gt;カーネルのバージョンによってやり方が変わるので、古い本を参考にしている人は要注意&lt;/strong&gt;です。uname -r コマンドでカーネルのバージョンがわかります。3.18以降か、3.10以前かが境目です。バージョンが古い場合、rpi-updateで最新版にアップデートします。&lt;/p&gt;&#10;&lt;pre&gt;`$ uname -r&#13; $ sudo rpi-update&#13; $ uname -r&#13; -&gt; 3.18 以降であることを確認&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;それにしても、ラズパイ系のコマンドはだいたいraspi-hogehogeが多いのに、なぜこれだけrpi-なんでしょう。&lt;/p&gt;&#10;&lt;h3 id="raspi-config-からi2cを有効化"&gt;raspi-config からI2Cを有効化&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Raspberry Piはデフォルトの状態ではI2Cが有効化されていません&lt;/strong&gt;。後述のピン配列を見るとわかるのですが、I2C通信のために使われるピンは、デフォルトではGPIOピンとして機能しています。GPIOピンが多いほうがよかろうということなんでしょうね。ですので、&lt;strong&gt;有効化させる必要&lt;/strong&gt;があります。古いカーネルでは設定ファイルをあれこれ変更する必要がありましたが、現在はraspi-configで簡単に有効化させられます。&lt;/p&gt;&#10;&lt;p&gt;raspi-configは対話的なコマンドです。最初に領域拡張やタイムゾーンの設定などを行うと思いますが、そのときについでにやってしまうと手間が多少省けます。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo raspi-config&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;「8 Advanced Option」→「A7 I2C」より、I2Cを選択して、有効化させます。デフォルトで有効化する？とか色々聞かれますので、Yesと答え、終わったら再起動です。&lt;/p&gt;&#10;&lt;h3 id="ソフトウェアのインストール"&gt;ソフトウェアのインストール&#10;&lt;/h3&gt;&lt;p&gt;I2C機器とのやりとりで使うだろうソフトウェアをインストールします。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo apt-get install i2c-tools python-smbus&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="参考記事"&gt;参考記事&#10;&lt;/h3&gt;&lt;p&gt;参考にしました。ありがとうございます。また、古いカーネルで行う方法、非対話的な方法については、下記記事が参考になります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.ymyzk.com/2015/02/enable-raspberry-pi-i2c/" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi の I2C を有効化する方法 (2015年版) - 意識低い開発者のBlog&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.ymyzk.com/2014/02/raspberry-pi-i2c/" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi の I2C を有効化する方法 (旧版) - 意識低い開発者のBlog&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://qiita.com/masato/items/f6d485c24205564c9adb" target="_blank" rel="noopener"&#10; &gt;RaspberryPi - Raspberry Pi 2とセンサーデータで遊ぶための初期設定 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ハードウェアの準備"&gt;ハードウェアの準備&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Piと導線があればできます。現実的には、ジャンパワイヤとブレッドボードが第一歩になるでしょう。&lt;/p&gt;&#10;&lt;h3 id="ケーブルの準備"&gt;ケーブルの準備&#10;&lt;/h3&gt;&lt;p&gt;ケーブルを準備します。Raspberry Piで使うには、オス-メスのジャンパワイヤとブレッドボードを使うのが一番簡便でしょうか。まぁ、電気的に繋がればなんでもよいです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00P9BVKOK" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00DSKCS68" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h3 id="配線の確認"&gt;配線の確認&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;I2C機器との接続で使うRaspberry Piのピンは、電力供給用のVとGND、およびデータ通信用のSDAとクロック信号のSCLの4本&lt;/strong&gt;です。Raspberry Piでは、&lt;strong&gt;3.3Vおよび5Vの出力が可能&lt;/strong&gt;です。使用する機器によって使用する電圧のピンを変えることになりますが、まぁ&lt;strong&gt;だいたい3.3Vを使う&lt;/strong&gt;ことになると思います。5Vを使う場合、データシートより耐電圧が5V以上であるかどうかを確認します。&lt;/p&gt;&#10;&lt;p&gt;Raspberry Pi は、初代かバージョン2かでピン配列が違います。旧型モデルでは26ピン、2ではさらに拡張された40ピンです。配置は「&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;」にあるとおり。&lt;strong&gt;I2Cで使われるところは一緒&lt;/strong&gt;です。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;img alt="300px-Pi-GPIO-header" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/d/7db32eaf.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;引用元：&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;左側のPin3,5がデータ通信、クロック用のピンで、電源用に3.3Vまたは5Vのピンと、GNDのピンのどこかを使うことになります&lt;/strong&gt;。前述のとおり、だいたいは 3.3V を使うと思います。&lt;/p&gt;&#10;&lt;h3 id="接続と確認"&gt;接続と確認&#10;&lt;/h3&gt;&lt;p&gt;準備したケーブルを用いて、Raspberry PiとI2C機器を実際に繋げます。通常ArduinoなどでI2C機器を使うときは、&lt;strong&gt;プルアップやプルダウン&lt;/strong&gt;が必要であったりするようですが、&lt;strong&gt;Raspberry Piでは基板上にそれらが実装されているので、特に準備する必要はありません&lt;/strong&gt;（参考：「&lt;a class="link" href="http://openrtm.org/openrtm/ja/content/pirt-unit_with_i2cdevices" target="_blank" rel="noopener"&#10; &gt;PiRT-UnitによるI2Cデバイスの利用 | OpenRTM-aist&lt;/a&gt;」、「&lt;a class="link" href="http://d.hatena.ne.jp/hnw/20150607" target="_blank" rel="noopener"&#10; &gt;Raspberry PiのGPIOは起動直後から内部プルダウンされている - hnwの日記&lt;/a&gt;」）。なおプルアップというのは、入力がないときに電位がHighになるような配線で、「&lt;a class="link" href="http://www.wdic.org/w/SCI/%E3%83%97%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97" target="_blank" rel="noopener"&#10; &gt;プルアップ ‐ 通信用語の基礎知識&lt;/a&gt;」の解説がわかりやすいと思います。逆にLowに固定するものは&lt;strong&gt;プルダウン&lt;/strong&gt;と呼ばれます。周囲の環境などからくるノイズによる意図しない入力が発生しないようにする、安定化の術ですね。&lt;/p&gt;&#10;&lt;p&gt;さて、実際に接続したら、Raspberry Piで認識されているかどうかを以下のコマンドで確認します。&lt;/p&gt;&#10;&lt;pre&gt;`$ i2cdetect -y 1&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;&lt;strong&gt;i2cdetect&lt;/strong&gt;コマンドにより、I2Cデバイスを見つけられます。-yというのは、非対話的なモードでというオプションで、1は1chのI2Cバスでということです。最初の頃の古いRaspberry Piだと、0chを使うものがありますが、今はまず1chと考えてよいでしょう。I2Cデバイスは、&lt;strong&gt;7ビットのスレーブアドレス&lt;/strong&gt;で表現されます。つまり、最大7ビット分のデバイスを接続できるということです。SDA、SCLをそれぞれ数珠つなぎにすれば、複数台認識され、それぞれのデバイスに割り当てられているスレーブアドレスより個別に制御できます。&lt;/p&gt;</description></item><item><title>やはり私には必要なかったかな、ガラポンTV</title><link>https://hack-le.com/46013369-2/</link><pubDate>Mon, 16 Nov 2015 13:20:19 +0900</pubDate><guid>https://hack-le.com/46013369-2/</guid><description>&lt;h2 id="どうにも使いづらい"&gt;どうにも使いづらい&#10;&lt;/h2&gt;&lt;p&gt;コンセプトは良いと思いますし、最初は物珍しさもあって使っていたガラポンTVですが、最近は置物化しつつあります。&lt;strong&gt;気が付くと録画が止まっている&lt;/strong&gt;ということがちょくちょくありますし &lt;strong&gt;（再起動後の録画の復帰もやたら時間がかかる…）、唐突に落ちてしばらくアクセスできなくなったり&lt;/strong&gt;（しかも復帰までが長い）、&lt;strong&gt;再生中の番組が途中で止まったり&lt;/strong&gt;、&lt;strong&gt;レビュー投稿に失敗&lt;/strong&gt;したりと、ハードウェアとソフトウェア共にお世辞にも安定しているとは言い難いです。突然&lt;strong&gt;多重ログインですログインしなおしてくださいと言われることもままあります&lt;/strong&gt;（ずっと同じPCで見ているのですが…）。&lt;strong&gt;Webアプリのレスポンスも悪く&lt;/strong&gt;、メニュー選択や検索の実行毎に、一息待たなくてはいけません。基本的なところが使いづらくて、なんだかアクセスするのが億劫になってきました。&lt;/p&gt;&#10;&lt;h2 id="ガラポイントは何のために"&gt;ガラポイントは何のために&#10;&lt;/h2&gt;&lt;p&gt;いくつかの機能の有効化に、ガラポイントなるポイントが必要なのですが、これは商売気なんでしょうか？あまり使いやすいとは言えないのに、何故わざわざ自らに枷を付けるのか、よくわかりません。倍速再生や広告非表示はオプションとも言ってもよいのかなぁとも思いますが、自動お気に入りなどは最初から出来て然るべきようにも思います。番組をそれなりに多く見ていれば、まぁそんなに困ることはないのですが、そもそもベースの機能が不安定なので、「そんな余裕かましてる場合じゃなかろう」という気持ちがだんだん出てきました。このポイント制度が、利益には繋がっているようには思えませんが、続けていることは一応利益にはなっているのでしょうか…。&lt;/p&gt;&#10;&lt;p&gt;…などと書き連ねていたところで知ったのですが、最近プレミアム機能なる&lt;strong&gt;月額料金制度&lt;/strong&gt;ができたのですね。これを支払うことで、ガラポイントを貯めずに機能を有効化することができるようです。なるほど、こういう商売がしたかったわけですか。&lt;/p&gt;&#10;&lt;p&gt;商売としてはわかりますが、ガラポンTVはそれ自体がそれなりの価格のする機器です。ベースの機能が満足にいっていないように思える現状では、正直なところあまり良い印象はありません。&lt;/p&gt;&#10;&lt;h2 id="オススメしません"&gt;オススメしません&#10;&lt;/h2&gt;&lt;p&gt;せっかくあるものではありますし、禄に使わずに売ってしまうのもつまらないし、コンセプトは面白いのですから、なんとか自分にとって有効活用できる使い方があるのではないかと模索しています。ですが、今のところは持て余しているというのが正直な感想です。購入して三ヶ月かそこらですが、私の結論としては、&lt;strong&gt;人にはオススメしません&lt;/strong&gt;し、&lt;strong&gt;後継機が出ても買わない&lt;/strong&gt;でしょう。&lt;/p&gt;</description></item><item><title>Macでファイル共有の悩み…文字コード（濁点）、sambaの遅さ、iSCSIの対応</title><link>https://hack-le.com/46001270-2/</link><pubDate>Sun, 15 Nov 2015 10:40:03 +0900</pubDate><guid>https://hack-le.com/46001270-2/</guid><description>&lt;p&gt;HPのMicroserverが逝ってしまいましたので、代替のサーバーを考えていましたが、今時LAN内で必要なサーバーといえばせいぜいファイルサーバーと、LAN内DNSくらいではないかという考えから、あまりアレコレと自宅サーバーを頑張る時代でもなかろうとNASを購入しました。&lt;/p&gt;&#10;&lt;h2 id="readynas-104-を買いました"&gt;ReadyNAS 104 を買いました&#10;&lt;/h2&gt;&lt;p&gt;NASの入門機として名高い&lt;strong&gt;NetgearのReadyNAS 104というマシンで、4台の3.5インチハードディスクを挿入出来ます&lt;/strong&gt;。NASとして既に完成されており、手軽にハードウェアレベルでRAIDが扱えますし、あくまでNAS目的に組まれたマシンですから消費電力も控えめです。最初から&lt;strong&gt;TimeMachineサーバーとして機能することも魅力的&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;なにより、&lt;strong&gt;内部的にはDebian&lt;/strong&gt;であるらしく、究極的にはDebianで出来ることは大概出来てしまうようで、この自由度の高さは嬉しい誤算でした。NASなんていうのは、Webサーバー経由で簡単な設定の操作しかさせてくれまいと思っていたのですが、&lt;strong&gt;普通にsshでrootログインできてしまい&lt;/strong&gt;、そんなに自由にさせてくれるのかと少し感動してしまいました。リソースに気をつけさえすれば、ちょっと遊べるLinuxマシンということで、これが&lt;strong&gt;2万円程度と考えると非常にリーズナブル&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="macのファイル共有はちょっと鬼門"&gt;Macのファイル共有はちょっと鬼門&#10;&lt;/h2&gt;&lt;p&gt;たいへん良いマシンを手に入れたと思いますが、マシンの問題とは別に、Macのファイル共有はなかなか苦労があります。一昔前の話を聞いていると、随分良くなったのではないかと思うのですが、それでも色々とハマりどころがあり、しかもデータという大事な資産に密接に関わってくるところですから、慎重にならなくてはなりません。&lt;/p&gt;&#10;&lt;h3 id="sambaがなにか遅い"&gt;sambaがなにか遅い&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;SMBはファイル共有では定番のプロトコル&lt;/strong&gt;であり、当然Macでもsambaが使用できるのですが、これが何故か妙に遅い。遅いというか、レスポンスが悪い。Windowsでは、まるでローカルのファイルのように扱えるのに、&lt;strong&gt;Macではフォルダを開くだけでもワンテンポ遅れが生じることがままあります&lt;/strong&gt;。ファイルの転送速度も微妙なもので、まぁそれでも&lt;strong&gt;大きなファイルであれば10MB/sくらいは出ている&lt;/strong&gt;ようなのですが、有線LANのギガビットイーサネット、もっと速度が出ても良いのではないかと思います。きちんとチューニングすればもっと早くなるのではないかと思うのですが、sambaの設定は不勉強で、どうしたらよいものか、なかなか難しいです。&lt;/p&gt;&#10;&lt;p&gt;表示のレスポンスについては、ファイラの問題も、あるのかもしれません。私はMac用二画面ファイラの定番&lt;strong&gt;ForkLift&lt;/strong&gt;を愛用していますが、標準のFinderよりもsamba経由だと表示に若干時間がかかるようです。&lt;/p&gt;&#10;&lt;p&gt;（追記）ある程度解決しました「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」。それでもWindowsに比べるとレスポンスはちょっとひっかかりがあるのですが。&lt;/p&gt;&#10;&lt;h3 id="sshにおける濁点問題"&gt;sshにおける濁点問題&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Macはsshもデフォルトで使えます&lt;/strong&gt;から、sambaを使わずともファイルのやり取りは可能です。先述した私の愛用するファイラForkLiftはsshにも対応している優秀なアプリで、使い勝手は良好。これが&lt;strong&gt;何故かsambaよりもレスポンスがよい&lt;/strong&gt;。ファイルの転送速度もsambaと遜色ないか、心なしかちょっと早い。sshが早いというよりはsambaが遅いような気がしますが、まずまずといったところです。&lt;/p&gt;&#10;&lt;p&gt;ではsshを使えば良いではないかというと、これがまた問題があります。それは&lt;strong&gt;濁点の問題&lt;/strong&gt;です。Macでは、&lt;strong&gt;ファイルシステムの仕様から濁点や半濁点が一文字として数えられます&lt;/strong&gt;。たとえば「がぎぐげご」は「か゛き゛く゛け゛こ゛」です。WindowsやLinuxではそのように扱われません（参考「&lt;a class="link" href="http://qiita.com/knaka/items/48e1799b56d520af6a09" target="_blank" rel="noopener"&#10; &gt;MacOSX - Mac OS X の NFD 問題での対策諸々 - Qiita&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;ReadyNASはLinuxです。ですので、ファイル転送時に気をつけないと、非常に厄介なことになります。具体的には、端末やファイラからファイルは見えているのだが、いざ操作しようとすると「見つからない」と言われるという症状に見舞われます。これ、本当に面倒臭いです。&lt;/p&gt;&#10;&lt;p&gt;ファイル転送時に&lt;strong&gt;rsyncのiconvオプション&lt;/strong&gt;を使えばこの問題は回避することができます（「&lt;a class="link" href="//hack-le.com/30878779-2/" &gt;rsyncでiconvオプションをつけると、deleteオプションの挙動が変わる？？ : 或る阿呆の記&lt;/a&gt;」）。しかし、通常のscpでは何にもしてくれません。ファイルの転送にいちいちrsyncが必要とされるようでは、ちょっと使いづらいですね。&lt;/p&gt;&#10;&lt;p&gt;sambaを使えば、ちゃんと変換してくれるようで、少なくともこの濁点の問題で頭を悩ませる必要がないので、&lt;strong&gt;日常的にはやはりsshよりsambaのほうが使いやすい&lt;/strong&gt;のです。&lt;/p&gt;&#10;&lt;h3 id="macにおけるiscsiのイニシエータの寂しい状況"&gt;MacにおけるiSCSIのイニシエータの寂しい状況&#10;&lt;/h3&gt;&lt;p&gt;sshよりsambaとはいえ、やはり速度がもうちょっとなんとかならないものだろうかと考えたところで、ふと思い浮かぶのは&lt;strong&gt;iSCSI&lt;/strong&gt;です。ReadyNASは設定画面のタブに普通にiSCSIがあり、簡単にターゲットを作成してiSCSIを使用することが可能なのですが…。Macでは、iSCSIのイニシエータで実績のあるものが、1ライセンス$90したりします。「&lt;a class="link" href="https://sites.google.com/site/bknobiboroku/others/how_to_use_iscsi_with_readynas" target="_blank" rel="noopener"&#10; &gt;ReadyNASでiSCSIを利用する - @ビボーログ&lt;/a&gt;」には無料で頑張る方法もありますが、El Capitanだとどうにもうまくいきません。Yosemiteではうまくいくのでしょうか？「&lt;a class="link" href="https://github.com/iscsi-osx/iSCSIInitiator" target="_blank" rel="noopener"&#10; &gt;iscsi-osx/iSCSIInitiator · GitHub&lt;/a&gt;」なんてのもあったりしますが、情報が少なく果たしてどんなものやら。しかし広いネットの世界では頑張った人がいまして、「&lt;a class="link" href="http://www.jn1msd.net/lifeisrun/archives/2015-423/" target="_blank" rel="noopener"&#10; &gt;Mac El CapitanでDroboshare Dashboardを使ってiSCSIを無料で利用する 〜実践編 | Life is run!!&lt;/a&gt;」という記事を見つけました。なかなか手間暇かけて頑張っており、よくこんな方法見つけたなぁと思います（ネットでは本当に感心してしまうことがたくさん）。しかしながら、見るだけでなんだか面倒臭い。とりあえず、今はいいかな…という感じです。&lt;/p&gt;&#10;&lt;h2 id="一番楽なのは外付けハードディスクをつけること"&gt;一番楽なのは外付けハードディスクをつけること&#10;&lt;/h2&gt;&lt;p&gt;とまぁこのような感じで、Macでのファイル共有は、昔に比べればかなり進歩しているだろうとは思うものの、なかなか苦労があります。身も蓋もない話ですが、&lt;strong&gt;一番楽なのは外付けハードディスクをMacに接続してしまうこと&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;まぁでも、部屋からハードディスクを追い出して、部屋の外にファイルサーバーがある生活、というのも悪くないものです。まだ3TBのデータ転送がまったく終わっていないので、ハードディスクを部屋から追い出せていないのですが…（あと数日はかかりそう…）。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00CHABREE" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>初代Surface Pro を Windows 10 にしたら、電源コネクタを繋ぐと充電するようになった</title><link>https://hack-le.com/45960406-2/</link><pubDate>Thu, 12 Nov 2015 11:40:09 +0900</pubDate><guid>https://hack-le.com/45960406-2/</guid><description>&lt;p&gt;追記：その後結局また充電できなくなり、買い替えました。&lt;/p&gt;&#10;&lt;p&gt;予約しているのに、いつまでたっても初代Surface ProにWindows 10が降りてこない、とボヤいていましたが、先月のいつだったか、ついに我慢できなくなり、直接アップグレードさせました。もっと手間がかかると思っていたのですが、いざやってみるとMS謹製のアプリを用いるだけで非常に簡単に済んでしまい、こんなものかと拍子抜け。Windowsも確実に進化しているようです。&lt;/p&gt;&#10;&lt;h2 id="電源が接続されると充電が開始される喜び"&gt;電源が接続されると、充電が開始される喜び&#10;&lt;/h2&gt;&lt;p&gt;特にさしたる期待もなくWindows 10にしたのですが、予想外に嬉しいことがありました。&lt;strong&gt;なんと、電源を接続すると充電が開始される&lt;/strong&gt;のです！何を言っているのかと思われそうですが、この&lt;strong&gt;初代Surface Proは、いつ頃からか電源を接続しても充電されない状態に陥っていました&lt;/strong&gt;。Windows曰く「電源に接続；充電していません」。ちゃんと働いてください。同様の症状はネット上でも散見されるのですが、対応策とされることをしても私の場合はまったく効きませんでした。&lt;/p&gt;&#10;&lt;p&gt;まったく充電できる術がないというわけではなく、スリープ状態にして、慎重に電源コネクタを取り付けると、充電されるようだったので、使えなかったというわけではないのですが、ただでさえバッテリーのもたないWindowsタブレットにおいて、いやそうでなくても、ノートPCやタブレットのような&lt;strong&gt;モバイル端末で、電源の供給がままならないのは致命的&lt;/strong&gt;です。それが解決されたので、たいへんハッピー。まぁ、それでも若干不安定で、時折例の「充電していません」という謎の状態になることもあるのですが、頻度は随分減りました。そもそもこんな問題が起きていたこと自体が意味不明であるという気持ちはあるのですが、今はとにかく喜びます。OSのアップデートでなおるということは、やはり&lt;strong&gt;ソフトウェアの問題だった&lt;/strong&gt;のですね。接続自体は検知していたようですしね。&lt;/p&gt;&#10;&lt;p&gt;あと、&lt;strong&gt;電源コネクタが取れ易すぎる&lt;/strong&gt;という問題もあるのですが、こればかりはどうにもなりません（初めて使ったときは初期不良かと思いました……あれは開発者の意図したところなのでしょうか）。少なくとも、&lt;strong&gt;ついていれば充電されるというだけでも良しとしましょう&lt;/strong&gt;。ハードルが低い。&lt;/p&gt;</description></item><item><title>Mac miniでSSD換装後、「復旧システムを復元先ディスクに追加中にエラーが起きました」</title><link>https://hack-le.com/45939476-2/</link><pubDate>Tue, 10 Nov 2015 09:54:38 +0900</pubDate><guid>https://hack-le.com/45939476-2/</guid><description>&lt;p&gt;思われていたよりも緩やかではありますが、SSDも少しずつ安くなってきました。500GBクラスのSSDを、18000円弱で手に入れました。二年半ほど前に、同じくらいの値段で256GBのSSDを購入したので、やはり随分安くなったといえます。&lt;/p&gt;&#10;&lt;h2 id="安くなってはいるのだが"&gt;安くなってはいるのだが&#10;&lt;/h2&gt;&lt;p&gt;これくらいの値段で、1TBのSSDが手に入るとよいのですが、そもそもSATAの時代が終わりつつあるような気もします。ハードディスクからSSDへのインパクトは大きかったですが、SATAからPCIeへのインパクトはそれほどでもないような…ローカルで完結する作業については、もうあまり速度的には困らない印象です。値段を倍にして0.1秒を0.01秒にするよりも、熟れた値段で大きな容量を手に入れられるほうが有難いですし、そのような人のほうが多いと思いますが、商売的にはあまりうまくないのかもしれません。まぁ、そもそも最近はどんどん拡張性がなくなっていっているのですが…。&lt;/p&gt;&#10;&lt;h2 id="mac-mini-2012のストレージを新しいssdに換装"&gt;Mac mini 2012のストレージを新しいSSDに換装&#10;&lt;/h2&gt;&lt;p&gt;Mac mini 2012は、今となっては嬉しいストレージやメモリを簡単に自力換装できるマシンです（簡単とは言っても、Mac miniのストレージの換装は初めての人にはやや緊張感のある構造）。昨今iMac Retinaなどが喧しい中ではありますが、モニタのない純粋なデスクトップマシンとして、そして拡張性のあるMacとして、一定の存在感を放っています。私の愛機でもあり、iMacにリプレースしようかとも考えたのですが、問題なく使えていることもあり、必要かどうかもわからないRetinaディスプレイに大枚をはたくよりは、ストレージを大容量のSSDにしたほうが、遥かに安上がりで、遥かに無駄がなく、かつ素晴らしいパフォーマンスを得られるのではないかと思いました。そこで、既に256GBのSSDに換装済でしたが、これをさらに480GBのSSDに置き換えることにしました。&lt;/p&gt;&#10;&lt;h2 id="timemachineによる復元でトラブル"&gt;TimeMachineによる復元でトラブル&#10;&lt;/h2&gt;&lt;p&gt;さて、例によって前置きが長くなりましたが、&lt;strong&gt;Mac miniのSSDを換装後、TimeMachineで復元を行ったところ、トラブルが発生した&lt;/strong&gt;ので、そのメモです。具体的には、表題のように &lt;strong&gt;「復旧システムを復元先ディスクに追加中にエラーが発生しました」というエラーメッセージが表示&lt;/strong&gt;され、再起動を促されるのですが、何度再起動しても、結果が変わりません。調べてみると、外付けハードディスクから復元する場合、Mac起動前から接続しているとにそのような状態になることがあるようだ、という情報があり、それではと外付けハードディスクを接続するタイミングを、起動後の復元直前にしたのですが、やはりダメ。&lt;/p&gt;&#10;&lt;p&gt;結局、初期状態からの復元を諦め、まずはOSXを新規でインストールすることにしました。そして新規インストール後に、改めてTimeMachineから復元する算段です（移行アシスタントではありません…アレはあまり信用していません）。というわけで、&lt;strong&gt;新規インストールが完了した後、Mac miniを再起動し、おなじみのCmd+Rで立ち上げ、改めてTimeMachineから復元を実行したところ、今度はうまくいきました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00NPIYKFK" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;復元後はなんの問題もなく、快調に使えています。しばらくはSpotlightのインデックスを作成しているのか、mdworkerなるプロセスが暴走まがいに動いていましたが、時間がたつとそれも落ち着きました。SSDの残容量がまだ200GB以上あるなんて、とても嬉しいですね。iMacを買うよりも、良い選択をしたのではないかと思います。</description></item><item><title>MS Office 2011 のサポート期限、2017年10月に延長してたのですね</title><link>https://hack-le.com/45928020-2/</link><pubDate>Sat, 07 Nov 2015 11:35:10 +0900</pubDate><guid>https://hack-le.com/45928020-2/</guid><description>&lt;p&gt;Mac用のMS Office 2011 を使用しています。MS Officeは非常に高いですし、あまり使いたくはないのですが、やはり仕事上必要なことは多いものですし、ExcelとPowerPointはなんだかんだで使いやすいなぁと思います（Wordについては、LibreOfficeのWriterのほうが好きなのですが）。&lt;/p&gt;&#10;&lt;p&gt;2017/10/18追記：時の流れは残酷です。&lt;/p&gt;&#10;&lt;h2 id="2017年10月まで-ms-office-2011-サポート期間の延長"&gt;2017年10月まで MS Office 2011 サポート期間の延長&#10;&lt;/h2&gt;&lt;p&gt;そんなMS Officeですが、前に調べてみるとサポート期限がたしか2016年1月あたりで、延長サポートもなく、「もうすぐじゃないか」と焦った記憶があります。が、それがいつの間にやら延長されていました。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="https://support.microsoft.com/ja-jp/lifecycle/search?sort=PN&amp;amp;alpha=2011&amp;amp;Filter=FilterNO" target="_blank" rel="noopener"&#10; &gt;マイクロソフト サポート ライフサイクル&lt;/a&gt;」より、以下のような文言で&lt;strong&gt;2017年10月10日まで延長&lt;/strong&gt;されたことが示されています。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;すべてのお客様に標準ライフサイクル移行タイムラインを提供するために、Microsoft Office for Mac 2011 のメインストリーム サポートは表示のとおり延長されました。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;つまり、まだあと二年ほど使えるということです。有難いですね。ソフトウェアのサポート期間の長さばかりは、さすがマイクロソフトだなぁと思います。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/8/9/8921cf50.jpg" &gt;&lt;img alt="43" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/8/9/8921cf50-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ちなみに、　「&lt;a class="link" href="https://support.microsoft.com/ja-jp/gp/lifeselect?target=lifecycle&amp;amp;c1=505&amp;amp;=GSSProdSelMore505" target="_blank" rel="noopener"&#10; &gt;マイクロソフト サポート ライフサイクル&lt;/a&gt;」にあるOffice 2011のリンクをクリックすると、リダイレクトループが検出されるようで目的のページに辿りませんでした。仕方ないので、ヘルプの検索からたどりました…なぜこんなことに。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/e/1/e1b907dc.jpg" &gt;&lt;img alt="05" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/e/1/e1b907dc-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>500GBクラスのSSDを購入</title><link>https://hack-le.com/45906616-2/</link><pubDate>Thu, 05 Nov 2015 00:11:52 +0900</pubDate><guid>https://hack-le.com/45906616-2/</guid><description>&lt;p&gt;Mac mini 2012は素晴らしいマシンです。とても気に入っています。昨今のPCスペックの停滞もあり、いまだ第一線で使えるマシンです。何をするにも困りません。しかし、それでは私の気がおさまりません。最後に手をつけたのは、もう二年半ほど前にハードディスクを256GBのSSDに取り替えたことですが、それっきり何もしていません。なんたることかと思います。なんとかしなくては。&lt;strong&gt;これはもうアイデンティティの問題&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h2 id="ハードディスクを部屋から追いだそう"&gt;ハードディスクを部屋から追いだそう&#10;&lt;/h2&gt;&lt;p&gt;なんとか、自分が満足できるようなものはないだろうかと、いろいろ考えました。iMacの購入も本気で検討しました。マシンそのものを最新の新しいものに新調する、それはそれで素敵な選択だと思うのですが、私はまだこのMac miniと共にありたいという気持ちもありました。いわゆる愛着というやつです。それに、やはり&lt;strong&gt;モニタ一体型のPCは、どうしても抵抗があります&lt;/strong&gt;。では、このMac miniをさらに強化するのはどうだろうか。&lt;/p&gt;&#10;&lt;p&gt;ふと思ったのは、最近HDの回転音が耳につく、と思うことが多くなったことです。そうだ、&lt;strong&gt;ハードディスクを部屋から追いだそう&lt;/strong&gt;。ハードディスクといっても、もちろん内蔵ではなくデータ保管用に用いている外付けのものです。元より音にはあまり拘らないタチなのですが、一度気になりだすとやけに気になってしまいました。単なるデータ用ということであれば、部屋の外にファイルサーバーをたてればそれで済む話ですが、この外付けには仮想化ソフトParallels Desktopのデータもあるため、ローカルでないとちょっと具合が悪い。昔「&lt;a class="link" href="//hack-le.com/44661080-2/" &gt;Mac mini Late 2012 をFusion Drive化するか悩ましい : 或る阿呆の記&lt;/a&gt;」という記事でストレージの拡張を検討したとき、結局私がストレージを必要とするのは主に仮想化ソフトのせいであるので、まずそれを外付けに退避させて、パフォーマンスに満足できるかどうか、様子を見よう、と結論づけ、それ以来仮想化用のデータは外付けにおいてあります。そして、仮想環境での作業はたまにしか行わないので、それでもあまり困らなかったのです。が、静音化を目指しハードディスクそのものを廃するとなれば、話は別です。&lt;strong&gt;仮想化ソフトのデータもSSDに含め、その他動画などのデータはハードディスクにまとめて外部のファイルサーバーにまとめてしまう&lt;/strong&gt;、という対策が考えられます。&lt;/p&gt;&#10;&lt;p&gt;となれば、現在の256GBのSSDでは容量が足りませんから、新たに500GB、あるいは1TBクラスのSSDを購入しなくてはなりません。1TBは魅力的ですが（最近は4万円を切っている！）、さすがに必要ないでしょうから、&lt;strong&gt;500GBクラスのSSDを購入するのが、もっとも無駄がない選択&lt;/strong&gt;といえます。&lt;/p&gt;&#10;&lt;p&gt;この対策の素晴らしい点は、&lt;strong&gt;静音化が図られるだけではなく、仮想環境のパフォーマンスも向上し、さらに別途ファイルサーバーをたてる必要がある&lt;/strong&gt;点です。これによって、ながらく眠り姫となっていた、HPの小型サーバーマシンMicroserverが、再び陽の目を浴びる時がきたということです。さらに、換装して余った元の256GBのSSDは、新たにたてたサーバーマシンのシステムストレージとして利用すればよい。何もかもがうまく利用できる。&lt;/p&gt;&#10;&lt;h2 id="パーツを買ったらなんだかスッとした"&gt;パーツを買ったらなんだかスッとした&#10;&lt;/h2&gt;&lt;p&gt;というわけで、この妙策を実行に移すべく、&lt;strong&gt;衝動的に500GB級のSSDを購入&lt;/strong&gt;しました。今回購入したSSDは&lt;strong&gt;SanDiskのSDSSDHII-480G-J25&lt;/strong&gt;です（なおこの製品は型番の末尾にCがつくものもあり、そちらはやや高いのですが、国内の代理店経由で売られているものだそうで、ルートの違いだけで製品の中身には違いがないそうです）。なんと&lt;strong&gt;18000円弱&lt;/strong&gt;、しばらく見ない間に、随分と熟れた値段になったものです。これで円安でなければもっと安かったのでしょうが…まぁ円安は国策ですから仕方ありません（個人的には、円安を歓迎する業種ばかりではないのだから、もう少し高いところでバランス取ってもらえないものかと思いますが…私は円安は別に嬉しくない仕事です…）。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00NPIYKFK" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;ここしばらく、気がつくとカカクコムでiMacを見たりMacBookProを見たりChromebookを見たりする日が続いていましたが、SSDをAmazonで注文した途端、なんとなく心が落ち着きました。これで私は、もうしばらくMac mini 2012と共にやっていくことが決まったわけで、スッキリです。もうiMacをどうしようかなぁでもなぁとページを開いたり閉じたりすることもないでしょう。&lt;/p&gt;&#10;&lt;p&gt;それにしても、自分で言うのもなんですが、なんだか病気っぽい。&lt;/p&gt;&#10;&lt;p&gt;…などと書いている間に、「&lt;a class="link" href="http://japanese.engadget.com/2015/11/04/960gb-299-99-tlc-ssd-bx200-540mb/" target="_blank" rel="noopener"&#10; &gt;960GBで299.99ドルのTLC版SSD『BX200』をクルーシャルが発売、低価格ながらリード540MB/秒 - Engadget Japanese&lt;/a&gt;」という記事が。最初からこの値段設定であれば、さらに安くなって1TBのSSDが3万円を切る時代もいよいよ迫ってきているのかもしれません。&lt;/p&gt;</description></item><item><title>誰だろう？El Capitanで _mbsetupuser</title><link>https://hack-le.com/45896090-2/</link><pubDate>Wed, 04 Nov 2015 09:25:54 +0900</pubDate><guid>https://hack-le.com/45896090-2/</guid><description>&lt;h2 id="知らないユーザー"&gt;知らないユーザー&#10;&lt;/h2&gt;&lt;p&gt;恐らく、El Capitanへのアップデートがトリガと思いますが、コマンドラインであれこれしていたところ、 &lt;strong&gt;_mbsetupuser&lt;/strong&gt; なる謎のユーザーが追加されていました。個人的に蔵書管理のために作成したシェルスクリプトが正しく動かず、おかしいなと思ってusersコマンドで調べてみると、_mbsetupuser なるユーザーが…誰だろうか。&lt;/p&gt;&#10;&lt;p&gt;知らないユーザーがいつの間にか追加されているなど、不気味以外のなにものでもありませんから、早速Google先生に質問してみると、El Capitanが連想されていたので、ああ、よくあることなのかな、と少し安心。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/1/5/155237f8.jpg" &gt;&lt;img alt="40" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/1/5/155237f8-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="β版からあった事象"&gt;β版からあった事象&#10;&lt;/h2&gt;&lt;p&gt;さらに調べていくと、「&lt;a class="link" href="http://forums.macrumors.com/threads/setup-user-login-prompt-after-update.1899186/" target="_blank" rel="noopener"&#10; &gt;&amp;ldquo;Setup User&amp;rdquo; login prompt after update | MacRumors Forums&lt;/a&gt;」という記事もあるように、突然Setup Userが現れた、というのはβ版でもあった事象のようです。「&lt;strong&gt;再起動すればなおる&lt;/strong&gt;よ」とのことなので、恐る恐る再起動すると、確かにいなくなりました。&lt;/p&gt;&#10;&lt;p&gt;まぁ恐らく最初の一回だけで、再発したりはしないと思うのですが、こういったことがあった、というメモ書きです。&lt;/p&gt;</description></item><item><title>Amazonプライムビデオは面白く、Amazonという企業は恐ろしい</title><link>https://hack-le.com/45875659-2/</link><pubDate>Mon, 02 Nov 2015 00:53:34 +0900</pubDate><guid>https://hack-le.com/45875659-2/</guid><description>&lt;h2 id="楽しめているfire-tv-stick"&gt;楽しめているFire TV Stick&#10;&lt;/h2&gt;&lt;p&gt;Fire TV Stickが届いてから数日、自分にとっても意外なことに、けっこう見てしまっています。ドラマの孤独のグルメとアオイホノオなどを見ました。アニメもたくさんありますね。原作漫画のものばかりですが、娯楽といえば漫画の自分にとって、漫画原作のものしかわからないのです…しかし、見てみるとドラマ化しているもの、アニメ化しているものが存外多く、ついつい見てしまいました。&lt;/p&gt;&#10;&lt;p&gt;それにつけても、知っている作品の多さに驚きました。いえ、漫画原作ばかりなのですが。きっと、今メインで作っている人たちが、漫画を読んで育った世代なのでしょうね。今ちょうどこの記事を書きながら、森繁拓真原作のアニメとなりの関くんを見ているのですが、関連の動画にクール教信者の旦那が何を言っているかわからない件、ゆうきゆう、ソウの漫画で分かる心療内科ならぬアニメで分かる心療内科、ああこれは見たいなぁと思うものがチラホラと。アニメの関連動画はやはりアニメが多いですね。Amazonで買い物中、オススメされる商品の絶妙さに恐怖すら覚えた経験がある人は多いでしょうが、今後ビデオを見ていけば、オススメ動画の精度もやはり相当高くなるのでしょう。&lt;/p&gt;&#10;&lt;h2 id="さすがのハードソフトコンテンツ"&gt;さすがのハード、ソフト、コンテンツ&#10;&lt;/h2&gt;&lt;p&gt;私は基本的にテレビを見ませんし（最近ガラポンTVを購入して、多少はみることもあるようになりましたが）、私が楽しむコンテンツはたいていテキストが主体です。そんな私がけっこう楽しめているので、&lt;strong&gt;Amazon プライムビデオとFire TV Stickは良いシステムなのではないか&lt;/strong&gt;と思います（またAmazonプライムビデオはPCでも楽しめるとわかりました）。&lt;/p&gt;&#10;&lt;p&gt;ガラポンTVなどはなんとか今あるものを有効活用したいという気持ちが強く（テレビのケーブルや余っている外付けHDなど）、また、正直なところその操作性や使い勝手などはハッキリ言って良いとはいえず、ストレスを感じることがままあります。一方、&lt;strong&gt;AmazonプライムビデオとFire TV Stickはただただ楽しい&lt;/strong&gt;。良好な操作性はストレスを感じることがありませんし、適切なオススメの紹介など見ればみるほどに新しい発見がある。&lt;strong&gt;ハードウェア、ソフトウェア、そしてコンテンツのすべての面において、Amazonが素晴らしいものをもっている&lt;/strong&gt;ことがよくわかります。なんといっても、それらを適切に組み合わせる&lt;strong&gt;デザインセンス&lt;/strong&gt;。この連休にかなり楽しませてもらいましたが、なんだか感心してしまいました。&lt;/p&gt;&#10;&lt;h2 id="少し恐ろしさも感じる"&gt;少し恐ろしさも感じる&#10;&lt;/h2&gt;&lt;p&gt;感心すると同時に、やや恐ろしさも感じます。今回Fire TV Stickが発売されましたが、それと同時に、ChromecastやAppleTVがAmazonから閉めだされました。このことは、Amazonが本質的にどのような企業なのかということをよく表しているように思います。つまり、&lt;strong&gt;Amazonとは非常に独占的、寡占的な思想を持っている企業&lt;/strong&gt;だということです。まぁ、グローバル企業には多かれ少なかれそういった面があります。しかし、Amazonの場合は本当にすべてを自分たちで握ってしまうような、そういう恐ろしさがあるといいますか、世界征服などとはっきり嘯くGoogleとは違い、腹の底で密かに狙っているような。そして実際に素晴らしいシステムを実装できる能力があるだけに、なにか現実感を感じさせます。現実問題として、もはやAmazon抜きに私の生活もない。いったいどれだけお世話になっていることやら。まったく、末恐ろしい企業です。&lt;/p&gt;&#10;&lt;p&gt;…などと書いたところで、となりの関くんを21話全部見てしまいました。1話8分ということで、ささっと見れるなと思ったのですが、全話見たということは3時間近く見たのですね、自分。面白かったです。そういえば、最新巻を買って積読していたので、読もうかな。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZVNYLS8" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&#13;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0095F32OW" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;</description></item><item><title>Chrome → Safari 移行で一ヶ月 特にいいことはないが続けている</title><link>https://hack-le.com/45864798-2/</link><pubDate>Sat, 31 Oct 2015 21:34:24 +0900</pubDate><guid>https://hack-le.com/45864798-2/</guid><description>&lt;h2 id="safari移行を試みて一ヶ月"&gt;Safari移行を試みて一ヶ月&#10;&lt;/h2&gt;&lt;p&gt;Chrome飽きてきた、というざっくりした理由で、ChromeからSafariに移行することを試みています（「&lt;a class="link" href="//hack-le.com/45503606-2/" &gt;何度目かのChrome→Safari計画 : 或る阿呆の記&lt;/a&gt;」）。&lt;strong&gt;一ヶ月以上続いているということは、Safariもそれなりに悪くはないということですが、特に良くもありません&lt;/strong&gt;。むしろ、Chromeのほうがよかったと思うこともしばしばあります。&lt;/p&gt;&#10;&lt;h2 id="safariでうーんと思ったところ"&gt;Safariでうーんと思ったところ&#10;&lt;/h2&gt;&lt;h3 id="体感速度"&gt;体感速度&#10;&lt;/h3&gt;&lt;p&gt;ちゃんと測ったわけではないので、実に主観的なものになりますが、ここ一ヶ月のネットブラウジングの経験からいくと、&lt;strong&gt;体感速度はやはりChromeに比べるとやや落ちる&lt;/strong&gt;と思いました。先日などは、朝ネットをしていて、「今日はやけにサイトの読み込みが早いなぁ」と思っていたら、SafariではなくChromeを起動していた、ということがありました。&lt;/p&gt;&#10;&lt;h3 id="安定性"&gt;安定性&#10;&lt;/h3&gt;&lt;p&gt;Safariでは、&lt;strong&gt;タブが固まる&lt;/strong&gt;ということがちょくちょくありました。Chromeではそういったことはなかったのですが、どういうわけかSafariではある。Safariごと再起動したことも何度かあります。OS標準のブラウザなのだから、安定性は高いと思っていたので、ちょっと意外です。まぁ、たまにしかありませんから、さほど害があるわけではないのですが。最近El Capitanに乗り換え、ひょっとすると安定性も上がっているかと期待しているのですが、どうかな。&lt;/p&gt;&#10;&lt;h3 id="拡張機能の少なさはやはり寂しい"&gt;拡張機能の少なさはやはり寂しい&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Chromeの豊富なエクステンションには遠く及ばないのは、わかっていたことではありますが、やはり不便だと思うことがあります&lt;/strong&gt;。いくつかありますが、特にChromeでたいへん便利であった、記事中の複数URLを同時に開くLinkDumpの代わりが見つかっていないのは、個人的にはちょっと辛い。私に必要なものを開発する能力があればよいのですが…。&lt;/p&gt;&#10;&lt;p&gt;Googleの検索結果から、任意のサイトを除去する Personal Blocklist がないこともネックでしたが、これはなければないで案外そんなに困りもしませんでした。そもそも、除去したいサイトが引っかかるようなワードを最近はあまり検索しなくなったこともあります。まぁ、&lt;strong&gt;不便さは自分にとって本当に必要なものを見極める機会&lt;/strong&gt;、と言えなくもありません。ミニー・リパートンのようにポジティブに考えることができれば、ですが。&lt;/p&gt;&#10;&lt;p&gt;あと、これは少し困っているのですけれど、&lt;strong&gt;突然拡張機能が使えなくなることがあります&lt;/strong&gt;。具体的には、Evernote Web Clipperなど、通常であればツールバーのアイコンをクリックすると実行できるわけですが、これが効かなくなります。Safariを再起動すると、また使えるようになります。謎です。LastPassや1Passwordなど、よく使うので、けっこう不便です。&lt;/p&gt;&#10;&lt;h3 id="そのほか"&gt;そのほか&#10;&lt;/h3&gt;&lt;p&gt;細かな点です。たとえば今この記事はLivedoorブログの記事作成ページで行っているのですけれど、クリックするとHTMLタグを挿入してくれるツールバーがあります。これが、一度クリックしただけでは反応しない、ということがしばしばあります。ほかサイトでも、一度のクリックできいていないことがよくあり、しばらくして「あ、きいてなかったか」と再度クリックを実行することがあります。こういったことはChromeではありませんでした。ちょっと不思議です。&lt;/p&gt;&#10;&lt;h2 id="safariにする意味はあるのか"&gt;Safariにする意味はあるのか&#10;&lt;/h2&gt;&lt;p&gt;Safariで感じた問題点をつらつら書いてきました。では&lt;strong&gt;Safariにしてよかった点はどこかというと、これがちょっと思い当たらない&lt;/strong&gt;。進む戻るのエフェクトがちょっとおもしろい、くらいでしょうか。ノートパソコンにおけるバッテリー持ちはSafariのほうが良いとよく聞きますが（各種ベンチの結果もそのようです）、少なくとも体感ではわかりませんでした。むしろブラウジング以外のことでバッテリーを消費することが多い、私の使い方のためかもしれませんが。&lt;/p&gt;&#10;&lt;p&gt;以上より、&lt;strong&gt;Safariにする意味はあるのかと問われれば、「特にない」というのが私の回答になります&lt;/strong&gt;。にも関わらず使い続けているのは、まぁ&lt;strong&gt;いろいろなブラウザを使うこと自体が一種の娯楽みたいなもの&lt;/strong&gt;だからです。少なくとも、使用するのが憚られるような悪いブラウザではまったくありませんから、Safariしか使わないというのは難しいと思いますが、メインとして当面使っていくのも悪くないかなと思っています。&lt;/p&gt;</description></item><item><title>Fire TV Stick が届きました。Amazonプライム会員なら面白いのでは</title><link>https://hack-le.com/45843645-2/</link><pubDate>Thu, 29 Oct 2015 16:35:56 +0900</pubDate><guid>https://hack-le.com/45843645-2/</guid><description>&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/d/e/dee2eb38.jpg" &gt;&lt;img alt="56" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/d/e/dee2eb38-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;誰です？&lt;/p&gt;&#10;&lt;h2 id="fire-tv-stickが届く"&gt;Fire TV Stickが届く&#10;&lt;/h2&gt;&lt;p&gt;Fire TV Stickが届きました。そういえば、期間限定の割引に乗じて予約していました。すっかり忘れていました。どうもこういうことをすぐに忘れてしまう質で、そもそも今Amazonプライム会員なのも、決して意図したものではなく、無料お試し期間にキャンセルするのをすっかり忘れていたという、実によくある話です。それでも、Amazonのヘビーユーザーで、Kindle本を購入する自分にとっては、月額330円程度ですから、まぁよいのかなとも思います。お急ぎ便で休日に間に合ったり、時間指定で平日の夜に指定できたり…。&lt;/p&gt;&#10;&lt;p&gt;最近始まった&lt;strong&gt;Amazonプライムビデオは、特に大きい&lt;/strong&gt;ですね。これのおかげで、Amazonプライム会員に一気にお得感がでてきます。まぁ、私はあまり映画を見ることはないのですが、元からそういうわけではなく、単に時間がなくタイミングが合わないから積極的に見ないというだけで、映画は人生を豊かにするものの一つだと思いますから、機会があれば見たいとは思っているのです。そんな私には、うってつけかもしれない。&lt;/p&gt;&#10;&lt;h2 id="使い勝手思ったより良好なレスポンスふむふむな品揃え"&gt;使い勝手：思ったより良好なレスポンス。ふむふむな品揃え&#10;&lt;/h2&gt;&lt;p&gt;というわけで、早速Fire TV Stickセットアップをしました。既に第二世代Apple TVがつながっているHDMIセレクタに挿します。あまりに小さいので、そのまま挿せてしまうのは驚きですね。まぁ、MicroUSBの電源コネクタが横に付いているので、コネクタ側の空間は開けておかないといけませんが…。&lt;/p&gt;&#10;&lt;p&gt;テレビをつなげると、早速セットアップが始まり、知らない男の人が解説してくれます。ルータは二階にありますが、一階でもちゃんと電波を良好に受けている様子。一応、一階にもエクステンダーを設置してはいるのですが、接続がちょいと不安定で…まったく繋がらないわけではないのですが。まぁ、エクステンダーについてはXperiaも認証に問題があったりしてダメなので、Fire TV Stickのせいとは言い切れません（iPhoneとiPadは問題なく受かるんですけどねぇ…）。いずれにせよ、&lt;strong&gt;木造2階の電波を1階で良好に受けられる程度には、電波をよく掴んでくれます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;既に&lt;strong&gt;Amazonアカウントは登録済み&lt;/strong&gt;のようで、長ったらしいパスワードをリモコンでポチポチの儀式は避けることができました。家族が同居していると自由に操作される可能性もありますが、&lt;strong&gt;商品購入時などに必要なPIN番号を設定することができる&lt;/strong&gt;ようなので、まぁそれなりです。&lt;/p&gt;&#10;&lt;p&gt;それで早速、いくつかのビデオを見たり、ゲームをインストールしてみたりしたのですが、なかなか楽しいですね。&lt;strong&gt;リモコンのレスポンスは良い&lt;/strong&gt;し、&lt;strong&gt;動画はストリーミングであることを感じさせないほどスムーズ&lt;/strong&gt;に閲覧できます。画質も思っていたより良い。HD画質ですね。&lt;strong&gt;ラインナップも、意外と最近のドラマや映画もあったりなどして&lt;/strong&gt;（といっても私の「最近」はあまり最近ではないかもしれませんが）、孤独のグルメや俺のダンディズムなど見たいと思うものもけっこうありました。また、&lt;strong&gt;タブレットやスマートフォンでやるようなミニゲームのアプリを、テレビの大画面でリモコン操作するのは面白い体験&lt;/strong&gt;でした。これは子供が喜びそうです。据え置きのゲーム機に比べれば大分安上がり。本格的なゲームも、今時はきっと多いのでしょうね。また、ゲームを楽しめるようになりたいものですが…いったいいつから、休日でもなにかしら仕事か勉強していないと落ち着かないような、慌ただしい人間に私はなってしまったのか…。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/7/b/7bb643f2.jpg" &gt;&lt;img alt="19" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/b/7bb643f2-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="家族での利用"&gt;家族での利用&#10;&lt;/h2&gt;&lt;p&gt;ちょっと使ってみて面白いなと思ったのは、&lt;strong&gt;家族で楽しむことができる&lt;/strong&gt;ことでしょうか。私は今現在実家住まいですから、私の趣味が家族の役にも立つとすれば、嬉しいことです。実際、プライムビデオを閲覧できるということで、こういったことにはあまり興味を示さない母も、多少惹かれるものがあった模様。皆で楽しむことができればよいですね。&lt;/p&gt;&#10;&lt;p&gt;しかし、こういった製品は基本的にはプライベートなものですから、たとえば&lt;strong&gt;視聴履歴一つとっても自分の履歴と家族の履歴が混ざるのは好ましくありません&lt;/strong&gt;し、またコンテンツによってはあまり同居人に知られたくない、というのもありましょう。Apple IDにしてもそうですが、&lt;strong&gt;一つのグループに紐付けられたマルチアカウントのような仕組みが、今後必要となってくる&lt;/strong&gt;のではないかと思います。また、映画やドラマのようなコンテンツは、テレビでリアルタイムで見るのではなく、こういったサービスで見たいときに見る、という流れが主流となっていくのではと思わせるほどに、第一印象としてはなかなか勝手がよいです。まぁ、実際にはあらゆるデジタルガジェットに拒否反応を示す層は決して少なくないので、難しいかもしれませんが、ネット専用の番組もこれからどんどん増えていくんでしょうね。&lt;/p&gt;&#10;&lt;p&gt;予想通り、&lt;strong&gt;Amazonプライム会員にはなかなか安価に楽しめる製品&lt;/strong&gt;だと思いました。休日になったら、映画を見ようかなぁ。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZVNYLS8" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&#13;&#10;音声認識バージョンもありますが、いらないと思います。</description></item><item><title>OSX 10.11 El Capitan インストール フルスクリーン関係は良くなったように思える</title><link>https://hack-le.com/45826350-2/</link><pubDate>Tue, 27 Oct 2015 17:49:47 +0900</pubDate><guid>https://hack-le.com/45826350-2/</guid><description>&lt;p&gt;El Capitanが正式にリリースされてからもうすぐ一ヶ月経ちます。だいたい情報も出揃った頃合いでしょうか。&lt;strong&gt;メール関係で致命的な不具合があったという人もいる&lt;/strong&gt;ようですが、まぁ全体的にはYosemiteから大きな変更はないとのことで、比較的落ち着いたアップデートのようでしたから、MacBook Airにえいやと入れてしまいました。&lt;/p&gt;&#10;&lt;h2 id="変わった"&gt;変わった？&#10;&lt;/h2&gt;&lt;p&gt;まだいじって二日ほどですが、今のところはまったく困ったことがありません。というより、ファーストインプレッションとしては、「&lt;strong&gt;どこが変わったのかわからない&lt;/strong&gt;」くらいでした。もちろん大きな変更もあるのですが、特に目立つところもなく、まぁ初見でふむと思ったのは、 &lt;strong&gt;/usrが管理者権限においてもいじれなくなった&lt;/strong&gt;ことと、&lt;strong&gt;Split View&lt;/strong&gt;、それに&lt;strong&gt;ライブ変換&lt;/strong&gt;くらいでしょうか。&lt;/p&gt;&#10;&lt;h3 id="ルートレス"&gt;ルートレス&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;/usr以下が管理者権限においてもいじることができない、ルートレスになったことは、特にコマンドラインを愛用している人にとってはそれなりに大きな変更&lt;/strong&gt;でしょう。もっとも、OSXではHomebrewを使っている人が多いでしょうし、Homebrewは/usr/local/binを用いるので、影響はなかったのですが…。Homebrewといえば、Yosemiteにした時はインストールに丸一日くらいかかってしまう現象がありましたが、今回はそういったこともありませんでした。&lt;/p&gt;&#10;&lt;h3 id="split-viewの雑感"&gt;Split Viewの雑感&#10;&lt;/h3&gt;&lt;p&gt;Split Viewは色々な人が話題にしている目玉の機能の一つであり、それなりに便利そうな機能です。最大化ボタンを長押し、というのは微妙にわかりづらいですが。単にウィンドウサイズを適正にするだけであれば、OSXユーザーのほとんどが使っているのではないかと思われるBetterTouchToolを使っても可能です。&lt;strong&gt;メニューバーもEl Capitainになって自動非表示が可能&lt;/strong&gt;になりましたので、Dockは元より隠せますから、むしろ自由に動かせる分そちらのほうがよいのではないかとすら思えます。実際、そのほうが便が良いケースは多いと思うのですが、Split Viewがちょっと違うのは、単なるウィンドウのリサイズのみならず、コンテンツの表示を自動的に縮小するなど、&lt;strong&gt;画面分割に適した挙動をする&lt;/strong&gt;ことでしょうか。実際、Safariを単にウィンドウのリサイズで画面半分にすれば、画面の小さなMBAなどでは昨今のHPだと横が入りきらないということがありますが、Split Viewにおいてはうまい具合に縮小されて、ちゃんと全部入るようです。&lt;/p&gt;&#10;&lt;p&gt;割と気の利いた機能だと思いますが、メニューバーの非表示なども含め、なんだかWindowsっぽさを感じなくもありません。まぁ便利ならなんでもよいのですが。&lt;/p&gt;&#10;&lt;p&gt;あとフルスクリーンにしたときのレスポンスというか、画面遷移がスムーズになっている気がします。前はぬぬぬっという感じでしたが、今はさささっという感じです。わけがわからないですね。すみません。&lt;/p&gt;&#10;&lt;h3 id="ライブ変換は驚き"&gt;ライブ変換は驚き&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;日本語入力のライブ変換は、我々日本人にとって一番大きな変化かもしれません&lt;/strong&gt;。これはかなり面白い機能で、まぁ当面普段使いにすることはないと思いますけれど（固有名詞も弱そうだし）、落ち着いたら積極的に使っていきたい機能だと思います。かつてMS-IMEとかいうもののせいですっかり文節変換の癖がついてしまった私ですが、そろそろこの悪癖を矯正する時が来たのかもしれません。&lt;/p&gt;&#10;&lt;h2 id="運が悪くなければ多分大丈夫"&gt;運が悪くなければ多分大丈夫&#10;&lt;/h2&gt;&lt;p&gt;以上のような感じで、Yosemiteから大きく変わったところはそんなにありませんので、UIの変化に戸惑うということはないでしょう。メールが消えるという酷い不具合に当ってしまった人もいるようですが、自分がどうなるかは実際にやってみないとわからないところでありますし、バックアップをとったうえで、えいやとやってしまってよいように思います。もちろん、アプリケーションの互換性の問題で移れないとなれば仕方ありませんが…私の場合は、音声入りスクリーンキャプチャ動画の作成に使用している&lt;strong&gt;Soundflower&lt;/strong&gt;が、そのままだと使えなくなった（対応策はあるようです）というのがありました。逆にいうと、アプリの枷がなければ、さっさとやってしまって問題なさそうです。&lt;/p&gt;</description></item><item><title>LPIC 101(Ver4.0) 合格 Ping-tだけで十分のよう</title><link>https://hack-le.com/45818596-2/</link><pubDate>Mon, 26 Oct 2015 21:41:35 +0900</pubDate><guid>https://hack-le.com/45818596-2/</guid><description>&lt;p&gt;受験しようかな、ということを考えたのがもう三ヶ月ほど前なので（&lt;a class="link" href="//hack-le.com/45009471-2/" &gt;Ping-t で LPIC の勉強をしています : 或る阿呆の記&lt;/a&gt;）、随分と時間がたってしまいました。が、ようやく受験にこぎつけることができました。&lt;/p&gt;&#10;&lt;h2 id="ようやく受験"&gt;ようやく受験&#10;&lt;/h2&gt;&lt;p&gt;受験したのは今年5月か6月くらいにスタートしたVer4.0の101。結果は 700/800 で合格です。正答率は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;システムアーキテクチャ 87%&lt;/li&gt;&#10;&lt;li&gt;Linuxのインストールとパッケージ管理 100%&lt;/li&gt;&#10;&lt;li&gt;GNUとUnixのコマンド 84%&lt;/li&gt;&#10;&lt;li&gt;デバイス、Linuxファイルシステム、ファイルシステム階層標準 86%&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;700点といっても、TOEICのような感じで、単純な加点式ではないようですから（下限も200）、正確な正答率はわかりかません。まぁしかし、だいたい85-90%くらい取れたということでしょう。自己採点的には、80-85%くらいだろうと思いつつ終了ボタンをクリックしました。&lt;/p&gt;&#10;&lt;h2 id="難易度雑感"&gt;難易度、雑感&#10;&lt;/h2&gt;&lt;p&gt;第一問がいきなりわからなくて、ちょっと焦ったのですが、総合的には、&lt;strong&gt;Ping-tの問題集とコマ問をほぼ完璧にすれば、まず間違いなく合格できる程度の難易度&lt;/strong&gt;だと思いました。他の教材はいりません。レベルが上がってくるとそうもいかないようですが、101に関していえば、家に帰ってからちまちまとPing-tを一ヶ月ほど頑張れば、たいてい余裕で合格圏内に入れるのではないか、と（「&lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LPIC/オラクルマスター/ITパスポート/ITIL総合学習サイト Ping-t - 無料CCNA、LPIC、Oracle Master、ITパスポート問題集、ITILファンデーション、合格体験記、Cisco実機シミュレータ、実機講習&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;さっき調べてみると、&lt;strong&gt;LPICレベル1は初級シスアドと同じくらいだと評されている&lt;/strong&gt;のですね。となると、世間一般的にはかなり簡単な試験ということになるのでしょうか。個人的には、問題はけっこう際どいところを聞いてくるし、オプションをひたすら覚える苦行もあるのでしんどい試験だと思ったのですが…。まぁ、LPI曰く、ジュニアレベルですからねぇ…。&lt;/p&gt;&#10;&lt;h2 id="テストセンターについて試験のマシンがwindows"&gt;テストセンターについて…試験のマシンがWindows&#10;&lt;/h2&gt;&lt;p&gt;今回大阪のテストセンターで受験したのですが、平日夕方ということもあり、ガラガラで集中して受験することができました。ちょっと寒かったかな。持ち物に、&lt;strong&gt;直筆サイン入りの身分証明書が必要&lt;/strong&gt;なのに当日朝気づいて焦りましたが、&lt;strong&gt;クレジットカードで良い&lt;/strong&gt;みたいなので、事無きを得ました。学生さんのためか、&lt;strong&gt;図書館のサイン入りカード&lt;/strong&gt;もOKのようです。そんなんなら、もう無くていいんじゃないかと思ったのですが…電子署名も求められましたし、一応替え玉防止策ということなんでしょうか。&lt;/p&gt;&#10;&lt;p&gt;ところで&lt;strong&gt;試験のマシンがWindows&lt;/strong&gt;でした。まぁ、テストセンターで受けられる試験はLPICだけではないので、仕方ないのですが、なんだか変な感じ。&lt;/p&gt;</description></item><item><title>Withings Activité の電池を交換。時計がずれると思っていたら…</title><link>https://hack-le.com/45797691-2/</link><pubDate>Sat, 24 Oct 2015 17:20:29 +0900</pubDate><guid>https://hack-le.com/45797691-2/</guid><description>&lt;p&gt;2016/06/07追記：最初の電池の電池持ちは五ヶ月半でしたが、次の電池は七ヶ月半持ちました。最初の電池なので減っていたのかも。公称八ヶ月は偽りなし、かな。&lt;/p&gt;&#10;&lt;h2 id="activitéの時刻がずれる"&gt;Activitéの時刻がずれる&#10;&lt;/h2&gt;&lt;p&gt;気づいたのは一昨日かそれくらいかな。数分ほど、時間がずれていました。不具合かと思って色々調べていたのですが、&lt;strong&gt;アプリ自体がWithingsを見つけられず&lt;/strong&gt;、また&lt;strong&gt;背面のリセットボタンを押しても振動しなかった&lt;/strong&gt;ことなどから、&lt;strong&gt;電池切れであると判断&lt;/strong&gt;しました。&lt;/p&gt;&#10;&lt;h2 id="交換作業"&gt;交換作業&#10;&lt;/h2&gt;&lt;p&gt;バッテリー交換に関する公式のサポートページは「&lt;a class="link" href="https://withings.zendesk.com/hc/en-us/articles/204232673" target="_blank" rel="noopener"&#10; &gt;Replacing the battery of my Withings Activité™ – Withings&lt;/a&gt;」です。ページを見ると「&lt;strong&gt;完全防水だから、専用の業者にやってもらうのを強く薦める&lt;/strong&gt;」とにべもないことが書かれており、まぁそれはその通りなのでしょうが、いちいちそんなこともしていられませんので、自分でやりました。書いてあるとおりにやれば、難しくありません。&lt;/p&gt;&#10;&lt;p&gt;購入時についてきた専用のツールを使って、裏蓋を開けます。金属の円盤の、リセットボタンを押すと気とは逆にある、ひっかけの部分を、Withingsの裏蓋の、溝部分に引っ掛けます。そして、てこにしてくいっと回転させると、パカっといい感じで開きます。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/3/8/38b904a9.jpg" &gt;&lt;img alt="35" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/3/8/38b904a9-s.jpg"&gt;&lt;/a&gt;&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/3/3/334c27d1.jpg" &gt;&lt;img alt="22" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/3/3/334c27d1-s.jpg"&gt;&lt;/a&gt;&#10;中にあるボタン電池CR2025を入れ替えたら、裏蓋を閉じます。押しこんだらOKです。その後、ちゃんとアプリが認識して再セットアップできるようになりました。&lt;/p&gt;&#10;&lt;h2 id="バッテリー持ちは公称八ヶ月だけれど"&gt;バッテリー持ちは公称八ヶ月だけれど&#10;&lt;/h2&gt;&lt;p&gt;購入時に交換用の電池が一つオマケでついているので、一回目であれば買いに走る必要はないかと思いますが、二回目以降のことを考えると、一つは用意しておいたほうがよいでしょうね。CR2025を常備している家はそんなに多くないでしょう。Withingsを購入したのは5月10日ですから、&lt;strong&gt;だいたい五ヶ月半で電池が切れた&lt;/strong&gt;ということになります。「&lt;a class="link" href="http://uxlayman.hatenablog.com/entry/2015/09/23/202345" target="_blank" rel="noopener"&#10; &gt;Withings Activitéのアラームが効かなくなったけど電池交換で直った話 - UXエンジニアになりたい人のブログ&lt;/a&gt;」の記事を書いた人も、五ヶ月ちょっとで交換の必要が出たそうです。時刻にずれが発生するなど、症状も似ています。公称は八ヶ月ということでしたが、実際には半年程度ということでしょうか。まぁそれでも十分持っているといえると思いますが。→2016年6月7日追記：次の電池は七ヶ月半ほど持ちました。最初の電池は、最初だけに減っていたのかもしれません。だとすると、公称八ヶ月は偽りなしです。失礼しました。&lt;/p&gt;&#10;&lt;p&gt;Withingsの日本発売の時期を考えると、そろそろ交換が必要になる人も一気に増えそうですね。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B006PL6FAM" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Mac mini 2012 からもうすぐ3年 とても良いマシン</title><link>https://hack-le.com/45781053-2/</link><pubDate>Thu, 22 Oct 2015 23:55:31 +0900</pubDate><guid>https://hack-le.com/45781053-2/</guid><description>&lt;p&gt;サブマシンにするつもりでした。今、立派にメインマシンとして働いているMac mini。もう3年も前のマシンなのだと思うと、まだまだ第一線なのが嬉しいやらちょっと寂しいやら、複雑な気持ちです。&lt;/p&gt;&#10;&lt;h2 id="mac-mini-late-2012-から3年"&gt;Mac mini Late 2012 から3年&#10;&lt;/h2&gt;&lt;p&gt;三年前、私はまだノートパソコン（MacBook Air）のみMacを使っていて、デスクトップではWindowsから離れられずにいました。確かAMDのA8-3870で組み立てた自作機をメインに据えていたと思います（無難に良いCPUでした。現在もUbuntuマシンとして動いています）。しかしながら、MBAの便利さが身に沁みていた私は、デスクトップでもMacを使いたいものだなぁという思いを募らせていたのですが、私はどうしても一体型というものに抵抗があり、iMacの購入には踏みきれずにいました。そんな私にとって、Mac miniはうってつけのマシンであったといえます。&lt;/p&gt;&#10;&lt;h2 id="あまり期待していなかった"&gt;あまり期待していなかった&#10;&lt;/h2&gt;&lt;p&gt;しかしながら、それほど期待していたわけではなかったのです。むしろ、当時の記事を見てみると、Mac mini 2012に私はどちらかと言うと発表を見て失望していたことがわかります（「&lt;a class="link" href="//hack-le.com/19344726-2/" &gt;Mac mini 2012 のどれを買うかで悩む : 或る阿呆の記&lt;/a&gt;」）。まぁ、グラフィック面がすべてオンボになってしまったことや、iMacなどと比較するとスペックがたいへん微妙であったことは事実であり、また当時組んでいたマシンと比較してもうーんという感じでしたから、青春時代にスペックこそPCという観念を強く植え付けられてきた身としては、いまいち食指が動かなかったのも仕方なかったかもしれません。&lt;/p&gt;&#10;&lt;p&gt;そうは言いつつも、やはり一体型に手を出すことはできず、iMacを魅力的だと評しながら、結局Mac miniを購入したのですが、まさかこれが2012年でもっとも素晴らしい買い物になるとは…。&lt;/p&gt;&#10;&lt;p&gt;サブマシンだったはずが、半年後にはいつの間にかメインマシンに昇格し、メモリは増設され、ハードディスクはSSDに換装されました。Magic Trackpadも単体で購入しました。気が付くと、無くてはならないマシンに。&lt;/p&gt;&#10;&lt;h2 id="unixであるosxの魅力必要なリソースを備えたハードウェア"&gt;UNIXであるOSXの魅力、必要なリソースを備えたハードウェア&#10;&lt;/h2&gt;&lt;p&gt;最近はよくSurfaceとMacBookなんとかの比較を見ますが、あまり意味がない比較です。OSが違うのですから。OSXは流行のOSでありながら、れっきとしたUNIXであり、コマンドラインで昔からの多くのソフトウェア資産を使用することができます。これが、とても素晴らしい。しかも、Linuxのようにドライバやサービスの対応で苦労することもあまりありません。また、Mac miniは高性能とは言い難い構成ですが、必要なリソースは備えていました。クアッドコアのCore i7は、仮想化など重い作業を含めた多くの処理を楽々とこなしてくれます。それだけに、2014でデュアルコアとなったのは、とても悲しい。&lt;/p&gt;&#10;&lt;p&gt;Mac miniは時折Macのエントリーモデルであり初心者向きであるなどというような紹介のされ方をしますが、私はむしろ逆ではないかと思います。Macを堪能するには、最初からすべて揃っているiMacやMacBook系統のほうが断然良いでしょう。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、かなり限定的な使われ方を想定しているような2014のラインナップでも、Mac miniは自分に必要なものはこれだけと言える人たちにこそ、もっとも輝けるマシンだろうと思います。まぁ、現実問題としては、すべてを一気にスイッチしなくてよく、かつiMacに比べて安価であるという点から、他OS…というかWindowsからの乗り換えを考えている人に、魅力的に見えるのは理解できることではあるのですが、初めてのMacがMac miniは、個人的にはオススメではありません。&lt;/p&gt;&#10;&lt;h2 id="mac-miniは良いマシン"&gt;Mac miniは良いマシン&#10;&lt;/h2&gt;&lt;p&gt;ダラダラと書いてきましたが、Mac mini 2012は私にとっては予想以上に素晴らしいマシンだったと、そういうことです。2014で示された方向性…CPUのデュアルコア化、拡張性のなさ、には残念な気持ちもありますが、どうしても次が気になってしまいますね。&lt;/p&gt;&#10;&lt;p&gt;ところで、こういうあまり意味のない記事は、他人の雑感を読みたがる私のような物好きが、しつこく検索してちょろっと引っかかるかもしれない、くらいが良いのですが、適当に書いたとりとめのない雑記事がやけに上の方にヒットしてしまい、なんだか気恥ずかしくなるということがあります。ヒットして困るというのも贅沢な悩みではありますが、あれはどうにかならないものか…。&lt;/p&gt;</description></item><item><title>LPIC 101 試験予約 直前だと週末は難しいようで</title><link>https://hack-le.com/45764033-2/</link><pubDate>Wed, 21 Oct 2015 10:21:24 +0900</pubDate><guid>https://hack-le.com/45764033-2/</guid><description>&lt;h2 id="lpicのジュニアレベルを来週月曜日に予約"&gt;LPICのジュニアレベルを来週月曜日に予約&#10;&lt;/h2&gt;&lt;p&gt;ジュニアレベルか…と、名前にちょっと打ちひしがれる気持ちがありつつ、LPIC 101の試験予約をしました。現在はLPIC level1の移行期で、Version 3.5とVersion 4.0があり、腕試しとして受験する私は当然新バージョンのほうを選択したのですが、このVersion 4.0の名前がJunior levelとかそんな名前でした。ジュニアレベルだそうです。なるほどそうなのでしょうが、ちょっと凹みます。落ちるわけにはいかないですね。来週月曜日に試験です。なかなか時間が取れず、今週末ならいけるかな、と思って重い腰を上げて予約ページを開いてみたら、&lt;strong&gt;週末は既に満杯&lt;/strong&gt;で。ほぼ自動の試験のようですから、もっと受け放題みたいな感じだと勝手に思っていたのですが、そんなことはなかったようです。&lt;/p&gt;&#10;&lt;h2 id="ping-t経由だと少し安くなる"&gt;Ping-t経由だと少し安くなる&#10;&lt;/h2&gt;&lt;p&gt;私が今回勉強したのはほとんどすべて「&lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LPIC/オラクルマスター/ITパスポート/ITIL総合学習サイト Ping-t - 無料CCNA、LPIC、Oracle Master、ITパスポート問題集、ITILファンデーション、合格体験記、Cisco実機シミュレータ、実機講習&lt;/a&gt;」ですが、このサイトでチケットを購入すると、公式よりも1000円ほど安くなりました。&lt;strong&gt;会員登録自体は無料なので、Ping-tで割引チケットを購入するのが、非常に高い受験料を少しでも和らげる手段&lt;/strong&gt;となりましょう。まぁ、あまり自腹で受ける人っていないような気もするのですが…。&lt;/p&gt;&#10;&lt;h2 id="暗記暗記暗記"&gt;暗記、暗記、暗記&#10;&lt;/h2&gt;&lt;p&gt;しばらくガラポンテレビを見ていなかったら、二週間ほど止まっていたことに気づきました。しかも再起動をしても録画が始まらず、仕方ないので電源を抜き直すと、録画がまた始まるようになりました。どうにも、不安定な機器だという印象は否めません。まぁ、結局動いてくれたのでよかったのですが…そもそも二週間も気づかなかったのは、自分の運用に問題があります。テレビにも面白いものがあることがわかったので、色々みたいなとは思うのですが、ちょっと忙しくなるとなかなか…。&lt;/p&gt;&#10;&lt;p&gt;それはよいとして、再録画を始めたので、早速番組を見てみました。視点・論点という番組で、新井紀子さんがAIについて話していたので、見てみました。新井紀子さんは数学者で、昔この人の「&lt;strong&gt;生き抜くための数学入門&lt;/strong&gt;」という、マイナスの考え方や無限など、普段使っているが学校できちんと説明されなかった部分について丁寧に書かれた本を読んで以来（良書です）、非常にためになる本を書く著者として、個人的に追いかけている人の一人です。&lt;/p&gt;&#10;&lt;p&gt;話としては、在のAIブームが第三次であること、背景に機械学習とビッグデータ、そしてコンピュータの高性能化があること、などがあげられていました。そして、弁護士など現在知的と思われている職業が、2030年までにコンピュータに代替される可能性が指摘されていることなどを話され、そのうえで、時代と共に学校で学ぶべきことも変わらなければいけないとして、「パターンや暗記ではなく、深く意味を理解するような学習を」と結びました。&lt;/p&gt;&#10;&lt;p&gt;新井紀子さんは「コンピュータが仕事を奪う」という本も書いていて、私は既にその本を読んでいたので、特に目新しくはありませんでした。しかしながら、改めて考えると、この試験勉強というのはその対極にある学習です。yumとrpm、apt-getとapt-cache、dpkgのこまかなオプションを覚えるのに苦労している自分の姿を見ると、いまさら何してるんだろうという気持ちになります。manで調べたらええやん、と思ってしまうのです。実際、最終的にはそうなるような気がします。&lt;/p&gt;&#10;&lt;p&gt;そうは言っても、自分にとって勉強になるなと思ったからこそLPICの勉強をしているわけで、またコマンドやオプションを丸暗記して使いやすくなったことで、テキストフィルタのコマンドもそれなりに使うようになってきた面もありますから、丸暗記にも効用はある、と信じたいところです。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00GWAVQDW" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&#13;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=478169005X" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;</description></item><item><title>Windows 10が未だこない私の初代Surface Proはいつ死ねるだろう</title><link>https://hack-le.com/45731993-2/</link><pubDate>Sat, 17 Oct 2015 22:55:26 +0900</pubDate><guid>https://hack-le.com/45731993-2/</guid><description>&lt;h2 id="windows-10がこない"&gt;Windows 10がこない&#10;&lt;/h2&gt;&lt;p&gt;最近、Windows 10が自動アップデートにより勝手にダウンロードされる、という件で話題になっていたようです。その一方で、私は初日の7月29日より前に予約していたにも関わらず、いまだにWindows 10が降りてきません。いい加減イメージファイルから自分でやろうかと思うこともあるのですが、そんなにWindowsをいじりたいというわけでもなし、待ってればそのうちくるだろう、などと考えているうちに、いつのまにやら10月も半ばです。&lt;/p&gt;&#10;&lt;h2 id="少々重たくなってきた初代surface-pro"&gt;少々重たくなってきた初代Surface Pro&#10;&lt;/h2&gt;&lt;p&gt;私が現在持っている唯一のWindowsマシンは、二年以上前に購入した初代Surface Proです。タブレットも陳腐化が叫ばれる昨今ですが、ちょうど２，３年くらい前までは、まだまだ進化途中という感じでした。そのためか、今久しぶりにこの初代Surface Proで記事を書いていますが、使用していると動作がちょっとモッサリしているなと思うことがあります。スペックを見ればそれほど悪くはないと思うのですが、しかしまぁ、フルのWindowsを動かすには多少心許ないところがあるのでしょうか。&lt;/p&gt;&#10;&lt;p&gt;いろいろあって、全体的にあまり気に入っていないマシンなのですが、良いと思うところもあります。それは、オプションの高い割に安っぽいキーボードで、これはあまり評判がよろしくないと思われますが、私はけっこう気に入っています。私はこの手のペラッペラなパンタグラフ系のキーボードが好きなのです。キーボードに拘りだしたのは、大学時代に研究室に転がっていたFILCOのメカニカルキーボードをたまたま触れて感動したことがキッカケなのですが、私は好みはそちらではなかったらしい。そんな私にとって、嗜好のキーボードはAppleの純正キーボードであったりします。…といいつつ、今メインで使っているのはHHKBなのですが、これは憧れて購入してしまった手前、高かったのに使わないともったいない、という貧乏根性が主なのです。&lt;/p&gt;&#10;&lt;p&gt;と、話がずれましたが、私はSurface Proのペラペラキーボードが存外気に入っている、という話です（評判の悪いMacBookのキーボードも、私には合うのではないかと感じています）。&lt;/p&gt;&#10;&lt;h2 id="電源コネクタさえなんとかなれば"&gt;電源コネクタさえなんとかなれば&#10;&lt;/h2&gt;&lt;p&gt;キーボードが意外とよかったといっても、それだけでマシンを評価できるわけではありません。とはいえ、基本的にはそれほど酷いところもない、のですが…電源コネクタ、これが致命的です。本当に本当に、よく取れます。最初私は使い方を間違えているのだろうかと思ったほどです。しかし、単純によく取れるのです。しかも、いつ頃からか、電源に接続されています、充電されていません、という謎のメッセージが頻発されるようになりました。調べると、同様の症状の人も散見されるのですが、あまり大きな話題になっていないことを見ると、私の運が悪かったのかもしれません。&lt;/p&gt;&#10;&lt;p&gt;どうやら、カバーを閉じてスリープ状態にして、丁寧にコネクタを取り付けると、充電がされるようなのですが、これはまったく不便で、これがために私はこのマシンを敬遠しているといっても過言ではありません。また、世間一般では評価の高いSurfaceブランドを、個人的には信用できない要因ともなっています。逆にいうと、このコネクタ問題さえなければ、まぁよいのですが…。Surface 3以降、コネクタは多少改善されたという話を聞きます。問題になっていなかったわけでは、ないらしい。&lt;/p&gt;&#10;&lt;h2 id="だが生きている"&gt;だが生きている&#10;&lt;/h2&gt;&lt;p&gt;そんなこんなではあるのですが、電源コネクタがウンコということを除けば、曲がりなりにも立派に生きて稼働しています。当時10万円近くしましたし、とても10万円分遊んだとは言いがたいマシンではありますが、唯一のWindowsネイティブマシンとして多少なりとも働いてきたことも事実です。いい加減、そろそろ世代交代をしてもいいかなと思います。しかし、生きている限りは使わなくては、私の貧乏根性が許しません。というわけで、せめて噂の新OSを試させてもらいたいものだなと思っているのですが、嫌がる人の元には強制的に届いているようなのに、望んでいる私の元には未だ届いていないのだから、世の中ままならないものです。さりとて、自分で入れるのもどうにも面倒であるし、ここまで待ったら意地でも自動アップデートしなければ何か負けたような感じがします（何に？）。愚痴でした。&lt;/p&gt;</description></item><item><title>Yoga Tab 3 Pro 10←13が出ていないのですがそれは</title><link>https://hack-le.com/45719305-2/</link><pubDate>Fri, 16 Oct 2015 15:40:10 +0900</pubDate><guid>https://hack-le.com/45719305-2/</guid><description>&lt;p&gt;iPad Proも遂に発表され、発売の日も近づいてきているわけですが、大型のタブレットの機運はあまり高まっていないようです。まぁ、タブレットの用途を考えるとニッチなジャンルだとは思います。私は以前に「&lt;a class="link" href="//hack-le.com/44729540-2/" &gt;12インチ以上の大型のAndroidタブレットが欲しい : 或る阿呆の記&lt;/a&gt;」という記事を書いたくらいなので、大型のタブレット欲しいなぁと思っている人間の一人です。主な用途は雑誌や大判の技術書などを閲覧することですが、ゲームや映画を比較的大画面で、など考えている人もいるでしょう。&lt;/p&gt;&#10;&lt;h2 id="いつの間にかyoga-table-2の後継"&gt;いつの間にかYoga Table 2の後継&#10;&lt;/h2&gt;&lt;p&gt;先の記事では、LenovoのYoga Tablet 2 Proが現在における実質的な唯一解としましたが、Yoga Tablet 2 Proが発売されてからもうすぐ1年が経とうとしています。鈍化したとはいえ、この分野はまだ進化の早い分野です。特にYoga Tablet 2 ProはCPUがAtomで、電子書籍の閲覧は実はCPUパワーを要するものですから、私としては幾ばくかの不安が拭い取れず、次の機種を待とうと考えていました。&lt;/p&gt;&#10;&lt;p&gt;で、待っていたら、いつの間にかでていましたね、新機種。「&lt;a class="link" href="http://gigazine.net/news/20150903-lenovo-yoga-tab3-pro-miix-700/" target="_blank" rel="noopener"&#10; &gt;Surfaceキラー・タブレット「Miix 700」＆プロジェクター内蔵タブレット「Yoga Tab 3 Pro」をLenovoがリリース - GIGAZINE&lt;/a&gt;」…なるほど、なるほど。Tabletが地味にTabになっています。Windows仕様のものとAndroid仕様のものの両方を用意しているようです。さて、肝心のYoga Tab 3 Proは…と。ふむ、なるほど、10インチ！10インチ、なのですが。10インチ、なんですけれど。&lt;/p&gt;&#10;&lt;p&gt;うーん、そうなんです。&lt;strong&gt;13インチモデルが、出ていない&lt;/strong&gt;んですね。前モデルでは13インチモデルのみに搭載されていた、謎のプロジェクター機能も10インチモデルに引き継がれているようです。いや、そんなことはどうでもいいのですが。13インチモデルが、ないんですよ。Lenovoの公式サイトを見ると（「&lt;a class="link" href="http://shop.lenovo.com/us/en/tablets/lenovo/yoga-tablet-series/yoga-tab-3-pro-10/" target="_blank" rel="noopener"&#10; &gt;Yoga Tab 3 Pro | The Ultimate Video Tablet | Lenovo US&lt;/a&gt;」）、Yoga Tab 3 Pro &lt;strong&gt;10&lt;/strong&gt;となっているので、ひょっとしたらこれから13が出てくるのかもしれないのですが、同時に発表されたYoga Tab 3が8インチモデルなのでそれとの比較なのかもしれず。いずれにせよ現時点では、前モデルでProの名を冠していた13インチモデルが10インチになっていること、ただそれだけが現実です。悲しい。&lt;/p&gt;&#10;&lt;h2 id="みんな欲しくないのかなぁ"&gt;みんな欲しくないのかなぁ&#10;&lt;/h2&gt;&lt;p&gt;Yoga Tab 3の記事はいくつか読みましたが、どれも13インチモデルが発表されなかったということについて全然触れていないのが気にかかります。大きさって、スペックの中でも最も気にすべきところの一つだと思うのですが…iPhoneが大きくなった時はあんなに大騒ぎしたのに。&lt;/p&gt;&#10;&lt;p&gt;Appleついでに、iPad Proについても、調べると法人需要だとか教育向けだとかそんな話ばかりで、ホビーで俺が使っちゃうんだという人はあまり見受けられませんし、欲しい人って、あまりいないのかなぁ。&lt;/p&gt;&#10;&lt;h2 id="とりあえずもうちょっと待ってみよう"&gt;とりあえずもうちょっと待ってみよう&#10;&lt;/h2&gt;&lt;p&gt;さて、目下の問題は、&lt;strong&gt;相変わらず大型タブレットは去年発売されたYoga Tablet 2 Proがほぼ唯一の現実的な解という状況が一向に変わっていない&lt;/strong&gt;ことです。値段も熟れてきたので、いい加減買おうなぁという気もします…が、Yoga Tab 3 Pro 13が今後出ないとも限りませんし、一縷の望みをかけて、もう暫く待ってみることにします。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00OCHGG46" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>iMac 2015 出ましたね。27インチはSkylake</title><link>https://hack-le.com/45700838-2/</link><pubDate>Wed, 14 Oct 2015 17:34:04 +0900</pubDate><guid>https://hack-le.com/45700838-2/</guid><description>&lt;p&gt;10月中に新作が発表されるのではと噂されていたiMacですが、何の前触れもなくサイレントにアップグレードされました。21.5インチに4Kモデルが出たのと、27インチモデルがまぁ順当にアップデートされた、くらいのものです。CPUがBroadwellなのは残念な気もします。27インチのほうはちゃんとSkylakeのようですけれど。&lt;/p&gt;&#10;&lt;h2 id="割と順当なアップデート"&gt;割と順当なアップデート&#10;&lt;/h2&gt;&lt;p&gt;Mac miniはもうCPUはパワーダウンするし、拡張性はなくなるしで踏んだり蹴ったりなので、最近はiMac 27インチモデルにも注目しています。買い替え候補です。なんだかんだいってRetinaディスプレイも気になりますし。&lt;/p&gt;&#10;&lt;p&gt;アップデート内容を見ると、購買意欲を唆られる感じではありませんが、悪くはありません。CPUはSkylakeになっていて、店頭モデルでもFusion Drive 2TBのものが出て、前モデルではやや力不足の話も聞こえたGPUも多少アップグレードされている、たいへん順当なブラッシュアップです。ただ、CPUはSkylakeですが、メモリはDDR3のようです。まぁ、メモリは唯一残された拡張性なので（まさかついにここも潰されてないですよねぇ…）、DDR3で良かったかもしれません。あ、最も安い1TB Fusion Driveのモデルは、フラッシュストレージ部分が24GBしかないそうですが、これはちょっと罠かもしれませんね。&lt;/p&gt;&#10;&lt;p&gt;もし購入するとすれば、最も27インチモデルの最も高価なものをそのまま通販で多少なりとも安く買うか、Apple StoreよりカスタマイズでFusion Driveにするくらいでしょうか。グラフィックカードも、気になるところではあるのですが、まぁAppleが標準でよしと考えたものを信じましょう。CPUをCore i7にしたら発熱がすごい、というような話もレビューやら見ているとありましたし、徒にスペックを上げるのが良いとも限りません。まぁ、店頭モデルをそのまま買って、差額でメモリなり揃えるのが無難でしょうか。&lt;/p&gt;&#10;&lt;h2 id="miniは"&gt;miniは？&#10;&lt;/h2&gt;&lt;p&gt;ところでMac miniについては噂のうの字も聞こえてきませんけれど、どうなんでしょうか。やはりスルーなのかとも思いつつ、存在感がなさすぎて噂にもなってないだけでしれっとアップデートされないかという希望もあります。しかしアップデートしたところで、きっと2014年モデルを継承するガッカリ仕様なのでしょう…。&lt;/p&gt;&#10;&lt;p&gt;なんだかんだいって、Mac mini 2012モデルをまだしばらく使い続ける、かな。それもつまらないですね。なんとなく。何か良い物、ないかなぁ。&lt;/p&gt;</description></item><item><title>Gnuplot入門クイックツアー 二次元グラフ描画で困らなくなるまで</title><link>https://hack-le.com/45658110-2/</link><pubDate>Sat, 10 Oct 2015 15:59:33 +0900</pubDate><guid>https://hack-le.com/45658110-2/</guid><description>&lt;p&gt;本記事は、Linuxなどですぐにインストールして使えるグラフ描画ソフト、Gnuplotの入門記事です。インストールについては特に解説しませんが、二次元グラフを実際に描画することを通して、ざっと使えるようになることを目指します。&lt;/p&gt;&#10;&lt;p&gt;(2017/1/29) data.txtが引越しのどさくさで消えているのを修正（いまさら）&lt;/p&gt;&#10;&lt;h2 id="はじめに"&gt;はじめに&#10;&lt;/h2&gt;&lt;p&gt;この記事は、私が大学生だったとき…すなわちもう数年前のことですけれど（遠い目）、同期や他の人が効率よくGnuplotで必要な知識を学べるようにと作成した資料をネタ元にしています。したがって、内容としては若干古いのですが、Gnuplot自体が古いソフトウェアですので、内容に関しては問題ないと思います。長く使える知識です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;二次元のグラフを描画し、保存して利用するのに、私が必要だと思う知識について、なるべく最初の段階から（インストールは他記事に譲りますが）わかりやすく記述した&lt;/strong&gt;つもりです。手元に実行できる環境をおいて、まずは実際に手を動かしながら一通り通せば、後はなんとなりなるだろうと思います。元の資料では三次元グラフの描画についても書いていたのですが、中途半端であったことと、私自身が現在三次元グラフをまるで描く機会がなく使っていないので、三次元グラフについては本記事の対象外とします。&lt;/p&gt;&#10;&lt;h2 id="目標"&gt;目標&#10;&lt;/h2&gt;&lt;p&gt;Gnuplotは古いソフトウェアですから、そのコマンド体系は決してわかりやすいとは言えませんが、昨日の新機能が明日陳腐化するこのIT業界において、なお生き残っている稀有なプロッターでもあります。その機能は膨大であり、とても1記事で書けるようなものではありませんし、また私もそんなに習熟していません。&lt;strong&gt;この記事の目標は、これからGnuplotを始める人が、最初の壁とも言えるとっかかりを超えて、後は自分でなんとなりできる状態になるようになること&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;なお、Gnuplotはクロスプラットフォームなので、Windowsでも使用することができますが、当記事ではUnixで使用することを前提としています。まぁ、インストールして環境変数さえしっかり設定すれば、大して変わらないと思いますが。&lt;/p&gt;&#10;&lt;h2 id="起動終了方法"&gt;起動・終了方法&#10;&lt;/h2&gt;&lt;p&gt;起動および終了方法について。&lt;/p&gt;&#10;&lt;h3 id="起動方法"&gt;起動方法&#10;&lt;/h3&gt;&lt;p&gt;端末より、gnuplot と入力することで、gnuplotを起動できます。&lt;/p&gt;&#10;&lt;pre&gt;`$ gnuplot&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;あらかじめファイルを作っておくことで、非対話的に実行することもできます（参考：「&lt;a class="link" href="http://dsl4.eee.u-ryukyu.ac.jp/DOCS/gnuplot/node12.html" target="_blank" rel="noopener"&#10; &gt;非対話的なgnuplotの実行&lt;/a&gt;」）。しかし、そのようなときはたいてい別にスクリプトがあり、外部プログラムとしてGnuplotを呼ぶと思いますので、私はあまり使いません。また、本記事はあくまでgnuplotの操作方法そのものについての記事ですので、非対話的な使い方についてはこれ以上言及しません。&lt;/p&gt;&#10;&lt;h3 id="終了方法"&gt;終了方法&#10;&lt;/h3&gt;&lt;p&gt;gnuplotを起動したら、&lt;strong&gt;quitコマンドで終了&lt;/strong&gt;することができます。&lt;/p&gt;&#10;&lt;pre&gt;`quit&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;quitコマンドには省略形が存在し、以下のように q と入力しても終了することができます。&lt;/p&gt;&#10;&lt;pre&gt;`q&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このように、&lt;strong&gt;Gnuplotのたいていのコマンドには省略形が存在&lt;/strong&gt;します。文字数が少なくなり、見た目にもスッキリするのでオススメです。知らない人に読ませる上での可読性の面では最悪かもしれませんが…どうしてもそういう面はあります。&lt;/p&gt;&#10;&lt;h2 id="関数式からグラフを描画"&gt;関数式からグラフを描画&#10;&lt;/h2&gt;&lt;p&gt;基本として、まずはsin(x)のような関数式からグラフを描画します。&lt;/p&gt;&#10;&lt;h3 id="グラフ描画plotpreplotrep"&gt;グラフ描画…plot(p),replot(rep)&#10;&lt;/h3&gt;&lt;p&gt;plotコマンドで正弦波を書きます。&lt;/p&gt;&#10;&lt;pre&gt;`plot sin(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;描けました。plotにも省略形があり、pと表記できます。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ちなみにグラフを表示しているウィンドウがアクティブウィンドウの状態ならば、キーボードからでもqで閉じることができます。グラフを閉じたら、replotコマンド、あるいはその省略形のrepで、同じ図形をもう一度描けます。よく使うコマンドです。&lt;/p&gt;&#10;&lt;pre&gt;`rep&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="折れ線グラフ棒グラフetcの描き方with-lineswith-boxesetc"&gt;折れ線グラフ、棒グラフetcの描き方(with lines,with boxes,etc&amp;hellip;)&#10;&lt;/h3&gt;&lt;p&gt;グラフは折れ線で書いたり、棒グラフにしたり、離散的に描いたりできます。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x) with impulses　←　離散的&#13; p sin(x) with lines　←　折れ線グラフ&#13; p sin(x) with dots　←　散布図&#13; p sin(x) with boxes　←　棒グラフ&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;まずは上の四つを覚えておけばだいたい対応できると思います。また、上三つは次のように省略可です。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x) w i&#13; p sin(x) w l&#13; p sin(x) w d&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="同時に複数のグラフを描く"&gt;同時に複数のグラフを描く&#10;&lt;/h3&gt;&lt;p&gt;同時に複数のグラフを描きたいときは、,(カンマ)を使います。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x) w d,cos(x) w i&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="xyの範囲を指定set-xrangeyrange"&gt;x,yの範囲を指定…set xrange,yrange&#10;&lt;/h3&gt;&lt;p&gt;xとyの範囲設定を行います。以下のコマンドを実行してみましょう。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x)&#13; set xrange [-pi:pi]&#13; set yrange [0.0:2.0]&#13; rep&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;&lt;strong&gt;set ?rangeで範囲指定ができる&lt;/strong&gt;ということです。なお、&lt;strong&gt;piは円周率&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;h3 id="設定の初期化reset"&gt;設定の初期化…reset&#10;&lt;/h3&gt;&lt;p&gt;一度設定すると、再設定するまでそのままです。元に戻したくなるときもあります。そんなときは&lt;strong&gt;reset&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;pre&gt;`set xrange [-pi:pi]&#13; p sin(x)&#13; reset&#13; rep&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;&lt;strong&gt;この後にでてくるsetなんちゃら系はすべてresetで初期化できます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="対数グラフを描く"&gt;対数グラフを描く&#10;&lt;/h3&gt;&lt;p&gt;対数グラフも描けます。&lt;/p&gt;&#10;&lt;pre&gt;`p log(x)　←自然対数&#13; p log10(x)　←常用対数&#13; set logscale x&#13; set xrange [1:10]&#13; p log10(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;残念ながらlog2()とかはありません。log10()あれば全部書けますが。&lt;/p&gt;&#10;&lt;h3 id="データ点の数の設定set-samples"&gt;データ点の数の設定…set samples&#10;&lt;/h3&gt;&lt;p&gt;次にsin(x^2)を描いてみます。&lt;strong&gt;ベキ乗は^ではなく&lt;/strong&gt;を使います**。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x**2)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;するとこんなグラフができます。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/d/9/d9becc26.jpg" &gt;&lt;img alt="9830682df5c91cae" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/d/9/d9becc26-s.jpg"&gt;&lt;/a&gt;&#10;明らかに何かが違います。次のコマンドを打ってみましょう。&lt;/p&gt;&#10;&lt;pre&gt;`set samples 1000&#13; rep&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;すると下のようなグラフができます。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/9/b/9b5db057.jpg" &gt;&lt;img alt="466bf0a5951926f9" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/9/b/9b5db057-s.jpg"&gt;&lt;/a&gt;&#10;グラフが滑らかになっています！どうも、&lt;strong&gt;gnuplotは初期設定だとデータ点100でグラフを描く&lt;/strong&gt;みたいで、グラフによっては角張ってしまいます。グラフによっては全然違うグラフになってしまうことも…。そんなときに、&lt;strong&gt;set samplesはデータ点の数を変更する&lt;/strong&gt;コマンドです。式でグラフを描くときはデータ点の数に留意しましょう。&lt;/p&gt;&#10;&lt;h2 id="データファイルを読み込んで描画する"&gt;データファイルを読み込んで描画する&#10;&lt;/h2&gt;&lt;p&gt;実際にgnuplotを使うときには、取得したデータのファイルを読み込んで描画することが多いと思います。というわけで、次のテキストファイル &lt;a class="link" href="//hack-le.com/sozai/data.txt" &gt;‎data.txt&lt;/a&gt; を読み込んでみます。適当にテキストファイルにでも落としてください。&lt;/p&gt;&#10;&lt;h3 id="データファイルを読み込んでグラフを描画plot"&gt;データファイルを読み込んでグラフを描画(plot)&#10;&lt;/h3&gt;&lt;p&gt;ではdata.txtを読み込んでグラフとして描画してみることにします。gnuplotを立ち上げるのですが、このときdata.txtがカレントディレクトリにある状態でgnuplotを起動させます。そうしないといけないわけじゃないけど、そうしないとdata.txtがどこにあるかをいちいち指定しなくてはなりません。&lt;/p&gt;&#10;&lt;p&gt;早速plotします。&lt;/p&gt;&#10;&lt;pre&gt;`p "./data.txt"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このとき、&lt;strong&gt;ファイル名の入力はtabキーで補完&lt;/strong&gt;できます。&lt;/p&gt;&#10;&lt;pre&gt;`p "d&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;この時点でタブキーを押せば、上のp &amp;ldquo;./data.txt&amp;quot;に自動的に補完されるというわけです。このへん端末と同じですね。一応補足ですが、&amp;rdquo;./&amp;ldquo;の&amp;rdquo;.&amp;ldquo;はカレントディレクトリを表します。つまり「カレントディレクトリのdata.txtというファイル」という意味です。./がないと、gnuplotはカレントディレクトリの中を探してくれずdata.txtが見つからない…ということもなく、端末と違いgnuplotはカレントディレクトリを標準で探してくれるので、実は./は必要というわけでもないのですが、ただカレントディレクトリの中にありますよということを明示してるんだと思えばよいです。なお、ダブルクォーテーションはシングルクォーテーションでも問題ありません。&lt;/p&gt;&#10;&lt;p&gt;さて、グラフですが、一周期の正弦波が描かれたはず。ただ前節の「p sin(x)」と違って、折れ線表記じゃなく点を一つ一つプロットした形で表示されます。「折れ線にしたいぞー」という場合も多いと思うので、そんなときは前節の内容を思い出して、グラフの形状を設定します。with lines、すなわちw lです。&lt;/p&gt;&#10;&lt;pre&gt;`p "./data.txt" w l&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;もちろん「w i」ならインパルス状の棒で表現されます。&lt;/p&gt;&#10;&lt;h3 id="指定の列を読み込むusingu"&gt;指定の列を読み込む…using(u)&#10;&lt;/h3&gt;&lt;p&gt;ここで一度data.txtの中身を見てみることにします。&lt;strong&gt;半角スペースで区切られた形で、3列分のデータがあります&lt;/strong&gt;。これがgnuplotのデータファイルの標準形式（もちろんカンマ区切り、すなわちcsvなども読み込めますが設定の変更が必要、後述）。1列目がx軸、2列目がy軸として読み込まれてるということ。では3列目は？デフォルトの設定では、無視されます。1列目をx軸、3列目をy軸にするにはどうするのかというと、&lt;strong&gt;using&lt;/strong&gt;を使います。&lt;/p&gt;&#10;&lt;pre&gt;`p "./data.txt" using 1:3 w l&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで3列目が読み込まれて、余弦波が表示されます。&lt;strong&gt;usingはuとも省略されます&lt;/strong&gt;。次に、2列目と3列目を同時に表示してみます。&lt;/p&gt;&#10;&lt;pre&gt;`p "./data.txt" u 1:2 w l, "./data.txt" u 1:3 w l&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このようにして、データファイルは読み込めます。&lt;/p&gt;&#10;&lt;p&gt;なお、&lt;strong&gt;一列しかない場合、自動的にx軸は「0,1,2,3…」という風に割り振られます&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;データファイルを作るときには形式を意識してつくったほうが後が楽ですね。&lt;/p&gt;&#10;&lt;h3 id="データファイルの数値をいじる"&gt;データファイルの数値をいじる&#10;&lt;/h3&gt;&lt;p&gt;データファイルの数値は、変数としていじることができます。たとえば、次に下のように打ってみます。&lt;/p&gt;&#10;&lt;pre&gt;`p "./data.txt" u ($1*(1000/64)):2&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;x軸が一気に変わります。列番号に$をつけることで、データファイルの数値を変数として扱えるわけで、スケール変換や単位変換などを楽にこなせます。&lt;/p&gt;&#10;&lt;h3 id="補足カンマ区切りcsvのファイルを読み込む"&gt;補足：カンマ区切り、csvのファイルを読み込む&#10;&lt;/h3&gt;&lt;p&gt;例としてスペース区切りの標準形式のファイルを用意しましたが、実際にはデータはcsvであることが多いです。まぁ、csvをスペース区切りに変換してもよいのですが、できればそのまま読み込めたほうが手間がないですね。以下のコマンドで、csv形式を読み込むようになります。&lt;/p&gt;&#10;&lt;pre&gt;`set datafile separator ','&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このコマンドを使えば、様々なデリミタに対応できます。&lt;/p&gt;&#10;&lt;h3 id="補足２yyyymmdd-形式などの時系列データを読み込む"&gt;補足２：yyyy/mm/dd 形式などの時系列データを読み込む&#10;&lt;/h3&gt;&lt;p&gt;X軸が2015/10/10など、時刻表記になっていることもよくあります。そのときは、次のように指定することが可能です。&lt;/p&gt;&#10;&lt;pre&gt;`set xdata time&#13; set timefmt '%Y/%m/%d %H:%M:%S'&#13; set format x '%m/%d\n%H:%M'&#13; #set xrange ['2015/10/10 10:00:00':'2015/10/10 12:00:00']&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;set xrangeは必要に応じて。&lt;/p&gt;&#10;&lt;h3 id="補足３複数の軸を使いたい"&gt;補足３：複数の軸を使いたい&#10;&lt;/h3&gt;&lt;p&gt;たとえば、複数のグラフをプロットしたとき、左のy軸と右のy軸で異なる単位を使いたい、などということもあります。この記事ではやや範囲を逸脱するので詳しくは述べませんが、「&lt;a class="link" href="//hack-le.com/45576248-2/" &gt;gnuplotで日付・時刻の書かれた時系列データをグラフに描いて保存するシェルスクリプト : 或る阿呆の記&lt;/a&gt;」に実行例がありますので、知りたい人は参考にどうぞ。&lt;/p&gt;&#10;&lt;h2 id="グラフの体裁を整える"&gt;グラフの体裁を整える&#10;&lt;/h2&gt;&lt;p&gt;前節までで描きたいグラフが描けるようになったとして、今度は軸に名前をつけたりグラフにタイトルつけたり、体裁を整える方法を書いていきます。&lt;/p&gt;&#10;&lt;h3 id="グラフにタイトルを付けるset-title"&gt;グラフにタイトルを付ける…set title&#10;&lt;/h3&gt;&lt;p&gt;グラフにタイトルを付けるには&lt;strong&gt;set title&lt;/strong&gt;を使います。&lt;/p&gt;&#10;&lt;pre&gt;`set title 'sin wave'&#13; p sin(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="x軸y軸にラベル名前をつけるset-xlabelylabel"&gt;x軸、y軸にラベル(名前)をつける…set xlabel,ylabel&#10;&lt;/h3&gt;&lt;p&gt;軸には名前をつけることも必要です。そんなときはset ?labelで引数に軸名をつけます。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x)&#13; set xlabel 'time[t]'&#13; set ylabel 'amplitude'&#13; rep&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このコマンドは、非常にオプションが多く、文字サイズ変えたりとか添字使ったりなどもできます。しかし、まず最初はこれだけで良いと思います。&lt;/p&gt;&#10;&lt;h3 id="目盛りの刻み幅を変えるset-tics"&gt;目盛りの刻み幅を変える…set ?tics&#10;&lt;/h3&gt;&lt;p&gt;目盛りはデフォルトだと細かすぎたり、大雑把すぎたりします。これもset ?ticsを使うことによって、自分で調整できます。例によって正弦波で試してみます。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x)&#13; set xtics 2 ←刻み幅2&#13; set ytics 0,0.1,0.5　←0から0.5までの間を0.1刻み&#13; rep&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;最後のyticsで、終点は指定しなくても問題ありません。&lt;/p&gt;&#10;&lt;h3 id="小目盛りを付けるset-mtics"&gt;小目盛りを付ける…set m?tics&#10;&lt;/h3&gt;&lt;p&gt;小目盛りをつけたいときには、set m?ticsを使います。これは&lt;strong&gt;大目盛りを何分割するか&lt;/strong&gt;という風に使います。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x)&#13; set mxtics 2&#13; set mytics 3&#13; rep&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="凡例の名前を変更するti"&gt;凡例の名前を変更する…ti&#10;&lt;/h3&gt;&lt;p&gt;凡例というのは、デフォルトだと右上にある「sin(x)」などのことです。なぜかkeyと呼ばれています。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="38eade26174a9a6a" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/0/6/06dd1349.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;デフォルトでは、式の名前や読み込んだデータファイルの名前が表示されるのですが、これは必ずしも嬉しくありません。&lt;strong&gt;凡例を自由に決めさせてほしいときには、tiを使います&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;pre&gt;`p sin(x) ti "sin wave"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで凡例が「sin wave」になりました。&lt;/p&gt;&#10;&lt;h3 id="凡例を枠の外に出すset-key-outside"&gt;凡例を枠の外に出す…set key outside&#10;&lt;/h3&gt;&lt;p&gt;凡例にグラフが重なることもあります。場所を移動させる方法は色々あるのですが、ひとまず枠の外に出してしまうのがもっともお手軽で簡単でしょう。&lt;/p&gt;&#10;&lt;pre&gt;`set key outside&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="凡例を消すunset-key"&gt;凡例を消す…unset key&#10;&lt;/h3&gt;&lt;p&gt;むしろ凡例がいらないということもよくあるでしょう。&lt;strong&gt;凡例を消すにはunset keyを使います&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;pre&gt;`unset key&#13; p sin(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;サイトや本によってはset nokeyと書かれていたりしますが、unset keyです。きっと古いバージョンではそうだったんでしょう。以下でunsetシリーズが連発されますが、いずれも同じことが言えます。&lt;/p&gt;&#10;&lt;h3 id="軸目盛りを消すunset-bordertics"&gt;軸、目盛りを消す…unset border,?tics&#10;&lt;/h3&gt;&lt;p&gt;グラフだけ欲しいんだ、軸も目盛りも邪魔なんだ、という状況で、軸も目盛りも消してしまうには？凡例はunset keyで消すことができた…ということは、まぁ、想像つくと思います。&lt;/p&gt;&#10;&lt;pre&gt;`unset key&#13; unset border&#13; unset xtics&#13; unset ytics&#13; p sin(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;それぞれset なんちゃらで復活します。&lt;/p&gt;&#10;&lt;article&gt;&#13;&#10;&lt;h2 id="グラフを画像ファイルとして出力"&gt;グラフを画像ファイルとして出力&#10;&lt;/h2&gt;&lt;p&gt;ここまでで、一通りGnuplotの操作について記述しました。で描いたグラフを画像ファイルとして保存します。この保存が、Gnuplotでは案外と鬼門で、このためにGnuplotの第一印象は悪くなりがちなのではないかとも思うほどです。この項目だけ見てもわかるように丁寧に解説しようと思います。多分。&lt;/p&gt;&#10;&lt;h3 id="pngjpg形式で保存"&gt;png(jpg)形式で保存&#10;&lt;/h3&gt;&lt;p&gt;まずはpng。以下の流れで正弦波のグラフを保存します。&lt;/p&gt;&#10;&lt;pre&gt;`set terminal png&#13; set output "sin_wave.png"&#13; plot sin(x)&#13; set output&#13; set terminal x11&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;なにしてるのか一個一個みていきます。&lt;/p&gt;&#10;&lt;pre&gt;`set terminal png&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでファイル形式を指定。&lt;strong&gt;terminalはtermでもよい&lt;/strong&gt;。ファイル形式というか、出力先を決めている、というのがほんとのところで、普通に描画する場合は、x11とかqtになります。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;set term pngのときに、サイズを指定することで、画像の大きさを変更することが可能&lt;/strong&gt;です。デフォルトは640x480ですが、たとえばこれを800x480にしたい場合、以下です。&lt;/p&gt;&#10;&lt;pre&gt;`set term png size 800,480&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;pngではなくjpgにしたい場合は、以下です。&lt;/p&gt;&#10;&lt;pre&gt;`set term jpg&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;どんな形式が使えるのか知りたかったら、set term で一覧が得られます。&lt;/p&gt;&#10;&lt;pre&gt;`set term&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;さて、set output 部分ですが。&lt;/p&gt;&#10;&lt;pre&gt;`set output "sin_wave.png"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これは出力するファイル名を指定してます。&lt;strong&gt;ダブルクォーテーションはシングルクォーテーションでもよいです&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;pre&gt;`plot sin(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ここで描きたいグラフを出力。通常ならsin(x)のグラフが新しくウィンドウをひらいて描画されるはずですが、今は「set terminal png」で出力先が変っているので、コマンドを入力してもなにもウィンドウに描画されません。&lt;/p&gt;&#10;&lt;pre&gt;`set output&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで出力先クリア。ここまでやって初めてファイル完成。これ以上ファイルには保存しないよ、ということであれば、出力先を元に戻します。&lt;/p&gt;&#10;&lt;pre&gt;`set terminal x11&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;x11は言わずと知れたX Window Systemのことですね。OSXだと不具合あるかも。qtとか指定できたら、そっちのほうがよいかもしれません。いずれにせよ、これで元通り。次にplot sin(x)とかしたら、普通にウィンドウにグラフが描画されます。なお、Windowsの場合は&lt;/p&gt;&#10;&lt;pre&gt;`set terminal windows&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;となるそうですが、私は使ったことはありません…。&lt;/p&gt;&#10;&lt;h3 id="eps形式で保存"&gt;eps形式で保存&#10;&lt;/h3&gt;&lt;h4 id="基本形式"&gt;基本形式&#10;&lt;/h4&gt;&lt;p&gt;pngとかjpgとかgifとかは上記のやり方でOKです。しかしながら、たとえばTeXを使いたい時など、epsのようなpostscriptファイルにすることもあります。こちらもだいたい同じです。&lt;/p&gt;&#10;&lt;pre&gt;`set term postscript eps&#13; set output "sin2_wave.eps"&#13; plot sin(x)&#13; set output&#13; set term x11&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;postscriptがなんだかけったいな感じがしますが、必要です。というより、postscriptが本体でepsがオプションというのが本当のところのようです。デフォルト設定だとepsなので、epsはなくてもだいじょうぶだと思いますが、ここは明示しておくほうがわかりやすいかな、と。&lt;/p&gt;&#10;&lt;h4 id="カラー出力や文字サイズ変更など"&gt;カラー出力や文字サイズ変更など&#10;&lt;/h4&gt;&lt;p&gt;さて、出力ファイルをみてみると、色が白黒になってます。論文など、白黒のほうが都合がいいこともあります。複数のグラフがある場合は、自動的に破線とかが使われてとても便利な機能です。しかし、もちろんカラー出力したい、ということもあるでしょう。やってみます。&lt;/p&gt;&#10;&lt;pre&gt;`set term postscript eps color&#13; set output "sin3_wave.eps"&#13; plot sin(x)&#13; set output&#13; set term x11&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;前節と何が違うかというと、当然オプション&amp;quot;color&amp;quot;です。これがデフォルトでは&amp;quot;monochrome&amp;quot;に設定されているということです。&lt;/p&gt;&#10;&lt;p&gt;せっかくですので、set term postscriptの形式を以下に。&lt;/p&gt;&#10;&lt;pre&gt;`set term postscript モード 色 線 'フォント' フォントサイズ&#13; モード…eps,ps,etc...&#13; 色…monochrome(白黒),color(フルカラー)&#13; 線…dashed(破線、デフォルト),solid(実線)&#13; 'フォント'…Helveticaがデフォ&#13; フォントサイズ…14とか数字&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;epsというのはpostscriptで指定するモードだったわけです。色を変えるにはcolorを指定するし、デフォルトの破線が気にいらなければsolidを指定すればいい。ちなみに文字サイズの変更の例を下におきます。&lt;/p&gt;&#10;&lt;pre&gt;`set term postscript eps enhanced 30&#13; set output "x3.eps"&#13; p x**3 ti "x^3"&#13; set output&#13; set term x11&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;けっこう大きくなってるのがわかります。ちなみに&lt;strong&gt;デフォルトのサイズは14&lt;/strong&gt;です。enhancedの解説は次節で。&lt;/p&gt;&#10;&lt;h4 id="添字やギリシャ文字などを使うenhanced"&gt;添字やギリシャ文字などを使う…enhanced&#10;&lt;/h4&gt;&lt;p&gt;term postscriptでは、軸名や凡例に添字を使うことができます。つまりx^2とかが綺麗に書けるということ。どうするのかというと、先のset term postscript epsにenhancedを付け加えるだけです。すると、TeXのように^で上付き文字、_で下付き文字にできます。試してみます。&lt;/p&gt;&#10;&lt;pre&gt;`set term postscript eps enhanced&#13; set output "x3.eps"&#13; p x**3 ti "x^3"&#13; set output&#13; set term x11&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;判例で上付き文字が使えてることがわかります。&lt;/p&gt;&#10;&lt;h4 id="tgif用に出力"&gt;tgif用に出力&#10;&lt;/h4&gt;&lt;p&gt;もしもドローツールにtgifを使ってる人なら、gnuplotとtgifの連携は見逃せません…まだいるのかは知りませんが。&lt;/p&gt;&#10;&lt;pre&gt;`set term tgif&#13; set output 'hogehoge.obj'&#13; p sin(x)&#13; set output&#13; set term x11&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでtgif用のファイルとしてグラフが出力されて、捏造…いえ、編集も思いのままです。&lt;/p&gt;&#10;&lt;/article&gt;&#13;&#10;&lt;h2 id="設定ファイル"&gt;設定ファイル&#10;&lt;/h2&gt;&lt;p&gt;ここまででだいたい、必要なグラフを描けて、かつ必要に応じて保存もできるようになったのではないかと思います。どうでしょうか。面倒臭いでしょうか。面倒臭いですよね。これを毎回やるのはちょっと意味がわかりませんね。というわけで、設定ファイルがあります。&lt;/p&gt;&#10;&lt;h3 id="設定ファイルの保存save"&gt;設定ファイルの保存…save&#10;&lt;/h3&gt;&lt;p&gt;ここまでに頑張ってちまちまやってきたことを保存できます。&lt;/p&gt;&#10;&lt;pre&gt;`save "config1.gp"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでconfig1.gpという設定ファイルができます。別に拡張子はgpでなくてもいいし、それどころかなくてもいいのですけど、まぁわかりやすいように。中身をみてみると、めまいがするような設定情報の羅列。こんなに設定できることがあるのですね…。&lt;/p&gt;&#10;&lt;h3 id="設定ファイルの読み込みload"&gt;設定ファイルの読み込み…load&#10;&lt;/h3&gt;&lt;p&gt;保存した設定ファイルは&lt;strong&gt;load&lt;/strong&gt;コマンドで読み込みます。&lt;/p&gt;&#10;&lt;pre&gt;`load "config1.gp"&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="設定ファイルの作成"&gt;設定ファイルの作成&#10;&lt;/h3&gt;&lt;p&gt;設定ファイルは自分でも作れます。設定ファイルの中身を見たら「いやいや」という感じですが、こんなにかっちりやる必要はなくて、必要なことだけ羅列すれば十分です。以下に、例として config2.gp を作成します。&lt;/p&gt;&#10;&lt;p&gt;config2.gp&lt;/p&gt;&#10;&lt;pre&gt;`set xrange [-pi:pi]&#13; set yrange [0:2]&#13; set xtics 0.2&#13; set mxtics 2&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これを使って、gnuplotを起動し試してみましょう。&lt;/p&gt;&#10;&lt;pre&gt;`load "config2.gp"&#13; p sin(x)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ちゃんと設定されていることが確認できたはず。よく使うコマンドです。&lt;/p&gt;&#10;&lt;h2 id="おわりに"&gt;おわりに&#10;&lt;/h2&gt;&lt;p&gt;以上で、二次元グラフを描画し、かつ保存するために、必要十分な知識を得られたのではないかと思います。後は、必要になった時にその都度検索すれば、問題なく使いこなせるでしょう。冒頭で述べたとおり、Gnuplotは古いソフトウェアで、その為にコマンドなどは熟れてると言い難いものではありますが、昔から使われているだけあって、豊富な機能があり、また他言語などの外部プログラムからも簡単に利用できます。シェルスクリプト上で実行する応用例としては、「&lt;a class="link" href="//hack-le.com/45576248-2/" &gt;gnuplotで日付・時刻の書かれた時系列データをグラフに描いて保存するシェルスクリプト : 或る阿呆の記&lt;/a&gt;」を参考にしてもらえればと思います。時系列データで、単位変換のほか、&lt;strong&gt;今回説明をしなかった二軸の設定&lt;/strong&gt;を用いています。&lt;/p&gt;&#10;&lt;p&gt;昔の資料を眺めながら、初めてまともにLinuxを使い出して、悪戦苦闘している自分の姿が見えました。.（ドット）がカレントディレクトリであることをわざわざ強調して書いていたりとか、そういえば自分はこんなところで躓いていたのだなと、懐かしく思いました。今となっては当たり前過ぎて、省略しがちですが、最初はその当たり前が当たり前ではないという、それこそ当たり前のことを忘れがちです。しかしそれは、恐らく人のもつ普遍的な特徴の一つ。つまり、&lt;strong&gt;入門記事は入門したての人が書いたものが、一番わかりやすくなるかもしれない&lt;/strong&gt;ということです。&lt;/p&gt;&#10;&lt;p&gt;人に間違いを指摘されるのは、やはりどうにも恥ずかしいことですから、「何もこんな自分が偉そうに書かなくても…間違いもいっぱいあるだろうし…」という気持ちがどうしても芽生えてしまいます。しかしそれを押して、自分から情報発信をすることは、案外人のためになるのではないか、なったらいいなと、そんな気持ちでブログを続けています。閑話でした。&lt;/p&gt;</description></item><item><title>Raspberry Pi でI2Cを使った7セグメントLEDで現在時刻を表示</title><link>https://hack-le.com/45642910-2/</link><pubDate>Fri, 09 Oct 2015 16:15:09 +0900</pubDate><guid>https://hack-le.com/45642910-2/</guid><description>&lt;p&gt;Raspberry Piで7セグメントLEDを、I2Cで使用します。&lt;/p&gt;&#10;&lt;h2 id="使ったもの"&gt;使ったもの&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B013I2P6DM" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;今回使ったのは、スイッチサイエンスで販売している「[シリアル接続7セグメント4桁LED(緑) - スイッチサイエンス](https://www.switch-science.com/catalog/1127/)」です。色は赤とかもあります。&#13;&#10;&lt;p&gt;SPIやシリアル通信も対応しているのですが、UARTをこれで潰したくないなぁというのと、SPIは使ったことがないので、I2Cを使うことにしました。説明書きが一番多いのはシリアル通信なので、シリアル通信でやるのが一番安定しているのかなとも思います。&lt;/p&gt;&#10;&lt;h2 id="使用方法"&gt;使用方法&#10;&lt;/h2&gt;&lt;h3 id="接続とかi2c設定とか"&gt;接続とかI2C設定とか&#10;&lt;/h3&gt;&lt;p&gt;「&lt;a class="link" href="//hack-le.com/45197292-2/" &gt;Raspberry Pi で温度センサ LM75B を使う : 或る阿呆の記&lt;/a&gt;」の２、３節と同じなので繰り返しません。電圧は「&lt;a class="link" href="https://github.com/sparkfun/Serial7SegmentDisplay/wiki/Hardware%20Specifications" target="_blank" rel="noopener"&#10; &gt;Hardware specifications · sparkfun/Serial7SegmentDisplay Wiki · GitHub&lt;/a&gt;」によると2.4 - 6.0Vに対応しているようなので、3.3V でも 5V でも好きなほうでやればよいと思います。私は3.3Vでしています。他のI2C機器と電源を共有するときも、そちらのほうが都合がよいことが多いでしょう。&lt;/p&gt;&#10;&lt;h3 id="コマンド"&gt;コマンド&#10;&lt;/h3&gt;&lt;p&gt;基本的には、Linuxで使えるI2C用のコマンドでやりとりします。すなわちシェルスクリプトで簡単に書けるということで、たいへんお手軽です。なにはともあれ、機器のチップアドレスを確認します。&lt;/p&gt;&#10;&lt;pre&gt;`$ i2cdetect -y 1&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;引数の1は1chという意味で、-yは対話モードではないということです。昔のラズパイでは、0chのほうがデフォで使われていたようです。なお、初期設定では、0x71となっています。&lt;/p&gt;&#10;&lt;p&gt;チップアドレスがわかったら、今度は機器のデータアドレスを調べて、任意のビットを送るようにします。アドレスについては「&lt;a class="link" href="https://github.com/sparkfun/Serial7SegmentDisplay/wiki/Special-Commands" target="_blank" rel="noopener"&#10; &gt;Special Commands · sparkfun/Serial7SegmentDisplay Wiki · GitHub&lt;/a&gt;」を参照します。&lt;/p&gt;&#10;&lt;p&gt;まず、ディスプレイをクリアしてみます。&lt;/p&gt;&#10;&lt;pre&gt;`$ i2cset -y 1 0x71 0x76&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;チップアドレス0x71にある機器の、0x76にビットを送っています。ディスプレイがクリアされたら、今度は数値を入力してみます。以下のコマンドで、下一桁を1にすることができます。&lt;/p&gt;&#10;&lt;pre&gt;`$ i2cset -y 1 0x71 0x7e 0x06&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;データアドレス0x7eに、データ0x06を送っています。これで、1が表示されたはずです。なぜ0x06で1になるかですが、7セグメントの一つ一つにビットが割当られており、7ビット、即ち127パターンの表示が可能で、1になるような光らせ方は0x06ということです。127パターンといっても実際に使うのは0-9の10パターンと、せいぜいマイナスくらいでしょう。毎回計算するのでは煩わしいですから、使いやすいように、以下のようなシェルスクリプトを組んでみました。仮に7seg-disp.shとします。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; set -eu&#13; address=0x71&#13; # 上一桁目から下一桁目 0x77はコロンなどに用いる&#13; digit=(0x7b 0x7c 0x7d 0x7e 0x77)&#13; # 0,1,2,..,9&#13; num=(0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x27 0x7f 0x6f)&#13; i2cset -y 1 $address ${digit[$1]} ${num[$2]}&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;digitが、桁数のデータアドレスで、numが数値を表示するためのデータです。このシェルスクリプトを、たとえば以下のように実行してやると、2015と表示できます。&lt;/p&gt;&#10;&lt;pre&gt;`./7seg-disp.sh 0 2&#13; ./7seg-disp.sh 1 0&#13; ./7seg-disp.sh 2 1&#13; ./7seg-disp.sh 3 5&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;第一引数が桁数の指定で、第二引数が数値の指定となっています。簡単な使い方としては、こんなところです。&lt;/p&gt;&#10;&lt;h2 id="現在時刻を表示してみる"&gt;現在時刻を表示してみる&#10;&lt;/h2&gt;&lt;p&gt;上記のスクリプトをもうちょっと拡張して、現在時刻を表示するようにしてみます。まず、7seg-disp.shを以下のようにします。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; set -eu&#13; function help_msg(){&#13; echo "usage: ${0} digit num"&#13; echo "digit: 0,1,2,3,dot,colon,minus"&#13; echo "num(digit 1-4): 0,1,2,..,9"&#13; echo "num(dot): 0,1,2,3,4"&#13; echo "num(colon,minus): needless"&#13; exit 0&#13; }&#13; if [ $# -eq 0 ]; then help_msg; fi&#13; if [ $1 = "-h" ]; then help_msg; fi&#13; address=0x71&#13; # 0x7b 0x7c 0x7d 0x7e, :. -&gt; 0x77&#13; digit=(0x7b 0x7c 0x7d 0x7e 0x77)&#13; # 0,1,2,..,9&#13; num=(0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x27 0x7f 0x6f)&#13; minus=0x40&#13; colon=0x10&#13; dot=(0x10 0x01 0x02 0x04 0x08)&#13; if [ $1 = "colon" ]; then i2cset -y 1 $address ${digit[4]} $colon; exit 0;fi&#13; if [ $1 = "dot" ];then i2cset -y 1 $address ${digit[4]} ${dot[$2]}; exit 0;fi&#13; if [ $1 = "minus" ];then i2cset -y 1 $address ${digit[0]} $minus; exit 0;fi&#13; i2cset -y 1 $address ${digit[$1]} ${num[$2]}&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;変わったところは、ヘルプメッセージを出力できること、マイナス、コロン、ドット（小数点）に対応しているところです。使用方法は ./7seg-disp.sh -h でだいたいわかるはずとして、これを利用し、時刻を表示するようなスクリプトを組みます。7seg.sh とします。7seg.shと7seg-disp.shは同じディレクトリに置きます。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; &#13; # 現在時刻を7seg-LEDで表示するためのスクリプト&#13; # 同じディレクトリに 7seg-disp.sh が必要&#13; &#13; set -u&#13; cd $(dirname $0)&#13; current_dir=$(pwd)&#13; &#13; # clear display&#13; i2cset -y 1 0x71 0x76&#13; now=$(date +%H%M)&#13; digit=($(echo $now | cut -c 1) $(echo $now | cut -c 2) $(echo $now | cut -c 3) $(echo $now | cut -c 4))&#13; for i in $(seq 0 3)&#13; do&#13; ${current_dir}/7seg-disp.sh $i ${digit[$i]}&#13; done&#13; ${current_dir}/7seg-disp.sh colon&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;上記スクリプトをそのまま実行すると、現在時刻が表示されます。冒頭のゴチャゴチャした写真がそれです。16時04分ですね。&lt;/p&gt;&#10;&lt;pre&gt;`$ ./7seg.sh&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上です。まだしっかり使っていないのですが、I2Cだと長時間運用してるとけっこうエラーも頻発していて、あまり安定していないのかもしれません。UARTが空いてるなら、シリアル通信のほうがいいのかな？時間を見つけてそのうちやってみようと思います。&lt;/p&gt;</description></item><item><title>iPhone 5にiOS 9を入れてからバッテリーの減りが異常に早い</title><link>https://hack-le.com/45637102-2/</link><pubDate>Thu, 08 Oct 2015 14:24:07 +0900</pubDate><guid>https://hack-le.com/45637102-2/</guid><description>&lt;p&gt;（2015/12/14）追記：iOS 9.2 を入れたらまたバッテリーの減りが早く…。次のアップデートを待ちます、もう。&#10;（2015/10/25）追記：いつの間にか、バッテリーが普通に持つようになっていました。二週間ほど続いた不具合でしたが、なんだったのでしょう…アプリ側の問題だったのかもしれません。&lt;/p&gt;&#10;&lt;h2 id="定番のosアップデートに起因する不具合"&gt;定番のOSアップデートに起因する不具合&#10;&lt;/h2&gt;&lt;p&gt;表題の通り、&lt;strong&gt;iPhone 5にiOS 9を入れてから、バッテリーの減りが異常に早くなりました&lt;/strong&gt;。必ずしもOSのバグとは言い切れないのが厄介なところです。アップデートの度に、バッテリーの減りが異常に早くなったという報告があがるのはいつものことですが、全員がそうなるわけではありません。まぁ、いくつかのOSアップデートではかなりの人数が影響を受けるような、ハッキリとOSのバグといってよいものがあったことも事実ですが、大方はそうではなく、&lt;strong&gt;その人固有の環境がもたらしている、ということが多々ある&lt;/strong&gt;ものです。だからこそ、この問題はややこしいし、ともすれば問題が起きた人と起きなかった人の間で、無用な諍いに発展したりもします。&lt;/p&gt;&#10;&lt;p&gt;私は幸いなことに、これまでiOSのアップデートは比較的スムーズにいっていました。iOS7になって、アーティストからアルバムが選択できなくなったのを見た時は、これは重篤なバグではないかと思ったものですが、まぁアレはApple仕様のようでしたので（今はできるようになったみたいで、よかった）。が、今回はどうもうまくいっていません。iPhone 5とiPad Air 2に入れて、&lt;strong&gt;iPad Air 2は問題ない&lt;/strong&gt;のですが、&lt;strong&gt;iPhone 5のほうに、問題&lt;/strong&gt;が。&lt;/p&gt;&#10;&lt;h2 id="iphone-5-のバッテリーがみるみる減って半日ともたない"&gt;iPhone 5 のバッテリーがみるみる減って半日ともたない&#10;&lt;/h2&gt;&lt;p&gt;症状としては、とにかくバッテリーがもたない。普通に使っているだけでも、いや、スリープ状態で使っていない状態でさえ、バッテリーがものすごい勢いで減少し、&lt;strong&gt;半日もすればカラカラ&lt;/strong&gt;です。しかも本体が発熱している。&lt;/p&gt;&#10;&lt;p&gt;最初は思い違いかとも思った（思いたかった）のですが、アップデートして数日、以前はしていなかった職場での充電が日課になっているのを自覚すると、やはりこれは異常であると考えざるを得ません。そしてきっかけは何かと思い出せば、なんともわかりやすいことに、OSのアップデートでした。OSのアップデートがトリガになっていることは、まず間違いないでしょう。&lt;/p&gt;&#10;&lt;h2 id="アプリをすべて切っても再起動直後に放置してもダメ"&gt;アプリをすべて切っても、再起動直後に放置してもダメ&#10;&lt;/h2&gt;&lt;p&gt;iOS 9もそこそこはバッテリートラブルの報告があるものの、バッテリーが伸びたとか、低電力モードが良いとか、どちらかというとそういう声のほうをよく見ます。それに、私の毎日使っているiPad Air 2は、iOS 9を入れた後も、特にバッテリー問題が起きていません。となると、どうにもこのiPhone固有の問題である可能性が高い。まず考えられることは、個人的にインストールしているアプリケーションです。&lt;/p&gt;&#10;&lt;p&gt;「設定」→「バッテリー」から、ここしばらくの使用割合を見てみると、&lt;strong&gt;CarTunesが50%、ミュージック（裏）が20%&lt;/strong&gt; …。CarTunesが目立ちます。ミュージック（裏）の使用割合も多少気になりますが、さすがに純正アプリがこのような問題の原因にはなるまいと信じたいところです。元より、iPhoneはほとんどミュージックプレイヤーと化しているので、そう考えるとこの数値も異常とは言い切れないようにも思いますが、やはりまずは疑ってかかるべきでしょう。&lt;/p&gt;&#10;&lt;p&gt;CarTunesは、前述したiOS 7の問題の際、まともなミュージックアプリはないものかと購入したソフトです。最終更新日が2013年2月ですから、もう二年半以上経過しております。つまり、メンテされていないということです。最近、挙動不審になることがよくあり、現在不安定なアプリになってしまっていることは否めません。それでも、ミュージックアプリとして便利なものですから、使い続けているのですが…。ちょっと、怪しいですね。&lt;/p&gt;&#10;&lt;p&gt;というわけで&lt;strong&gt;タスク切って&lt;/strong&gt;みました。&lt;strong&gt;ダメ&lt;/strong&gt;でした。&lt;/p&gt;&#10;&lt;p&gt;でも、何か暴走していたら、という可能性もあります。一度再起動してみると、変わるかもしれません。&lt;/p&gt;&#10;&lt;p&gt;というわけで&lt;strong&gt;再起動&lt;/strong&gt;してみました。&lt;strong&gt;ダメ&lt;/strong&gt;でした。&lt;/p&gt;&#10;&lt;h2 id="あとは復元とバージョンアップ待ちくらいか"&gt;あとは復元とバージョンアップ待ちくらいか&#10;&lt;/h2&gt;&lt;p&gt;再起動直後から何もしていないのに減り続けるとなると、常に何かが動いているということなのでしょうが、少なくとも表には出てきていないし、なんともわかりません。こうなったら&lt;strong&gt;工場出荷時の状態に復元を試みる&lt;/strong&gt;くらいしかありませんが、さすがに手間ですので、休日までおあずけということになりましょう。それでもダメだったら…バージョンアップでよくなることを、祈ります。&lt;/p&gt;</description></item><item><title>Chrome→Safari移行を試みて二週間目、割と快調</title><link>https://hack-le.com/45633689-2/</link><pubDate>Wed, 07 Oct 2015 23:30:27 +0900</pubDate><guid>https://hack-le.com/45633689-2/</guid><description>&lt;h2 id="safari乗り換え計画"&gt;Safari乗り換え計画&#10;&lt;/h2&gt;&lt;p&gt;ChromeからSafariに乗り換えを試みて、二週間ほど経過しました（「&lt;a class="link" href="//hack-le.com/45503606-2/" &gt;何度目かのChrome→Safari計画 : 或る阿呆の記&lt;/a&gt;」）。どうしてSafariにしようと思ったのか、もはやあまり覚えていないのですが（前記事を見ても「飽きた」としか書いていない…そうだっけか）、Safariの使い心地は昔試した時よりもだいぶ快適で、今のところメインで使えています。&lt;/p&gt;&#10;&lt;h2 id="割と早くて割と綺麗で割と新鮮"&gt;割と早くて割と綺麗で割と新鮮&#10;&lt;/h2&gt;&lt;p&gt;Chromeといえば、以前はとにかくそのレスポンスのよさが特色でした。が、2015年現在、Chromeは重くなり、Safari始め他のブラウザは多少早くなり、そしてWebサイトは全般的に重くなりました。その結果なのかどうなのか、体感的には、とくにSafariに変えて遅い、と感じることはあまりありません。まぁ、初めてのサイトを開く時、Safariのほうがちょっとひっかかりを感じなくもない、といったところです（Safariに変えて最初に感じた違和感でもあります…本当に初動が遅いのかどうかは謎です）。&lt;/p&gt;&#10;&lt;p&gt;Chromeとは文字など見え方が若干変わるのですが、同じMacですから、どちらも綺麗は綺麗です。&lt;/p&gt;&#10;&lt;p&gt;それでもって、細かな違いがけっこう新鮮です。見え方はもちろんですが、ピンチインでタブ一覧になったりとか、スライドでブラウザバックしたときのアニメーションとか、そういえばブックマークのサイドバーなんてあったなとか、そんなところ。&lt;/p&gt;&#10;&lt;p&gt;実に大したことのない話をしています。それくらい、まぁ、あまり変わった感じがしないのですが、まったく変わっていないということもないので、それなりに新鮮です。&lt;/p&gt;&#10;&lt;h2 id="ブックマークの同期はどうしたものか"&gt;ブックマークの同期はどうしたものか&#10;&lt;/h2&gt;&lt;p&gt;問題はブックマークの同期で、Chrome→Safariは比較的簡単にできるのですが、Safari→Chromeがなかなか難所です。WindowsではChromeにiCloudを利用したエクステンションがあるようですが…Macですので。昔、「&lt;a class="link" href="https://www.xmarks.com/" target="_blank" rel="noopener"&#10; &gt;Xmarks | Bookmark Sync and Search&lt;/a&gt;」というサービスで複数ブラウザ間のブックマークの同期をしていましたが、けっこう挙動不審になることもあり、あまり気が進みません。しかし、同期を実現しようと思えば、やはりこれを使うしかなさそうです。&lt;/p&gt;&#10;&lt;h2 id="エクステンションはやはりまだまだchromeか"&gt;エクステンションはやはりまだまだChromeか&#10;&lt;/h2&gt;&lt;p&gt;Safariの拡張機能もそこそこにはあるのですが、量も質もChromeには及ぶべくもありません。それでも、パスワード管理やオートページャなどの最低限のものは揃っているので、なんとか使えています。Personal Blocklistに代わるものがあればよいのですが。&lt;/p&gt;&#10;&lt;h2 id="chromeは捨てられないがいけそう"&gt;Chromeは捨てられないが、いけそう&#10;&lt;/h2&gt;&lt;p&gt;そもそもAndroidスマートフォンを使っている身ですし、なんだかんだいいつつやっぱりChromebookほしいなぁという気持ちもあるので、Chromeを切ることはできませんが、この調子でいけば、OSXとiOSにおけるメインブラウザをSafariにする計画はうまくいきそうです。&lt;/p&gt;</description></item><item><title>iPhone 7 に防水が搭載されるなら心揺れる</title><link>https://hack-le.com/45594703-2/</link><pubDate>Mon, 05 Oct 2015 10:08:35 +0900</pubDate><guid>https://hack-le.com/45594703-2/</guid><description>&lt;p&gt;iPhone 6Sが出たばかりなのに、iPhone 7というのも気が早い話ですが…。iPhone 7で、防水が搭載されるかもしれないという噂話を急に見るようになりました。iPhone 5でもミュージックプレイヤーとして使う限りはそれなりに機能してくれているので、まぁ当分いいかなと思っていたのですが、防水となると、ちょっとときめきますね。&lt;/p&gt;&#10;&lt;h2 id="iphoneにないもの"&gt;iPhoneにないもの&#10;&lt;/h2&gt;&lt;p&gt;iPhoneは良い端末です。Xperia Z3を購入した今でも、iPhone 5を手放すことが出来ていないのは、主にミュージックプレイヤーとして使っているからなのですが、そのほかのアプリもちょくちょく使っています。そんなとき、最近、さすがにスペックが厳しくなってきたのだろうか、と思うことも出てきましたが、まぁ概ね良好です。&lt;/p&gt;&#10;&lt;p&gt;単純なスペック以外に、Xperiaのほうが良いと思うところはあります。それは防水機能と、オサイフケータイの機能。ガラパゴスと揶揄されながらも、この二つは確かに使える機能だと、実感を持っていうことができます。防水機能のおかげで、お風呂の中で電子書籍を読むことができる…これだけでも、買ってよかったなと思うこともあります。また、オサイフケータイは本当に便利で、これのおかげでATMから現金を引き出す回数が激減しました。現金というのは、汎用性は確かに高いのですが、紛失すればそれまでですし、なによりかさばります。&lt;/p&gt;&#10;&lt;p&gt;おサイフケータイについては、AppleはApple Payという独自の道を歩むつもりであるようですし、これは広まるのは時間の問題だと思いますから、まぁよいでしょう。しかし、防水については半分諦めていたので、次で対応されるかもというのは私にとって朗報であり、同時にAndroidのスマートフォンを使う大きな理由の一つが減ることでもあります。XperiaとiPhoneを使う限り、トータルで安定しているのはやはりiPhoneと思うことが多いのです（特に通信関係は…「&lt;a class="link" href="//hack-le.com/44952736-2/" &gt;Xperia Z3 が iPhone 5 より全体的に通信系が不安定に思える : 或る阿呆の記&lt;/a&gt;」）。まぁ、AndroidとiOSの両方を使っていること自体がガジェットオタクとして無駄に満足ポイントの一つなので、たとえiPhone 7を買ったとしても、iOS一本でいくかどうかはわかりませんが（使い勝手のみで言えば、iOSデバイスのみで貫くのが一番勝手が良いと思います）。&lt;/p&gt;&#10;&lt;h2 id="頑張れandroidスマートフォン"&gt;頑張れAndroidスマートフォン&#10;&lt;/h2&gt;&lt;p&gt;AndroidがiOSに追いつき、やがてiOSはかつての（あるいは今の）Macのような立ち位置に落ち着くだろう、とはよくある予想で、私もその未来図に同意する者ですが、しかし、そうなるには思っていたよりもだいぶ時間がかかりそうです。アプリも出揃ってきたし、機能も十分だと思うのですが、細かい使い勝手が。あと、音楽管理が。Androidだと、いまだにフリガナが鬼門なのはどうにかならないか…（iTunesでも簡単お手軽とは言い難いですけれど）。&lt;/p&gt;</description></item><item><title>gnuplotで日付・時刻の書かれた時系列データを二軸でグラフ描画し保存するシェルスクリプト</title><link>https://hack-le.com/45576248-2/</link><pubDate>Thu, 01 Oct 2015 23:56:25 +0900</pubDate><guid>https://hack-le.com/45576248-2/</guid><description>&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/e/d/ed1860cc.png" &gt;//hack-le.com/wp-content/uploads/imgs/e/d/ed1860cc.png&lt;/a&gt;&#10;本記事では、二軸が必要なテキストファイルの時系列データをgnuplotで描きます。&lt;/p&gt;&#10;&lt;h2 id="なんだかんだでgnuplot"&gt;なんだかんだでgnuplot&#10;&lt;/h2&gt;&lt;p&gt;大学時代から、ずっとgnuplotを使っています。最近はようやくPythonやJavaScriptでもグラフを描くようになり、簡単なコマンドで高機能なライブラリを使うことが出来る素晴らしさに喜び半分打ちひしがれるような気持ち半分といったところでしたが、相変わらず一番愛用しているのはgnuplotです。&lt;/p&gt;&#10;&lt;p&gt;gnuplotのコマンド体系はお世辞にもわかりやすいとは言えず、最初はグラフを描いたり、csvデータを読み込むんだりするだけでも一苦労です。そしてハマるのがグラフのファイル保存。これがなかなか難しく、色々なサイトを参考にするのですが、書いてあるコマンドがまた微妙に違ったりもするものですから、覚えるのに苦労した記憶があります。&lt;/p&gt;&#10;&lt;p&gt;しかし人間なんでも慣れるもので、奇っ怪に見えたコマンドも今はそれなりに馴染みました。馴染めば、便利なものです。たいていのUnix系システムであれば、コマンド一発でインストールできますし、インストールさえしてしまえばあとはスクリプトを流用できます。&lt;strong&gt;シェルスクリプトで簡単に使えることができるのは、今なお得難い手軽さ&lt;/strong&gt;であると思います。&lt;/p&gt;&#10;&lt;p&gt;前置きが長くなりましたが、本記事では時系列のcsvデータを読み込んでグラフを描く、保存するためのシェルスクリプトをメモします。&lt;/p&gt;&#10;&lt;h2 id="端末上で簡単に時系列csvデータのグラフを描き保存するためのスニペット"&gt;端末上で簡単に時系列csvデータのグラフを描き保存するためのスニペット&#10;&lt;/h2&gt;&lt;p&gt;以下のようなデータ sample.csv があるとします。&lt;/p&gt;&#10;&lt;pre&gt;`2015/09/26 00:00:00,24.500,23.90,96287.0,24.55,96389.2,51.91&#13; 2015/09/26 00:00:02,24.500,23.90,96288.0,24.53,96383.4,51.85&#13; 2015/09/26 00:00:03,24.375,23.90,96287.0,24.54,96382.3,51.92&#13; 2015/09/26 00:00:04,24.375,23.90,96285.0,24.54,96385.0,51.93&#13; 2015/09/26 00:00:06,24.375,23.90,96285.0,24.55,96385.8,51.94&#13; 2015/09/26 00:00:07,24.500,23.90,96277.0,24.55,96385.8,51.92&#13; 2015/09/26 00:00:09,24.625,23.90,96282.0,24.55,96385.8,51.90&#13; 2015/09/26 00:00:10,24.500,23.90,96288.0,24.55,96383.1,51.91&#13; 2015/09/26 00:00:11,24.500,23.90,96287.0,24.55,96388.4,51.91&#13; 2015/09/26 00:00:13,24.625,23.90,96285.0,24.54,96379.6,51.90&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;一列目の時刻、二列目の温度、四列目の気圧を抽出して、グラフを描くようなシェルスクリプト描きます。ポイントは、区切りがカンマであること、時刻表記があること、温度と気圧で軸の単位が異なることです。また、四列目の気圧は、単位がPaですが、これをhPaに直したいと思います。&lt;/p&gt;&#10;&lt;p&gt;以下のスクリプト mkgraph.sh を作成します。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/sh&#13; &#13; set -u&#13; &#13; INFILE=$1&#13; OUTFILE="${INFILE%.*}.png"&#13; TITLE="title"&#13; XLABEL="time"&#13; YLABEL="C"&#13; Y2LABEL="hPa"&#13; &#13; gnuplot &lt;&lt;EOF&#13; set datafile separator ','&#13; set xdata time&#13; set timefmt '%Y/%m/%d %H:%M:%S'&#13; #set format x '%H:%M'&#13; set format x '%M:%S'&#13; #set xrange ['2015/09/26 10:00:00':'2015/09/26 12:00:00']&#13; set mxtics 2&#13; set mytics 2&#13; set grid xtics ytics mxtics mytics&#13; set key outside&#13; # second ax&#13; set y2tics&#13; set title '$TITLE'&#13; set term png size 800,480&#13; set xlabel '$XLABEL'&#13; set ylabel '$YLABEL'&#13; set y2label '$Y2LABEL'&#13; set output '$OUTFILE'&#13; p '$INFILE' u 1:2 w l ti 'temperature','$INFILE' u 1:(\$4/100.0) w l axes x1y2 ti 'pressure'&#13; set output&#13; EOF&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;だいたい見ればわかると思いますが、補足します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;set datafile separator &amp;lsquo;,&amp;rsquo;&lt;/strong&gt; で、区切りをカンマに設定&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;set xdata timeとset timefmt&lt;/strong&gt;で、時系列データであることを示し、また時刻の表記について設定&lt;/li&gt;&#10;&lt;li&gt;コメントアウトしているset xrangeは、時刻の範囲の設定。設定しなければ自動で決まる&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;mxtics&lt;/strong&gt;は小軸を作成&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;set grid&lt;/strong&gt;で軸の点線をグラフ中に引く&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;set key outside&lt;/strong&gt;は、凡例をグラフの外にだす&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;set y2tics&lt;/strong&gt;で、軸が2つ使える&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;set term png&lt;/strong&gt;で、pngとして出力するように設定し、800,480で画像の大きさを設定（デフォルトは640x480）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;pはplot、つまり描画コマンドの略記&lt;/strong&gt;。二つのグラフを描くので、カンマで区切る。一つ目が温度、二つ目が気圧のグラフ&lt;/li&gt;&#10;&lt;li&gt;y2軸を用い、また数値をすべて100で割るようにしている。通常の$&lt;strong&gt;にエスケープシーケンスの\を加えているところが注意ポイント&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;以上、実行権限を与えて実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ chmod u+x mkgraph.sh&#13; $ ./mkgraph.sh sample.csv&#13; -&gt; sample.png&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;グラフが作成されます。実際に使うときは、必要なところを変更したりコメントアウトしたりして使いまわしています。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/e/d/ed1860cc.png" &gt;&lt;img alt="test" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/e/d/ed1860cc-s.png"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Raspberry Pi にGPSモジュールをつけてStratum 0で時刻同期(スタンドアロン)</title><link>https://hack-le.com/45528250-2/</link><pubDate>Wed, 30 Sep 2015 10:24:12 +0900</pubDate><guid>https://hack-le.com/45528250-2/</guid><description>&lt;p&gt;2016年9月21日追記：Raspberry Pi 3 + Raspbian Jessieで動作を確認しました。疲れたー…。&lt;/p&gt;&#10;&lt;p&gt;本記事は、Raspberry PiでGPSを扱うための記事です。GPSを使って、スタンドアロンで時刻同期できることを目標とします。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;やりたいことは以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;GPSモジュールから信号を受けて、時刻を同期&lt;/li&gt;&#10;&lt;li&gt;PPS信号で補正&lt;/li&gt;&#10;&lt;li&gt;インターネットに接続しないスタンドアロンを想定&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ここで、PPS信号とはPulse Per Second、すなわち1秒に一回きっかりで送られる信号のことです（解説記事「&lt;a class="link" href="https://hack-le.com/whatispps/" &gt;GPSでよくみるPPS信号とはなにか – 或る阿呆の記&lt;/a&gt;」）。これをもちいて、時刻補正をすることができます。GPSモジュールにはAdafruitのUltimate GPS（チップはMTK3339）を使用します。スタンドアロンで使用することを想定するため、長期間にわたってRaspberry Piの電源を落とした場合、バッテリーのないRaspberry Piは時刻を保持できません。そこで、外部のRTCモジュールとしてDS1307を使用します。以上の部品を用いた手順をメモします。&lt;/p&gt;&#10;&lt;p&gt;今回非常に参考にさせていただいたのは、「&lt;a class="link" href="http://nyanchew.com/jp/gps%E3%81%AEpps%E4%BF%A1%E5%8F%B7%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F-stratum-1-ntp%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9" target="_blank" rel="noopener"&#10; &gt;GPSのPPS信号を使った Stratum-1 NTPサーバの作り方 | Nyanchew&amp;rsquo;s Digital Life - ja1&lt;/a&gt;」です。ただ、こちらは基本的にNICTのサーバー(Stratum-1)と同期し、PPS信号で補正という感じのようです(GPSとの同期の仕方も書かれていますが)。参考記事は精度の高いNTPサーバーを目的としていますが、本記事は、スタンドアロンで使うことを想定して、NTPでGPSと同期して、時刻補正をすることを目的とします。同様の目的の記事として、「&lt;a class="link" href="https://www.netfort.gr.jp/~tosihisa/notebook/doku.php/raspberrypi/log20140208_ntp_stratum_1" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi で NTP Stratum-1 Server を作る． [tosihisa&amp;rsquo;s public notebook]&lt;/a&gt;」も参考にさせていただきました。&lt;/p&gt;&#10;&lt;h2 id="gpsの購入"&gt;GPSの購入&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Piで使用できるGPSとして、AdafruitのUltimate GPS Breadkoutを使用します（「&lt;a class="link" href="http://www.adafruit.com/product/746" target="_blank" rel="noopener"&#10; &gt;Adafruit Ultimate GPS Breakout - 66 channel w/10 Hz updates [Version 3] ID: 746 - $39.95 : Adafruit Industries, Unique &amp;amp; fun DIY electronics and kits&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;Raspberry Pi GPS Addon Boardなるものもあるようですが、通販サイト見たら最小1000個からって業者向けですねこれ（「&lt;a class="link" href="http://ava.upuaut.net/store/index.php?route=product/product&amp;amp;product_id=95" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi GPS Addon Board&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;（追記）こんなの使ってみました「&lt;a class="link" href="https://hack-le.com/rpi-10kpps/" &gt;Raspberry Piでも使いやすいGPSモジュールNEO6Mの基板で10kHzのPPS信号 – 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h3 id="モジュール"&gt;モジュール&#10;&lt;/h3&gt;&lt;p&gt;さて、Adafruitからも40ドルで購入できますが、送料などもあるので、スイッチサイエンスから購入するのがお手軽かと思います（「&lt;a class="link" href="https://www.switch-science.com/catalog/1085/" target="_blank" rel="noopener"&#10; &gt;Adafruit Ultimate 66チャンネル10Hz GPSモジュール Version 3 - スイッチサイエンス&lt;/a&gt;」）。5,600円ほど。海外通販の煩わしさを思うと、大量注文するのでなければこちらがよいかと。&lt;/p&gt;&#10;&lt;p&gt;僕らのAmazonでも、スイッチサイエンスが取り扱いしています。また、このGPSは&lt;strong&gt;バッテリー付きでして、CR1220を装着&lt;/strong&gt;できます。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00YXYGVS4" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B007G5OCEC" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h3 id="hat"&gt;HAT&#10;&lt;/h3&gt;&lt;p&gt;数百円上乗せすると、ボードになっているタイプも購入できます（「&lt;a class="link" href="https://www.switch-science.com/catalog/2180/" target="_blank" rel="noopener"&#10; &gt;Adafruit Ultimate GPS HAT (Raspberry Pi A+/B+/Pi 2用) - スイッチサイエンス&lt;/a&gt;」）。このタイプはHATと呼ばれます。見栄えがよいですね。こちらであれば、接続のためのジャンパワイヤも必要ありません。記事冒頭の写真は、このボードタイプのものを取り付けたものです。&lt;/p&gt;&#10;&lt;p&gt;しかし、このHATタイプには注意点があります。「&lt;a class="link" href="https://learn.adafruit.com/adafruit-ultimate-gps-hat-for-raspberry-pi" target="_blank" rel="noopener"&#10; &gt;Overview | Adafruit Ultimate GPS HAT for Raspberry Pi | Adafruit Learning System&lt;/a&gt;」には以下のような注意文が掲げられています（2016年9月現在）。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;This does not yet work on the Pi 3 due to intense firmware/hardware changes that affected the hardware UART. Please stick to Pi 2 or &amp;rsquo;lower&amp;rsquo; for now!&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;UART周り変更の影響で、Raspberry Pi 3では使えないよ、ということです。しかし、&lt;strong&gt;実際に使ってみると、多少設定は煩雑ですが、一応当記事の目的は達することができている…ように見えます&lt;/strong&gt;。まぁとはいえ、正式には対応していないと考えてよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;また、I2Cなど他の機器を使いたいときには、HATはかえって邪魔かもしれません。今後のRaspberry Piのアップグレードによる影響も、モジュール単体より受けやすいものと考えられます。&lt;/p&gt;&#10;&lt;p&gt;HATタイプは、以上の注意点を踏まえたうえで使いましょう。今ならRaspberry Pi 3でしょうし、公式がアレな以上、推奨はしません。&lt;/p&gt;&#10;&lt;p&gt;なお、モジュールにせよHATにせよ、どちらも&lt;strong&gt;ピンヘッダのハンダ付けが必要&lt;/strong&gt;です。決して難しくありませんが（むしろ簡単）、一度もハンダ付けをしたことがない人が取り組む課題ではないかな、とも思います。まぁ練習すればよいことです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZWB627M" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h3 id="外部アンテナ"&gt;外部アンテナ&#10;&lt;/h3&gt;&lt;p&gt;このままでもよいですが、できれば外部アンテナを用いるとよりよいでしょう。アンテナを内蔵してもいるので、必須ではありません。「&lt;a class="link" href="https://www.switch-science.com/catalog/1412/" target="_blank" rel="noopener"&#10; &gt;GPSアンテナ 28dB 5m SMAコネクタ型 - スイッチサイエンス&lt;/a&gt;」と「&lt;a class="link" href="https://www.switch-science.com/catalog/1413/" target="_blank" rel="noopener"&#10; &gt;SMA/u.FLコネクタ変換ケーブル - スイッチサイエンス&lt;/a&gt;」を使います。もちろんAmazonにもあるのですが…購入したSMAU.fl変換がAmazonに置いてない…まぁでも、なんでも使えると思います。私の実績がないのでアフィリエイトリンクは張らず普通のリンクのみにしますが、「&lt;a class="link" href="https://www.amazon.co.jp/%E3%83%93%E3%83%BC%E3%83%97%E3%83%A9%E3%82%B9%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC-IPX-080-SMA-U-fl-IPX-SMA%E3%83%A1%E3%82%B9%E5%A4%89%E6%8F%9BRF%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB-8-0cm/dp/B007GG6W80" target="_blank" rel="noopener"&#10; &gt;Amazon.co.jp： IPX-080-SMA (U.fl/IPX-SMAメス変換RFケーブル 8.0cm): パソコン・周辺機器&lt;/a&gt;」とか。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZCE1QKM" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="gpsの接続"&gt;GPSの接続&#10;&lt;/h2&gt;&lt;p&gt;GPSを購入し、ハンダ付けもしたら、いよいよRaspberry Piと接続します。接続には2種類あります。USB-TTL変換を行うか、GPIOピンを使うかです。簡単なのは前者なので、前者をオススメします。前者ならばGPSを適切に接続するだけで使えますが、後者の場合は設定ファイルをいじらなくてはいけないうえに、Raspberry Pi 2と3、あるいはRaspbian Wheezy以前とJessieでやり方が異なり、ちょっと混乱します。&lt;/p&gt;&#10;&lt;p&gt;UART経由(GPIOピン)の具体的な手順については「&lt;a class="link" href="//hack-le.com/44765804-2/" &gt;Raspberry Pi でシリアル通信(Macも同様) : 或る阿呆の記&lt;/a&gt;」を参照とします。USB-TTL変換を使えば、このあたりのややこしいところを丸々飛ばせるので、そちらのほうが楽なのがわかります(Adafruitのドキュメントでも変換を推奨しています）。GPSモジュールは3.3Vでも5VでもどちらでもOKなので、USB-TTL変換でも問題ありません(USB経由だと5V)。&lt;/p&gt;&#10;&lt;p&gt;ただし、HATタイプのものを使う場合は、UART経由なので、設定ファイルをいじるしかありません。&lt;/p&gt;&#10;&lt;h2 id="動作確認"&gt;動作確認&#10;&lt;/h2&gt;&lt;p&gt;GPSからの信号をRaspberry Piできちんと受けて利用することができるかまで、確認します。これまたRaspbian WheezyとJessieで違うのです。&lt;/p&gt;&#10;&lt;h3 id="catで直接叩く"&gt;catで直接叩く&#10;&lt;/h3&gt;&lt;p&gt;catで直接叩いて、ダラダラとなにか表示されるかどうかを確認します。この時、USB変換をしている場合は/dev/ttyUSB0、UART経由の場合、Raspbian Pi 2では/dev/ttyAMA0、Raspberry Pi 3では/dev/ttyS0です。ここでは、/dev/ttyUSB0とします。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo cat /dev/ttyUSB0&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;だらだらと$GPGGAとか$GPGSAとかが表示されればOK。通信できています。&lt;/p&gt;&#10;&lt;h3 id="gpsdの利用"&gt;GPSDの利用&#10;&lt;/h3&gt;&lt;p&gt;次に、以下のコマンドで、必要なソフトウェアgpsdをインストールします。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo apt-get install -y gpsd gpsd-clients python-gps`&lt;/pre&gt;&#13;&#10;&lt;p&gt;さて、ここで、&lt;strong&gt;Raspbian Jessieの場合、細工がいります&lt;/strong&gt;。Jessie以降、システム周りがsystemdになった影響です。systemdのgpsdサービスを無効化しないといけません。Raspbian Wheezy以前ならば、この手順はスキップしてOKです。具体的には、以下のコマンドを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo systemctl stop gpsd.socket&#13; $ sudo systemctl disable gpsd.socket&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;そうしたら、次のコマンドを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock&#13; $ cgps -s&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;Raspberry PiとGPSをきちんと接続し、実行できていれば、時刻や位置が表示されるようになります。&lt;/p&gt;&#10;&lt;h3 id="gpsdの自動起動"&gt;GPSDの自動起動&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;うまくいくことを確認したら、最初からgpsdが起動するように設定しなおします。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Raspbian Jessieでは、これまたシステム周りがsystemdになった影響で、操作が変わります。&lt;/p&gt;&#10;&lt;h4 id="raspbian-wheezyの場合"&gt;Raspbian Wheezyの場合&#10;&lt;/h4&gt;&lt;p&gt;gpsdで推奨とされる、対話的な手法を用います。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo dpkg-reconfigure gpsd&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;いい加減に読みつつ返答をメモします。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自動で起動してもいい？→Yes&lt;/li&gt;&#10;&lt;li&gt;USBのGPS Receiverを自動的に扱ってもいい？→Yes&lt;/li&gt;&#10;&lt;li&gt;GPSデバイスはどこにある？→/dev/ttyUSB0 # ここはUSB使いかUART使いかで適宜変更&lt;/li&gt;&#10;&lt;li&gt;gpsdのオプションは？→-n&lt;/li&gt;&#10;&lt;li&gt;gpsd control socketのパスは？→/var/run/gpsd.sock&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;終わったら、rebootしたあとcgpsして、gpsdが起動し受信できているかどうか確認します。&lt;/p&gt;&#10;&lt;h4 id="raspbian-jessieの場合"&gt;RASPBIAN Jessieの場合&#10;&lt;/h4&gt;&lt;p&gt;Raspbian Jessieにおいては、dpkg-reconfigureが使えませんので、ファイル/etc/default/gpsdを直接編集します。/etc/default/gpsdの、DEVICES、GPSD_OPTIONS、GPSD_SOCKETを、以下のように設定します。&lt;/p&gt;&#10;&lt;pre&gt;`# 適宜適切なパスを指定(UARTならばRPi2 -&gt; /dev/ttyAMA0 ,RPi3 -&gt; /dev/ttyS0)&#13; DEVICES="/dev/ttyUSB0"&#13; GPSD_OPTIONS="-n"&#13; GPSD_SOCKET="/var/run/gpsd.sock"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;その後、以下のようにリンクを貼り付けることで、自動起動させられます(参考：「&lt;a class="link" href="http://www.satsignal.eu/ntp/Raspberry-Pi-quickstart.html" target="_blank" rel="noopener"&#10; &gt;Quick-start Raspberry Pi NTP server&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;pre&gt;`sudo ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/`&lt;/pre&gt;&#13;&#10;&lt;p&gt;終わったらrebootして、すぐにcgpsコマンドを使えるか、また正常にデータを受信できているかを確認します。&lt;/p&gt;&#10;&lt;h3 id="pps"&gt;PPS&#10;&lt;/h3&gt;&lt;p&gt;まず、&lt;strong&gt;カーネルが3.18以上であることを確認&lt;/strong&gt;します。uname -r でどうぞ。それ以前のカーネルでは、PPSに対応しておらず、カーネルからビルドしなければならない、というたいへんな手間が必要とされます。カーネルのバージョンが古い場合は、rpi-updateで更新します。&lt;/p&gt;&#10;&lt;p&gt;次に、GPSからRaspberry PiにPPS信号が通るよう、GPSのPPSをRaspberry Piの任意のGPIOピンに接続します。ここでは、&lt;strong&gt;GPIO4ピンに接続するものとして進めます&lt;/strong&gt;。HATタイプのものは、GPIO4ピンに繋がるように接続されているので、それにあわせました。&lt;/p&gt;&#10;&lt;p&gt;接続したら、以下のコマンドを実行し、設定ファイルの変更および必要なソフトウェアのインストールを行います。そして、ppstestコマンドによりtest。もし、GPIO4ピンではなく別のピンを使う場合は、下記のgpiopin=4のところを任意のピン番号に変更します。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo sh -c "echo 'pps-gpio' &gt;&gt; /etc/modules"&#13; $ sudo sh -c "echo 'dtoverlay=pps-gpio,gpiopin=4' &gt;&gt; /boot/config.txt"&#13; $ sudo apt-get install -y pps-tools&#13; $ sudo reboot&#13; .. 再起動&#13; $ sudo ppstest /dev/pps0&#13; trying PPS source "/dev/pps0"&#13; found PPS source "/dev/pps0"&#13; ok, found 1 source(s), now start fetching data...&#13; source 0 - assert 1443513245.000003049, sequence: 111358 - clear 0.000000000, sequence: 0&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_3328&amp;rdquo; align=&amp;ldquo;alignleft&amp;rdquo; width=&amp;ldquo;184&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="PPS" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/2015/09/4a17af92-300x225.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;PPS[/caption]&lt;/p&gt;&#10;&lt;p&gt;ところで、このモジュールのPPSは、1秒間に100msの矩形波が出ています。「&lt;a class="link" href="//hack-le.com/44771052-2/" &gt;Raspberry Pi のGPIO経由で入力信号を連続的に取得&lt;/a&gt;」の記事で用いた信号のグラフ（左図）がそれだったりします。&lt;/p&gt;&#10;&lt;h2 id="ntp"&gt;NTP&#10;&lt;/h2&gt;&lt;p&gt;NTPはそのままではPPSに対応しておらず、PPSに対応させるにはビルドしてやる必要があります。また、設定ファイル /etc/ntp.conf も変更します。というわけで、適当なディレクトリで以下を実行します。いつもならプロンプトの$をつけるのですが、コピペのことを考えてつけませんでした。ntpdのバージョンは最新版を確認し、NTPVERのところは適宜変更してください。&lt;/p&gt;&#10;&lt;pre&gt;`# ソフトウェアのダウンロードとインストール&#13; # ntpの最新バージョンは適宜確認&#13; sudo apt-get install -y libcap-dev&#13; NTPVER=ntp-4.2.8p8&#13; wget &lt;a href="http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/"&gt;http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/&lt;/a&gt;${NTPVER}.tar.gz&#13; tar xfz ${NTPVER}.tar.gz&#13; cd ${NTPVER}&#13; sudo ./configure --enable-NMEA --enable-linuxcaps &amp;&amp; sudo make &amp;&amp;sudo make install&#13; &#13; # 設定ファイル/etc/ntp.confの編集&#13; # GPSとPPSを参照するように設定します&#13; sudo sh -c "echo 'server 127.127.28.0 minpoll 4 maxpoll 4 prefer' &gt;&gt; /etc/ntp.conf"&#13; sudo sh -c "echo 'fudge 127.127.28.0 time1 0.490 refid GPS' &gt;&gt; /etc/ntp.conf"&#13; sudo sh -c "echo 'server 127.127.22.0 minpoll 4 maxpoll 4' &gt;&gt; /etc/ntp.conf"&#13; sudo sh -c "echo 'fudge 127.127.22.0 flag3 1 refid PPS' &gt;&gt; /etc/ntp.conf"&#13; &#13; # ntpをいったんとめます&#13; # Raspbian Wheezyの場合&#13; sudo service ntp stop&#13; # Raspbian Jessieの場合&#13; sudo systemctl stop ntp.service&#13; &#13; # コンパイルしたntpをbin以下にコピー&#13; sudo cp /usr/local/bin/ntp* /usr/bin/&#13; sudo cp /usr/local/sbin/ntp* /usr/sbin/&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;実行後reboot(ntpサービスを起動させるだけでもよい)。&lt;/p&gt;&#10;&lt;p&gt;/etc/ntp.confの、IPアドレスっぽいものについて説明します。&lt;strong&gt;127.127.28.0はSHM、SHared Memoryで、要はいろんなソフトウェアで共有して使いたいものを置くところ&lt;/strong&gt;と考えてよいと思います。記事によっては&lt;strong&gt;127.127.20.0としているところもありますが、これはgpsdそのもので、GPSのデータをNTPのみで扱うならばそれでもよい&lt;/strong&gt;です。しかし、&lt;strong&gt;汎用性を考えると、よほど高精度のNTPを求めているわけでもなければ、127.127.28.0としたほうがよい&lt;/strong&gt;と思います。また、&lt;strong&gt;127.127.22.0はPPSのこと&lt;/strong&gt;です。PPSによる補正をするためには、同期元のサーバー(この場合は127.127.28.0)にpreferをつける必要があります。&lt;/p&gt;&#10;&lt;p&gt;以上、しばらく放置して同期した頃合いに（NTPの同期は時間がかかる）ntpq -pを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ ntpq -p&#13; remote refid st t when poll reach delay offset jitter&#13; ==============================================================================&#13; *SHM(0) .GPS. 0 l 1 16 377 0.000 -50.154 32.918&#13; oPPS(0) .PPS. 0 l 15 16 377 0.000 0.001 0.004&#13; +ntp-a2.nict.go. .NICT. 1 u 13 64 377 11.317 0.396 0.227&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;こんな感じになればOKです。*がついているのが同期中のサーバー、oがついているのがPPSです。この例ではnictも参照するように設定しています。+はいつでも参照可能だよ、という意味です。&lt;/p&gt;&#10;&lt;p&gt;ntpqはインターネットに接続していることを前提に作られているので、スタンドアロンでは正常に動作しないと思いますが（「&lt;a class="link" href="//hack-le.com/45021829-2/" &gt;Raspberry Pi で ネットを切った時に ntpq -p で Name or service not known. : 或る阿呆の記&lt;/a&gt;」）、ネットから切り離しても同期は続きます。ひとまずはこれで目的は達せられたわけですが、運用していると、Raspberry Piはハードウェアクロックを持たない特性に起因すると思われるトラブルがあったので、その内容と対応について次節に書きます。&lt;/p&gt;&#10;&lt;h2 id="rtcモジュールの取り付け"&gt;RTCモジュールの取り付け&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Piはバッテリーがありません。それはつまり、&lt;strong&gt;電源を落とすと時刻を保持できない&lt;/strong&gt;、ということです。通常であれば、インターネットに接続しているため、即座にNTPサーバーに参照して正確な時刻となりますが、スタンドアロンではそうはいきません。スタンドアロンの場合、前回電源を落とした時刻になってしまいます。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、GPSと同期しているのだから、それで問題は解決なのではないか。そう思っていたのですが、いざ運用してみると、問題がありました。&lt;strong&gt;少し間の電源遮断ならば問題なく再同期が始まるようなのですが、長時間（一日とか）電源を落とした後起動させると、いつまでたってもGPSと同期が始まりません&lt;/strong&gt;。しかし、インターネットに接続するとすぐに同期が始まります。どうして同期元がGPSだとうまくいかないのか、ntpのアルゴリズムを理解していないためわからないのですが、現実としてそのような状況でした。&lt;/p&gt;&#10;&lt;p&gt;結局、&lt;strong&gt;外部のRTCモジュールを取り付け、ハードウェアクロックを実装することで対応&lt;/strong&gt;しました（「&lt;a class="link" href="https://hack-le.com/45307455-2/" &gt;Raspberry Pi で時刻をスタンドアロンでGPSと同期するなら、RTCモジュールとセットが良い – 或る阿呆の記&lt;/a&gt;」「&lt;a class="link" href="https://hack-le.com/45262876-2/" &gt;Raspberry Pi 2 で RTC を使いスタンドアロンで時刻を保持 – 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="参考記事"&gt;参考記事&#10;&lt;/h2&gt;&lt;p&gt;ありがとうございました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.adafruit.com/products/746" target="_blank" rel="noopener"&#10; &gt;Adafruit Ultimate GPS Breakout - 66 channel w/10 Hz updates [Version 3] ID: 746 - $39.95 : Adafruit Industries, Unique &amp;amp; fun DIY electronics and kits&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://learn.adafruit.com/adafruit-ultimate-gps-hat-for-raspberry-pi/pi-setup" target="_blank" rel="noopener"&#10; &gt;Pi GPS Setup | Adafruit Ultimate GPS HAT for Raspberry Pi | Adafruit Learning System&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://nyanchew.com/jp/gps%E3%81%AEpps%E4%BF%A1%E5%8F%B7%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F-stratum-1-ntp%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9" target="_blank" rel="noopener"&#10; &gt;GPSのPPS信号を使った Stratum-1 NTPサーバの作り方 | Nyanchew&amp;rsquo;s Digital Life - ja1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://linlog.blogspot.jp/2009/07/synchronizing-ntp-server-to-gpspps.html" target="_blank" rel="noopener"&#10; &gt;Working with Linux: Synchronizing an NTP server to a GPS/PPS&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.netfort.gr.jp/~tosihisa/notebook/doku.php/raspberrypi/log20140208_ntp_stratum_1" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi で NTP Stratum-1 Server を作る． [tosihisa&amp;rsquo;s public notebook]&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>必要ないのにChromebookが欲しいのは、不便さに魅かれているからか…</title><link>https://hack-le.com/45534536-2/</link><pubDate>Tue, 29 Sep 2015 22:06:41 +0900</pubDate><guid>https://hack-le.com/45534536-2/</guid><description>&lt;p&gt;もう2年以上PCを買っていません。ノートも、デスクトップも。MBA 2013とMac mini 2012、どちらもいまだ最前線で戦える能力を保有しており、まったく代替が必要になりません。困りました。いや、困らないのですが。困ります。&lt;/p&gt;&#10;&lt;h2 id="物欲から逃れられない"&gt;物欲から逃れられない&#10;&lt;/h2&gt;&lt;p&gt;そんな中で私の脳裏をチラチラよぎるのが、Googleが世に問うた異色のノートブック、Chromebookです。最新鋭でありながら、いまさらノートパソコン、二昔いや三昔くらい前のスペック、ブラウザのみ、なんだか先祖返りしてるような気がしないでもない、&lt;strong&gt;存在そのものが尖りきっている&lt;/strong&gt;。これが、使えるマシンだという。物欲をこれでもかというほど刺激する。ものによっては2万円弱（Asusショップのアウトレットだと、2万円を切っています）、Amazonならメモリ4GBのものが2万5000円程度。メモリは4GB欲しい。それでこのChromebookが手に入る。欲しい。&lt;/p&gt;&#10;&lt;h2 id="考えれば考えるほど必要ではない"&gt;考えれば考えるほど必要ではない&#10;&lt;/h2&gt;&lt;p&gt;しかしながら、考えれば考えるほど、私には必要ない代物です。Chromebookの良い所といえば、ブラウザしか使えないことです。つまり、スペックを要さないのでハードウェアが安価。セキュリティソフトが必要ない。最小限の構成のため、ハイパフォーマンスでありながらもバッテリーが長持ちする。&lt;/p&gt;&#10;&lt;p&gt;私が魅力を感じる点は、バッテリーが長持ちするところでしょうか。ですが、MBA 2013もそれなりに持ってくれます。また、電源の確保できない環境に身を置くことがあまりありません。つまり、私にはこれといったメリットがない、ということになります。あるのはスタンドアロンのアプリが使えないというデメリットばかり…。&lt;/p&gt;&#10;&lt;h2 id="魅力はデメリットの中にある"&gt;魅力はデメリットの中にある&#10;&lt;/h2&gt;&lt;p&gt;しかし、しかし。ではなぜ、私はいまだに価格コムでChromebookの価格変化のグラフを見ることをやめることができないのか。この気持ちを、どう説明したらよいのか。ずっと考えていました。このブログでは何度かChromebookを取り上げ、そのたびに欲しい、でも必要ない、ということを繰り返しています。&lt;strong&gt;必要がないのは明らか&lt;/strong&gt;です。にも関わらず、私はまたこうして記事を書いている私は&lt;strong&gt;明確にChromebookを欲しがっている&lt;/strong&gt;…なぜ。&lt;/p&gt;&#10;&lt;p&gt;恐らく私は、&lt;strong&gt;Chromebookのメリットではなく、デメリットに惹かれている&lt;/strong&gt;。それは強制的にクラウドベースであることを要求される、スタンドアロンで使い物にならない、そういうところです。その制約の中で、否が応でも使い方を考えなくてはいけないでしょう。&lt;strong&gt;人を成長させるのは便利ではなく制約です&lt;/strong&gt;。…まぁ、実際のところこれで成長出来るかどうかはわかりませんが、この不便さはきっと私に何かしらの変化をもたらすことだろうと思います。&lt;/p&gt;&#10;&lt;p&gt;そんなことを考えていると、どんどん欲しくなってきました…。そろそろ耐え切れずに買ってしまいそうな気もします。が、&lt;strong&gt;できればもう一押し&lt;/strong&gt;欲しい。スペックが必要ないとはいえ、あるに越したことはないので、ハードウェアがさらによくなるとか、値段がさらに下がるとか…こうしてカタログを眺めているときが一番楽しいかもしれません。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00QF2F1DS" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Fire TV Stick 予約しました</title><link>https://hack-le.com/45514585-2/</link><pubDate>Sat, 26 Sep 2015 12:59:28 +0900</pubDate><guid>https://hack-le.com/45514585-2/</guid><description>&lt;p&gt;AmazonでfireTVの販売が開始されました。私はAmazonプライム会員なので（無料期間にキャンセルを忘れていたというありがちな阿呆ぶりのために）、Amazonプライムビデオを閲覧することができますから、まぁせっかくここまできたら皿までと思い、安価なのだからと何も考えずに購入しました。&lt;/p&gt;&#10;&lt;h2 id="何を期待して買うのか"&gt;何を期待して買うのか&#10;&lt;/h2&gt;&lt;p&gt;購入理由は、&lt;strong&gt;Amazonプライムビデオをテレビでなるべく快適に利用するため&lt;/strong&gt;、というのが理由のほぼすべてでしょうか。というか、AppleTV（第二世代）も持っているので、そのほかのYoutube閲覧だとかそういうのはもう間に合っています。そして私はそれらを一切使っていません…まぁ私はそんなものです。というか、家族が使うTVなのに私の個人アカウントでYoutubeを閲覧とか嫌ですよ。そんな私がAmazonプライムビデオを本当に見るのか果たして疑問ではあるのですが…まぁこういうガジェットは使ってみないとわかりませんから…。&lt;/p&gt;&#10;&lt;p&gt;というか、&lt;strong&gt;Amazonのサービスを使う以外の目的では購入しても仕方ないんじゃないかな&lt;/strong&gt;と思います。その意味ではChromecastよりAppltTVのほうが近そうですが、その応用範囲はAppleTVに比べると随分…。Amazonって、そういう感じですね。Appleなどは囲い込みの印象が強く実際その通りではあるのですが、iTunes StoreでDRMフリーを推進しまたそれを広めた功績もあります。一方でKindleはDRMを積極的に推進しているように見えます。&lt;strong&gt;AmazonはApple以上に独占志向の強い企業なのでしょう&lt;/strong&gt;。Appleは今でこそiPhoneの超ヒットですっかりスターダムに上り詰めていますが、根っこはいまだ野党気質というか、「使いたくなければ他のを使えばいいだろう？」という感じで、使いたいやつだけ使えばいいという思想が製品から透けて見えます（でなきゃMacBookなんて出せないでしょうし）。まぁ、元々そういう企業ですしね。しかし、Amazonはすべてを支配しようとしているような、なかなか末恐ろしい企業です。しかも現実に使いやすい製品を出してくるのだから…うーん、個人的には惜しいのですが、しかしながらその強烈な独占欲がAmazon（というかジェフ・ベゾス？）をここまで大きくした、という面もありそうですし、なんともなんとも…。&lt;/p&gt;</description></item><item><title>何度目かのChrome→Safari計画</title><link>https://hack-le.com/45503606-2/</link><pubDate>Thu, 24 Sep 2015 10:55:00 +0900</pubDate><guid>https://hack-le.com/45503606-2/</guid><description>&lt;p&gt;Google Chromeを使い始めたのはもう何年前のことか思い出せません。FirefoxからChromeに乗り換えてからずっと愛用しています。大きな不満があるわけではなく、強いてあげればバージョン45よりUnity WebPlayerが非対応となり、一部のブラウザゲームがプレイできなくなったくらいなのですが、Chrome→Safari移行を計画中です。もう何度目かな。といっても、完全な移行ではありません。LinuxやWindowsも使っているので、完全な移行はそもそも不可能です。が、Macだけでも。&lt;/p&gt;&#10;&lt;h2 id="乗り換えの理由"&gt;乗り換えの理由&#10;&lt;/h2&gt;&lt;p&gt;やはりMacユーザーとしては、Macにのみ最適化されているSafariを使うほうがスマートですし、色々な記事を見ていくとSafariのほうが省エネであるようです（「&lt;a class="link" href="http://gigazine.net/news/20150731-power-consumption-browser/" target="_blank" rel="noopener"&#10; &gt;Chrome対Safari対Firefox、最もバッテリー消費が激しいブラウザはどれ？ - GIGAZINE&lt;/a&gt;」）。元々は軽量であるというのがウリのChromeでしたが、今のChromeは確かに重い。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;飽きてきた&lt;/strong&gt;というのもあります。購入してもいないChromebookを欲しい欲しいと書き連ねてカテゴリまで作っている当ブログですが、やはり冷静に考えるとMacBook Air 2013がある以上どう考えても必要なく、それであればどうしてもChromeを使う理由もないかな、と思った次第です。たまには別のブラウザを使わないと。あまりにも、Googleのサービスに依存し過ぎていますし。&lt;/p&gt;&#10;&lt;h2 id="いくつかの課題"&gt;いくつかの課題&#10;&lt;/h2&gt;&lt;h3 id="他ブラウザとの同期の問題"&gt;他ブラウザとの同期の問題&#10;&lt;/h3&gt;&lt;p&gt;AndroidやWindows、Linuxを同時に使っている身としては、すべてのブラウザをSafariでというわけにはいきません。Chromeの素晴らしいところは、どのデバイスでも使えるところでしょう。Firefoxも今年中にiOS版を出すようなので、期待したいところです。&lt;/p&gt;&#10;&lt;p&gt;さて、少なくともOSXとiOSではSafariを使うにしても、AndroidやLinuxではやはりChromeないしChromiumを依然使うことになるでしょうから、&lt;strong&gt;他ブラウザとのブックマークの同期&lt;/strong&gt;が問題となります。ブックマークを別々に管理するのはよくない。昔はクロスプラットフォームでブックマークを同期するようなアドオンがあったものですが、いつのまにか消えましたね。調べてみても、WindowsのiCloudを利用するという記事が引っかかるばかり。簡単な手段はなさそうです。&lt;/p&gt;&#10;&lt;p&gt;結局、やや筋が悪いですが、&lt;strong&gt;Safariでは「ファイル」→「読み込む」で簡単にGoogle Chromeのブックマークを読み込めることから、Google Chromeのブックマークを基本として、定期的にSafariに落としこむ&lt;/strong&gt;、という方向で運用していこうと思います。&lt;/p&gt;&#10;&lt;h3 id="拡張機能の不足"&gt;拡張機能の不足&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Safariの拡張機能も随分増えてきたとはいえ、やはりChromeに比べると随分寂しい&lt;/strong&gt;のは事実。もっとも、自分は拡張機能をあまりドカドカ入れるほうではないのですが（入れれば入れるほど重くなることは身に染みています）、それでもいくつかの機能については諦めざるを得ません。&lt;/p&gt;&#10;&lt;p&gt;小さなものでは、Google検索で3ヶ月以内と6ヶ月以内を追加するだけというちょっとした拡張など、便利に使っていましたが、やはり無い模様。複数のリンクをまとめて開く便利なエクステンションLinkclumpに代わる拡張は是非とも欲しいのですが、Appleのページを探してもちょっと見当たらない。一番困るのは、Google謹製のGoogle検索から任意のドメインを除外するPersonal Blocklistに代わるもので、現在開発されているものがないこと。Safari Blocklistなるものはあるのですが、開発が止まって久しいようですし、野良拡張のようなのでどうも抵抗あり…しかし他に無ければ、試してみることになるでしょうが。&lt;/p&gt;&#10;&lt;p&gt;まぁ、&lt;strong&gt;CreateLinkに代わるFormatLinkや、広告ブロック、自動ページめくりなど基本的なところは揃っている&lt;/strong&gt;ので（FormatLinkは全然紹介されていませんが本当に便利ですよ）、当面は使っていくつもりです。&lt;/p&gt;&#10;&lt;h2 id="今回はどうなるかな"&gt;今回はどうなるかな&#10;&lt;/h2&gt;&lt;p&gt;これまでにも何度かSafariに乗り換えようとして、頓挫しています。サイトのレスポンスを見てもChromeのほうが良かったし、結局他のOSでChromeを使うことになるのだから、という感じで。今も書きながら、なんで自分は手間暇かけてSafariを使おうとしているんだろう、と若干疑問に思っているところがあるのですが、この記事もSafariで書いていますし、何故か移行にやる気になっている自分がいる。Safariは随分良くなったという話をよく聞きます。Chrome重いし。まぁ、&lt;strong&gt;使い勝手ばかりは使ってみて初めてわかるものなので、しばらくはSafariでやっていこう&lt;/strong&gt;と思います。&lt;/p&gt;</description></item><item><title>iPad Pro と MacBook Pro の逆転</title><link>https://hack-le.com/45485726-2/</link><pubDate>Tue, 22 Sep 2015 11:28:15 +0900</pubDate><guid>https://hack-le.com/45485726-2/</guid><description>&lt;p&gt;&lt;strong&gt;13インチのMacBook Proに対して、マルチコアでという制限付とはいえ、同じProの名を冠したiPad Proの性能のほうが高い&lt;/strong&gt;。どうも、そうなりそうだと。それは私にとってショックなことです。&lt;/p&gt;&#10;&lt;h2 id="ipad-proのマルチコア性能がmacbook-proのそれを上回る"&gt;iPad Proのマルチコア性能がMacBook Proのそれを上回る&#10;&lt;/h2&gt;&lt;p&gt;「&lt;a class="link" href="http://japanese.engadget.com/2015/09/18/ipad-pro-macbook/" target="_blank" rel="noopener"&#10; &gt;iPad Proの真のライバルはMacBookだと思う3つの理由(アップル系ライター海老原昭) - Engadget Japanese&lt;/a&gt;」の記事は最近ちょくちょく見る論調の記事です。&lt;/p&gt;&#10;&lt;p&gt;最初の価格とタブレットで置き換えられる作業が増えてきた、ということについては「それはそうだ」といった程度で流し読みしていたのですが、最後のCPU性能比についての言及には驚きました。曰く、&lt;strong&gt;13インチのMacBook Proに対して、マルチコアでという制限付とはいえ、同じProの名を冠したiPad Proの性能のほうが高い&lt;/strong&gt;。そうなのですか…。もちろん未発売の端末なわけですから、実際どうなるかはわからないとはいうものの、恐らくそうなるのでしょう。他記事でもiPad Proはラップトップ級のスコアが予測されていますね（参考：「&lt;a class="link" href="http://little-beans.net/exposition/ipad-pro-surface/" target="_blank" rel="noopener"&#10; &gt;iPad ProとSurface 3 &amp;amp;Surface Pro 3の違いは？スペックやアクセサリを比較！&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;これが昨今の異常に高スペックなAndroid端末であれば気にならないのですが、やはり&lt;strong&gt;同じApple製品となると、そういう時代なのか、という感&lt;/strong&gt;が強くなります。iPadは好きです。初代は発売日に不精な私には珍しく街へ買いに出かけました（しかしどこも売り切れで買えなかった）。Retinaになり解像度が上がってからは特に素晴らしく、また現在のiPad Air2は処理能力も高くて、まったくストレスを感じさせず、今は毎日使っています。けれど、やはり私にとってはタブレットよりもPCのほうが特別なコンピュータで、そしてまた、スペックとはもっともわかりやすい指標ですから、これがMacBook Airや最近新しく出たMacBookならばともかく、仮にもProを名乗るMacBook Proが、同社のタブレットのProに、一部とはいえ劣るところがあるのは、なんとも言えず寂しい気がします。そしてMacBook Proが負けるということは、デスクトップマシンであるMac miniも…2012モデルならばクアッドコアなので大丈夫でしょうが。&lt;/p&gt;&#10;&lt;h2 id="pcの次は"&gt;PCの次は&#10;&lt;/h2&gt;&lt;p&gt;PCがメインストリームから降ろされる時が近づいていることは、きっと確かなのでしょう。それはデジタルデバイスに関心のない一般の人たちのみならず、ガジェット好きなオタクにとっても。今回の記事で取り上げたタブレット端末のことばかりではなく、&lt;strong&gt;Raspberry Piのようなシングルボードのコンピュータ&lt;/strong&gt;もあります。実際、私など今一番遊ばせてもらっているのがRaspberry Piで、PCの進化は正直なところもうあまり期待できないところがあると思っていますが、&lt;strong&gt;このシングルボードのコンピュータについては、これからまだまだ進化していくだろう&lt;/strong&gt;と思え、たいへん楽しみです。まぁ、これについてはPCの一種だろうという見方もできるわけですが、実際の用途を思うと私にしてみればやはり別ジャンルです。&lt;/p&gt;&#10;&lt;p&gt;高性能のPCが必要とされなくなることはありえませんが、全体の需要はもはや下火ということになるのでしょうか。一つの時代が終わりつつあるのは寂しいことですが、それは新しい時代の幕開けでもありますから、楽しめるだけ、楽しみたいものです。次のPCを買う日は、だいぶ先になるかもなぁ…。&lt;/p&gt;</description></item><item><title>5400mAhのバッテリーでRaspberry Pi 2 連続12時間稼働（スタンドアロン）</title><link>https://hack-le.com/45446267-2/</link><pubDate>Sat, 19 Sep 2015 01:38:35 +0900</pubDate><guid>https://hack-le.com/45446267-2/</guid><description>&lt;p&gt;&lt;img alt="af262920" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/2015/09/af262920-298x300.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;モバイルバッテリーで動くRaspberry Piの図。各種センサからログを取得し続ける。&lt;/p&gt;&#10;&lt;h2 id="スタンドアロンでraspberry-piはどれだけもつのか"&gt;スタンドアロンでRaspberry Piはどれだけもつのか&#10;&lt;/h2&gt;&lt;p&gt;各種センサを簡単に組み込めるRaspberry Piは、スタンドアロンで電源も何もない場所においておきたい、というケースもあると思います。実際どれだけ持つのか知りたくて、やってみたところ、&lt;strong&gt;意外と12時間もちました&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;3年以上前に購入した&lt;strong&gt;ヘタレたバッテリーで、センサからログを常時ログを取得し続ける状態&lt;/strong&gt;ということもあり、数時間程度かなと思っていたのですが。ただし、&lt;strong&gt;インターネットには接続しない、スタンドアロンの状態&lt;/strong&gt;（写真は無線LANアダプタつけてますが）。以下、もう少し詳しく書きます。無線LANアダプタをつけた状態でも、少なくとも6時間以上は動きました（モバイルバッテリーの残量がだいぶ減っていたこともあり、そこで中断しました。今度切れるまでやってみようかな）。&lt;/p&gt;&#10;&lt;h2 id="raspberry-piの状態"&gt;Raspberry Piの状態&#10;&lt;/h2&gt;&lt;p&gt;まったく何もしないではつまらないので、気温センサなどと通信し、ひたすらログを取得するようにします。具体的には、以下の&lt;strong&gt;3種類のセンサから毎妙ログを取得し、テキストファイルに書き出す&lt;/strong&gt;ようなスクリプトを、起動直後から動かし続けます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;LM75B（気温センサ）&lt;/li&gt;&#10;&lt;li&gt;BMP180（気圧・気温センサ）&lt;/li&gt;&#10;&lt;li&gt;BME280（気圧・気温・湿度センサ）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;どれもI2Cのインタフェースを備えています。また、&lt;strong&gt;スタンドアロンでの使用ということで、時刻保持のためにRTCモジュール&lt;/strong&gt;も取り付けています。そのほか、ぱっと見で生きているかどうかわかるように&lt;strong&gt;LEDを取り付けたり、タクトスイッチで電源を切れるようにしたり&lt;/strong&gt;しています。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZCINXB8" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B014W7NS96" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZH6DTGY" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B012BW0D0G" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="バッテリーの状態"&gt;バッテリーの状態&#10;&lt;/h2&gt;&lt;p&gt;バッテリーは、たしか3年ほど前に購入したと思しき、&lt;strong&gt;PanasonicのQE-PL201&lt;/strong&gt;です。Qiで充電できるというのが特徴ですが、Qiで充電したことはほとんどありません。無接点充電規格は一向に流行る様子がないですね…スマホで対応してるのは大御所だとNexusくらいか。容量は当時としては大きいほうであった&lt;strong&gt;5,400mAh（電圧3.7Vで20Wh）&lt;/strong&gt; です。そこそこ使ってきているので、天下のPanasonicとはいえ&lt;strong&gt;もちろんヘタれている&lt;/strong&gt;でしょう。&lt;/p&gt;&#10;&lt;h2 id="今時の大容量モバイルバッテリーなら手軽に2日くらい稼働できそう"&gt;今時の大容量モバイルバッテリーなら手軽に2日くらい稼働できそう&#10;&lt;/h2&gt;&lt;p&gt;ということは、今の、たとえば&lt;strong&gt;Ankerの25,600mAhとかそんなものを使えば、単純計算で4-5倍は持ちそう&lt;/strong&gt;です。データを取得するだけなら、常温の環下ではモバイルバッテリーで2日くらいはもたせられるということに。すごいものですね。現在、容量と価格とのバランスがすぐれているのは20,800-22,400mAhあたりでしょうか。22400mAhが4,000円とは…品質はわかりませんが、探すと3,000円を切っているものもありますね。さすがに怖い。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00D2DCUDC" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00UBSXFTO" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00PA1BQXE" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>EvernoteアプリをEvernote Foodの代わりにするには妥協がいる</title><link>https://hack-le.com/45437814-2/</link><pubDate>Fri, 18 Sep 2015 09:19:53 +0900</pubDate><guid>https://hack-le.com/45437814-2/</guid><description>&lt;p&gt;Evernote Foodのサポート終了が表明されてもう二週間以上たちました（「&lt;a class="link" href="//hack-le.com/45228281-2/" &gt;Evernote Food が2015年9月30日にサポート終了 : 或る阿呆の記&lt;/a&gt;」）。当ブログの記事にもいくらかのアクセスをいただいているようですが、あの記事は私のショックさを愚痴った記事なので、残念ながら解決に至る方策については書いておりません。公式では、Evernoteアプリを使うことでEvernote Foodの代わりになるといいます。今回、本当にEvernoteでEvernote Foodの代わりになるのか、しばらく使ってみた感触について書きます。&lt;/p&gt;&#10;&lt;h2 id="evernote-foodのよかったところ"&gt;Evernote Foodのよかったところ&#10;&lt;/h2&gt;&lt;p&gt;そもそもEvernote Foodの便利なところはどこだったか、まず整理します。私にとっては、ですが。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ワンタップで写真を取り、特定のノートブックに新規作成できる&lt;/li&gt;&#10;&lt;li&gt;自動で名前が入力される&lt;/li&gt;&#10;&lt;li&gt;GPSに基づき、お店の検索ができる&lt;/li&gt;&#10;&lt;li&gt;あとで写真を中心にした一覧表示ができる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これらが公式のEvernoteアプリで満たされれば、私としては文句がありません。すべてでなくてもよいのです。もとより100点は期待していません。妥協できるレベルというのはあります。&lt;/p&gt;&#10;&lt;h2 id="実際に使ってみて微妙かつプラットフォームによってまちまち"&gt;実際に使ってみて…微妙。かつプラットフォームによってまちまち&#10;&lt;/h2&gt;&lt;p&gt;結論からいうと、&lt;strong&gt;完全な代わりにはならず、妥協すれば使えないことはない&lt;/strong&gt;、といった具合です。ただ、&lt;strong&gt;iPhoneなのか、iPadなのか、Androidなのかで、アプリの挙動が微妙に変わるのは慣れが必要というか、あまりいただけない&lt;/strong&gt;なと個人的には思います。デバイスを選ばないところに、Evernoteの良さがあると思いますので…。&lt;/p&gt;&#10;&lt;h3 id="ワンタップは問題ないが特定のノートブックに保存は難あり"&gt;ワンタップは問題ないが、特定のノートブックに保存は難あり&#10;&lt;/h3&gt;&lt;p&gt;Evernoteアプリを起動したら &lt;strong&gt;、カメラボタンで即新規作成モード&lt;/strong&gt;に入りますので、その点についてはあまり問題ないかと思います（Androidスマホでは+-&amp;gt;カメラで2タップ必要でしたが…）。&lt;strong&gt;写真も複数撮影&lt;/strong&gt;することができます。しかしながら、&lt;strong&gt;ノートの保存は難がある&lt;/strong&gt;ように思います。デフォルトの保存場所と、Evernote Foodで使っていた保存場所は異なる人が大半でしょう。&lt;strong&gt;もし、EvernoteをEvernote Foodのためにしか使っていなければ、問題ない&lt;/strong&gt;でしょうが。…考えてみれば、スマートフォンでEvernoteのノートを作成することはこれ以外にないので、それでよいかもしれない、とふと思いました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;保存するノートブックの指定については、プラットフォームによって挙動が異なる&lt;/strong&gt;ようです。というのは、AndroidやiPadでは、撮影してそのままノートブックの場所を変えられたのですが、iPhoneではまず既定のノートブックに保存されます。そして、後で改めてそのノートを編集するのですが…やや面倒です。また、この操作性から、コメントを残すことが面倒臭いと思います。私はめったにコメントしないので、よいですが。&lt;/p&gt;&#10;&lt;h3 id="名前入力は難あり"&gt;名前入力は難あり&#10;&lt;/h3&gt;&lt;p&gt;ノートブックに自動で名前をつけてくれるのは、地味ながら良い機能でした。朝、昼、晩、本当にそれくらいでよいのですよね。Evernote公式アプリでは、作られるノートがすべて食事絡みである、という前提はもちろんありませんので、&lt;strong&gt;この機能については残念ながら妥協しなくてはいけません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="お店の検索は難あり"&gt;お店の検索は難あり&#10;&lt;/h3&gt;&lt;p&gt;Evernote Foodでいいなと思ったのは、外食時にお店を検索し、一覧から選択できることでした。選択すると、自動でタイトルに反映される。シンプルだけど嬉しい機能だったと思います。Evernoteアプリでは、ちょっとむずかしい。&lt;strong&gt;お店を探せないことはないのですが、一覧形式ではなく、地図上から探してピンをたてる…これはちょっと常用できません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="写真の一覧表示はまぁまぁ"&gt;写真の一覧表示はまぁまぁ&#10;&lt;/h3&gt;&lt;p&gt;Evernote Foodのノートブックを開けば、まぁ写真とタイトルがずらずらと並びますので、これについてはよいかなと思います。&lt;strong&gt;カード形式にすれば、だいぶそれっぽい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="ところで重すぎないだろうか"&gt;ところで重すぎないだろうか&#10;&lt;/h3&gt;&lt;p&gt;今回の件でEvernoteアプリをちょくちょく使うようになりましたが、&lt;strong&gt;非常に重いような気がします。特にiPhone&lt;/strong&gt;。私のiPhone 5はもはや二世代…いや三世代遅れではありますが、RAM容量については長いこと据え置きでしたし（今回のiPhone 6Sでようやく2GBになるようですね）、やはりちょっと重い作りのように思えるなぁ…。RAMが2GB以上あれば、問題ないと思うんですけどね。iPadとXperia Z3では問題がなかったので…。&lt;/p&gt;&#10;&lt;p&gt;OSXでも、もっともよく落ちるアプリの一つなんですよね、Evernote…あらゆる意味で、アイコンどおり象のようなアプリケーションです。愛用してはいるのですが…時々、これは私の嗜好に本当に合っているのか？と思うことがあります。&lt;/p&gt;&#10;&lt;h2 id="使えないことはないが妥協点は多い"&gt;使えないことはないが、妥協点は多い&#10;&lt;/h2&gt;&lt;p&gt;使えないことはありません。完全な代わりにならないことは、まぁわかっていたことではあります。しかし、やはり妥協点は多い。個人的にはノートの保存場所、タイトル、それとお店の検索が残念です。&lt;strong&gt;まったく許せないというほどほどでもない&lt;/strong&gt;ので、もうしばらく使ってみようとは思っています。工夫すれば、それらしい使い方が思い浮かぶかもしれない。&lt;/p&gt;&#10;&lt;p&gt;それにしても、Evernote Foodは良いアプリだと思いますし、大きすぎる本体に小回りのきく専用アプリ、という立ち位置は悪くないと思うのですが、どうして開発中止なのでしょう。本当にEvernoteでEvernote Foodの代わりになると、公式で考えているのでしょうか…確かに一部できないこともないのですが、このアプリをわざわざ立案して、作ってきた人はそう思わないのではないかなぁ。まぁ開発にはコストがつきものですから、こういうことは、公式ではなく誰か他の人がやってね、ということなのかもしれないな、と思ったりします。&lt;/p&gt;</description></item><item><title>不調のMagicTrackpadとT651を両方使っている</title><link>https://hack-le.com/45365672-2/</link><pubDate>Thu, 17 Sep 2015 11:00:26 +0900</pubDate><guid>https://hack-le.com/45365672-2/</guid><description>&lt;p&gt;わけのわからないことになってきました。乱暴な使い方が祟って、MagicTrackpadが不調になったのは何度か記事にしています。その後、&lt;strong&gt;1万円&lt;/strong&gt;という値段を見て買い換える気が起きず、&lt;strong&gt;Logicoolから販売されている、T651という代替品を購入&lt;/strong&gt;しました。&lt;strong&gt;こちらは約半額の5,000円弱&lt;/strong&gt;で新品を手に入れることができます。&lt;/p&gt;&#10;&lt;h2 id="不調の純正magictrackpadと普通に微妙なt651"&gt;不調の純正MagicTrackpadと普通に微妙なT651&#10;&lt;/h2&gt;&lt;p&gt;T651の操作性は純正より劣るものの、許容できないという範囲ではなかったのですが、&lt;strong&gt;BetterTouchTool（以下BTT）が使えない&lt;/strong&gt;という欠点により（マウスとして認識されているようで）、&lt;strong&gt;常用には厳しいか、というのが第一印象&lt;/strong&gt;でした（「&lt;a class="link" href="//hack-le.com/45186672.html" &gt;Mac用トラックパッド T651 購入。BTT使えなかったのですね… : 或る阿呆の記&lt;/a&gt;」）。しかしその後使っていると、自分の場合BTTはなくても意外といける（もちろんあったほうが便利なのですが）ということがわかり、また操作性の違和感もそれほど強くはなかったので、&lt;strong&gt;しばらくするとT651を常用する&lt;/strong&gt;ようになりました（「&lt;a class="link" href="//hack-le.com/archives/45228614-2/" &gt;なんだかんだで純正MagicTrackpad代替としてT651を使っている : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;以上が前回までの顛末ですが、しばらく使っていると、&lt;strong&gt;T651でも時折挙動が不安定になる&lt;/strong&gt;ことがありました。ポインタの制御がききづらくなり、ちょっと動かしたいだけなのに大きくジャンプする、という具合です。純正でも時折起きた症状に近く、ひょっとして機器側の問題ではなく、OSあるいはMac本体の問題なのか？という疑念も起きましたが、&lt;strong&gt;T651が不調なときと、純正トラックパッドが不調なときのタイミングは重ならず&lt;/strong&gt;、T651のコントロールがおかしなときは純正が問題なく使え、純正に問題があるときはT651が問題なく使える、という状態が続きます。Mac側の問題であれば、どちらも同時に不調になりそうにも思えるのですが。なんとも奇妙な話です。&lt;/p&gt;&#10;&lt;h2 id="結局両方使う現状主体は純正トラックパッド"&gt;結局両方使う現状、主体は純正トラックパッド&#10;&lt;/h2&gt;&lt;p&gt;どこに不具合があるのか、どうにも判然としませんが、この2つを使えば、少なくともポインタを自在に動かせず苛々とする時間は大幅に減少させることができるでしょう。わけのわからない状態ではありますが。どうせ2つ使うことになるのであれば、普段使いは使いやすいほうがよい。というわけで、&lt;strong&gt;現在は純正のMagicTrackpadを中心に使いながら、不調に陥ったらT651に持ち替える、という方式&lt;/strong&gt;にしています。いったい便利なのか不便なのか、変な感じです。もうひとつ、新品の純正トラックパッドがあれば、どこに原因があるのか検証できるのですが。&lt;/p&gt;&#10;&lt;p&gt;このようにいろいろと苦労している現状ですので、やはり&lt;strong&gt;多少高くとも私としては純正品を人にはオススメするかな、と思う今日この頃&lt;/strong&gt;です。たまに使いたいだけであれば、T651も悪くないと思いますが。もう少し待てば、フォースタッチに対応したMagicTrackpadが出るかもしれませんね。ちょうど、キーボードも刷新されるようですし。出たら、買おうかな。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00B3PJ91W" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B003XKO2LW" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Macのマウスエミュレータcliclickでスマホゲーやブラウザゲーの単純作業を自動化する</title><link>https://hack-le.com/45408555-2/</link><pubDate>Tue, 15 Sep 2015 07:06:36 +0900</pubDate><guid>https://hack-le.com/45408555-2/</guid><description>&lt;p&gt;Mac前提です。&lt;/p&gt;&#10;&lt;p&gt;最近ブラウザゲーやスマホゲーを、手空きの時間にポチポチすることがあります。この手のゲームって、体力みたいなのがあることがよくありますね。一定時間たたないと、行動ができない。でまぁ、レベル上げみたいなことをするには時間がかかる…のですが、そうしょっちゅうゲームをやるわけにもいきませんし、どうせ単純作業なのだから、なんとか楽に自動化モドキくらいのことはできないものかな、と思いました。&lt;/p&gt;&#10;&lt;h2 id="マウスによる原始的な自動化"&gt;マウスによる原始的な自動化&#10;&lt;/h2&gt;&lt;p&gt;結論としては、&lt;strong&gt;マウスエミュレータで簡単なスクリプトを組み、特定のマウスパターンを実行させるようにすれば、労なくちょっとした稼ぎくらいはできる&lt;/strong&gt;なと思います。よくある画像認識などを一切しない、原始的な方法ではありますが、それだけにシンプルで実装が簡単であり、その割にけっこう使えます(画像認識も、完全一致であればスクリーンキャプチャ+cmpですぐできます）。&lt;/p&gt;&#10;&lt;p&gt;Macでは、&lt;strong&gt;cliclick&lt;/strong&gt;というたいへん便利なCLIのソフトがあって、これを使うと&lt;strong&gt;シェルスクリプトでちょこちょこっと簡単に指定したマウスのパターンを実行するプログラムが組めます&lt;/strong&gt;。&lt;strong&gt;Androidのゲームについては、Androidエミュレータを起動しなくてはならないのが手間といえば手間&lt;/strong&gt;です。iOSのゲームは、私はエミュレータを使っていないのでコメントできませんが、多分たくさんあるでしょう（適当）。&lt;/p&gt;&#10;&lt;p&gt;…&lt;strong&gt;本当にマウスの軌跡を覚えさせるだけなら、App StoreにあるRepeaterというアプリを使えば、そのとおりに軌跡を覚えてくれる&lt;/strong&gt;ので、まぁこういうのを使うのもよいかと思います。プログラミングしなくて済む方法ではあります。&lt;/p&gt;&#10;&lt;h2 id="genymotionでandroidゲームをmacで起動する"&gt;GenymotionでAndroidゲームをMacで起動する&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;ブラウザゲーの場合は、何も問題ありません&lt;/strong&gt;。ブラウザを立ち上げればよいだけです。しかし&lt;strong&gt;Androidのゲームの場合、まずPC上で動かす必要があります。つまり、Androidのエミュレータが必要です&lt;/strong&gt;。エミュレータはなんでもよいのですが、私は「&lt;a class="link" href="https://www.genymotion.com/#!/" target="_blank" rel="noopener"&#10; &gt;Genymotion&lt;/a&gt;」を使っています。これについては、以前Windows版の記事を書きました（「&lt;a class="link" href="//hack-le.com/41200106-2/" &gt;WindowsアプリのGenymotionでAndroid 4.3を動かす : 或る阿呆の記&lt;/a&gt;」）。Mac版もあって、問題なく使用することができます。ただ、多分最新のOSはまだあまり安定していないのではないかと思い、私はNexus 7(2012)のAndroid 4.3として常用しています。&lt;/p&gt;&#10;&lt;h2 id="cliclickのインストールと使用"&gt;cliclickのインストールと使用&#10;&lt;/h2&gt;&lt;p&gt;PCでゲームを起動する準備ができたら、cliclickを使って自動化を試みます。まずは何はともあれインストールですが、&lt;strong&gt;Homebrewで一発でインストールできる&lt;/strong&gt;ので、それが一番良いでしょう。&lt;/p&gt;&#10;&lt;pre&gt;`$ brew install cliclick&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;インストールしたら実験をします。&lt;/p&gt;&#10;&lt;pre&gt;`$ cliclick -w 5000 c:26,12; cliclick c:26,12&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このコマンドを実行すると、まず左上メニューバーのAppleマークがクリックされ、「このMacについて」とか「環境設定」とかのメニュー項目が表示されます。そして、5秒後に再びAppleマークがクリックされ、メニューを閉じます。&lt;/p&gt;&#10;&lt;p&gt;その挙動から類推できると思いますが、上記コマンドの意味は、まず &lt;strong&gt;-w 5000 で、クリック後5000ms待て(wait)という意味&lt;/strong&gt;になります。デフォルトは20msです。次に、&lt;strong&gt;c:26,12 は、もっとも左上を座標(0,0)としたときの、(26,12)座標をクリックせよ、という意味&lt;/strong&gt;です。そのほか、ダブルクリックがdcだったりドラッグ・アンド・ドロップがdd-&amp;gt;duだったり、色々用意されており、詳細は cliclick -h で閲覧することができます。非常に簡単です。&lt;/p&gt;&#10;&lt;p&gt;以上より、&lt;strong&gt;cliclickをシェルスクリプトに組み込んで楽々とマウスパターンを自動化させることができる&lt;/strong&gt;わけです。&lt;/p&gt;&#10;&lt;h2 id="ノウハウっぽいこと"&gt;ノウハウっぽいこと&#10;&lt;/h2&gt;&lt;p&gt;座標位置を指定するだけという簡便な実装なので、常に同じ環境になるようにすることが肝となります。ちょっとしたアクシデントですぐにパターンが通用しなくなってしまうのも困りモノです（そんな方法だからこそすぐに実装できるとも言えます）。&lt;/p&gt;&#10;&lt;h3 id="使用するウィンドウを最大化する"&gt;使用するウィンドウを最大化する&#10;&lt;/h3&gt;&lt;p&gt;ブラウザにせよAndroidエミュレータにせよ、ウィンドウの位置と大きさが常に同じでないといけません。もっとも簡便なやり方は、ウィンドウの最大化でしょう。最大化すれば、毎回同じ大きさになります。しかしながら、OSXの最大化（今だとフルスクリーンになりがちですが、Altを押しながらで通常の最大化になります）は「いい感じにでっかくする」だけだったりします。それだとまだ不安定なので、できれば画面いっぱいに最大化したい。これはBetterTouchToolでWindow Snapping Settingsを設定することにより実現するのが最も簡便でしょうか。&lt;/p&gt;&#10;&lt;h3 id="異なる解像度のマシンでソースを共有する"&gt;異なる解像度のマシンでソースを共有する&#10;&lt;/h3&gt;&lt;p&gt;たとえば1920x1080ワイドのMac miniと、1366x768のMBAで、同じソースコードを用いたい場合、それぞれで当然指定すべき座標位置が変わるので、それを考慮しないといけません。これは簡単にできる場合が多いのではないか。というのも、恐らくゲーム画面はウィンドウの中央に配置されるのがたいていでしょうから。MBAのX座標位置はMac miniに比べて、(1920 - 1366)/2 = 277 ほど小さい、と考えられます。&lt;/p&gt;&#10;&lt;p&gt;というわけで、hostname あたりを調べるなどしてまずマシンの判別を行い、補正値を考慮した式にすれば、一つの式で二つのマシンに対応できるようになります。たとえばMac miniを補正値0、MBAの補正値を277として、シェルスクリプトでは以下のようにX座標を表現できます。&lt;/p&gt;&#10;&lt;pre&gt;`X=$(( X - HOSEI ))&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;まぁもうちょっとちゃんとやるのであれば、AppleScriptを使って必ず同じポジションで同じサイズになるようにするのが一番よいと思います。AppleScriptについて書くと長くなるので、方法は割愛します。ググればいっぱいでてきます。&lt;/p&gt;&#10;&lt;h3 id="同じ座標を何度もクリック"&gt;同じ座標を何度もクリック&#10;&lt;/h3&gt;&lt;p&gt;ちょっとしたイレギュラーでもうパターンが崩れてしまいます。といってあまり頑張っては本末転倒です。楽に少しでもロバストにする試みとして、同じ座標を複数回クリックするとよいかもしれません。何かの拍子で最初のクリックがきかなかった場合でも、2回、3回と繰り返せば少なくとも1回はヒットするだろう、という考え方です。とにかく会話画面を飛ばしたいなど、連続クリックをしても問題ない場合に使えます。コンピュータなので1000回連打なども可です(20ms * 1000 = 20s クリックし続ける）。&lt;/p&gt;&#10;&lt;h3 id="ログイン対応"&gt;ログイン対応&#10;&lt;/h3&gt;&lt;p&gt;朝になるとログイン画面になったりするゲームもあります。といっても、どうせ確認ボタンを押したりログインボーナスを確認したりといった程度だと思うので、割と簡単に対応できるゲームが多いのではないかなと。たとえば下記のようにすると、朝5時になってから最初の1回は、画面の任意の座標を100回ほどクリック連打して、ログイン画面を飛ばします。&lt;/p&gt;&#10;&lt;pre&gt;`FIVE=0&#13; HOUR=$(date +%H)&#13; if [ $HOUR -eq 5 ]; then&#13; if [ $FIVE -eq 0 ]; then&#13; for jj in $(seq 100)&#13; do&#13; cliclick c:935,676&#13; done&#13; FIVE=1&#13; fi&#13; fi&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="使い勝手"&gt;使い勝手&#10;&lt;/h2&gt;&lt;p&gt;実装に大して時間がかからない割に（といいつつ各種チューニングで休日を潰しました。まぁ楽しかったので…）、意外と効率よく稼ぎができるゲームもあるので、忙しい社会人には良いと思います。夜寝る前に動かしておいて、朝起きたら多少稼げているとなんとなく嬉しいです。まぁ、あまりお行儀がよいとは言えませんけれど…。昔、RPGでコントローラのボタンをセロテープで止めて自動レベルアップ！とかそういうのに憧れていたことを思い出しました。&lt;/p&gt;</description></item><item><title>Mac でLAN内のIPアドレスとMACアドレスを一覧できる地味に便利なアプリ LanScan</title><link>https://hack-le.com/45348775-2/</link><pubDate>Mon, 14 Sep 2015 12:09:42 +0900</pubDate><guid>https://hack-le.com/45348775-2/</guid><description>&lt;p&gt;私がMacで愛用しているアプリに、LanScanというものがあります。これはLAN内のIPアドレスとMACアドレスを一覧表示してくれるものです。あまりメジャーなアプリではないと思うのですが、シンプルで使いやすく、とても気に入っています。&lt;/p&gt;&#10;&lt;h2 id="lan内のipアドレスとmacアドレスを一覧表示したい"&gt;LAN内のIPアドレスとMACアドレスを一覧表示したい&#10;&lt;/h2&gt;&lt;p&gt;もちろん、ブロードキャストにpingを打ってarp -aでも良いのですが、このアプリはGUIの見やすさに加え、ベンダー名も表記してくれるのが地味に嬉しい。これを使うと、たとえばRaspberry PiなんかをはじめてLAN内に設置したとき、DHCPで適当なアドレスが割り振られるわけですが、これもさっと見つけることができます。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;ldquo;attachment_5010&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1216&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2015/09/bc231ef7341856ace1b1dd9ac58e7929.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;LanScan実行画面[/caption]&lt;/p&gt;&#10;&lt;p&gt;実行すると、上画面のような感じです。MACアドレスやホスト名、ベンダー名なども一緒に一覧表示してくれるのが便利。&lt;/p&gt;&#10;&lt;h2 id="raspberry-piをarpで探す"&gt;Raspberry Piをarpで探す&#10;&lt;/h2&gt;&lt;p&gt;ちなみに、LAN内のRaspberry PiのIPアドレスを検索するときは、以下のようにしても見つかります（USBのWi-fiドングルを使っていたらダメですがイーサネットなら）。&lt;/p&gt;&#10;&lt;pre&gt;`$ arp -a | grep -i b8:27:eb&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;でも、ベンダーコードを調べるのも手間ですし、こういうアプリがあると楽だなと思います。地味だけれど、便利です。&lt;/p&gt;</description></item><item><title>Apple発表、Mac miniはやはり出ないがiMacの噂は流れる</title><link>https://hack-le.com/45377661-2/</link><pubDate>Fri, 11 Sep 2015 10:37:29 +0900</pubDate><guid>https://hack-le.com/45377661-2/</guid><description>&lt;p&gt;9/9(日本時間では9/10の早朝深夜)にAppleの発表がありました。恒例のお祭り騒ぎですが、私としてはMac的な発表がない以上さほどの関心はありません。が、雑感をつらつらと、&lt;/p&gt;&#10;&lt;h2 id="雑感"&gt;雑感&#10;&lt;/h2&gt;&lt;p&gt;雑感。&lt;/p&gt;&#10;&lt;h3 id="iphone-6sのram容量は言及されず"&gt;iPhone 6SのRAM容量は言及されず&#10;&lt;/h3&gt;&lt;p&gt;ほぼまったく事前のリーク通りであったiPhoneですが（期待され過ぎない分そのほうがApple的にもよいのかな？）、&lt;strong&gt;iPhone 6SのRAMが結局2GBなのか1GBなのかは言及されなかった&lt;/strong&gt;ようです。やはり&lt;strong&gt;解体待ち&lt;/strong&gt;ということになりましょう。この不確かな情報については、早速あちこちで喧嘩が勃発しているようです。1GBで決定だ残念、いや2GBだとする記事もある、そもそも1GBで十分だ、いやいや十分じゃない、etcetc…。遠からずわかることなのだから待てばよいのにとも思いますが、待てずに喧嘩してしまうオタク心もわからなくもなく。私はもちろん2GBを望みます…まぁ、当面購入する予定はないのでよいですが。&lt;/p&gt;&#10;&lt;h3 id="apple-tv-のapple-store対応はちょっと楽しみ"&gt;Apple TV のApple Store対応はちょっと楽しみ&#10;&lt;/h3&gt;&lt;p&gt;スティーブ・ジョブズの趣味だったとも言われるApple TVは、私が地味に気に入っているデバイスの一つで、主にPCに保存した動画をお手軽にテレビで閲覧するのに使っています。以前はLinuxのDLNAサーバーに保存した動画をiPadで再生し、さらにそれをミラーリングするという手間をかけていましたが、なんだかんだいってやはりiTunesの動画を共有して見るのが一番楽ですね。&lt;/p&gt;&#10;&lt;p&gt;逆にいうと、それくらいにしか使っていなかったとも言えるApple TVですが、今回大きく進化したようです。&lt;strong&gt;App Store対応は、大きい、やはり&lt;/strong&gt;。iPhoneをリモコンにしてゲームが出来るなら、ゲームを卒業したと嘯く私が、再びテレビの前に座ってゲームをやる日がくるかもしれません。&lt;/p&gt;&#10;&lt;h3 id="iosとosxはどうなった"&gt;iOSとOSXはどうなった&#10;&lt;/h3&gt;&lt;p&gt;私が今回の発表で一番関心を寄せていたのは、OSだったのですが、それほど話題にはなっていませんね。まぁ、&lt;strong&gt;iOSについて目立つのはSplit Viewと本当のマルチタスクくらい&lt;/strong&gt;ですし、&lt;strong&gt;最終的なUIは実際に出てみるまでわかりませんし&lt;/strong&gt;ね。OSXのグラフィックス能力を大きく向上させる可能性を秘めた&lt;strong&gt;Metalも気になっていた&lt;/strong&gt;のですが、あまりどの記事でも触れられておらず、結局どうなったのか。ハードウェア的にはどこらあたりから対応できるのか、私のMBA 2013はいけそうだけどIvy BridgeなMac mini 2012はダメかな、とか。どうなんでしょうね。特にAdobe製品を使っているわけではないので、どうでもよいと言えばそんな気もするのですが、今後ゲームもしたくなるかもしれませんし。ならないかな。&lt;/p&gt;&#10;&lt;h3 id="ipad-proで大型タブレット市場が活性化するといいな"&gt;iPad Proで大型タブレット市場が活性化するといいな&#10;&lt;/h3&gt;&lt;p&gt;iPad ProはRAMが4GBという嬉しい話がありましたが、価格も噂であったような15万オーバーなんてこともなく、まぁだいたい10万円〜ということになりそうで、一つよかったですね。いずれにせよ手は出ませんが。ただ、これによって&lt;strong&gt;Androidの大型タブレット市場が多少なりとも活性化すればよいな&lt;/strong&gt;と思います。現状、実質的にLenovoくらいしか手をつけていません(18インチ超えみたいな極端なものを除けば）。iPad Proはきっとそれなりに売れるでしょうから、実績があれば他メーカーも手をだすようになるでしょうし、値段も熟れてくるでしょう…まぁ、現状でもLenovoが十分頑張っているとは思いますが（「&lt;a class="link" href="//hack-le.com/44729540-2/" &gt;12インチ以上の大型のAndroidタブレットが欲しい : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="同時に流れるimac-215-4k-の噂mac-miniに出番は"&gt;同時に流れるiMac 21.5 4K の噂、Mac miniに出番は&#10;&lt;/h2&gt;&lt;p&gt;特に発表はなかったようですが、早速&lt;strong&gt;iMac 21.5インチ4Kの噂&lt;/strong&gt;が流れています。私が購入するなら27インチのほうなので、流し読み程度ですが、待っていた人は結構いるでしょう…27インチは大きいですからねぇ…。&lt;/p&gt;&#10;&lt;p&gt;それで、&lt;strong&gt;Mac miniはどうなるか&lt;/strong&gt;です。まぁ影も形も見えないので、出るとすれば本当に唐突に発表されそうな気がします。さらっと。ブログでは何度もクアッドコアの必要性について説いていますが、&lt;strong&gt;現実問題、Skylakeでもクアッドコアとデュアルコアでは別のロジックボードが必要になるので、期待はしないほうがいいのだろうな&lt;/strong&gt;とも思っています。いいんだ、俺には2012があるから。&lt;/p&gt;</description></item><item><title>Ping-t が LPIC 101 Ver.4.0 のコマ問対応</title><link>https://hack-le.com/45257690-2/</link><pubDate>Wed, 09 Sep 2015 14:53:47 +0900</pubDate><guid>https://hack-le.com/45257690-2/</guid><description>&lt;h2 id="lpicのweb問題集ができるping-t"&gt;LPICのWeb問題集ができるPing-t&#10;&lt;/h2&gt;&lt;p&gt;LPICの勉強をしようと思って、「&lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LPIC/オラクルマスター/ITパスポート/ITIL総合学習サイト Ping-t - 無料CCNA、LPIC、Oracle Master、ITパスポート問題集、ITILファンデーション、合格体験記、Cisco実機シミュレータ、実機講習&lt;/a&gt;」を見つけたのは先月のことでした。なかなか良いサイトで、101だけならばお試しということで無料で問題集が解けるので、使わせてもらっています。&lt;strong&gt;問題集は暗記に最も適したやり方&lt;/strong&gt;ではないでしょうか。なかなかちゃんと覚える機会のなかったdpkgやrpmの基本的な使い方や、partedによるGPTでの2TB超えハードディスクの使用、なにもかもEmacsでやっていたところをviも使用する、など、&lt;strong&gt;いくつかの事項については仕事でも実際に使う機会がありました&lt;/strong&gt;。久々に触ったUbuntuも、いつのまにかsystemdになっているようですし、&lt;strong&gt;Linuxは追いかけるだけでもまったく苦労します&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="記述式のコマ問が101-ver40-に対応"&gt;記述式のコマ問が101 Ver4.0 に対応&#10;&lt;/h2&gt;&lt;p&gt;そんなPing-tですが、記述式の問題集であるコマ問が、Ver3.5までしか対応していませんでした。今はちょうど移行期であり、Ver3.5とVer4.0はどちらでも受験することができるのですが、あくまで自発的に力試しとして受験する以上、新しいバージョンの試験を受けるのが筋というものなので、記述式問題集が新バージョンに対応していないのは困ったことでした。それが先月末よりようやく対応となり、ちょこちょこと進めています。&lt;strong&gt;選択式ならばできた問題も、やはり記述となると多少難しい&lt;/strong&gt;。コマ問を完全にやり終えたら、試験を受けようと思いますが、目標としては来週くらいでしょうか。&lt;/p&gt;&#10;&lt;h2 id="先は長いなぁ"&gt;先は長いなぁ&#10;&lt;/h2&gt;&lt;p&gt;仕事をしながらの勉強ですから、やはりなかなかしんどいのですが、今のままでは自分はどうにもならないなぁという危機感もひしひしと感じており、それが勉強のモチベーションになっています。資格の勉強なんてしたところで…という思いもあるのですが、LPICは実際に勉強してみて、これはそれなりに使えると感じたので、やっていきたいと思います。&lt;strong&gt;Ping-tに入会すると、LPICの受験料が1,000円ほど安くできる&lt;/strong&gt;ようなので、ありがたく利用させてもらいましょう。しかし、レベル1を取得するだけでも102があり、その先にはレベル2があり、3があり、なにより実務はそれとはまた別次元の話であり、また当然Linux以外にも必要なことは山とあり…先は本当に長く、ため息がでます。&lt;/p&gt;</description></item><item><title>iOS 9 ではミュージックアプリがよくなることを願う</title><link>https://hack-le.com/45339771-2/</link><pubDate>Tue, 08 Sep 2015 09:51:08 +0900</pubDate><guid>https://hack-le.com/45339771-2/</guid><description>&lt;h2 id="appleの発表日間近"&gt;Appleの発表日間近&#10;&lt;/h2&gt;&lt;p&gt;Appleの発表日ですね。日本時間だと、明日（あるいは明後日）の深夜になりますが。iPhoneがほしい人、iPad Proが気になる人、Apple Watchを忘れてない人、Macが出ないかそわそわしてる人、とてつもないminiにすべてを賭ける人、いろいろだと思うのですが、個人的にはiOS 9でしょうか。Mac mini については半ば諦め気味です。最近適当に書いた「&lt;a class="link" href="//hack-le.com/45162067-2/" &gt;Mac mini 2015 でクアッドコアが復活したらいいなぁ : 或る阿呆の記&lt;/a&gt;」がやけに検索にヒットしてしまっているあたり、求めている人は決して少なくないと思うのですが（この記事は本当にただの感想文であり、情報がなくなんだか申し訳ない感じがします）。まぁMac mini 2012が十分活躍できているので、あまり欲しくなってしまうMacを出されてもおさいふが厳しいですし、今年何もなくても泣きません。多分。&lt;/p&gt;&#10;&lt;h2 id="使わない項目で埋め尽くされていたios-84のミュージックアプリ"&gt;使わない項目で埋め尽くされていたiOS 8.4のミュージックアプリ&#10;&lt;/h2&gt;&lt;p&gt;私にとってもっとも影響があるのは、実際のところOSであり、アプリケーションです。OSXは大きな変化はないと思うのですが、iOSについてはApple Musicのこともありそれなりに大きな変化がありそうです。その中でも、&lt;strong&gt;ミュージックアプリがよくなること&lt;/strong&gt;を願います。&lt;/p&gt;&#10;&lt;p&gt;私のiPhoneは今、もっぱら音楽用途として、iPod touch的に使っているのですが、昨今のミュージックアプリのUIには閉口せざるを得ません。iOS6からiOS7になった時のミュージックアプリの改変で、アーティストを選択したあと、アルバムを選択できなくなったことがありました（選択したアーティストすべての楽曲が表示される「&lt;a class="link" href="//hack-le.com/40634709-2/" &gt;iOS8への乗り換えタイミング : 或る阿呆の記&lt;/a&gt;」）。あれは、ひどかった。あのUIを考えた人間は少なくともビートルズファンではないのでしょうが、別にビートルズでなくとも多数のアルバムをリリースし多くの楽曲を出しているアーティストは珍しくありませんし、ファンであればそれらの楽曲すべてを持ち出す人も多いでしょう。数百という曲が一覧に表れるあの仕様は、果たして音楽好きが関わっているのだろうかと疑いたくなりました…。&lt;/p&gt;&#10;&lt;p&gt;結局、私はCarTunesという有料アプリを使うようになったのですが、最近このアプリはあまりメンテがされていないのか、挙動不審になることが多くありました。そこで、Apple Musicが始まったこともあり、久々に標準のミュージックアプリを使ってみると、&lt;strong&gt;アーティスト毎のアルバム一覧表示機能が復活&lt;/strong&gt;しており、そこは一つ安心しました。さすがに、物言いがついたのでしょうか。しかしそのUIは、相変わらずあまり良いものではなく。&lt;/p&gt;&#10;&lt;p&gt;よほど使ってほしいのだなと、Applenoの強烈な意志をひしひし感じます。Apple Musicと、ソーシャル機能。画面下のメニューバー5項目のうち、私が使うのはMy Music一つだけです。私のために何か用意してくれなくて結構です。新しい情報はいりません。ネットラジオが聞きたいわけではないです。共有しません。つながりません。ステーションは開始しません。インターネットに繋がっていない状態で開いたとき、わざわざ大画面で「インターネットに繋がっていない」といの一番に教えてくれなくても大丈夫です。ただiPhoneに入れた音楽を聴きたいだけで、ネットワークは必要ありません。For You、私のためということならば、再生中の曲の欄を広げてもらえないものだろうか。タッチ、しづらいので……。&lt;/p&gt;&#10;&lt;p&gt;オンラインとオフラインの垣根をなくそうとしている、のか。それはたしかに一つの未来かもしれません。もはや私が古いか。仕方ない。それにしても、ちょっとばかり主張が過ぎやしないかと思います。&lt;/p&gt;&#10;&lt;p&gt;Apple MusicのUIも正直見づらいと言わざるを得ないものですが、その点についてはAppleも自覚的なようで、「&lt;a class="link" href="http://www.macworld.com/article/2953973/ios-apps/apple-music-in-ios-9-gets-a-much-needed-redesign.html" target="_blank" rel="noopener"&#10; &gt;Apple Music in iOS 9 gets a much-needed redesign | Macworld&lt;/a&gt;」によれば、iOS 9でだいぶ改善されるようです。まぁ、始めたばかりですから、色々模索しているところなのでしょう。しかし記事中の「&lt;strong&gt;menus on menus on menus&lt;/strong&gt;」とはよくいったものだと思います。せっかく頑張って取り入れた機能、使って欲しいと思うのはわかりますし、そこから収益を出していくつもりなのでしょうが、いやはや。&lt;/p&gt;&#10;&lt;h2 id="せめてシンプルに"&gt;せめてシンプルに&#10;&lt;/h2&gt;&lt;p&gt;大枠の流れについては、もはや仕方ありません。そういう時代なのでしょう。ただ、せめて&lt;strong&gt;シンプルになることを望みます&lt;/strong&gt;。必要最小限の目的の情報が、見やすく、大きく、表示されれば、それでよいのですが。&lt;/p&gt;</description></item><item><title>何をもって単機能というのか、一つとはなにか、ポメラとノートパソコンの場合</title><link>https://hack-le.com/45308888-2/</link><pubDate>Mon, 07 Sep 2015 15:03:22 +0900</pubDate><guid>https://hack-le.com/45308888-2/</guid><description>&lt;p&gt;あらゆる局面があることを総合的に考慮したうえで、もっとも文書の作成に適したデジタルデバイスはなんだろう。こうしたブログを書いたり、昔からよく趣味でちょっとした書物をしたりしていました。一時期は日記をPCでつけていたこともありました。そんな私にとって、文書の作成方法は大きな感心事です。&lt;/p&gt;&#10;&lt;h2 id="文書の作成に最も適したハードウェアはなにか"&gt;文書の作成に最も適したハードウェアはなにか&#10;&lt;/h2&gt;&lt;p&gt;私が思うに、&lt;strong&gt;もっとも最適なものは、なんだかんだでノートパソコン&lt;/strong&gt;なのだと思います。ノートパソコン以外に何があるのかと思う人もいそうですが、ポメラというテキストエディットに特化したモバイル端末があります。ほしい人にとってはたいへん魅力的な製品で、私も最上位機種であるDM１００を購入しました。約２万円、安いノートPCなら買えてしまいそうな価格、決して安い買い物とは言えませんが、私にはそれだけの価値があるように思えました。しかし、しばらく使ってみたものの、しばらくすると結局使わなくなったのです（「&lt;a class="link" href="//hack-le.com/38041361-2/" &gt;ポメラDM100を使わなくなった理由 : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h2 id="求められるもの"&gt;求められるもの&#10;&lt;/h2&gt;&lt;p&gt;文書の作成に求められるものといえば、まず文字が打ちやすいこと、すなわち&lt;strong&gt;物理的なキーボード&lt;/strong&gt;があることが第一でしょう。そのうえで、&lt;strong&gt;賢い文字入力ソフト&lt;/strong&gt;が必要です。&lt;strong&gt;キーバインドが適切に変更できる&lt;/strong&gt;ことも重要でしょう。そして、&lt;strong&gt;文字列の置換、検索といった基本的な編集機能をもったテキストエディタ&lt;/strong&gt;。また、テキストファイルをいじるのですから、&lt;strong&gt;勝手の良いファイラ&lt;/strong&gt;も必要です。テキストファイルには&lt;strong&gt;文字コード、改行コードがありますから、それもコントロールできなくてはなりません&lt;/strong&gt;。さらに、いまどき一つの端末で作業が完結することもありませんから、&lt;strong&gt;ネットワークを通じてファイルを同期できないと不便&lt;/strong&gt;です。そしてそして、文字のうちやすさと同じくらい大事なことが、「&lt;strong&gt;思ったときにどこでも使えること&lt;/strong&gt;」。そう考えていくと、&lt;strong&gt;結局ノートパソコンが素晴らしい&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="一つとはなんだろうか"&gt;一つとはなんだろうか&#10;&lt;/h2&gt;&lt;p&gt;ポメラの良い所は、なんといっても専用機で、それしかできない、というところにあります。Kindleなどの電子書籍リーダーを使っていても思うのですが、&lt;strong&gt;単機能というのは短所であると同時に長所&lt;/strong&gt;でもある。それはすなわち特徴です。しかしながら、これは常々私が難しいと考えていることなのですが、&lt;strong&gt;何をもって「一つ」なのかは明確ではなく、しかも人によって、かつ日々刻々と変わりうる&lt;/strong&gt;。そして、&lt;strong&gt;一つの捉え方こそ、その人の性格であり、能力であり、考え方であり、センスである&lt;/strong&gt;と私は思います。端的に言うと、&lt;strong&gt;ポメラの「一つ」は私の考える「一つ」ではなかったということです&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;私が文書作成において考える一つとは、「求められるもの」節に前述したとおりです。ポメラは明らかにそれを満たしていません。物理キーボードを持っていること、基本的な編集機能があること、どこでも使えること、を満たしているのみです。ネットワーク機能は一応Bluetoothが搭載されており、それを利用することでそれらしいこともできなくはないのですが、あまりに貧弱です。ファイラはそれなりに及第点と言えるかもしれませんが…。&lt;/p&gt;&#10;&lt;p&gt;私の求める「一つ」は、たしかに大きすぎるのかもしれません。特にネットワーク機能は、文書の作成の本質からは外れているように思えます。しかし、&lt;strong&gt;作成した文書は管理しなければならない&lt;/strong&gt;。そして、もはやSDカードを抜き差ししたり、他のデバイスと手動で同期を取って頑張る時代ではない。デバイスの数も2台3台どころか、5台10台必要であることもざら。&lt;strong&gt;文書を作成し、管理する、これは案外広範な技術を必要とする&lt;/strong&gt;ことです。&lt;/p&gt;&#10;&lt;p&gt;今でも、ポメラを必要十分と考える人はいます。愛好家の多いガジェットです。そういう人たちにとって、ポメラの提示した一つはまさに一つなのでしょう。ですが、不十分と考える人もいて、それは別に単機能の端末に汎用機の性能を求めているのではなく、単に &lt;strong&gt;「一つ」の考え方に相違がある&lt;/strong&gt;からです。私のように考える人にとって、文書の作成に過不足ない能力をもったマシンとは、結局ノートパソコンということになります。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;「一つ」とは案外明確ではない&lt;/li&gt;&#10;&lt;li&gt;ポメラの「一つ」は私の「一つ」ではなかった&lt;/li&gt;&#10;&lt;li&gt;ノートパソコンは素晴らしい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ところで、タブレットにキーボードを取り付けたら良いのでは、と思う向きもあるでしょうし、私も試したことがあります。しかし、入力精度、キーボードと画面をいったりきたりすることがあること、キーボードの重さが気になること、AndroidはよいがiOSの場合見た目にはツリー構造を廃しているためファイル管理に難があること、などが気になって、定着しませんでした。そもそも、&lt;strong&gt;キーボードを廃したところにタブレットの肝があるので、そこに改めてタブレットを取り付けるのは、どうにも筋が悪いように思えてしまいます&lt;/strong&gt;…。&lt;/p&gt;</description></item><item><title>MacのバックアップにrsyncからTimeMachineに全面切り替えした話</title><link>https://hack-le.com/45283123-2/</link><pubDate>Sat, 05 Sep 2015 13:59:34 +0900</pubDate><guid>https://hack-le.com/45283123-2/</guid><description>&lt;p&gt;2016/07/18 追記：本記事は、rsyncでデータのバックアップを取っていたのをやめて、TimeMachineによるバックアップのみにした時の記事です。しかし、現在は色々あって、内蔵ハードディスクの数百GBはTimeMachineでバックアップをしていますが、その他のデータはNASに保管+rsyncでバックアップ、という形式に落ち着いています。今は、やはりrsyncによるバックアップが一番わかりやすいのではないか、と考えています。TimeMachineは、トラブルがあるとややこしい。が、当時の考えとして記事も残しておきます。&lt;/p&gt;&#10;&lt;h2 id="色々なバックアップの方法"&gt;色々なバックアップの方法&#10;&lt;/h2&gt;&lt;p&gt;Macの良い所に、TimeMachineという非常に簡便にして強力なバックアップツールがついていることがあげられます。私はシステムのバックアップにはこのTimeMachineを利用していましたが、大容量の（約3TB）のデータについては、&lt;strong&gt;rsync&lt;/strong&gt;コマンドを定期実行して行っていました。rsyncコマンドはLinuxでも使えるUnix由来のコマンドで、ファイル単位での完全な同期を簡単に実現してくれる便利なソフトです。SSH経由でリモートマシンとの同期ができるのが素晴らしい。しかし、最近ついにrsyncによるバックアップをやめて、TimeMachineによるバックアップに全面切り替えしました。&lt;/p&gt;&#10;&lt;h2 id="rsyncを使っていた理由"&gt;rsyncを使っていた理由&#10;&lt;/h2&gt;&lt;p&gt;TimeMachineがあるのに、何故わざわざrsyncなぞ使っていたのか、というと、Macを使い始めた時、&lt;strong&gt;TimeMachineは何やら得たいがしれない感じがして、バックアップという命綱を全面的に預けるのが恐ろしかった&lt;/strong&gt;というのがまずあったと思います。それに、&lt;strong&gt;rsyncは単純にファイル単位でディレクトリ構造をまるごと同期しますから、見た目にもたいへんにわかりよい&lt;/strong&gt;。定期実行については、cronを利用すればそれで済む話。Linuxの知識がそのまま使えるので、特に勉強することもなく、私にとってバックアップツールとしてはrsyncのほうが馴染み深くまた信用できたのですね。また、昔はLinuxのファイルサーバーをたてていたので、&lt;strong&gt;サーバーとのやりとりにおいてもrsyncのほうが都合がよかった&lt;/strong&gt;という面もあります。なので、システム面のバックアップのみTimeMachineを利用して、データについてはrysncでバックアップする、という習慣が身についたのでしょう。&lt;/p&gt;&#10;&lt;h2 id="timemachineに全面的に切り替えた理由"&gt;TimeMachineに全面的に切り替えた理由&#10;&lt;/h2&gt;&lt;p&gt;Macを使い始めて数年たち、その間にTimeMachineを利用した移行を何度も行いました。それがあまりに容易く、かつ目立った問題なくできたことは私にとって大きな驚きでした。マシンの新調は素敵なことですが、それに伴うシステムの移行は億劫な作業です。&lt;strong&gt;移行作業がほとんどストレスレスにできたことはたいへん有難く、またTimeMachineという機能を私に信頼させるに足る体験&lt;/strong&gt;でした。&lt;/p&gt;&#10;&lt;p&gt;また、&lt;strong&gt;TimeMachineは差分バックアップ&lt;/strong&gt;ですから、誤って消去してしまったファイルを復活させることができたこともあります。rsyncではこうもいきません。実際、&lt;strong&gt;ファイルの損壊・損失は、ハードの故障よりヒューマンエラーのほうが原因としては多い&lt;/strong&gt;でしょう。&lt;strong&gt;rdiff-backup&lt;/strong&gt;というソフトもありますが、こちらは操作方法がやや難しいところもあり、とはいえ学習するほど頻繁に復帰という作業は行うものでもないので、&lt;strong&gt;一般ユーザーがMacで差分バックアップを取ろうと思えば、やはりTimeMachineが一番良いということだろう&lt;/strong&gt;と思います。&lt;/p&gt;&#10;&lt;p&gt;Linuxのサーバーもたてなくなりました。Mac miniに外付けハードディスクを接続して、実作業とサーバー作業すべてを集約させたらいいなと思うようになったからです。&lt;strong&gt;OSXはUNIXなので、Linuxサーバーでやっていたこともけっこうできてしまいます&lt;/strong&gt;。バックアップに伴うリモートマシンとのやりとりがなくなったので、rsyncの必要もなくなりました。Mac miniは消費電力も小さいので、オサイフにも優しい（「&lt;a class="link" href="//hack-le.com/44753647-2/" &gt;Mac mini の電気代が安い : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;まとめると、&lt;strong&gt;数年の使い勝手からTimeMachine自体への信頼ができたのと、私がLinuxに求めていた機能がOSXでも実現できたことから、外部のLinuxサーバーとのやりとりもなくなり、必要なものをOSXに集約できたのでTimeMachineへの切り替えを決心した&lt;/strong&gt;、といったところです。TimeMachineはたいへん良い機能であると、数年がかりで信じるに至りました、という話でした。&lt;/p&gt;</description></item><item><title>Raspberry Pi で時刻をスタンドアロンでGPSと同期するなら、RTCモジュールとセットが良い</title><link>https://hack-le.com/45307455-2/</link><pubDate>Fri, 04 Sep 2015 10:24:39 +0900</pubDate><guid>https://hack-le.com/45307455-2/</guid><description>&lt;p&gt;Raspberry Pi(RPi)はスタンドアロンで使いたい需要も大きいハードウェアでしょう。しかし、バッテリーがないためにハードウェアクロックが存在しません。したがって、&lt;strong&gt;スタンドアロンで動かした場合、一度電源を落とすと正確な時刻が保持できなくなります&lt;/strong&gt;。具体的には、次回起動時は前回シャットダウン時の時刻となります。&lt;/p&gt;&#10;&lt;h2 id="スタンドアロンでgpsと同期したときの問題"&gt;スタンドアロンでGPSと同期したときの問題&#10;&lt;/h2&gt;&lt;p&gt;しかし、GPSを使っているのであれば、システムクロックをGPSと同期させればそれで問題ないじゃないか、とは至極もっともな話です。実際私もそのように考えていたのですが、どういうわけか、&lt;strong&gt;時刻のずれが大きくなると、GPSと同期を開始しなくなってしまいました&lt;/strong&gt;。インターネットに繋いで、&lt;strong&gt;ネットワーク上に公開されているNTPサーバーと繋げば、即座に同期を開始して、またその後GPSと同期をしてくれるようになる&lt;/strong&gt;のですが、GPSのみだと、どういうわけか同期しない。GPSのデータは受信し続けていることから、恐らくntpの問題だとは思うので、あれこれすればなんとかなる手段はあると思うものの、私の知識ではそれも覚束ない。なお、ntpはバージョン4.2.8p3を使用しています。&lt;/p&gt;&#10;&lt;p&gt;参考までに、私が使用しているGPSはAdafruitのUltimate GPSです（&lt;a class="link" href="http://www.adafruit.com/products/746" target="_blank" rel="noopener"&#10; &gt;Adafruit Ultimate GPS Breakout - 66 channel w/10 Hz updates [Version 3] ID: 746 - $39.95 : Adafruit Industries, Unique &amp;amp; fun DIY electronics and kits&lt;/a&gt;）。これはスイッチサイエンスでも販売しており、スイッチサイエンスのHPからでも（&lt;a class="link" href="https://www.switch-science.com/catalog/1085/" target="_blank" rel="noopener"&#10; &gt;Adafruit Ultimate 66チャンネル10Hz GPSモジュール Version 3 - スイッチサイエンス&lt;/a&gt;）、またAmazonからでも購入することができます。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00YXYGVS4" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="rtcモジュールを用いてハードウェアクロックと同期させると良い"&gt;RTCモジュールを用いてハードウェアクロックと同期させると良い&#10;&lt;/h2&gt;&lt;p&gt;インターネットに繋がっていれば問題ないわけですが、わざわざGPSと同期させているのは、精度の問題のみならずそもそもインターネットに繋がるような環境ではない、というケースもあります。あるいは&lt;strong&gt;電源を落とさなければ問題ない&lt;/strong&gt;とは言えるかもしれません。それはそうでしょう。しかしそれではあまりに不安です。&lt;/p&gt;&#10;&lt;p&gt;そこで使えるのが&lt;strong&gt;RTC（Real-Time Clock)モジュール&lt;/strong&gt;です。これを用いれば、ハードウェアクロックの問題は解決します。起動時に、システムクロックをハードウェアクロックに同期してやれば、スタンドアロンでも正確な時刻を保持することができるので、少なくとも時刻の大きなずれは避けられるはず。実際、導入してみると、通常ならばGPSと同期が始まらないだけ時刻のずれがあっても、&lt;strong&gt;ハードウェアクロックにシステムクロックを同期させた時点で、GPSとの同期を再開&lt;/strong&gt;するようになりました。&lt;strong&gt;RTCとGPSのセットは、スタンドアロンでRPiを使用する際、できるだけ正確な時刻がほしい場合は有用&lt;/strong&gt;と言えそうです。&lt;/p&gt;&#10;&lt;p&gt;RPiでRTCモジュールを使用する方法は、「&lt;a class="link" href="//hack-le.com/45262876-2/" &gt;Raspberry Pi 2 で RTC を使いスタンドアロンで時刻を保持 : 或る阿呆の記&lt;/a&gt;」にまとめました。&lt;/p&gt;&#10;&lt;p&gt;なお、&lt;strong&gt;システムクロックを手動でそれらしい時刻になおしても、GPSとの同期は再開されるのではないかと思ったのですが、実際にやってみるとこれはうまくいきませんでした&lt;/strong&gt;。ハードウェアクロックと同期させる場合と何が違うのかよくわかりませんが…。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;スタンドアロンでRPiを使用すると、バッテリーがないため時刻を保持できない&lt;/li&gt;&#10;&lt;li&gt;ntpでGPSと同期させるようにしても、時刻のずれが大きくなると、GPSと同期しなくなる&lt;/li&gt;&#10;&lt;li&gt;RTCを導入し、ハードウェアクロックにシステムクロックを同期させると、GPSと同期を再開する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;それにしても、ntpの仕組みというのはよくわからないものです。インターネット上のNTPサーバーとはいつでも同期するのに、どうしてGPSとはなかなか同期してくれないのか…今回も、原理的なところが理解できていないばかりに対症療法的になってしまいました。難しい。&lt;/p&gt;</description></item><item><title>Raspberry Pi 2 で RTC を使いスタンドアロンで時刻を保持</title><link>https://hack-le.com/45262876-2/</link><pubDate>Thu, 03 Sep 2015 13:30:49 +0900</pubDate><guid>https://hack-le.com/45262876-2/</guid><description>&lt;p&gt;&lt;strong&gt;Raspberry Pi（以下RPi）はバッテリーがない為、起動時は前回シャットダウン時の時刻になります&lt;/strong&gt;。インターネットに繋がっていれば、ネット上のNTPサーバーと同期して時刻を補正してくれますが、スタンドアロンの場合そうもいきません。RPiは名刺サイズというその大きさと電子工作との相性の良さから、PCを置けないような場所に置いてスタンドアロンで使用したいケースも多いと思いますので、これは困ったことです。&lt;/p&gt;&#10;&lt;p&gt;2015/09/10: エラーに関する追記&#10;2015/11/27: I2Cについて追記&lt;/p&gt;&#10;&lt;h2 id="rtcモジュールの導入"&gt;RTCモジュールの導入&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B012BW0D0G" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;**スタンドアロンで電源を落としても時刻を更新するには、RTCモジュールを導入**します。今回使用したのは**DS1307**を搭載した「[リアルタイムクロック・モジュール - スイッチサイエンス](https://www.switch-science.com/catalog/1726/)」です。Amazonからも購入できます。2,000円ほどしますが、DS1307搭載のものなら同じようにできるかと。&#13;&#10;&lt;p&gt;実際の導入については、Adafruitの「&lt;a class="link" href="https://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/set-rtc-time" target="_blank" rel="noopener"&#10; &gt;Set RTC Time | Adding a Real Time Clock to Raspberry Pi | Adafruit Learning System&lt;/a&gt;」が非常に参考になります。この通りになぞればOKです。他に「&lt;a class="link" href="https://nicegear.co.nz/blog/using-an-i2c-real-time-clock-rtc-with-a-raspberry-pi/" target="_blank" rel="noopener"&#10; &gt;Using an I2C Real Time Clock (RTC) with a Raspberry Pi - nicegear blog&lt;/a&gt;」も、同じことをしていますが完全にコピペでいけるのでこちらのほうが楽かもしれません。これらのページを参考に、まとめたものを以下にメモします。&lt;/p&gt;&#10;&lt;h3 id="i2cの有効化"&gt;I2Cの有効化&#10;&lt;/h3&gt;&lt;p&gt;まず&lt;strong&gt;I2Cを有効化&lt;/strong&gt;します。I2Cの有効化の手順は「&lt;a class="link" href="//hack-le.com/45923317-2/" &gt;Raspberry Pi で I2C を使用する準備 : 或る阿呆の記&lt;/a&gt;」。&lt;/p&gt;&#10;&lt;h3 id="接続と確認"&gt;接続と確認&#10;&lt;/h3&gt;&lt;p&gt;RPiのピン配置を「&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals#Model_A.2B.2C_B.2B_and_B2" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;」で確認し、SDA、SCL、5V、GNDを繋ぎます。繋いだら、i2cdetect コマンドで、0x68 が表示されることを確認します。&lt;/p&gt;&#10;&lt;pre&gt;`$ i2cdetect -y 1&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;なお、-y 1は1chの意で、昔の基板…具体的にはRevision 1の頃のRPiだとここが0になります。&lt;/p&gt;&#10;&lt;h3 id="rtcモジュールの取り込み"&gt;RTCモジュールの取り込み&#10;&lt;/h3&gt;&lt;p&gt;以下のコマンドを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo modprobe rtc-ds1307&#13; $ echo ds1307 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device&#13; $ sudo hwclock&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで時刻が表示されればOKです。echoのところでひょっとするとエラーが出るかもしれませんが、繰り返せば成功するはずです。その場合は、後述する「エラーが発生する場合」を参照してください。なお、古い基板ではi2c-1のところがi2c-0になります。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;初期状態では2000年になってしまっているので、ハードウェアクロックをシステムクロックに合わせます&lt;/strong&gt;。システムクロックは、NTPサーバーで正確な時刻にしておきます。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo hwclock -w&#13; $ sudo hwclock&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;現在の時刻が表示されればOKです。&lt;/p&gt;&#10;&lt;h3 id="起動スクリプトの修正"&gt;起動スクリプトの修正&#10;&lt;/h3&gt;&lt;p&gt;次に、 &lt;strong&gt;/etc/rc.localに以下を追記して、起動時に自動的にシステムクロックをハードウェアクロックに同期&lt;/strong&gt;するようにします。なお、 &lt;strong&gt;/etc/rc.localは、起動時に実行するシェルスクリプト&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;pre&gt;`echo ds1307 0x68 &gt; /sys/class/i2c-adapter/i2c-1/new_device&#13; sudo hwclock -s&#13; exit 0&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;古い基板ではi2c-1がi2c-0に（略）。コマンドラインで追記したい場合は以下のようにすると、コピペで完了できます。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo sed -i 's#^exit 0$#echo ds1307 0x68 &gt; /sys/class/i2c-adapter/i2c-1/new_device#' /etc/rc.local&#13; $ echo 'sudo hwclock -s' | sudo tee -a /etc/rc.local&#13; $ echo exit 0 | sudo tee -a /etc/rc.local&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上でOK。&lt;/p&gt;&#10;&lt;h2 id="hwclockでエラーが発生する場合"&gt;hwclockでエラーが発生する場合&#10;&lt;/h2&gt;&lt;p&gt;ひょっとすると、hwclockを実行したとき、以下の様なエラーが出るかもしれません。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;hwclock: ioctl(RTC_RD_TIME) to /dev/rtc0 to read the time failed: Invalid argument&lt;/li&gt;&#10;&lt;li&gt;hwclock: ioctl(RTC_RD_TIME) to /dev/rtc0 to read the time failed: Input/output error&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;必ず出るわけではなく、&lt;strong&gt;hwclockを繰り返せばいつかは必ず成功するのですが、頻繁に上記のエラーが起きる&lt;/strong&gt;、という症状が私の場合ありました。&lt;strong&gt;RPiの起動時に失敗されては嫌&lt;/strong&gt;ですね。割と有名な問題らしく、調べてみると&lt;strong&gt;どうもntpの問題&lt;/strong&gt;のようで、ntpとfake-hwclockなるものをアンインストールすれば正常に動くようになる、という報告もみました（「&lt;a class="link" href="http://forum.odroid.com/viewtopic.php?f=107&amp;amp;t=6941" target="_blank" rel="noopener"&#10; &gt;ODROID Forum • View topic - RTC does not keep time over ON/OFF cycles&lt;/a&gt;」）。実際、ntpを切ってみると成功率100%で動いたりしたのですが、ntpがなくなっては困ります。…なのですが、&lt;strong&gt;chkconfigでntpをoffにしたりなんだりと色々いじっていると、症状がでなくなってしまいました&lt;/strong&gt;。再現性がなくなってしまい謎なのですが、こういうこともあったということのみメモします。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;2015/09/10、追記&lt;/strong&gt;。下記のようにしてfake-hwclockパッケージの削除することで、本エラーは回避できるかもしれません。まだ未検証ですので、時間を見つけて試してみたいところです…まずはエラーの再現からなのですが。参考…「&lt;a class="link" href="http://hs-it-notes.blogspot.jp/2014/01/raspberry-pi.html" target="_blank" rel="noopener"&#10; &gt;h&amp;rsquo;s IT Notes: Raspberry Piにリアルタイムクロックをインストールする&lt;/a&gt;」&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo apt-get remove fake-hwclock&#13; $ sudo dpkg --purge fake-hwclock&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;Interface 2015年10月号の付録、ラズベリー・パイ便利帳2015に載っていました。apt-getで関連するパッケージを削除して、dpkg &amp;ndash;purgeで設定ファイルを消去していますね。&lt;/p&gt;</description></item><item><title>なんだかんだで純正MagicTrackpad代替としてT651を使っている</title><link>https://hack-le.com/45228614-2/</link><pubDate>Wed, 02 Sep 2015 11:12:47 +0900</pubDate><guid>https://hack-le.com/45228614-2/</guid><description>&lt;p&gt;MagicTrackpadの調子が悪くなって久しいです。ポインタがびょんびょんとアクロバティックに飛び回る現象が、常にではないものの時折くらいの頻度で起きます。買い替えなきゃいけないかなぁと思ったら、&lt;strong&gt;調べてびっくり1万円&lt;/strong&gt;。たしか私が購入したときは6,000円足らずだったと思うのですが、円安の影響はここにもきていました。&lt;/p&gt;&#10;&lt;h2 id="失敗したかなと思った純正品代替としてのt651の購入"&gt;失敗したかなと思った純正品代替としてのT651の購入&#10;&lt;/h2&gt;&lt;p&gt;考えてみれば、円高の頃から1.5倍程度になっているのですから、まぁそうなるかというところです。ガジェット好きとしては、1ドル120円は安すぎるように思えます…。&lt;/p&gt;&#10;&lt;p&gt;為替の話はさておき、私はLogicoolから発売されている、MagicTrackpadの代替となるT651を購入しました。こちらは&lt;strong&gt;純正の半額の5,000円程度で購入することができます&lt;/strong&gt;。しかし、不勉強のため購入の後で知ったのですが、この機種はMacユーザーのほとんどが使っているのではないかとさえ思われる、&lt;strong&gt;便利なタッチジェスチャーの設定ソフトBetterTouchToolが使えません&lt;/strong&gt;。それで、私はたいそうガッカリして、「&lt;a class="link" href="//hack-le.com/45186672-2/" &gt;Mac用トラックパッド T651 購入。BTT使えなかったのですね… : 或る阿呆の記&lt;/a&gt;」のような記事を書きました。逆に言うと、BetterTouchToolを使っていなければ、まぁ純正のものとだいたい同じように使うことが可能だろう、ということです。&lt;/p&gt;&#10;&lt;h2 id="btt無しでも意外と使えている"&gt;BTT無しでも意外と使えている&#10;&lt;/h2&gt;&lt;p&gt;せっかく購入したデバイスですが、お蔵入りとなるかな、と思いきや、けっこう使っています。少なくとも、&lt;strong&gt;購入してから約二週間、今のところは使っています&lt;/strong&gt;。&lt;strong&gt;BTTが使えないのは確かに辛いと思うことは確かにあるのですが、だいたいキーボードショートカットでもまぁよいかなぁと思える程度&lt;/strong&gt;です。これは、自分にとって意外でした。もっとストレスフルに感じるのではないかと思っていました。しかし、現実にはそれなりに便利に使えています。うーん、意外と、なければないでまぁいいと思えるものだったのかな、BetterTouchTool。もちろん、あったほうがいいんですけどね。&lt;/p&gt;&#10;&lt;h2 id="挙動はやはり純正とは違う"&gt;挙動はやはり純正とは違う&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;挙動については、やはり純正と使い比べるとやや違和感&lt;/strong&gt;がありますし、特に&lt;strong&gt;スクロールで初動に入るのがやけに遅くひっかかりを感じる&lt;/strong&gt;というか、なにか重さを感じます。少しだけ動かしたい、という時には不便です。また、&lt;strong&gt;ポインタが時折安定しない&lt;/strong&gt;のは私の環境固有の問題でしょうか…。&lt;/p&gt;&#10;&lt;h2 id="必要なら買ってみてもよいかも"&gt;必要なら買ってみてもよいかも&#10;&lt;/h2&gt;&lt;p&gt;いずれにせよ、とにかく&lt;strong&gt;調子の悪い純正品よりはT651を選んでいる&lt;/strong&gt;のが私の実情です。こういったインタフェースに関わるところは、無意識の間に自分にとって最適な選択肢を選ぼうとするものですから、少なくとも&lt;strong&gt;第一印象よりは私にとってT651が使えるものである、と判断している&lt;/strong&gt;ことは事実でしょう。なにしろ純正品とは&lt;strong&gt;現在5,000円の差額&lt;/strong&gt;がありますか。&lt;strong&gt;MagicTrackpadが高いのでT651の購入を考えている人は、一度検討してみてもよいかもしれません&lt;/strong&gt;。もちろん、&lt;strong&gt;BTT無しじゃ生きていけない、という人はNGです&lt;/strong&gt;が。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00B3PJ91W" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B003XKO2LW" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Mac の Airmail 2 で Google の2段階認証を利用する</title><link>https://hack-le.com/45265392-2/</link><pubDate>Tue, 01 Sep 2015 01:42:50 +0900</pubDate><guid>https://hack-le.com/45265392-2/</guid><description>&lt;h2 id="airmail-2-で-google2段階認証を利用するには"&gt;Airmail 2 で Google2段階認証を利用するには&#10;&lt;/h2&gt;&lt;p&gt;Googleの2段階認証(2-step verification)は、セキュリティの観点から是非とも設定しておくべきものではありますが、アプリ側にも対応が求められるので厄介なところでもあります。Mac のメールクライアントアプリ、Airmail 2でGoogleの2段階認証を利用する手順を記述します。参考：「&lt;a class="link" href="http://support.airmailapp.com/post/95587657708/gmail-2-step-verification" target="_blank" rel="noopener"&#10; &gt;Airmail — Gmail 2-step Verification&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://accounts.google.com/" target="_blank" rel="noopener"&#10; &gt;http://accounts.google.com/&lt;/a&gt; にて、ログインしてGoogleのアカウント管理の画面に行く&lt;/li&gt;&#10;&lt;li&gt;ログインとセキュリティ&lt;/li&gt;&#10;&lt;li&gt;ログインとパスワードの「アプリパスワード」&lt;/li&gt;&#10;&lt;li&gt;端末を選択から「その他（名前を入力）」&lt;/li&gt;&#10;&lt;li&gt;たとえば　Mac の Airmail 2　と入力し（わかればよい）、生成&lt;/li&gt;&#10;&lt;li&gt;アプリパスワードが表示されるので、コピーする（一度しか表示されません）&lt;/li&gt;&#10;&lt;li&gt;Airmail 2 を開き、「設定」→「アカウント」からGmailアカウントを選択し、パスワードをコピーしたパスワードに置き換える&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以上で完了です。&lt;/p&gt;</description></item><item><title>Ubuntu 15.04 で2TB超え(3TB)のHDをマウントする(CUI)</title><link>https://hack-le.com/45232735-2/</link><pubDate>Mon, 31 Aug 2015 09:52:02 +0900</pubDate><guid>https://hack-le.com/45232735-2/</guid><description>&lt;p&gt;久しぶりにUbuntuを使うと、設定ファイルの書き方など変わっているところもあり、多少戸惑いました。本記事では、Ubuntu 15.04上で、CUI、すなわちコマンドラインにおいて、従来のMBRでは扱えない2TB以上のハードディスクをマウントする手順を書きます。他のディストリビューションでも同様ですが。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;h3 id="ハードディスクを認識しているか確認"&gt;ハードディスクを認識しているか確認&#10;&lt;/h3&gt;&lt;p&gt;まず、ハードディスクが認識され、デバイスファイルが作成されているかを確認します。&lt;/p&gt;&#10;&lt;pre&gt;`$ df&#13; $ ls /dev/sd*&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;df で表示されていない、sdaとかsdbとかそんなのがlsで表示されれば、それが当該のハードディスクと思われます。以下では仮に sda を対象として記述していきます。&lt;/p&gt;&#10;&lt;h3 id="パーティションの作成"&gt;パーティションの作成&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;パーティションの作成には parted コマンドを用います&lt;/strong&gt;。よく使われるfdiskは、GPTに対応していないので使えません。2TBを超えるハードディスクの取り扱いには、GPTである必要があります（参考：「&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E5%AE%B9%E9%87%8F%E3%81%AE%E5%A3%81#2TiB.28.E7.B4.842.2TB.29.E3.81.AE.E5.A3.81" target="_blank" rel="noopener"&#10; &gt;容量の壁 - Wikipedia&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;partedは対話的なソフトウェアです。helpで実行できるコマンドの一覧が表示されます。ここでは、print、mklabel、mkpart、unit のみ使います。念の為確認ですが、&lt;strong&gt;この作業を行うとハードディスクの中身が消去されます&lt;/strong&gt;。以下、まるごと一つのパーティションにするものとしたときのコマンド。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo parted /dev/sda&#13; &gt; print # 状態の確認&#13; &gt; mklabel gpt # この時点でハードディスクの中身が消去されます、注意&#13; &gt; unit GB # 単位をGBに設定。設定したい容量によって柔軟に&#13; &gt; mkpart&#13; &gt; (パーティションの種類) [] 空エンターでOK&#13; &gt; (ファイルシステムの種類) ext4 (デフォルトはext2。それでもOKです)&#13; &gt; (開始位置) 0 # 今回はまるごと使うので。必要に応じて臨機応変に&#13; &gt; (終了位置) 3001 # 同上&#13; &gt; print # 思った通りに作成されているか確認&#13; &gt; quit # よければ終了&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;&lt;strong&gt;パーティションの作り方を間違えた場合、print で番号を確認し、 rm 番号 と入力することでパーティションを削除できます&lt;/strong&gt;。慌てずに。&lt;/p&gt;&#10;&lt;h3 id="ファイルシステムの作成"&gt;ファイルシステムの作成&#10;&lt;/h3&gt;&lt;p&gt;パーティションを作成したら、設定したとおりのファイルシステムを作成します。今回はext4なので、以下の様なコマンドになります。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo mkfs -t ext4 /dev/sda1&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;-t ext4 がない場合、ext2 で作成されます。&lt;/p&gt;&#10;&lt;h3 id="etcfstab-の設定とマウント"&gt;/etc/fstab の設定とマウント&#10;&lt;/h3&gt;&lt;p&gt;ファイルシステムまで作ったら、いよいよマウントします。まずマウントする場所を決めますが、今回は /mnt/data ディレクトリ を作成し、そこにマウントすることにします。なお、/mnt/dataの権限はchownで通常使用するユーザー・グループにしたほうがよいでしょう。&lt;/p&gt;&#10;&lt;p&gt;一度だけマウントするのであれば、 mount コマンドを使ってもよいのですが、毎回起動するたびにコマンドを入力するというのは現実的ではありませんから、&lt;strong&gt;自動でマウントされるように、設定ファイル/etc/fstab を編集&lt;/strong&gt;します。編集する前に、まずマウント元を指定するためハードディスクのUUIDを調べます。以前はマウント元については/dev/sda1でよかったのですが、&lt;strong&gt;最近のUbuntuはUUIDで設定するのがデフォ&lt;/strong&gt;のようです。UUIDは一意に与えられるので、こちらのほうが確実なのは確かです。&lt;/p&gt;&#10;&lt;p&gt;UUIDの調べ方については、「&lt;a class="link" href="http://takuya-1st.hatenablog.jp/entry/20110311/1299821823" target="_blank" rel="noopener"&#10; &gt;Linux(ubuntu)ディスクのUUIDを調べてマウントする方法 - それマグで！&lt;/a&gt;」を参考にさせていただきました。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo blkid /dev/sda1&#13; -&gt; /dev/sda: UUID="hogehoge" TYPE="ext4"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;のように表示されるので、hogehogeの部分をコピーしておきます。&lt;/p&gt;&#10;&lt;p&gt;次に、/etc/fstab を編集します。viなりemacsなりnanoなり、好きなテキストエディタで以下の一行を追加。&lt;/p&gt;&#10;&lt;pre&gt;`UUID=hogehoge /mnt/data ext4 defaults 0 0&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;空白部分はタブに置き換えてください。意味は左から以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;UUID=hogehoge のデバイスを&lt;/li&gt;&#10;&lt;li&gt;/mnt/dataにマウント&lt;/li&gt;&#10;&lt;li&gt;ファイルシステムはext4&lt;/li&gt;&#10;&lt;li&gt;マウントオプション(自動でマウントするのかとか、読み書きOKかとか、マウント権限はとか、そういう設定)はデフォルト&lt;/li&gt;&#10;&lt;li&gt;最初の0→dump によるバックアップはしない&lt;/li&gt;&#10;&lt;li&gt;次の0→起動時にファイルシステムのエラーチェックはしない(1から優先的にチェックするが、0は例外的にチェックしないの意味)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ここまで終わったら、再起動でもよいですが、以下のコマンドでマウント完了。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo mount -a&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;エラーが出たら、/etc/fstabが多分間違えています。df でマウントされていることを確認し、終了です。&lt;/p&gt;&#10;&lt;pre&gt;`$ df -h&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;-h をつけているのは、容量表示を見やすくするためです。お疲れ様でした。&lt;/p&gt;</description></item><item><title>サイレントギターにBluetoothのトランスミッタをつけて無線化はやはり失敗に終わる</title><link>https://hack-le.com/45240255-2/</link><pubDate>Sat, 29 Aug 2015 12:14:57 +0900</pubDate><guid>https://hack-le.com/45240255-2/</guid><description>&lt;h2 id="日本の住宅事情が生んだサイレントギター"&gt;日本の住宅事情が生んだサイレントギター&#10;&lt;/h2&gt;&lt;p&gt;サイレントギターは、音の鳴らない模擬的なアコースティックギターです。ギターのボディがただのプラスチックの枠になっていて、初めて見た時はギョッとしました。そんな構造ですから当然音はほとんど鳴らないのですが、アンプを内蔵しているので、そのままヘッドホンに繋いで練習することができます。これなら住宅地でも気兼ねなく練習することができるというもの。まさに日本の住宅事情が生んだ逸品…。&lt;/p&gt;&#10;&lt;h2 id="bluetoothトランスミッタで無線化を試みる"&gt;Bluetoothトランスミッタで無線化を試みる&#10;&lt;/h2&gt;&lt;p&gt;しかし、ヘッドホンで練習していると、どうしてもコードが邪魔臭い。何を贅沢なという話ではありますが、&lt;strong&gt;Bluetoothトランスミッタを取り付けて、Bluetooth対応のヘッドホンで受信すれば、無線化を実現できるのではないか&lt;/strong&gt;、と考え、やってみました。&lt;/p&gt;&#10;&lt;p&gt;結論から言うと、ダメでした。&lt;strong&gt;遅延が酷すぎて、とても使えたものではありません&lt;/strong&gt;。ジャラーンと弾いてから、ワンテンポ遅れて音が届きます。Bluetoothの規格は2.1と古いものですが、これが4.0になったところで変わりますまい。まぁ、正直なところあまり期待もしていませんでしたが、ここまで遅れるとは。&lt;/p&gt;&#10;&lt;p&gt;せっかく買ったけれど、使い道がないな、Bluetoothトランスミッタ。普通に、音楽プレーヤーに繋げて聴く分には問題ないのですけれど、iPod Classicでもなければ、普通にBluetooth対応していますしね。どうしたものかな。Raspberry Piにでも繋げてみたら、音を飛ばせて楽しいことができるかもしれない。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B004291S24" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&#13;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B001IDYG0S" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;</description></item><item><title>ガラポンTVで色々ハマっている…タコ足配線の罠、Androidアプリのパスワード文字数</title><link>https://hack-le.com/45213926-2/</link><pubDate>Thu, 27 Aug 2015 21:36:29 +0900</pubDate><guid>https://hack-le.com/45213926-2/</guid><description>&lt;p&gt;ガラポンTVを購入しました。&lt;strong&gt;ガラポンTVとは、ワンセグで同時に8ch受信しすべて録画したうえで、後からPCやスマホから視聴することができる製品とサービス&lt;/strong&gt;です。検索をかけることもできるので、&lt;strong&gt;TVのメリットとネットのメリットをうまいこと掛けあわせたもの&lt;/strong&gt;と言えます。元々テレビは見ない方なのですが、最近実家で暮らしているので、家にテレビがあり、せっかくだから気になっていたガラポンTVを使ってみようか、という気になったのです。&lt;/p&gt;&#10;&lt;h2 id="割と苦労している"&gt;割と苦労している&#10;&lt;/h2&gt;&lt;p&gt;色々設定しているのですが、なかなかどうして時間泥棒されています。録画された番組が面白くて…ならよいのですが、今のところ楽しむ以前のところで詰まっています。&lt;/p&gt;&#10;&lt;h3 id="タコ足配線に注意"&gt;タコ足配線に注意&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;最初のセットアップの時点で、機器が不安定&lt;/strong&gt;でなかなかうまくいきませんでした。ガラポンTVは自前でWebサーバーを立ち上げ、ブラウザからアクセスしてる操作するのですが、それがすぐに落ちるし、チャンネルスキャンもままならず、なんとかスキャンできたかなと思ったらまたサーバーが落ちて、アクセスできなくなって、再起動したら録画が止まっていて、そもそも録画できてるチャンネル数が2-5とやけに少ない、と、うーん、うーん、という感じ。スマホアプリからアクセスすれば即停止。何もできない、というわけではないのが嫌らしい。&lt;/p&gt;&#10;&lt;p&gt;いったい何がおかしいんだろう、ネットワークだろうか、ハードディスクだろうか、初期不良でもあるまいに、とあれこれ調べていたのですが、&lt;strong&gt;結論としては、恐らくタコ足配線が原因で、壁のコンセントから電源を取ってやれば、すんなりといきました&lt;/strong&gt;。よく見るとヘルプページにもそういう旨の記述があります。電流不足だったのでしょうか。そんなに食うのかな。&lt;/p&gt;&#10;&lt;h3 id="androidアプリだけパスワード文字制限24文字"&gt;Androidアプリだけパスワード文字制限24文字&#10;&lt;/h3&gt;&lt;p&gt;私はパスワードマネージャを使用しているので、パスワードについてはたいていそのサービスで使える最大の文字数あるいは32文字くらいの長めのものを生成します。ガラポンTVでは特に最大文字数は示されておらず、かつ31文字で設定したところそれで通ったので、OKだと思っていました。実際、それでPCやiPadからはログインできたのです、が、Androidアプリではダメでした。原因を調べていると、どうも&lt;strong&gt;Androidアプリではパスワードは24文字までしか打てない&lt;/strong&gt;らしい。（さらに、別件ですが、Androidでは1Passwordでパスワードを管理していますが、ここからパスワードやユーザー名をコピー&amp;amp;ペーストすると、どういうわけか末尾に半角スペースがついていたことも私を当惑させました。これはガラポンTVではなく1Passwordの問題ですが、以前はこんなことなかったと思うのですけれど、はて…）&lt;/p&gt;&#10;&lt;h3 id="宅外視聴のネットワーク設定"&gt;宅外視聴のネットワーク設定&#10;&lt;/h3&gt;&lt;p&gt;ネットワークについては、ガラポンTVというよりルータの話なのですが、一応躓いたところをつらつらと。&lt;/p&gt;&#10;&lt;p&gt;ガラポンTVには宅外視聴のルータ設定を自動でしてくれるという便利な機能があるのですけれど、私の環境では使えませんでした。&lt;strong&gt;自動設定を行うには、ルータがUPnPに対応していることが必要&lt;/strong&gt;です。で、私の使っているルータがNECのWR8300Nなのですが、取説を見るとWindowsのみ対応とありました。ガラポンTVのOSが何かは知りませんが、まぁWindowsではありますまい。&lt;/p&gt;&#10;&lt;p&gt;仕方がないので手動設定をしようと思ったのですが、どうもポートの設定で、50080 -&amp;gt; 80、51935 -&amp;gt; 1935 のように、ポートフォワーディングが必要な模様。この機能はWR8300Nにもあるはずなのですが、なんだか見当たらなくて、仕方ないので便宜的にポート番号を変換しないただのポート転送で対応することにしました。しかし貴重な80番をこれで使われてしまっては悲しいので、これについては後日ちゃんと対応しようと思います。機能一覧にはあるのだから、探せばちゃんとあるはず…（「&lt;a class="link" href="http://www.aterm.jp/function/guide13/model/wr8300n/n/guide/list/list_f.html" target="_blank" rel="noopener"&#10; &gt;機能一覧&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h3 id="不安定そして不安定"&gt;不安定、そして不安定&#10;&lt;/h3&gt;&lt;p&gt;なんだかんだと、仕事帰りの二日を潰して二日間、なんとか録画できるようにはなって、これでようやく楽しめる、と思ったのですが、いざ視聴しようと宅外よりAndroidアプリでアクセスすると繋がらず、仕方なしにPCでアクセスすると、ログインはできたのですが、即落ちました。どうもサーバーは死んでいるようですが、しかし帰宅して確かめると録画はされており、機器が死んだというわけではない模様。サーバーにもアクセスできたので、一時的な不調に陥っただけなのか？わかりません。しかし、最初のセットアップ時にサーバーが落ちまくったこともあり、&lt;strong&gt;Webサーバーの不安定さ&lt;/strong&gt;は大いに印象付けられました。Androidアプリの問題でもあるのだろうか？うーん、まだわかりません。&lt;/p&gt;&#10;&lt;p&gt;どうにも、苦労しそうです。試行錯誤の時間が必要でしょう。&lt;/p&gt;&#10;&lt;h2 id="でも楽しそうな感じはしています"&gt;でも…楽しそうな感じはしています&#10;&lt;/h2&gt;&lt;p&gt;どうしても話題としてはトラブルがあった、ということが書きやすいので、あまりオススメできないような記事になってしまっているのですが、ちょっと楽しそうだな、という気配はしています。試しにいくつかの番組を見ました。まず、&lt;strong&gt;語学の番組を見るのにうってつけ&lt;/strong&gt;だと思いました。忘れがちな英語の学習番組など、毎日確実にとってくれて、しかも4TBのハードディスクならば4ヶ月間保存してくれるのですから、必要にして十分です。それと、「科学」などのキーワードで検索すると、その手の番組がひっかかります。始めて間もないのでほとんどひっかかりませんでしたが、数週間録画すれば、そこそこの番組がひっかかるのではないでしょうか。&lt;strong&gt;検索が使えるのは素晴らしい&lt;/strong&gt;。&lt;strong&gt;その日のニュースを好きな時に見られるのもまたよい&lt;/strong&gt;。だいたいニュース番組というのは、見たいときにはやっていなくて、忙しい時に限って始まるものです。ちょっとしたスキマ時間にニュースが見られるのは良い体験だと思いました。&lt;/p&gt;&#10;&lt;p&gt;製品が売りだされて数年、いまだ荒削りなところも目立ちますが、可能性を感じさせてくれる製品です。&lt;strong&gt;ポート開放など、ホームネットワークの構築について、困らないだけの知識があるのであれば、使ってみてもよいのではないか&lt;/strong&gt;と思います。購入できる場所は限られるようですが、現在Amazonで正規に取り扱っているようなので、Amazonが無難でしょう（サポートを受けられるためには、販売店名がガラポン株式会社であることを確実に確認）。ハードディスクの内蔵型と外付け型がありますが、値段と容量から断然外付け型がオススメです。手間も別にかかりません。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00M9UQEUO" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00QGA8CJE" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>iMac も欲しい</title><link>https://hack-le.com/45187529-2/</link><pubDate>Wed, 26 Aug 2015 10:09:10 +0900</pubDate><guid>https://hack-le.com/45187529-2/</guid><description>&lt;p&gt;(2023-10-28 追記) なんとなく懐かしく読み返しましたが、結局ついぞiMacを一度もポチることがないまま今に至りますし、多分人生で一度もポチることはないのではないかと思われます。ディスプレイっていろんな用途で使いますし、使い回したいので……。&lt;/p&gt;&#10;&lt;p&gt;私が現在メインに使っているデスクトップマシンはMac mini 2012です。たいへんバランスの取れた良いマシンだと思います。今年も新型が出ないかな、と楽しみにしています。しかし2014年はまさかのクアッドコア廃止もあり、不安があることも事実。もしこれからもデュアルコアのものしか出ないようであれば、自分にとっては、&lt;strong&gt;メインのデスクトップマシンとして力不足&lt;/strong&gt;という判断をせざるを得ません。&lt;/p&gt;&#10;&lt;h2 id="imac-という選択肢"&gt;iMac という選択肢&#10;&lt;/h2&gt;&lt;p&gt;Mac miniのユーザーは皆、iMacという選択肢があることを知っています。それでもなおMac miniを選んでいます。特に元々自作マシンなども嗜んでいた（いる）人にとっては、一体型というのはただそれだけで敬遠したいものです。私もまたそうです。&lt;/p&gt;&#10;&lt;p&gt;しかし、時代は変わりつつあります。&lt;strong&gt;2012年のMac miniが、2015年現在、いまだにスペック的には最前線で戦える&lt;/strong&gt;ものであることなど、一昔前には考えられないことでした。私が両親に初給料でプレゼントしたPCは、もう4年以上前のものですが、まだまだ十分に使えます。CPUも毎年新しくはなっていますが、では今現在SandyのCore i7を持っている人が次のSkylakeに買い換えるかとなると、それは相当好きな人しかしないだろうなぁと思います。少なくとも、実用に迫られてということではありますまい。&lt;/p&gt;&#10;&lt;p&gt;一体型はその拡張性のなさ、故障が生じた時の手間、買い替えが液晶も含めた総取っ替えになることなどがネックですが、これだけスペックが停滞してくると、あまり気にもならなくなってきました。そういったことを考えると、&lt;strong&gt;RetinaディスプレイのiMacなど、数年は最新機種にも見劣りせずに使えそう&lt;/strong&gt;に思います。であれば、決して悪くない買い物ではないのか。Retinaディスプレイの評判が上々であることは、各種レビューを見ても明らかなことです。マシンスペックも、Mac miniより良い。そしてMac miniは、そう、サーバー専用機として生まれ変わるのです。Mac miniは、本体のみであれば月の電気代は300円程度のものであることがわかっています。なんと素晴らしい未来だろうか。&lt;/p&gt;&#10;&lt;h2 id="何も買わないという選択肢"&gt;何も買わないという選択肢&#10;&lt;/h2&gt;&lt;p&gt;しかし、私が目をそらし続けている、もっとも現実的な選択肢があります。それは &lt;strong&gt;「何も買わない」という選択肢&lt;/strong&gt;です。上述している通り、2012年のMac miniはいまだに前線で戦える代物であり、特に調子が悪いなどということもありません。では、そのままでも良いじゃないか。いや、まったくその通り過ぎて、本当にその通りで、残念です。たとえ「長く使えるはずだから」とiMacを買っても、きっと私は毎年新機種が出るたびに買い替えの言い訳を探すに違いありません。&lt;strong&gt;マシンの新調はいつだって素敵なことであり、新型マシンへの憧憬は私の少年時代に染み付いた魂の業なのです&lt;/strong&gt;。きっと百まで忘れない。&lt;/p&gt;&#10;&lt;p&gt;それで、結局、どうするのか、自分は。もうちょっと、考える。&lt;/p&gt;</description></item><item><title>Raspberry Pi で温度センサ LM75B を使う</title><link>https://hack-le.com/45197292-2/</link><pubDate>Tue, 25 Aug 2015 09:22:27 +0900</pubDate><guid>https://hack-le.com/45197292-2/</guid><description>&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00ZCINXB8" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;Raspberry Pi(以下RPi)で温度センサ LM75B を使用します。日本ではスイッチサイエンスから、本記事作成時点378円でbreakoutが売られています（「[LM75B温度センサ（I2C接続） - スイッチサイエンス](https://www.switch-science.com/catalog/1813/)」）。スイッチサイエンスはAmazonでも販売しています。Amazonにもあります。&#13;&#10;&lt;h2 id="手軽に使える"&gt;手軽に使える&#10;&lt;/h2&gt;&lt;p&gt;RPiはUSBも備えているので、単純に温度を測りたいだけならば、「&lt;a class="link" href="//hack-le.com/25756352-2/" &gt;USB温度センサーで室温をモニタリングしてみた(on Ubuntu Server 12.04) : 或る阿呆の記&lt;/a&gt;」にあるものも使えます。こちらは送料込みで1,500円程度でしょうか。USBに差して、既にあるソフトウェアを利用するだけなのでたいへんお手軽です。&lt;/p&gt;&#10;&lt;p&gt;しかしこのLM75Bもたいへん気軽に試すことができます。&lt;strong&gt;このセンサのインタフェースはI2Cなのですが、これをRPiでは非常に簡単に利用できる&lt;/strong&gt;からです。また、&lt;strong&gt;温度分解能は0.125度&lt;/strong&gt;で、 &lt;strong&gt;-55度から+125度まで計測&lt;/strong&gt;することができます。データシートによれば、&lt;strong&gt;精度は-25度から+100度で±2度&lt;/strong&gt;と書かれていますが、私の環境だと、&lt;strong&gt;常温であれば他の温度センサともだいたい±0.1か0.2度くらいの差&lt;/strong&gt;でした。普通に使う分には十分だと思います。安いしねぇ。&lt;/p&gt;&#10;&lt;h2 id="raspberry-pi-でi2cを有効化"&gt;Raspberry Pi でI2Cを有効化&#10;&lt;/h2&gt;&lt;p&gt;I2Cの有効化および、必要なソフトウェアのインストールについては、「&lt;a class="link" href="//hack-le.com/45923317-2/" &gt;Raspberry Pi で I2C を使用する準備&lt;/a&gt;」を参照とします。&lt;/p&gt;&#10;&lt;h2 id="接続"&gt;接続&#10;&lt;/h2&gt;&lt;p&gt;センサのSDA、SCL、Vcc、GNDを、RPiの対応するピンと接続します。接続については「&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals#Model_A.2B.2C_B.2B_and_B2" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;」を参照。センサは2.8 - 5 V対応なので、電圧は3.3Vでも5Vでもよいと思いますが、できるだけ電圧が低いほうがよかろうと思い3.3Vに繋ぎました。&lt;/p&gt;&#10;&lt;p&gt;接続したら、以下のコマンドで 0x48 のところに出力があることを確認します。&lt;/p&gt;&#10;&lt;pre&gt;`$ i2cdetect -y 1&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;i2cは複数機器繋げられるので、各機器にアドレスを割り当てます。i2cdetectは、接続されている機器のアドレスを検知するものです（また、-yは対話モードでないこと、1は1chであることを示します。古いRPiの基板だと、0chであるようです）。このセンサはデフォルト設定で0x48なので、0x48に出力があることを確認します。確認できたら、接続はOKです。&lt;/p&gt;&#10;&lt;h2 id="温度が正の時"&gt;温度が正の時&#10;&lt;/h2&gt;&lt;p&gt;準備が整ったら、いよいよ温度を出力します。ここの手順は「&lt;a class="link" href="http://nyaru.blog.shinobi.jp/raspberry%20pi/%E3%83%A9%E3%82%BA%E3%83%99%E3%83%AA%E3%83%BC%E3%83%91%E3%82%A4%E3%81%A7%E6%B8%A9%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5-adt7410-%E3%82%92%E8%A7%A6%E3%81%A3%E3%81%9F" target="_blank" rel="noopener"&#10; &gt;nyaruratoの製作記録 ラズベリーパイで温度センサ(ADT7410)を触った&lt;/a&gt;」を参考にさせていただきました。センサは違いますが、まぁI2Cで温度センサとなればだいたいどれも同じようなものではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;下記コマンドを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ i2cget -y 1 0x48 0x00 w&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;0x48は温度センサのアドレスで、0x00はセンサの中の温度にアクセスするアドレスです。&lt;/p&gt;&#10;&lt;p&gt;0xc019などと表示されますが、まずこれはエンディアンが逆になっているので、なおします。この場合0x19c0になります。エンディアンがわからない人は、ビッグエンディアン、リトルエンディアンで調べてください（投げっぱなし）。また、上位11bitしか使わないので、5bitはシフト演算で右にシフトして捨てます。また、分解能0.125度であることから、ここまでに得られた数値に0.125をかけます。小数の演算でbcを使うので、ない人はまずインストールしてください（小数点の演算は$(( ))やexprではできない）。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo apt-get install bc&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;では、ちょっとゴチャゴチャしますが、ワンライナーで書きます。&lt;/p&gt;&#10;&lt;pre&gt;`$ echo "$(($(i2cget -y 1 0x48 0x00 w | sed -e 's/0x\(..\)\(..\)/0x\2\1/g') &gt;&gt; 5)) * 0.125" | bc`&lt;/pre&gt;&#13;&#10;&lt;p&gt;少し解説すると、まずi2cgetで得られた16進数を、sedでエンディアン変換します。11bitなので、あまりの5bit分は右シフトで捨てます。分解能が0.125度なので、得られた値 * 0.125 という式を、echoでbcに渡して計算。&lt;/p&gt;&#10;&lt;h2 id="温度が負の時"&gt;温度が負の時&#10;&lt;/h2&gt;&lt;p&gt;温度が正の時であれば以上でよいのですが、温度が負の時は2の補数を求める必要があります。0度のとき 000 0000 0000 、そこからは0.125度刻みで、+127度で 011 1111 1000 で+127度と表現されるので、正のときはそのまま計算して問題ないのですが、-0.125度は 111 1111 1111 と表現されます。-55度で 110 0100 1000 です。つまり、&lt;strong&gt;温度が負の時は、いったん2の補数を求めて、その値に0.125をかけたものをマイナスにする、という手順が必要&lt;/strong&gt;になります。&lt;strong&gt;計算的には、1000 0000 0000、つまり2048から値を引いてやればOK&lt;/strong&gt;で、上述した式をいじるなら、マイナス限定ですけれど以下のようには書けます。&lt;/p&gt;&#10;&lt;pre&gt;`$ echo "$((2048 - ($(i2cget -y 1 0x48 0x00 w | sed -e 's/0x\(..\)\(..\)/0x\2\1/g') &gt;&gt; 5))) * -0.125" | bc&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;さすがに若干カオス感が。if文使って真面目に書いたほうがわかりやすくあんりそうですね。その場合、簡単に考えると0.125をかける前の値が1024より大きいかどうかで分岐すればよしです。1024より大きければ、2048から引いて-0.125をかける…または2048を引いて0.125をかける。&lt;/p&gt;&#10;&lt;h2 id="シェルスクリプトのサンプル"&gt;シェルスクリプトのサンプル&#10;&lt;/h2&gt;&lt;p&gt;以上の諸々を考慮して、シェルスクリプトのサンプルをのっけます。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; &#13; set -eu&#13; &#13; # lm75b&#13; chip_addr=0x48&#13; data_addr=0x00&#13; use_bits=11&#13; resolution=0.125&#13; &#13; # little endian&#13; temp_str=$(i2cget -y 1 ${chip_addr} ${data_addr} w | sed -e 's/0x\(..\)\(..\)/0x\2\1/g')&#13; # use upper bits&#13; shift_bits=$((16 - use_bits))&#13; temp_num=$((temp_str &gt;&gt; shift_bits))&#13; &#13; if [ ${temp_num} -ge 1024 ]; then&#13; # two's compliment&#13; temp_num=$((temp_num - 2048))&#13; fi&#13; &#13; echo "${temp_num} * ${resolution}" | bc&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;よければどうぞ。&lt;/p&gt;</description></item><item><title>Mac用トラックパッド T651 購入。BTT使えなかったのですね…</title><link>https://hack-le.com/45186672-2/</link><pubDate>Sun, 23 Aug 2015 14:22:19 +0900</pubDate><guid>https://hack-le.com/45186672-2/</guid><description>&lt;p&gt;追記：購入して二週間後のレビュー&#10;&lt;a class="link" href="//hack-le.com/45228614-2/" &gt;なんだかんだで純正MagicTrackpad代替としてT651を使っている : 或る阿呆の記&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="純正のトラックパッドが高いのでt651を購入したが"&gt;純正のトラックパッドが高いのでT651を購入したが…&#10;&lt;/h2&gt;&lt;p&gt;以前よりトラックパッドの調子が悪いということは書いてきましたが（「&lt;a class="link" href="//hack-le.com/44730562-2/" &gt;最近Magic Trackpadが不調、いつの間にかの値上がりに驚く : 或る阿呆の記&lt;/a&gt;」）、円安の煽りを受けて純正は既に1万円の大台。ちょっと手がでないなぁと思い、Logicoolから出ているT651を購入しました。こちらはほぼ半値の5,000円程度で、安物買いの銭失いになる可能性もあるとは思いつつ、同じものを買うよりは面白いしな、などと考え購入しました。&lt;strong&gt;結論から言うと、BetterTouchToolを愛用している身では失敗だった&lt;/strong&gt;な、と思います。これは私のリサーチ不足でしたが、&lt;strong&gt;T651はBetterTouchToolが使えません&lt;/strong&gt;（参考：「&lt;a class="link" href="http://moznion.hatenablog.com/entry/2015/06/08/003014" target="_blank" rel="noopener"&#10; &gt;Logicool の T651 買った - 職質アンチパターン&lt;/a&gt;」）。逆にいうと、&lt;strong&gt;BetterTouchToolを使っていなければアリ&lt;/strong&gt;かと思います。しかしながら、&lt;strong&gt;操作性には癖があります&lt;/strong&gt;。以下、レビュー。&lt;/p&gt;&#10;&lt;h2 id="操作性は独特だが慣れの範疇"&gt;操作性は独特だが慣れの範疇&#10;&lt;/h2&gt;&lt;p&gt;まず大前提ですが、&lt;strong&gt;Logicoolからドライバをダウンロード&lt;/strong&gt;します（「&lt;a class="link" href="http://support.logicool.co.jp/ja_jp/product/mac-trackpad" target="_blank" rel="noopener"&#10; &gt;充電式トラックパッド - Logicoolサポート&lt;/a&gt;」）。そのままでも接続はできますが、とても使えたものではありません。そうすると、動きがスムーズになるほか、スクロール速度や三本指ドラッグ、四本指スワイプといった基本的な機能が使えるようになります。&lt;/p&gt;&#10;&lt;p&gt;肝心の操作性ですが、&lt;strong&gt;純正と比べるとややひっかかりのようなものを感じます&lt;/strong&gt;。滑らかさに欠けるといいますか。しかしながら、これは&lt;strong&gt;慣れの範疇&lt;/strong&gt;です。恐らく、使っているうちに慣れるものと思います。むしろ、こちらをメインに使っていたら、純正のほうに違和感を感じるようになるかもしれません。ネットでは「純正とほぼ同じ操作感」というレビューも見受けられましたが、少なくとも私にはそう思えず、もし純正のトラックパッドとこのトラックパッドを、日常で両方使うような状況にあれば、それはやや不便に思うところがあるのではないかと感じます。&lt;/p&gt;&#10;&lt;p&gt;物理的な特徴としては、&lt;strong&gt;純正よりも傾斜が緩く、全体的にやや背が高い&lt;/strong&gt;ということが挙げられますが、どちらが好みかというのは好き好きでしょう。私は純正のほうが好きです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;MicroUSBによる充電タイプ&lt;/strong&gt;であることはメリットかもしれません。しかし、純正で数週間に一度エネループを交換するのも私はさほど手間とは思いませんが。まぁ、電池が浮くのはよいかもしれませんね。&lt;/p&gt;&#10;&lt;p&gt;ここまでは良いのですが、私にとって致命的であったのは、&lt;strong&gt;BetterTouchToolが使えない&lt;/strong&gt;ことです。これは完全に私のリサーチ不足。不勉強でした。知っていれば購入しなかったでしょう。&lt;/p&gt;&#10;&lt;p&gt;というわけで、最初に述べたとおり、&lt;strong&gt;BetterTouchToolを使う人にとってはオススメできませんが、使わない人にとっては慣れ次第&lt;/strong&gt;、というのが私の結論です。BetterTouchToolを愛用していて、どうしても今必要なのであれば、高いですがやはり純正を購入するしかないでしょうね。&lt;/p&gt;&#10;&lt;p&gt;このトラックパッドは予備としておいとくとして、感圧対応のMagicTrackpadが出たらそっちを買おうかな…。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00B3PJ91W" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B003XKO2LW" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Mac mini 2015 でクアッドコアが復活したらいいなぁ</title><link>https://hack-le.com/45162067-2/</link><pubDate>Sat, 22 Aug 2015 01:24:57 +0900</pubDate><guid>https://hack-le.com/45162067-2/</guid><description>&lt;p&gt;追記：結局出ませんでしたね…もう2年、いや3年周期、いやディスコン…&#10;さらに追記：2016年も出ない……&lt;/p&gt;&#10;&lt;p&gt;一般的には、Appleの新製品となるとiPhone 6Sを皆さん楽しみにしておられるのでしょうが、私としてはメインに使っているデスクトップの&lt;strong&gt;Mac mini&lt;/strong&gt;にアップデートがあるかが気にかかります。2014年のアップデートは、クアッドコアがなくなり、メモリは直付という残念な仕様となりましたが、果たして2015年はどうなるでしょうか。&lt;/p&gt;&#10;&lt;h2 id="クアッドコアは需要がある"&gt;クアッドコアは需要がある&#10;&lt;/h2&gt;&lt;p&gt;メモリの拡張性については、きっともう期待できないのでしょう。それどころか、ストレージさえも自力での換装は困難となるような仕様になるかもしれません（2014のPCIeも、正直なところそれだったらお求めやすい普通の2.5インチSSDがよかったなぁと個人的には思っています）。しかしながら、CPUについてはどうでしょうか。&lt;/p&gt;&#10;&lt;p&gt;プロセッサについては、Skylakeが採用されるかとか、GPUはどれだけパワーアップするのか、というのが多く関心の的になりがちですが、私としてはまずコア数が気にかかります。もうMac miniにクアッドコアは期待できないのでしょうか？確かにデュアルコアで十分という層は多いでしょう。しかし、クアッドコアを求める層もそれなりに多いはずです。必ずしも皆が一体型のiMacが必要なわけではなく、さりとてMac Proはよほどのパワーユーザー（3Dグラフィックを扱うような）でなければオーバースペックかつ高価過ぎる代物です。&lt;strong&gt;Mac miniは、コア数を必要とする開発者（特に仮想マシンを必要とするような人）にとって最適なマシン&lt;/strong&gt;でした。いっとき、バグで米国のApple Online Storeにて旧型のMac miniが表示されるということがありましたが（「&lt;a class="link" href="http://blog.livedoor.jp/applebrothers/archives/52412133.html" target="_blank" rel="noopener"&#10; &gt;【1/28】単なるバグだった？米国のApple Online Storeに突然現れたMac mini (Late 2012) クアッドコアモデルが消える…。 - Apple Brothers + Mac News&lt;/a&gt;」）、このときも少なからぬユーザーが次期クアッドコアモデルの復活に期待したものです。&lt;/p&gt;&#10;&lt;h2 id="ディスコンになりませんように"&gt;ディスコンになりませんように&#10;&lt;/h2&gt;&lt;p&gt;つらつら要望を書き連ねてきたましたが、Mac miniユーザーにとって本当に心配なのは、ダウングレードされるマシンパワーではなく&lt;strong&gt;Mac miniという存在自体が抹消されるディスコン&lt;/strong&gt;であります。次でMac miniはディスコンになるのでは、という噂は常に絶えません。起きてもおかしくはないだけに恐ろしい。&lt;/p&gt;&#10;&lt;p&gt;Mac miniは確かに、目立たない地味な製品です。&lt;strong&gt;昨年のAppleのプレゼンで新型Mac miniに割かれた時間は20秒程度&lt;/strong&gt;でした。けれど、Mac miniには独特の存在感がありますから、ディスコンはないのではないかと、個人的には思います。あるいは、願っています。&lt;/p&gt;</description></item><item><title>Withings Activité で寝不足を可視化</title><link>https://hack-le.com/45149963-2/</link><pubDate>Wed, 19 Aug 2015 22:10:16 +0900</pubDate><guid>https://hack-le.com/45149963-2/</guid><description>&lt;h2 id="活動量計だけではないwithigns-activité"&gt;活動量計だけではないWithigns Activité&#10;&lt;/h2&gt;&lt;p&gt;WighingsのActivitéはよいスマートウォッチです。一見するとシャレたアナログ盤の腕時計なのに、活動量計の機能を有し、Bluetooth内蔵でスマートフォンと同期するスマートウォッチというのは素敵です。特に活動量計はその性質上常に身につけている必要がありますが、その特性と腕時計は実に相性が良い。どうしてもWithingsのサービスに縛られるという嫌いはありますが、それは他メーカーでも同じことですし、今のところはWithingsのサービスで概ね満足しています。&lt;/p&gt;&#10;&lt;p&gt;思い切って購入してからは、狙い通り優秀な活動量計として活躍していますが、&lt;strong&gt;意外と睡眠計の機能も非常に参考になっています&lt;/strong&gt;。睡眠計の機能は、購入してアプリを使ってから、「そういえば睡眠計の機能もあったっけ」と思い出す程度に重視していなかったのですが、いざ使ってみると、なかなかどうして参考になります。&lt;/p&gt;&#10;&lt;h2 id="睡眠不足を再認識"&gt;睡眠不足を再認識&#10;&lt;/h2&gt;&lt;p&gt;典型的な現代人の御多分にもれず、どうにも私は慢性的な寝不足です。特に現在車通勤が多いので、行き帰りでかくっとなることがあり、たいへん危ない。仕事中も散漫になりがちですし、今日の午前中などは眠くて眠くて仕事が手につかず…それもそのはずというか、アプリで確認してみると下図のような睡眠時間。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/f/1/f103ba36.png" &gt;&lt;img alt="212449_Phone" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/f/1/f103ba36-s.png"&gt;&lt;/a&gt;&#10;これでは眠くても当然といえます。世の中にはあまり眠らなくても平気というショートスリーパーなる人もいるそうですが、羨ましいことです。私自身これまで何度か短眠型への切り替えを試みておりますが、すべて失敗しています。少なくとも、私にとってまとまった睡眠というのは必要であるらしい。また、車通勤で何度かひやっとしている以上、若いのだから頑張れる、などといった精神論を突き通すべきでもなく、やはりちゃんと眠らなくてはいけません。わかっていることではありますが、こうして&lt;strong&gt;数値として定量化された値を見ると、なんとかしなくてはなぁと思えます&lt;/strong&gt;。ちなみに先週はお盆で比較的のんびりできました。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/d/1/d16ea7a3.png" &gt;&lt;img alt="212459_Phone" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/d/1/d16ea7a3-s.png"&gt;&lt;/a&gt;&#10;なお、Withingsの目標睡眠時間は8時間で、8時間眠るとよく寝ましたねと褒められます。なんだか変な感じ。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00V5PSM1S" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&#13;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B010UV1M6O" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;</description></item><item><title>Mac で g++ コンパイル実行時に fatal error: ‘libusb.h’ file not found #include &lt;libusb.h&gt;</title><link>https://hack-le.com/45126492-2/</link><pubDate>Tue, 18 Aug 2015 00:23:58 +0900</pubDate><guid>https://hack-le.com/45126492-2/</guid><description>&lt;p&gt;環境はMacで、OSX 10.10 です。libusb をインストールしているにも関わらず、g++ でコンパイルするとlibusb.hが見つからず fatal error: &amp;rsquo;libusb.h&amp;rsquo; file not found とエラーになりました。libusb はHomebrew でインストールしています。&lt;/p&gt;&#10;&lt;pre&gt;`$ brew list libusb&#13; /usr/local/Cellar/libusb/1.0.19/include/libusb-1.0/libusb.h&#13; /usr/local/Cellar/libusb/1.0.19/lib/libusb-1.0.0.dylib&#13; /usr/local/Cellar/libusb/1.0.19/lib/pkgconfig/libusb-1.0.pc&#13; /usr/local/Cellar/libusb/1.0.19/lib/ (2 other files)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;libusb.h 自体は、上記の通り/usr/local/Cellar/libusb/1.0.19/include/libusb-1.0/libusb.hに存在するので、これはパスの問題です。以下のようにして、パスを指定すると、エラーがなくなりました。&lt;/p&gt;&#10;&lt;pre&gt;`$ g++ sample.cpp -I /usr/local/Cellar/libusb/1.0.19/include/libusb-1.0 -lusb-1.0 -o sample&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;-lusb-1.0 は私のサンプルファイルで必要だったからで、必ずしも必要ではないと思います。&lt;/p&gt;&#10;&lt;p&gt;参考：&lt;a class="link" href="http://stackoverflow.com/questions/20416827/linking-libusb-in-mac-os-x" target="_blank" rel="noopener"&#10; &gt;osx - Linking libusb in Mac OS X - Stack Overflow&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Raspberry Pi で ネットを切った時に ntpq -p で Name or service not known.</title><link>https://hack-le.com/45021829-2/</link><pubDate>Mon, 17 Aug 2015 12:11:30 +0900</pubDate><guid>https://hack-le.com/45021829-2/</guid><description>&lt;h2 id="raspberry-pi-のシステムクロック"&gt;Raspberry Pi のシステムクロック&#10;&lt;/h2&gt;&lt;p&gt;Raspberry Pi はその小型という特性上、センサ等を取り付けた上でスタンドアロンでの使い道を考えている人も多いと思います。バッテリーがないため、スタンドアロンでは電源を落とすと時刻が正確でなくなってしまう問題がありますが、RTCモジュールを導入したり、GPSを取り付けてその信号を使って同期することもできます。GPSを取り付けるのはやや手間ではありますが、長期的に正確な時刻を保持したければそうなるでしょう。&lt;/p&gt;&#10;&lt;h2 id="ネットを切るとntpqが実行できない"&gt;ネットを切るとntpqが実行できない&#10;&lt;/h2&gt;&lt;p&gt;ntpdの元をGPS信号にして、PPSで補正することにより、スタンドアロンでも正確な時刻を保持できます。しかし、そうして&lt;strong&gt;インターネットに繋がらない状態にすると、ntpq -p を実行した時に「Name or service not known」と言われる&lt;/strong&gt;ようになってしまいます。色々調べていると、どうも&lt;strong&gt;名前解決ができないという問題&lt;/strong&gt;のようで、/etc/ntp.conf でlocalhostなどが設定されているから、/etc/hostsで localhost にIPアドレスを割り当ててやると使えるようになる…とかなんとか色々出てきました、が、実際には何をどうやってもダメでした。/etc/ntp.confからとにかく危なそうなものはすべてコメントアウトしてもダメ。結論としては、「&lt;a class="link" href="https://www.raspberrypi.org/forums/viewtopic.php?t=61521&amp;amp;p=457832" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi • View topic - Rpi as NTP server Can&amp;rsquo;t query ntpq -p&lt;/a&gt;」にあるように、「&lt;strong&gt;ntpqはDNSで名前解決しようとするとから、ネットに繋がってないと正常に動かないよ&lt;/strong&gt;」というのが真実なのかなぁ、と思います。まぁ、ntpqが使えないだけで、時刻同期自体は問題なくできているので、この問題については当面仕方ないものと考えます。&lt;/p&gt;</description></item><item><title>Macのメーラー Airmail 2 の使い勝手</title><link>https://hack-le.com/45111005-2/</link><pubDate>Mon, 17 Aug 2015 01:23:26 +0900</pubDate><guid>https://hack-le.com/45111005-2/</guid><description>&lt;p&gt;追記：色々あって標準メールアプリをまた使うようになりました「&lt;a class="link" href="//hack-le.com/46226453-2/" &gt;Airmail 2 から標準のメール.appに帰ってきました&lt;/a&gt;」&lt;/p&gt;&#10;&lt;p&gt;Macを使っている人は、だいたい標準のソフトウェアを使っている人が多いと思います。インターネットブラウザについては、SafariよりChromeのほうがよいという人も多いでしょうが、全体としては、Appleユーザーははじめからついているソフトを使っている人が多いと思いますし、またユーザーもそれで実用に足るところをApple製品のメリットとしてあげるのではないでしょうか。&lt;/p&gt;&#10;&lt;h2 id="あまり標準アプリを使っていない"&gt;あまり標準アプリを使っていない&#10;&lt;/h2&gt;&lt;p&gt;一方で私といえば、あまりMacの標準ソフトは使っていません。代表的なところでは、ターミナルとプレビューくらいでしょうか（あとスティッキーズはたまに使う）。インターネットブラウザはChromeを使っていますし、ファイラはSSHにも対応する二画面ファイラのForkLiftを愛用しています。テキストエディタはCotEditorです。画像の整理にはiPhotoではなくPicasaを使用しています。&lt;strong&gt;標準アプリを使っていないのは、単純に機能不足が理由であることもありますし、クロスプラットフォームを意識した結果であったりもします&lt;/strong&gt;。そしてメーラーは、メール.appではなく、&lt;strong&gt;Airmail 2&lt;/strong&gt; を愛用しています。&lt;/p&gt;&#10;&lt;h2 id="osx用のメーラーairmail-2について"&gt;OSX用のメーラーAirmail 2について&#10;&lt;/h2&gt;&lt;p&gt;当初メーラーは標準のメールを使っていました。しかし、特定のWindowsユーザーのメールおよびその添付ファイルで余りに文字化けがよくありました（この時代でも平気で機種依存文字を使う人は多いものです…そしてそういう人に限って、我こそマジョリティとして自分の正当性を信じて揺るぎない）。他のメーラーではそれなりに対応できているのだろうかと、当時170円で（現在のAirmailは驚くべきことに10ドル…すなわち&lt;strong&gt;1200円&lt;/strong&gt;します)お手軽に試せる値段であったAirmailをインストールして使ってみると、&lt;strong&gt;Airmail では文字化けが劇的に減りました&lt;/strong&gt;。まったくすべてなくなった、ということはないのですが…。&lt;/p&gt;&#10;&lt;p&gt;また、使ってみるとなかなかデザインもシンプルで悪くない。&lt;strong&gt;複数アカウントの利用がしやすく、またボタン一つで未読メッセージのみを表示したり、添付ファイルのみを表示したり、またEvernoteやDropboxとの連携ができたり&lt;/strong&gt;…。アカウント毎にルールを設定して、適用できるのもよい。標準のメールは何故か、アカウント毎の設定ができなかったはず。&lt;/p&gt;&#10;&lt;p&gt;不満点もあります。&lt;strong&gt;APOPに対応していない&lt;/strong&gt;ところと、（APOPを使っていること自体に問題があるといえばそうなのですが、使わざるを得ないのです…）、&lt;strong&gt;日本語の検索がどうにもうまく機能していない&lt;/strong&gt;ことです。特に検索の問題は致命的で、これのために何度か乗り換えを検討していますし、また今後乗り換えることがあるとすれば、この問題が決定打になっているように思います…また、これのために人には勧められません。不思議なことにApp Storeのレビューでは特にそういう指摘がないのですが、ひょっとして私の環境におけるローカルな問題？まさかなぁ…。&lt;/p&gt;&#10;&lt;p&gt;まぁ、元々ハードにメールを使うほうでもないですので、トータルの使い勝手からAirmailを使い続けています。検索の問題のためにオススメはしませんが、割と良いアプリだと思います。&lt;/p&gt;</description></item><item><title>ROMライター PECKER 11 の使い方</title><link>https://hack-le.com/45083710-2/</link><pubDate>Fri, 14 Aug 2015 01:04:38 +0900</pubDate><guid>https://hack-le.com/45083710-2/</guid><description>&lt;p&gt;ROMライター PECKER 11 の使い方メモです。使用方法がわからず途方に暮れていましたが、このような古い機械にも関わらずネットで使用報告があり、たいへん助かりました。「&lt;a class="link" href="http://kanpapa.com/today/2012/04/avalrom-pecker-112732a.html" target="_blank" rel="noopener"&#10; &gt;AVALのROMライター PECKER-11で2732Aを焼いてみました - きょうのかんぱぱ&lt;/a&gt;」にあるとおりなのですが、自分なりに必要なところをまとめました。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;やることは以下。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;ROMの中身の見方&lt;/li&gt;&#10;&lt;li&gt;PECKER 11とPCで通信する&lt;/li&gt;&#10;&lt;li&gt;ROMを焼く&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;また、PCとしてはWindowsないしMacを用います。Linuxは試していませんが、Macのやり方で大丈夫と思います。ただし、PC→PECKER 11にデータを送信するところはWindowsでしか成功していません…。また、関連記事として簡易ROMイレーサーの製作記事を置いておきます→&lt;a class="link" href="//hack-le.com/45077558-2/" &gt;予算2000円でROMイレーサー作成 : 或る阿呆の記&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="romの中身を見る"&gt;ROMの中身を見る&#10;&lt;/h2&gt;&lt;p&gt;ROMのピン数に注意しながら、ROMを差し込みます。たとえば28pinの2732であれば、真ん中のBに取り付けます。&lt;/p&gt;&#10;&lt;p&gt;取り付けたら電源を入れます。操作に入るわけですが、まず基本的な操作体系について。 &lt;strong&gt;[SET] と [-] でセレクトして、[JOB] で決定、[RST] でキャンセル、のような操作になることが多いです。[SET] で決定することも多い&lt;/strong&gt;ですが。[A] [B] [C] [D] をポチポチ押していくと、どのような操作が用意されているかがわかります。&lt;/p&gt;&#10;&lt;h3 id="romの認識"&gt;ROMの認識&#10;&lt;/h3&gt;&lt;p&gt;さて、電源投入後は&lt;strong&gt;ROMの認識&lt;/strong&gt;を行います。[JOB] [SET] [0] でデバイスの自動認識を行ってくれるのですが、これで認識できない場合はマニュアルで認識させる必要があります。以下のように行います。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;[JOB] [SET] [1] [0] -&amp;gt; メーカーの設定&lt;/li&gt;&#10;&lt;li&gt;[JOB] [SET] [1] [1] -&amp;gt; 型番の設定(2732とか)&lt;/li&gt;&#10;&lt;li&gt;[JOB] [SET] [1] [2] -&amp;gt; 容量の設定(4KBとか)&lt;/li&gt;&#10;&lt;li&gt;[JOB] [SET] [1] [3] -&amp;gt; 書き込み方式の設定(多分STANDARDでOK)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="ram-buffer-にコピー"&gt;RAM Buffer にコピー&#10;&lt;/h3&gt;&lt;p&gt;認識が終わったら、[LOAD] [SET] でROMの中身を RAM Bufer にコピーします。次に、[JOB] [0] でRAM Edit。これで中身を読むことができます。[SET] および [-] でアドレスを移動します。&lt;/p&gt;&#10;&lt;h2 id="pecker-11とpcで通信する"&gt;PECKER 11とPCで通信する&#10;&lt;/h2&gt;&lt;p&gt;PECKER 11とPCでシリアル通信を行うことができます。今のPCはシリアルポートのないやつがたいていだと思いますが、USB変換してやればOKです。&lt;/p&gt;&#10;&lt;h3 id="構成"&gt;構成&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="59" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/a/e/ae4c63a6.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;PECKER 11 -&amp;gt; PC(USB) として考えます。まずPECKER11 のシリアルポートは25pinなので、25-9pinに変換してやます。また、端末 to 端末なので&lt;strong&gt;クロスケーブル&lt;/strong&gt;である必要があります。9pin変換後、今度はUSB変換し、PCに接続します。つまりは、&#10;&lt;strong&gt;PECKER 11 -&amp;gt; RS-232C(25pin,クロス)ケーブル -&amp;gt; 25 - 9pin変換 -&amp;gt; RS-232C - USB変換 -&amp;gt; USBケーブル -&amp;gt; PC&lt;/strong&gt;というような構成になるでしょう。&lt;strong&gt;RS-232C - USB変換は恐らくドライバが必要&lt;/strong&gt;ですが、PCのOSに対応しているものならなんでもよいと思います。下記のものはMacのドライバがあるし、メーカーよりLinuxでの動作報告(但サポートの対象外)もあります。私もRaspbian(カーネル3.18)で検証済です。この場合特にドライバを入れたりなどはしませんでした。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00MHADB7U" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;ちなみに、Raspberry Piでのシリアル通信については設定が必要で、そのあたりについては「&lt;a class="link" href="//hack-le.com/44765804-2/" &gt;Raspberry Pi でシリアル通信(Macも同様) : 或る阿呆の記&lt;/a&gt;」にまとめています。&lt;/p&gt;&#10;&lt;h3 id="pecker-11-の通信設定"&gt;PECKER 11 の通信設定&#10;&lt;/h3&gt;&lt;p&gt;通信設定はなんでもよいといえばなんでもよいのですが、以下のように設定します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;[SET] [0] → D8 S1 NO # データビット 8bit, ストップビット 1bit, パリティ無し&lt;/li&gt;&#10;&lt;li&gt;[SET] [1] → 9600 # ボーレート 9600bps&lt;/li&gt;&#10;&lt;li&gt;[SET] [4] → Disable # フロー制御なし&lt;/li&gt;&#10;&lt;li&gt;[SET] [5] → Intel HEX # データ・フォーマット Intel Hex形式&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="pecker-11から送信pcで受信"&gt;PECKER 11から送信、PCで受信&#10;&lt;/h3&gt;&lt;p&gt;設定したら、PECKER 11より信号を流してPCで受信します。このとき、PC側の設定はPECKER 11で行ったものに準拠するようにします。&lt;/p&gt;&#10;&lt;h4 id="windowsの場合"&gt;Windowsの場合&#10;&lt;/h4&gt;&lt;p&gt;Windowsの場合は、TeraTermなどのターミナルソフトを利用することになるでしょう。TeraTermの使用方法はいろんなところで解説されていますし、まぁそもそもメニューをいじっていればだいたいわかるはず。各種設定はメニューの「設定」→「シリアルポート」からいじれるということだけ記しておきます。&lt;/p&gt;&#10;&lt;h4 id="maclinuxの場合"&gt;Mac、Linuxの場合&#10;&lt;/h4&gt;&lt;p&gt;Mac、Linuxにおけるシリアル通信については、「&lt;a class="link" href="//hack-le.com/44765804-2/" &gt;Raspberry Pi でシリアル通信(Macも同様) : 或る阿呆の記&lt;/a&gt;」の「各種プログラム」節にあるとおりです。ここではscreenを使うものとすると、たとえば以下のように入力すると、待ち受けます。&lt;/p&gt;&#10;&lt;pre&gt;`$ screen /dev/tty.usbserial-FTFMT9HX 9600&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;tty以下については、/dev以下を ls してそれらしいものにします。screenの終わり方は、Ctrl-a Ctrl-k です。また、cuコマンドを用いる場合は以下です。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo cu -s 9600 -l /dev/tty.usbserial-FTFMT9HX&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;cuコマンドの終わり方は、~.と入力です。&lt;/p&gt;&#10;&lt;h4 id="pecker-11からpcに送信"&gt;PECKER 11からPCに送信&#10;&lt;/h4&gt;&lt;p&gt;準備が完了したら、[JOB] [C] [SET] でPECKER 11から送信します。すると、下図のようにダラダラとIntelHex形式で流れてきます。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/6/2/6253c54c.jpg" &gt;&lt;img alt="skitch" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/6/2/6253c54c-s.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="romを焼く"&gt;ROMを焼く&#10;&lt;/h2&gt;&lt;p&gt;任意のバイナリデータを作成して、それをROMに焼きます。&lt;/p&gt;&#10;&lt;h3 id="pecker-11の設定"&gt;PECKER 11の設定&#10;&lt;/h3&gt;&lt;p&gt;基本的に前節と同様ですが、バイナリデータの送信ということで、 &lt;strong&gt;[SET] [5] → BINARY でバイナリ形式を選択&lt;/strong&gt;します。 &lt;strong&gt;[JOB] [D] [SED] でPECKER 11が受信状態&lt;/strong&gt;になります。&lt;/p&gt;&#10;&lt;h3 id="pcからpecker-11にデータを送信"&gt;PCからPECKER 11にデータを送信&#10;&lt;/h3&gt;&lt;p&gt;PCからPECKER 11にバイナリデータを送信します。&lt;strong&gt;WindowsではTeraTermなどのソフトで、バイナリであることに留意しながらファイルの送信をすればよい&lt;/strong&gt;です。ただ、最初に書いたとおり、Mac・Linuxでのやり方がわかりません…。cuコマンドでは、~&amp;gt; でファイルを送信できるのですが、どうにもうまくいかない。binay変数をtrueにしたり、XON/OFFをOFFにしたり、バイナリではなくSTX/ETX設定してアスキーでやろうしたり、いろいろ設定をいじりましたが、何が間違っているのか…諦めました。やり方わかる人がいたら教えてほしいです。なおcuコマンドについては「&lt;a class="link" href="http://manned.org/cu/8ab262a5" target="_blank" rel="noopener"&#10; &gt;cu - manned.org&lt;/a&gt;」が参考になります。&lt;/p&gt;&#10;&lt;p&gt;PECKER 11の受信が完了したら、RAMの中身を確認します。この設定だと、バイナリをそのまま流しているだけなので、データがちゃんと合っているかどうか、できればPCで受信して、&lt;strong&gt;元データとの整合性を確認したほうがよい&lt;/strong&gt;でしょう。&lt;/p&gt;&#10;&lt;h3 id="romに受信したデータを焼く"&gt;ROMに受信したデータを焼く&#10;&lt;/h3&gt;&lt;p&gt;RAMの中身が問題なければ、書き込みを行います。&lt;strong&gt;空のROMをセットして、[BLNK] [SET] で確実に空であることを確認した後、[PRG] [0] [SET] でROMの書き込み&lt;/strong&gt;を行います。&lt;/p&gt;&#10;&lt;p&gt;以上で完了です。&lt;/p&gt;</description></item><item><title>予算2000円でROMイレーサー作成</title><link>https://hack-le.com/45077558-2/</link><pubDate>Thu, 13 Aug 2015 08:38:49 +0900</pubDate><guid>https://hack-le.com/45077558-2/</guid><description>&lt;p&gt;最近昔のROMを扱う必要があり、ちょこちょこといじっています。それでROMイレーサーが欲しくなったのですが、調べて見ると安いものでも15,000円程度はするようで、ちょっと手が出ません。が、要は紫外線をぶち当てたらよいということで、&lt;strong&gt;市販の殺菌灯を用いることでROMイレーサー代わりになるらしい&lt;/strong&gt;のです。（参考：「&lt;a class="link" href="http://www.asahi-net.or.jp/~DR5H-MROK/ROMERASER.htm" target="_blank" rel="noopener"&#10; &gt;ROMイレーサーを作ってみました&lt;/a&gt;」、「&lt;a class="link" href="http://ushimitukun.blog.fc2.com/blog-entry-430.html" target="_blank" rel="noopener"&#10; &gt;自作ロムイレーサー - 痛い部屋の住人&lt;/a&gt;」）&lt;/p&gt;&#10;&lt;h2 id="物品調達"&gt;物品調達&#10;&lt;/h2&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0013IK4XG" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0017T29OI" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;殺菌灯さえあればいいというのであれば、比較的安く製作することができそうです。というわけで、早速購入し、作ってみました。最初は近所のホームセンターに行ったのですが、殺菌灯なんてないよと店員に言われました。こんなとき、Amazonは本当に頼りになります。**殺菌灯が1,000円、それを光らせる側が1,000円で、予算は2,000円弱**。殺菌灯は10Wのものもありますが、参考サイトを探すとだいたいみなさん4形で4Wの小さなものを使っている様子。出力は高くなくてよいし、また小型であれば取り回しがしやすいということでしょうか。**私も先例にならい、以下のような出力4Wで大きさ4形とされるものを購入**しました。&#13;&#10;&lt;h2 id="製作手順"&gt;製作手順&#10;&lt;/h2&gt;&lt;p&gt;蛍光灯ですが、強い紫外線を当てるのが目的なので、&lt;strong&gt;カバーガラスは外しておきます&lt;/strong&gt;。&#10;電源タイマーがあれば、指定した時間だけ稼働させることができるので、よりよさそうですが、当面必要なしと考えます。また、この蛍光灯はコンセント直挿しタイプなので、これを使う場合は延長コードがあったほうがよいでしょう。あとは適当に空箱に入れます。ここでは配送で届いたダンボールを用いました。ダンボールの上面には、ちょうど蛍光灯がのっかるくらいの口をつくります。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/e/d/edb6e164.jpg" &gt;&lt;img alt="skitch" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/e/d/edb6e164-s.jpg"&gt;&lt;/a&gt;&#10;ROMをダンボールに入れます。ダンボールが少し深かったので、適当な小さい空箱を中に置いて、その上にROMを置きました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/4/3/439607b3.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;ROMを入れて、蛍光灯セット完了したら、スイッチONです。紫外線ができるだけ漏れないように…。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/3/e/3ea735de.jpg" &gt;&lt;img alt="2" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/3/e/3ea735de-s.jpg"&gt;&lt;/a&gt;&#10;2,30分もほっておけば消えてるはずです。もとよりいい加減な装置であまり気にしてもなんですが、長くやり過ぎると機器への影響はよろしくないでしょうし、忘れずに時間を測っておきます。タイマー付きのコンセントがあれば楽なのでしょう。&lt;/p&gt;&#10;&lt;p&gt;後はROMライターでブランクチェックをして、確実に消去されていることを確認して終了です。&lt;/p&gt;</description></item><item><title>世の中の３つのやり方：正しいやり方・間違ったやり方・俺のやり方</title><link>https://hack-le.com/44899035-2/</link><pubDate>Wed, 12 Aug 2015 03:32:00 +0900</pubDate><guid>https://hack-le.com/44899035-2/</guid><description>&lt;p&gt;この記事の半分は書評で、半分はメモです。個人的によく読み返している本「UNIXという考え方」の、「7.9 (9) 劣るほうが優れている」という逆説的な小題に書かれていることが、UNIXに限らずあらゆることにおいて普遍的だと感じるところがあり、私自身が物事のやり方を決める時の指針としてメモします。&lt;/p&gt;&#10;&lt;h2 id="３つのやり方"&gt;３つのやり方&#10;&lt;/h2&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;軍隊経験のある人なら、世の中には「正しいやり方」と「間違ったやり方」と「軍隊方式」があることを知っている。&amp;lt;中略&amp;gt;…軍隊方式は白とも黒ともつかない雲に覆われている。このやり方では、うまくいくはずのものがなぜか失敗したり、惨めに失敗するはずのものが空前の成功を収めたりする。&#10;「UNIX方式」は、この軍隊方式にどこか似ている。&#10;Mike Gancarz 著, 芳尾 桂 監訳 , UNIXという考え方(2001, オーム社) P.120より&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;本書では、UNIX方式を軍隊方式になぞらえて、正しいとも間違っているとも言い切れないやり方としています。多くの評論家から批判され、当然死ぬべきはずのものなのに、生き残り続けている。軍隊方式というのは我々日本人には馴染みの薄いものですが、「軍隊」の部分を「（自分の所属する）組織」や、もっといえば「&lt;strong&gt;自分&lt;/strong&gt;」に置き換えても、よく理解できるのではないでしょうか。&lt;strong&gt;私たちはたいてい、正しいとは言えないが、間違えているとも言い切れないやり方をしています&lt;/strong&gt;。そして時折、「こんなんじゃダメだ、こうあるべきだ」と、正しいやり方を考え、実践しようとしますが、結局それは果たせられぬままに頓挫し、最後に残るのはいつものやり方。何故そうなってしまうのか、本書によれば、それは「&lt;strong&gt;劣るほうが優れている&lt;/strong&gt;」から、と。逆説的ですが、要は正しいとか優れているという言葉をどのように解釈するのか、という問題かもしれません。&lt;/p&gt;&#10;&lt;h2 id="正しいやり方ができない理由"&gt;正しいやり方ができない理由&#10;&lt;/h2&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;アプリケーションとシステムが単純で、正しく、一貫していて、完全でなければならないことに反対する人は、UNIXプログラマにも少ないだろう。重要な点は、これらの特性にどう優先順位を付けるかだ。&#10;Mike Gancarz 著, 芳尾 桂 監訳 , UNIXという考え方(2001, オーム社) P.120より&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;大切なことは優先順位であるということです。私たちに与えられている時間は等しく有限であり、また費やせるリソースも限られています。そして「正しさ」を実現するためには、リソースが足りない。&lt;/p&gt;&#10;&lt;p&gt;結局、&lt;strong&gt;正しいやり方というのは往々にして現実的ではない&lt;/strong&gt;ということでしょう。あまりにもコストがかかりすぎる。実際振り返って見ても、ある計画を達成するために満足な時間と人的資源が与えられている幸運な状況が、これまでにあっただろうか、と思います。&lt;/p&gt;&#10;&lt;p&gt;一方で、正しくはないが間違えているのとも違う、本書でいうところの軍隊方式、劣ったやり方は、&lt;strong&gt;少なくとも現実的&lt;/strong&gt;です。優先順位をつけ、できることをやる……最終的に失敗することもあるでしょうが、成功することもあるでしょう。どうなるかはわかりませんが、一定の成果は残します。&lt;/p&gt;&#10;&lt;h2 id="正しさに拘ることはない"&gt;正しさに拘ることはない&#10;&lt;/h2&gt;&lt;p&gt;以上のことから導きだされる私の結論は、&lt;strong&gt;これからやろうとしていること、今やっていることが、どう考えても正しいとは言えないものでも、だからといって気に病むことはない&lt;/strong&gt;、ということです。むしろ、そのほうが往々にしてうまくいく。なぜなら、それが現実的なものだから…と、本書に書かれている趣旨からは外れるのですが、こんなことを考えました。自分の今後のキャリアに関わることについて思い悩んでいるうちに、考えたことです。&lt;strong&gt;こうあるべきだという筋論に拘泥せず、大まかな方向性が決まったら、あとは目の前にあるものを優先順位をつけて片付けていく、ひとまずは「俺のやり方」でやっていこう&lt;/strong&gt;、と思っています。やや抽象的な話になってしまいましたが。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、一つ気になるのは、間違ったやり方との違いでしょうか。それは、成果物の有無が一つ基準になると思います。&lt;strong&gt;まともな成果物が一向に生まれないのであれば、多分それは間違ったやり方&lt;/strong&gt;といえるのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;それにしても、「劣るほうが優れている」とは、なんと魅力的な言葉でしょうかね。こういう逆説を体現するようでありたいし、またその気持ちをいつまでも忘れずにいたいものです。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4274064069" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;</description></item><item><title>Ping-tで LPIC 101 の Ver.4.0 と Ver.3.5 を両方総ざらいして感じた違いとか</title><link>https://hack-le.com/45056252-2/</link><pubDate>Mon, 10 Aug 2015 20:38:17 +0900</pubDate><guid>https://hack-le.com/45056252-2/</guid><description>&lt;p&gt;休みといえば普段できないまとまった勉強と実験ですね。外は暑すぎて一歩も出たくありません。死にます。コンクリートがなければ随分マシなのですが。下が地面で、木陰があって、おまけに風でも吹いたら、本当に何の問題もなかったりするのですけれど、これも一種の現代が抱える問題でしょうか。せめて雨でも降ってくれれば。&lt;/p&gt;&#10;&lt;p&gt;先日から「&lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LPIC/オラクルマスター/ITパスポート/ITIL総合学習サイト Ping-t - 無料CCNA、LPIC、Oracle Master、ITパスポート問題集、ITILファンデーション、合格体験記、Cisco実機シミュレータ、実機講習&lt;/a&gt;」にてLPICのレベル101の勉強をしていました。当初やり始めたのは、Version 3.5の問題集だったのですが、ちょうど転換期ということで、なんとか一通り総ざらいしたなと思った矢先にVersion 4.0に対応した問題集が発表されました。別に誰に頼まれたわけでもなく、自発的に受験しようとしている身の上、Version 4.0を勉強しなおさなくては筋ではないなぁ、と正直ゲンナリした気持ちもありつつ、再びVersion 4.0の問題集を一からやり始めました。&lt;/p&gt;&#10;&lt;p&gt;まぁ、突然何もかもが変わるわけもなく、以前に勉強した内容もだいたい出ていました。というか、なくなった領域ってあるのでしょうか。一方で、ああここは増えたな、と思うところもあります。具体的には、initプログラムである &lt;strong&gt;systemd&lt;/strong&gt; と パーティションテーブルの規格である &lt;strong&gt;GPT&lt;/strong&gt; あたりでしょうか。systemd は CentOS 7 で使われているようですし、GPT は昔 3TB の外付けハードディスクをUbuntu Server で使用するときにひっかかったところでもあります(参考：&lt;a class="link" href="//hack-le.com/25209854-2/" &gt;Ubuntu Server 12.04のCUIで2TB超え(3TB)の外付けハードディスクを使う : 或る阿呆の記&lt;/a&gt;…なお、GPTはMBRの制限である2TBの壁を乗り越えた規格)。どちらも学べてよかったと思います…特にGPTを扱う対話的プログラム parted の使い方は、昔検索してもなかなか出てこなくて苦労した記憶が。GUIツールであるGPartedの情報はたくさんあったのですが。&lt;/p&gt;&#10;&lt;p&gt;違いを感じたのはそれくらいです。まぁなにげに色々増えているのかもしれませんし、本番の問題は変わっているのかもしれませんが、少なくともそういったことはPing-tの問題集からはちょっとわかりません。早く記述式であるコマ問も Version 4.0 に対応してくれたらよいのですが…。それにしても、けっこう楽しいものですね。&lt;/p&gt;&#10;</description></item><item><title>MacBookAir を Chromebook で置き換えられるか</title><link>https://hack-le.com/45041121-2/</link><pubDate>Sun, 09 Aug 2015 01:16:42 +0900</pubDate><guid>https://hack-le.com/45041121-2/</guid><description>&lt;p&gt;別に何か欲しいものがあるわけでもないのですが、なんとなく毎日Amazonのタイムセールのラインナップを見ています。買ったことはないのですけどね。そこでちょくちょく並んでいるのが、Chromebookです。&lt;/p&gt;&#10;&lt;h2 id="実用として現実味を帯びたchromebook"&gt;実用として現実味を帯びたChromebook&#10;&lt;/h2&gt;&lt;p&gt;Google謹製のブラウザしか動かないという尖ったマシン。数年前にその構想を聞いた時はなんて馬鹿なと思いましたが、結局は私に先見の明がなかったということか、それともGoogleが未来をそのようにしたということか、Chromebookは現実的に「使える」マシンとして世に羽ばたいています。私もたいへん興味があって、ページを開いては欲しいなぁと指を咥える日々です。&lt;/p&gt;&#10;&lt;p&gt;考えていくと、かなりの仕事がChromebookでなんとかできてしまうのではないかと思えます。たとえば私はコンソール画面でプログラミングをすることが多いわけですが、ローカルでの環境にこだわらなければ、たとえば自宅の Mac mini にアクセスしてプログラムを作成してもよいわけです。Secure Shellというたいへん便利なWebアプリがあって、時々使っていますが、ほとんど不便なくブラウザから端末の作業ができてしまいます。さすがに周辺機器とシリアル通信を行うのは難しいでしょうが。&lt;/p&gt;&#10;&lt;p&gt;作業自体はよいのですが、問題はファイルの移動でしょうか。それは一筋縄ではいかないかもしれません。たとえば自宅のマシンにリモートで入ってスクリプトを作成し、それを職場の他のマシンに移そうと思えば、一手間、ふた手間かかるのは間違いないでしょう。むむ。そういえば、職場のメールはいまだにAPOPでした。これがまたネックでもあります。&lt;/p&gt;&#10;&lt;p&gt;しかし、それくらいといえばそれくらいです。まとめると、シリアル通信、ファイルの移動、メールということになります。まぁ最後のメールについては本当に頑張ればなんとかならないこともないし、ファイルの移動も試行錯誤するとそれなりに便の良い解にはたどりつけないこともなさそうです。シリアル通信も他のLinuxマシンを用いるなどすれば必須の事項ではない。&lt;/p&gt;&#10;&lt;p&gt;いくつかのハードルはあるが、なんとかなってしまうのでしょうか。うーん。しかしながら、そんなに苦労して、しかも恐らく使い勝手が上がるということもないのに、金と時間をかける必要はあるのか、と思い直し、まぁまだ時期ではないな、と結局そういう結論になります。阿呆ですが、こうして考えることが楽しい。&lt;/p&gt;</description></item><item><title>16進数が思いの外伝わらなくて考えたこと</title><link>https://hack-le.com/44889510-2/</link><pubDate>Sat, 08 Aug 2015 15:16:38 +0900</pubDate><guid>https://hack-le.com/44889510-2/</guid><description>&lt;p&gt;最近、職場の子にプログラミングの基礎的なところを教えることがありました。昔なつかしいROMライターでROMの中身を読み込み、読み込んだバイナリデータの正誤を判定するスクリプトを作ってもらいました。バイナリデータなので、16進数については理解していないと中身を検討することもままなりません。どうもそのへんの理解が曖昧だったようなので、簡単に確認をしました。&lt;/p&gt;&#10;&lt;h2 id="ff--1-がわからない"&gt;FF + 1 がわからない&#10;&lt;/h2&gt;&lt;p&gt;16進数は0-Fまでを数値として扱う、つまり F + 1 = 10、1F + 1 = 20となる、では FF + 1 は？と聞くと、キョトンとした様子。今にして思うと彼も戸惑ったのでしょうが、私も戸惑いました。私の感覚では、9 + 1 = 10、19 + 1 = 20、なら 99 + 1 = 100 ですよね、のように至極明快かつ簡単な論理だと思ったのですが…。&lt;/p&gt;&#10;&lt;p&gt;家族にその話をしたところ、そんなんすぐにわからんわ、とのことで、ふぅむと考えさせられました。ならばなぜ、皆当然のように10進法の加減算ができるのだろう。やっていることはそれと同じで、9 + 1 =10 が自明ならば16進数において F + 1 = 10 となるのも自明ではないのか、どちらも同じ単なる桁上りではないか、と。数字を一つ一つ書いていって、Fの次はもうないからF + 1=10だよね、というとなるほどと言うのですが、ではFF + 1 はなんでしょうと聞くと、わからない、と。理系のことに関心のある父は長いこと考えた末、100か、と答えに辿り着いたようですが、それでもそこに至るまでに想像していた以上の時間がかかっており、不思議でした。&lt;/p&gt;&#10;&lt;h2 id="慣れの問題"&gt;慣れの問題？&#10;&lt;/h2&gt;&lt;p&gt;自分には16進数でひっかかった記憶がないし、周りにもそこでひっかかったという人はいなかったように思います。やはりそこは、一応理系の勉強をしてきたからと言ってよいのでしょう。母は10区切りじゃないなんて意味がわからないと言いますが、では60分で1時間になるのは意味がわからないのか、というとそんなことはないわけです。私たちは10進法以外の考え方も、日常から学んでいます。ただ、しっかりと身についてはいないのでしょう。理系を志した人は、小学生時代の算数よりそれなりの計算問題をこなしてきていますから、数、桁の感覚が平均よりも鋭いということはありそうです。だから16進数を習ったときもさほどの違和感なく受け入れることが出来た、と考えると、単に慣れの問題なのかな、と思えます。まぁ、恐らくその要素は大きいでしょう。&lt;/p&gt;&#10;&lt;h2 id="ゼロの概念"&gt;ゼロの概念&#10;&lt;/h2&gt;&lt;p&gt;しかし、少し深く考えてみると、そこにはゼロの概念の希薄さがあるのではないか、とふと思いました。昔、10という書き方はゼロの概念なしには出来ないと何かの本で読み、たいへん感心した覚えがあります。このような書き方は位取り記法と呼ぶそうですが、256を256と理解するのと二百五十六と理解するのでは、その理解のしやすさに大きな差がありますから、よく考えてくれたものだと思いました。&lt;/p&gt;&#10;&lt;p&gt;そうして考えると、9の次を10、Fの次を10と考えるには、ゼロの概念が必要です。もちろん我々は知識としてゼロを知っていますが、知っていることとそれを腹から理解していることはまったくの別物です。実際、説明しているときに、Fの次に10になると言うと、「15個しかないのにどうして16進数なの？」と問われ、どうも頭から0が抜け落ちている様子でした。一方、2進数が0と1という説明は違和感なく受け入れられたのですが、これは16というすぐに数えられない大きな数字が頭の中の思考を抽象化させ、実は不十分であった理解を露呈させたのではないか、と思います。理系の人間といえば、小学生時代から多くの計算問題を位取り記法でこなし、また60進法の混ざる時間の計算や、0はもちろんマイナス、さらにはπやeといった無理数も扱い、数そのものに対する理解度が違います。そうしてゼロの概念も醸成され、16進数程度の概念はすぐに習得することができるのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;……と、まぁ、あまり本気でこんなことを言っていると思われても困りますが、半分遊びの半分真面目くらいの気持ちです。ただ、人は概念を経験で体得する、ということは本当だと考えています（コンピュータとの大きな違いの一つでしょう…機械学習が流行って久しいですが）。そのため、円周率についても私は3.14派です。まず3.14などという実用上必ずしも必要ない精度での計算演習をこなせば、このややこしい、鬱陶しい計算の過程で、円という不思議なものに対する理解が深まる面もあろうと思うのです。算数嫌いを増やしているだけだと言われるとそうかもしれませんが。&lt;/p&gt;&#10;&lt;p&gt;ところで、Wikipediaの「&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E4%BD%8D%E5%8F%96%E3%82%8A%E8%A8%98%E6%95%B0%E6%B3%95" target="_blank" rel="noopener"&#10; &gt;位取り記数法 - Wikipedia&lt;/a&gt;」には、10進法という表現はある種の混乱を内包しているのでこのような文脈では漢数字を併用することが多い、というような文言がありますが、私は特に気にせず使っています。けれど、これは気にする人はとっても気にするんだろうなぁと、経験的に感じます…いや、本当にすごく、なんというか、臭います。ちょっとした火薬庫の臭い。&lt;/p&gt;</description></item><item><title>間がいいのか悪いのか、Ping-t で LPIC 101 の Ver.4.0 対応</title><link>https://hack-le.com/45021776-2/</link><pubDate>Fri, 07 Aug 2015 01:03:03 +0900</pubDate><guid>https://hack-le.com/45021776-2/</guid><description>&lt;p&gt;昨日 &lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;Ping-t&lt;/a&gt;にてLPICの101の試験勉強を始めたという記事を書いたばかりですが、その矢先にPing-tからLPIC 101 のVer. 4.0に対応したというメールが届きました。なるほど、そういえば今年の6月より101の試験範囲が改訂され、バージョンが3.5から4.0になったとのこと。11月までは旧来通りの3.5の試験も並行してなされるようです。資格の取得そのものよりも、自分自信の知識を問うことが私の目的ですから、4.0 を受けるべきでしょう。&lt;/p&gt;&#10;&lt;p&gt;と、もちろん理屈で考えればそうなのですが、短い期間とはいえ 3.5 で一応範囲内の問題を総ざらいしていたので、また一から解き直すことになるのか、と思うと少し腰が引けてしまう自分がいることも事実。そうは言っても、理屈は理屈ですから、自分の中の楽したいという本能的欲求は抑えなくてはいけません。だいたい、本当に楽したいなら何もしなければよい。誰に頼まれてやっているわけでもあるまいに。&lt;/p&gt;&#10;&lt;p&gt;というわけで、また一から解き直しです。間が良かったのか悪かったのか、間一髪間に合ったのだから間が良かったんだ、と思えるようにしたいところ。&lt;/p&gt;&#10;</description></item><item><title>Ping-t で LPIC の勉強をしています</title><link>https://hack-le.com/45009471-2/</link><pubDate>Thu, 06 Aug 2015 00:26:00 +0900</pubDate><guid>https://hack-le.com/45009471-2/</guid><description>&lt;p&gt;第一級陸上無線技術士の資格をとって、無線については一アマと合わせてまぁ文句は言われないだろうと思うところまできました。もうこれ以上仕事上で資格を取得する必要はないのですが、精進のため定期的になんらかの勉強を続けようと思っています。&lt;/p&gt;&#10;&lt;h2 id="次の資格"&gt;次の資格&#10;&lt;/h2&gt;&lt;p&gt;資格なんかとっても、とは思いますが、同期もおらず上の人も先輩という感じではないためほぼ独学でやってきている身分、自分の知識がどれほどのものなのか、どうにもわかりませんし、しっかりとした資格であれば、勉強することは師のいない自分にとってそれなりによいのではないか、とも思うのです。それで、次は何の勉強をしようかと検討。自分はアナログが弱いので、ガチガチの電気系の勉強をしようかと、次は電験でも受けようかと思いきや、試験は年に一度、申し込みは6月まで。次はほぼまるまる来年とは気の長い話です。他に何かないものかなと思っていた折に目についたのが、Linuxの資格試験LPIC。&lt;/p&gt;&#10;&lt;p&gt;思い切りデジタルの領域ですが、仕事でLinuxを使っているものの体系だった勉強をしたことはないし、周囲に詳しい人がいるわけでもありません。そういえば昔ちょっと受験しようとしたけれど、なかなか暇もなく頓挫した覚えもあります。一度ちゃんと勉強してみるのも悪くないかもしれないと、勉強を始めました。&lt;/p&gt;&#10;&lt;h2 id="教材選び"&gt;教材選び&#10;&lt;/h2&gt;&lt;p&gt;試験勉強は教材が命です。出来の悪い教材を使っていては、受かるものも受かりません。また、試験勉強は問題演習に始まり問題演習に終わります。できれば過去問ないしそれに準じたものを中心に、それなりに解説を付記してしていて分野別にまとまっていれば…と思い見ていると、「&lt;a class="link" href="http://ping-t.com/" target="_blank" rel="noopener"&#10; &gt;CCNA/CCNP/LPIC/オラクルマスター/ITパスポート/ITIL総合学習サイト Ping-t - 無料CCNA、LPIC、Oracle Master、ITパスポート問題集、ITILファンデーション、合格体験記、Cisco実機シミュレータ、実機講習&lt;/a&gt;」のWeb問題集がとてもよい感じでした。書籍を探していたのですが、ひとまずはこれで十分そうです。問題をひたすら解くことができて、解説も表示され、間違えたところを繰り返し練習できるのは、明らかに書籍より優れています。iPad で出来るのも嬉しい。こういった反復演習は、コンピュータを利用した学習がもっとも効果的なものの一つ。早速一週間ほどやって、LPIC101の問題を総ざらいしました。&lt;/p&gt;&#10;&lt;p&gt;自己流で必要なことだけやってきたので、こうして改めて問題に出されるとわからないことがけっこうあるものですね。Emacsばかり使ってきてviをまともに操作できませんでしたが、問題で覚えて、多少格好がつくようになりました。普段あまり使わないコマンドのオプションなど、覚えてもすぐに忘れそうではありますが、一度はきちんと覚えておいたほうがよいでしょうし、こうしてうまくまとめて問題にしてもらえているのは有難い。もうしばらくやって、お盆前後にまず101の試験を受けようと思います。&lt;/p&gt;</description></item><item><title>ntp の make で /usr/bin/ld: cannot find -lcap エラー</title><link>https://hack-le.com/44995765-2/</link><pubDate>Tue, 04 Aug 2015 13:36:49 +0900</pubDate><guid>https://hack-le.com/44995765-2/</guid><description>&lt;p&gt;Raspbianをインストールした Raspberry Pi 2 でntp-4.2.8p3 をコンパイルする時、makeで表題のようなエラーが起きました。前にコンパイルした時は特にエラーは起きなかったのですが、今回は一度クリーンインストールしたうえで行ったので、以前は知らぬ間に入っていたライブラリが足りなかったのかもしれません。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a115makeerror.html" target="_blank" rel="noopener"&#10; &gt;makeで「/usr/bin/ld: cannot find」と表示されるときは － ＠IT&lt;/a&gt;」によると、&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;これは、-lオプションに続くパッケージ（ここでは「Xi」）に関連するライブラリがインストールされていないことを示している。従って、不足しているライブラリをインストールすればいい。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;とのこと。なので、apt-cache でそれらしいパッケージがないか探してみました。&lt;/p&gt;&#10;&lt;pre&gt;`pi@raspberrypi ~/src/ntp-4.2.8p3 $ apt-cache search libcap&#13; fwknop-server - FireWall KNock OPerator server side - C version&#13; libcap-dev - development libraries and header files for libcap2&#13; libcap-ng-dev - Development and header files for libcap-ng&#13; libcap-ng-utils - Utilities for analysing and setting file capabilities&#13; libcap-ng0 - An alternate POSIX capabilities library&#13; libcap2 - support for getting/setting POSIX.1e capabilities&#13; libcap2-bin - basic utility programs for using capabilities&#13; libcapi20-3 - ISDN utilities - CAPI support libraries&#13; libcapi20-dev - ISDN utilities - CAPI development libraries&#13; libcapsinetwork-dev - C++ network server library, development files&#13; libcapsinetwork0c2a - C++ network server library&#13; libcaptcha-recaptcha-perl - perl implementation of the reCAPTCHA API&#13; libcapture-tiny-perl - module to capture STDOUT and STDERR&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;libcap2 と libcap-dev がそれらしい。&lt;/p&gt;&#10;&lt;pre&gt;`$ apt-get install libcap2 libcap-dev&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;結果、libcap2 は既にインストール済みでしたが、libcap-devが入っていませんでした。その後 make してやると、今度はちゃんと通りました。&lt;/p&gt;</description></item><item><title>Xperia Z3 が iPhone 5 より全体的に通信系が不安定に思える</title><link>https://hack-le.com/44952736-2/</link><pubDate>Sat, 01 Aug 2015 02:12:31 +0900</pubDate><guid>https://hack-le.com/44952736-2/</guid><description>&lt;p&gt;紆余曲折を経て、私はXperia Z3(以下Xperia)とiPhone 5 の両方を使っています。SIMを入れているのはXperiaのほうです。この二台を使っていて思うのは、どうもZ3は全体的にiPhone 5より通信系が不安定に思えるということです。以下、実にローカルな私の場合の例をあげていきます。&lt;/p&gt;&#10;&lt;h2 id="職場でxperiaだとミニゲームの通信が異常に遅い"&gt;職場でXperiaだとミニゲームの通信が異常に遅い&#10;&lt;/h2&gt;&lt;p&gt;ここしばらくは工場勤務からは離れていますが、昔しばらく工場に通っていた頃、いわゆるソーシャルゲームが現場での休憩時間には実にうってつけだということに気づきました。実際、やってる人はけっこういまして、それまでああいったゲームはどこで誰がやっているのだろうと思っていたのですが、なるほどユーザー層の一つがここにあったのかと思いました。いつのまにやら私もスキマ時間にちょっとしたゲームをやるようになり、それは工場から離れた今も変わりません。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、現在の職場のネット環境だと、普通にネットをする分には問題ないのですが、通信を頻繁に行うソーシャルゲームをしたとき、Xperiaでは通信に異常に時間がかかる。同じゲームをiPhoneでやるとそのようなことはないのですが…。今のゲームはボタン一つ押すだけでサーバーとの通信をしますから、ここで時間がかかると非常にストレスフルです。休憩時にやる気晴らしのゲームでストレスが貯まっては阿呆です。仕事に戻れということなのか……。常に遅いというわけでもなく、すんなりいくときはすんなりいくのですが、しばらくするとまた通信に異常な時間がかかるようになります。まぁ、職場のネットワークは複雑ですから、色々とあるのでしょうが、iPhoneではこうはならないのにと思うと、不思議です。&lt;/p&gt;&#10;&lt;h2 id="エクステンダーと認証に問題あり"&gt;エクステンダーと認証に問題あり&#10;&lt;/h2&gt;&lt;p&gt;エクステンダーは無線LANの中継器です。使用したのはNETGEARのEX6100-100JPS。iPhoneやそのほかのマシンは問題なく繋がるのですが、Xperia だけ繋がらない。認証に問題ありと言われます。もっともエクステンダーに繋がってほしいものがXperiaだっただけに、非常に残念な思いをしました。&lt;/p&gt;&#10;&lt;h2 id="車載のbluetoothトランスミッターに自動で繋がらない"&gt;車載のBluetoothトランスミッターに自動で繋がらない&#10;&lt;/h2&gt;&lt;p&gt;シガーソケットに差し込み、Bluetoothでスマホ等から音楽を受信してそれをFMで飛ばす、FMトランスミッターがあります。車に乗ることが多い私にはたいへん便利で有難い代物です。型名は失念しました。調べれば出てくるでしょうが…。&lt;/p&gt;&#10;&lt;p&gt;これは車のエンジンを入れると、自動で機器を探索して接続してくれるのですが、どういうわけかXperiaだとうまくいかない。iPhoneなら百発百中でうまくいくのですが。接続ができないというわけではなくて、設定画面から操作してやれば、接続はできます。しかし、どうも自動で繋がってくれない。たいへん面倒です。&lt;/p&gt;&#10;&lt;h2 id="電波ギリギリの時は実質繋がっていない"&gt;電波ギリギリの時は実質繋がっていない&#10;&lt;/h2&gt;&lt;p&gt;Wi-fiの電波がギリギリの状態であるときは、だいたいネットはほとんど使えないと思ってよいようです。iPhoneでも「こんなの実質繋がってないのと同じだよ」と感じることもありますが、さほど多くはありません。が、これがXperiaだと非常に多い。いっそ接続が切れてくれたら、LTEないし3G接続になるので、それはそれで問題ないのですが、なまじっかWi-fiに繋がっている状態が続くものだから、実質的な通信不可状態になっています。本当にゼロかと言われると、まったくのゼロではないところがいやらしい。それで、わざわざ手動でWi-fiを切る、という操作をすることがよくあります。&lt;/p&gt;&#10;&lt;p&gt;iPhoneよりもWi-fiに繋がる範囲自体は広いのですが、このような状態ですから、単に微弱な電波の扱い方が違うだけなんじゃないかとも思えます。iPhoneのほうが思い切りがよい。&lt;/p&gt;&#10;&lt;h2 id="ソフトの問題に見えるが"&gt;ソフトの問題に見えるが…&#10;&lt;/h2&gt;&lt;p&gt;恐らく、電波自体はそれなりに掴んでいるのでしょう。しかしながら、その処理に色々と問題がありそうです。機器との相性問題のようなものが多かったり、受信強度が弱い時に繋がりもしないWi-fiに延々と接続しようとしたり…といった問題が多いのは、どうもソフトの問題に思えます。写真も画素数はiPhoneよりXperiaのほうが高く、イメージセンサーはiPhoneもソニー製であるはずなのに、写真自体はiPhoneのほうが綺麗に撮れることが多いです。&lt;/p&gt;&#10;&lt;p&gt;ハードは決して負けていないと思うのですが……なかなかどうして、難しい。このスマートフォン市場で世界と戦っている日本勢は実質ソニーくらいのものですから、頑張ってほしいところです。&lt;/p&gt;</description></item><item><title>Raspberry Pi 1 B+ に Redmine を入れてみたがやや重い</title><link>https://hack-le.com/44942872-2/</link><pubDate>Fri, 31 Jul 2015 00:55:02 +0900</pubDate><guid>https://hack-le.com/44942872-2/</guid><description>&lt;p&gt;いい加減に少しはまともなプロジェクト管理をしたほうがよいのではないか、という話を職場でしていました。プロジェクト管理といえば Redmine が有名です。こういったツールは使いこなせればよいのでしょうが、なかなかに面倒であることも事実です。&lt;/p&gt;&#10;&lt;p&gt;まぁ、まずはやってみようかと、「&lt;a class="link" href="http://windmesser.cc/wiki/index.php?%E9%9B%91%E8%A8%98/2014-12-04" target="_blank" rel="noopener"&#10; &gt;Raspberry PI に Redmine インストール(1) - Wind Messer&lt;/a&gt;」を参考に、自宅のRaspberry Pi 1 Model B+ にインストールして、やってみました。&lt;/p&gt;&#10;&lt;p&gt;特にひっかかるところもなく、すんなりと導入できましたが…やや重い。まったく実用に堪えないかというと、そんなこともないのですが、重い。さすがに旧世代のRaspberry Piにはしんどいのだろうか。そう思って、普通のCentOS 6.6をインストールしているサーバーにRedmineを導入してみたところ、これは軽い。やはり負荷が大きかったようです。うーん、Raspberry Pi 2であればどうだろう？&lt;/p&gt;&#10;&lt;p&gt;しかし、CentOSサーバーに導入するときは色々とひっかかったのですが、Raspberry Piへのインストールは本当にすんなりといきました。この環境構築のしやすさはたいへん素晴らしいですね。&lt;/p&gt;</description></item><item><title>Raspberry Pi でシリアル通信</title><link>https://hack-le.com/44765804-2/</link><pubDate>Thu, 30 Jul 2015 15:06:31 +0900</pubDate><guid>https://hack-le.com/44765804-2/</guid><description>&lt;p&gt;2016年9月11日:Raspberry Pi 3およびRaspbian Jessieに対応。&lt;/p&gt;&#10;&lt;p&gt;Raspberry Pi(以下RPi)でのシリアル通信について、やや情報が錯綜していたので調べたことをまとめます。Raspberry Piとモジュール間のシリアル通信を想定しています。USB変換を用いると、Mac &amp;lt;-&amp;gt; モジュールでも、同じように操作・表示できたり。&lt;/p&gt;&#10;&lt;h2 id="gpioかusbか"&gt;GPIOかUSBか&#10;&lt;/h2&gt;&lt;p&gt;RPiにはシリアルポートがありませんので、当然のことながらそれ以外のインタフェースからシリアル通信を行うことになります。基板上のGPIOピン経由のUARTか、USB端子かです。個人的には、相手先が5VトレラントであればUSBを利用したほうが良いと思います。設定が簡便で、ハードやソフトの影響を受けづらいからです。相手先の耐圧が3.3Vの場合でも、降圧させたほうが楽ではないかと思います。&lt;/p&gt;&#10;&lt;h3 id="gpio"&gt;GPIO&#10;&lt;/h3&gt;&lt;p&gt;RPiにはGPIOピンが用意されています。旧型は26ピン、RPi 2以降はそれに14ピンを加えた40ピン。そのうちのいくつかは、シリアル通信のために用いられます。ピンアサインについては「&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals#Model_A.2B.2C_B.2B_and_B2" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;」を参照。これにしたがって配線をします。たとえばTXはピン番号8、RXはピン番号10、5Vの電源供給が必要ならばそこはピン番号2、といった具合に。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00P9BVKOK" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;配線はジャンパワイヤを使えばよいですね。楽です。見た目は線が飛び出て不格好かもしれませんが。**TXとRXの指し間違えに注意です。通信相手のTX、RXと逆になるかと思います**。電圧は3.3Vのピンと5Vのピンがあります。相手先の耐電圧には注意します。&#13;&#10;&lt;h3 id="usb"&gt;USB&#10;&lt;/h3&gt;&lt;p&gt;USB-TTLないし、USB-シリアルポートが使えます。便利ですが、&lt;strong&gt;電圧が5V&lt;/strong&gt;なので、相手先の耐電圧には注意しましょう。。。よくある市販のケーブルはだいたいPL2303搭載なので、Raspberry Piはドライバを新しく入れず、たいがいいけると思います。&lt;/p&gt;&#10;&lt;h4 id="usb-ttl"&gt;USB-TTL&#10;&lt;/h4&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00K7YYFNM&amp;linkId=aec9095a151a5167cff1dee1b2fde11d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;USB-TTLケーブルを使います。TX、RX、V、GNDをそれぞれ所定のピンに。&#13;&#10;&lt;p&gt;この製品は、カスタマーレビュー欄にもあるとおり、赤5V、黒GND、緑Tx(3.3V)、白Rx(3.3V)のようです。&lt;/p&gt;&#10;&lt;h4 id="usb-シリアル"&gt;USB-シリアル&#10;&lt;/h4&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00MHADB7U" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;相手の接続先がシリアルポートの場合。PCでもよく使います。Raspberry Piが接続するのはだいたい小型のモジュールだと思うので、出番は少ないかも。&#13;&#10;&lt;p&gt;これはIO-DATAの変換アダプター USB-RSAQ6で、ちょっと他のものに比べるといいお値段がするのですが、IO-DATAのサイトでサポート外ではあるもののUbuntu12.04とFedora13での動作確認が報告されていた(「&lt;a class="link" href="http://www.iodata.jp/product/interface/rs232c/usb-rsaq6/" target="_blank" rel="noopener"&#10; &gt;USB-RSAQ6シリーズ | RS-232C | IODATA アイ・オー・データ機器&lt;/a&gt;」）ので、あまり悩まないで済むかなと思ったのです。実際、特に何もしないで使うことができました。まぁでも安いやつでも問題ないと思います。&lt;/p&gt;&#10;&lt;h4 id="usb-シリアル変換モジュール"&gt;USB-シリアル変換モジュール&#10;&lt;/h4&gt;&lt;iframe style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B009AME9R4&amp;linkId=9f8351aeed3609a5d7147c3caf0b2ff4"&gt;&lt;/iframe&gt;基板でUSBとシリアルを変換する方法です。デバイス側で対応する形になります。Raspberry Pi側からは普通のUSB-microUSBケーブルが使えるので、ユーザー側に特殊なケーブルを用意させる必要がないのがよいところです。&#13;&#10;&lt;h2 id="gpioピンuartを使う場合の前準備"&gt;GPIOピン(UART)を使う場合の前準備&#10;&lt;/h2&gt;&lt;p&gt;GPIOピンを使用して通信する場合、設定ファイルの書き換えが必要です。「&lt;a class="link" href="https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/using-uart-instead-of-usb" target="_blank" rel="noopener"&#10; &gt;Using UART instead of USB | Adafruit Ultimate GPS on the Raspberry Pi | Adafruit Learning System&lt;/a&gt;」を参考にして書き換えます。&lt;/p&gt;&#10;&lt;p&gt;この設定を行うと、たとえばPCからRaspberry Piにシリアル通信でログインして操作することができなくなるので注意。&lt;/p&gt;&#10;&lt;h3 id="bootcmdlinetxt"&gt;/boot/cmdline.txt&#10;&lt;/h3&gt;&lt;p&gt;/boot/cmdline.txt を、以下のように書き換えます。&lt;/p&gt;&#10;&lt;p&gt;変更前&lt;/p&gt;&#10;&lt;pre&gt;`dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;変更後&lt;/p&gt;&#10;&lt;pre&gt;`dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="gettyの無効化"&gt;gettyの無効化&#10;&lt;/h3&gt;&lt;p&gt;Raspbian JessieとRaspbian Wheezyでやり方が変わります。Jessieより、initプログラムがsystemdに変更された影響です。&lt;/p&gt;&#10;&lt;h4 id="raspbian-wheezyの場合"&gt;Raspbian Wheezyの場合&#10;&lt;/h4&gt;&lt;p&gt;/etc/inittab を、以下のように書き換えます。&lt;/p&gt;&#10;&lt;p&gt;変更前&lt;/p&gt;&#10;&lt;pre&gt;`#Spawn a getty on Raspberry Pi serial line&#13; T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;変更後&lt;/p&gt;&#10;&lt;pre&gt;`#Spawn a getty on Raspberry Pi serial line&#13; #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;終わったらrebootします。&lt;/p&gt;&#10;&lt;h4 id="raspberry-pi-2--raspbian-jessieの場合"&gt;Raspberry Pi 2 + Raspbian Jessieの場合&#10;&lt;/h4&gt;&lt;p&gt;systemctlコマンドを用います。（参考：「&lt;a class="link" href="https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/using-uart-instead-of-usb" target="_blank" rel="noopener"&#10; &gt;Using UART instead of USB | Adafruit Ultimate GPS on the Raspberry Pi | Adafruit Learning System&lt;/a&gt;」）&lt;/p&gt;&#10;&lt;pre&gt;`sudo systemctl stop serial-getty@ttyAMA0.service&#13; sudo systemctl disable serial-getty@ttyAMA0.service&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;終わったらrebootします。&lt;/p&gt;&#10;&lt;h4 id="raspberry-pi-3--raspbian-jessieの場合"&gt;Raspberry Pi 3 + Raspbian Jessieの場合&#10;&lt;/h4&gt;&lt;p&gt;Raspberry Pi 3の場合、さらに手順が増えます。まず、Raspberri Pi 2の時と同じように、systemctlコマンドでdaemonを停止および無効化するのですが、ターゲットの名前が違います。&lt;/p&gt;&#10;&lt;pre&gt;`sudo systemctl stop serial-getty@ttyS0.service&#13; sudo systemctl disable serial-getty@ttyS0.service&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;次に、/boot/config.txtに、次の一行を追記します。&lt;/p&gt;&#10;&lt;pre&gt;`enable_uart=1`&lt;/pre&gt;&#13;&#10;&lt;p&gt;そうしたらrebootです。どうやら、Raspberry Pi 3ではBluetoothが内蔵されたことによる影響のようです。&lt;/p&gt;&#10;&lt;article&gt;&#13;&#10;&lt;h2 id="各種プログラム"&gt;各種プログラム&#10;&lt;/h2&gt;&lt;p&gt;配線だけしても、通信に手間がかかっては仕方ありません。しかしながら、簡単に読み出すことができます。ここではGPIOピンつまりUART経由で通信を行うものとして、ttyAMA0(Raspberry Pi 3ではttyS0)を叩きますが、USBを使う場合は、/dev以下のtty*を調べて、それらしいものを見つけます。&lt;/p&gt;&#10;&lt;h3 id="cat"&gt;cat&#10;&lt;/h3&gt;&lt;p&gt;catでデバイス名を指定すると、内容が出力されます。Unixの強さを見せつけられる思いです。読み出すだけなので、もちろん対話的な操作はできません。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo cat /dev/ttyAMA0&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="screen"&gt;screen&#10;&lt;/h3&gt;&lt;p&gt;いつまでもにわかな私にとって、screenはbyobuの元という印象でしかありませんでしたが、これでデータを受け取ることができます（参考：「&lt;a class="link" href="http://qiita.com/hideyuki/items/9258f33180d98ad0cb1e" target="_blank" rel="noopener"&#10; &gt;serial - Mac の screen コマンドでシリアル通信 - Qiita&lt;/a&gt;」。対話的な操作も可能です。&lt;strong&gt;終了するときは「Ctrl-a Ctrl-k」と入力&lt;/strong&gt;します。&lt;/p&gt;&#10;&lt;pre&gt;`$ screen /dev/ttyAMA0 9600&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="cu"&gt;cu&#10;&lt;/h3&gt;&lt;p&gt;cu コマンドは今回調べていて初めて知りました。Call up another system だそうです。色々あるものですね（参考：「&amp;lt;エレキジャック: 玄箱PRO (KURO-BOX/Pro),玄柴&amp;gt; &lt;a class="link" href="http://www.eleki-jack.com/Kurobox-pro2/2007/08/cu.html" target="_blank" rel="noopener"&#10; &gt;http://www.eleki-jack.com/Kurobox-pro2/2007/08/cu.html&lt;/a&gt;」）。&lt;strong&gt;終了するときは「~.」と入力&lt;/strong&gt;。マニュアル見る限りバイナリの転送も楽そうなので今度やってみたいと思います。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo apt-get install cu&#13; $ sudo cu -s 9600 -l /dev/ttyAMA0&#13; `&lt;/pre&gt;&#13;&#10;&lt;/article&gt;</description></item><item><title>Chromeで勝手にDEALSが表示されるので、調べたら Webpage Screenshot が犯人でした</title><link>https://hack-le.com/44916824-2/</link><pubDate>Wed, 29 Jul 2015 00:19:10 +0900</pubDate><guid>https://hack-le.com/44916824-2/</guid><description>&lt;p&gt;悲しいです。随分前にスパイウェアだと騒がれていたのですね。&lt;/p&gt;&#10;&lt;p&gt;Amazonやそのほか様々なサイトを見ていると、突然DEALSとかなんとかいう広告が出るようになりました。&lt;/p&gt;&#10;&lt;h2 id="原因と対応"&gt;原因と対応&#10;&lt;/h2&gt;&lt;p&gt;調べていると、知らぬ間にバンドルでついてきた&lt;strong&gt;アプリケーション&lt;/strong&gt;か、そうでなければやはり同様に知らない間にインストールされた&lt;strong&gt;Chromeのエクステンション&lt;/strong&gt;であろうという話でした。OSがOSXであることもあり、アプリケーションであるとは考えづらかったので、Chromeのエクステンションではないかと疑い、全部切ってみました。すると広告が表示されなくなり、やはりエクステンションのどれかが悪さをしていることがわかりました。&lt;/p&gt;&#10;&lt;p&gt;面倒臭いですが、こればかりは原因を突き止めないわけにはいきません。一つ一つONにしてはAmazonで確認していくと、&lt;strong&gt;Webpage Screenshot をONにしたところで広告が再びつく&lt;/strong&gt;ようになりました。これが犯人ということです。&lt;/p&gt;&#10;&lt;h2 id="便利だったのに真っ黒なwebpage-screenshot"&gt;便利だったのに…真っ黒なWebpage Screenshot&#10;&lt;/h2&gt;&lt;p&gt;改めて調べてみると、既に一年以上前からこのエクステンションがスパイウェアであることが判明しており、あちこちで話題になっていることがわかりました（「&lt;a class="link" href="http://blogs.yahoo.co.jp/fireflyframer/33388558.html" target="_blank" rel="noopener"&#10; &gt;Chrome拡張Webpage Screenshotはスパイウェア！ ストアから削除措置 ( ソフトウェア ) - 無題な濃いログ - Yahoo!ブログ&lt;/a&gt;」）。また、よくよく見てみると設定の拡張機能でも、このエクステンションがGoogleのポリシーに違反していることが明記されています。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/1/d/1de146dc.jpg" &gt;&lt;img alt="10" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/1/d/1de146dc-s.jpg"&gt;&lt;/a&gt;&#10;このような状態で、のんきにスパイウェアのエクステンションを使い続けていた自分の阿呆ぶりも悲しいし、便利なエクステンションが一つ使えなくなったことも悲しいし、こういった便利なものを作る技術と目先の良さがありながら、こすく金儲けしている人がいる事実がまた悲しい。買収されてアドウェアを仕込まれるようになることもよくあるそうですね。&lt;/p&gt;&#10;&lt;p&gt;代替のエクステンションを探していますが、どうもこのジャンルは詐欺師に目をつけられやすいのか、はたまた同じか同じような人がつくっているのか、それもまたスパイウェアの疑いがあるとの話があったりして、今少し嫌になっています。Fireshotなるエクステンションについては、今のところそういった話を聞かないので、もう少し落ち着いたら導入を検討しようかと思いますが、なんともなんとも。&lt;/p&gt;&#10;</description></item><item><title>Numpyを入れようとして「python version 3.4 required which was not found in the registry」と怒られた</title><link>https://hack-le.com/44869192-2/</link><pubDate>Fri, 24 Jul 2015 00:06:24 +0900</pubDate><guid>https://hack-le.com/44869192-2/</guid><description>&lt;h2 id="状況"&gt;状況&#10;&lt;/h2&gt;&lt;p&gt;以下の環境で、Numpy 1.9.2 をインストーラからインストールしようとした時、「python version 3.4 required which was not found in the registry」というダイアログが出て先に進めない場合の対処。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;OS: Windows 7 64bit&lt;/li&gt;&#10;&lt;li&gt;Python: 3.4.3&lt;/li&gt;&#10;&lt;li&gt;Numpy: 1.9.2&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Python 3.4.3は公式サイトからmsi形式のインストーラを用いてインストールしたものです。&lt;/p&gt;&#10;&lt;h2 id="原因と対応"&gt;原因と対応&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Numpyが32bit版であるのにPythonが64bit版である場合に起きる&lt;/strong&gt;ようです。具体的には、Pythonのインストーラが python-3.4.3.amd64.msi ではダメで、 python-3.4.3.msi でなくてはいけないということです。したがって、Pythonを適切にインストールしなおせばOKです。&lt;/p&gt;&#10;&lt;p&gt;ところで、エラーメッセージを見ると、レジストリにPythonがないことがエラーの原因であるように見えます。しかし、いざPythonをインストールした後にレジストリエディタで探してみても、それらしいものがない。「&lt;a class="link" href="http://docs.python.jp/3/using/windows.html" target="_blank" rel="noopener"&#10; &gt;3. Windows で Python を使う — Python 3.4.3 ドキュメント&lt;/a&gt;」によれば、HKEY_CURRENT_USER か HKEY_LOCAL_MACHINE の中に \SOFTWARE\Python\PythonCore\version\PythonPath がありそうなのですが、ない。というか、同記事によれば&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Python Home が見つからず、環境変数 PYTHONPATH が指定されず、レジストリエントリが見つからなかった場合、関連するデフォルトのパスが利用されます (例: .\Lib;.\plat-win など)。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;とのことなので、なければないで相対パスが用いられ、問題ないように思えます。&lt;/p&gt;&#10;&lt;p&gt;レジストリにないことが直接の原因なのかどうかは、私の乏しい知識では判然としないのですが、いずれにせよ、32bit版と64bit版のバージョン違いによる齟齬が原因ではあるのだと思われます。&lt;/p&gt;&#10;&lt;h2 id="参考記事"&gt;参考記事&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://stackoverflow.com/questions/24676609/numpy-python-3-4-1-installation-python-3-4-not-found-in-registry" target="_blank" rel="noopener"&#10; &gt;numpy python 3.4.1 installation: Python 3.4 not found in registry - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://docs.python.jp/3/using/windows.html" target="_blank" rel="noopener"&#10; &gt;3. Windows で Python を使う — Python 3.4.3 ドキュメント&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>iPod touchがディスコンにならず嬉しい</title><link>https://hack-le.com/44861074-2/</link><pubDate>Thu, 23 Jul 2015 00:02:53 +0900</pubDate><guid>https://hack-le.com/44861074-2/</guid><description>&lt;p&gt;いまさらな話題ではありますが、iPod touch 第6世代が発売されました。なかなかパワーアップしており、iPhone5S以上iPhone6以下くらいのパフォーマンスであるようです。&lt;/p&gt;&#10;&lt;h2 id="なかなかのパフォーマンス"&gt;なかなかのパフォーマンス&#10;&lt;/h2&gt;&lt;p&gt;グラフィックについては、解像度のためか一部iPhone6よりも高いベンチマークを記録しており、ゲームにうってつけだと、ある意味もっとも厳しい目をしているその筋からも概ね好意的に評価されています。Apple Onlineストアでは128GBがあるのも、iPod Classicのディスコンで発生しただろう難民を少し救っているはず。&lt;/p&gt;&#10;&lt;h2 id="値頃なiosデバイス"&gt;値頃なiOSデバイス&#10;&lt;/h2&gt;&lt;p&gt;円安の影響が大きいとはいえ、今やiPhoneは10万超えが当たり前になりました。そこへSIMが挿せないとはいえ、しっかりとしたCPUをもった小型のiOSデバイスを3万足らずから高くても53500円(128GB)ほどで手にいれられるのは有り難いことです。&lt;/p&gt;&#10;&lt;p&gt;私は現在iPhone 5をiPod touchとして使っていますが、もしこれが使えなくなった場合、iPod touchに乗り換えることで無難に乗り切ることができるでしょう。まぁいざその時になれば、多少高くともやはりiPhoneを、と思うかもしれませんが。iPod touchにないものとして、SIMのほかに指紋認証とGPSがあります。どちらもなかなかどうして便利なものです。&lt;/p&gt;&#10;&lt;h2 id="4インチが欲しい"&gt;4インチが欲しい&#10;&lt;/h2&gt;&lt;p&gt;iPhoneは現在4.7インチと5.5インチと、比較的大型のものしかありませんが、今後また4インチのiPhoneも復活するのではないかと言われています。私は手が小さく、4インチのiPhoneと5インチのXperiaを両方ともつかった結果、やはり4インチのデバイスが一つ欲しいと思いましたので、次のiOSデバイスもそうしたいところです。&lt;/p&gt;&#10;&lt;p&gt;（追記）2016年3月、4インチのiPhone SEが発表されました。&lt;/p&gt;&#10;&lt;p&gt;もし4インチのiPhoneがでれば、値段のことさえ考えなければそれが一番良いに決まっています。まぁ、実際は考えないわけにはいかないので、選択肢としてiPod touchが出てきたのは心強いですね。&lt;/p&gt;&#10;&lt;p&gt;ところで、最近Raspberry Piをよくいじっています。iOSデバイスとの連携事例もよくあるので、これを使って面白いロボット工作などしたいなと思う今日この頃です。不器用なので電子工作はどうにも不得手ですが、Raspberry Piなら簡単な試作なら私でもあっという間にできてしまう。嬉しいことです。&lt;/p&gt;</description></item><item><title>DRMフリーの電子書籍ストア</title><link>https://hack-le.com/40057753-2/</link><pubDate>Tue, 21 Jul 2015 06:49:56 +0900</pubDate><guid>https://hack-le.com/40057753-2/</guid><description>&lt;p&gt;私が知っている範囲で、DRMフリーのストアを紹介します。追記：調べてみるとまとめページもそこそこあるようなので、このページももうよいかなぁと思う今日この頃ですが、すべてまとまっているページというのもなかなかないらしく。&lt;/p&gt;&#10;&lt;p&gt;2017/12/06：オーム社が2018/01/31にサービス終了予定、ラムダノート株式会社追加、ブックパブ記述変更&#10;2017/07/21：Optronics eBookを追加&lt;/p&gt;&#10;&lt;h2 id="drmフリーの電子書籍ストア"&gt;DRMフリーの電子書籍ストア&#10;&lt;/h2&gt;&lt;p&gt;ざっと見ていきましょう。&lt;/p&gt;&#10;&lt;h3 id="o"&gt;&lt;a class="link" href="http://www.oreilly.co.jp/ebook/" target="_blank" rel="noopener"&#10; &gt;O&amp;rsquo;Reilly Japan Ebook Store&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;ソフトウェア系の技術者で知らない人はいないオライリーです。pdfのほかepubを用意していることが多く、さらに紙の本よりも20%安い。品揃えも申し分なくさすがの一言です。無料の本もありますね。epubは嬉しいんですが、epub読めるアプリってあまりないんですよねぇ…。&lt;/p&gt;&#10;&lt;p&gt;本家アメリカでは不穏な動き。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://internet.watch.impress.co.jp/docs/yajiuma/1068373.html" target="_blank" rel="noopener"&#10; &gt;【やじうまWatch】 米オライリーがDRMフリーの電子書籍の販売を停止、サブスクリプション制に移行へ - INTERNET Watch(2017/7/3)&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;サブスクリプション制ですか……。オライリーの本は辞書的に使うことが多いので、案外有りかもしれません。&lt;/p&gt;&#10;&lt;h3 id="gihyo-digital-publishing"&gt;&lt;a class="link" href="https://gihyo.jp/dp" target="_blank" rel="noopener"&#10; &gt;Gihyo Digital Publishing&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;雑誌Software DesignとWEB+DB Pressの技術評論社です。値段は消費税分くらい紙の本より安いといったところでしょうか。品揃えは微妙と書いていましたが、最近良くなってきた感があります。なんといってもSoftware Designがある。たまにここで本を買っています。&lt;/p&gt;&#10;&lt;h3 id="tech-village-cq出版株式会社"&gt;&lt;a class="link" href="http://cc.cqpub.co.jp/lib/" target="_blank" rel="noopener"&#10; &gt;Tech Village CQ出版株式会社&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;トランジスタ技術やInterfaceを抱えるCQ出版です。いつの間にかInterfaceが電子化されているではありませんか！これは嬉しい。トラ技もトラ技Jr.など限定定期に電子かが進んでいますね…さぁ次はトラ技！（あの高い年間まとめCDがあるから躊躇っているのかもですが、CDは買わないけどこのpdfなら買う人は多いんじゃないかと思いますよー）&lt;/p&gt;&#10;&lt;p&gt;やり直しのためのシリーズがあって嬉しいです。&lt;/p&gt;&#10;&lt;h3 id="達人出版会"&gt;&lt;a class="link" href="http://tatsu-zine.com/" target="_blank" rel="noopener"&#10; &gt;達人出版会&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;主にIT系の書籍があります。委託出版だけでなく、ここにしかない自前の書籍があることが特徴です。意志を感じますね。でも最近あまり元気がない感じです。検索にGoogleカスタム検索を用いており割り切ってるなぁと思います。たしかに必要十分かもしれません。Ubuntu Server 実践バイブルが紙の本の後しばらくしてからここで電子書籍が販売され、ちょっと悲しかったです。新刊遅らせは電子書籍にありがちな悪習の一つだと思います。これは別に達人出版会が悪いわけではありませんが…。&lt;/p&gt;&#10;&lt;h3 id="翔泳社"&gt;&lt;a class="link" href="http://www.seshop.com/product/327/" target="_blank" rel="noopener"&#10; &gt;翔泳社&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;品揃えが微妙過ぎて利用したことがありません。翔泳社の本自体には、欲しい本もあるのですが、ここにはだいたいない。なぜ自前のストアがあるのに、BookLiveとかで委託販売するのでしょう？といっても、自前のストアの集客力という現実もあるので、商業的には作っているだけマシかもしれません。が、少なくとも、わざわざコピーガードに触れて「うちはそんなことはしない！」と宣言するオライリーやCQ出版等とは違うスタンスであることは確かのようです。&lt;/p&gt;&#10;&lt;h3 id="ラトルズネット"&gt;&lt;a class="link" href="https://www.rutles.net/" target="_blank" rel="noopener"&#10; &gt;ラトルズネット&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;Raspberry PiやBeagle Bone、Arduinoといったシングルボードコンピュータの解説書やAppleの新言語Swiftの解説書など、モダンなIT関係の書籍を多く出版しています。会員登録してラトルズネットから直接通販すると、紙の書籍にくわえて電子書籍版のダウンロード権がついてくるという素晴らしいサービスを展開しています。もちろん電子書籍も購入可能。そういえば以前、「ボクのArduino電子工作ノート」を購入した時、限定の特別付録でしたがPDFのCDがついてきました。&lt;/p&gt;&#10;&lt;h3 id="技術書出版ラムダノート株式会社"&gt;&lt;a class="link" href="https://www.lambdanote.com/" target="_blank" rel="noopener"&#10; &gt;技術書出版ラムダノート株式会社&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;まだ数は少ないですが、IT系の専門的な書籍が売られています。元オーム社eStoreを運営されていたスタッフの方が運営されているそうで、そのへんの事情は「&lt;a class="link" href="http://www.geekpage.jp/blog/?id=2017-12-1-1&amp;amp;utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A&amp;#43;geekpage%2FmzPK&amp;#43;%28Geek%E3%81%AA%E3%81%BA%E3%83%BC%E3%81%98%29" target="_blank" rel="noopener"&#10; &gt;オーム社電子書籍直販サービス終了に関して:Geekなぺーじ&lt;/a&gt;」の記事が詳しいです。&lt;/p&gt;&#10;&lt;h3 id="optronics-ebook"&gt;&lt;a class="link" href="http://optronics-ebook.com/" target="_blank" rel="noopener"&#10; &gt;OPTRONICS eBOOK&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;光学系の専門サイト。数は少ないが専門サイトなので問題ないか。光学系は自社で独自展開しているところが多い気がします。&lt;/p&gt;&#10;&lt;p&gt;書籍のPDF版を購入できますが、一部コピー等には制限がありました。&lt;/p&gt;&#10;&lt;h3 id="明治図書の電子書籍---明治図書オンライン"&gt;&lt;a class="link" href="http://www.meijitosho.co.jp/book/ebook.asp" target="_blank" rel="noopener"&#10; &gt;明治図書の電子書籍 - 明治図書オンライン&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;私は利用していないのですが、主に教員向けの本があります。DRMフリーであることをハッキリと謳っています。なるほど、DRMを苦々しく思っているのは理想主義的なソフトウェア方面の人ばかりではなく、こういった人たちもあるのですね。DRMがかかっていれば教材配布のためのコピーもままなりません（たしか著作権法でも学校での限定された使用はOKでしたね）。まだあまり揃っていませんが、意志を感じるので今後に期待したいところです。&lt;/p&gt;&#10;&lt;h3 id="電子書籍ファンのための出版社直営電子書籍モールブックパブ"&gt;&lt;a class="link" href="http://bookpub.jp/" target="_blank" rel="noopener"&#10; &gt;電子書籍ファンのための出版社直営電子書籍モール「ブックパブ」&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;以前は雑多な電子書籍サイトという感じでした。で、一時サービスが利用できなくなってサービス終了？という噂もあったのですが…（参考「&lt;a class="link" href="https://internet.watch.impress.co.jp/docs/yajiuma/1062295.html" target="_blank" rel="noopener"&#10; &gt;【やじうまWatch】 サービス消滅か？ DRMフリーの出版社直営電子書籍ストア「ブックパブ」が利用不能に - INTERNET Watch&lt;/a&gt;」）&lt;/p&gt;&#10;&lt;p&gt;久々に見てみたら、トップセールが波動光学の本というものすごくマニアックなサイトになっていました。&lt;/p&gt;&#10;&lt;h2 id="終了したところ"&gt;終了したところ&#10;&lt;/h2&gt;&lt;p&gt;残念ながら終わってしまったところ。&lt;/p&gt;&#10;&lt;h3 id="オーム社estore"&gt;&lt;a class="link" href="http://estore.ohmsha.co.jp/titles" target="_blank" rel="noopener"&#10; &gt;オーム社eStore&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;ちょっと意外なところがやっていました。ガチガチのソフトだけでなく電気系の本なんかも多いですね。昔プログラミングの線形代数という本を紙で購入したのですが(良書です)、実はpdfでも販売していることを知り悔しい思いをしたものです。pdf版はだいたい20%引きくらいでしょうか。紙とセットでお安くなる、という微妙なサービスが特徴です。紙とセットって需要はあるのでしょうか…？&lt;/p&gt;&#10;&lt;p&gt;※残念ながら、2018年1月31日に販売終了となってしまいました。&lt;/p&gt;&#10;&lt;h2 id="雑感"&gt;雑感&#10;&lt;/h2&gt;&lt;p&gt;ストアは微妙な使い勝手と微妙な品揃えというところが多いです。別に電子出版・販売が専業ってわけではないので仕方ないのですが。むしろ利益というより、ソフト系としてあるべき姿のためになんとかやっているという感があります。DRMフリーでKindleクラスのストアができれば…現状厳しいですね。Kindleといえば、今回紹介しませんでしたが、KindleでもDRMフリーの本はあります。多分個人出版的なやつがたいていだと思いますが…。&lt;/p&gt;</description></item><item><title>HPのProCurve 2510-G でスパニングツリーをONにする</title><link>https://hack-le.com/44837776-2/</link><pubDate>Mon, 20 Jul 2015 19:08:44 +0900</pubDate><guid>https://hack-le.com/44837776-2/</guid><description>&lt;p&gt;HPはネットワーク機器も出していたんですね。「&lt;a class="link" href="https://en.wikipedia.org/wiki/ProCurve" target="_blank" rel="noopener"&#10; &gt;ProCurve - Wikipedia, the free encyclopedia&lt;/a&gt;」によると、2010年からとのことで、ここ数年の話のようです。大掛かりな買収劇も絡んでいるようで、その業界ではけっこうな騒ぎだったのでしょうか。このあたりの事情には疎いのでわかりかねますが、HPとネットワーク機器は個人的にはあまり結びつきません。しかし、なかなか立派なものがある様子。&lt;/p&gt;&#10;&lt;h2 id="procurve-2510g"&gt;Procurve 2510G&#10;&lt;/h2&gt;&lt;p&gt;HPの高機能なL2スイッチであるProcurve 2510Gをいじる機会が得られました。あまりこういった機器を取り扱ったことがなかったので、L2スイッチなのにDHCPでIPアドレスが割り当てられ、VLANが切れることに単純に驚きました。確かにハブ同士をつないでネットワークを構築する昨今、単純なイーサネットの規格では運用は難しいということなのでしょう。&lt;/p&gt;&#10;&lt;p&gt;今回、ループを検出し、動的に不必要なポートをブロックするスパニングツリーの機能をコンソールからONにする手順と、その動作確認をメモします。なお、初期設定ではOFFになっています。&lt;/p&gt;&#10;&lt;h2 id="ケーブル接続かtelnetでログイン"&gt;ケーブル接続かTelnetでログイン&#10;&lt;/h2&gt;&lt;p&gt;2510GはDHCPでIPが割り当てられるので、DHCPサーバーに繋がっていればIPアドレスを調べることで、telnetで接続することができます。その場合はtelnetで入ったほうが楽でしょう。IPアドレスを調べるのが難しい場合や、DHCPでIPアドレスが付与されない場合、ケーブル接続が必要です。ケーブルはDB9 - RJ45、つまりいわゆるシリアルとLANケーブルのコネクタのものです。USBしかないPCでは、さらにシリアル-USB変換をしてしまいます。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B005F7LN4K" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B007SI18VW" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="スパニングツリーの設定"&gt;スパニングツリーの設定&#10;&lt;/h2&gt;&lt;p&gt;接続後、まずプロンプトを確認します。プロンプトが &amp;gt; の場合、enable コマンドを実行することで、豊富なコマンドが扱える拡張モードになります。その場合、プロンプトが # になります。まぁ、今回の手順では必要なかった気もしますが、enableにしておきます。&lt;/p&gt;&#10;&lt;p&gt;で、 setup コマンドを実行し、Spanning Tree Enabledの項目がYesになっていることを確認し、これをEnableに設定します。&lt;/p&gt;&#10;&lt;pre&gt;`&gt; enable ※既に # になっていれば必要ない&#13; # setup&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/e/8/e8d05a93.png" &gt;&lt;img alt="skitch" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/e/8/e8d05a93-s.png"&gt;&lt;/a&gt;&#10;これで設定は完了です。&lt;/p&gt;&#10;&lt;h2 id="動作確認"&gt;動作確認&#10;&lt;/h2&gt;&lt;p&gt;これだけでは何なので、わざとループを作って、本当にブロックされるのかどうか確認します。今回、ポート1とポート11でループを作成しました。その状態で、 show spanning-tree コマンドを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`# show spanning-tree&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;すると、下記のような画面になります。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/a/e/ae7a2f2f.jpg" &gt;&lt;img alt="skitch" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/a/e/ae7a2f2f-s.jpg"&gt;&lt;/a&gt;&#10;ポート11がブロックされているのがわかります。&lt;/p&gt;&#10;&lt;p&gt;また、この状態でリブートをかけ、logコマンドでログを取得しました。enable を実行していない場合、log コマンドはログアウトになってしまいますが、その場合は show logging でいけるはずです。&lt;/p&gt;&#10;&lt;pre&gt;`# log&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;下記のログのとおり、Port11がスパニングツリーでoffにされたまま、オンラインになっていないのがわかります。ここで、STPとはSpanning-Tree Protocolのことです。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/7/7/778ca8eb.png" &gt;&lt;img alt="log" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/7/778ca8eb-s.png"&gt;&lt;/a&gt;&#10;スパニングツリーをOFFにする場合は、やはりsetupコマンドからSpanning Tree EnabledをNoにすればOKです。&lt;/p&gt;</description></item><item><title>スマートフォンの4インチと5インチの使い分けについて</title><link>https://hack-le.com/44795934-2/</link><pubDate>Sat, 18 Jul 2015 01:59:43 +0900</pubDate><guid>https://hack-le.com/44795934-2/</guid><description>&lt;p&gt;現在私がSIMを入れてモバイルデータ通信端末として利用しているのは5.2インチのSony Xperia Z3です。同時に、前に使っていた4インチのiPhone 5をポケットに入れて持ち歩いています。実質的にはiPod Touchですが。なんだかなぁと思う気持ちもありつつ、この近しい大きさの二つの端末を使い分けているので、その点について書こうと思います。&lt;/p&gt;&#10;&lt;h2 id="ズボンのポケットサイズは4インチがいっぱいいっぱい"&gt;ズボンのポケットサイズは4インチがいっぱいいっぱい&#10;&lt;/h2&gt;&lt;p&gt;予想していたことではありますが、やはりズボンのポケットに入れるという観点からいくと、サイズ、重量の観点から4インチ程度が限界なのではないかと思います。4.6インチのXperia Z3 Compactや、4.7インチのiPhone 6がどうかはわかりませんけれど、少なくとも5.2インチのXperia Z3は大きい。Xperia Z3は画面サイズの割に小型で軽量な端末ですから、裸ないし薄いカバーであればポケットに入ることは入るのですが、どうしてもやや突っ張り気味になります。&lt;/p&gt;&#10;&lt;p&gt;画面は大きいに越したことはありませんが、それは携帯性とのトレードオフでもあります。スマートフォンは特に携帯性の比重が大きなデバイスです。Xperia Z3は、その大きさからスマートフォンとしては決して取り回しの良いものではありません。いわゆるファブレットに片足を突っ込んでいると思います。最初の頃はポケットに入れていたのですが、気が付くと私のポケットにはいつもiPhone 5が鎮座するようになっていました。&lt;/p&gt;&#10;&lt;h2 id="カバンの中のxperia"&gt;カバンの中のXperia&#10;&lt;/h2&gt;&lt;p&gt;ポケットの座をiPhoneに奪われてからしばらく、XperiaはWifiルータになっていました。DocomoのXperiaは、通常MVNOのSIMでWi-fiテザリングはできないのですが、アレコレすると有効化することができます（参考「&lt;a class="link" href="http://app-roid.com/blog-entry-1498.html" target="_blank" rel="noopener"&#10; &gt;ドコモ版XPERIA Z3（SO-01G）でMVNOのIIJmioでテザリングを有効化させる手順 Approid大好き&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;しかし、4インチの画面より5インチの画面のほうが見やすいのもまた事実。特に電子書籍については、4インチと5インチの間には壁があります。特に大きさの固定された自炊本については、4インチは文庫本ならギリギリといったところですが、5インチであれば比較的余裕をもって閲覧することができます。電子書籍を読む人にとっては、この差は大きい。そんなわけで、どうにかこれも活用できないものかと思うようになりました。&lt;/p&gt;&#10;&lt;p&gt;5インチはポケットの中では存在感が有り過ぎるものの、そのコンパクトさから、小さなカバンや、大きなカバンの外側のポケットなどには入りやすいように思えます。それで、そのようにして見たところ、電車などでちょっとした時には、むしろポケットの中からよりも取り出しやすい時が多々あり、自分でも少し驚きました。取り回しの良さはポケットの中が一番だと思っていましたが、椅子に座るとポケットに手を突っ込むより、膝の上のカバンの取りやすいところにあるものを取るほうが便が良い。考えてみれば当たり前のようですが、実際にやってみないとなかなか気づかないものです。&lt;/p&gt;&#10;&lt;p&gt;ポケットにiPhoneを入れて、カバンにXperiaを入れるこの運用方法は、私にまぁまぁ合っているようです。また、Xperia Z3に手帳型のケースをつけ、交通用のICカードを挟むことで、交通機関はICカード、普段の買い物はおサイフケータイ、というようにしてほとんど財布を使わなくてよいようになりました。充電の必要なものが二倍なのはやや手間ではありますが…。AndroidとiOSの両方を使うのも、ガジェットオタク的なところのある私にとっては嬉しいことでした。&lt;/p&gt;&#10;&lt;h2 id="ポケットとカバンに一台ずつ"&gt;ポケットとカバンに一台ずつ&#10;&lt;/h2&gt;&lt;p&gt;できれば、SIMカードはカバンではなくポケット側の端末に入れたいものです。テザリングは電波が途切れるとエラーが出て切れてしまうので、私のように場所柄ちょくちょくと電波の届かないところを移動する身では面倒なことが多い。しかし、私のiPhone 5はソフトバンクで、SIMロックの解除は現在できません…5月以降の端末については義務化もありますが、iPhone 5については望みが薄いでしょう。SIM下駄はいかにも怪しげで苦労ばかりしそうですし、ファクトリーアンロックサービスは高額に過ぎる。であれば、この程度の不便は受け入れなくてはいけないでしょう。実際、街中を歩いているときは、テザリングで困ることはありません。&lt;/p&gt;&#10;&lt;p&gt;カバンの中に端末を入れておく場合、Xperia Z3よりも大型な、ファブレットとされる端末のほうがよりよいかもしれません。5.5インチのiPhone PlusやZenFone 2、6.4インチのXperia Z Ultraなど、良さそうな端末は多くあります。画面が大きいほどウェブサイトや電子書籍は読みやすい。そういった用途の比重が大きい人は、4インチと5,6インチクラスの二つ持ちは悪くない選択なのではないかと思います。&lt;/p&gt;</description></item><item><title>Raspberry Pi のGPIO経由で入力信号を連続的に取得</title><link>https://hack-le.com/44771052-2/</link><pubDate>Fri, 17 Jul 2015 01:58:08 +0900</pubDate><guid>https://hack-le.com/44771052-2/</guid><description>&lt;p&gt;矩形波をRaspberry Pi（以下RPi）のGPIOピンに入力して、それを読み出す手順をメモします。RPi 2を使用しました。シェルスクリプトによる方法と、RPiに標準で入っているRPi.GPIOを使った方法です。&lt;/p&gt;&#10;&lt;h2 id="入力の矩形波"&gt;入力の矩形波&#10;&lt;/h2&gt;&lt;p&gt;入力する矩形波は以下です。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/4/a/4a17af92.png" &gt;&lt;img alt="pps_sh" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/4/a/4a17af92-s.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="gpioピンの確認"&gt;GPIOピンの確認&#10;&lt;/h2&gt;&lt;p&gt;旧型モデルでは26ピン、2ではさらに拡張された40ピンです。配置は「&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;」にあるとおり。今回は基板上の12ピン目、すなわちGPIO18を使用します。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;img alt="300px-Pi-GPIO-header" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/d/7db32eaf.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;引用元：&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;このピンにジャンパワイヤを指して、信号を入力します。絵としては「&lt;a class="link" href="http://shokai.org/blog/archives/8460" target="_blank" rel="noopener"&#10; &gt;橋本商会 » Raspberry PiのGPIOを使う&lt;/a&gt;」にあるような感じです。&lt;/p&gt;&#10;&lt;h2 id="シェルスクリプトによる方法"&gt;シェルスクリプトによる方法&#10;&lt;/h2&gt;&lt;p&gt;シェルスクリプトによる方法は非常に手軽で簡単です。Interface 2012年12月号のRPi特集の記事を参考に、18ピンからの入力を得る方法を書きます。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo su -&#13; $ echo 18 &gt; /sys/class/gpio/export&#13; $ echo in &gt; /sys/class/gpio/gpio18/direction&#13; $ cat /sys/class/gpio/gpio18/value&#13; -&gt; 0 or 1&#13; $ echo 18 &gt; /sys/class/gpio/unexport&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;見るだけでだいたいわかると思いますが、各行の意味を書きます。まず2行目以降のコマンドを実行するために管理者権限が必要です。2行目のexportで18ピンをオープンにしアクセスできる状態にします。次に入力なのか出力なのかを指定し、catで値を得ます。3.3Vなら1、0Vなら0が返ります。終わったら、unexportでクローズ。雑誌だとdirectionとvalueが抜けていますが、誤植でしょう。また、見当がつくと思いますが、出力の場合はinがoutになり、またcatがecho と value のセットになります。&lt;/p&gt;&#10;&lt;p&gt;このままだと値を一度しか得られません。LEDのON/OFFチェックならそれでもよいでしょうが、今回の入力は矩形波なので、連続して取得したいところです。下記に連続的に値を得られるシェルスクリプトを書きます。管理者権限のもとで実行すると、値をひたすら log.txt に出力します。Ctrl-cで終了します。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; set -eu&#13; &#13; PIN=18&#13; &#13; trap "echo ${PIN} &gt; /sys/class/gpio/unexport" 1 2 3 15&#13; &#13; echo $PIN &gt; /sys/class/gpio/export&#13; echo in &gt; /sys/class/gpio/gpio${PIN}/direction&#13; &#13; while :&#13; do&#13; cat /sys/class/gpio/gpio${PIN}/value &gt;&gt; log.txt&#13; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;私の環境だと、だいたい1秒間に180-190点ほど取得しました。しかしながらシェルスクリプトなので、ちょっとした拍子で動作速度が変わるのか、1秒間あたりの取得点数はあまり安定せず、160点ほどになることもありました。次にPythonスクリプトによる例を書きますが、こちらはシェルスクリプトよりも高速で多少安定しています。&lt;/p&gt;&#10;&lt;h2 id="rpigpioを用いたpythonスクリプトによる方法"&gt;RPi.GPIOを用いたPythonスクリプトによる方法&#10;&lt;/h2&gt;&lt;p&gt;Pythonによる方法は色々あって、有名どころではWiringPiなどがあるようですが（「&lt;a class="link" href="https://tool-lab.com/2013/12/raspi-gpio-controlling-command-2/" target="_blank" rel="noopener"&#10; &gt;ツール・ラボ » Raspberry PiのGPIO制御方法を確認する(GPIO制御編その2)&lt;/a&gt;」、RPiには標準でRPi.GPIOなるものが用意されているので、今回はこちらを使いました。主に「&lt;a class="link" href="http://netlog.jpn.org/r271-635/2013/01/raspberry_pi_gpio_test.html" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi GPIO入出力のサンプル（Python, C言語, shellスクリプト） (r271-635)&lt;/a&gt;」を参考にさせていただきました。以下のように使います。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo python&#13; &gt; import RPi.GPIO as GPIO&#13; &gt; GPIO.setmode(GPIO.BCM)&#13; &gt; GPIO.setup(18,GPIO.IN)&#13; &gt; GPIO.input(18)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これも管理者権限が必要なことに注意です。参考リンク先によると、GPIO.BCMは、GPIOピンの番号でセットすることを意味します。RPiの基板上のピン番号で数える場合、GPIO.BOARDであるようです。シェルスクリプトと同様、これだけでは一回こっきりの値しか取れないので、スクリプトを書いてループにします（といっても参考記事のものとほとんど同じなのですが…）。以下です。&lt;/p&gt;&#10;&lt;pre&gt;`# -*- encoding:utf-8 -*-&#13; import RPi.GPIO as GPIO&#13; &#13; PIN = 18&#13; GPIO.setmode(GPIO.BCM)&#13; GPIO.setup(PIN, GPIO.IN)&#13; &#13; print('start\n')&#13; fp = open("log.txt","w")&#13; &#13; try:&#13; while True:&#13; value = GPIO.input(PIN)&#13; fp.write( str(value) + '\n' )&#13; except(KeyboardInterrupt):&#13; fp.close()&#13; GPIO.cleanup()&#13; print('end\n')&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;管理者権限で実行すると、log.txtにログが出力されます。値の取得速度はシェルスクリプトとは段違いで、私の環境だと1秒間に約125000点を取得しました。すなわちだいたい8usに1点取得していると思われます。プラマイ500点くらいの差はありましたが、シェルスクリプトに比べると安定して取得しているように思えます。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;シェルスクリプトで手軽に入力を得ることができます。今回説明をしませんでしたが、出力も簡単です。ある程度高速性を期待するなら、Pythonスクリプトが標準でモジュールも用意されておりお手軽です。C言語で実装すればもう少し早くなるかもしれませんが、苦労のほうが大きいように思います。ただし、レジスタを直接叩けば話は別で、参考雑誌によると、nsecの世界での制御が期待できそうです…が、そこまで速さに拘るならLinuxでやるのは筋が悪いような。ただ、面白そうではあるので、今度やってみようかな。&lt;/p&gt;&#10;&lt;p&gt;ついでに、今回の矩形波ですが、PPS、すなわちPulse Per Secondというやつで、きっかり1秒に1回パルス波を出力します。今回はGPSモジュールから出力しました。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B009KR8S9E" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00P9BVKOK" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Mac mini の電気代が安い</title><link>https://hack-le.com/44753647-2/</link><pubDate>Mon, 13 Jul 2015 20:27:35 +0900</pubDate><guid>https://hack-le.com/44753647-2/</guid><description>&lt;p&gt;最近電気絡みのことを色々と調べていたのですが、そういえば自分のPCの電気代はどれくらいなのだろうとふと思いました。昔一人暮らしをしていた頃、PCをつけっぱなしにするかしないかで電気代が1500円くらいは変わったような気がします。&lt;/p&gt;&#10;&lt;h2 id="測定してみよう"&gt;測定してみよう&#10;&lt;/h2&gt;&lt;p&gt;私が今使っているデスクトップはMac mini 2012。魅力の一つに省エネが上がるのがMac miniですから、それなりに安いのではないかと期待しました。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0089JCIE0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;まぁ計ってみればわかることですから、Amazonでワットチェッカーを1000円ちょっとで購入し、Mac mini 2012に繋ぎ、200時間ほど測りました。すると、2.79 kWh。つまり消費電力15Wにもならない。これには少し驚きました。想像以上の省エネだったのですね。200時間といえば8日強で、これで電気代にして60 - 80円くらいになりましょうか、それならば月の電気代にしても300円ほどではないかと思われます。起動にかかる機材の消耗のほうが激しいのではないかと思わされるほどです。こんなに省エネが進んでいるとは思いませんでした。&#13;&#10;&lt;p&gt;消費電力を観察してみると、だいたい寝かせているときは10W前後で、なにか作業を始めると15-25W程度といったところです。長時間にわたる画像の変換など重い作業をしているときは60Wまで記録しました。&lt;/p&gt;&#10;&lt;p&gt;現在色々あって実家ぐらしなので、電気代については少し気になっていたのですが、さほどでもないということがわかり安心しました。&lt;/p&gt;</description></item><item><title>最近Magic Trackpadが不調、いつの間にかの値上がりに驚く</title><link>https://hack-le.com/44730562-2/</link><pubDate>Mon, 13 Jul 2015 01:59:02 +0900</pubDate><guid>https://hack-le.com/44730562-2/</guid><description>&lt;p&gt;Mac miniで使用しているMagic Trackpadが最近不調です。ポインタがぶんぶんと大暴れすることがちょいちょいとあります。しょっちゅうというほどではないですが、それなりに頻繁です。なんだろうなぁと見てみると、裏蓋が少し浮いています。中の構造がどうなっているのかはわかりませんが、いかにも不具合をきたしそうな感じがします。&lt;/p&gt;&#10;&lt;h2 id="純正は約一万円"&gt;純正は約一万円！&#10;&lt;/h2&gt;&lt;p&gt;元々乱暴に扱っており、反応が悪ければ力を込めてどんどんと叩いたりしていたので、いつのまにやら形は歪んで平行でなくなり、ものとして寿命が近づきつつあるということかもしれません。まだ購入して二年ほどなのですが、やはりものは大事に扱わないといけないですね。そろそろ買い替え時か、と調べてみて驚きました。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B003XKO2LW" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;9300円ですか…。私が二年前に購入した時は6000円弱でした。円安で高くなっていたのはPCばかりではありませんでしたか。考えてみれば当たり前ではあるものの、やはりショックではあります。自業自得とはいえ、10000円近い出費となると気安く買えるものではありません。いっそのこと中古を探そうか？しかし、実際人の手に持ってしかも頻発に使うものの中古となると、その状態はあまりよくなさそうです。&lt;/p&gt;&#10;&lt;h2 id="純正の半値で買えるlogicoolのt651"&gt;純正の半値で買えるLogicoolのT651&#10;&lt;/h2&gt;&lt;p&gt;なんとかならないものかと見てみたら、Logicoolがもう少し安価に同じようなものを発売していましたね。こちらは充電式というのが純正にはない大きなウリであるように思いますが、電池は充電電池を使えばよいだけなので、私としてはさほどアドバンテージでもないかな。本家よりは安いですがこの差をどうみるか。&lt;/p&gt;&#10;&lt;p&gt;追記：下記製品を購入しました→「&lt;a class="link" href="//hack-le.com/45186672-2/" &gt;Mac用トラックパッド T651 購入。BTT使えなかったのですね… : 或る阿呆の記&lt;/a&gt;」。&lt;strong&gt;本製品はBetterTouchToolが使えません&lt;/strong&gt;。注意。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00B3PJ91W" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h2 id="そろそろ感圧が来るはず"&gt;そろそろ感圧が来るはず&#10;&lt;/h2&gt;&lt;p&gt;ここまで書いて思い出しましたが、そういえば、最近Macは感圧式をやりだしました。ということは、感圧に対応したMagic Trackpadが発売される日も近いはず。新しい製品に置き換わるなら、自分としても多少納得できます。本当にどうしようもなくなってしまえば仕方がないですけれど、もうしばらく様子を見ることにします。&lt;/p&gt;</description></item><item><title>夏はキーボードのお掃除（Happy Hacking Keyboard）</title><link>https://hack-le.com/44730412-2/</link><pubDate>Sun, 12 Jul 2015 01:27:51 +0900</pubDate><guid>https://hack-le.com/44730412-2/</guid><description>&lt;h2 id="キーボードのお掃除日和"&gt;キーボードのお掃除日和&#10;&lt;/h2&gt;&lt;p&gt;いい天気だったので（？）、しばらく使わずに埃を被っていたHappy Hacking Keyboard（以下HHKB）の掃除をしました。ここのところAppleの無線キーボードを使っていたのですが、気分転換に。&lt;/p&gt;&#10;&lt;p&gt;Appleのキーボードは非常に気に入っていて、特にやはりMacで使っていると映えるのですが、やはりせっかく3万円も出して購入したHHKBを眠らせておくのはもったいないような気もします。しかしこのHHKB、購入してから禄に掃除もしていなかったので、随分と汚れてしまっていました。まったく可哀想な状態です。せっかくの高級キーボードがこれではかたなしですから、面倒臭い気分を追いやって、掃除することにしました。&lt;/p&gt;&#10;&lt;h2 id="いざお掃除"&gt;いざお掃除&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/9/2/929a1df8.jpg" &gt;&lt;img alt="02" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/9/2/929a1df8-s.jpg"&gt;&lt;/a&gt;&#10;本当に汚いですね。&lt;/p&gt;&#10;&lt;p&gt;とりあえずキートップを引き抜きます。お高いものですし、あまりケチらず治具を使ったほうがよいと思います。そんなに高いものでもないですし。私は下記を使っています。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0047MQJ4I" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;キートップを取る時の感触が好きです。特にHHKBはとてもいい音をたてて気持よく取れてくれます。それにしても、中はさらに汚いですね。髪の毛がこんなに入りこんでいることに驚きです。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/2/c/2c87c054.jpg" &gt;&lt;img alt="11" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/2/c/2c87c054-s.jpg"&gt;&lt;/a&gt;&#10;エアダスターで軽くゴミを吹き飛ばしましたが、しばらく使っていなかったからかあっという間になくなってしまいました。まぁ、どうせ拭き取るのでいいかなと続行。適当なウェットティッシュでつまようじを包み、隅から隅まで汚れを拭きとっていきます。それなりに高級な精密機器にしては、かなり雑な掃除方法ですが。&lt;/p&gt;&#10;&lt;p&gt;本体の掃除もそこそこに、キートップをビニル袋にぶちこんで、水に中性洗剤を入れてガチャガチャします。終わったら適当に水を切って、新聞紙に広げてひなたぼっこです。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/5/1/517c64f1.jpg" &gt;&lt;img alt="21" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/5/1/517c64f1-s.jpg"&gt;&lt;/a&gt;&#10;晴れた夏の日だけあって、一時間もするとすっかり乾きました。&lt;/p&gt;&#10;&lt;p&gt;乾いたらキートップを元の位置にはめ込みます。キートップを取る感触も好きですが、取り付ける時の感触も好きです。面白いようにはめ込まれます。HHKBはメンテナンスもしやすいですね。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/5/6/56f1a191.jpg" &gt;&lt;img alt="掃除後" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/5/6/56f1a191-s.jpg"&gt;&lt;/a&gt;&#10;まぁまぁ綺麗になりました。早速HHKBをPCに繋ぎ、久々の打鍵感を楽しみながら、この記事を書きました。キーボードの掃除日和でした。&lt;/p&gt;</description></item><item><title>12インチ以上の大型のAndroidタブレットが欲しい</title><link>https://hack-le.com/44729540-2/</link><pubDate>Sat, 11 Jul 2015 14:52:15 +0900</pubDate><guid>https://hack-le.com/44729540-2/</guid><description>&lt;p&gt;あまり需要はないのかもしれませんが、12インチ以上の大型のタブレットが欲しいなと思っています。主な用途としては電子書籍です。&lt;/p&gt;&#10;&lt;h2 id="電子書籍用途で大型タブレットが欲しい"&gt;電子書籍用途で大型タブレットが欲しい&#10;&lt;/h2&gt;&lt;p&gt;現在電子書籍の閲覧は、文庫本〜新書クラスのものはXperia（画像ではなくテキストタイプのフロー型のものはiPhoneでもよいですが）、それ以上の大きさのものと見開き表示が大切な漫画はiPadでしています。iPadは9.7インチ、タブレットとしては大きなサイズの部類に入ります。ですので、単ページ表示すればたいがいのものは快適に読むことができます。しかしながら、これが大判の技術書や、A4サイズの資料を長時間睨めっこすることになると、ちょっと厳しいということがあります。そのようなときは横向きにして、だいたいページの半分から3/4くらいを表示するようにするのですが、これが続くともっと大きいタブレットが欲しいと思います。&lt;/p&gt;&#10;&lt;h2 id="12インチ以上のタブレットはあまりない"&gt;12インチ以上のタブレットはあまりない&#10;&lt;/h2&gt;&lt;p&gt;ところが、今のところ10インチの大台を超えるタブレットというのはあまりなくて、まぁたまにVAIO Tap 21やDELLのXPS 18のような20インチ前後という極端なキワモノが出るのですが（これはこれで欲しい…）、12インチ程度の手頃なものとなると、とんと見当たらなくなります。iPad Proの話題をそこそこ見るようになって久しいですけれど、全体的に業界はまだこの大型タブレットに対しては及び腰のようです。もしiPad Proが発売されて、それがそこそこ売れるようであれば、雨後の筍のごとく12,13インチクラスのものが発売されるようになるのでしょうけれど……。ソニーあたりが、こんなときこそiPad Proに先駆けて大型タブレットの形を提案してくれないだろうかと思ったりもします。とはいえ、あったとしても、OSの縛りがある以上出来ることは限られていると思いますし、どこかのキャリアからしか発売されない、という風になってしまいそうです。Xperia CompactのSIMフリー版が発売されたりと、少しずつ脱却の兆しは見えつつあるものの、世界の動きを見るとそのスピード感はややのんびりしているようにも思えます。&lt;/p&gt;&#10;&lt;h2 id="lenovoがんばる"&gt;Lenovoがんばる&#10;&lt;/h2&gt;&lt;p&gt;現状ではLenovoが13.3インチという驚くべきサイズのタブレットを出しています。Amazonがだいたいお安いのですが、よく品切れになっています。今は品があるようで、Lenovoはちょうど3000円のキャッシュバックキャンペーンを行っているので、ちょっとときめいています。解像度が2560x1440なのはいいですね。ただ、CPUにやや不安感あります。特に電子書籍は、意外と処理能力が必要なものの一つなので…。しかしながら、こういったところでチャレンジングな製品を出すのはメーカーとして好感度が高いですね。Thinkpadブランドも継承していますし、中華メーカーではありますが、個人的には印象のよいメーカーです。といいつつLenovo製品もってないんですが……。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00OCHGG46" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;他に恵安なる中華メーカーも13.3インチのものを出してしいるようですが、ほとんど情報がありません。使っている人はいるんでしょうか？お値段はLenovoのものよりも一万円ほど安いもののそれでも現状4万円近くします。解像度はフルHDです。恵安自体が、ある程度覚悟をもって使うメーカーのようですので、このお値段は大分躊躇しますね。この値段差ならLenovoのほうがよいように思います。&lt;/p&gt;&#10;&lt;h2 id="windowsタブレットandroidエミュレータという選択肢もないではない"&gt;Windowsタブレット、Androidエミュレータという選択肢もないではない&#10;&lt;/h2&gt;&lt;p&gt;ところで現状の変わった解決方法としては、比較的大型のタブレットタイプも発売されているWindowsタブレットを購入するという手段もあるでしょう。Windowsは現状あまりタブレットとしての使い勝手はよくありませんが、たとえばSurface Pro 3のような（持っている初代Surface Proがあまり良い出来ではなかったので、BrushUPされているらしいとはいえSurface Proを薦めているわけではありません）、まぁまぁのスペックのものを選べば、Androidエミュレータソフトを使ってAndroidとして使う、といったこともできるはずです。しかし、手間とパフォーマンスを考えると、あまりオススメできるものではないですね。私は初代Surface Proを持っているので、それでAndroidエミュレータを立ち上げることもありますが、やはり動作はそれなりです。そもそも初代Surface Proは10.6インチさしてiPadと変わらず、またワイド画面なので向きによってはiPadよりも画面が狭いので、電子書籍用途では使っていません。Androidの負荷の低いゲームを大型の画面で楽しみたいときに使っています。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、既に大型のWindowsタブレットを持っていれば、こういったやり方も選択肢に入るかもしれません。&lt;/p&gt;</description></item><item><title>Mac mini Late 2012 をFusion Drive化するか悩ましい</title><link>https://hack-le.com/44661080-2/</link><pubDate>Mon, 06 Jul 2015 10:42:13 +0900</pubDate><guid>https://hack-le.com/44661080-2/</guid><description>&lt;p&gt;2016/07/24 追記：Fusion Drive化しました→「&lt;a class="link" href="//hack-le.com/46496771-2/" &gt;Fusion Driveの感触…オススメできる人、できない人&lt;/a&gt;」&lt;/p&gt;&#10;&lt;p&gt;最近 Mac mini の容量が少なくなってきたので、なんらかの対処をしようと考えています。256GBのSSD単体です。容量を増やすか、あるいは中身を整理するかです。&lt;/p&gt;&#10;&lt;h2 id="容量を増やす"&gt;容量を増やす&#10;&lt;/h2&gt;&lt;p&gt;容量を増やす場合、選択肢は3つあります。より大きな容量のSSDに置き換えるか、もう一つSSDを加えるか、HDを加えてFusion Drive化するか、です。&lt;/p&gt;&#10;&lt;h3 id="500gbのssd予算2万円ほど"&gt;500GBのSSD…予算2万円ほど&#10;&lt;/h3&gt;&lt;p&gt;より大きな容量のSSDに置き換えるのは、もっともシンプルで実効性が高く、かつ有用な選択肢といえます。パフォーマンスの低下を心配せず、使い勝手にこれまでと変わるところはありません。SSDの値段も期待されていたほどではないとはいえ、少しずつ熟れてきてはいます。2015年7月現在、500GBクラスのSSDは最安のものであれば20000-230000円ほどで購入することができます。二万円切ることも珍しくないようです。予算として安くはないが高くもないといったところです。また、現在入れている256GBのSSDが手元に一つ浮きます。母のノートPCにでもセットしてあげたら、早くなって喜ぶかな…。外付け化するのも一手ですが、まぁ使わないでしょうし。&lt;/p&gt;&#10;&lt;h3 id="ssdの追加予算1万7000円ほど"&gt;SSDの追加…予算1万7000円ほど&#10;&lt;/h3&gt;&lt;p&gt;SSDを追加するのも一手です。この場合ケーブルを購入する必要があります。だいたい5000円ほどでAmazonで売られています…2000円程度の安いものもありますが、サブマシンならともかくメインマシンですから、ここはケチるところではないでしょう。しかしながら、120GBクラスのSSDは今でも10000-14000円ほどかかるので予算としては先の512GBのものと差があまりありません。となれば、物理ディスクが二つになることで使い勝手にも変化があるでしょうし、あまりよい選択肢とは言えないでしょう。&lt;/p&gt;&#10;&lt;p&gt;なお、ケーブルには下段ベイ用と上段ベイ用があります。どうも初期型は下段についているので上段ベイ用のものが必要で、後期型は上段についているので下段ベイ用のものが必要なようです。自分のMac miniがどちらのものであるかは、「ディスクユーティリティ」より接続IDを確認すると、LowerとかUpperとかあるので、それでわかります。私のものは初期型で、Lowerでした。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00G2T5SVY" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00G2TFL4I" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;h3 id="hdの追加予算5000円ほどサーバー機能追加なら2400円"&gt;HDの追加…予算5000円ほど、サーバー機能追加なら+2400円&#10;&lt;/h3&gt;&lt;p&gt;現在もっとも有望な選択肢であると考えているのが、HDの追加です。HDは元々Mac miniに入っていた1TBのものがあるので、ケーブルのみ購入すればよく、ケーブルは5000円ですから、予算としては比較的安価です。現在1TBのHDはSSDを購入してきたときにキャンペーンでついてきたキットでポータブルHD化していますが、MacBook Airのバックアップ用途くらいにしか使っておりませんので、まぁよいでしょう。MacBook AirのバックアップHDはどうなるのかという問題もありますが、Mac miniにServer機能を追加すれば、TimeMachineサーバーとしてMacBook Airのバックアップも行うことができます。ServerはApp Storeで2400円ですから（円高時代は1700円でしたが）、これを購入したとしても予算は7000円程度でおさまるわけで、他の選択肢と比べるとたいへん安価に済みます。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、パフォーマンスの低下が気がかりです。いかに工夫されたシステムでも、物理的にHDを介在させるわけですから、パフォーマンスの低下は避けられません。ネットで見受けられるFusion Driveの記事は、主にHDからFusion Driveにしたという人が多く、そういった人であれば従来よりもパフォーマンスは上がるわけですから、満足度は非常に高いでしょう。各種ベンチマークは、構成を考えるとあまり意味がありますまい。SSDからFusion Driveに変更し、かつ1年以上運用した人による使用感についてのまとまった記事というのはなかなか見つからず、果たして実際に使ってみてどうなるか。お金をだしてパフォーマンスが下がるというのは、結果によっては後悔することになりそうです。&lt;/p&gt;&#10;&lt;p&gt;でもこれ、面白いですよね。2014年版を見る限り、もはやMac miniにも拡張性は期待できないでしょうから、恐らくは最後の自作的お遊びとして単純にやってみたいという気持ちがあります。&lt;/p&gt;&#10;&lt;h2 id="整理する"&gt;整理する&#10;&lt;/h2&gt;&lt;p&gt;あまり面白いものではありませんが、予算がかからずかつ今すぐできて現実的な方法としては、整理があります。といっても、不要なファイルは既に削除していますから、現実的には、常時繋げている外付けのHDに一部アプリケーションを避難させることになります。&lt;/p&gt;&#10;&lt;h3 id="仮想マシンの避難"&gt;仮想マシンの避難&#10;&lt;/h3&gt;&lt;p&gt;私の構成で現在もっともSSDを逼迫させているのは、仮想マシンです。70GBほど使用しています。これをHDに避難させれば、容量問題については解決ということになります。しかしながら、たまにしか使っていないとはいえ、仮想マシンはできればSSDで動かしたいところです。HDにしたとき、どれくらいパフォーマンスが下がるのか？一度やってみなくてはいけないでしょう。&lt;/p&gt;&#10;&lt;h2 id="気持ちは揺らいでいるがまずは検証か"&gt;気持ちは揺らいでいるがまずは検証か&#10;&lt;/h2&gt;&lt;p&gt;あれこれと書いてきましたが、多分私は単純にFusion Driveにしてみたいのでしょうね。ここしばらくPC関係でほとんど買い物をしていないので、私のオタク心が満たされていません。とはいえ必要のないものに無駄に金を使うのも嫌ですから、まずは仮想マシンを避難させてみて、パフォーマンスがどうなるかの検証ですね。&lt;/p&gt;</description></item><item><title>PCスペック停滞の中で Mac mini 2012 はまだまだ健闘する</title><link>https://hack-le.com/44583131-2/</link><pubDate>Sun, 28 Jun 2015 14:30:36 +0900</pubDate><guid>https://hack-le.com/44583131-2/</guid><description>&lt;p&gt;いつのまにか、しれっとMac miniが値上げされたようです（「&lt;a class="link" href="http://iphone-mania.jp/news-72336/" target="_blank" rel="noopener"&#10; &gt;Apple、Mac miniに最大1.2万円の大幅値上げを敢行！ - iPhone Mania&lt;/a&gt;」）。一ヶ月以上前の出来事なので、いまさらではありますが。&lt;/p&gt;&#10;&lt;p&gt;為替を反映させた結果なので、値上げと言ってしまうのは違うかもしれませんが、ミドル級が税込みで9万円近くですか。なかなかの高価格ですね。吊るしの店頭価格はもう少し安く、8万円ほどのようです。それでも8万円。ふうむ、ですね。なかなか、インパクトがあります。&lt;/p&gt;&#10;&lt;p&gt;Mac mini 2012が発表された時、私は幾分ガッカリな印象を受けたのですが、まったくもって私は阿呆だったなぁと思います。現実には私が2012年におけるもっとも素晴らしい買い物であったと今となっては言うことができます。このマシンを6万円足らずで購入できました。本当に為替の影響は大きい。SSD 256GBを17000円、メモリ16GBを5000円で換装させることもできました。さすがにSSDは当時より多少熟れた価格になっているものの、メモリは当時より高騰して現在12000円ほどかかるようですから、総合的には今よりもローコストで拡張できたことになります。また、入っていた1TBのHDは、購入したSSDにキャンペーンでついてきた内蔵HDのポータブルHD化ケースに入れて、今私の唯一のお手頃サイズポータブルHDとして活躍中です。コンピュータ好きには良い時代でしたね。&lt;/p&gt;&#10;&lt;p&gt;それにしても、昨今のPCスペック停滞を考慮に入れても、まさか2014年の待ちに待ったニューモデルでCPUがデュアルコアになるとは思いませんでした。これは多くのファンをガッカリさせたことでしょう。2012年モデルについての印象を改めた私も、2014年モデルにはやはり軽い失望を覚えましたし、この印象については2015年現在変わっておりません。さらにメモリの半田付けで拡張性も下がっています。元より円安と、そもそもメモリが安くない昨今、自力換装をしてもあまりお得感はないかもしれませんが、これからどんどんこのような方向に進むのかと思うと、かつては自作マシンも組んでいた身としては非常に寂しいですね。&lt;/p&gt;&#10;&lt;p&gt;2015年もPCに大きな変化はなさそうです。少なくとも3年使えたらいいなと思っていたマシンでしたが、それが2015年現在でも最前線とは。仮想マシンなどのために容量が256GBでは心許なくなってきたので、SSDを512GBに入れ替えたいなぁという欲求はありますが、本当にそれくらいです。冗談抜きで本当にあと5年は余裕で使えてしまうのではないかと思わせます。Oculus Rift など、ハイスペックを要求する興味深いハードウェアも出てきているので、ひょっとしたらそういった理由から上位のマシンを購入することはあるかもしれません。Oculus Riftは今のところOSXに対応しておらず、Mac Proでもなければ使えそうにないのです。もっとも、ゲームに最適化されていないAMDのGPUでは厳しいだろうとの記事も見受けましたが（「&lt;a class="link" href="http://www.macworld.com/article/2922722/no-oculus-rift-for-the-mac-but-your-mac-couldnt-handle-it-anyway.html" target="_blank" rel="noopener"&#10; &gt;No Oculus Rift for the Mac, but your Mac couldn’t handle it anyway | Macworld&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;マシンを長く使えることは、環境にももちろんオサイフにも良いことなのですが、なんだか物足りなさを感じてしまうのは、これも性というやつでしょうか。より低消費電力ですし、何をするかによっては新型も悪くないとは思います。旧型はもう3年前のモデル…。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00OLBDJXO" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B009X5EJSC" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Pythonでプロセスの優先度を設定する(クロスプラットフォーム)</title><link>https://hack-le.com/44523295-2/</link><pubDate>Tue, 23 Jun 2015 10:13:43 +0900</pubDate><guid>https://hack-le.com/44523295-2/</guid><description>&lt;h2 id="準備"&gt;準備&#10;&lt;/h2&gt;&lt;p&gt;WindowsとUnix環境の両方で、プロセスの優先度を下げるPythonのスクリプトです。つまりWindows、Mac、Linuxのいずれでも動くように。psutilを使うので、pipでインストールしておきます。&lt;/p&gt;&#10;&lt;pre&gt;`$ python -m pip install psutil&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="サンプルコード"&gt;サンプルコード&#10;&lt;/h2&gt;&lt;p&gt;下記のコードは、実行するPythonスクリプトの優先度を下げます。&lt;/p&gt;&#10;&lt;pre&gt;`# -*- coding:utf-8 -*- &#13; def lowpriority():&#13; import os&#13; import platform&#13; import psutil&#13; &#13; proc = psutil.Process( os.getpid() )&#13; if platform.system() == 'Windows':&#13; proc.nice( psutil.BELOW_NORMAL_PRIORITY_CLASS )&#13; else:&#13; proc.nice(19)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;エラー処理とか何もしていませんが。&lt;/p&gt;&#10;&lt;p&gt;BELOW_NORMAL_PRIORITY_CLASS の部分はWindowsで使用するパラメータで、&lt;a class="link" href="https://msdn.microsoft.com/en-us/library/ms686219%28v=vs.85%29.aspx" target="_blank" rel="noopener"&#10; &gt;SetPriorityClass function (Windows)&lt;/a&gt;にあるパラメータ名に変更すると、優先度を下げたり上げたりできます。&lt;/p&gt;&#10;&lt;p&gt;proc.nice(19)はUnix環境で用います。-20が最も優先度が高く、20がもっとも優先度が低いです。&lt;/p&gt;&#10;&lt;p&gt;補足ですが、&lt;strong&gt;子プロセスは親プロセスのnice値を継承&lt;/strong&gt;します。Windowsは確認してませんが多分そうでしょう。&lt;/p&gt;&#10;&lt;p&gt;以下を参考にさせていただきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://stackoverflow.com/questions/1023038/change-process-priority-in-python-cross-platform" target="_blank" rel="noopener"&#10; &gt;Change process priority in Python, cross-platform - Stack Overflow&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://code.google.com/p/psutil/wiki/Documentation" target="_blank" rel="noopener"&#10; &gt;Documentation - psutil - Documentation - A cross-platform process and system utilities module for Python - Google Project Hosting&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>とにかくWindowsにPython3、Numpy、Matplotlibをインストールする手順</title><link>https://hack-le.com/44494445-2/</link><pubDate>Sat, 20 Jun 2015 18:55:49 +0900</pubDate><guid>https://hack-le.com/44494445-2/</guid><description>&lt;p&gt;2016/01/19追記：後日知人より、多少バージョン古くてもいいなら、Windowsだと&lt;a class="link" href="http://winpython.github.io/" target="_blank" rel="noopener"&#10; &gt;WinPython&lt;/a&gt;が楽だと教えてもらいました。私は試していませんがご参考までに。&lt;/p&gt;&#10;&lt;p&gt;本記事では、Windows 7ないし8で、とにかくPython3とNumpy、Matplotlibをインストールするための手順と、ついでにそれまでの試行錯誤について記述します。&lt;/p&gt;&#10;&lt;h2 id="今でも環境構築はたいへん"&gt;今でも環境構築はたいへん&#10;&lt;/h2&gt;&lt;p&gt;最近仕事の関係で、複数のWindowsマシンにPython3、Numpy、Matplotlibの環境を構築することになりました。Pythonは今まで触ってこなかったのですが、使ってみると非常に便利で、ライブラリも豊富で、たいへん素晴らしいですね。しかしコミュニティが活動が活発であることの弊害か、情報の陳腐化も早いようです。特に、環境構築という基本的でありながら古代より人々を悩ませ続けた問題は、未だ解決されないどころか、新旧の情報の錯綜という形でより根深い問題となっているように思います。それでも昔に比べたら楽になっていると思いますけれど。&lt;/p&gt;&#10;&lt;p&gt;というわけで、2015年6月現在、とにかく細かいことはいいから、Windowsに Python3、Numpy、Matplotlib をインストールするんだ、という手順を書きます。&lt;strong&gt;Windowsは7と8&lt;/strong&gt;で試しました。&lt;strong&gt;Python3 としていますが、恐らくPython 2でも問題ありません&lt;/strong&gt;(2.7.9以降であればpipが同梱されているはずなので)。ここに至るまで色々とハマりましたので、参考のためにハマったポイントについても覚えてる限りまとめてみます。pipとかsetuptoolとか、最近はWindowsでもパッケージ管理システムが出てきたということで、Chocolateyとか試したりしたんです…。&lt;/p&gt;&#10;&lt;h2 id="インストール手順"&gt;インストール手順&#10;&lt;/h2&gt;&lt;p&gt;最初に結論として、インストール手順を書きます。まっさらな環境であれば、以下の手順で問題なく環境構築できるはずです。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Pythonの最新版を&lt;a class="link" href="https://www.python.org/" target="_blank" rel="noopener"&#10; &gt;公式サイト&lt;/a&gt;から&lt;strong&gt;32bit版&lt;/strong&gt;をダウンロードする。この際、PATHの設定に注意&lt;/li&gt;&#10;&lt;li&gt;Numpyの最新版を&lt;a class="link" href="http://www.numpy.org/" target="_blank" rel="noopener"&#10; &gt;公式サイト&lt;/a&gt;からダウンロードする&lt;/li&gt;&#10;&lt;li&gt;python -m pip をアップグレードした後(しなくてもいいとは思うが)、python-dateutil, pytz, tornado, pyparsing, matplotlib をインストールする&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;1番について。だいたいどのサイトでも解説されているので大丈夫と思いますが、PATHの設定を忘れずに。インストール時に、バツになっているPATHの設定っぽいところを、OKにしてやると自分でしなくて済むと思います。また、64bit版を入れるとNumpy導入時にエラーになります（「&lt;a class="link" href="//hack-le.com/44869192-2/" &gt;Numpyを入れようとして「python version 3.4 required which was not found in the registry」と怒られた : 或る阿呆の記&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;3番について。コマンドを書きますと、以下です。&lt;/p&gt;&#10;&lt;pre&gt;`python -m pip install --upgrade pip&#13; python -m pip install python-dateutil pytz tornado pyparsing matplotlib&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで Python3, Numpy, Matplotlib が使えるようになっているはずです。&lt;/p&gt;&#10;&lt;h2 id="いくつかの引っかかったところ"&gt;いくつかの引っかかったところ&#10;&lt;/h2&gt;&lt;p&gt;色々なサイトを参考にしました。Pythonは活発な活動でどんどん情報が陳腐化しており、そのためにひっかかったところも多くあります。本節では、その中で覚えているところについて記述します。&lt;/p&gt;&#10;&lt;h3 id="pipのバージョンが低くインストールできなかった"&gt;pipのバージョンが低く、インストールできなかった&#10;&lt;/h3&gt;&lt;p&gt;ネット上でよく見かけるpipについての情報は、バージョンが1.5.4だったりします。ネットで見つけた方法で適当に入れると、いまでもpipのバージョンはそうなったりします。しかし、現在pipのメジャーバージョンは7です。つまり6つもメジャーバージョンが遅れているということで、問題が発生します。どうも古いバージョンだと、SSLの関係でエラーが生じるようで、インストールコマンドでエラーが発生しました。現在のバージョンではその問題は解決しているようですが、しかしバージョンを上げるにはやはりpipでインストールコマンドを実行せねばならず、事態は金庫の中の鍵の様相を呈します。&lt;/p&gt;&#10;&lt;p&gt;pipの最新版はどうやってインストールしたらよいのだろうと色々調べて、setuptoolを使うとかeasy_installを使うとか、色々あったのですが、ダメでした（恐らく、このあたりの情報はもう古いのだと思います）。最終的に、python 2.7.9以降、またはpython3以降では標準でついてくるということで、それじゃあ最新のPython使えばそれでOKだったのか、という単純な解決に至りました。これだけ引っかかったのは、最初はOSXで普通にbrewでインストールしてうまくいき、同じようにLinuxのapt-getでもやろうとしたらバージョンが古くて失敗、というところに問題の発端があったりします。&lt;/p&gt;&#10;&lt;h3 id="pipでnumpyがインストールできなかった"&gt;pipでNumpyがインストールできなかった&#10;&lt;/h3&gt;&lt;p&gt;これは多分Windows特有の問題で、というのはNumpyのインストールにWindowsではVC++ 10.0のコンパイラが必要なんですが、どうもそこに問題があるようで。自分の場合、どう考えても入っているはずなのですが、何度やってもうまくいかず、結局、公式サイトにあるバイナリのパッケージを使ってインストールする、ということになりました。OSXやLinuxでは、普通にpipでNumpyをインストールできました。&lt;/p&gt;&#10;&lt;p&gt;Windowsでも、できればpipでNumpyをインストールしたくて粘ったのですが…。というのは、最近はWindowsでもパッケージ管理ソフトが出ていて、その名もChocolateyですが、これを使おうという野望がありました。これでPythonをインストールして、他はpipでインストールできれば、コマンドラインだけですべて完結して、スマートだなぁと思ったのです。が、色々面倒くさくて、結局諦めました。そしてPythonをChocolateyでインストールすると、Numpyをバイナリパッケージでインストールするときに、パスの設定とかがあって面倒臭かったので、Pythonも公式サイトのバイナリから入れることにしました。&lt;/p&gt;&#10;&lt;h3 id="matplotlibの公式サイトのバイナリパッケージで失敗"&gt;Matplotlibの公式サイトのバイナリパッケージで失敗&#10;&lt;/h3&gt;&lt;p&gt;これはNumpyとは逆で、公式サイトにあるMatplotlibのバイナリパッケージからインストールすると、これがインストールで失敗したのか、importで失敗したのか記憶が曖昧なのですが、うまくいきませんでした。恐らく、pipでインストールしたものの中で足りないものがあるのだと思います。なので、条件さえきちんと整えれば、公式サイトのパッケージからインストールして問題ないと思いますが、私の場合は、最終的にpipを使ったインストールに落ち着きました。まぁ、できればpipを使ったほうが管理の面からいってもいいですしね。&lt;/p&gt;&#10;&lt;h3 id="便利だけど苦労もあるクロスプラットフォーム"&gt;便利だけど苦労もあるクロスプラットフォーム&#10;&lt;/h3&gt;&lt;p&gt;Pythonを使えばWindows、OSX、Linuxのいずれでも同じように動かせることができてたいへん便利なのですが、私の場合Python初心者にも関わらずあちこちのプラットフォームで同時に色々やったのが仇になったような気がします。しかし、勉強になりました。Python、とても便利ですね。最初C++で実装するつもりだったのですが、Pythonを選んで正解でした。Numpyを使えば、Pythonの利便性とC並の速さが手軽に実現できる…学生時代に経験したmalloc地獄を味合わずに済みました。&lt;/p&gt;</description></item><item><title>1PasswordとLastPassを併用し、両者のサービスを比較検討する</title><link>https://hack-le.com/44392677-2/</link><pubDate>Thu, 11 Jun 2015 20:32:05 +0900</pubDate><guid>https://hack-le.com/44392677-2/</guid><description>&lt;p&gt;2021/03/21追記：この記事はもはや「こんな時代もあったね」という記事でしかありません。時代は変わりました。そして私は今、Bitwardenを使っています。&lt;/p&gt;&#10;&lt;p&gt;追記：この記事は、1Passwordがサブスクリプション始める前、またLastPassがスマホの同期も無料化させる前の記事です。したがって、記事内容には古いところがありますのでご注意ください。追記終わり。&lt;/p&gt;&#10;&lt;p&gt;ここ何ヶ月か、1PasswordとLastPassを併用しています。LastPass使いですが、Parallels Desktopに1Password 5がバンドルされていたので、使うことにしました。ビジネスモデルが違いから、両者のいいとこ取りをすることで少しでもローコストでパスワード管理アプリを使うことが可能になります。&lt;/p&gt;&#10;&lt;p&gt;以下、二つのサービスを併用している身として、結局どちらを使うのがよいかを検討していきます。結論を言うと、それは結局&lt;strong&gt;どちらの思想が自分にとって好ましいか&lt;/strong&gt;という選択に落ち着くと思います。&lt;/p&gt;&#10;&lt;h2 id="前提"&gt;前提&#10;&lt;/h2&gt;&lt;p&gt;私はPCについてはMac OSXを主に使い、時々Windows（最近離れていましたが、Linuxをデスクトップでもまた使おうかという気になっていたり、Chromebookに興味があったり）、タブレットはiPadがメイン、スマートフォンはAndroidとiOSの両方を使っています。したがって、複数台、クロスプラットフォームでサービスを使いたいという立場です。それと、&lt;strong&gt;パスワード管理サービスに金を払う意志があることを前提&lt;/strong&gt;にしています。金を払いたくないのであれば、LastPassで割り切った使い方をする、という選択しかないでしょう。パスワード管理アプリに金を払うことを妥当と考えるかどうかは、両サービスを比較する前の段階の話と言えます。&lt;/p&gt;&#10;&lt;p&gt;追記：冒頭に追記したように、現在はLastPassでスマホを含むマルチデバイスからのアクセスが無料化されました（「&lt;a class="link" href="https://blog.lastpass.com/ja/2016/11/%E3%81%A9%E3%81%93%E3%81%8B%E3%82%89%E3%81%A7%E3%82%82%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B-lastpass-%E3%83%9E%E3%83%AB%E3%83%81-%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%8B%E3%82%89.html/" target="_blank" rel="noopener"&#10; &gt;どこからでも利用できる LastPass : マルチ デバイスからのアクセスが無料に! | The LastPass Blog&lt;/a&gt;」）。スマートフォンでも利用できることは非常に大きく、&lt;strong&gt;LastPassの無料プランで済む人も現在は多くいると思います&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="機能面"&gt;機能面&#10;&lt;/h2&gt;&lt;p&gt;できることについては、もはや両サービスはあまり違いがありません。しかしながら、元々スタンドアロンの1Passwordと、クラウドサービスのLastPassでは、同じ機能を実現するにもそのやり方は違います。また、スタンドアロンなアプリで歴史もある1Passwordには他アプリとの連携という強みがあります。一方Webですべてを完結させるLastPassは、Webブラウザさえ使えればなんでもできるというシンプルさ、簡便さがあります。これは現状サポートの少ないLinuxやChromebookで有難いことでしょう。以下詳述。&lt;/p&gt;&#10;&lt;h3 id="根幹がスタンドアロンアプリな1passwordクラウドサービスなlastpass"&gt;根幹がスタンドアロンアプリな1Password、クラウドサービスなLastPass&#10;&lt;/h3&gt;&lt;p&gt;2015年6月現在、1PasswordとLastPassはお互い競い合っているせいか、パスワード管理アプリとしてできることに違いはほとんど見られないようです。どちらもほどほどの使い勝手で、パスワードの安全な保管、およびその利用については十分です。UIの違いは慣れでしょう。まぁ、&lt;strong&gt;1PassWordであればローカルでの同期ができるという大きな特徴があるので、もしこの機能に絶対の魅力を感じるようであれば、検討なんてする必要はなくて、1Passwordに決まり&lt;/strong&gt;です。ですが、クラウドにパスワードを保存してもよいのであれば（そして2015年現在はそうしたい人のほうが多いと思っています）、できること、という面から見た両者の違いはほとんどなくなります。1PasswordはDropbox経由で保存し、LastPassは専用のサーバーに保存するというだけです。&lt;/p&gt;&#10;&lt;p&gt;しかし、この違いに両サービスの思想的な違いが現れているように思います。1Passwordは元々はローカルでの保存がメインだったように思いますが、クラウド分野についてはDropboxに投げることで、比較的安いコストでクラウド対応し利便性を向上させることに成功したのでしょう。一方LastPassは元からクラウド型のサービスとして、パスワード管理をはじめましたから、その点については自前実装というか、まさにそこがLastPassの頑張りどころなわけです。Dropboxが死んでも1Passwordが死ぬとは限りませんが、LastPassのサーバーに何か大きな事件があったとき、それがLastPassの最期です（小規模の流出事件自体はだいぶ前にありましたが…それよりもっとのっぴきならない事態を想定しています）。&lt;/p&gt;&#10;&lt;p&gt;実装の方法なんぞユーザーには関係がない、といえばそうかもしれません。1Passwordもクラウド保存できて、メジャーなブラウザ用の拡張機能も用意されていて、クラウドの機能についてLastPassと遜色なしです。またLastPassだって、パスワード管理機能そのものについて1Passwordより劣っているということはないのです。しかし、クラウドでの保存が1Passwordは設定の一手間がある一方で、LastPassにはそれがないとか、1Passwordは難しいことはスタンドアロンのアプリで行う一方でLastPassはなんでもブラウザでやらせるとか、UI面での違いに繋がっていると思います。&lt;/p&gt;&#10;&lt;h3 id="一番の違い"&gt;一番の違い？&#10;&lt;/h3&gt;&lt;p&gt;先の話をもう少し広げます。1Passwordがあくまでスタンドアロンのアプリであること、LastPassがクラウドサービスであることからくる違いです。たとえばMacにはAlfredというランチャーアプリがありますが、1Passwordとの連携が可能で、ヘビーユーザーにとってこれはなくてはならない機能であるようです。&lt;strong&gt;他アプリとの連携に魅力を感じる人にとっても、1Passwordで決定&lt;/strong&gt;といえましょう。一方LastPassはあくまでクラウドサービスですから、こういった連携は難しいと思いますが、フルブラウザさえあればなんでもできるということは、LinuxやChromebookといった、あまりサポートされることのないOSでも不便なく使えるということでもあります。&lt;strong&gt;LinuxなどサポートされていないOSでも問題なく使いたいのであれば、LastPassに軍配が上がる&lt;/strong&gt;でしょう。これは&lt;strong&gt;ネイティブアプリ vs Webアプリにも通じる議論&lt;/strong&gt;といえます。&lt;/p&gt;&#10;&lt;p&gt;このあたりは一番の違いといえるかもしれません。まぁしかし、たいていの人はみんなが使うOSを、特に連携とかさせずに使っているでしょうから、そうでないディープな人は自然に自分に必要な方を選択しているのでしょうけれど。&lt;/p&gt;&#10;&lt;h2 id="費用面"&gt;費用面&#10;&lt;/h2&gt;&lt;p&gt;機能面についてたらたらと書きましたが、多くの人にとってはどちらもあまり変わらないというのが実情であったように思います。では次に費用となるのですが、これもまた決定打といえるほどの違いはありません…しかし、その料金の支払い方法についてはかなりビジネスモデルが違い、それは畢竟思想の違いともいえます。以下詳述。&lt;/p&gt;&#10;&lt;h3 id="買い切りの1passwordサブスクリプションのlastpass"&gt;買い切りの1Password、サブスクリプションのLastPass&#10;&lt;/h3&gt;&lt;p&gt;1Passwordは買いきり型のアプリで、5000円やら6000円やら、ソフトウェアを買い慣れない人にとっては法外にも思える価格が敷居をあげます。が、セールが多くもあるので、半額くらいで購入できたり、あるいは私のように他ソフトと抱合せでついてきたり、といったこともあり、そういう場合は比較的安価に入手しやすくもあります。買い切りとはいえ、アプリの性質上アップグレード版がでれば購入せざるを得ないでしょう。一方でLastPassは月額1ドル、年12ドルですから、結局4年ほどで50ドル近く、まぁ1Passwordを普通に買うより多少は安いかなぁ、といったところでしょうか。&lt;/p&gt;&#10;&lt;p&gt;あくまでスタンドアロンであった1Passwordは買いきりの売り方で、一方クラウドサービスであるLastPassには買いきりという概念はなく、毎月あるいは毎年金を払わせるサブスクリプション制なのは、ここにも両サービスの思想の違いが出ていると言えそうです。&lt;/p&gt;&#10;&lt;p&gt;追記：現在は1Passwordもサブスクリプションを導入しています。&lt;/p&gt;&#10;&lt;h3 id="結局どっちが安いのか"&gt;結局どっちが安いのか&#10;&lt;/h3&gt;&lt;p&gt;さて、思想の違いはともかくとしても、結局どっちがトータルで安いのかというと、これは微妙で、&lt;strong&gt;何年かに一度ドバっと金を払うのか、毎月金を払うのかの違いでしかありません&lt;/strong&gt;。まぁあえていえば、&lt;strong&gt;普通に買えばLastPassのほうが少し安い、でもセールやバンドル販売をうまく使えれば1Passwordに分があるかも&lt;/strong&gt;、という結論になります。為替の問題もありますので、今後急激な円安あるいは円高になっても話は変わるかもしれません。急激な為替相場の変動のもたらす影響を思えば、パスワード管理アプリの値動きなんて些細な問題だとは思いますが。&lt;/p&gt;&#10;&lt;h2 id="結論として考え方にピンとくるほうが多分正解"&gt;結論として、考え方にピンとくるほうが多分正解&#10;&lt;/h2&gt;&lt;p&gt;ここまで見てきた、機能面および費用面での違いが大した問題と感じられない場合、両者の選択は非常に悩ましいものとなります。私としては、ブラウザさえ動けばいいLastPassのほうがプラットフォームの融通がきくし、またPCでは無料で初められるので、悩んでどっちがいいのかわからないからどっちも使わないというのであれば、まずLastPassでよいと思います。えーでもなぁと思うのであれば、なんとなく思想的にピンとくるほうを選べばよいのではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;ここまでに書いてきたように、1Passwordの根幹はスタンドアロンのアプリであり、一方LastPassは生粋のクラウドサービスです。1PasswordとLastPassの違いは、結局その違いです。機能の違いも、費用のビジネスモデルの違いも、そのスタンスの違いが元になっています。ですので、パスワード管理という面から見た時、どちらの考え方が自分にとってしっくりくるか、パスワード管理はアプリなのか、サービスなのか、ピンとくるのはどちらなのか、そういう風に考えて決めれば、比較的決めやすいものと思います。なお、私はLastPass派です。&lt;/p&gt;&#10;&lt;h2 id="おまけ二つ併用している感想"&gt;おまけ：二つ併用している感想&#10;&lt;/h2&gt;&lt;p&gt;意味無いです。めんどくさいです。どちらか一つに絞ったほうがいいです。私は元々LastPass使いで、1Passwordが他ソフトのバンドルでついてきたので、二つのビジネスモデルの違いを利用して無料でいろんなプラットフォームで使えるなーと思って使っていますが、金払っていいから片方を使いこなしたほうがいいんじゃないかと度々思います。でも根が貧乏性なので、恐らく当面このままいくでしょう。おかげで比較記事も書けましたし、まぁいろんなソフトを使うことでまとまる考えもある、ということで…。&lt;/p&gt;</description></item><item><title>移動が多いと電子書籍は有難い</title><link>https://hack-le.com/44356706-2/</link><pubDate>Mon, 08 Jun 2015 20:46:09 +0900</pubDate><guid>https://hack-le.com/44356706-2/</guid><description>&lt;p&gt;最近特に移動が多くなってきました。今週などは一日として同じところにはいられない模様です。移動が多いと無駄も多いのですが、車の移動なら英語のリスニング、電車の移動なら読書といった具合に、少しでも無駄を減らしたいものです（実際は車の移動中はだいたい一人カラオケになっているのですが…）。&lt;/p&gt;&#10;&lt;p&gt;移動中の読書となると、やはり電子書籍は強い。いくつもの本をいつでも読める。そのときの気分によって、読みたい本というのは変わります。何か小説を読みたい気分のときもあれば、軽いエッセイを読みたいときもあるし、しっかりとした論説を読みたい時もある。本当にその時々です。実体のある本を、常にそれだけ持ち歩くのは不可能といえます。それが、スマートフォンのような重さ百数十グラムの中にすべて入っているのだから、たいへん素晴らしい。辞書を引いて、調べた言葉の履歴を後で学習することもできる。とても嬉しいことです。&lt;/p&gt;&#10;&lt;p&gt;移動先での学習や調べ物という面でも、電子書籍は素晴らしい。タブレット端末でゆっくりと大判の技術書を読むことができますし、資料集のようなものもかさばりません。以前開いたページを覚えていてくれますし、OCRをかけていれば、あるいは既にPDFやEPUBで売られているオライリーや技術評論社のデータファイルであれば（この二社の技術書はDRMフリーです！自分の好きなリーダーアプリで自由に読むことが可能です）、検索をかけることさえできます。これが非常に便利です。&lt;/p&gt;&#10;&lt;p&gt;もちろん娯楽として、通常であればかさばって持ち歩くことなどできないようなシリーズものの漫画を持って行くことも可能です。漫画はとても好きなのですが、なかなか読む時間がとれていないのが実情です。しかし、電子書籍のおかげでちょくちょくと楽しむことができています。まぁ、できればもっとまとまった時間で楽しみたいのですが…。&lt;/p&gt;&#10;&lt;p&gt;電子書籍の話をすると、いまだに紙でないと読み心地が、といった議論になることもありますが、まず電子書籍は紙ではそもそも読書すらできなかった状況で、読書ができるようになるという面があります。私とて、単純に読書体験のみを取り上げれば、紙の本による読書のほうが好きです。しかし、それは私にとっては既に贅沢な環境になっています。私のように落ち着かない環境の人間にも、読書の光を与えてくれる、0を1にしてくれる。電子書籍がもっと広まることを望みます。&lt;/p&gt;</description></item><item><title>Evernote プレミアムからプラスに移ろうと思う</title><link>https://hack-le.com/44126446-2/</link><pubDate>Sat, 06 Jun 2015 18:00:17 +0900</pubDate><guid>https://hack-le.com/44126446-2/</guid><description>&lt;p&gt;Evernoteは個人的に応援しているサービスです。すべてを記憶する、というキャッチコピーにはたいへん魅力を感じます。まぁ、現実には記憶すると今度は「引き出す」ことが課題になるのですが。闇雲にデータを保存してもまず使いません。そこにEvernoteの難しさがあると思います…が、そのことについては今回は触れません。&lt;/p&gt;&#10;&lt;p&gt;Evernoteはいわゆるフリーミアムモデルというやつで、無料サービスで間口を広くしておき、一部のサービスを特に気に入ってくれたユーザーに有料のプレミアム版を提供することで収益をあげています。私もまたプレミアムユーザーで、毎年Evernoteに4000円を支払っています。そんなEvernoteですが、最近プレミアムとフリーの中間にあたる、新しいプランを提案しました。プラスというやつです。「&lt;a class="link" href="https://evernote.com/intl/jp/pricing/?offer=www_menu" target="_blank" rel="noopener"&#10; &gt;Evernote ベーシックを無料で入手するか、プラス版またはプレミアム版にアップグレードできます。 | Evernote&lt;/a&gt;」によると、月の容量が1GBに増加し、またスマホ版でのオフラインノートブックなどプレミアム機能で特に必要とされやすいものを使えるもので、たいへんよく考えられた、ユーザーのニーズに即したプランだと思いました。利用料はプレミアムの半額にあたる年額2000円、機能を思うとたいへん良いプランです。少なくとも私の必要としているものはプラス版でほぼ満たされます。次の契約からは半分の料金で済みそうです。&lt;/p&gt;&#10;&lt;p&gt;ところで、最近Mac版Evernoteが不安定な気がします。一日に一度は強制終了している印象です。まぁ何か実害があるわけではないのですが…。&lt;/p&gt;&#10;</description></item><item><title>Chromebookの誘惑</title><link>https://hack-le.com/44139497-2/</link><pubDate>Sat, 23 May 2015 01:30:19 +0900</pubDate><guid>https://hack-le.com/44139497-2/</guid><description>&lt;p&gt;AcerのChromebookが気になっています。CB3-111-H12M、メモリは2GBですが、普段はAmazonで26,980円で、時々タイムセールで24,980円にまでなります。とてもとても気になります。&lt;/p&gt;&#10;&lt;p&gt;Chromebookは面白いですね。Chromeだけでいったいどこまでできるのか、実際に使いたいところです。Chromeに特化しているので、マシンスペックの割にはサクサク動き、バッテリーも非常によく持つとのこと。そして何より、通信が最低限であることが確約されているので（つまり、バックグラウンドでデータ通信するようなアプリがないので）、外でテザリングで使うにはうってつけのマシンだといえます。&lt;/p&gt;&#10;&lt;p&gt;けれど私には愛機MacBook Air 2013があります。アプリを絞れば数時間はバッテリーが持つし、Chromeはもちろんそれ以外のスタンドアロンなアプリも使えます。ローカルにファイルもたっぷり保存できます。ハッキリ言って何の問題もありません。通信にしても、Dropboxのフォルダにどでかいファイルでも置かない限りは、ただでさえ余らせているSIMの通信容量、むしろ多めに使いたいくらいです。&lt;/p&gt;&#10;&lt;p&gt;ついでに今月はWithingsのスマートウォッチActivitéを購入しています。思えばChromebookの倍以上しました。私はそんなに贅沢できる身の上ではありません。&lt;/p&gt;&#10;&lt;p&gt;考えれば考えるほどに、私はChromebookを買う必要がない…。2013年以降のMBAは使い方を気をつければ非常によくバッテリーが持ちますから、Chromebookを買う動機はかなり薄れます。それでも欲しいのは、きっと私のオタク心なんでしょうね。今のMBAが使えなくなる頃に、きっと買いましょう。デスクトップはMacを使い続けるでしょうけれど、ノートは工夫次第でなんとでもなるはずですから、少しずつ準備を進めていきたいところです。…自分の生活に合わせてマシンを買うのではなく、マシンを有効に使いたいがために自分の生活を変えようとはまったく本末転倒な話です。にも関わらずなんとなくときめいてしまうのは何故なんでしょうね…。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00TDJBFYE" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>格安SIMで一ヶ月3GBはなかなか多い</title><link>https://hack-le.com/44101891-2/</link><pubDate>Thu, 21 May 2015 03:02:54 +0900</pubDate><guid>https://hack-le.com/44101891-2/</guid><description>&lt;p&gt;IIJmioと契約しています。最低の料金プランでSMS付き、税込み1125円かな。これで使える容量が一ヶ月3GB。有り難いことに、使いきれていません。&lt;/p&gt;&#10;&lt;p&gt;しかしながら、最低料金プランですし、別に使いきらないといけないというわけではないのですが、貧乏性の私はもらえるものを使わないのはなにか損したような気分になります。なので、ちょっと気持ち贅沢に使っているつもりなのですが(時々電子書籍をダウンロードしたり)、全然です。5月も下旬ですが、いまだに4月分に付与された3GBを使いきれていません(バンドルされた容量は2ヶ月間使うことができます)。&lt;/p&gt;&#10;&lt;p&gt;動画を見ないからなのでしょう。私はYoutubeもニコニコ動画も、とにかく動画コンテンツを見ません。理由はいろいろありますが。見たとしても、Wi-fiのある落ち着いた環境下でのみでしょう。携帯回線で見ようとは思いません。そんなわけで、相変わらず4月分の3GBさえまだ使い切れないまま残っています。&lt;/p&gt;&#10;&lt;p&gt;最近出てきたDMMなどは、かなり細かな料金設定を行っているようで、1GB,2GB,3GBと段階的に引上げていくことが可能です。私の場合は2GBくらいが恐らくちょうどよいのですが、しかしまぁ料金がどれだけ変わるかというとせいぜい月々150円かそこらといったところです。SIMを作る料金、手間、また使い切れないほどあるという安心感を考えると、まぁ現状維持が最適解になりましょうか。しかし、かなり限定的にしか使わないことがわかっている人であれば、今後の料金プランとして、3GBがミニマムのIIJよりDMMのほうがよいということはあるのでしょうね。&lt;/p&gt;&#10;&lt;p&gt;いずれにせよ、少し前の通信事情を思うと、たいへん素晴らしい進歩を遂げたものだと思います。&lt;/p&gt;&#10;</description></item><item><title>WithingsのActivitéを購入</title><link>https://hack-le.com/44057347-2/</link><pubDate>Sat, 16 May 2015 18:42:40 +0900</pubDate><guid>https://hack-le.com/44057347-2/</guid><description>&lt;p&gt;最近ヘルスケアにハマっています。ずっと気になっていて、本ブログでも何度か話題にしているWithingsの腕時計型アクティビティトラッカーActivitéですが、先週ついに買ってしまいました。&lt;/p&gt;&#10;&lt;h2 id="購入"&gt;購入&#10;&lt;/h2&gt;&lt;p&gt;Amazonで55,000円ちょっとですから、決して安い買い物ではありません（値段だけで言えば、ヨドバシカメラの61,000+10%ポイントバックのほうが安いでしょう。しかし私はあまりヨドバシカメラを使わないので）。また、7月には廉価版にあたるActivité Popも上陸するだろうという噂でした。そちらならば少なくとも25,000円程度にはなろうというもの。待ってそちらを買おうかなと思っていたのですが、色々思うところあり、Activitéのほうを買うことにしました。廉価版となると恐らく中国か、あるいはアジアのどこかで製造されることになりましょうが、ずっと身につけるものですし、わざわざ待ってそんなものを買うより、ちゃんとしたスイス製のものを買うほうが満足度が高かろうと思ったのです。実際、それは正解でした。廉価版のほうを買っていたら、恐らく後悔していたのではないかと思います。ウェアラブルデバイスにはファッション性があるのが、通常のガジェットとは違う面白いところですね。&lt;/p&gt;&#10;&lt;p&gt;身につけているとなんだか楽しくなってくるので、外を歩いたりランニングしたりするのがたいへん&#10;気持ち良い。なんとなく腕を振って歩きたくなります。またActivitéは睡眠活動も記録しているのですが、いやはや自分の睡眠不足をつきつけられ、これでは昼間眠くなるのも当然だと日常生活についても考えなおさせられました。夜は魅力的な時間ですが、毎日のように夜更かしして得られるものもありますまい。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、健康管理にはオムロンのサービスを使っていましたが、今はもう完全にWithingsに鞍替えです。Withingsにはどういうわけか活動量のインポートがなく（エクスポートはあるのに、謎です）、活動量の移行ができなかったのは残念ですが…。しかしWithingsのアプリは明らかにオムロンのアプリより優秀で、特に体重のグラフで移動平均か何かをデフォルトでしてくれて、体重の増加・減少傾向を常に解析してくれるのは、現状を自分で分析するうえでたいへん有用です。ピンチイン・ピンチアウトでグラフを操作できるのも、スマートフォン対応のアプリとして正しい姿でしょう。オムロンもせっかくハードは良いのだから、もっとソフト・サービス面の向上を期待したいところです…が、Activitéに代わるものが出ることはきっとないでしょうから、私は当分Withingsを使っていくことになりそうです。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00V5PSM1S" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;正規代理店からの販売が開始するのに時間がかかったためか、Amazonで検索すると並行輸入品もヒットします。既に正規代理店で取り扱われていますので、そちらを選ばないように要注意。まぁよくあることですね。&lt;/p&gt;</description></item><item><title>Raspberry Piならテキストよりバイナリか</title><link>https://hack-le.com/44027936-2/</link><pubDate>Thu, 14 May 2015 15:10:35 +0900</pubDate><guid>https://hack-le.com/44027936-2/</guid><description>&lt;p&gt;テキストファイルは便利です。なにしろわかりやすい。単純明快。&lt;strong&gt;csv形式は最高のフォーマットの一つ&lt;/strong&gt;だと思います。あらゆるデータはできるだけcsvで残しておきたいものです。&lt;/p&gt;&#10;&lt;h2 id="人にわかりやすいテキストコンピュータにわかりやすいバイナリ"&gt;人にわかりやすいテキスト、コンピュータにわかりやすいバイナリ&#10;&lt;/h2&gt;&lt;p&gt;しかし&lt;strong&gt;人間にとってわかりやすいものはコンピュータにとってはわかりづらい&lt;/strong&gt;。逆も又然り。コンピュータにテキストファイルを読み込ませるのは存外時間がかかる。もちろんそれが10kB程度のデータであれば何の問題もありませんが、100MBのテキストファイルとなるとどうか。昨今のコンピュータは非常に早いので、それでも問題ないかもしれませんが、やはり一瞬でというわけにはいきますまい。まして最近の小型化の流れ…Raspberry Piのような、そういった小型のコンピュータボードではどうか。なかなか厳しくなってきます。&lt;/p&gt;&#10;&lt;h2 id="raspherry-pi-に相応しいのは"&gt;Raspherry Pi に相応しいのは…&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで&lt;strong&gt;コンピュータに優しいバイナリでのデータ出力というものが必要なのはいまだに変わらず&lt;/strong&gt;。最近Raspberry Pi(以下RPi)で4MB程度のcsvデータを読み込ませたのですが、PythonのNumPyを利用して13秒程度かかりました(RPi、というよりARMではPythonの実行速度がとりわけ遅いという報告もあるようです。実際Rでは3-4秒程度で読み込めた)。これはちょっと厳しい…。それをいったんバイナリデータに変換し(1.6MBになりました)、再度Pythonで読み込んでみると、こちらは60ms。瞬時。&lt;/p&gt;&#10;&lt;p&gt;これはバイナリにせざるを得ないなぁということで、バイナリとなるとデータフォーマットをどうしようか、という面倒臭い問題があります。可読性、汎用性を考えると、独自フォーマットはあまり気が進みません。&lt;/p&gt;&#10;&lt;p&gt;気象系のデータなのですが、気象系ではNetCDFというオープンなフォーマットがであるようなので、そういった標準のものを採用したいところですが、ニッチなジャンルだからか日本語の情報が少なく、調べていくとなかなかしんどそうです。主要な言語でライブラリがあるので、使うだけならすぐできそうですが、得体の知れないフォーマットを使いたくはありませんし、そうなると勉強しないと。float型でデータを吐き出すだけならフォーマットも何もなかろうしそれでもいいかな、とか、いやせっかくなのだからもうちょっと真面目に頑張ろう、とか、悩ましいところです。&lt;/p&gt;</description></item><item><title>オムロンのわたしムーヴからWithingsに体重データを移行…活動量は無理な模様</title><link>https://hack-le.com/43968234-2/</link><pubDate>Sun, 10 May 2015 02:28:04 +0900</pubDate><guid>https://hack-le.com/43968234-2/</guid><description>&lt;h2 id="オムロンからwithingsへ"&gt;オムロンからWithingsへ&#10;&lt;/h2&gt;&lt;p&gt;先日から何度かブログでも話題にしていますが、Withingsの活動量計機能の付いた腕時計、Activiteが気になっています。クールなアナログ時計の外見でありながら、実は中身はガチガチのガジェット。必要な機能のみを搭載し、ボタン電池で8ヶ月動く、なんという壺を押さえたつくりでしょう。お値段約6万円(今は実売55,000円程度が相場のようです)ということで二の足を踏んでいますが、いずれ買ってしまいそうな気がします。&lt;/p&gt;&#10;&lt;p&gt;Withingsのハードウェアを使えば、サービスも当然Withingsのものがよいということになります。Withingsのサービスは評判が良いのですが、やはり実際に自分で使ってみないことにはわかりません。私は現在オムロンの体組成計と活動量計を使用しているので、わたしムーヴにデータがあるのですけれど、これを移行して試してみることにしました。&lt;/p&gt;&#10;&lt;h2 id="わたしムーヴのデータをwithingsのhealth-mateに移行する手順"&gt;わたしムーヴのデータをWithingsのHealth Mateに移行する手順&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;わたしムーヴからは、過去半年のデータについてはcsv形式でエクスポートすることができます&lt;/strong&gt;。半年というのはどうかと思いますが、幸い（？）私が取り込みたいデータはせいぜいここ一ヶ月ちょっとのデータですので、まぁよしです。&lt;strong&gt;WithingsのサービスHealth Mateでは、csv形式で体重・身長・血圧のデータを取り込むことができます。……活動量は？探してみましたが、残念ながらないようです。&lt;/strong&gt; Helpにもちょっと見当たりません。本当に残念です。&lt;/p&gt;&#10;&lt;p&gt;さて、オムロン形式とWithings形式は異なるので、csvファイルを整形する必要があります。これがけっこう違いました。効率よく書き換えるには、正規表現を使えるテキストエディタとExcel等の表計算ソフトがあるとよいでしょう。軽く私の手順を書きます。&lt;/p&gt;&#10;&lt;p&gt;オムロンのcsvでは、日付と時刻が区切られてしまっています。これはあまりよくないですね。テキストエディタで、(/[0-9]{2},) -&amp;gt; \1 (半角スペース) といった風に一括変換しました。 また、&lt;strong&gt;ヘッダは必要ない&lt;/strong&gt;ので削除しました。そのうえで、表計算ソフトでオムロンのcsvファイルを読み込み。Withingsの取り込みに必要な値は日付、体重、脂肪量です。関係のない列はすべて削除。また、記録のない行もすべて削除(オムロンcsvは記録のない日付も出力するという困った仕様です)。日付・時刻の表記はyyyy-mm-ss hh:mm:ssにします。間違えるとアップロード時にエラーが出ます（yyyy-m-ssはOKでしたが、h:mm:ssはNGでした)。さらに注意なのは、Withingsで取り込む脂肪の値は脂肪「量」であって脂肪「率」ではない点です。オムロンは脂肪率で管理していますから、これをいったん脂肪量に変換する必要があります。まぁとはいえこれは表計算の本領発揮、簡単にできることです。以上のことを、オムロンは一ヶ月毎にファイルを吐き出す仕様なので、必要な月分繰り返します（うーんめんどくさい）。&lt;/p&gt;&#10;&lt;p&gt;ということで、日付、体重、体脂肪量、の順番のcsvファイルを作成しました。Mac版のExcelでcsvを作ると、文字コードがSJISで改行コードがCRという昔ながらのアレになっちゃいますが、ここは&lt;strong&gt;恐らくUTF-8とLFの組み合わせが無難でしょう&lt;/strong&gt;。テキストエディタでサクッと変換します。文字コードについてはどうせASCIIデータなのでSJISでも問題ないとは思いますが。あとは、WithingsのHealth Mateより、アカウント名を選択して「設定」→「データをインポートする」より、作成したファイルをアップロードすれば反映されます。&lt;/p&gt;&#10;&lt;h2 id="オムロンとwithings使い勝手の差"&gt;オムロンとWithings、使い勝手の差&#10;&lt;/h2&gt;&lt;p&gt;無事オムロンのデータをHealth Mateに移行できたわけですが、うーん…これはかなり、いやまったく全然違いますね。グラフ表示一つとっても、生データだけではなく、移動平均してるのかどうかしりませんが、トレンドっぽいものを抽出して傾向を出してくれます。なので、その時の値で一喜一憂しなくてよいし、本当に体重が減っているのかどうか、判断しやすいです。アプリもiOS、Androidすべてに対応していて、ちゃんとピンチイン・ピンチアウトでグラフの横軸が変化します。iPadアプリがあるのは嬉しいですね（オムロンはiPadアプリがない！）。さらに、オムロンのわたしムーヴの縦軸は、過去のMAX値が上限になるという仕様でしたが、Withingsのアプリはちゃんと指定した時間内での値をもとに縦軸の範囲を算出してくれます。&lt;/p&gt;&#10;&lt;p&gt;うーん……ちょっといいな、Withings。本格的に乗り換えを検討しています。&lt;/p&gt;&#10;&lt;iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00V5PSM1S" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;追記：結局5月に乗り換えました。画像はアフィリエイト。</description></item><item><title>MacでBox Syncの同期フォルダを変更する（外付けHDとか）</title><link>https://hack-le.com/43957884-2/</link><pubDate>Sat, 09 May 2015 09:06:51 +0900</pubDate><guid>https://hack-le.com/43957884-2/</guid><description>&lt;p&gt;（2025-09-27追記：この記事は完全に古く、使う以前にサービスが（ｒｙ状態だったので非公開にしていましたが、そんな時代もあったねといつか笑えるかもしれないししれないのかもしれないので、特に害もなかろうと考え公開することにしました。思いで枠です）&lt;/p&gt;&#10;&lt;p&gt;Boxの同期フォルダを内蔵のSSDじゃなくて外付けのHDにしようと思ったのですが、Boxの同期フォルダ変更方法が思ったよりだいぶ面倒だったのでメモです。Boxはバージョン4です。表題のとおりMacでOSはOSX 10.10。&lt;/p&gt;&#10;&lt;h2 id="実は面倒なboxの同期フォルダ変更"&gt;実は面倒なBoxの同期フォルダ変更&#10;&lt;/h2&gt;&lt;p&gt;Boxは一番最初にインストールしたときに同期フォルダの場所を設定できるのですが、その後フォルダをアプリからは一切変更できません。最初は外付けHDにBox Syncを作って、元の場所にリンク貼ればえーやろと思ったのですが、どうもBoxさんはソフトリンクを見破ってしまうようで、元のディレクトリをほげほげbackupという名前にして、新たにディレクトリを作り出し同期を始めてしまいます。ちゃんと正規の手順を踏んでやらないとダメそうです。しかしその正規の手順が再インストールすればよしというものでもなく、少々面倒臭い。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;というわけでその手順を書きます。手順自体は公式の&lt;a class="link" href="https://support.box.com/hc/en-us/articles/200852947-Can-An-Admin-Change-the-Default-Folder-Location-for-Box-Sync-" target="_blank" rel="noopener"&#10; &gt;「Can An Admin Change the Default Folder Location for Box Sync? – Box Help」&lt;/a&gt;にあるので、英語嫌じゃないしって人はそっちを見たほうがよいでしょう。私は嫌なのでメモします。&lt;/p&gt;&#10;&lt;h3 id="boxのアンインストール"&gt;Boxのアンインストール&#10;&lt;/h3&gt;&lt;p&gt;まずBoxのアンインストールです。この時点で若干面倒臭い感じがしますが仕方ありません。BoxはBox Sync.appはもちろんですけれど、他にも削除しなければならない関連ファイルがあります。&lt;a class="link" href="https://support.box.com/hc/en-us/articles/200874358" target="_blank" rel="noopener"&#10; &gt;「How Do I Install or Uninstall Box Sync 4.0? – Box Help」&lt;/a&gt;によると以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Macintosh HD/Users/[username]/Library/Logs/Box/Box Sync/&lt;/li&gt;&#10;&lt;li&gt;Macintosh HD/Users/[username]/Box Sync/&lt;/li&gt;&#10;&lt;li&gt;Macintosh HD/Users/[username]/Library/Application Support/Box/Box Sync/&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;App Cleaner等のアンインストールアプリを使えば、二番目の同期フォルダ以外も一緒に削除してくれるでしょう。&lt;/p&gt;&#10;&lt;h3 id="設定ファイルを作成"&gt;設定ファイルを作成&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;/Library/Preferences/com.box.sync.plist&lt;/strong&gt; というテキストファイルを作成します。既にある場合は中身を書き換えたらいいと思うのですが、一旦削除して作りなおしたほうが良いような気もします。作成したら、以下のように中身を入力します。&lt;/p&gt;&#10;&lt;pre&gt;`&lt;!--?xml version="1.0" encoding="UTF-8"?--&gt;&lt;plist version="1.0"&gt;&lt;dict&gt;&lt;key&gt;SyncRootFolder&lt;/key&gt;&lt;string&gt;/Users/hogehoge/Box Sync&lt;/string&gt;&lt;/dict&gt;&lt;/plist&gt;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ここで、 &lt;strong&gt;/Users/hogehoge/Box Sync&lt;/strong&gt; のところをお好みのパスに変更します。&lt;/p&gt;&#10;&lt;p&gt;終わったら、以下のコマンドで.plistファイルの記法が正しいかどうかの確認をしましょう。OKならOKが返ってきます。&lt;/p&gt;&#10;&lt;pre&gt;`$ plutil com.box.sync.plist&#13; com.box.sync.plist: OK&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="box-syncの再インストール"&gt;Box Syncの再インストール&#10;&lt;/h3&gt;&lt;p&gt;あとはBox Syncを再インストールするだけです。再インストールしてみたところ、一番最初にインストールする画面が現れて、フォルダの同期場所を変更する項目がありました。が、変更するまでもなく、.plistファイルに記述したパスに同期するような設定になっておりました。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/2/3/23d82fef.png" &gt;&lt;img alt="Box_Sync" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/2/3/23d82fef-s.png"&gt;&lt;/a&gt;&#10;以上で完了です。非常に面倒だった印象があるのですが、こうして書いてみるとBoxの再インストールと設定ファイルの作成のみだったのですね。面倒だったのは、色々と調べて遠回りをしたせいかもしれません。Boxは出始めの頃と違い、同期スピードが早く、クライアントアプリは安定しており、またWindowsでもMacでも使えるうえにモバイル利用もよく考えられているクロスプラットフォームで(Linuxで使用する方法も提案されているようです)、Webアプリも優秀という、たいへん素晴らしいサービスに成長しました。他アプリとの連携という面ではDropboxに一日の長がありますが、Boxは後発ならではのスマートさがあります。それだけに、同期フォルダの変更という基本的なところで躓いたのは意外でした。&lt;/p&gt;</description></item><item><title>電子書籍管理の難しさ</title><link>https://hack-le.com/43926404-2/</link><pubDate>Thu, 07 May 2015 00:04:10 +0900</pubDate><guid>https://hack-le.com/43926404-2/</guid><description>&lt;p&gt;電子書籍の難しさは色々ありますが、その最たるものはやはり管理でしょうか。自炊本だけであれば、通常のディレクトリ管理が恐らくもっともベーシックかつ、有力なやり方でしょう。自炊本をターゲットにした蔵書管理ソフトはちょっと知りません。ましてMac使いとなればなおさらです。&lt;/p&gt;&#10;&lt;p&gt;ディレクトリ管理を行うには、ファイルが管理できる状態でなくてはいけません。オライリーや技術評論社など、通常のpdfやepubなどのファイルで販売しているものについてはなんの問題もありません。しかし、ここにストア本が絡むとややこしくなります。それらは通常専用のアプリでしか読み取れない暗号化されたバイナリファイルだからです。まずどうにかこうにかして、それらを普通に管理できるファイルにしなくてはなりません。その手段は連続キャプチャであったり、あるいはストレートにDRMの解除であったりします。Kindle本についてはDRM解除の方法が確立していますが、BookLiveやKoboの和書など多くのものは今のところキャプチャに頼るしかないでしょう。それぞれの方法に多くの問題があります。&lt;/p&gt;&#10;&lt;p&gt;Kindle本のDRM解除は一見スマートに見えますが、DRM解除までの流れはそれなりに面倒ですし、また解除してからも、日本語については縦書に修正する必要があったり、場合によっては画像のアスペクト比がおかしかったりとけっこう手がかかります。キャプチャは泥臭く時間がかかり、文字情報も消えるものの、もとより画像貼り付け固定型の電子書籍についてはそれなりのクオリティで見たままを残すことができるので悪くありません。しかし余白削除やどうしても生じる重複画像の削除、また目視確認が必要であったりして、やはり非常に面倒です。私のように本とプログラミングの両方が趣味で、かつ管理したいという欲求のある人間でなければやろうとは思えないでしょう。&lt;/p&gt;&#10;&lt;p&gt;電子書籍でもiTunesとiTunesストアのようなものがあれば楽なのですが。しかしそれには技術的よりかは権利関係の問題が多く道は遠そうです。むしろ昨今の流れを見ると、遠のくばかりと言えます。せめてなけなしの知識を使い、なんとか自分の蔵書管理だけは泥臭く頑張っていますが、この状況ではとてもとても、一般には電子書籍は普及しますまい。なんとかもう少しいい方向に向かわないものか…。&lt;/p&gt;&#10;&lt;p&gt;ところでオムロンの活動量計と体組成計で毎日記録を取っている今日この頃ですが、なかなか楽しいものですね。オムロンのソフトはあまりよいものではないのですが、最近の記録をグラフで眺める最低限のことはできますので、たまに眺めると励みになりますね。Withingsの活動量を測れる腕時計が欲しいので、色々とそちらに乗り換える算段もしていますが、当面はオムロンで楽しませてもらいましょう。&lt;/p&gt;&#10;</description></item><item><title>Xperia Z3を買ったが結局iPhoneを使い出している</title><link>https://hack-le.com/43815917-2/</link><pubDate>Thu, 30 Apr 2015 10:23:57 +0900</pubDate><guid>https://hack-le.com/43815917-2/</guid><description>&lt;p&gt;Xperia Z3を購入して、早いもので一ヶ月以上たちました。購入してからZ3の白ロム市場が1万円ほど値下がりしてしまい、少しばかり複雑な思いもしましたが、それでも良い端末を良い価格で購入できたと思います。少なくともSIMフリーiPhoneの値段を考えれば。&lt;/p&gt;&#10;&lt;h2 id="良い端末ではある"&gt;良い端末ではある&#10;&lt;/h2&gt;&lt;p&gt;Xperia Z3は良い端末だと思います。バッテリーは持つし、画面は大きくて見やすいし、動作はキビキビとしているし、なんといっても防水が素晴らしい。お風呂で電子書籍が楽に読めるのは、私には大きな喜びでした。新しいスマホを欲しがっていた父にもプレゼントしましたが、概ね満足しているようです（特にバッテリーが非常によくもつと喜んでいました）。ただ一点、これは私の不注意ではありますが、落として背面ガラスがベキベキに割れてしまったのが残念です。背面にもガラスを使っているんですねぇ。教訓として、カバーケースをつけました。いわゆる手帳型です。ちょっとかさばりますが、少なくともこれなら落としても割れないだろうと思います。ICカードも入るので、おサイフケータイと組み合わせると本当に財布いらずという感じです。&lt;/p&gt;&#10;&lt;h2 id="それでもiphoneを使うワケ"&gt;それでもiPhoneを使うワケ&#10;&lt;/h2&gt;&lt;p&gt;にも関わらず、最近はポケットに忍ばせてメインに操作するのはiPhoneで、Xperia Z3は専らテザリングをしているだけ、ということが増えてきました（docomoの白ロムは、MVNO使用時にWi-fiテザリングが制限されていることが多いのですが、Xperia Z3の場合Android開発環境があれば、簡単に設定を変更してWi-fiテザリングができるようになります…とはいえやはり開発環境の用意とコピペとはいえコマンド操作が必要なので、誰にでもオススメできるわけではありません）。&lt;/p&gt;&#10;&lt;p&gt;何故かというと、まず&lt;strong&gt;5.2インチは私には大きすぎる&lt;/strong&gt;。ベゼルがかなり狭く、さらに薄いとはいえ、それでも大きい。一方iPhone 5の4インチはしっくりと手に馴染む。もちろん画面が大きさで助かることもあります。特に自炊した小説を読む際には、大画面はたいへん助かります。ネットサーフィン（死語？）も多少楽になりました。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、それくらいでしょうか。また、Bluetooth機器との接続が悪いことが多いです。iPhoneならすんなり接続されるのに、Xperia Z3はどうも毎回手動でペアリング手順をしなくては接続されなかったりと、不安定なことが多い。この点については、やはり数が多く確実にテストされているであろうiPhoneの強みといったところでしょうか。&lt;/p&gt;&#10;&lt;p&gt;そして個人的に大きいのは、&lt;strong&gt;いまだにAndroidで良い音楽アプリが見つけられていないこと&lt;/strong&gt;です。調べた限り、ふりがな対応、アルバムアーティスト対応、素早いレスポンス、これらすべてを兼ね備えたアプリというのはなかなか…自分の場合iTunesで音楽管理をしていることも大きいでしょうが。&lt;/p&gt;&#10;&lt;p&gt;あとiPhoneは標準で辞書アプリが搭載されていて、長押しですぐに意味を調べられるのも、かつてマウスオーバー辞書にはまってアレコレ試していた過去のある自分には大きかったのだなと思いました。Android版でもGoldendictとかあるので、似たようなことはできるのですけどね。まぁアプリ資産もiPhoneのものが捨てきれないというのもあります。&lt;/p&gt;&#10;&lt;p&gt;慣れも大きいでしょうが、少なくとも洗練さという点ではやはり今でもiPhoneなのではないでしょうか。何をするにもスムーズです。Androidは良くも悪くも雑多であり、実はその雑多さが気に入ってはいるものの、雑多さ故に多くの問題があることも事実です。それは機器との相性問題であったり、決定的な統合管理ソフトの不在からくるメディアファイル管理の難しさであったり、OSに密着した挙動に制限があったり(iOSはもっと厳しく、こちらはこちらで大きな不満がありますが、いったんAppleで公式に実装されるとそれは素敵な使い勝手です）、そういったところです。&lt;/p&gt;&#10;&lt;h2 id="頑張ってほしいが"&gt;頑張ってほしいが&#10;&lt;/h2&gt;&lt;p&gt;Androidには大きな可能性がありますし、Xperia Z3は今現在における最高の端末の一つだと思います。あとは細かなブラッシュアップでしょうか。Android 5にアップグレードできるようになったらまた変わるかもしれません。Android 5.1は旧型Nexus 7に突っ込みましたが、さすがに旧型Nexus 7は単純にスペックが…。&lt;/p&gt;&#10;&lt;p&gt;ところで大型化の流れは個人的には厳しいです。4インチiPhoneの後継がでるのは2016年になるという噂もあり、勘弁してほしいなぁと思います。4インチのスマートフォンと、6インチの持ち歩きタイプ、10インチの家用タイプでタブレットを持つのが、一番良いのではないかと個人的には思っていたりします。&lt;/p&gt;</description></item><item><title>PCスペックの停滞</title><link>https://hack-le.com/43814231-2/</link><pubDate>Tue, 28 Apr 2015 22:13:15 +0900</pubDate><guid>https://hack-le.com/43814231-2/</guid><description>&lt;p&gt;私のメインデスクトップはMac mini 2012。当時阿呆な私は、このMac miniのバランスの良さがわからずあまり好印象を持っていなかったのですが、今となってはたいへん素晴らしいマシンと言い切ることができます。&lt;/p&gt;&#10;&lt;h2 id="2012年はよかった"&gt;2012年はよかった&#10;&lt;/h2&gt;&lt;p&gt;2012年モデルは拡張性もそこそこで、メモリを16GB、SSDを256GBに換装しています。当時メモリ8GB*2が5000円で手に入ったという、たいへん素敵な時代でした。&lt;/p&gt;&#10;&lt;h2 id="停滞している"&gt;停滞している&#10;&lt;/h2&gt;&lt;p&gt;メインノートはMacBook Air 2013。これは当時から気に入っていましたが、今でも気に入っています。持っているだけでなんとなく嬉しくなるこの気持ちはなんなのでしょう。オタクなんでしょう。今販売されている第一線のノートパソコンともまったく引けを取りません。&lt;/p&gt;&#10;&lt;p&gt;つまり、停滞してるのですね。MBA 2013もMac mini 2012もいずれも良いマシンであり、特にMac mini 2012は名機と言って差し支えないと思いますが、それでも3年という歳月は、ほんの数年前までPC業界においては十数年にも匹敵するものでした。しかし、今や3年前のマシンと今のマシンに言うほどの差がないようです。ムーアの法則も崩れているのでしょうし、大概のことは十二分にこなせるスペックになったことも大きいでしょう。ソフトも、無駄な肥大化の傾向は潜め（Vistaの功績かもしれません！）、ハードの性能がそこまで要求されなくもなってきました。&lt;/p&gt;&#10;&lt;h2 id="タブレットも停滞している"&gt;タブレットも停滞している&#10;&lt;/h2&gt;&lt;p&gt;PCだけではなく、まだデビューから数年のタブレットも、ハードの性能としては若干頭打ちの感があります。特にiPad Air 2はひとまずタブレットの完成形といってよいのではないか（Androidでは、私は持っていませんがSonyのXperia Z3 Tablet Compactなど、名前が長ったらしいことを除けば相当に良さそうです）。スマートフォンも、まだ進化は続いているものの、マシンスペックの面では、かなり熟れてきています。&lt;/p&gt;&#10;&lt;h2 id="購入の言い訳がない"&gt;購入の言い訳がない&#10;&lt;/h2&gt;&lt;p&gt;こうなると、ハードの進化を理由に衝動買いが出来ないので、なんとなく寂しい感じがします。と、なんだか本末転倒のようなことを言ってしまいますが。実際、ハードよりソフトというのがますます顕著になってきました。昨今はウェアラブルデバイスも色々なものが出てきて、各種様々なセンサを搭載していますが、それとて解析するソフトあってのセンサです。あとはバッテリーにブレイクスルーが起きれば、やりたい放題ですね。まぁ、残念ながら当分は無理そうではありますが。&lt;/p&gt;&#10;&lt;p&gt;ウェアラブルデバイスも色々ありますが、それを利用するソフト面、サービス面はまだまだこれからといったところでしょうか。何か考えれば何かありそうだ、という予感ばかりありますが、はてさて…。かつてマシンスペックの向上は単純にワクワクしたものですが、ソフトで同じようなワクワク感をとなると、どうしたらよいのでしょうねぇ…。&lt;/p&gt;</description></item><item><title>健康管理サービスをどの会社のものにするかという選択</title><link>https://hack-le.com/43779680-2/</link><pubDate>Sun, 26 Apr 2015 11:10:16 +0900</pubDate><guid>https://hack-le.com/43779680-2/</guid><description>&lt;p&gt;オムロンの活動量計を買いましたが、これがなかなか楽しい。毎日の活動が記録されグラフ化されるのはなんとなく嬉しいものです。そろそろ体重を落としたいので、自分自身の状態をモニタリングすることも大切でしょう。活動量計は健康管理の心強い味方と言えそうです。元々日記も続くタイプの私には相性が良かったようで。&lt;/p&gt;&#10;&lt;h2 id="オムロンのサービス"&gt;オムロンのサービス&#10;&lt;/h2&gt;&lt;p&gt;ただオムロンのハードについては特に申し分ないのですが、日本メーカーにはよくあることで、ソフトのほうは不満が多いです。具体的にはアプリケーションの使い勝手の悪さでしょうか。オムロンは&lt;strong&gt;からだグラフ&lt;/strong&gt;と&lt;strong&gt;わたしムーヴ&lt;/strong&gt;という二つのアプリを出しています。まずこの時点でわかりづらい。他にもよくわからないアプリがたくさんあって、恐らくそれぞれ機能や対応機種が異なるのでしょうが、メーカーの内部事情が反映されているように思えます。ユーザーにはあまり関係のないことです。とにかくオムロンのヘルスケアガジェットであればこれ！という形だとよいと思うのですが。&lt;/p&gt;&#10;&lt;p&gt;まぁそれはいいとして、とにかくこのオムロンのアプリはあまり使い勝手がよろしくない。恐らく現在オムロンとしては、わたしムーヴというあまり格好良くない名前のアプリに一元化しようという意図は感じられ、アプリとしても一番綺麗に見えるのですが、どうもNFCによる機器とスマホの通信がうまくいきません。私はSonyのXperia Z3を使っていますが、相性がよろしくないのでしょうか。しかし、一方でからだグラフというアプリでは、うまく通信できるのですね。しかしこのからだグラフというアプリは、UIが野暮ったいうえに、どういう設計思想なのか、自動生成されるグラフの縦軸がいじれないうえ（いじれるのだとしたらいじり方を教えてほしいものです）、縦軸のMAXの算出基準がよくわからない。活動量のグラフだと、私はだいたい最高で25000歩くらい歩くことがありますが、グラフのMAXは51200歩です。何故。わたしムーヴのほうも縦軸をいじれないように見えますが、まぁ一応自動算出されるものの数値も比較的妥当に思えるので、当面よしとしましょう（激しいダイエットに成功した人にとっては、過去のMAX値が基準になるのでよくなさそうです）。&lt;/p&gt;&#10;&lt;p&gt;というわけで機器とスマホの通信はからだグラフ、グラフの閲覧にはわたしムーヴ、というよくわからない使い分けをしています。しかし、このわたしムーヴでの閲覧体験もあまりよろしいものとは言い難い。何が不満かといえば、グラフの種類、たとえば活動量と体重について、ワンタッチでグラフを切り替えられないことでしょうか。活動量のグラフを見ていたら、まず一旦前の画面に戻って、その次に体重のグラフを選択する、という手順が必要なようです。わかりやすくはありますが、どうにも便が良いとはいえそうにありません。&lt;/p&gt;&#10;&lt;h2 id="他社のサービスに乗換えられるか"&gt;他社のサービスに乗換えられるか&#10;&lt;/h2&gt;&lt;p&gt;そんなこともあって、最近は他社のサービスはどうなのだろうと気になってきました。Withingsの腕時計が気になっているということもあります（Amazon、ヨドバシ、EXPANSYS、どこもあっという間に売り切れてしまいましたね。またすぐに入荷されると思いますが）。Withingsは新進気鋭のスタートアップなだけあって、非常に熟れたアプリケーションを持っているようです。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、他社のサービスに乗り換えるのはなかなか手間です。csvエクスポートがあるので、乗り換え先にインポート機能さえあればなんとかなりそうではありますが、面倒なことではあります。現状どこのメーカーも、ソフトではなくハードで儲けているのですから、自社のハードに最適化されるようにソフトを作るのは当然としても、各社互換性があるようにデータの規格を定め、純粋にハードの性能で競い合うような流れになってもよいように思うのですが、どうでしょうね。Apple Watchはまだ早すぎるように思いますが、それでもこれからウェアラブルデバイスの普及は進んでいくしょうし、そうなると健康管理のサービスをどこのものにするか、というのは一つの大きな選択になってしまいそうです。OSには仕方ない面もあると思うのですが、本質的にはデータである健康管理でそれは、ちょっと勘弁してほしいところです。&lt;/p&gt;</description></item><item><title>初代Surface Proの電源コネクタの酷さ</title><link>https://hack-le.com/43746106-2/</link><pubDate>Thu, 23 Apr 2015 22:58:46 +0900</pubDate><guid>https://hack-le.com/43746106-2/</guid><description>&lt;p&gt;いまさら初代Surface Proの話題もないものですが、ここ最近あまりにも酷いなぁと感じるので、少し愚痴ります。それというのも、昔買った初代Surface Proについてです。&lt;/p&gt;&#10;&lt;p&gt;Surface Proは3になってようやく方向性が定まり、評価も上々のようですが、少なくともこの初代Surface Proは決して出来の良いものではありませんでした。一万円もする純正のタッチカバーはチープでお粗末だし、キックスタンドは使いづらいし、そしてなんと言っても電源コネクタ、これが酷い。磁石でくっつくようになっているのですが、もうびっくりするくらい取れやすいのです。この取れやすさはネットでもっと話題になってもよいと思うのですが、さほど話題にはなっていないようです…しかし、Surface Pro 3では改善されたとのことなので、やはり問題点としてあがっていたのでしょう。&lt;/p&gt;&#10;&lt;p&gt;取れやすいのも嫌ですが、そもそもくっつくづらいのも辛いところでした。そして最近はそのくっつきづらさのうえ、経年劣化なのかそうなのか、くっついても接触不良かなにかで電源が供給されないという事態が頻発しています。電源が接続されていますといいながら、充電されていません、そしてバッテリーは残り3%、って何の冗談でしょう。しかも画面の輝度などはしっかりと電源が接続されている状態のモードになるので、バンバンバッテリーが減って、挙句落ちます。よくわからん中華メーカーのよくわからんマシンならともかく、天下のマイクロソフトが十万円という昨今のノートパソコンからは非常に強気な値段設定のマシンでこれは、ちょっと信じられない。そしてWindowsらしく、元々早くなかった動作が最近はさらに重くなってきました。それでも現在わたしの持つ唯一のWindowsネイティブのマシンであるので、使わざるを得ない状況があるのが辛いところです。&lt;/p&gt;&#10;&lt;p&gt;ここであげた問題点は、Surface Pro 3になってだいぶ改善されたと聞きます。しかしどうにも嫌な思いを散々させられてしまったので、Surface Proの評価が上がり、本当によくなっていたところで、次にWindowsマシンが必要になっても私がSurfaceを買うことはないでしょう。&lt;/p&gt;&#10;&lt;p&gt;まぁそもそも次にWindowsマシンを購入することがあるのかと言われると、うーんどうだろうという感じではあります。マシン性能が上がったところで、OSが絶望的にタッチに向いていないことは変わらないでしょうし。デスクトップマシンとしては悪くないですが。CEOがスティーブ・バルマーから変わってから、マイクロソフトの姿勢も随分変わったとは思うものの、OSばかりは。オフィスについては、オンライン対応に力が入っていたりiPad版が無料でリリースされたり、すごくいい感じだと思いますが。&lt;/p&gt;</description></item><item><title>Androidのよいミュージックアプリが見つからない</title><link>https://hack-le.com/43705796-2/</link><pubDate>Tue, 21 Apr 2015 00:53:05 +0900</pubDate><guid>https://hack-le.com/43705796-2/</guid><description>&lt;p&gt;私は現在スマートフォンはXperia Z3を使っています。OSはAndroidです。最近になってようやくmp3プレイヤーを専用で持たずスマートフォンで音楽を聞くようになってきたのですが……うーん、Androidの音楽管理は、難しい。私がPC(Mac)ではiTunesを使って管理していることもありますが、それを差っ引いても、なかなか、難しいのではないかな…。&lt;/p&gt;&#10;&lt;p&gt;-&amp;gt; 追記：Appleに抵抗がなければ、一つの解として「&lt;a class="link" href="//hack-le.com/46809984-2/" &gt;Android のミュージックプレイヤーは Apple Music を使うことにした&lt;/a&gt;」&lt;/p&gt;&#10;&lt;h2 id="microsdが使えるxperia-z3を買ったのに"&gt;MicroSDが使えるXperia Z3を買ったのに&#10;&lt;/h2&gt;&lt;p&gt;私は昔から音楽が好きで、中学生の時から購入したり借りた音源をmp3で保存し続けてきたのは、多分私の人生のうち先見の明と言える数少ないことの一つです。まぁそのおかげで、Windows時代のあまり熟れていなかった時代からの遺産が残っているので、データベースはややカオス気味ではあるのですが…また、今となっては絶対に聴かないよな、と思う曲もなんとなく消去できずに残しているのは、果たしてよいことなのか悪いことなのか。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、100GB近い音源が私のPCにはあります。別になにもこれをすべて持ち出す必要はないのですが、かつで手のひらにCDラックのすべてがおさまったiPodに感動した自分としては、できることならスマートフォンで全部持ち出したいのです。iPhoneはようやく128GBモデルを出しましたが、長らく64GBモデルまでしかありませんでした。今回Xperiaに鞍替えしたことで、128GBのmicroSDが使えるということで、ようやく長年の夢が叶った…と思ったのもつかの間、Android用のミュージックアプリは数あれど、いまだに自分の欲求をすべて満たすものがありません。&lt;/p&gt;&#10;&lt;h2 id="いくつかの難題"&gt;いくつかの難題&#10;&lt;/h2&gt;&lt;p&gt;恐らく難題の根源には、私がMacでiTunesを使い楽曲を管理していることもあるのだと思います。しかし通常の自分で階層をつくりフォルダ管理をしていたとしても、やはり同じような問題が起きるはずです。&lt;/p&gt;&#10;&lt;h3 id="日本語の壁"&gt;日本語の壁&#10;&lt;/h3&gt;&lt;p&gt;日本特有の問題として、漢字の問題は非常に大きいでしょう。iTunesとiPhoneは、恐らく独自の実装で読みがなに対応していますが、Androidで同様のものを実現しているものを未だに見つけられていません。100GB分のアーティストから、読みがなに対応していない状態で目当てのアーティストを探すのは、ちょっと、いやかなり骨です。といって毎回検索窓を使う？いやいや…。さらに、ひらがなとカタカナをわけるものもいくつか。そしてなんといっても文字化け！ID3タグの問題もあり、これについては色々とデータをいじりましたが、それでもまだまだ文字化けが残ります。プレイヤーによって文字化けっぷりには随分差があります。&lt;/p&gt;&#10;&lt;h3 id="アルバムアーティスト"&gt;アルバムアーティスト&#10;&lt;/h3&gt;&lt;p&gt;一つのアルバムに複数のアーティストの楽曲が含まれているのはよくあることですが、どうもAndroidだと現状これに対応させるには、やや不細工な階層構造でディレクトリを構成しないといけないようです。iTunesにはアルバムアーティストという機能がありますが、フォルダに反映されているわけではないので、Androidでの管理は難しい。&lt;/p&gt;&#10;&lt;h3 id="楽曲の表示スピード"&gt;楽曲の表示スピード&#10;&lt;/h3&gt;&lt;p&gt;いくつものアプリを使っているうち、Rocket Playerなるものが、一番Macとの相性がよさそうでした。なにしろ有料とはいえiSyncrというアプリを使用すると、iTunesと楽曲、プレイリストが同期できて、そのアプリと同じ開発者が同じシリーズとして作成しているので、これはMac使いには嬉しいアプリです。ところが、このアプリはどういうわけかアーティストなどのリストの一覧を表示するのが異常に遅い。SDカードのアクセスが遅すぎるのかとも思ったりしましたが、他のミュージックアプリではそんなこともないので、やはり何か問題があるように思うのですが…。&lt;/p&gt;&#10;&lt;h3 id="トラック番号や再生時間が反映されない"&gt;トラック番号や再生時間が反映されない&#10;&lt;/h3&gt;&lt;p&gt;どうしてこうなるのかよくわからいのですが、いくつかのアプリではトラック番号や再生時間が反映されませんでした。Google Playなど。Rocket Playerはこの問題はクリアしています。&lt;/p&gt;&#10;&lt;h2 id="osxとiosは楽"&gt;OSXとiOSは楽&#10;&lt;/h2&gt;&lt;p&gt;やはりOSXとiOSの連携は実に素晴らしく、楽だということでしょうか。結局私は音楽再生用には基本的にiPhoneを使っています(多くのBluetooth機器との連携も、XperiaよりiPhoneのほうが安定していました)。Androidで楽曲を管理している人たちは、どうしているのでしょう。自分で頑張ってフォルダ管理しているのでしょうか。それもそれで手ではありますが…。賛否あるものの、とりあえず公式に乗っかっておけば楽にたいがいできる、というのはAppleの強みなのでしょうね。他にうまくできているところがないということは、やはり難しいことなのでしょう。これは技術的な難しさではなく、政治的なものが要因であるように思えます。たとえばソニーには、OSがないとはいえクロスプラットフォームでiTunesとiPhoneのような関係を構築するだけのことはできるでしょう、が。&lt;/p&gt;&#10;&lt;p&gt;そもそも100GBも音楽を持ち運びたいなんて人自体が少なく、ハッキリ言えば私のような悩みはメーカーの人たちはあまり考えてくれないのでしょう。お金にならなそうですし。思えば、最初にmp3プレーヤーを買うと決めた時、当時Windowsしか知らなかった私がなぜiPodを選んだかというと、大容量のmp3プレーヤーがそれしかなかったからです。それはそれからもずっとずっと続いて、多くの楽曲を持ち歩きたければiPod Classicを必然的に選ぶことになりました。128GBのmicroSDが使えるようになって、ああこれでお値ごろでAndroidで何も考えず全部持ち歩けるなー、なんて考えていたのですが。なかなかどうして、まだまだ難しいようで…どうしたものか。&lt;/p&gt;</description></item><item><title>Apple WatchよりWithingsのアナログなスマートウォッチ？Activiteが良い感じ</title><link>https://hack-le.com/43665639-2/</link><pubDate>Sat, 18 Apr 2015 01:02:22 +0900</pubDate><guid>https://hack-le.com/43665639-2/</guid><description>&lt;p&gt;追記：買いました「&lt;a class="link" href="//hack-le.com/cat_1268211-2/" &gt;Withings : 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;&#10;&lt;p&gt;今世間を賑わせているガジェットといえば、スマートウォッチの大本命Apple Watchでしょう。既に予約が殺到しており、その数何百万台ともききます。私は腕時計をする人間ではないので、時計市場のことはよくわからないのですが、聞くところによるとこれはちょっと信じられない数だとかなんとか。スマートウォッチはもちろんそこそこ前からあるジャンルではあるものの、イマイチ盛り上がりに欠けるところではありました。これでAppleまでコケたら、このジャンルは早すぎたジャンルとして、また当分陽の目を見ないような気もします。満を持して登場といったところですし、頑張ってほしいところですね。必ずしもスマホをすぐに取り出せる状況にないことが多くあったこともあり、腕時計への興味がでてきた今日この頃です。&lt;/p&gt;&#10;&lt;p&gt;とはいったものの、私自身はApple Watchはあまり欲しいものではありません。見た目がいかにもガジェットで、もっとも目立つ部位である腕に身につけるものとしては、いかにもオタクな私にとって、いかにも、いかにも、となってしまいそうです（いまさらと言われればそうなのですが）。それに、機能そのものにも、今のところさして魅力を感じません。別にLINEやメールをいちいち教えてくれなくて構わないし、急いで返事をしたいとも思いません。唯一魅力を感じるのは、今ヘッドフォンに流れてる曲名がさっとわかることくらいでしょうか。いや、このことは実は非常に魅力を感じています。それとヘルスケアに使えるのはよいことだと思うのですが、そうするとあまりにもバッテリーがもたないこと、防水機能がせいぜい生活防水機能が弱いことがネックでしょう。最近活動量計を愛用している身としては、毎日バッテリー充電が必要というのはかなり辛いものだろうと想像がつきます。&lt;/p&gt;&#10;&lt;p&gt;そんな中で私が注目しているのは、Withingsというメーカーが出している腕時計、Activiteです。450ドルと、ガジェットとしてはちょっと高めですが腕時計としてはまぁこんなものなんだろうな、というお値段。見た目はスマートなアナログ時計、メイドインスイス。サファイアガラスが使われているのもオタク心をくすぐります。が、もちろんそれだけではなくて、見た目に反してBluetooth機能を持ち、活動量計の機能を有し、防水防塵仕様で水泳にも使える。活動を自動判定して、分析してくれるそうなのですね。そして睡眠計にもなる。そうした活動の記録は、Bluetoothでスマートフォンと連携し、アプリ上で解析・確認ができる。まぁそういった機能をもつ活動量計やリストバンドは、昨今では珍しくないのですが、それがたいへんクールな見た目の腕時計で実現されているのは、恐らくこれくらいではないでしょうか。必要最低限の機能ということで、電池はボタン電池で八ヶ月持つそうです（CR20なんでしょうね？）。素晴らしい。…ここまで絞られると、スマートウォッチと呼んでいいのかどうかは微妙なところですが。&lt;/p&gt;&#10;&lt;p&gt;そんなニッチだがピンポイントに壺を押さえた製品なので、やはりなかなか人気があるらしく、長らく日本では入手困難、あるいはやけにプレミアがついた状態でした。が、4月16日より、Apple Storeに並んだようです。価格は61000円とのことで、円安であること、海外製品であることを考えれば、まぁこんなものでしょうか…EXPANSYSで買ったほうが安いかもしれないですね。同等の機能とデザインの廉価版については、国内発売は6月までにはなんとか、という予定らしい。そちらならば2万円ちょっとくらいにおさまるでしょうか。若造の私としてはそれを待とうかな、という感じです。&lt;/p&gt;&#10;&lt;p&gt;参考「&lt;a class="link" href="http://japanese.engadget.com/2015/04/17/withings-activite-apple-watch/" target="_blank" rel="noopener"&#10; &gt;仏Withingsの高級アナログ腕時計 Activité インプレ。活動量を測定、Apple Watchにピンと来ない方へ - Engadget Japanese&lt;/a&gt;」&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00V5PSM1S" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>次のノートPCはChromebook</title><link>https://hack-le.com/43638862-2/</link><pubDate>Thu, 16 Apr 2015 00:09:18 +0900</pubDate><guid>https://hack-le.com/43638862-2/</guid><description>&lt;p&gt;最近、暇があるとつい覗いてしまうページがあります。価格.comのChromebookのページです。まだ8件ほどしか商品が登録されていませんが、魅力的です。特にAcerのCB3-111、こちらのメモリ2GBはAmazonで26,980円…非常に安いですね。&lt;/p&gt;&#10;&lt;h2 id="気になるchromebook"&gt;気になるChromebook&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;[![Acer ノートパソコン Chromebook CB3-111-H14M /11.6インチ/4GB/16GB eMMC](https://m.media-amazon.com/images/W/MEDIAX_849526-T1/images/I/61XDcDPLQoL._AC_SL1000_.jpg) ### Acer ノートパソコン Chromebook CB3-111-H14M /11.6インチ/4GB/16GB eMMC](https://www.amazon.co.jp/dp/B00SLYUMUU?th=1&amp;amp;linkCode=ll1&amp;amp;tag=hackle12-22&amp;amp;linkId=b26dd3704b42d3ad8b1c7291ece67f99&amp;amp;language=ja_JP&amp;amp;ref_=as_li_ss_tl)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;このリンクを通じて購入すると、管理人にアフィリエイト収入が入ります。記事が役に立ったらクリックしてもらえると嬉しいです。&lt;/p&gt;&#10;&lt;p&gt;これがCB3-111です。もっとも、北米では既に150ドルのものも出ていたりするので、円安を加味しても、今後さらに安くなるのかもしれません。ただ安いだけに質感などはどうしてもいかにもプラスチック樹脂というか、あまり高級感のあるものにはならないのは仕方のないところでしょう。この点については、今後高級志向のChromebookを出すところもあるかもしれません…Google謹製のChromebookが既にそういう路線なのかもしれませんが。&lt;/p&gt;&#10;&lt;h2 id="次のノートパソコンとして"&gt;次のノートパソコンとして&#10;&lt;/h2&gt;&lt;p&gt;今のところMacBook Airの2013年モデルがあるので、購入する予定はありません。充放電回数が1500回近くになり、バッテリーもへたってきてるんだろうなと思いつつ、ある程度抑制した使い方をすれば4,5時間はバッテリーが持ちますし、ノートとはいえまだまだブラウザのみで動かせるほど環境を整えられておりませんので…。しかし2,3年してそろそろ次のノートを考えたとき、MBAの次としてChromebookを選択するのはアリでしょう。もちろんサーバー、デスクトップマシンは別にあること前提ですが。あるいは、MBAと同時にサブノートとして購入というのもよいか。バッテリーがさらにヘタれば、サブノートが欲しいという気持ちも強まるかもしれません。&lt;/p&gt;&#10;&lt;p&gt;最近はずっとこんなことを考えています。次のPCを考えている時間は実に幸福な時間です。私はまったく、PCが好きなんだなぁ。&lt;/p&gt;</description></item><item><title>第三世代iPadからiPad Air 2に買い替えた所感</title><link>https://hack-le.com/43637821-2/</link><pubDate>Wed, 15 Apr 2015 22:30:39 +0900</pubDate><guid>https://hack-le.com/43637821-2/</guid><description>&lt;p&gt;ついに買い替えてしまいました。新しかったiPadこと第三世代iPadに、大きな不満があったわけではなりません。ただCPUは、ひょっとすると早くなればもっと快適になるかもしれない、とは思っていました。そしてメモリ2GBとなれば、時折あるChrome閲覧中のドロップもなくなるかもしれない、という期待もありました。…とかなんとか言いましたが、要はどうしても新型が欲しかった、物欲に負けた、といったところでしょうか。&lt;/p&gt;&#10;&lt;h2 id="期待をはるかに上回る満足度"&gt;期待をはるかに上回る満足度&#10;&lt;/h2&gt;&lt;p&gt;物欲に負けて衝動買いに近い買い物をしてしまったiPad Air 2ですが、いざ使ってみるとその快適さの向上は想像をはるかに上まわっていました。&lt;/p&gt;&#10;&lt;h3 id="cpu効果good-readerでの自炊pdf閲覧が非常に快適"&gt;CPU効果？Good Readerでの自炊pdf閲覧が非常に快適&#10;&lt;/h3&gt;&lt;p&gt;まず感動したのが、今まで遅くて正直使えたものではなかったGood Readerでの自炊pdf書籍の閲覧が、非常に快適になったことです。表示に異常な時間がかかり、特にOCRを施したものは、とても実用に耐えるものではありませんでした。しかし、iPad Air 2ではすぐにページが表示され、非常に快適です。これならOCRも使えます。素晴らしい！これだけでも買い替えた価値あったというものです。わかってはいましたが、やはりCPUがネックだったのですね。第三世代iPadでは、ブラウザでのグラフ表示にも問題がありました。それもすべて改善されました。&lt;/p&gt;&#10;&lt;p&gt;もちろんCPUがパワーアップしたことの恩恵は電子書籍にとどまりません。あらゆる挙動がキビキビとして、非常に気持ち良いです。Webブラウジング一つとっても全然違います。&lt;/p&gt;&#10;&lt;h3 id="指紋認証とパスワード管理アプリの相性が素敵"&gt;指紋認証とパスワード管理アプリの相性が素敵&#10;&lt;/h3&gt;&lt;p&gt;指紋認証はあれば非常に便利であろうとは思っていました。実際最初使った時、まぁそこそこ便利であるな、という認識でした。それがとんでもなく快適なものであると思うようになったのは、パスワード管理アプリを導入してからでしょうか。私はMacでは1Passwordを使用しており、iPadでも同期して使用することができます。とはいえ、毎度マスターパスワードをタブレットで入力するのは非常に面倒なのですが、そのマスターパスワードを生体認証でクリアすることができると、これはたいへん素晴らしい。iPhone 6がどうにも気に入らなくて、ついXperia Z3を購入してしまいましたが、これのために次のiPhoneが出たらまたiPhoneに戻ろうかと思うほどです。まぁ、Xperiaは防水が便利なので、ひとまずこのまま使い続けると思いますが…。&lt;/p&gt;&#10;&lt;h3 id="驚くべき軽さ"&gt;驚くべき軽さ&#10;&lt;/h3&gt;&lt;p&gt;軽いということは知っていました。店頭で触ったこともあります。いざ常用してみると、それは想像よりも素晴らしい体験でした。特に私は電子書籍を読むという用途が多いので、手に持ったとき軽く感じるのはたいへんに有り難いことです。正直に言って、自分が軽さにここまで感動するとは思いませんでした。持っているだけでなんだか楽しくなってくるような気さえします。驚きです。&lt;/p&gt;&#10;&lt;h2 id="満足"&gt;満足&#10;&lt;/h2&gt;&lt;p&gt;というわけで、私にとってはやや意外な結果でしたが、非常に満足度の高い素晴らしい買い物でした。新しかったiPadに飛びついた人たちは、そろそろ買い替えが悩ましい時期だと思いますが、多くの人にとってはそれだけの価値があるアップデートであると思います。素敵でした。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00OT3VUO4" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>ロゴから先に進まなかったNexus7(2012)復活</title><link>https://hack-le.com/43577021-2/</link><pubDate>Sat, 11 Apr 2015 12:15:26 +0900</pubDate><guid>https://hack-le.com/43577021-2/</guid><description>&lt;p&gt;本記事は、ある日突然延々とGoogleのロゴが表示され続けるだけの板になってしまったNexus 7(2012)を、なんとかあれやこれやして復活させた時の記事です。&lt;/p&gt;&#10;&lt;h2 id="ある日文鎮化した旧型nexus-7"&gt;ある日文鎮化した旧型Nexus 7&#10;&lt;/h2&gt;&lt;p&gt;Nexus 7(2012)がお亡くなりになりました 。ブートローダは起動するものの、起動しない。Googleのロゴが延々と表示され、そこから先に進まない、という症状です。きっかけは謎です。特にroot化しようとしたなどもなく、これといったことは何もしていない、のですが。ある日普通にBookLiveの電子書籍を読んでいたら突然。&lt;/p&gt;&#10;&lt;p&gt;色々やった末、なんとか文鎮状態のNexus 7(2012)を復活させることができましたので、記事として残します。必要なものとしては、WindowsのPCくらいでしょうか。&lt;/p&gt;&#10;&lt;h2 id="やったこと"&gt;やったこと&#10;&lt;/h2&gt;&lt;p&gt;PCからファクトリーイメージをNexusに直接焼いてやります。以下手順。&lt;/p&gt;&#10;&lt;h3 id="ブートローダの起動"&gt;ブートローダの起動&#10;&lt;/h3&gt;&lt;p&gt;なにはともあれ、まずはブートローダの起動です。電源ボタンと音量ボタンの長押しで起動。これでOK。起動後は物理ボタンで操作するようになります。&lt;/p&gt;&#10;&lt;h3 id="usbドライバのインストール"&gt;USBドライバのインストール&#10;&lt;/h3&gt;&lt;p&gt;次に、Nexus 7をWindows PCに接続します。デバイスマネージャを見てみると、なにかしらのAndroid機が接続されていることはわかりますが、ドライバがインストールされていない為にデータのやりとりができないことがわかります。それで、デバイスマネージャからドライバの更新をします。やり方の詳細は「&lt;a class="link" href="http://developer.android.com/sdk/win-usb.html" target="_blank" rel="noopener"&#10; &gt;Google USB Driver | Android Developers&lt;/a&gt;」を参照。一応ざっくり書くと、Android SDKをダウンロードして、解凍。で、ドライバの場所を指定するときに、解凍したフォルダのextras\google\usb_driverを指定です。うまくいけば、デバイスマネージャでNexusがちゃんと認識されることがわかります。これで、PCからNexusをあれこれいじれるようになりました。&lt;/p&gt;&#10;&lt;h3 id="nexus-root-tooklitでnexusを初期化"&gt;Nexus Root TooklitでNexusを初期化&#10;&lt;/h3&gt;&lt;p&gt;別にRoot化したいわけではありませんが、Nexus Root Toolkitを使用して、Nexusを初期化します。詳細は「&lt;a class="link" href="http://gintoki-note.blogspot.jp/2013/11/nexus-root-toolkit72012.html" target="_blank" rel="noopener"&#10; &gt;Gintoki Note: 【Nexus Root Toolkit】を使ってNexus7（2012）を初期化してみよう&lt;/a&gt;」なのですが、一応私の手順をざっくり書いておきます。まず、モデルタイプはNexus 7 Wi-fiとかまぁ適切なやつを選びつつ、OSは私は現状最新の5.1にしました。で、最初の状態だとブートローダがロックされているはずなので、まずこれをアンロックします。「Unlock」の項目があるので、まずそれを実行。そしたら、「Back To Stock」の「Flash Stock + Unroot」を、「Soft-Bricked/Bootloop」にチェックを付けた状態で実行。imgをダウンロードしてflash。なんか推奨設定みたいなのをすると、強制flashみたいな項目にチェックが付くのですが、それは付けずに実行。するとなんかプロンプト画面が出て色々ごちゃごちゃやってくれます。終わったらNexus 7の電源を一旦落として、再起動。ダメならもっぺん再起動。そうしたら、復活しました。ちなみに4.1をインストールして、そこから順々にアップグレードさせていく、もできました。&lt;/p&gt;&#10;&lt;h2 id="nexus-72012にandroid-51はどんな感じか"&gt;Nexus 7(2012)にAndroid 5.1はどんな感じか&#10;&lt;/h2&gt;&lt;p&gt;ついでなので、旧型Nexus 7にAndroid5.1はまともに動くのかについても。結論を言うと、まともに動いてます。最初もたつきが感じられましたが、使ってるうちにちゃんと動くようになりました。とはいえ、使って二時間くらいの印象なので、使い込むことができるレベルかどうかはなんとも言えません。そして私がNexus 7を使い込む可能性はかなり低いです。なぜなら5インチのXperia Z3と10インチのiPad Air2があるので、7インチという中途半端な大きさで性能も低いNexus 7を使う予定はないからです。じゃあ何故復活させたのかと言われると、やってみたかったからとしか言いようがありません。&lt;/p&gt;&#10;&lt;p&gt;そんな感じでした。&lt;/p&gt;</description></item><item><title>iPhoneからXperia Z3に乗り換え、快適</title><link>https://hack-le.com/43300127-2/</link><pubDate>Sun, 22 Mar 2015 16:44:50 +0900</pubDate><guid>https://hack-le.com/43300127-2/</guid><description>&lt;p&gt;これまで散々白ロムは嫌だ純粋なSIMロックフリーが良いと書き続けてきましたが、なんだかんだで結局白ロムのXperia Z3を買ってしまいました。私はこれまでiPhone 5を使ってきていて、iPhone 5自体には特に不満もなかったのですが、なんといっても高騰する通信費、これを真っ正直に払うのはいかにも阿呆らしい。&lt;/p&gt;&#10;&lt;p&gt;ということで、SIMロックフリーを、と思ったものの、日本国内で正規に流通している端末といえば、HuaweiやASUSのZenFone 5。これらの端末は価格も3万程度、スペックもそこそこで悪くはない、悪くはないのですが、そこはオタクな私、スマホはできるだけ良い物を使いたい。&lt;/p&gt;&#10;&lt;p&gt;しかしiPhoneのSIMロックフリー版はいつのまにやら販売停止しているし、そもそも流石に高すぎる…そこへいくとSonyのXperia Z3は、白ロム市場での2015年3月現在の相場は5万弱で最新のiPhoneに引けをとらない機能を有しています。まぁもちろんOSの違いという大きすぎる違いはあるのですが、昨今Androidも随分と熟れてきたとききますし、そろそろAndroidをまた使ってみたくもありました。&lt;/p&gt;&#10;&lt;p&gt;そんなわけでXperia Z3を買いました。Amazonのマーケット・プレイスで購入、だいたい5万円。驚くほどすぐ届きました。回線はiijimoの一番安い1000円のSMS付きのもの。現在使い始めて3,4日といったところですが、これがなかなかよい。なんといっても防水は大きい。まだ使っていませんが、おサイフケータイ機能も嬉しい(せっかくの白ロムですしね)。&lt;/p&gt;&#10;&lt;p&gt;AndroidはiOSよりは緩々なためか、iOSだと同期中などでまだ動いて欲しいのにアプリはすぐに止まっていましたが、Androidではそういった心配がないのが嬉しい。個人的には一番喜ばしかったのが、愛用しているEvernote Foodの写真が、Android版だとすぐに表示されたことです。これがiOS版だと、なぜか読み込みに異常に時間がかかる。また同期中他のアプリにうつるとすぐ同期が停止されたりと、余計なおせっかいが不便でした。そういったことがない。音楽の同期には少し苦労していますが、多少の有料アプリを使えばまずまずiPhoneと同じようにうまく同期させることができそうです。microSDで128GBのものが使用できるので、私の持っているすべての音楽を同期できて嬉しい。&lt;/p&gt;&#10;&lt;p&gt;iOSにしかないアプリも多数ありますし、iPhone自体に特に不満というほどのものもなかったのですが、Xperia Z3もなかなかのもので、今のところたいへん満足しています。やはり洗練さとなるとiOSのほうが優れているかもしれませんが、雑多故な便利さのようなものがAndroidにはあり、部屋を散らかし気味に最適化する自分にはこちらのほうが性に合っているかなとも思います。しかし、やはりちょっと大きいかもしれません。スマートフォンとしては、5インチが最大サイズですね。iPhone プラスの5.5インチ、果たしてどんなものなのでしょうか。そういえばZenFone 5の新型も5.5インチだとか。私のようなポケット族でしかも手が小さい人間には、ちょっと厳しい流れですねぇ。&lt;/p&gt;&#10;</description></item><item><title>SIMフリーのiPhoneがAppleストアで販売停止？</title><link>https://hack-le.com/41919146-2/</link><pubDate>Sun, 21 Dec 2014 08:46:09 +0900</pubDate><guid>https://hack-le.com/41919146-2/</guid><description>&lt;h2 id="apple-storeでiphoneが買えない"&gt;Apple StoreでiPhoneが買えない&#10;&lt;/h2&gt;&lt;p&gt;昨日「&lt;a class="link" href="//hack-le.com/41755044-2/" &gt;ガラパゴスを超えてSIMフリーのおサイフケータイを希望する : 或る阿呆の記&lt;/a&gt;」という記事を書き、迷ったらiPhoneにすればよいというのは大きいと書いたのですが、最近RSSで購読している記事を見ていたら、なんと現在注文できない状態になっているようですね…。一応Apple Storeのラインナップにはあるのですが、お取り扱いできないとのこと。その状態がここしばらくずっと続いています。&lt;/p&gt;&#10;&lt;p&gt;色々な憶測が流れているようです。キャリアの圧力のためだとか、今日本は円安だから外国からすると安くiPhoneを購入できる国で、転売屋の供給源になっているからだとか、単に数を中国に回したいのだろうとか。いずれもありそうではあるものの確証を得るには至りませんが、現在SIMフリーのiPhoneが正規に手に入れられない状況であることは事実です。オークション等では価格が高騰しているとも聞きます。&lt;/p&gt;&#10;&lt;p&gt;SIMフリー端末について調べていると、全バンド対応のハイエンドというiPhoneの特殊性は際立つものであり、また素晴らしいものですから、日本国内での販売再開を祈りたいところです。結果として値上げになったとしても、恐らくまとめサイトなどではApple叩きが横行するかもしれませんが、円安は今の日本の国策ですから為替のレートに則っている限りは致し方ないことであり、最終的には大方の理解を得られるでしょう。&lt;/p&gt;&#10;&lt;p&gt;この間隙をついて、SONYあたりはXperiaを日本で使いづらいグローバル版ではなく、全バンド対応のSIMフリー版を出せば、いくらかのシェアをAppleから奪えると思うのですが、国内の大手メーカーにはもう期待してはいけないのでしょうか。Xperiaは個人的にはたいへん素晴らしい端末だと思いますし、白ロムでの購入も検討しているくらいですが、やはりできればそういう怪しげなものではなく正規のルートで購入したいものです。&lt;/p&gt;&#10;</description></item><item><title>ガラパゴスを超えてSIMフリーのおサイフケータイを希望する</title><link>https://hack-le.com/41755044-2/</link><pubDate>Thu, 11 Dec 2014 17:38:31 +0900</pubDate><guid>https://hack-le.com/41755044-2/</guid><description>&lt;p&gt;私は次にスマホを買う時は、SIMフリーのものにしようと考えています。キャリア紐付けのものが嫌な理由はいくつかあり、高額で縛り付きのデータプラン、悪さしかしないプリインアプリ（アップデートの足かせ！）、あまりカッコよくないロゴ等ですが、何よりキャリアありきの売り方というのに違和感を感じます。&lt;/p&gt;&#10;&lt;h2 id="キャリア紐付けよりもsimフリーがいい"&gt;キャリア紐付けよりもSIMフリーがいい&#10;&lt;/h2&gt;&lt;p&gt;ネットではMNP乞食などという口の悪い言葉もありますが、そのような言い方が跋扈するような売り方をキャリアが行っていることも事実で、それはあまり健全な姿とは言えないと思うのです。そういった理由から、キャリアと端末を分離して考え、また海外旅行などでもあわよくば使いたいなどと思い、SIMフリーのスマートフォンを探している昨今です。&lt;/p&gt;&#10;&lt;h2 id="広がるsimフリー機の選択肢"&gt;広がるSIMフリー機の選択肢&#10;&lt;/h2&gt;&lt;p&gt;ちょっと前までは、SIMフリー機というのは実に選択肢が限られていたようですが、ここ1年くらいで随分と様相が変わりました。少々高くつきますが、迷ったらiPhoneにすればよいというのは大きいのではないでしょうか。高くつくとはいったものの、たとえばソニーのXperiaのようなハイエンド機はAndroidでも同じような値段がします。ハイエンドとはそういうものなのでしょう。また、Freetelのようなローエンドはもちろん、最近はついにASUSのZenFone 5のようにお手頃かつそこそこのミドルエンドの端末もでてきました。たいへん素晴らしいことだと思います。残念なのは、Freetelのような意志ある特例を別にすれば、この市場において日本勢はとんと元気がないことです。キャリア主導の開発にメーカーも慣れ切ってしまっているということでしょうか。ハイエンドのXperiaはグローバルモデルもありますが、それは周波数帯域の問題で国内ではあまり使い勝手はよろしくなさそうであり、またもちろんガラパゴスと揶揄されながらも便利な機能であるおサイフケータイ機能も実装されていません。&lt;/p&gt;&#10;&lt;p&gt;そこなのです。探してみて気づいたのが、おサイフケータイ機能有りのSIMフリー機というのはまるでないのですね。もちろん、白ロムと呼ばれる、SIMロックを解除した端末を売る中古市場(転売市場？)もありますが、それはキャリア依存の抜け道のようなもので、やはり正規とは言い難いものですから、除外して考えます。&lt;/p&gt;&#10;&lt;h2 id="ガラパゴス問題"&gt;ガラパゴス問題&#10;&lt;/h2&gt;&lt;p&gt;ガラパゴスとはあまり良い意味では使われませんが、防水防塵、オサイフ、ワンセグといった機能は、世界のスタンダートではないものの便利な機能です。私はワンセグはいりませんが、少なくとも防水防塵は世界に広まってほしいと思っているし、おサイフケータイ機能もたいへん便利で、アメリカを沸かせたApple Payなんて日本人からすれば「いまさら何を言っているのか」といったところです。ですから、ガラパゴスの何が悪いんだ、日本独自のものをもっと誇るべきだ、というような論調も珍しくはありません。実際それについては私も異を唱える気はないですし、印象を逆手に取ったSHARPの同名の機等はたいへん意欲的かつ野心的であったと思います（結果はどうあれ）。ですが、ガラパゴスの問題というのは、独自の機能があるということではなくて、その閉鎖性でしょう。おサイフケータイのSIMフリー機が（白ロムを除いて）ないということが、ガラパゴスの問題点を端的に集約しているように思えます。ガラパゴスケータイの機能はあくまで、従来の、キャリアありきの、国内で利用することのみを前提とした枠組みの中でのみ使えるものです。&lt;/p&gt;&#10;&lt;p&gt;これは技術的問題もあるとは思いますが、しかし大きくは各社の思惑というか、そういったところが大きいのではないでしょうか。いつまでも旧来の枠組みでいようとしたって、海の外からその枠組をぶち壊そうという人はたくさんでてきて、また我々日本人もその枠組にいなければいけないという決まりもないので、結局は便利でお安いシステムにのっかろうということになり、その時になってあああの時一歩踏み出しておけば、と悔やむことになっては悲しいでしょう。まぁそんなわけですから、ちょっと勇気を出して、SIMフリーでキャリア関係なしのおサイフケータイを日本メーカーには出してほしいですね。その頃にはもう私は別のスマートフォンを買ってそうではありますが…。&lt;/p&gt;</description></item><item><title>Chromebookが日本でも個人向けに発売開始</title><link>https://hack-le.com/41235505-2/</link><pubDate>Tue, 11 Nov 2014 17:56:01 +0900</pubDate><guid>https://hack-le.com/41235505-2/</guid><description>&lt;h2 id="chromebookが日本でも個人向けに販売"&gt;Chromebookが日本でも個人向けに販売&#10;&lt;/h2&gt;&lt;p&gt;ついに日本でもChromebookが個人向けに販売されるようになりました。「&lt;a class="link" href="http://googlejapan.blogspot.jp/2014/11/chromebook.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:&amp;#43;GoogleJapanBlog&amp;#43;%28Google&amp;#43;Japan&amp;#43;Blog%29" target="_blank" rel="noopener"&#10; &gt;Google Japan Blog: Chromebook がどなたでも利用いただけるようになります&lt;/a&gt;」を見ると、DellとAcerからそれぞれ11インチのノートPCが出ているようです。価格は概ね3万円台といったところでしょうか。今後さらに価格競争がされて2万円台にはなりそうに思えます。パフォーマンスを考えると、たいへんお値ごろでしょう。&lt;/p&gt;&#10;&lt;h2 id="現実に魅力的になったchromebook"&gt;現実に魅力的になったChromebook&#10;&lt;/h2&gt;&lt;p&gt;昔初めてChromebookの構想を聞いた時には(もう何年前のことだったでしょう？)、随分と無謀というか現実味のないことに思えましたが、2014年現在、なるほどたしかに相当なことがWebアプリで完結させることができます。Googleはこうなることを見越して開発を進めていたのか、いやGoogleが考えるように世界が進んでいるのか、わかりませんが、さすがGoogleといったところでしょうか。セキュリティという観点からも、個人任せのローカルよりもクラウドのほうが、体制させ整えればセキュアであるし責任もハッキリすると思うようになりました。クラウドにあれば盗難にあってもなんとかなりそうなものです。もちろんパスワードによるブロックをしていなければ何にもなりませんが…生体認証システムはこれにこそ搭載してほしいですね。とはいえ、現実的にはそのような恵まれた体制を整えられるのはまだまだ一部の先進的な（？）ベンチャー企業や個人事業主に限るでしょう。&lt;/p&gt;&#10;&lt;p&gt;Chromebookはまず一部の仕事人にとってたいへん有用なマシンであると思えますが、個人にとってもそれは同じです。もちろんローカルアプリというのは必須なのですが、その多くはデスクトップPCに置いておけば十分で、ノートPCにまで搭載させなければいけない類のものではないかもしれません。MS OfficeでさえMS謹製のオフィスオンラインで多くのことはできるようになっていますし、Googleドキュメントであればその親和性は言わずもがなです。私の場合はサーバーにsshでアクセスすることが多いのですが、最近はWebアプリのターミナルエミュレータもありますので、その点も困りません。もちろんノートでDTMやCG、ムービー編集といったことをしたい向きもあるでしょうから、そこは人それぞれということになりますが、Webブラウジング、テキスト編集、オフィススイート、プログラミングといった用途が主であれば、これはもうほとんど困らないのではないか。&lt;/p&gt;&#10;&lt;p&gt;そうはいっても常に良質なネット環境のある場所かというとそんなこともないので、ローカルにおける利用というのは今後も課題となるでしょうが、自分の使用用途というのを考えたとき、今後はノートPCにかかる経費を大幅に節約できることになるかもしれないと思うと、Chromebookは非常に魅力的でかつ面白く、今後も注視していきたいと思います。&lt;/p&gt;</description></item><item><title>ASUS ZenFone 5は非常にバランスがよさそう</title><link>https://hack-le.com/41042734-2/</link><pubDate>Fri, 31 Oct 2014 22:11:20 +0900</pubDate><guid>https://hack-le.com/41042734-2/</guid><description>&lt;h2 id="次のスマートフォン"&gt;次のスマートフォン&#10;&lt;/h2&gt;&lt;p&gt;私は現在iPhone 5を利用していますが、これはSoftbankのSIMロックがかかった機体ですので、次はSIMフリーのスマートフォンが欲しいと考えています。MVNO(もう少しポピュラーな名前はないものでしょうか)のほうが経済的であるし、キャリアに縛られないということそのものが、思想的に正しいように思えるからです。&lt;/p&gt;&#10;&lt;p&gt;iPhone 5の次となれば、素直に考えればiPhone 6です。iPhone 6はもちろん魅力的なハードではありますが、やはりどうしても値段が高い。先日「&lt;a class="link" href="//hack-le.com/40919677-2/" &gt;高性能タブレットで何をすればよいのだろう : 或る阿呆の記&lt;/a&gt;」という記事で、性能の高いタブレットを買ったところでその用途となると現在の私には宝の持ち腐れになりそうだ、くらいのことを書きましたが、それはスマートフォンでも言えます…というより、スマートフォンのほうがタブレットよりもより簡単なことしかしないので、この問題は顕著です。&lt;/p&gt;&#10;&lt;h2 id="iphone以外の選択肢"&gt;iPhone以外の選択肢&#10;&lt;/h2&gt;&lt;p&gt;よくよく考えてみると、私がiPhoneでなきゃどうしてもいけない理由というのはあまりないようです。iOSにしかないゲームもありますが、それはiPadでやりますし。私のスマートフォンの利用方法はとてもシンプルで、ブラウジング、メール、SNS、RSS、カメラ、Evernote、ミュージック、電子書籍、といったところです。うーん、iBooksが使えないのは辛いといえば辛いところでしょうか。iTunesを使えないのもMacで楽曲を管理している身の上では辛いかもしれません。しかしそれはクリティカルなことではありません。&lt;/p&gt;&#10;&lt;p&gt;Android端末もXperia Z3やNexus 6などのハイエンド機は結局それなりの値段がしますが、前述したようにシンプルな使い方の多い私の場合、わざわざハイエンド機にする必要はないと考えられます。そうすると、ポケットに入るという前提で、最近国内上陸を果たしたAsus のZenFone 5が非常にバランスに優れた良い機体に思えます。&lt;/p&gt;&#10;&lt;p&gt;このZenFone 5ですが、たいへん壺を押さえたつくりです。CPUは前世代のものですが、決して悪いものではありません。RAM 2GBは良いですね。おサイフケータイに対応していないことはグローバルモデルですから仕方ないものの、少し残念な気持ちはありますが、それくらいです。解像度はこの大きさであればHDで十分と思います。なによりAndroidであるという点が、最近あまりにもApple一辺倒な私にとってはよいかもしれない。&lt;/p&gt;&#10;&lt;p&gt;本当はiPhone、欲しいんですけどね。&lt;/p&gt;</description></item><item><title>iTunes 12もやっぱりジャンル名を勝手に日本語にする。勝手にローカライズ問題は続く</title><link>https://hack-le.com/41011431-2/</link><pubDate>Thu, 30 Oct 2014 06:48:14 +0900</pubDate><guid>https://hack-le.com/41011431-2/</guid><description>&lt;p&gt;最初に。環境はOSX 10.9.5です。&lt;/p&gt;&#10;&lt;p&gt;ああ、やってしまった。つい全部アップデートしまった。問題が出尽くして解決策がある程度出されるまで待とうと思っていたのに…やってしまいました、iTunesのアップデート…。iTunes 12にしてしまいました。ああ、もう、もう…。&lt;/p&gt;&#10;&lt;p&gt;追記：本記事ではLocalizable.stringsの書き換えで対応していますが、High Sierraでエラーが出たそうです。多分SIPのせいです。一応対応策を書いておきます→「&lt;a class="link" href="https://hack-le.com/itunes-high-sierra/" &gt;High SierraでiTunesのLocalizable.stringsをmv（リネーム）しようとしてoperation not permittedと怒られた場合の対応 – 或る阿呆の記&lt;/a&gt;」。&lt;/p&gt;&#10;&lt;h2 id="itunesの勝手にローカライズ問題"&gt;iTunesの勝手にローカライズ問題&#10;&lt;/h2&gt;&lt;p&gt;このiTunesというソフトは悪夢のようなソフトでして、アップデートのたびに問題を連発してくれ、おまけにその独善的なUIは慣れるのにも一苦労、ようやく慣れてきたと思った頃にまた大幅に変える、とまぁそれくらいはいいのです。いやよくないのですが、もういいです。Apple様のいうことですから。しかし独善ここに極まれりと思うのは、曲の情報を勝手に変更するところでしょう！いえ、正確には変更しているのではなくあくまでiTunes上でそのように表示しているだけ、という話も聞きますが、まぁそんなことはどうでもよいのです。iTunesで見た時にRockとロックが入り交じっていることこそ問題なのです。英語のジャンル名を勝手に日本語にするのは、検索をかければネット上に怨嗟の声が溢れています。おまけにその日本語名がまた、Alternativeがオルタナティプだったりと、果たして日本人が関わっているのかすら怪しいレベルです。その他ジャンル名以外にも勝手なローカライズをしてくれているようで、iTunesの独善的なローカライズ問題は調べれば調べるほど悪評しか見ないのですが、いったいどういう信条なのか、Appleはここ数年この仕様を固く守り続けています。救いようのない阿呆がAppleの上層にいることは間違いないでしょう。いや、ひょっとするとAppleユーザーを減らすために某社から派遣されたスパイが、わざと使いづらくしているのではないか、そんなことすら思わせるほどに、iTunesは改悪に改悪が現在進行形で重ねられ続けているどうしようもない救いがたいアプリなのです。App StoreにiTunesのアップデートがきているなど、悪夢以外のなにものでもなく、それがメジャーバージョンアップであった日には、相当の覚悟をもってアップデートしなくてはいけません。このようなソフトは本来であれば使いたくないのですが、iPhoneやiPad、MacとApple製品を使用している限りは、ストア、同期等の問題もありますので、総合的には結局iTunesを使うのがまだしもトラブルが少ない、ということになります。他の純正アプリはまだ代替がありますが、iTunesばかりはそうもいかない…。Appleユーザーである限りは、この悪魔と戦い続けなければならないのです。&lt;/p&gt;&#10;&lt;h2 id="やったこと"&gt;やったこと&#10;&lt;/h2&gt;&lt;p&gt;とまぁつい感情的になってごちゃごちゃといってしまいましたが、要はローカライズ問題さえどうにかすれば、まぁまぁ、許されるレベルにはなるかと思います。ローカライズはLocalizable.stringというファイルでなされており、ジャンル書き換えを防ぐだけであれば、このファイルを編集してやればそれで済む話でした。ところが、バージョン11くらいからこれがバイナリファイルになりまして、そうなると素人にはちょっと難しい。本当に何故そんなところにばかり力を入れるのか？やはりスパイか、スパイなのか。Appleの凋落を狙うスパイがiTunesという大事なソフトをウンコにしようと目論んでいるのか。わかりません。とはいえこのファイルさえどうにかしてやれば、ローカライズ問題についてはなんとかなるはず。というわけで、単純な方法ですが、英語のフォルダから同名のファイルをコピーしました。これにより、UIが英語になってしまいますが、まぁそれくらいはどうってことありません。Alternativeがオルタナティプになってしまうことに比べれば、ね。それだけです。はい。&lt;/p&gt;&#10;&lt;p&gt;一応やり方を書いておきます。Terminalを起動して、以下のコマンドでコピーします(単なるコピーなのだからFinderでやればという向きもありますが、管理者権限が必要な領域なので端末を使います)&lt;/p&gt;&#10;&lt;pre&gt;`$ cd /Applications/iTunes.app/Contents/Resources/Japanese.lproj&#13; $ sudo mv Localizable.strings Localizable.strings.bak&#13; $ sudo cp -a ../English.lproj/Localizable.strings .&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;やってることは、日本語のフォルダにあるLocalizable.stringsをバックアップして、その後英語のフォルダのLocalizable.stringsを日本語のフォルダにコピーしてるだけです。sudoはパスワード必要です。もし同じことをする人がいましたら、自己責任で。…iTunesがアップデートされたらまた忘れずにやらないとですね。&lt;/p&gt;&#10;&lt;p&gt;…それにしても、右上にファーストネームが表示されるの、なんか嫌ですね…。日本人には抵抗のある人が多いように思います…。あと再生回数の幅、ただでさえ広すぎだったのに余計に広くなっていませんか…。&lt;/p&gt;&#10;&lt;h2 id="追記high-sierraでエラーが出た"&gt;追記：High Sierraでエラーが出た&#10;&lt;/h2&gt;&lt;p&gt;以下に追記記事。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://hack-le.com/itunes-high-sierra/" &gt;High SierraでiTunesのLocalizable.stringsをmv（リネーム）しようとしてoperation not permittedと怒られた場合の対応 – 或る阿呆の記&lt;/a&gt;&lt;/p&gt;</description></item><item><title>高性能タブレットで何をすればよいのだろう</title><link>https://hack-le.com/40919677-2/</link><pubDate>Sat, 25 Oct 2014 05:35:21 +0900</pubDate><guid>https://hack-le.com/40919677-2/</guid><description>&lt;p&gt;いつの間にかAppleに囲い込まれた私は、気がつけばMacにiPhone、iPadを取り揃えていました。非常に満足しているのですが、いまだソフトウェアエンジニアの道を諦められない私は、Appleの用意してくれた快適なリゾートで暮らすばかりでよいのだろうかと思うこともあります。まぁ、せめてAndroid端末の一つくらいはもっておいてもよいだろう、と思うのですが、そうは言っても決して裕福ではない私、さしたる目的もなしにガジェットの購入は気が進みません。我が身を振り返り、自分がスマートフォンやタブレットで何をしているか考えてみました。すると、まったく大したことはしていないなと思うし、それ以上のことをしたいとも特に考えてはいない自分が浮き彫りになりました。&lt;/p&gt;&#10;&lt;p&gt;私はスマートフォンとタブレットを間違いなく活用しています。けれども、その活用といえば、地図を見たり、電子書籍を読んだり、ネットをしたり、メールをしたり、SNSをしたり、音楽を聞いたり、ゲームをしたり、といった程度です。それ以上のことはしませんし、したいとも思いません。これがPCであれば、重い処理を行うことはたびたびありますから、より高い性能のものを…と思うのですが、さてこれがタブレットとなると、どうでしょう。既に安価で売られているもので、必要十分ではないか、と思います。たとえばSonyのXperia Z ultraなどはSIMフリーの6.4インチ端末が32,000円というたいへん熟れた値段で売られていますが、これにしても私の用途では過剰投資とさえ言えるかもしれません。まして最近発売されたNexus 6など言わずもがな、です。&lt;/p&gt;&#10;&lt;p&gt;スマートフォンやタブレットとはその程度のものなのだろうか、と悩みます。と、そこで、最近私の持つ第3世代で処理が追いつかなかったことがあるのを思い出しました。仕事で使っているとある時系列データを、Webアプリで簡単にわかりやすくヴィジュアライズできるということで、dygraphというライブラリを用いてグラフ化したのですが、私の第3世代iPadでそのアプリの実行をするのは、やや荷が重いことのようでした。拡大や縮小といったことをすると明らかに処理が追いついていません。JavaScriptですから、処理は主にクライアントの端末で行われるので、これは明らかにマシンのパワー不足です。私がiPadでスペックの不足を痛感したのはこれが初めてかもしれません(PDFの閲覧で、CPUがよくなればもっとサクサク読めるようになるのだろうか、と思ったことはありますが)。&lt;/p&gt;&#10;&lt;p&gt;恐らく、単純なホビー用途では既にスマホもタブレットも完成されているのでしょう。最新のゲームを楽しんでいる層は別にしても、そうでなければ旧世代機であってもまずスペックで困ることはないはず。しかしそれ以上のことを求めると、やはりより良い性能のマシンが欲しくなる。そうなると、それは仕事であったり、ホビーであっても何か創作的なことであったり、ということになるでしょう。&lt;/p&gt;&#10;&lt;p&gt;そういえば、そろそろ仕事で使えるようなアピールがiPadでもなされるべきじゃないか、という記事を最近読んだ記憶があります。その時は「iPadやタブレット等はホビーで使うべきものでは」と思いましたが、その人もこのような考えのもとに書いたのかもしれません。この新しいマシンを、そろそろ次のステップに進める時が来たのではないか、ということでしょう。&lt;/p&gt;&#10;&lt;p&gt;しかし、現在そのためには明らかに足りないものがあります。それはなにか、考えだすとキリがなさそうですが、現にiPad等で仕事や創作的なことをする、というのは考えただけでも不便で仕方ないように思います。その不便さの理由を一つ一つ考え、また便利さに目を向け、新しい何かを、コンピュータ好きとしては目指すべきかもしれません。&lt;/p&gt;&#10;&lt;p&gt;なんだか抽象的な話になってしまいましたが、要は、自分で用途を見つけられるなら好きなものを買えばいいし、見つけられそうにないのであれば、旧世代機の安いものを、サイズに注目して買えばよい、というのが今の結論です。何か、私にとっての新しい用途はあるだろうか。&lt;/p&gt;&#10;</description></item><item><title>第3世代iPadからiPad Air 2に乗り換えるか悩む</title><link>https://hack-le.com/40801823-2/</link><pubDate>Sat, 18 Oct 2014 20:40:14 +0900</pubDate><guid>https://hack-le.com/40801823-2/</guid><description>&lt;p&gt;追記：買いました「&lt;a class="link" href="//hack-le.com/43637821-2/" &gt;第三世代iPadからiPad Air 2に買い替えた所感 : 或る阿呆の記&lt;/a&gt;」&lt;/p&gt;&#10;&lt;p&gt;第3世代iPadこと新しかったiPadは、iPadがついに念願のRetinaに対応し、これはきたと即注文したら半年後に新型が出たというちょっと悲しい製品です。とはいえ主に電子書籍と、いくつかのゲームくらいにしか使っていない私にとって、これでも実は十分に使えていたりします。ですが、ここにきてiPad Air 2は順当進化を続け、そろそろ買い替えどきが思わせるような完成度になりました。円安が進みお値段もお高い昨今、決定打と言えるほどのものはない中で、買い替えを悩みます。&lt;/p&gt;&#10;&lt;h2 id="買い換えるか否か"&gt;買い換えるか、否か&#10;&lt;/h2&gt;&lt;h3 id="第3世代でipadは十分に完成されていた"&gt;第3世代でiPadは十分に完成されていた&#10;&lt;/h3&gt;&lt;p&gt;iPad 2までと第3世代iPadからは明らかに違っています。それはもちろんRetinaか否かです。特に電子書籍をよく読んでいる私にとって、Retina対応は必須条項。逆に言うと、Retinaにさえ対応していれば、重いアクションゲームやレーシングゲームをしない私にとってマシンパワーをそこまで要することもなく、第3世代iPadでも必要にして十分な機能を備えていると言えます。この業界で二年半前と言えば完全に型落ちの旧世代ですし、実際そのとおりなのですが、それでも特に困る、ということはないのです。まぁ、私的な話をすれば液晶ガラスが少し割れてしまい、それが気になっていることは確かですが、すっかり慣れてしまったもので、何がなんでも嫌というほどではありません。&lt;/p&gt;&#10;&lt;h3 id="第3世代ipadに対するipad-air-2の利点"&gt;第3世代iPadに対するiPad Air 2の利点&#10;&lt;/h3&gt;&lt;p&gt;それでもiPad Air 2がきになるのは、やはりそれだけパワーアップしているところがあるからです。まず&lt;strong&gt;画面が非常に綺麗になっている&lt;/strong&gt;ようです。この差は使ってみると意外と大きいかもしれません。もちろん第3世代iPadも十分に綺麗なのですが…。そしてもちろん&lt;strong&gt;重さ&lt;/strong&gt;。第3世代iPadの652gというのは決して軽い重さではありませんが、これが200g以上も軽くなる。もっとも、iPadにもなると手に持って使うという感じでもないので、重さの問題はさほどでもないのでは、という気持ちもあります。これは実際に使ってみないとなんとも言えないところでしょう。カメラは随分良くなっているようですが…iPadでカメラを使っている人ってそんなにいるんでしょうかね？CPU、これはかなり素晴らしい。&lt;strong&gt;A5XからA8X&lt;/strong&gt;ですから、この進化にはワクワクしてしまいます。タブレットでそんなに大したことをするわけでもないのにね。いや、いずれこの差が大きいと思えるような使い方をするようになりたいものですね。CPUに一番ときめいているかもしれません。あ、忘れちゃいけない&lt;strong&gt;Touch ID&lt;/strong&gt;。これは使ってみると絶対便利だろう、というのはわかります。ときめきはしませんが使い出すと離れられなくなりそうです。&lt;/p&gt;&#10;&lt;h2 id="買い替えの価値はありそうだがもう一つ心の決定打があれば"&gt;買い替えの価値はありそうだが、もう一つ心の決定打があれば…&#10;&lt;/h2&gt;&lt;p&gt;色々と考えていくと、買い替えの価値はありそうだな、と思えます。液晶ガラスがまったくの健康であればもう少し現行で頑張るか、と思ったかもしれませんが…割れていますし。が、もう一つ何かインパクトが欲しいところです。少しずつ点を細かく稼いで水準を超えた、という感じですので、決定打と言える決定打がないのですが、あと一つ、ポイントがあれば。そう、メモリです。いまだ明らかになりませんが、もしメモリが2GB搭載されていれば。時々あるアプリ落ちもなくなり、またいずれくるだろう分割画面、これにも十分対応できるでしょうし、そうであればもう迷うことなくアタックできるのですけれど…どうなんでしょうねぇ。ま、いずれにせよ私が購入できるのは私情により来春です。そのときには情報もすっかり出揃っているはずですから、先のお楽しみといったところでしょうか。&lt;/p&gt;</description></item><item><title>Mac mini 2014発表の雑感、iMac Retinaのインパクト</title><link>https://hack-le.com/40786671-2/</link><pubDate>Fri, 17 Oct 2014 22:48:18 +0900</pubDate><guid>https://hack-le.com/40786671-2/</guid><description>&lt;p&gt;世間で待っている人はあまりいなかっただろうけれど、一部の人間が待ち続けていたMac miniの新型がついに発表されました。Mac mini 2014、だいたい予想通りのマイナーアップデートです…が。&lt;strong&gt;CPUにクアッドコアのモデルがありません&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="ついに出たmac-mini-2014"&gt;ついに出たMac mini 2014&#10;&lt;/h2&gt;&lt;p&gt;私のMac mini 2012はCoire i7 2.3GHz クアッドコアですが、同様のモデルが今回はCore i5 2.6GHz デュアルコア、のようです。Ivy BridgeとHaswellの違いはあるにせよ(特にグラフィックで顕著なのでしょうか？)、どうにも魅力を感じないのは私だけではありますまい。一方、メモリが8GB標準になったことはよいことです。とはいえ、今度はメモリが半田付けされていて自分で換装できなくなっているという話も聞かれ、そうだとすれば2012モデルよりもよくなったとは一概に言えないでしょう。2012はSSD換装も自力で可能でしたが、2014はどうなるか？コンパクトなサイズでありながら必要なカスタマイズ性は残しており、またグラフィックを重視しないデスクトップマシンとしては十分な性能を持っていることがMac miniの魅力でしたが、今回それらの魅力が随分と削がれてしまったかもしれません。&lt;/p&gt;&#10;&lt;p&gt;とはいえそれなりの性能はありますし、既に2012モデルを持っている人間からしてみればあまり魅力を感じない製品であるものの、現在Mac miniを持っていない人がこれから買うにはよいでしょう。しかしメモリとSSDに拘る人であれば、もし噂通りカスタマイズ性がなくなっているとするなら、やや高い買い物になってしまいそうです。&lt;/p&gt;&#10;&lt;p&gt;今回のMac mini 2014と旧型2012の違いについては、早速わかりやすい解説記事がありましたので紹介しあｍす。「&lt;a class="link" href="http://www.kobonemi.com/entry/2014/10/17/Mac-mini-Late-2014-2012" target="_blank" rel="noopener"&#10; &gt;新型Mac mini（Late 2014）、旧型（Late 2012）と比較～知っておくべき重要な違いと性能差 - こぼねみ&lt;/a&gt;」。&lt;/p&gt;&#10;&lt;h2 id="imac-retinaのインパクト"&gt;iMac Retinaのインパクト&#10;&lt;/h2&gt;&lt;p&gt;さて、もう一つ発表されたのが、出ると噂されながらもまだ時期尚早ではとも囁かれていた、iMac Retina 27インチです。やや残念感のあるMac miniとは対照的に、こちらの製品はまったく申し分ない。5Kディスプレイを搭載しながら、ハイスペックなハードウェア性能をもち、それでいながら26万円とは。1TB Fusion Driveも魅力的ですね。これでメモリを自力換装できれば言うことないのですが、そこはどうなるか。この性能でメモリ8GBはややバランスが悪いようにも感じます。そういったところをを踏まえても、安い。もちろん26万円とは昨今のPC市場において安い値段ではありませんが、モノを考えると十分に安いと言えるでしょう。なにしろ先月出たDELLの5Kディスプレイが2500ドルですから、それと同じ値段でこのクラスのハードウェアがついてくることを考えれば、やはり安い。では買うかと言われるとそれはまた別の問題で、特にグラフィックを重視する作業をしていない私はMac mini 2012で必要十分なのでした。しかし最近3Dに興味が出てきたので、いずれiMacやMac Proが必要だと思えるようになりたいものですね。&lt;/p&gt;</description></item><item><title>iOS8への乗り換えタイミング</title><link>https://hack-le.com/40634709-2/</link><pubDate>Sun, 12 Oct 2014 13:23:15 +0900</pubDate><guid>https://hack-le.com/40634709-2/</guid><description>&lt;p&gt;iOSが7→8にバージョンアップしてもうそろそろ一ヶ月というところでしょうか。そろそろメジャーなアプリもiOS8に対応しだしました。そこで考えなくてはいけないのが、iOSのアップデートをいつにするかということです。OSのバージョンアップはいつだってトラブル続きですが、今回のiOS8もご多分に漏れず、8.0.1に至っては出した早々に重大な不具合が見つかり差し戻しという、たいへんなことになってしまいました。しかし対応アプリも含め、そろそろ安定してきた頃でしょう。&lt;/p&gt;&#10;&lt;p&gt;ですが、そういった不具合とは別に、バグではない仕様の変更で困るということもあります。iOS6→7で最も困ったのは、ミュージックアプリの改変でした。アーティスト別アルバム選択ができない仕様なのはたいへん理解に苦しみます。たとえば私はBeatlesのアルバムを30枚以上ライブラリに登録していますが、iOS7の仕様で30枚の中から聴きたいアルバムを選ぶのはまったく面倒なことです。Apple社にBeatles好きはいないのでしょうか。Beatlesでなくても、アルバム3枚以上あるアーティストのアルバムを選ぶときにはとてもやってられない仕様だと思うのですが、いったいどうしてこんなことに？現在私は純正のミュージックアプリは使わず、CarTunesというアプリを購入し使っています（シンプルでたいへん良いアプリです。ただ曲の再生でシーケンスバーにより再生位置の調整ができないことがやや不便ではあります）。ネットを見ていると、私と同じような人は少なからずいるようです。純正アプリが使えればそれが一番楽なのですが、いつまでたってもiTunesで英語のジャンル名を勝手に日本語に変換し、Alternativeをオルタナティプと言い張り続けるAppleですから、この点が元に戻ることはないのだろうと諦めています。&lt;/p&gt;&#10;&lt;p&gt;そういった不満があっても、iPhoneを使うということはAppleに従うということですから、いずれはOSのバージョンアップを受け入れざるを得ません。換え時としてはもうしばらく待って、8.0.3が出て致命的なエラーがないことを確認した後、くらいでしょうか。その頃にはYosemiteも発表され、あまりピンとこなかった今回のバージョンアップも、Mac OSXとの合わせ技で良い物に思えるようになっているかもしれません。&lt;/p&gt;&#10;</description></item><item><title>Mac mini 2014が出るなら嬉しい</title><link>https://hack-le.com/40546047-2/</link><pubDate>Sat, 04 Oct 2014 05:01:15 +0900</pubDate><guid>https://hack-le.com/40546047-2/</guid><description>&lt;p&gt;今度こそ噂は本当なのでしょうか？どこそこの国のAppleストアでMac miniが品切れだとか、一瞬だけMac mini 2014の文字が出たとか、そんな話ではなくて、信憑性の高い話なのでしょうか。元ネタは「&lt;a class="link" href="http://www.macrumors.com/2014/09/25/mac-mini-october-update/" target="_blank" rel="noopener"&#10; &gt;New Mac Mini Finally Coming in October Alongside New iPads? - Mac Rumors&lt;/a&gt;」のようですが、どうなんでしょう。OSXの新バージョン、Yosemite公開のタイミングで発表されるというのは、いかにもありそうな話です。&lt;/p&gt;&#10;&lt;h2 id="2012年モデルと大差はないだろうけれど"&gt;2012年モデルと大差はないだろうけれど&#10;&lt;/h2&gt;&lt;p&gt;私は2012年モデルを持っていますから、2014年モデルが出ても買うことはないでしょう。ここ何年かはすっかりPCスペックの進歩も停滞しています。せいぜいCPUがHaswellになって、SSDあるいはフュージョンドライブが標準になるか、メモリが8GBが標準になるか、といったところでしょう。CPUの進化は大したものでもありませんし、グラフィック性能は多少よくなっているかもしれませんがたかがしれています。SSD、メモリは自分で換装できるので、恐らく現行の2012年モデルを持っている人たちは既に換装済みという人が自分含め多いのではないでしょうか。二年前といえば、8GB*2のメモリが5,000円で買えた幸福な時代でした。もう当分あのような値段にはならないでしょう。そういえば、SSDも安くなるなると言われて随分立ちますが、どうもそんな流れでもありません。ドッグイヤーのIT業界も、ことハードウェアについてはいよいよ落ち着いてきたのでしょうか？スマートフォンもここ最近はそんな感じに見えます。よく言えば安定してきたとも言えるでしょう。なんだか寂しいような気もしますが、このほうが楽かもしれません。&lt;/p&gt;&#10;&lt;p&gt;随分と話が逸れてしまいましたが、要は2014年モデルが出たところで、中身は2012年モデルとそんなに変わらないのではないか、ということです。だからこそまったくアップデートされなかったのだろうとも思います。それでもディスコンの噂さえ囁かれるなか、ニューモデルが出るということ自体が一愛好家としては嬉しいというか、安心します。&lt;/p&gt;&#10;&lt;h2 id="まったく違う可能性"&gt;まったく違う可能性&#10;&lt;/h2&gt;&lt;p&gt;ただ、まったく違う形になるという噂もあるようです。たしかに、Mac miniは他のMacマシンやiOS端末のようなニュースバリューがあるマシンではありません。Yosemiteと同時に発表にせよ、現行と同じ形では、少なくとも投資家と呼ばれるような人たちからの受けは悪そうです。しかし形が思い切り刷新されれば、それはニュースバリューがあると言えるでしょう。それでか、Mac Proをそのまま小さくした、まるでドーナツのようなジョーク画像も流布されているようです。それは少し勘弁してほしいですが、もしより小型化が進むのであればそれは歓迎すべきことだと思います。NUCとも対抗できるくらいに、とまではいいませんが。小型化を優先してカスタマイズ性を犠牲にというようなことにはなってほしくないのですけれど、最近の流れを見ていると心配なところです。&lt;/p&gt;</description></item><item><title>WindowsかMacか、悩んだって結論は出ない</title><link>https://hack-le.com/40384873-2/</link><pubDate>Thu, 25 Sep 2014 17:05:56 +0900</pubDate><guid>https://hack-le.com/40384873-2/</guid><description>&lt;p&gt;姉の誕生日にノートパソコンを贈ることにしたのですが、その時姉に「Macは難しいんやろ？」と言われました。元よりMacになるとどうしても値段がそれなりにしてしまうので、姉の用途に必要十分な安めのWindows PCを贈るつもりでいましたが、しかしやはり一般的にMacは難しい印象があるのだなと思いました。&lt;/p&gt;&#10;&lt;h2 id="macは難しいのか"&gt;Macは難しいのか&#10;&lt;/h2&gt;&lt;p&gt;もちろん現実にはそんなことはなくて、ただWindowsとは「違う」というだけです。それは道を右に行くのか左に行くのかという違いでしかなく、歩き慣れない道は歩きづらいということでしかありません。どちらの道が歩きやすいかという点については議論の余地がありますが、2014年現在、一番大きいのは慣れであることはまず間違いないでしょう。そもそも慣れてすらいない初心者にとっては、WindowsもMacも、どちらも同じといえます。&lt;/p&gt;&#10;&lt;h2 id="osの違いよりも先に学ぶべきこと"&gt;OSの違いよりも先に学ぶべきこと&#10;&lt;/h2&gt;&lt;p&gt;そうは言っても、できるだけ多くの人が歩いている道のほうが情報量が多く初心者向きではないのか、という考えもあるでしょう。それはもっともなことです。しかし、私がその前にまず思うことは、PC初心者はそもそもWindowsであっても自分で調べることなどできないのではないか、ということです。デジタルデバイドという言葉がありますが、格差を作り出している壁は検索の壁だと思うのです。それは同時に初心者の壁でもあると思います。検索エンジンを使いこなせるか使いこなせないか、それはWindowsかMacかというOSの違いよりも根本的です。検索ができない人にとっては、WindowsであろうがMacであろうがどちらも難しいのです。どちらかと言えば、Macのほうが最初から一通り揃っている分そういった人たちに親切であると思います。そして検索の壁を乗り越えることができれば、WindowsかMacかというのは大した問題ではありません。&lt;/p&gt;&#10;&lt;p&gt;さて、ではWindowsとMacは同じなのかというとやはりそんなことはなくて、使いたい機器やソフトがどちらか方方のOSにしか対応していなかったり(残念なことにたいていはWindowsのみ)、また同じことを実現するのでも、WindowsとMacでは設計思想からやり方が違ったりということもあります。そうなると、慣れを超えた実用性、好みの問題となります。私がMacを使う理由は、OSXがUnixでありながら最新のアプリや機器、サービスにもある程度対応していること、トラックパッドが非常に便利であることが主な理由で、これはWindowsでは実現できません。一方、MS Officeの機能をフルで利用したい(Excel VBAがもっとも大きな需要でしょうか)、Windowsプログラミングを行いたい、専用機器・ソフトを使いたい(マイコンとかドライバや開発ソフトがWindows版しかない、なんてよくある話で…)ということであればWindowsになるでしょう。しかしこれは初心者の議論ではないですね。&lt;/p&gt;&#10;&lt;h2 id="結論は自然に出る"&gt;結論は自然に出る&#10;&lt;/h2&gt;&lt;p&gt;結局、初心者にはOSの違いを考えるよりまず学ぶべきことがあり、それを乗り越えると、実用性・好みの問題から自分の使うべきOSも自然と決まるという話です。ただし、実用性はともかく、好みは実際に自分で使ってみないとわかりません(実用性も使ってみないとわからない面が多々あります)。それはブログ記事やなんとか速報のまとめ記事をいくら読んだってわかることではないのです。まぁ、予算というのは有限ですから、悩んでしまう気持ちも大いにわかるのですが、一度きりの人生、うんうんと悩むくらいなら、実行あるのみですよ。いろんなOSを使ってみることは、コンピュータを理解するうえで非常によいことですから、長い目で見ればきっと損ではありません。&lt;/p&gt;</description></item><item><title>iPadではなかなか小説を読もうという気にならない</title><link>https://hack-le.com/40261398-2/</link><pubDate>Tue, 23 Sep 2014 08:25:10 +0900</pubDate><guid>https://hack-le.com/40261398-2/</guid><description>&lt;p&gt;自炊した書籍は、これまで漫画はiPad、文字主体の新書や小説といった類はNexus 7というように使い分けておりました。ところがNexus 7が文鎮になってしまい(「&lt;a class="link" href="//hack-le.com/39491231-2/" &gt;Nexus 7(2012)がお亡くなりになりました : 或る阿呆の記&lt;/a&gt;」、仕方なしにiPhoneで小説を読もうとするも、iPhoneを落として液晶ガラスにヒビが入ってしまい、とても本が読める状態ではなくなってしまいました。となると、残りはKobo gloとiPadが私の手持ちの読書端末ということになります。一度はKobo gloを使うことも考えましたが、今まで自炊書籍を読もうと散々苦労した割に、あまり良い読書体験が得られなかったことを思い出し、やめました。そして残りはiPadということになり、たしかにiPadでは問題なく本を読めるのですが…。これがなかなかどうして、あまり読もうという気になれません。&lt;/p&gt;&#10;&lt;h2 id="重さが問題慣れる"&gt;重さが問題？慣れる？&#10;&lt;/h2&gt;&lt;p&gt;iPadで漫画はそれなりに読みます。iPad以上の大きさでないと見開きが辛いので、漫画を読むのにはうってつけのデバイスです。ところが小説となると必ずしもそうではなく、大きさ的にはNexus 7の7インチでさえもやや大きすぎる。Kobo gloの6インチなどはさすがに読書専用端末なだけあり、ちょうどよいぐらいの大きさです。iPadは小説を読むのには大きすぎる。大きすぎて持ち歩けないので、スキマ時間にちょこっと読むことができないし、重いのでずっと持っていると疲れる…。&lt;/p&gt;&#10;&lt;p&gt;しかし、私は漫画はiPadで読んでいるのだから、多少疲れるにしてもiPadで小説をまったく読む気がしないのは妙な話です。それにハードカバーの本はもとよりiPadくらいのサイズがありますが、それはまったく何の問題もなく読めています（もちろん持ち歩くことはありませんが）。私の脳が、iPadといえば漫画あるいは大判の技術書と脳が決めつけてしまっているのでしょうか？だとすれば慣れの問題かもしれません。しばらくは無理にでも読み続けることで、すんなりとiPadで小説を読むことができるようになるのかもしれない。&lt;/p&gt;</description></item><item><title>新型iPhoneがどうであろうと、iOS端末を使いたければiPhoneを使うしか無い</title><link>https://hack-le.com/40298720-2/</link><pubDate>Sat, 20 Sep 2014 19:53:30 +0900</pubDate><guid>https://hack-le.com/40298720-2/</guid><description>&lt;p&gt;ついに新型iPhoneが発売されました。私の今持っているiPhone 5も液晶ガラスが割れてしまいましたし、今回はSIMフリー版が最初から発売ということですので、plusにするか無印にするかは考え中ということにしても、私もいずれ購入することになるでしょう。&lt;/p&gt;&#10;&lt;h2 id="大きい"&gt;大きい…&#10;&lt;/h2&gt;&lt;p&gt;実寸台の縦横幅のものをプリントアウトして持ってみましたが、plusの5.5インチはなるほど大きい。作業着であればいざしらず、普段着のポケットに入れるにはなかなか厳しそうな印象です。女性はスマホを鞄に入れる人が多いそうですが、私はやはりスマホはポケットに入れたい派です。また手も小さい。5.5インチという画面サイズは、自炊した小説も楽々読めそうで、7インチタブレットがまったく必要なくなりそうな魅力がありますが、それで携帯性が失われては元も子もありません。&lt;/p&gt;&#10;&lt;h2 id="大きくなっただけ"&gt;大きくなっただけ？&#10;&lt;/h2&gt;&lt;p&gt;また、plusのほうはせっかくのフルHDではありますが、文字の大きさ一つとってもアプリが対応しないことには単純な拡大にとどまり、画面内の情報量が変わらないようです。アプリ毎には対応できるようなので、今後徐々に環境が整っていくことになると思いますが、開発者にとっては一つ頭痛の種ができてしまったかもしれません。さすがにもう3.5インチに気を配る必要はあまりないでしょうが、4インチ、4.7インチ、5.5インチそれぞれの大きさ・解像度を考慮した設計が必要になります。それでもAndroidアプリの開発よりは気を使わなくてよいかもしれませんが。&lt;/p&gt;&#10;&lt;h2 id="いくつかの不安"&gt;いくつかの不安&#10;&lt;/h2&gt;&lt;p&gt;バッテリーの持ちは、無印の場合5Sと同程度で、plusはもう少し持つ、というくらいだと聞きます。メモリが相変わらず1GBのままで、無印はともかくフルHDとなったplusでもそれで足りるのか、iPadが1GBでやれているので十分ということかもしれませんが、バッテリーとメモリについては少し残念な気持ちがあります。&lt;/p&gt;&#10;&lt;h2 id="でも結局はiphone"&gt;でも結局はiPhone&#10;&lt;/h2&gt;&lt;p&gt;まぁとはいえ、そういった不安要素の為に次はAndroidのスマートフォンを持つ気になるかというと、視野には入れているのですが、しかし結局はiPhoneということになるでしょう。iOSとAppleのエコシステムを利用したければ、そうするしかないからです。OSXを使いたければMacを買うしかないのと同じです。Appleはハードで稼いでいますが、魅力の源泉はハードを最大限に活かしたソフトと、他にはないストアにあります。今回の大型化とその対応具合は、正直若干の不安を感じるところもありますが、全体としてはまだまだ魅力的であると思います。&lt;/p&gt;&#10;&lt;p&gt;そういうわけなのでiPhone 6は購入するでしょうが、悩ましいのはApple Watchです。正直あまりピンとこないところがありますが、実際に使ってみないことにはわからない製品でしょうし、どうするか、難しいところです。&lt;/p&gt;</description></item><item><title>iPod classicの思い出</title><link>https://hack-le.com/40141265-2/</link><pubDate>Fri, 12 Sep 2014 15:37:12 +0900</pubDate><guid>https://hack-le.com/40141265-2/</guid><description>&lt;p&gt;世間がiPhone6だAppleWatchだと騒ぐ中、iPod classicがAppleのラインナップからひっそりと外されたそうです。iPod classicといえば、初代iPodを正統に受け継ぐ、当時革新的だったホイールクリックと大容量のハードディスクを備えた音楽プレーヤーです。&lt;/p&gt;&#10;&lt;h2 id="ipod-classicの販売が終わった"&gt;iPod classicの販売が終わった&#10;&lt;/h2&gt;&lt;p&gt;たしかに、iPhoneの128GBモデルが発表された今、デバイスとしてのiPod classicの魅力はかなり薄れているかもしれません。音楽再生に専用のデバイスを使いたいとか、音楽を聞きたいだけなのにiPhoneは大仰過ぎるというユーザーにとっては、そのニーズを埋めるデバイスがなくなってしまい残念なことでしょう。クリックホイールも愛好家がいるでしょうねぇ。私はむしろ、音楽プレーヤーもスマホに統一したいなぁという思っていたので（分かれていたほうが便利なこともよくあるのですが、総合的に）、iPhone 128GBモデルの展開、iTunes Matchの開始を思えばまぁ致し方無いかなという感想です。ただそれとは別に、ノスタルジックな思いがないわけでもありません。iPodは、多分私が今までで一番買って嬉しかったものです。&lt;/p&gt;&#10;&lt;h2 id="初めてのmp3プレイヤー"&gt;初めてのMP3プレイヤー&#10;&lt;/h2&gt;&lt;h3 id="mdってありましたね"&gt;MDってありましたね&#10;&lt;/h3&gt;&lt;p&gt;音楽プレーヤーといえばまだまだMDが強かった時代です。今となってはMDなんて知らない人もいるでしょうね。けれど、昔はだいたいみんな使っていました。私もご多分に漏れず使っていたのですが、持ち歩ける曲数、音質は大いなる不満でした。そして手を出したのがLP4という劣化録音です。LP4は通常の4倍曲を入れられる代わりに音質を最低にする恐ろしい機能でした。何が恐ろしいって、使っていると自分が最低な音質を聞いているということがわからなくなることが恐ろしい。そしてある日なんとなく普通に録音した曲や、CD再生の曲を聞いて愕然とするのです。自分はまったく違う曲を聞いていたんじゃないか、と。&lt;/p&gt;&#10;&lt;p&gt;それでもLP4は便利ではありました。たくさんの曲をコンパクトに持ち歩きたいという欲求は、特に私の場合は非常に強かった。犠牲は大きいとはいえ、私の欲求を一部叶えてくれた機能であることもまた間違いありません。だからあまり悪し様にいうのはフェアじゃないかもしれないですね。&lt;/p&gt;&#10;&lt;p&gt;そんな私が、恐らくはネットで、MP3プレイヤーの存在を知りました。高校生の頃なので、2002-2004年くらいでしょうか。当時レンタルCDをMP3にしてPCに保存することを覚えていた私は、膨大な曲のライブラリがありました。MP3プレイヤーを使えば、これらをそっくりそのまま持ち歩ける！今となっては当たり前ですが、夢の様な話でした。&lt;/p&gt;&#10;&lt;h3 id="mp3プレイヤーの購入"&gt;MP3プレイヤーの購入&#10;&lt;/h3&gt;&lt;p&gt;とはいえまだ当時はMP3プレイヤーはあまり一般的ではないのもあり、保守的な私はしばらくMP3対応のウォークマンなんかを使っていました。これがまたすぐ故障するんだ。 高価な代物でしたが、壊れてしまってはどうしようもない。残ったのはもう動かないWalkmanとソニーへの悪印象だけ。かつて携帯音楽プレイヤーの先駆けだったソニー、どうしてこうなってしまったのか…。そんなこんなで、新しい音楽プレイヤーはMP3プレイヤーにしようと決意したのが2005年のことです。&lt;/p&gt;&#10;&lt;p&gt;この時既に、いくつかのメーカーが挙ってMP3プレイヤーを販売しておりました。私はそれまでAppleとの縁なく暮らしてきましたので、別にそのときiPodを買おうと決めていたわけではありません。実際そのときはまだシームレス再生に対応していない等、不満点がいくつもあったのも事実です。しかし、iPodがたしか一番大容量だったのです。コレクションをすべて持ち運べるという点を私は大いに買いました。それは後年になっても一緒で、一番大きな容量のMP3プレイヤーというと必然的にiPodでした。&lt;/p&gt;&#10;&lt;p&gt;そして購入したのが60GBのiPod Photo。当時は5万くらいしたかな。その時の嬉しさたるや。初めての転送の時、あんまりにも熱くなるので、心配になり氷を持ち出して冷やした思い出があります。Firewireなんて規格を知ったのもiPodのため。いろんな曲を聞いたなぁ…。私の小さな手のひらに、数年かけて集めたCDが全部あるなんて。大げさでなく、世界が広がったと思いました。それはインターネットを知った時以来の衝撃だったかもしれません。&lt;/p&gt;&#10;&lt;h2 id="いつの間にかappleに囲まれて"&gt;いつの間にかAppleに囲まれて&#10;&lt;/h2&gt;&lt;p&gt;時は流れて、いつのまにかデスクトップはMac mini、ノートはMacBook Air、タブはiPad、スマホはiPhone、AppleTVなんてのも購入（もうテレビからあげちゃったけど）、そしてiPod classicで音楽を再生。そんな自分がありました。思えばiPodが私とAppleの出会いだったわけです。きっとそういう人は多いんでしょうね。Appleを今の形に押し上げたのはiPhoneとiPadにしても、Appleを蘇らせたのはiPodとiTunesと言って差し支えないでしょうから。とはいえ、AppleにとってもうiPodはその役割を終えたのかもしれません(TouchはiPodというより通話のできないiPhoneだと思っています)。それは私にとってもそうなりつつあり、恐らくiPhone 128GBが出れば、iPod classicを封印することはできてしまうだろうなと、そう思います（音楽再生はスマホとは別の専用デバイスがよいという需要は私も理解できますが）。&lt;/p&gt;&#10;&lt;p&gt;iPod classicの終焉に、時の流れを実感して、なんだか少しセンチメンタルな気分になりました。私は今もっている既にボロボロのiPod Classicを壊れるまで使い続けますが、壊れても私の大事な思い出として、とっておきたいですねぇ。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="34" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/a/d/ad240a11.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;ボロボロですが私は味があって気に入っています。「ええやろ」と言っても、他人にとってはただの汚れなので誰もウンとは言ってくれませんが。&lt;/p&gt;&#10;&lt;p&gt;追記：2015年、ついに壊れてしまいました。今までありがとうよ…&lt;/p&gt;</description></item><item><title>Kobo gloで自炊本というのはたいへんな手間</title><link>https://hack-le.com/39940925-2/</link><pubDate>Mon, 01 Sep 2014 16:16:32 +0900</pubDate><guid>https://hack-le.com/39940925-2/</guid><description>&lt;h2 id="使うまいと思っていたkobo-glo"&gt;使うまいと思っていたKobo glo&#10;&lt;/h2&gt;&lt;p&gt;私は電子書籍リーダーとしてKobo gloを持っています。Kobo Touchも持っていましたが、レスポンス等があまりにも酷く、おまけにすぐに後継機が出てきて安物買いのなんとやらでした。それに比べるとKobo gloは少なくともハードとしてはまぁまぁのもので、恐らくKindle Paperwhiteにも引けをとらないのではないかと思います(ホームボタンの廃止はいただけませんが)。ただソフトは必ずしも使いやすいものではなく、またせっかくの外部SD対応なのに、公式では外部SD内の日本語ファイル名に対応しないなど楽天のローカライズも最低でした。さらにいくつかのトラブルと楽天の対応から、こんなもんは頼まれたって使うものかと思っていたのですが、最近身の回りの機器がどんどん壊れていき、そうも言ってられなくなりました。&lt;/p&gt;&#10;&lt;h2 id="kobo-gloで自炊本"&gt;Kobo gloで自炊本&#10;&lt;/h2&gt;&lt;p&gt;私はなんだかんだで楽天Koboでもそれなりの買い物をしていますから(クーポン等で異常に安く買えるときなど)、そういった本を読む時には特に不便はありません。しかし自炊本を読もうと思うと、これは今までに何度もやってきたことなのでわかってはいましたが、やはりたいへんな手間で、常用しようとはなかなか思えない。&lt;/p&gt;&#10;&lt;h3 id="pdfからcbz形式にして解像度も合わせる"&gt;pdfからcbz形式にして、解像度も合わせる&#10;&lt;/h3&gt;&lt;p&gt;Kobo gloはpdfも読めないことはないのですが、あまり勝手がよくないとのことで、cbz形式にし、また解像度1024x758にしてKobo gloに合わせる必要があります。cbzというのは自炊をしている人意外には聞き慣れない拡張子だと思いますが、要はjpegやpngの画像ファイルをzipで固めて、それをリネームしてcbzとしただけのものです。書籍を固めたzipだと宣言しているわけですが、これがいつ頃からどのようにしてスタンダードになったのか、ちょっとよくわからないところです。しかし多くのビューアアプリがこの拡張子に対応しています。&lt;/p&gt;&#10;&lt;h3 id="macではpdfcbzがなかなか面倒"&gt;Macではpdf→cbzがなかなか面倒&#10;&lt;/h3&gt;&lt;p&gt;さてこの変換、WindowsにおいてはChainLP等のフリーソフトが紹介されているのですが、Mac OSXではそれに対応するソフトというのが、ちょっと見当たらない。ないということはないと思うのですが、情報量が少ない、というよりWindowsに押し潰されてまるで見当たらない。さらに探すと、ImageMagick等Unixソフトを利用して、スクリプトを書いている人がいました。なるほどそういう手もあるか、と思い、私もそうして見たものの、ImageMagickのpdf→jpeg変換というのがあまりよろしくない。Popplerなるライブラリをインストールし、pdftoppmなるコマンドを使えば、比較的よい変換ができるということで、それを採用し、スクリプトを書きました。しかし、この時点でやれる人は随分限られてしまうでしょう。&lt;/p&gt;&#10;&lt;h3 id="カスタムファームウェアうーん"&gt;カスタムファームウェア…うーん&#10;&lt;/h3&gt;&lt;p&gt;そうして頑張って作ったcbzですが、これをそのままKoboに移せばよいというものでもないらしい。デフォルトでは外部ストレージに入れたファイルはファイル名が日本語に対応していない等いくつもの問題がある。それを解決するには、有志が作ってくれたカスタムファームウェアを入れなければなりません。それ自体は難しいことではなく、カスタムファームウェアを落とし、それを当該ディレクトリに落とすだけです。これにより本棚自動作成などもできるのですが、これがまた、本棚が楽天のサーバーに登録されるためか、消しても消しても復活するゾンビ本棚が大量に出来上がったりという最低なことになったりもします。しかもその本棚を一括して消せる仕組みがないという。しかし公式以外の使い方なので、何が起こっても文句は言えないのです。楽天に頼んでクリアしてもらったという人もいるようです。&lt;/p&gt;&#10;&lt;p&gt;要はなんだかんだと色々と面倒なトラブルが起きやすいということです。復元を何度も繰り返すことになるのは珍しいことではありますまい。そうなると、こういった改造の真似事そのものを楽しめる人でないと嫌になってしまうでしょう。私も決して嫌いなほうではないと思うのですが、苦労の割に得られる読書体験というのもそう大したものではないし、うんざりしてしまいました。別件ですが、楽天のあまり嬉しくない対応で嫌になったというのもあります。&lt;/p&gt;&#10;&lt;h2 id="koboで自炊本使うか使わまいか悩ましい"&gt;Koboで自炊本、使うか使わまいか、悩ましい&#10;&lt;/h2&gt;&lt;p&gt;そうは言っても現在手元にある数少ない読書端末です。もうちょっと頑張ってみるか、諦めて重たいiPadで自炊本を読み、Koboはストア本専用端末とするか、悩ましいところです。もうちょっとどうにかしたら、きっと良い端末なんでしょうけれど、楽天としてはストア本買って欲しいのでしょうし、自炊本を読むというところに力を入れないのは商業的にまぁ仕方ないのかもしれません。それにしても、なんだかなぁ。&lt;/p&gt;</description></item><item><title>よい電子書籍管理ソフトはないものか</title><link>https://hack-le.com/39824156-2/</link><pubDate>Sun, 24 Aug 2014 22:06:32 +0900</pubDate><guid>https://hack-le.com/39824156-2/</guid><description>&lt;h2 id="calibreなるもの"&gt;Calibreなるもの&#10;&lt;/h2&gt;&lt;p&gt;オープンソースの電子書籍管理ソフトであるCalibre(キャリバーなのか、カリバーなのか)が、一年ぶりにメジャーバージョンアップを行いました。バージョン2となったわけです。Calibreは公式でebook library management applicationと紹介されていますから、管理ソフトと考えてよいと思うのですが、日本語の情報を検索すると専ら電子書籍の形式変換ソフトとして紹介され、また用いられていることが多いようです。かくいう私も、CalibreはKindle本をあれこれするためのアプリとしてしか用いていません。&lt;/p&gt;&#10;&lt;p&gt;電子書籍の管理ツールというのはなかなか鬼門のようで、少なくとも日本ではこれというものがありません。現在はファイラ最強というのが現実ではないでしょうか。Calibreを使えればと私も思うのですが、まだ使いこんでいないものの、どうもUIが野暮ったいというかわかりづらいというか、少なくともこれを使って大事な書籍を管理しようとは思えませんでしたね。多分馴染みのない項目、コマンドが並んでいたらからだと思います。恐らく必要にして十分な機能があり、玄人好みではあるのでしょうが、素人にはわからない。&lt;/p&gt;&#10;&lt;h2 id="電子書籍の管理ソフトでやりたいこと"&gt;電子書籍の管理ソフトでやりたいこと&#10;&lt;/h2&gt;&lt;p&gt;音楽と違い、epub、pdf、cbzなどいろいろな性質のまったく違う保存形式に対応せねばならないから、電子書籍の管理というのはたいへんです。しかしそれらのものを統合的に管理できて、かつ読んだり変換したり、またファイル名から自動的に著者、漫画であれば掲載された雑誌等が簡単に管理できればよいですね。またデータは体系的なディレクトリ構造の元に保存されていれば安心です。こんな時代ですから、スマートフォンやタブレットとの連携も必須でしょう。読んだりといいましたが、管理という観点からいくとリーダー機能は他に任せたほうがよいかもしれません。本棚表示等はその後の機能でしょうか。ひょっとするとCalibreにはこれらの機能があるのかもしれないのですが、どうにも取っ付きづらくまたわかりづらい。このあたりのことがわかりやすくシンプルな一つのソフトでまとめられていれば、それはたいへん使いやすいソフトだと思います。&lt;/p&gt;</description></item><item><title>11インチMacBook Air 2013を一年以上使っての使用感</title><link>https://hack-le.com/39805453-2/</link><pubDate>Sat, 23 Aug 2014 19:38:03 +0900</pubDate><guid>https://hack-le.com/39805453-2/</guid><description>&lt;p&gt;MacBook Air(以下MBA)を買ったのが、たしか去年の7月頃だったと思います。あれから一年以上経ちました。MBAは私が現在もっともヘビーに使っているものの一つ…というより、あらゆるものの中で一番よく使っているかもしれません。&lt;/p&gt;&#10;&lt;h2 id="macbook-airの性能"&gt;MacBook Airの性能&#10;&lt;/h2&gt;&lt;p&gt;11インチで、CPUはCore i5(1.3GHz)、メモリ4GB、SSD256GBの、なんの変哲もないMBAです。MBAは今年もアップデートされましたが、CPUの性能がわずかに上がったこと以外は、取り立てて言うことはないようです。思えば2010年のモデルから、MBAのアップデートはずっとそんな感じでした。さすがに2010年のCore 2 DUOはちょっといろいろつらい面もあるでしょうが(それでも使えないというほどではありません。13インチの2010年モデルは現在サブマシンとして活躍しています…メモリを4GBにしていたことが大きいですが)、2011年モデルでメモリを4GBにしていたら、今のものと使用感はほとんど遜色ないのではないか。これは昨今のPCスペックの停滞も一因ではありましょうが、しかしこの日進月歩のIT業界においてそれだけMBAという製品が完成されたものだとも言えるでしょう。&lt;/p&gt;&#10;&lt;h2 id="一年使ってみて"&gt;一年使ってみて&#10;&lt;/h2&gt;&lt;p&gt;さて、本題に入って、MBA 2013を一年使っての使用感をつらつら書きたいと思います。といっても、MBA自体は2010年の年末、2011年の年始くらいから使っているので、MBA歴自体は3年半以上ということになります。それはつまり私がOSXというOSから離れられなくなっているということです。そうである以上、私にとってノートパソコンとはMBAかMBPかということでしかなくなってしまいました。&lt;/p&gt;&#10;&lt;h3 id="cpuは時々辛い"&gt;CPUは時々辛い&#10;&lt;/h3&gt;&lt;p&gt;MBAはモバイルで使うことを想定されたPCですから、処理能力は決して高いものではありません。とはいえ、1.3GHzという数値だけ見ると昨今のスマホにも見劣りするようなスペックの割には、ずいぶんと頑張ってくれています。少なくとも1.86GHzのCore 2 DUOでは開くのに時間がかかったやや重いWordのファイルなども余裕で開いてくれます。ただ、やはり仮想化ソフトを動かしたり、数値演算や画像処理などをさせると「うむ」という感じです。CPUパワーはMAXになり、非常に無理をしていることがよくわかります。そもそもそういったことをMBAにさせるべきではないのです。あとはブラウザでしょうか。ブラウザはもっとも基本的なソフトでありながら、意外とパワーを食うソフトのようで、いくつもページを開いていると時々動きが悪くなり、「無理をさせているかな？」というように感じます。虹色マークもちょくちょく現れます。しかしこれは後述するメモリの関係もありそうです。&lt;/p&gt;&#10;&lt;h3 id="メモリは常に70-80台"&gt;メモリは常に70-80%台&#10;&lt;/h3&gt;&lt;p&gt;この使用量が大きいのか小さいのか、他の人のことを知らないのでわかりません。16GBのMac miniだと50-70%くらいになることが多いようです。OSX Marvericksは放っておくとどんどんメモリを消費します。しかし、OSXのバージョンのいつ頃だったかは常に90%近くだったときもあるので、その頃のことを考えるとだいぶ安心できる数値です。虹色マークがちょくちょく現れるのは、メモリの関係もあるのでしょうか。&lt;/p&gt;&#10;&lt;h3 id="時折漫画を読むとretinaが羨ましくなる"&gt;時折漫画を読むとRetinaが羨ましくなる&#10;&lt;/h3&gt;&lt;p&gt;画面サイズが11インチであることは、13インチのマシンを二年半ほど使っての結論なので、何も後悔はありません。別に絵描きでもないし、時折ある開発の真似事はCLIであることが多い私にとっては、11インチで1366x768の解像度は必要十分です。ただ一点、自炊した漫画を読むときに、ああこれがRetinaであれば、と思うことがあります。1366x768の解像度は、漫画を読むには荒い。これはイレギュラーな使い方かもしれないけれど、私にとってはそれなりに頻度の高い使い方で、それがちょっとばかり残念なこともあります。yosemiteになって、iPadとの連携がもっとうまくいけば、この不満も解消されるかもしれません。現在はiPadにファイルを移すのがけっこう手間ですからねぇ…。&lt;/p&gt;&#10;&lt;h3 id="持っていて楽しい"&gt;持っていて楽しい&#10;&lt;/h3&gt;&lt;p&gt;私は特別ガジェットが好きということもあると思いますが、それにしてもこのMBAは持っていて楽しい。なんだったら、画面を閉じてまな板のような状態にして、それを手に持って重みを感じているだけで、なんだか心地よい。トラックパッドの周りを意味もなく撫で回したくなる。素晴らしい質感。なぜ多くのWindowsマシンは、Core i5だのWindows 7だのという何の意味もない情報をペタペタと貼り付けるのでしょう？PC製作に関わる仕事の友人に聞いたところ、あれを貼るとお金が入るからだそうで、あのシールを外せば値段が上がるとのこと。人間とは不思議なもので、1万円もらったってあんな無粋なシールをw足しのMBAに貼るのはゴメンですが、購入する時にあのシールがあるかないかで1万円違うモデルを並べられたら、これはかなり悩ましいのではないか。しかしあのシールを貼ることに、メーカーはもちろんIntelやMSにとって何の意味があるのか、まったくもって謎です。私がMacを好む理由の一つは、あの無粋なシールが貼られていないという点が少なからずあり、そのような人は他にもいると思うのですが…。&lt;/p&gt;&#10;&lt;p&gt;少し話がずれました。何が言いたいのかというと、購入して一年以上経ち、不満点はありますが、それ以上に愛着がわき、また便利に使わせてもらっているということです。買ってよかったと思います。ケチらず、通販の安いサイトで店頭モデルを買わずに、Apple Storeでメモリ8GBにしてもよかったかもしれません。&lt;/p&gt;&#10;&lt;h2 id="もっと日常の使用感を読みたい"&gt;もっと日常の使用感を読みたい&#10;&lt;/h2&gt;&lt;p&gt;ところで、ネットにあるレビューについての雑感を一つ。私がネットを徘徊していて思うのは、もっと個人の日常的なレビューが読みたいというものです。ですが、製品名とレビューや使用感といった言葉で検索しても、大手の業者による客観的で数値的なレビューか、開封の儀とかいう何の意味もない流行、買って3日程度の雑感、これから買う人へのアドバイス、といったものばかりがひっかかります(開封の儀について、購入して嬉しいのはわかりますが、それが検索結果に並んでいると嫌になります…これはGoogleの責任でもあるのでしょうか)。そうでなければ主に匿名掲示板のログかそれをまとめたものが多いのですが、それらについては検索結果から除外しています。実際、そこに書かれているものを見ると目に余る罵詈雑言が、時折とてもしんどくなり、あまり愉快ではありません。&lt;/p&gt;&#10;&lt;p&gt;私はもっと素直な個人の感想が、それもずっと使っている人の率直な気持ちが知りたいのですが。カタログを見てもわからないことってそういうことでしょう。でもそれが一番大事なことですよねぇ。それがあまり見当たらないのは、この広大なネットの海にも数が少ないのか、それともGoogle先生がそんなものは大事ではないと切り捨てているのか、あるいはスペシャルなキーワードに私が気づいていないだけなのか。検索で探すということ自体が間違っているのでしょうか…。ブログの中で探していけばまた違うのかもしれません。いつまでも検索エンジン至上主義な私が古いのか。&lt;/p&gt;</description></item><item><title>MacBook Airに仮想化Windowsはやっぱり辛い</title><link>https://hack-le.com/39698834-2/</link><pubDate>Mon, 18 Aug 2014 04:46:48 +0900</pubDate><guid>https://hack-le.com/39698834-2/</guid><description>&lt;p&gt;私は基本的にMac使いでWindowsは必要がない限り使いたくないのですが、実際問題仕事やら何やらをしていると必要が出てきてしまうものです。それでParallels Desktop 8でWindows 7を仮想化して使っていたのですが、やはりMBAでは色々と辛かったです。&lt;/p&gt;&#10;&lt;h2 id="mbaにwindows-7"&gt;MBAにWindows 7&#10;&lt;/h2&gt;&lt;p&gt;2013年モデルで、RAMが4GB、CPUがCore i5の1.3GHzデュアルコア。CPUもアレですが、やはり問題はRAMでしょうか。場合によってはメモリ使用量が全体で90%オーバーという時も多かったです。別にWindowsでバリバリ重いソフトを使っていたというわけでもなく、シンプルなフリーソフトをいくつか使ったりといった程度のことが多かったのですが。&lt;/p&gt;&#10;&lt;h2 id="mac-miniにのせかえた"&gt;Mac miniにのせかえた&#10;&lt;/h2&gt;&lt;p&gt;せっかくMac mini 2012を持っていて、メモリも16GBに増設しているのだからと、面倒臭くて腰が重かったのですが、いまさらながらMac miniのほうに移しました。ついでにメモリも1GBから4GBに増やしてみました。さすがにMac miniではMBAの時のような圧迫される感じがなく、のびのびと使うことができます。それでもさすがに常時起動させようとまでは思いませんが。そんなに頻繁に使うこともありませんし。&lt;/p&gt;&#10;&lt;p&gt;昔はメモリ4GBというか相当なものという感じでしたが(ほんのすこし前まではWindowsは32bitが優勢で、4GBの壁なんてありましたよねぇ)、いつの間にかメモリ4GBじゃ物足りなくなってきました。このままいくと将来どうなるのだろう？という感じもしますが、ここ3年くらいPCのスペックの進化はすっかり止まってしまったような感があるので、あまり変わらないのかもしれません。メモリ8GBが標準、くらいの時代は近くなっているのかもしれませんが。&lt;/p&gt;</description></item><item><title>SafariでCreateLinkの代わりとしてFormat LinkでタブのURLコピペ</title><link>https://hack-le.com/39504664-2/</link><pubDate>Wed, 06 Aug 2014 16:44:41 +0900</pubDate><guid>https://hack-le.com/39504664-2/</guid><description>&lt;p&gt;ChromeのCreateLinkの代わりになるものをSafariで探していました。で、一番いいなと思ったのがあまり日本語では情報が見当たらなかったFormat Linkでした。&lt;/p&gt;&#10;&lt;p&gt;（2017年1月2日追記）Format LinkはApple公式サイトから削除されてしまったようです。当記事にTwitterでつぶやいてくれている人がいて知りました。情報ありがとうございます。そして私は結局Chromeに戻ったので、再び代替を探す気力はありません。。。&lt;/p&gt;&#10;&lt;h2 id="こんな感じだよ"&gt;こんな感じだよ&#10;&lt;/h2&gt;&lt;p&gt;下図のようになります。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/1/e/1e4fdf36.jpg" &gt;&lt;img alt="54" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/1/e/1e4fdf36-s.jpg"&gt;&lt;/a&gt;&#10;ChromeのCreateLinkに近い操作感です。テンプレートはデフォルトの他に自分でいじったりもっと多くのものを登録したりできるようです。&lt;/p&gt;&#10;&lt;p&gt;以後特に読む必要はないのですが、つらつらと雑感やらTabLinksなど同様のものとの比較検討やらを書いていきます。&lt;/p&gt;&#10;&lt;h2 id="比較検討"&gt;比較・検討&#10;&lt;/h2&gt;&lt;p&gt;Chromeで便利に使っていたURLコピペ支援の拡張機能にCreateLinkがあるのですが、 同じものは残念ながらSafariには提供されていない様子。それで何か良い代替はないかと検索をかけてみると、よくひっかかるのがTabLinksとMake Linkなのですが…。&lt;/p&gt;&#10;&lt;h3 id="make-link"&gt;Make Link&#10;&lt;/h3&gt;&lt;p&gt;まずMake LinkはAppleのHPで検索をかけても出てきませんでした。うーん？紹介されているブログを見ると、まさにこれだと思えるのですけれど、見つからない。…と思っていたら、どうやら野良エクステンションなんでしょうか。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://tech.caph.jp/2010/09/08/%e3%83%aa%e3%83%b3%e3%82%af%e3%83%86%e3%82%ad%e3%82%b9%e3%83%88%e3%82%92%e7%94%9f%e6%88%90%e3%81%99%e3%82%8bsafari-extension-make-link/" target="_blank" rel="noopener"&#10; &gt;リンクテキストを生成するSafari Extension – Make Link | CAPH TECH&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これまでの経験から野良拡張にはあまり良い思い出がないので(主に昔Firefoxを使っていたとき)、できれば公式サイトにちゃんと登録しているものを使いたい。&lt;/p&gt;&#10;&lt;h3 id="tablinks"&gt;TabLinks&#10;&lt;/h3&gt;&lt;p&gt;ということで、次に公式からTabLinksを探して使ってみたのですが、ちょっとこれ思っていたのと動作が違いました。現在開いているタブのタイトルとURLを一気に書き下したタブが新しく生成されるのですね。たとえば下図のようなページのタブが生成されます。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/f/c/fcdead73.jpg" &gt;&lt;img alt="58" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/f/c/fcdead73-s.jpg"&gt;&lt;/a&gt;&#10;これはこれで用途があると思うのですけれど、CreateLinkの代替としてはちょっと違うんじゃないかとも思うわけです。&lt;/p&gt;&#10;&lt;h3 id="その他の実装"&gt;その他の実装&#10;&lt;/h3&gt;&lt;p&gt;他にも探して見るとブックマークレットでも便利なものがいくつかあるようですが、私はどうにもブックマークからスクリプトを起動するというのが慣れません。ずっと使っていれば慣れるのかもしれませんが…。安定性等もどんなものだろう？と思ってしまいます。ネイティブのAPIを用いた拡張機能でなんとかできるのであればそうしたいと思いましたが、軽く検索をかけた限りではだいたいどこもTabLinksとMake Linkのことばかりでした。AppleScriptで実装したという人もいましたが、不勉強の為AppleScriptをいまいち使いこなせていません（「&lt;a class="link" href="http://wbtmiu.hatenablog.com/entry/2014/07/08/225256" target="_blank" rel="noopener"&#10; &gt;SafariのMakeLink拡張をAppleScriptで置換してみた - 豆腐メンタルは崩れない&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;h3 id="formatlinkにいきつく"&gt;FormatLinkにいきつく&#10;&lt;/h3&gt;&lt;p&gt;もっとお手軽でいいのがあるんじゃないのかなぁとAppleのHPを眺めていると、Format Linkなる拡張機能が目に入りました。説明文を読んでいるとどうもそれらしい感じです。開発者の名前は日本名のようですが、検索をかけても日本語の情報が見当たりません。&lt;/p&gt;&#10;&lt;p&gt;しかしものは試しとインストールして使ってみると、「あ、欲しかったのはこれだ」と思いました。Format Linkのアイコンをクリックすると、現在開いているタブのタイトルとURLがコピペできるようになります。ChromeでCreateLinkを使っていた時とほぼ同じ操作感ですね。テンプレートもデフォルトの他にSafariの環境設定からいじることができて、しかも複数登録することができます。CreateLinkの代替にTabLinksを使っている人もいるようですが、CreateLinkの代替としてはこちらのほうが良いのではないでしょうか？とても便利で早速この記事を書くのにも使っております。まったく、たいへん有難い拡張機能で、開発者様には感謝です。日本人ぽいですし、もっと日本語の情報が増えるとよいですね。&lt;/p&gt;</description></item><item><title>ASUS TAICHI21 をWindows 8.1にアップデートした後にやったこと</title><link>https://hack-le.com/39265014-2/</link><pubDate>Tue, 22 Jul 2014 21:56:07 +0900</pubDate><guid>https://hack-le.com/39265014-2/</guid><description>&lt;p&gt;ASUSのTAICHI21といえば、Windows 8が発表された後各社が競って出した新機構の中でも、両面ディスプレイという斜め上の発想を具現化した変態ノートです。このような変態デバイスにつきものなのは、OSアップデートによる不具合でしょう。TAICHI21もご多分に漏れず、&lt;strong&gt;8.1にアップデートすると、そのままではウリである天板ディスプレイが使えないという悲しいことになります&lt;/strong&gt;。なので、BIOSをアップデートしなくてはいけません。&lt;/p&gt;&#10;&lt;p&gt;ASUSのHPからサポートでTAICHI21を検索し、ドライバーとツールからBIOSの最新版をダウンロードします。&lt;/p&gt;&#10;&lt;p&gt;ノートパソコン - ASUS TAICHI 21 - ASUS &lt;a class="link" href="http://www.asus.com/jp/Notebooks_Ultrabooks/ASUS_TAICHI_21/HelpDesk_Download/" target="_blank" rel="noopener"&#10; &gt;http://www.asus.com/jp/Notebooks_Ultrabooks/ASUS_TAICHI_21/HelpDesk_Download/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;2014/07/22現在、最新版はBIOS 205です。211もあり、それぞれTAICHI21AとTAICHI21となっているのですが、正直何が違うのかよくわかりません。ただネットで検索していると、皆さん205のほうを適用しているようなので205を用いました。&#10;で、BIOSのアップデートはWinFlashなるソフトを使ってやります。&lt;strong&gt;ダウンロードしたBIOSファイルを指定してFlashした後、再起動すればOK&lt;/strong&gt;です。多分WinFlashもBIOSユーティリティから最新版をダウンロードしたほうがいいんだと思いますが、私は特に何もしませんでした。あとVGAのドライバもダウンロードして適用してやるとよりいいんだと思います。現時点では10.18.10.3412ってやつですね。私はネット環境が悪すぎでダウンロードすると途中で遮断されてしまったので、しませんでした。150MBもあるんだもの。現在のドライバはC:\eSupport\eDriver\Software\Display\Intelのも一つ下にある 9.17.10.2857です。でも使えてるので多分問題はないでしょう。&lt;/p&gt;&#10;&lt;p&gt;Windows 9が出たらどうなるんでしょうね。あれも無料アップグレードできる（させられる）のか、それともスルーなのか。&lt;/p&gt;</description></item><item><title>ポメラDM100を使わなくなった理由</title><link>https://hack-le.com/38041361-2/</link><pubDate>Thu, 17 Jul 2014 11:20:01 +0900</pubDate><guid>https://hack-le.com/38041361-2/</guid><description>&lt;p&gt;ポメラの中でも高級機にあたる？DM100。なにかしら文筆を趣味にする人間であれば知っているだろう、マニアックなファンの多いガジェットです。&lt;strong&gt;一言でいえばポータブルワープロ&lt;/strong&gt;。一つのことしかできないというのが良い点でもあり欠点でもあります。それはつまり特徴というやつです。&lt;/p&gt;&#10;&lt;h2 id="埃を被った専用機dm100"&gt;埃を被った専用機DM100&#10;&lt;/h2&gt;&lt;p&gt;電子リーダー含め、専用機には汎用機のない良さがいくつも挙げられますが、個人的には「集中」の一言に尽きます。&lt;strong&gt;それしかできないが故に、それをせざるを得ない、これこそ専用機の本質だと思う&lt;/strong&gt;のです。だから趣味で物書きの真似事をしている私には、執筆の専用機であるポメラはたいへん良いマシンであると思えました。そして、2万という安くはない(とはいえ高いとも言い切れない)このニッチなマシンを購入し、しばらくは愛用していました…が、なんだかんだで今は埃を被っています。なんでかなぁ、ということを考えてみると、いくつか理由があがります。&lt;/p&gt;&#10;&lt;h2 id="キーバインドの変更にあまり対応していない"&gt;キーバインドの変更にあまり対応していない&#10;&lt;/h2&gt;&lt;p&gt;まず一つは、&lt;strong&gt;キーバインドの変更にあまり対応していない&lt;/strong&gt;ことです。CtrlキーとCapsキーのスワップなど、いくつかのことには対応しているのですが…。私などはEmacsキーバインドに慣れ切っており、それが使えないタイピングはストレスが溜まります。少数派だとは思いますが、テキストエディット専用機であることを考えればこういったマニアックなところにこそ対応してほしいとも思います。&lt;/p&gt;&#10;&lt;h2 id="pcとの連携が微妙"&gt;PCとの連携が微妙&#10;&lt;/h2&gt;&lt;p&gt;PCとの連携の一例として、まず&lt;strong&gt;日本語入力ソフトの辞書&lt;/strong&gt;です。別にポメラのATOKにPC版ATOK並の変換効率を期待しているわけではありません。そもそも十年前のMS-IMEに適応させられた私は、未だに単語区切り変換の癖が抜けませんので、変換精度についてはそこそこでよいのです。ただ、&lt;strong&gt;せめてユーザー辞書はPCと連携したい&lt;/strong&gt;。ま…ATOK形式ならインポートできるようなので、手間をかければできるだろう、とは思いますが。私はGoogle 日本語入力を愛用してますので、まずそっからユーザー辞書をATOK形式に変換して、さらにそれを取り込む、という手順になるでしょうか。面倒くさすぎです。&lt;/p&gt;&#10;&lt;p&gt;また、&lt;strong&gt;PCとのファイルのやりとりがしづらい&lt;/strong&gt;。Bluetoothなども使えるのですが、これが絶妙につかいづらいのですよ。SDカードだって出したり引っこ抜いたりするのは面倒ですし。ケーブルがmini USBというのもマイナスで、また繋いだ後の操作が微妙に面倒臭かったりします。というかせ&lt;strong&gt;っかく無線に対応しているのだから、同期などもうちょっとなんとかならなかったのか&lt;/strong&gt;と思います。&lt;/p&gt;&#10;&lt;p&gt;FlashAirを使えばEvernoteに直接投稿などは出来て、日記を毎日投稿する、などやりたいことを&lt;strong&gt;限定的に実現することは可&lt;/strong&gt;能でしょう。しかし&lt;strong&gt;もっとも求められるのは、無線でPCとワンタッチで同期できることではないか&lt;/strong&gt;と思います。Dropboxあたりに対応してもらえるだけでもたいへん便利になると思うのですが。&lt;/p&gt;&#10;&lt;h2 id="専用機だからこそ"&gt;専用機だからこそ&#10;&lt;/h2&gt;&lt;p&gt;本当に、あと一歩だと思うのですけどね。 あと細かいところをいえば、&lt;strong&gt;文字コードをUTF-8に対応して、改行コードもCR/LFだけでなくLFにも対応してほしい&lt;/strong&gt;。&lt;strong&gt;専用機だからこそこだわって欲しい&lt;/strong&gt;。ファイラの操作感ももう少しなんとかならないものか…。このあたりが実現されれば、少なくとも私はまた使おうと思います。&lt;/p&gt;</description></item><item><title>Mail.appからAirmailに乗り換えた</title><link>https://hack-le.com/37342853-2/</link><pubDate>Thu, 03 Apr 2014 16:08:01 +0900</pubDate><guid>https://hack-le.com/37342853-2/</guid><description>&lt;p&gt;2016/07/04追記：本記事はかつてMail.appからAirmailに乗り換えたときの記事です。しかし、AirmailにはAPOPに対応しない、日本語の検索に難がある、という問題があり、現在は再びMail.appに回帰しています（「&lt;a class="link" href="//hack-le.com/46226453-2/" &gt;Airmail 2 から標準のメール.appに帰ってきました : 或る阿呆の記&lt;/a&gt;」）。ここであげている問題もなくなりました。迷惑メール問題は、形を変えて手こずっているのですが…。&lt;/p&gt;&#10;&lt;h2 id="標準のメーラーも悪くないが"&gt;標準のメーラーも悪くないが&#10;&lt;/h2&gt;&lt;p&gt;Mac OSXの標準のメーラーであるMail.appは決して出来の悪いものではないのですが、使っていてどうにも困ることがいくつか。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一つは文字化け問題&lt;/strong&gt;で、本文が文字化けすることはあまりないのですが、添付ファイルの名前が文字化けすることはしょっちゅうありました。その対策としてMIMEfixというプラグインが開発されていましたが、Mavericksでは対応していないようです。私は仕事でもMacを使っているので、この現象にはたいへん悩まされていました。&lt;/p&gt;&#10;&lt;p&gt;また、&lt;strong&gt;検索しても何もひっかからない&lt;/strong&gt;という事態がよくありました。一度再構築したこともあり、今はちゃんと機能しているのかいないのかイマイチよくわかりません。さらに&lt;strong&gt;最近はメールを半日近く受信しない&lt;/strong&gt;ことがよくあります。また、フォルダを削除したり記事を移動させようとすると、ことごとく失敗します。メッセージ部分が表示されないこともよくありました(メーラーを再起動すると直る)。&lt;strong&gt;何度迷惑メールじゃないとしても迷惑メールになったり&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="airmailがよいらしく"&gt;Airmailがよいらしく&#10;&lt;/h2&gt;&lt;p&gt;いくつかの不具合は必ずしもMail.appのせいではないかもしれませんが、いずれにせよあまりに使いづらいと感じることが多くなったので、本格的に乗り換えを検討することになりました。&lt;/p&gt;&#10;&lt;p&gt;Airmailというのが200円と非常に低価格でありながらなかなか評判がよく、POPにも対応しているようなので、必要十分と判断し導入してみました。初期設定にやや手こずりましたが(メーラーの使い始めはいつだってそうですけど)、その後は特に困ることもなく使えています。添付ファイルは正常ですし、いまのところ文字化けもない。また、&lt;strong&gt;メーラーの機能そのものが割に使いやすい&lt;/strong&gt;。未読フィルタなどがキー入力一つでポンポン変わります。Mail.appで感じた不便さはかなり解消されたように思います。&lt;/p&gt;&#10;&lt;p&gt;サードパーティ製のソフトを使うとOSのバージョンアップなどに神経を尖らせる必要がでてくるので、できれば避けたいのですが、仕方ないですね。&lt;/p&gt;</description></item><item><title>MacのメリットはトラックパッドとUnix</title><link>https://hack-le.com/32323358-2/</link><pubDate>Sun, 22 Sep 2013 00:22:09 +0900</pubDate><guid>https://hack-le.com/32323358-2/</guid><description>&lt;p&gt;Macのメリットを書いた記事はたくさんあります。私も人に時々「Macの何がいいの？」と問われることがあります。Macのどこがいいのか、なぜMacを使うのか、多くのMacユーザーが記事にしていますが、私の気に入っているところをそのまま伝えてくれている記事は見たことがありません。なので、一つの意見として、私も記事を書いてみることにしました。&lt;/p&gt;&#10;&lt;h2 id="macユーザーになって3年"&gt;Macユーザーになって3年&#10;&lt;/h2&gt;&lt;p&gt;Macユーザーになってかれこれ3年ばかりたちましょうか。それまではWindowsと、研究用にLinuxを使っていました。元々はiPhoneアプリでも開発しようと思ってMacBook Airを購入したのですが、結局iPhoneアプリなどまったく作っておりません。が、もはや私はMacから離れることができなくなってしまいました。今年もMacBook Airを2013モデルに新調してしまい、またデスクトップは昨年購入したMac mini 2012です。いくつかのWindows専用アプリの為にWindowsも残してはいますが、基本はMacです。Linuxはサーバーのみ運用しています。多分、今後もMacを使い続けることになるでしょう。&lt;/p&gt;&#10;&lt;p&gt;何故、私はMacから離れられなくなってしまったのか。Macの良い所とはなんなのか。それを私なりに記述するのが本記事の目的です。最初に結論を書くと、&lt;strong&gt;私が思うMacの素晴らしいところは二点、トラックパッドとUnixです&lt;/strong&gt;。他にも魅力的な点は勿論多くあるのですが、突き詰めるとこの二点です。&lt;/p&gt;&#10;&lt;h2 id="macの良い所はosxというかトラックパッドトラックパッドです"&gt;Macの良い所はOSX、というかトラックパッド、トラックパッドです&#10;&lt;/h2&gt;&lt;p&gt;今年MacBook Airを新調する際、私はWinノートも真剣に検討しました。別にMacというブランドにこだわっているわけではないのです。ですが、いろいろ考えているとやはりMac以外に選択肢はありませんでした。その原因を考えてみると、自分はMac OSXのトラックパッドを大いに気に入っているようだと思うに至りました。あまりに快適すぎて、今やノートだけでもなくデスクトップマシンであるMac miniでもMagic Trackpadを6000円出して購入し、マウスはまったく使いません。トラックパッドの挙動はOSに密接しているのでしょうか、WindowsやLinuxではどうしたって体験できないことのようです。&lt;/p&gt;&#10;&lt;p&gt;このトラックパッドの良さは、Macユーザーなら多くの人が頷いてくれるに違いないと思いますが、Macを使ったことのないWindowsやLinuxユーザーに理解してもらうのは至難の業です。実際、数年前のMacを使ったことがなかった私も、いくら言われても理解できなかったのではないかと思います。しかし、使って初めてわかる便利さというものがあることは、生きていれば誰しも経験するところ。Macのトラックパッドはその一つだと言うしかありません。あまり馴染めない人がいることも事実ではありますが…。&lt;/p&gt;&#10;&lt;h2 id="osxはunixそれでいながらwindowsに近い各サービスソフトのサポート"&gt;OSXはUnix。それでいながらWindowsに近い各サービス、ソフトのサポート&#10;&lt;/h2&gt;&lt;p&gt;Wikipediaを見てもわかるとおり、OSXはUnixです。Unix Magazineの終わり頃はやたらMacが取り上げられていたような気がします。&lt;/p&gt;&#10;&lt;p&gt;Register of Open Branded Products&#10;&lt;a class="link" href="http://www.opengroup.org/openbrand/register/apple.htm" target="_blank" rel="noopener"&#10; &gt;http://www.opengroup.org/openbrand/register/apple.htm&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;したがって&lt;strong&gt;Unixの膨大な資産を使うことができます&lt;/strong&gt;。Linuxを使っていた人間にはこれが嬉しすぎることです。ちょっとしたツールならコマンドラインでさくっと作ることもできます。WindowsでもCygwinやMinGWなどを導入するという選択肢はありますが、私の経験ではなにかとトラブルが起きやすく、いろいろと苦労した記憶があります。また、Macは今や無視できない存在であり、各種メジャーなサービスやソフトウェアでも、Mac OSXはWindowsと同じく公式に対応してくれていることが多いです。これはLinuxでは考えられないことです。勿論Windowsのようにはいきませんが…。ですが、&lt;strong&gt;Unixの資産と、今どきのサービス、ソフトウェアの多くを安心して使うことができるのは大きい。Unixベースということもあって、開発環境を整えるのも非常に楽です&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;蛇足ですが、仮想化ソフトでWindowsを動かせば、かなり多くのWin用ソフトも動きます…まぁあまりやりたくはありませんが。それと、SSHを使ったとき、濁点が一文字としてカウントされてしまう問題は大きな罠です…罠過ぎます。こういう妙な仕様で困るということはたしかにちょいちょいあります…（&lt;a class="link" href="https://hack-le.com/30878779-2/" &gt;rsyncでiconvオプションをつけると、deleteオプションの挙動が変わる？？(Mac)&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;h2 id="macの魅力はトラックパッドとunix"&gt;Macの魅力はトラックパッドとUnix&#10;&lt;/h2&gt;&lt;p&gt;というわけで表題に戻り、&lt;strong&gt;Macの魅力はというと、トラックパッドとUnixであるということに尽きると思うのです。またUnix系列でありながら、Linuxと違いそこそこメジャーなので多くのサービス、ソフトウェアが公式で対応してくれています&lt;/strong&gt;。こうなると、もうWindowsには戻れなくなります。Linuxを使うという選択肢もなくなります。結果、私はMacを使います。Macを使っているとiPhoneやApple TVなどAppleの周辺機器が便利です。Mac専用ソフトウェアも購入しだします。そうして、いつのまにやらAppleに随分囲い込まれてしまいました…。まだまだ当分、Macを使い続けることでしょう。&lt;/p&gt;&#10;&lt;p&gt;…最後にもう一つ、Macの気に入っているところを上げろと言われたら、&lt;strong&gt;Time Machineをあげます。バックアップや復旧、マシンの移行が信じられないほど楽ちん&lt;/strong&gt;です。&lt;/p&gt;</description></item><item><title>MacbookAir 2013 11インチ 購入記(MBA 2010 13インチから買い替え)</title><link>https://hack-le.com/31153489-2/</link><pubDate>Sun, 25 Aug 2013 17:23:14 +0900</pubDate><guid>https://hack-le.com/31153489-2/</guid><description>&lt;p&gt;以前MBA2013は微妙だと書いたのですが（記事はブログ整理にともなって削除）、買いました。だって新しいノートパソコンは必要で、Mac OSXに惚れ込んでて、大きさは11インチが欲しいとなったら、もう他に選択の余地ないんですもん…。&lt;/p&gt;&#10;&lt;h2 id="色々検討したけれど"&gt;色々検討したけれど&#10;&lt;/h2&gt;&lt;p&gt;VAIO DUOとか真剣に検討しましたよ。でも、OSXを使いたかったら、もう仕方がない。MBPの新型を待つ、という選択肢もないではなかったのですが、そうすると現在使っているデスクトップのMac miniの立場が弱くなるし、やっぱりなんだかんだでMBPは高いし重いしでかい。13インチのMBAを二年半にわたって使って思ったことは、多分私はもっと小さな画面のノートパソコンで大丈夫だということだったので、これはもう仕方ない。はいもう仕方ない。&lt;/p&gt;&#10;&lt;p&gt;言い訳はともかくとして、せっかく買ったので、誰かの参考になるかはわかりませんが、購入記を書きます。&lt;/p&gt;&#10;&lt;h2 id="元々使っていたのはmba-2010-13インチ"&gt;元々使っていたのはMBA 2010 13インチ&#10;&lt;/h2&gt;&lt;p&gt;まずこれまでに使っていたノートについての詳細を書きます。評価というのは結局のところ相対的なものですから、私がどういうものを持っていたのかということをはっきりさせることは重要です。で、私が使っていたのは、三世代前のモデル、MacbookAir Late 2010 13インチで、CTOでメモリを4GBに盛り、また自分でSSDを256GBに換装したものです。つまり、以下のようになります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;MBA Late 2010&lt;/li&gt;&#10;&lt;li&gt;画面: 13インチ 1440x900&lt;/li&gt;&#10;&lt;li&gt;CPU: Core 2 Duo 1.86GHz(2コア)&lt;/li&gt;&#10;&lt;li&gt;MEM: 4GB&lt;/li&gt;&#10;&lt;li&gt;SSD: 256GB&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;何が不満かと言うと、CPUです。Core 2 Duoだと普通にブラウジングするだけでもけっこう待たされます。Wordなどのオフィスファイルでも、重いものを開こうとすると開ききるまでなかなか時間がかかります。逆に言うと、それ以外はさほど不満もなかったりします。というわけで、買い替えはけっこう悩みました。しかし今後予定として、海外への長期出張でしばらくパソコンの買い替えなどできなくなる予定があるので、思い切って買い換えることにしました。&lt;/p&gt;&#10;&lt;h2 id="買い換えたのは256gbモデル"&gt;買い換えたのは256GBモデル&#10;&lt;/h2&gt;&lt;p&gt;今回は店頭販売モデルに256GBがあります。これは非常に有難いことです。店頭モデルは一ヶ月ほどすると20-25%ほど値引きされますので、私のような独身貴族とはいえ決して裕福とは言い難い一市民はこれを利用しない手はありません。以前MBAを買ったときは、Macは値下がりしないものと思い込みよく調べずオンラインストアで購入したのですが、それは間違いでした（とはいえ、だからこそメモリを4GBにすることができ、そのおかげで二年半以上使うことができたのだと思いますが）。買ったモデルのスペックは以下のようになります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;MacBook Air Mid 2013&lt;/li&gt;&#10;&lt;li&gt;画面: 11インチ 1366x768&lt;/li&gt;&#10;&lt;li&gt;CPU: Core i5 1.3GHz&lt;/li&gt;&#10;&lt;li&gt;MEM: 4GB&lt;/li&gt;&#10;&lt;li&gt;SSD: 256GB&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;定価は12万近くしますが、なんと9万円以下で購入することができました。7月の中旬くらいだったかと思います。ちょうど発売から一ヶ月程ですね。&lt;strong&gt;発売後一ヶ月以降は、Apple製品の場合どれだけ待ってもあまり安くなることはない&lt;/strong&gt;ようです。大きく変わったのは、画面サイズとCPU、そして書いていませんがバッテリーです。SSDはなにげにSATA3対応でまたRead700MB/sと報告されており、爆速となっていますが、それを体感できるかというと微妙です。画面が11インチということで、解像度も1440x900から1366x768に落ちました。&lt;/p&gt;&#10;&lt;p&gt;ところで買い換えるにあたって、Windowsマシンという選択肢はなかったのかというと、これは実は真面目に検討しました。VAIO DuoとかVAIO Proとか、非常に魅力的な端末が出ていることは知っていましたから。私はAppleに囲い込まれてはいますが、別にAppleの信徒というわけではありません。ただ自分が便利だと思うものを集めたらApple製品ばかりになってしまったのです…ってこれじゃ典型的な信者の言い分ですね。私は&lt;strong&gt;Unixの資産を使いたい&lt;/strong&gt;ので、Windowsは決して便利とは言い難いのです。とはいえLinuxにしてしまうと、周辺機器や各種サービスで対応していないものが多すぎる。OSXはその点のバランスが非常に素晴らしい。OSX専用のソフトウェアにも便利なものが多くあります。そして何より、&lt;strong&gt;OSXはトラックパッドが本当に便利なのです。OSX最大の魅力はトラックパッドではないかと思うほど&lt;/strong&gt;です。しかしこれはMac以外のユーザーに言っても、あまりピンと来ないようです。こればかりは使ってみないと、それもある程度の期間使い続けないとわからないのでしょう。&lt;/p&gt;&#10;&lt;p&gt;…とまぁ、そういったことをあれこれと考えて、今回のMBA購入に踏み切りました。（MBPにしなかったのは、画面サイズから当然の帰結といえましょう）&lt;/p&gt;&#10;&lt;h2 id="time-machineによる非常に簡単な移行"&gt;Time Machineによる非常に簡単な移行&#10;&lt;/h2&gt;&lt;p&gt;OSXで素晴らしいなと思うことは移行、復旧の簡単さです。常日頃Time Machineにデータをバックアップしておけば、実に簡単に環境の移行を行うことができます。実際、私はMacが届いて数時間後にはもう環境を移行し終わり、開発環境などを整える為いくつかのソフトウェアの再インストールにとりかかることができました。これは本当に素晴らしいですよ。&lt;/p&gt;&#10;&lt;h2 id="使い勝手"&gt;使い勝手&#10;&lt;/h2&gt;&lt;h3 id="軽快な動作"&gt;軽快な動作&#10;&lt;/h3&gt;&lt;p&gt;CPUの定格クロックが1.3GHzというのは気になるところです。しかし実際に使ってみると、これがなかなかよく働いてくれて、少なくともCore 2 Duoから比べると随分良くなっています。Webブラウジングでのもたつきは圧倒的に減りました。また、仮想OSの起動など、重い動作は多少早くなりました。MS オフィスも、40ページくらい画像貼りまくりのいやーなファイルとか、多少開ききるのにかかる時間がマシになりました。ま、そうはいってもモバイルノートですから、パワフルというわけにはいきませんが。しかし及第点ではないでしょうか。&lt;/p&gt;&#10;&lt;h3 id="バッテリーは本当に長くなっている"&gt;バッテリーは本当に長くなっている&#10;&lt;/h3&gt;&lt;p&gt;地味に何度か助けられたのはバッテリーです。宣伝文句どおり、本当に長くなっています。普段はあまり意識することはありませんが、電源コードを忘れたときや出張先で長い時間PCをいじる必要に迫られた時、本当に有難かった。改めて、モバイルノートにおいてバッテリーが正義であることを実感しました。仮想OSを立ち上げてバリバリするのでない限り、普通に使用している分には数時間もたせることができます。&lt;/p&gt;&#10;&lt;h3 id="気のせいキーボードが打ちやすい"&gt;気のせい？キーボードが打ちやすい&#10;&lt;/h3&gt;&lt;p&gt;これは気のせいかもしれませんが、MBA 2010 13インチと比べて、キーボードがちょっと打ちやすいです。柔らかい打鍵感というかなんというか。何か変わったんでしょうかね？それと、2010モデルはキーボードのバックライトが搭載されていなかったので、バックライトのある2013モデルはカッコイイですね。&lt;/p&gt;&#10;&lt;h3 id="画面サイズは11インチで十分だった"&gt;画面サイズは11インチで十分だった&#10;&lt;/h3&gt;&lt;p&gt;ところで私は元々13インチのMBAを使っていましたが、当時はこれでも小さいんじゃないかと不安でしたが、使ってみるとそんなことはなく、むしろこれでもまだ大きいという思いを募らせていました。で、今回解像度などに多少の不安を感じながらも11インチにしてみました。結果、特に不便を感じず使うことができています。思えば開発も主にCUIなことが多い私、特に大画面の必要はなかったのですね。小さくなったおかげで入るカバンも増えたし、よかったよかった。&lt;/p&gt;&#10;&lt;h3 id="謎のブラックアウト現象再インストール検討中"&gt;謎のブラックアウト現象。再インストール検討中&#10;&lt;/h3&gt;&lt;p&gt;現在唯一私を悩ませているのがこのバグです。&lt;strong&gt;いきなり画面がブラックアウトし、すべての動作が止まります。1分くらいすると復旧するのですが、原因がまったくわかりません&lt;/strong&gt;。普通にキーボードで文字を入力しているときにいきなりなったりします。頻度は不定期で、多い時は一日に三回くらいなるし、ならないときはならないし、まったくもって予想がつきません。調べてみると同じような症状に悩まされている人は昔からいて、どうもこれは&lt;strong&gt;ハードではなくOSXのソフトウェア的な不具合のように思えます&lt;/strong&gt;。対策として、PRAMリセットなどが提唱されていますが、一通りやってみたものの症状は治りません。しかし前述したように恐らくソフトの不具合と思われますので、とりあえず現在OSの再インストールを検討しています。まったく面倒なことです。OSを再インストールすればソフトウェアによってはライセンスの再登録が必要になりますし、開発環境は入れなおさなくてはなりません。本当に面倒です。こればかりはAppleを恨みます。&lt;/p&gt;&#10;&lt;h3 id="time-machineのバックアップに失敗することが多い"&gt;Time Machineのバックアップに失敗することが多い&#10;&lt;/h3&gt;&lt;p&gt;よくよく考えてみると私を悩ませるバグはもう一つありました。これまたどういうわけかわからないのですが、Time Machineのバックアップに失敗することがよくあるようになりました。バックアップディスクイメージは既に使用中ですと言われ、バックアップに失敗するのです。こんなことは前のマシンではなかったのですが…。参考までに、私はMac miniでTime Machineサーバーを構成しています。したがって通常のUSBケーブルを外付けハードディスクにつないで…というような感じではありません。調べてみると、これはTime Capsuleでも起こるエラーのようです。一度サーバーと繋がっている、バックアップ先のハードディスクの電源を落とすと、直るようなのですが、なぜこんなことになるのか…。これもまた、私の環境固有のローカルなソフトウェア的なエラーといえましょう。こういった謎のローカルな不具合が多いような気がするのは気のせいでしょうか…。&lt;/p&gt;&#10;&lt;h2 id="総合的には素直で無難なアップデートでありそれなりの満足感"&gt;総合的には素直で無難なアップデートであり、それなりの満足感&#10;&lt;/h2&gt;&lt;p&gt;なんだかあまり大したことを書けませんでした。特に使いづらくなったところなどなく、総じて使い勝手がよくなっているだけなので、書くことがあまりないのです。予想以上でも予想以下でもない、予想していた通りの使い勝手です。バグについては、どうも私の環境固有の問題であるようですし…（なんとなく、Time Machineによる移行が怪しいと考えていたりします…憶測ですが）。今回は特に驚きのないアップデートではありましたが、それは無難なアップデートだったとも言えます。果たして&lt;strong&gt;2012モデルから買い換える価値があるかといえば、バッテリーにどれだけの価値があると考えるかによります&lt;/strong&gt;。バッテリーはたしかに長持ちします。2011モデルからの買い替えとなれば、店頭モデルであればメモリ容量やモデルによってはSSD容量も増えますから、検討に値するでしょう。逆に言うと、メモリとSSDを持っていると2012並ということになり、やはりこれもバッテリー次第となります。2010からとなれば、CPUがなかなかパワーアップしてくれますので、2010で何か不便を感じるところがあるのであれば、買い換える価値は十分にあると思います。が、是が非でもというほどのものでもありません。基本形は2010モデルと変わりません。無難なアップデートとはそういうものでしょう。これは、Dog yearと言われるIT業界において、MacBook Airという製品がいかに完成されたものだったのかを示しているとも言えます。&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、&lt;strong&gt;なんだかんだで買い換えてよかったかな、とは思っています&lt;/strong&gt;。前のPCは、いざというときの予備機として置いておくことになるでしょう。あれも使おうと思えばまだまだ使える代物ですから。&lt;/p&gt;</description></item><item><title>rsyncでiconvオプションをつけると、deleteオプションの挙動が変わる？？(Mac)</title><link>https://hack-le.com/30878779-2/</link><pubDate>Wed, 21 Aug 2013 12:17:03 +0900</pubDate><guid>https://hack-le.com/30878779-2/</guid><description>&lt;p&gt;Mac版の話です。Macではファイルシステムの都合上、濁点が一文字扱いになってしまうため、他のOSのマシンにファイルをコピーするときは、文字コードに気をつけてやらないといけません。rsyncにおいてはiconvオプションを付ける必要があるのですが、どうも、これをつけるとdeleteオプションの挙動が変わってしまような感じです。&lt;/p&gt;&#10;&lt;p&gt;今回使ったソフトウェアは、MacのHomebrewでインストールした、rsync 3.0.9です。&lt;/p&gt;&#10;&lt;p&gt;MacをUnixマシンとして愛用する者の間では有名な仕様として悪名高い（？）UTF-8-MACがあります。Macでは&lt;strong&gt;濁点はそれだけで一文字として数えられる&lt;/strong&gt;というもので、この仕様の為に、MacからLinuxマシンにscpやrsyncなどで濁点のつくファイルをコピーすると、たとえば「がぎぐげご.txt」が「か゛き゛く゛け゛こ゛.txt」となってしまいます。これが非常に厄介でして、何が厄介かというと、まずそのような仕様になっているなど最初は考えもしませんから、濁点問題というものに気づくのにまず時間がかかります。突然いくつかのファイルが見えなくなったりして、なんでだなんでだと調べている間にこの濁点問題に行き着くのです。ここに至るまでにけっこうなエネルギーを消費します。&lt;/p&gt;&#10;&lt;p&gt;解決方法として、MacからLinuxマシンにrsync転送時にはiconvオプションでUTF-8-MACをUTF-8にする、というものがあります。私もご多分に漏れずその解決方法を利用しているものです。具体的には、以下のようになります。&lt;/p&gt;&#10;&lt;pre&gt;`$ rsync --delete --iconv=UTF-8-MAC,UTF-8 -ave ssh ~/data/ hack_le@server:data/&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;このコマンドの意味は、&lt;strong&gt;ローカルの~/dataディレクトリの中身と、serverマシン(Linux)のhack_le~/data/の中身を同期させる&lt;/strong&gt;というものです。その際、&lt;strong&gt;ファイル名をUTF-8-MACからUTF-8に変換しています&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ところが、上記のコマンドをそのまま入力すると、&amp;ndash;deleteオプションが正しく機能しませんでした。あれれと思って色々検証したところ、&lt;strong&gt;どうやらiconvオプションを外すと、&amp;ndash;deleteが正しく機能します&lt;/strong&gt;。なぜそうなるのかはよくわかりません。あれこれやった挙句、&lt;strong&gt;対処法として、アスタリスクを付けるということで落ち着きました&lt;/strong&gt;。具体的には以下です。&lt;/p&gt;&#10;&lt;pre&gt;`$ rsync --delete --iconv=UTF-8-MAC,UTF-8 -ave ssh ~/data/* hack_le@server:data/&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで正常に機能するようになりました。なぜこのようなことになったのか、わかる人がいれば教えてほしいものです。バグなのか、仕様なのか…。アスタリスクをつけるつけないで挙動が変わることは理解できすが、iconvの有無で変わるのはなんとも理解し難い…。&lt;/p&gt;&#10;&lt;p&gt;ところで、Linuxマシンに既に移してしまったUTF-8-MAC仕様のファイル名の処理には、convmvなるソフトウェアが有用だそうです。私は知らずに手作業で直したので詳細不明ですが、もし困っている人いましたら調べてみるとよいかもしれません。&lt;/p&gt;</description></item><item><title>ATOKからGoogle日本語入力に移ることにした。リアルタイム変換が便利</title><link>https://hack-le.com/27465029-2/</link><pubDate>Tue, 28 May 2013 20:12:44 +0900</pubDate><guid>https://hack-le.com/27465029-2/</guid><description>&lt;p&gt;私はATOKを使っているのですが、今月これを使い続けるかどうかで悩んでいました。&#10;Windows、Mac、Androidと複数端末をもっている私は、&#10;ATOK Passportというサービスを使っています。&#10;これは300円/月で10台のPCに最新のATOKをインストールできるという大変素晴らしいものです。&#10;私がこのサービスを使い始めてからちょうど一年が経ちます。&#10;辞書の同期もあり、私としては別段不満があるわけではないのです…が。&#10;Google日本語入力が気になります。&lt;/p&gt;&#10;&lt;p&gt;Google日本語入力はリリースされてからすぐに試用して気に入り、去年(2012年)の4月まで愛用していました。&#10;そんな私がATOKに移ったのは、やはりATOKのブランドです。&lt;/p&gt;&#10;&lt;p&gt;日本語入力にあくまでこだわるJustsystemのATOKを使うこと自体が、なんだかステータスに思えるのです。&#10;Google日本語入力はたしかに便利ではありますが、その変換候補はあまりに軟派。&#10;ネットスラングが率先して候補にあがることにもなにか気恥ずかしさを感じます。&lt;/p&gt;&#10;&lt;p&gt;そんな私なので、多少時事がGoogle日本語入力より疎くても変換能力自体に不満はないのです。&#10;ATOKを使い出して気に入ったことはいくつもあります。&#10;私はタイピング速度は早いもののあまり正確ではないのですが、&#10;ATOKは私のタイプミスを汲み取って変換時に自動的に直してくれます。&#10;私が正確でない言葉遣いをすると警告をしてくれます。&#10;要注意な言葉を使うと注意してくれ、勉強になります。&#10;MacだとCtrl-Wで辞書アプリと連携してくれるのも嬉しい。&#10;Androidでは数字キーが表示されたりするのも嬉しいし、ジェスチャー入力も慣れると速い。&lt;/p&gt;&#10;&lt;p&gt;一方気に入らないところもあります。&#10;いくつかの差別的とされる言葉が辞書に登録されておらず、苦労しますし、&#10;そもそもそのような言葉を除外するポリシー自体が気に入りません。&#10;また不安定で重いところがあるように思います。&#10;特にMacでは、ATOKが原因とおもわれるケースで虹色の風車が頻繁(昔のWindowsでいうところの砂時計)に出現し、処理を待たされます。&#10;ATOK Syncはよく同期が止まっていますし、ATOK関係のソフトが定期的にバックグラウンドで暴走してCPUを加熱してくれます。&lt;/p&gt;&#10;&lt;p&gt;そんなこんなですが、全体的にはよく働いてくれていて、特に不満というほどのものはありませんでした。&#10;今後も使っていき、辞書を鍛えていこうとすら思っていました…が、&#10;私は長期の海外出張が予定されており、かなり長い期間にわたってインターネットが使えなくなります。&#10;で、ATOK Passportは二週間に一度はインターネットに接続されないといけないのです。&#10;それはちょっと問題だなぁ、その間他のIME使わないとなぁ…ちょっと慣れておくか、と、&#10;今月はじめ、久しぶりにGoogle日本語入力を使ってみたところ…&lt;/p&gt;&#10;&lt;p&gt;これが超便利。&#10;なにが便利って、リアルタイム変換です。&#10;リアルタイム変換というのは、入力しながらリアルタイムで変換候補が表示される機能なのですが、&#10;もともとMS-IMEに調教され連文節変換より単語変換を主とする私にはうってつけの機能でした。&#10;入力しながらタイプミスに即座に気づけるし、&#10;正しく変換されるかどうかすぐにわかるので変換によるタイムロスが少ない。&#10;語彙はもちろん言うまでもなく素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;他の要素はともかく、このリアルタイム変換は私にとって何物にも代え難い素敵機能ではないだろうか。&lt;/p&gt;&#10;&lt;p&gt;でも悩みもあります。&#10;私は上述したATOKのお節介なところがけっこう気に入っていたのです。&#10;ATOKのお節介は、ビジネスメールを書いているときなどに何度か威力を発揮しました。&#10;頻度は決して多くはないけれど、日本語指南の代金としても月300円は悪くないなと思っています。&lt;/p&gt;&#10;&lt;p&gt;それにATOKを使うということは、物を書くことに拘りがあるという端的に示すステータスだと私には感じられます。&#10;ATOKを使うということそのものが、MS-IMEを長いこと渋々使っていた私には一種の憧れなのです。&lt;/p&gt;&#10;&lt;p&gt;ああどうしようか、いずれにせよ今月末までは契約は続くのだし、月末までATOKとGoogle日本語入力を両方使って考えよう…&#10;そんな風に考え、そして今月がもう終わろうとしています。&lt;/p&gt;&#10;&lt;p&gt;結論として、私はATOKからGoogle日本語入力に移ることにしました。&#10;決め手はやはりリアルタイム変換。&#10;そしてATOKのように不安定な挙動を見せなかったこと。&lt;/p&gt;&#10;&lt;p&gt;Google日本語入力からATOKに移ったという話はちょくちょく見ますが、&#10;逆は少ない、特にリアルタイム変換を理由にしたレビューは見受けられなかったので、記事にしてみました。&lt;/p&gt;&#10;</description></item><item><title>ruby-openglで英数字の文字列を描画</title><link>https://hack-le.com/27401043-2/</link><pubDate>Fri, 24 May 2013 13:37:28 +0900</pubDate><guid>https://hack-le.com/27401043-2/</guid><description>&lt;p&gt;ちょっとハマったのでメモ。結論から言うと、文字列オブジェクトをeach_byteで分解して、GLUT.BitmapCharacterを用いる。hogeと描画したかったら、&lt;/p&gt;&#10;&lt;pre&gt;`'hoge'.each_byte{ |x|&#13; GLUT.BitmapCharacter(GLUT::BITMAP_HELVETICA_18, x)}&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;となる。なお、文字列の場所はGL.RasterPos2dなどで指定する。全体ソースコードで例。&lt;/p&gt;&#10;&lt;pre&gt;`#!/usr/bin/ruby&#13; require 'opengl'&#13; display = proc {GL.Clear(GL::COLOR_BUFFER_BIT)&#13; GL.RasterPos2d(0.0,0.0)&#13; 'hoge'.each_byte{|x|&#13; GLUT.BitmapCharacter(GLUT::BITMAP_HELVETICA_18,x)&#13; }&#13; GL.Flush()&#13; }&#13; resize = proc {|w,h|&#13; GL.Viewport( 0, 0, w, h)&#13; GL.LoadIdentity()&#13; }&#13; keyboard = proc {|key, x, y|&#13; case key&#13; when 'q','Q','\033'&#13; exit 0&#13; end&#13; }&#13; GLUT.Init()&#13; GLUT.InitDisplayMode(GLUT::RGBA)&#13; GLUT.CreateWindow($0)&#13; GLUT.DisplayFunc(display)&#13; GLUT.ReshapeFunc(resize)&#13; GLUT.KeyboardFunc(keyboard)&#13; GL.ClearColor(0.0, 1.0, 1.0, 0.0)&#13; GLUT.MainLoop()&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;この方法だと日本語は無理。&lt;/p&gt;&#10;&lt;p&gt;参考：&#10;ruby-opengl/examples/misc/font-glut.rb at master · lazyatom/ruby-opengl · GitHub &lt;a class="link" href="https://github.com/lazyatom/ruby-opengl/blob/master/examples/misc/font-glut.rb" target="_blank" rel="noopener"&#10; &gt;https://github.com/lazyatom/ruby-opengl/blob/master/examples/misc/font-glut.rb&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>MacのWord 2011で、ページ毎に異なるヘッダーを作成する</title><link>https://hack-le.com/26020210-2/</link><pubDate>Thu, 25 Apr 2013 14:50:20 +0900</pubDate><guid>https://hack-le.com/26020210-2/</guid><description>&lt;p&gt;MS Word 2011 for Macを使っているのですが、Windows版とかけ離れたインターフェースで、なんとも苦労させられます。今回苦労したのはWord 2011でページ毎に異なるヘッダーを作成する方法です。検索しても出てくるのはWindowsの情報ばっかりだったので、Mac用の記事を作成しました。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;マシン：MacbookAir Late 2010(メモリ4G)&lt;/li&gt;&#10;&lt;li&gt;OS：OSX 10.8 Mountain Lion&lt;/li&gt;&#10;&lt;li&gt;ソフト：Microsoft Word 2011 for Mac&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;まずシチュエーションを想定します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1ページ目：表紙　ヘッダなし&lt;/li&gt;&#10;&lt;li&gt;2ページ目：目次　ヘッダに「目次」と入れる&lt;/li&gt;&#10;&lt;li&gt;3ページ目〜：本文　ヘッダは「本文中の見出し」を入れる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;表紙にページ番号はいれません。以上の条件で作成します。&lt;/p&gt;&#10;&lt;h3 id="全体をざっと作る"&gt;全体をざっと作る&#10;&lt;/h3&gt;&lt;p&gt;まずざっと全体を図１のように作ります。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/8/d/8d90268c.png" &gt;&lt;img alt="02" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/8/d/8d90268c-s.png"&gt;&lt;/a&gt; 図1[/caption]&lt;/p&gt;&#10;&lt;p&gt;1ページ目に表紙をつくり、「文書パーツ」→「区切り」→ページ区切りの「改ページ」（図２）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/1/5/151c42e5.png" &gt;&lt;img alt="zu02" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/1/5/151c42e5-s.png"&gt;&lt;/a&gt; 図2[/caption]&lt;/p&gt;&#10;&lt;p&gt;2ページ目に目次を作成して、今度は「文書パーツ」→「区切り」→セクション区切りの「次のページから開始」（図２）。&lt;/p&gt;&#10;&lt;p&gt;3ページ目はデフォルトのスタイルにある見だし１で見出しを作成。それで図１のようなものができます。ここでのポイントはセクション区切りです。ワードはセクションが一つの塊になっていまして、ヘッダーやフッターも、セクション毎に設定されます。つまり、ページ毎に違うヘッダーをつけたいのであれば、セクションをわければいいということになります。&lt;/p&gt;&#10;&lt;h3 id="ヘッダーをつける"&gt;ヘッダーをつける&#10;&lt;/h3&gt;&lt;p&gt;次にヘッダーやらを追加する作業に入ります。まず最初に表紙で、リボンより「文書パーツ」→「ヘッダーとフッター」→「ページ番号」（図３）&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/e/a/ea3e4ac6.png" &gt;&lt;img alt="zu03" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/e/a/ea3e4ac6-s.png"&gt;&lt;/a&gt; 図3[/caption]&lt;/p&gt;&#10;&lt;p&gt;で、位置をページの下の中央にして、最初のページにページ番号を挿入するのチェックを外します。（図４）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;437&amp;rdquo;]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="14" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/c/7c9f4746.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;図4[/caption]&lt;/p&gt;&#10;&lt;p&gt;これで表紙をのぞいてページ番号がつきます。&lt;/p&gt;&#10;&lt;p&gt;次に、２ページ目の目次で、「文書パーツ」→「ヘッダーとフッター」→「ヘッダー」（図５）で適当にヘッダーをつけます。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/e/a/ea59f905.png" &gt;&lt;img alt="zu04" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/e/a/ea59f905-s.png"&gt;&lt;/a&gt; 図5[/caption]&lt;/p&gt;&#10;&lt;p&gt;今回は右上に「目次」ヘッダーをつけました（図６）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/4/d/4de59092.png" &gt;&lt;img alt="08" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/4/d/4de59092-s.png"&gt;&lt;/a&gt; 図6[/caption]&lt;/p&gt;&#10;&lt;h3 id="ヘッダーをページ毎に変える"&gt;ヘッダーをページ毎に変える&#10;&lt;/h3&gt;&lt;p&gt;図６で注目してほしいところは２つあって、まず各ページ毎にクションが１，２，３と異なっていること。セクションが一塊ですので、同じセクションだと同じヘッダーがつきます。次に、セクションのところに「前と同じ」という文があること。この「前と同じ」は、前のヘッダーと同じヘッダーにします、という意味です。したがってこのままだと、３ページ目（セクション３）のヘッダーを変更すると２ページ目（セクション２）のヘッダーまで変わってしまうわけです。この繋がりを断ち切らないといけない。それには、３ページ目、正確にはセクション３のヘッダーをクリックして、その状態でリボンの「ヘッダーとフッター」(文書パーツのやつじゃないよ）→「オプション」より、「前と同じヘッダー・フッター」のチェックを外します（図７）」&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/7/2/724f9dbb.png" &gt;&lt;img alt="zu07" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/2/724f9dbb-s.png"&gt;&lt;/a&gt; 図7[/caption]&lt;/p&gt;&#10;&lt;p&gt;するとセクション３で前と同じの部分が消えます。あとはセクション３のヘッダーを編集するだけ。で、完成（図８）。&lt;/p&gt;&#10;&lt;p&gt;[caption id=&amp;quot;&amp;quot; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;480&amp;rdquo;]&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/f/5/f5f6cb9a.png" &gt;&lt;img alt="15" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/f/5/f5f6cb9a-s.png"&gt;&lt;/a&gt; 図8[/caption]&lt;/p&gt;&#10;&lt;p&gt;本当であればセクション３のヘッダーにはStyleRefフィールドを使うべきですが、それはまたちょっと別の話なので今回は割愛。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;以上の手順をまとめると以下のように言うことが出来ます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ヘッダーでわけるページ毎にセクションを区切る&lt;/li&gt;&#10;&lt;li&gt;ヘッダーを入れるときに前のヘッダーとの繋がりを切る&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;シンプルですね。後は何がどこにあるかというUIの問題です…。WindowsとMacで違いすぎます…。ちょっとググっでもなぜか見つからなかったので、記事にしました。まぁ多分どこかの誰かは書いているはずなんですが、グーグル先生解決してない知恵袋とかばかり表示しなさる。&lt;/p&gt;&#10;&lt;p&gt;クロスプラットフォームで使うなら、LibreOfficeとかのほうが幸せになれるのかもしれませんね。私はアンチマイクロソフトというわけでもないので、Word自体はそんなに嫌いじゃないんです。が、やっぱりMS Officeはお高いですし、なんだかんだでWindowsであることを前提に考えられて作られてますし、これがデファクトスタンダードなのはちょっとなぁと思います。あとMS OfficeのためにVBAとかあんまり覚える気しないなぁというのもあります。Mac版だとそもそもVBAはアレですが…。&lt;/p&gt;</description></item><item><title>USB温度センサーで室温をモニタリングしてみた(on Ubuntu Server 12.04)</title><link>https://hack-le.com/25756352-2/</link><pubDate>Mon, 22 Apr 2013 20:53:49 +0900</pubDate><guid>https://hack-le.com/25756352-2/</guid><description>&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/2/a/2a2aaa7d.png" &gt;//hack-le.com/wp-content/uploads/imgs/2/a/2a2aaa7d.png&lt;/a&gt;&#10;我が家の室温をモニタリングしてみました。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://www.infiniteloop.co.jp/blog/2012/10/linuxthermometer/" target="_blank" rel="noopener"&#10; &gt;980円のUSB温度計を使ってLinuxから室温を計測する | 株式会社インフィニットループ技術ブログ&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;ほとんど上記事をなぞりつつ、出力結果をGnuplotでグラフにしてみました。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;p&gt;USB温度センサはこれ。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B004FI1570" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;980円と言いつつも、配送料もかかるのでなんだかんだで1500円くらいかかります。eBayならもっと安く買えるそうですけど。レビューは散々ですが、Linuxでちゃんと使えるので問題ありません。で、そのほかの環境は以下。&lt;/p&gt;&#10;&lt;p&gt;マシン：HP ProLiant MicroServer N40L&#10;OS：Ubuntu Server 12.04&lt;/p&gt;&#10;&lt;h2 id="インストールと実行"&gt;インストールと実行&#10;&lt;/h2&gt;&lt;p&gt;ソフトウェアのインストール をします。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo apt-get install build-essential libusb-0.1.4 libusb-dev git&#13; $ git clone "https://github.com/bitplane/temper.git"&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;temperディレクトリができるのでその中でmakeを行うのですけれど、その前に時刻を日本の標準時間(JST)にします。具体的にはtemper.cをいじります。emacsでもviでもお好みのエディタでいじります。&lt;/p&gt;&#10;&lt;pre&gt;`41行目&#13; utc = gmtime(&amp;t);　→　utc = localtime(&amp;t);&#13; 47行目&#13; strftime(dt, 80, “%d-%b-%Y %H:%M”, utc);　→　strftime(dt, 80, “%Y-%m-%d %H:%M:%S”, utc);&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ここのstrftimeで指定した形式で時刻が表示されるので、この部分は適宜好きなようにするとよいと思います。上の例だと、こんな感じです。↓&lt;/p&gt;&#10;&lt;pre&gt;`2013-04-22 20:41:32,17.473719&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;一列目が日時、二列目が温度ですね。実際に実行するには、makeでインストールした後にtemperコマンドを実行します。&lt;/p&gt;&#10;&lt;pre&gt;`$ make&#13; $ sudo ./temper&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;時刻が表示されます。sudo権限じゃないとダメみたいです。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo ./log.sh&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;log.shという実に簡単なシェルスクリプトも用意されていて、5秒ごとにtemperを実行し続けます。中身は以下。&lt;/p&gt;&#10;&lt;pre&gt;`log.sh&#13; #!/bin/bash&#13; while [ 1 ]&#13; do&#13; ./temper sleep 5s&#13; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;なお、もし実行権限なかったら、chmod u+x temperとかで権限を与えてください。せっかくですから、ログとして残しましょう。お手軽にバックグラウンドでlog.shを実行して、その出力をテキストファイルに出力するだけでもいい感じでログが取れます。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo ./log.sh &gt; 20130422.log &amp;&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;終わらせたくなったらpsで検索し、PIDを探し当ててkillします。&lt;/p&gt;&#10;&lt;pre&gt;`$ ps ax | grep log.sh&#13; 2763 ? S 0:00 sudo ./log.sh&#13; 2764 ? S 8:56 /bin/bash ./log.sh&#13; 30873 pts/3 S+ 0:00 grep --color=auto log.sh&#13; $ kill -KILL 2763&#13; $ kill -KILL 2764&#13; `&lt;/pre&gt;&#13;&#10;&lt;h2 id="グラフ化"&gt;グラフ化&#10;&lt;/h2&gt;&lt;p&gt;せっかくなので軽くグラフ化します。例として、log.shの結果をひたすら出力した20130410.logというファイルをグラフ化するとします。使用ソフトはRubyとGnuplot。RubyはGnuplotを使うのに使ってるだけです。グラフ化するのはGnuplot。Gnuplotはsudo apt-getでインストールできます。RubyはUbuntuだと標準でついてたような。なかったらこれも適当にapt-getでインスコできます。まずRubyスクリプト。&lt;/p&gt;&#10;&lt;pre&gt;`plot.rb&#13; #!/usr/bin/ruby&#13; IO.popen("gnuplot","w"){|io|&#13; io.puts "load 'set.gp'"&#13; io.puts "set term png"&#13; io.puts "set output 'now.png'"&#13; io.puts "p '#{ARGV[0]}' u 1:2 w l" io.puts "set output"&#13; }&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;ログのテキストファイルを引数にすると、now.pngという名前の画像で出力。次に、Gnuplotの設定ファイルset.gp。&lt;/p&gt;&#10;&lt;pre&gt;`set.gpset datafile separator ","&#13; set xdata timeset timefmt "%Y-%m-%d %H:%M:%S"&#13; set format x "%m/%d\n%H:%M"&#13; set mxtics 2&#13; set mytics 2&#13; set grid xtics ytics mxtics mytics&#13; set yrange [10:25]&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;set timefmtは、temper.cのstrftimeと同じように合わせます。set yrangeは表示する温度の範囲です。なければオートスケールで勝手に調整されます。set format xは、日時をどういう形式で出力するか、です。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo ./log.sh &gt; 20130410.log &amp;&#13; $ ruby plot.rb 20130410.log&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで、グラフ化させることができます。出力ファイルは上記の例だとnow.pngです。常にグラフ化させたいなら、一番簡単なのは $ watch -n 10 &amp;ldquo;ruby plot.rb 20130410.log&amp;rdquo; とかですかね。あるいはシェルスクリプトのlog.shにruby plot.rb 〜の一文を忍ばせてもよさげです。結果は↓みたいな画像になります。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/2/a/2a2aaa7d.png" &gt;&lt;img alt="now" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/2/a/2a2aaa7d-s.png"&gt;&lt;/a&gt;&#10;二週間くらい計測してみました。楽しいです。移動平均とか、日単位で比べたりとか、いろいろできそうなことはありますね。でもとりあえず今はこんなとこで。&lt;/p&gt;</description></item><item><title>serviceコマンドと/etc/initと/etc/init.dの違いの関係</title><link>https://hack-le.com/25394608-2/</link><pubDate>Sun, 07 Apr 2013 00:14:39 +0900</pubDate><guid>https://hack-le.com/25394608-2/</guid><description>&lt;p&gt;Ubuntu Magazineの記事を参考に、まがりなりにも自分でサーバーを構築してから早半年。といってもファイルサーバーとDLNAのメディアサーバーくらいの機能しかないわけですが、それでもかつてに比べると少しは成長したなぁと思います。&lt;/p&gt;&#10;&lt;p&gt;さて、そんな初心者Linuxサーバー管理者が日々ちょくちょく疑問に思っていたこと。それは &lt;strong&gt;/etc/init.d/なんとか と serviceコマンドを使うのは何が違うのか&lt;/strong&gt;ということ。調べていると、sshサーバー一つ立ち上げるのも、/etc/init.d/sshと書いてあったり、service sshと書いてあったりするわけですが、これって何が違うんだろう？という。さらに考えてみると、/etc/init.dじゃなくて/etc/initなのもあるよな、何が違うんだろ…とかも思ったり。&lt;/p&gt;&#10;&lt;p&gt;まぁ、/etc/initと/etc/init.dがあるのは歴史的経緯で深い意味はないんじゃね、んで/etc/init.d/sshって入力するの面倒くさいからserviceコマンドがあるんじゃね、くらいの認識でした。が、Ubuntu Server 実践バイブルなる本によると、別の説明がありました。&lt;/p&gt;&#10;&lt;h2 id="initデーモンの違いを吸収する"&gt;initデーモンの違いを吸収する&#10;&lt;/h2&gt;&lt;p&gt;まずLinuxにおいて最初に立ち上がるのがinitデーモンです。で、このinitデーモンには昔ながらの SysV init というものと、比較的新しい Upstart ってのがあるらしいです。Ubuntuで使われているのはUpstartのほうなのですが、サーバーのソフトウェアにはSys Vのスクリプトしかなかったりします。なので、UpstartにはSys Vベースのinitスクリプトを解釈する互換機能もあるようなのです。&lt;/p&gt;&#10;&lt;p&gt;深いことはよくわかりませんが、要はSys V互換のためのサービス定義と、Upstartベースのサービス定義の二種類があるということです。で、/etc/init/*にあるものはUpstartのサービス定義ファイルで、/etc/init.d/*にあるのはSys V互換のサービス定義ファイル、ということだそうです。&lt;/p&gt;&#10;&lt;p&gt;あー、それで/etc/initだったり/etc/init.dだったりするのね、と理解。serviceコマンドがあれば、何がinitで何がinit.dだったかとか考えなくて済むということになります。Upstartへの置き換え作業も逐次進んでいるようですし、事情を考えるとUbuntuではserviceコマンドを使うのがよいわけですね。また、違いもわかり今後は各所の記述の違いでもやもやすることもなくなりました。なるほどなるほど。&lt;/p&gt;&#10;&lt;p&gt;ところでUbuntu Server 実践バイブルですが、これ非常によい本で、買ったことは満足しています。が、しかし！最近、達人出版界でpdf版が発売されたんです（&lt;a class="link" href="http://tatsu-zine.com/books/ubuntuserver" target="_blank" rel="noopener"&#10; &gt;Ubuntu Server 実践バイブル 現場で即運用に役立つサービス設定のノウハウ【委託】 - 達人出版会&lt;/a&gt;）。紙で欲しいという人は多いでしょうが、私は電子版のほうが欲しかった！しかも電子版のほうが安いし！こうと知っていたら電子版が出るまで待ったのになぁ！&lt;/p&gt;</description></item><item><title>Ubuntu Server 12.04のCUIで2TB超え(3TB)の外付けハードディスクを使う</title><link>https://hack-le.com/25209854-2/</link><pubDate>Mon, 01 Apr 2013 17:16:11 +0900</pubDate><guid>https://hack-le.com/25209854-2/</guid><description>&lt;p&gt;2015/08/31：追記&#10;Ubuntu 15.04 版で新しい記事を書きました→&lt;a class="link" href="//hack-le.com/45232735-2/" &gt;Ubuntu 15.04 で2TB超え(3TB)のHDをマウントする(CUI) : 或る阿呆の記&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;今日がエイプリルフールだということを割とガチで忘れていました。別にこのブログで何かネタをしようと思っていたわけではありませんが…ちょっと世間ズレを感じます。&lt;/p&gt;&#10;&lt;h2 id="概要"&gt;概要&#10;&lt;/h2&gt;&lt;p&gt;まず環境。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;OS: Ubunts Server 12.04HDD: 2TBのものが4本装着済み&lt;/li&gt;&#10;&lt;li&gt;目的: 新たにUSB接続の外付けハードディスク(3TB)を使用&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;今回の記事は、3TBの外付けハードディスクをUbuntu Server 12.04で使う、というものです。ポイントは以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ハードディスク容量が2TBを超えていること&lt;/li&gt;&#10;&lt;li&gt;OSがLinuxで、CUIによる操作が必要なこと&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ハードディスクはフォーマットする前に、まずパーティションを区切らないといけないわけですが、GPT(GUID Partition Table)は比較的新しいパーティションテーブルの規格です。よく出てくるMBR(Master Boot Record)は、2TB以上の容量のハードディスクをフルで使えない、通称2TBの壁の呼ばれる問題がありました。今回使うのは3TBの外付けハードディスクです。ですので、そこのところを意識しないといけません。&lt;/p&gt;&#10;&lt;p&gt;次にOSがLinuxのUbuntu Server 12.04で、&lt;strong&gt;真っ黒なコンソール画面しか使えないCUI環境である&lt;/strong&gt;こと。つまり、便利なGUIアプリは使えないわけです。Ubuntu、GPTあたりでちょっと調べると出てくるGParted、これが使えません。コマンドで頑張るしかない。具体的には、Gnu partedというソフトウェアを使うことになります(コマンドはparted)。Linuxでハードディスクの操作といえばfdiskが真っ先にでてきますが、前述したようにGPT規格を使う必要があり、fdiskはそれに対応していません。&lt;/p&gt;&#10;&lt;p&gt;以上の条件のもと、3TBの外付けハードディスクを使うための記事です。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;h3 id="外付けハードディスクを繋ぎまっさらにする"&gt;外付けハードディスクを繋ぎ、まっさらにする&#10;&lt;/h3&gt;&lt;p&gt;まずハードディスクを繋ぎます。で、/devあたりで繋いだデバイスを確認します。今回の環境では既に4本の内蔵ハードディスクが装着されていますので、この外付けハードディスクは5本目ということになり、/dev/sdeが存在すると予想できます。&lt;/p&gt;&#10;&lt;pre&gt;`$ ls /dev&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;で/dev/sdeを確認。二本目だったら/dev/sdbでしょう。で、名前を確認したら、今度はハードディスクをまっさらにします。どうせ全部書き直すので必ずしもしなくてもよいかもしれませんが。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo dd if=/dev/zero of=/dev/sde bs=512 count=1&#13; `&lt;/pre&gt;&#13;&#10;&lt;h3 id="gnu-partedでフォーマット"&gt;GNU partedでフォーマット&#10;&lt;/h3&gt;&lt;p&gt;GNU partedを起動します。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo parted /dev/sde&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;で、ハードディスクの状態を確認します。「これほんとにGPTなの？」とかいろいろ聞かれるかもしれませんが、そんときは適当にyesでいいです。3TBの容量があるなぁとか確認したら、いよいよGPTに。&lt;/p&gt;&#10;&lt;pre&gt;`&gt; mklabel gpt&#13; &gt; print&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これでGPTになります。何もかも消えちゃうけどいいの？とか言われるけど気にせずやります。&lt;/p&gt;&#10;&lt;p&gt;で、これから具体的に容量を指定してパーティション区切ったりフォーマットしたりするのだけれど、容量を細かく入力するのは嫌なので単位を設定します。&lt;/p&gt;&#10;&lt;pre&gt;`&gt; unit GB&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これで入力、出力の単位がGBになります。デフォルトはMBっぽい。MiBとかGiBも使える模様。&lt;/p&gt;&#10;&lt;p&gt;で、次にパーティションの作成とフォーマットをします。&lt;/p&gt;&#10;&lt;pre&gt;`&gt; mkpartfs&#13; &gt; (名前…空エンター)&#13; &gt; (ファイルシステム…空エンター。デフォはext2の模様)&#13; &gt; 0 &lt;- 開始位置 &gt; 3001 &lt;- 終了位置 &gt; quit&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;以上でOKです。フォーマットの完了までにだいたい20分くらいかかりました。&lt;/p&gt;&#10;&lt;p&gt;ただ、あまりこのソフトウェアでフォーマットするのは推奨されないらしく、「やってあげなくてもないけど、できればちゃんとしたソフトでフォーマットしてよね！」と警告されます。その場合はmkpartでパーティションだけ区切って、フォーマットは別のソフトを使用することになるのでしょう。mkfs使えるのかな。&lt;/p&gt;&#10;&lt;h3 id="ハードディスクをマウント"&gt;ハードディスクをマウント&#10;&lt;/h3&gt;&lt;p&gt;終わったら、後はマウントするだけ。今回は、/mediaにext-hddというディレクトリ名でマウントすることにしました。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo mkdir /media/ext-hdd&#13; $ sudo mount /dev/sde1 /media/ext-hdd&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;そのままだと所有権が root で 不便なので、所有権を任意のユーザーにしてやります。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo chown -R user:user /media/ext-hdd&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;接続するだけで自動マウントとかさせたかったら、ちゃんと/etc/fstabをいじりましょう。以上で終わりですー。いろんな情報が錯綜していて、地味に苦労しました。&lt;/p&gt;&#10;&lt;h2 id="参考サイト"&gt;参考サイト&#10;&lt;/h2&gt;&lt;p&gt;勉強になりました。ありがとうございます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;GPTパーティション - 個人的健忘録 from 2009 - 楽天ブログ（Blog） &lt;a class="link" href="http://plaza.rakuten.co.jp/bluearth/diary/201001150000/" target="_blank" rel="noopener"&#10; &gt;http://plaza.rakuten.co.jp/bluearth/diary/201001150000/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Parted でパーティションの作成(分割) その１(その4まで) - 個人的健忘録 from 2009 - 楽天ブログ（Blog） &lt;a class="link" href="http://plaza.rakuten.co.jp/bluearth/diary/201001170004/" target="_blank" rel="noopener"&#10; &gt;http://plaza.rakuten.co.jp/bluearth/diary/201001170004/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;HDDをまっさらにする方法 - 個人的健忘録 from 2009 - 楽天ブログ（Blog） &lt;a class="link" href="http://plaza.rakuten.co.jp/bluearth/diary/201001180000/" target="_blank" rel="noopener"&#10; &gt;http://plaza.rakuten.co.jp/bluearth/diary/201001180000/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Ubuntu 10.10のpartedでGPTったメモ - Sickly Life はてな版 &lt;a class="link" href="http://d.hatena.ne.jp/itiri/20110407/1302171786" target="_blank" rel="noopener"&#10; &gt;http://d.hatena.ne.jp/itiri/20110407/1302171786&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;partedコマンドで2TB超パーティション作成：Blogっぽいアレ So-net版：So-netブログ &lt;a class="link" href="http://nigou25.blog.so-net.ne.jp/parted_on_redhat" target="_blank" rel="noopener"&#10; &gt;http://nigou25.blog.so-net.ne.jp/parted_on_redhat&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;[Fedora] パーティションテーブルがGPTのディスクにfdiskを実行するとWARNINGが出る - Life with IT &lt;a class="link" href="http://l-w-i.net/t/fedora/disk_001.txt" target="_blank" rel="noopener"&#10; &gt;http://l-w-i.net/t/fedora/disk_001.txt&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>Windows 8 でBluetoothヘッドセットに接続</title><link>https://hack-le.com/22024737-2/</link><pubDate>Tue, 08 Jan 2013 01:35:46 +0900</pubDate><guid>https://hack-le.com/22024737-2/</guid><description>&lt;h2 id="bluetooth-の再接続ではまる"&gt;Bluetooth の再接続ではまる&#10;&lt;/h2&gt;&lt;p&gt;割としょうもないことですが、ちょっと悩んだので…。&lt;/p&gt;&#10;&lt;p&gt;最近Bluetoothのヘッドフォン買いまして、一応ヘッドセットの機能もあるようなのですが、まぁもっぱらヘッドフォンとして使っています。で、ペアリングは割とうまくいったのですが、その後の接続のやり方で悩んだというアホみたいな話です。そんなですが、同じく悩んだ人もいるかもしれんので、ネタもないしなんとなく記事に。再接続の方法は、タスクバーからやる方法とコントロールパネルからやる方法の両方を書いておきます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;OS：Windows 8 Pro&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ペアリング"&gt;ペアリング&#10;&lt;/h2&gt;&lt;p&gt;あまり説明する必要もないような気はしますが、ペアリングしたい機器を待ち受け状態にしておいて、タスクバーから常駐プログラムを選ぶやつで、Bluetoothアシスタントを右クリック(図1,2)。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="WS000524" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/8/9/89c95cbb.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;図1：割と雑な図&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="WS000525" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/6/7/67f22fc2.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;図2：右クリックしたとき&lt;/p&gt;&#10;&lt;p&gt;そうすると、Bluetoothデバイスの一覧が立ち上がります。んでBluetoothデバイスを検索しはじめます。メトロで…うっとうしいですね。あとはまぁ、指示通りに。&lt;/p&gt;&#10;&lt;h2 id="一度ペアリングした機器と再接続"&gt;一度ペアリングした機器と再接続&#10;&lt;/h2&gt;&lt;p&gt;ヘッドフォンとかだと割と頻繁にBluetooth接続を切ったりなんだりすると思いますが、一度切った後の再接続の仕方。まさかこんなんで悩むとは。まぁわかってみれば単純で(当たり前だけど) 、タスクバーのスピーカーアイコンを右クリックして、「再生デバイス」を右クリック(図3)。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="WS000527" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/f/c/fc34da1d.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;図3：再生デバイスを選択&lt;/p&gt;&#10;&lt;p&gt;すると再生デバイスの一覧が表示されるので、目的の項目を選択して右クリック。んで接続を選ぶ(図4)。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/4/4/44506fa5.png" &gt;&lt;img alt="WS000528" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/4/4/44506fa5-s.png"&gt;&lt;/a&gt;&#10;図4：再生デバイス一覧&lt;/p&gt;&#10;&lt;p&gt;以上で完了。しょうもないなぁと思いつつ、そのしょうもないことでけっこう悩んだりするよなーと思いながら記事書いてみました。もちろんこれコントロールパネルから表示することもできますが、面倒くさい。Windowsのコントロールパネルはいつまでたっても慣れません。Macのシステム環境設定はすぐに引っ張りだせるしわかりやすいのだけれど…&lt;/p&gt;&#10;&lt;h2 id="コントロールパネルから再生デバイスを表示させる"&gt;コントロールパネルから再生デバイスを表示させる&#10;&lt;/h2&gt;&lt;p&gt;ついでなのでコントロールパネルからの方法も書いときます。Windowsキー + X → コントロールパネル → ハードウェアとサウンド → サウンド以上。終わり。Windows 8になってからWindowsキーがやたら活躍するようになりました。&lt;/p&gt;</description></item><item><title>mysearchresults.com(Search Here)の削除(Default Tabのアンインストール)</title><link>https://hack-le.com/21881836-2/</link><pubDate>Thu, 03 Jan 2013 18:26:03 +0900</pubDate><guid>https://hack-le.com/21881836-2/</guid><description>&lt;p&gt;なんだか情けない症状に見舞われました。&lt;strong&gt;Chromeで新しいタブを開いたとき、Search Resultsなるよくわからん検索窓が開かれる&lt;/strong&gt;ようになりました。&lt;/p&gt;&#10;&lt;p&gt;本記事はその対応です。&lt;/p&gt;&#10;&lt;h2 id="症状chromeで新しいタブを開くとresultsの検索窓"&gt;症状：Chromeで新しいタブを開くとResultsの検索窓&#10;&lt;/h2&gt;&lt;p&gt;Search Resultsで検索すると、&lt;strong&gt;mysearchresults.comで検索される&lt;/strong&gt;ようです。デフォルト検索窓のページには怪しい広告が表示されます。また、&lt;strong&gt;Search Hereなる謎の検索エンジン&lt;/strong&gt;が登録されています。Internet Explorerを久々に立ち上げてみると、やはりというかなんというか、&lt;strong&gt;Search Hereなるよくわからんツールバー&lt;/strong&gt;がでておりました。&lt;/p&gt;&#10;&lt;p&gt;多分なんかのソフトウェアに抱き合わせになっているのを、横着してクリック連打かなんかでインスコしてしまったんだろうなぁ…。&lt;/p&gt;&#10;&lt;h2 id="削除方法"&gt;削除方法&#10;&lt;/h2&gt;&lt;p&gt;コイツの削除ですが、どうやら普&lt;strong&gt;通にコントロールパネルからアンインストールできる&lt;/strong&gt;模様。自分の場合は、 &lt;strong&gt;「Default Tab」なるアプリ名&lt;/strong&gt;でした。自分の場合はというのは、&lt;strong&gt;どうもなんかコイツいろんな名前がある模様&lt;/strong&gt;だったので…。&lt;strong&gt;発行元を見れば、Search resultsとかなんとかそんな名前がのっていた&lt;/strong&gt;気がします。&lt;/p&gt;&#10;&lt;p&gt;なんにしても、Default TabをさくっとアンインストールすればOK。&lt;/p&gt;&#10;&lt;p&gt;参考&#10;&lt;a class="link" href="http://botcrawl.com/how-to-remove-mysearchresults-redirection-virus-and-default-tab-search-add-on-hijacker/" target="_blank" rel="noopener"&#10; &gt;How To Remove MySearchResults.com Redirection Virus And Default Tab Hijacker | Botcrawl.com&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;上記サイトではウィルス扱いです。しょうもないものを作っている会社もあるものですが、こういうところって実際やってけるんですかね。&lt;/p&gt;</description></item><item><title>Happy Hacking Keyboard(HHKB)でEmacsキーバインド</title><link>https://hack-le.com/21510498-2/</link><pubDate>Sun, 23 Dec 2012 01:41:21 +0900</pubDate><guid>https://hack-le.com/21510498-2/</guid><description>&lt;p&gt;（2019/11/23追記）ドライバ周りは今でも使えますが、XKeymacs周りは「&lt;a class="link" href="https://hack-le.com/win-emacs-kana/" &gt;Windows 10 + US配列のMac系キーボードで英かな変換とEmacsキーバインド – 或る阿呆の記&lt;/a&gt;」を参考にkeyhacを使ったほうがよいと思います。&lt;/p&gt;&#10;&lt;p&gt;私はHappay Hacking Keyboard Type-S、通称HHKBを使っています。もちろん&lt;strong&gt;US配列&lt;/strong&gt;版。キーを極限まで減らしたコンパクト志向でプロユース。こういう製品っていまだにあまり見当たらないのはなぜでしょう…。コンパクトで打鍵感に重きを…という時点で選択肢がほとんどなくなってしまいます。まぁそもそも、キーボードに金をかけようという層が少ないのかも知れませんが…。&lt;/p&gt;&#10;&lt;h2 id="やりたいこと"&gt;やりたいこと&#10;&lt;/h2&gt;&lt;p&gt;HHKBをWindows 8 Proで快適に使うための備忘録を兼ねたメモです。条件は以下。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;◇キーを自由に使いたい&lt;/li&gt;&#10;&lt;li&gt;Emacsキーバインドを利用したい&lt;/li&gt;&#10;&lt;li&gt;でも普通のショートカットキーも使いたい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Emacsキーバインドと、普通のショートカットキーをどうするかが問題です。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;具体的な手順。&lt;/p&gt;&#10;&lt;h3 id="キーを使えるようにする"&gt;◇キーを使えるようにする&#10;&lt;/h3&gt;&lt;p&gt;まず&lt;strong&gt;スペースの両隣にある◇キーを使えるようにします&lt;/strong&gt;。具体的には、◇キーに変換、無変換キーを割り当てます。これはキーボードのドライバとして101配列ではなく別のものを使う必要があります。&lt;strong&gt;Windowsではキーボードレイアウトの変更にはレジストリの書き換えをしなければならない&lt;/strong&gt;のが面倒なところです。一応公式でもちゃんと説明されています（「&lt;a class="link" href="http://www.pfu.fujitsu.com/hhkeyboard/hhkb_support/faq_pro.html" target="_blank" rel="noopener"&#10; &gt;Happy Hacking Keyboard | Happy Hacking Keyboard Professional/ Professional2 | PFU&lt;/a&gt;」）。推奨としてよくわからんシェアウェアをインストールしろとか言われますが、&lt;strong&gt;普通にレジストリエディタ使ってレジストリ書き換えるのがよい&lt;/strong&gt;でしょう。&lt;/p&gt;&#10;&lt;p&gt;検索でregeditとしてレジストリエディタを立ち上げ、¥HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥i8042prt¥Paremetersにアクセス。んでLayerDriver JPNを、kbdlk41a.dllにします。そして再起動。以上完了。&lt;/p&gt;&#10;&lt;p&gt;これで◇キーを変換、無変換キーとして使えるようになります。&lt;/p&gt;&#10;&lt;h3 id="xkeymacsのインストールとキーコンフリクトの対処"&gt;XKeymacsのインストールとキーコンフリクトの対処&#10;&lt;/h3&gt;&lt;p&gt;このへんは好き好きですが、XKeymacsをインストールします。&lt;a class="link" href="http://xkeymacs.sourceforge.jp/" target="_blank" rel="noopener"&#10; &gt;XKeymacs&lt;/a&gt; &lt;strong&gt;XKeymacsは、問答無用でキーバインドをEmacs準拠にしてしまうもの&lt;/strong&gt;です。そんなわけなので、使うと&lt;strong&gt;既存のショートカットキーとコンフリクトしまくり&lt;/strong&gt;です。一応各アプリごとに挙動を変更することはできますが…。その対処がポイントです（参考：「&lt;a class="link" href="http://d.hatena.ne.jp/chiheisen/20100605/1275752452" target="_blank" rel="noopener"&#10; &gt;XKeymacsでWindowsキーバインドとEmacsキーバインドを併用する方法 - 地平線に行く&lt;/a&gt;」…ナイスアイディアですこれ。現状最適解じゃないでしょうか）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;右CtrlキーをXKeymacsの対象から外します&lt;/strong&gt;。これにより、左Ctrlキーを使うとEmacsキーバインド、右Ctrlキーを使うと既存のショートカットキー、という風に使い分けができます。素晴らしい。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;HHKBに右Ctrlキーはない&lt;/strong&gt;やろという当然のツッコミがありますが、これも対処します。プロパティ画面を開き、「詳細」タブからカテゴリで「その他」を選び、コマンドのC-を選択。現在のキーからRight Ctrlを削除します。これでOK。&lt;/p&gt;&#10;&lt;p&gt;そのほかの選択肢として、Auto Hot Keyなどのソフトが有力な選択肢でしょうが、Auto Hot Keyは私には複雑過ぎます…もう見るからに面倒臭いです。Xkeymacsの細かい設定のいらない力技一発な感じが、非常に好印象でXKeymacsを使用することにしました。まぁその分、キーコンフリクトが激しく対応策が求められるわけですが…。&lt;/p&gt;&#10;&lt;h3 id="右ctrlキーを左キーに割り当てる"&gt;右Ctrlキーを左◇キーに割り当てる&#10;&lt;/h3&gt;&lt;p&gt;前述したとおり、&lt;strong&gt;右CtrlキーはHHKBにはありません&lt;/strong&gt;ので、&lt;strong&gt;なんらかのキーに割り当てる必要があります&lt;/strong&gt;。ここで、私は&lt;strong&gt;左◇キーに割り当てました&lt;/strong&gt;。右◇キーにはWindowsキーを割り当てました。それぞれ変換、無変換ということになっているので、割り当て変更もできるのです。余談ですが、&lt;strong&gt;Windows 8ではWindowsキーを割り当てると何かと便利&lt;/strong&gt;です。例のスタートボタン廃止という謎仕様のせいですね。Classic Shellなどのソフトウェアを導入しているならその限りではないですが…まぁでも、Windows使うならWindowsキーは使えれば便利だろうと思います。&lt;/p&gt;&#10;&lt;p&gt;ついでに右Altとか使わないなと思い、これにも右Ctrlキーを割り当てました。まぁこのへんは好き好きでいいと思いますが、左◇キーに右Ctrlキーを割り当てると、Macのコマンドキーっぽくなって良い感じではないでしょうか。&lt;/p&gt;&#10;&lt;p&gt;ところでキーの割り当て変更ですが、レジストリいじいじできる人はよいですけど、できない人はフリーソフトを使うとよいでしょう。いろいろあると思いますが、&lt;strong&gt;変換、無変換キーの割り当てを変更するのでJIS配列に対応している必要&lt;/strong&gt;があります。私はChange Keyというソフトを使っています。シンプルでわかりやすくてよいです（「&lt;a class="link" href="https://forest.watch.impress.co.jp/library/software/changekey/" target="_blank" rel="noopener"&#10; &gt;「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜ライブラリ&lt;/a&gt;」）。Windows 8 Proでも動きました。&lt;strong&gt;Windows Vista以降のOSで動かすときは、「管理者として実行」する必要&lt;/strong&gt;があります。&lt;/p&gt;&#10;&lt;h3 id="ctrl--スペースに-imeのonoffを割り当てる"&gt;Ctrl + スペースに IMEのON/OFFを割り当てる&#10;&lt;/h3&gt;&lt;p&gt;US配列のキーボードだとIMEのON/OFFはAlt + `という嫌がらせのようなコマンドですので、もう少しやりやすいようにします。設定方法はIMEによって異なりますので、適宜お調べください(手抜き)。私の場合は&lt;strong&gt;Ctrl + スペース&lt;/strong&gt;に割り当てました。右Ctrlキーを左◇キーに割り当てているので、こうすると&lt;strong&gt;Macと同じような感覚でIMEのON/OFFができる&lt;/strong&gt;ようになります。&lt;/p&gt;&#10;&lt;p&gt;ところで私はIMEとしてATOKを使っているのですが、なぜか変換、無変換キーをIMEのON/OFFに割り当てることができなかったのですけれど、いったいぜんたいなぜなんでしょう…？まぁもういいですけど…。&lt;/p&gt;&#10;&lt;h2 id="おわり"&gt;おわり&#10;&lt;/h2&gt;&lt;p&gt;まぁだいたいこんなところで完了です。HHKBを使うような人なら皆さんいろいろ拘りがあったりするのでしょうが、私はEmacsキーバインドが使いたい！普通のショートカットキーも使いたい！ということ以外には特に欲求もありませんので、これくらいで済みました。まぁ備忘録ですが、私のような人は他にもいるだろうと思い記事にしてみました。&lt;/p&gt;</description></item><item><title>トランジスタは半永久的？</title><link>https://hack-le.com/21275927-2/</link><pubDate>Sat, 15 Dec 2012 23:05:26 +0900</pubDate><guid>https://hack-le.com/21275927-2/</guid><description>&lt;p&gt;勉強のためトランジスタの簡単な本を読んでいたところ、次の一文が気になりました。曰く、「&lt;strong&gt;トランジスタは半永久的&lt;/strong&gt;」え？と思いました。&lt;/p&gt;&#10;&lt;p&gt;私が見ている機器でもっともよく壊れる部品の一つがとトランジスタです。特に大電力のパワートランジスタがひどい。おまけに製造中止になっていて代替品を探して〜なんて苦労もあったりするわけですが、とにかく&lt;strong&gt;私の正直な印象では「トランジスタ＝超壊れる」&lt;/strong&gt; なんですよ。でも本にはそう書いてある。&lt;/p&gt;&#10;&lt;h2 id="トランジスタはクール"&gt;トランジスタはクール？&#10;&lt;/h2&gt;&lt;p&gt;さらに、その本には「&lt;strong&gt;トランジスタはクール&lt;/strong&gt;」という言い方もされていました。さらに「え、え」という感じです。&lt;strong&gt;トランジスタといえば熱暴走代表選手では？&lt;/strong&gt; その癖熱に弱くてハンダ付けも一苦労という、そんな代物。&lt;/p&gt;&#10;&lt;p&gt;疑問に思って職場のばりばりアナログな還暦迎えたおっちゃんに聞いてみたところ、「&lt;strong&gt;間違えたことは書いてない&lt;/strong&gt;」とのこと。えーでもトランジスタむっちゃ壊れますやん、むっちゃ熱いですやんと疑問を投げかけると、白熱電球の話をされました。&lt;/p&gt;&#10;&lt;p&gt;白熱電球は電球の中にフィラメントがついていて、それが切れるまで電球の寿命。いくらハード音痴の自分でもそれくらいのことは知っています。で、その次に真空管の話。真空管も内部にフィラメントやらそんなのがある。つまり、物理的に必ず寿命がくる。いっぽう、トランジスタにはそれがないんだ、とのこと。&lt;/p&gt;&#10;&lt;h2 id="半永久的のニュアンス"&gt;「半永久的」のニュアンス&#10;&lt;/h2&gt;&lt;p&gt;もちろん実際に運用していれば、トランジスタだって壊れます。ただそれは真空管と違って、必然的な部品の劣化からくる寿命とかそんなのとは違う、と。それで「半」永久的と言うんですね。つまり、&lt;strong&gt;トランジスタは半永久的という言い方には、真空管時代からの歴史的なニュアンスが含まれている、ということなのかな&lt;/strong&gt;、と。&lt;strong&gt;トランジスタはクールという言い方も同様で、あくまで真空管と比べて、という意味合いかなと思います&lt;/strong&gt;。そういや本でも、真空管と対比して説明されていることが多かったなぁ…。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4416100094" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&#13;&#10;&lt;p&gt;今まで読んだ本の中で、トランジスタ増幅の原理の定性的な説明などが一番わかりやすかったように思います。&lt;/p&gt;</description></item><item><title>Mac mini 2012購入記</title><link>https://hack-le.com/21247915-2/</link><pubDate>Fri, 14 Dec 2012 23:12:13 +0900</pubDate><guid>https://hack-le.com/21247915-2/</guid><description>&lt;p&gt;2016/11/12：追記　あまりの使いやすさに、購入してから半年ほどしてメインに格上げされました。購入してもう4年ほどですが、いまだに使えています。素晴らしいマシンでした。結果的には、2012年で一番良い買い物だったと思います。&lt;/p&gt;&#10;&lt;h2 id="mac-mini買っちゃった"&gt;Mac mini買っちゃった&#10;&lt;/h2&gt;&lt;p&gt;Mac mini 2012を三週間前くらいに購入しました。中位モデルのCore i7 2.3GHzのやつです。送料代引き込みで6万円ほどでした。定価68,800円ですから、まぁまぁといったところです。前にも書いたとおり、だいたい1万くらい安くなったら買おうと思っていたので、ちょうど頃合いです。今ならカカクコムの最安で送料・手数料込みで58,000円ちょいくらいのようです(2012/12/13現在)。&lt;/p&gt;&#10;&lt;p&gt;ただ衝動買いに近かったのも事実。実はあれからいろいろ考えて、Mac miniは買わないことにしようと思っていたのです。が、いざ安くなっていくのを見るとどうにも欲求が抑えられず…。ついポチってしまいました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;メインではなく、サブとして使っていくことを前提として&lt;/strong&gt;、感触をつらつらと書いていきます。&lt;/p&gt;&#10;&lt;h2 id="増設用メモリ"&gt;増設用メモリ&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;増設用のメモリも購入&lt;/strong&gt;しました。「&lt;a class="link" href="http://www.sofmap.com/product_detail/exec/_/sku=11967389/-/gid=PS08060000/-/scmp=kkc/-/eVar3=LSSPR" target="_blank" rel="noopener"&#10; &gt;メモリー SP016GBSTU160N22 (DDR3 SO-DIMM 8GBx2)｜PCパーツのソフマップ[sofmap]&lt;/a&gt;」ですが、動作実績もあるようですので安心です。Amazonでは届くのが1-3週間後とか言われていたので…。っていうかメモリめちゃくちゃ安くなってるんですね…。&lt;strong&gt;16GBで5,000円&lt;/strong&gt;だなんて、考えられませんでしたよ。SSDやHDを増設ないし換装しようとするといろいろ手間がかかるようですが、メモリの交換はなんの問題もなく簡単にできました。ドライバーすらいりませんでしたよ…。&lt;/p&gt;&#10;&lt;h2 id="コンパクト"&gt;コンパクト&#10;&lt;/h2&gt;&lt;p&gt;Mac miniはデスクトップPCです。デスクトップPCとはいえちょっとした弁当箱くらいの大きさですので、まったく場所を取りません。私の場合自作Win機の上に置いています。下のマシンもいっそのことなかったらだいぶスッキリするのかもしれませんが…Windowsが必要というだけならMac miniに仮想で入れてもよかったんですけど…。まぁ開発環境やらなんやらあれこれ入れるならまぁ仮想よりも実機のほうがいいかなとか…。うん…というか、パーツ余ってたからつい作っちゃったんですよね…はい…で、あるからには使わないとっていうね…。…あ、そうだ。Appleとは一切関係ないと書きましたが、よくよく考えてみるとこの自作機、補助記憶装置としてMBAのフラッシュメモリを再利用しています。&lt;/p&gt;&#10;&lt;h2 id="熱はこもる"&gt;熱はこもる&#10;&lt;/h2&gt;&lt;p&gt;やはり最初の設定をするときは、いろんなソフトウェアを導入するのでCPUもハードディスクもガリガリ動きます。するとぐんぐん温度があがり、&lt;strong&gt;CPUが85度まで上がるのを確認&lt;/strong&gt;しました。触ってみると超扱ったです。その後もちょっとCPUが稼働しだすとけっこう熱をもちはじめ、&lt;strong&gt;60度70度は少し重たい処理をすると珍しくない感じ&lt;/strong&gt;。この構造だから排熱機構にはあまり期待してはいなかったけれど、初冬でこうだと夏場はどうなるんだろう？とちょっと不安。&lt;strong&gt;ある程度落ち着いてからは、だいたい40-50度くらいで安定&lt;/strong&gt;してますが…ちょっと高いような…まぁ、&lt;strong&gt;60度超えで安定しているメインのMBAよりはマシ&lt;/strong&gt;ですが。&lt;/p&gt;&#10;&lt;h2 id="デュアルディスプレイ"&gt;デュアルディスプレイ&#10;&lt;/h2&gt;&lt;p&gt;デュアルディスプレイにしました。HDMIポート、Thunderbolt用のポートからそれぞれ。Thunderboltといっても、ケーブルはMini Display port←→HDMI用のケーブルですが…。元々MacbookAirをディスプレイに繋げるためのケーブルでしたが、こんなところで役に立つとは。まぁボチボチ動いてくれています。三画面化しようと思ったら、USB-RGB3/Dあたりの製品を使うのがもっとも手っ取り早そうです。いまのところその予定はありませんが。しかし、図1を見ればわかるとおり見た目はちょいと不格好です。。。次にディスプレイの映りについて。&lt;/p&gt;&#10;&lt;h3 id="三菱電機-rdt-233wx-z"&gt;三菱電機 RDT-233WX-Z&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="http://www.mitsubishielectric.co.jp/home/display/product/multi/rdt233wx_z/" target="_blank" rel="noopener"&#10; &gt;三菱電機 三菱ディスプレイ：ワイド液晶ディスプレイ RDT233WX-Z(BK)&lt;/a&gt;、定番の三菱Diamond Crystaシリーズ。倍速補間のついているモデルです。初期設定だとちょっとまぶし！という感じ。ちょっと発色が良すぎるような…調整すればまぁまぁですが、Win 8機でのほうが映りがよい気がする。実はこのディスプレイ自体最近買ったものなのですが(型落ちになったので価格が26,000円とまぁまぁで手に入った)、同じくらいの値段のナナオにすればよかったかなーとちょっと思ったり。&lt;a class="link" href="http://www.eizo.co.jp/products/em/fs2333/" target="_blank" rel="noopener"&#10; &gt;FORIS FS2333 | EIZO 株式会社ナナオ&lt;/a&gt; こっちのほうがMac使用者には評判がよいようです。でも倍速補間の魅力に負けて三菱にしました。なんにしても、&lt;strong&gt;要調整&lt;/strong&gt;です。正直まだ調整しきれてないです…できんのかこれ。&lt;/p&gt;&#10;&lt;p&gt;ちなみに&lt;strong&gt;倍速補間ですが、正直違いわかんねぇ&lt;/strong&gt;。同じ商品持ってる友人もまったくわからんと言っていました。ゲームなら恩恵受けられるのか…？しかし昔実験したことがあるのですが、LEDをチカチカさせたとき、だいたい&lt;strong&gt;1秒あたり20チカチカくらいからずっと点灯してるように見えた&lt;/strong&gt;んですよね…。動画をつくるとき30fpsが一つの基準だったりするらしいのはこのへんが元になってると思うんですが、60Hzを120Hzにするのって、なんか意味あるのかしら…。正直&lt;strong&gt;三菱買うなら倍速補間のないRDT-234WXでいいんじゃないかしらと思います&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="io-data-lcd23"&gt;IO-DATA LCD23&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="http://www.iodata.jp/product/lcd/wide/lcd-mf234xnr/" target="_blank" rel="noopener"&#10; &gt;LCD-MF234XNR | ワイド液晶 | IODATA アイ・オー・データ機器&lt;/a&gt; これはそもそもあまりよろしくないディスプレイです。7月くらいに、1万ちょっとで買いました。たしかに安い。今でも時々安売りしてますが、&lt;strong&gt;典型的な安かろう悪かろうディスプレイ&lt;/strong&gt;なので、買うときは用途をよく考えないといけないでしょう。グラフィックスにも重きを置くなら安物買いの銭失いに…って、そんな人は言われなくてもちゃんとしたディスプレイを買うでしょうが…。というか、そもそもグラボのないMac miniは買わないか…。&lt;/p&gt;&#10;&lt;p&gt;とにかく、&lt;strong&gt;どんなに調整しても調整しきれません&lt;/strong&gt;。Windowsでも同様なのでMacだからというわけでもないのですが設定できるところがより少なく、またIO-DATAのページにMac用ドライバもないので、そもそもMacで使われること自体想定されてなさげ。&lt;strong&gt;オススメできない&lt;/strong&gt;…。&lt;/p&gt;&#10;&lt;p&gt;もちろんまったく使えないほど酷いというわけでもなく。&lt;strong&gt;サブディスプレイとして使うとか、書類やプログラミングで使うだけならまぁ問題ないレベル&lt;/strong&gt;です。また、&lt;strong&gt;入力系統としてHDMIが2本分&lt;/strong&gt;あります。最安価帯では珍しいんじゃないでしょうか。&lt;/p&gt;&#10;&lt;h2 id="動作は普通"&gt;動作は普通&#10;&lt;/h2&gt;&lt;p&gt;CPUがCore i7とはいえ、補助記憶装置はハードディスクですし、動作速度はまぁ普通です。もちろんかなり前のマシンから買い換えた、という場合は別でしょうが、そこそこのスペックのマシンを他にもっている場合、あまり感動はないかと思います。特にSSD搭載マシンをもっていたりすると…。逆に言えば、SSDに換装すればけっこう劇的な改善が見られるのではないかと思います。しかしSSDはまだまだお高いので我慢我慢です。もしMac miniをメインに据える場合は、多少無理しても購入する価値はあると思います。SSDは本当に快適です。処理自体はCPUパワーがなかなかのものですので、サクサクっとやってくれます。マシンパワー自体を気にする必要はあまりないんじゃないでしょうか。&lt;/p&gt;&#10;&lt;h2 id="総評"&gt;総評&#10;&lt;/h2&gt;&lt;p&gt;予想通りといえば予想通りのもので、特に驚きもなく。用途や目的がハッキリしてる人にとっては、まぁ良い買い物だと思います。が、&lt;strong&gt;なんとなくMacデスクトップを使いたい人ならiMacをオススメしたい&lt;/strong&gt;。iMacのほうがパワフルだし、ディスプレイで悩む必要もないし、周辺機器もついてくるし…Macを堪能できます。なにより、今回のアップデートがiMacを買えといわんばかりの構成でしたし…iMacに比べるとMac miniの微妙さが際立つ。ただでさえ中途半端に思われがちな位置づけなのに、さらに中途半端な存在に。サーバーとかDTMか開発用途とか、そういう目的の人ならMac mini、いいんじゃないでしょうかねー。私の場合はそれでした。人にお勧めできるかと言うと、万人にはオススメできません。 &lt;strong&gt;○○のために欲しい、とハッキリ言える人にだけオススメ&lt;/strong&gt;。あやふやーな人はiMacか、もしくはMacノート買ったほうがきっと幸せ。&lt;/p&gt;</description></item><item><title>SSHで鍵認証を用いて、パスワードなしでログインする方法</title><link>https://hack-le.com/20462465-2/</link><pubDate>Fri, 23 Nov 2012 21:57:51 +0900</pubDate><guid>https://hack-le.com/20462465-2/</guid><description>&lt;p&gt;「&lt;a class="link" href="//hack-le.com/19513021-2/" &gt;小型のメディアサーバー兼NASをたてる その3 〜初期設定、SSH編〜 : 或る阿呆の記&lt;/a&gt;」でSSHの公開鍵認証について触れていますが、他記事を紹介するだけの投げやりっぷりだったので、それもどうかと思い自分なりの解説記事も書くことにしました。&lt;/p&gt;&#10;&lt;p&gt;前提として、Debian/Ubuntu系です。&lt;/p&gt;&#10;&lt;h2 id="やること"&gt;やること&#10;&lt;/h2&gt;&lt;p&gt;sshやscpで、パスワードを打たずにログインします。sshでの鍵の作り方。設定の仕方を学びます。普段リモートでよくログインするならば、鍵認証のほうが楽です。特にシェルスクリプトなんかでログインする必要がある場合、鍵認証じゃないと自動化できずありがたみ激減です。&lt;/p&gt;&#10;&lt;p&gt;注意として、鍵認証が制限されている場合は使えません。デフォルトではだいじょうぶですが、サーバーによっては禁止されていることもあります。&lt;/p&gt;&#10;&lt;h2 id="知識"&gt;知識&#10;&lt;/h2&gt;&lt;p&gt;何をしようとしているか、ざっくり把握するための知識。何事も、知識があるのとないのとでは、身につき方が違います。&lt;/p&gt;&#10;&lt;h3 id="ssh"&gt;ssh&#10;&lt;/h3&gt;&lt;p&gt;Secure SHell。安全にリモートのコンピュータと通信するためのプロトコル。暗号化などを行います。LinuxではOpenSSHなどのソフトウェアがデフォルトで入ってるので、すぐに使えることが多いですが、入ってなかったらインストールが必要です。サーバは以下でインストールできます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install openssh-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;コマンドはそのままssh。scpは、ssh通信を利用してリモートのコンピュータとデータをやりとりするコマンドです。&lt;/p&gt;&#10;&lt;h3 id="鍵認証"&gt;鍵認証&#10;&lt;/h3&gt;&lt;p&gt;一般的な認証にパスワード認証があります。パスワードを打ち込んで、それが設定したパスと一致すればログインOKなあれです。&lt;/p&gt;&#10;&lt;p&gt;鍵認証はパスワードを打つのではなく、鍵と呼ばれる暗号化のためのランダムな文字列を使います。鍵は公開鍵と秘密鍵のペアで、公開鍵で暗号化したものは秘密鍵でしか復号できないし、逆もまた然り。&lt;/p&gt;&#10;&lt;p&gt;つまり、相手から公開鍵で暗号化したデータを送ってもらえば、それを復号できるのは秘密鍵をもってる自分だけということです。パスワードを使わないことはセキュリティの向上に繋がりますし(ブルートフォースアタックを防げる)、単純に便利だということもあります。&lt;/p&gt;&#10;&lt;p&gt;もちろん、 秘密鍵が漏れてはなんにもなりません。というかヤバイです。最近FreeBSD関係でそんなニュースがありました(&lt;a class="link" href="http://www.itmedia.co.jp/enterprise/articles/1211/20/news028.html" target="_blank" rel="noopener"&#10; &gt;FreeBSDで不正侵入、サードパーティーパッケージに影響も - ITmedia エンタープライズ&lt;/a&gt;)。&lt;/p&gt;&#10;&lt;p&gt;鍵とは別にパスは設定できます。&lt;/p&gt;&#10;&lt;h3 id="rsa"&gt;RSA&#10;&lt;/h3&gt;&lt;p&gt;暗号化の方式。開発した三人のイニシャルが使われています。バージョン1とバージョン2があり、暗号化の主流です。OpenSSHだとDSAなる方式でも暗号化できますが、RSAでの暗号化を推奨されています。&lt;/p&gt;&#10;&lt;h2 id="方法"&gt;方法&#10;&lt;/h2&gt;&lt;p&gt;手順は以下。&lt;/p&gt;&#10;&lt;h3 id="手順"&gt;手順&#10;&lt;/h3&gt;&lt;p&gt;おおまかな手順は以下です。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;クライアント側で鍵の作成&lt;/li&gt;&#10;&lt;li&gt;公開鍵をログインしたいサーバーにコピー&lt;/li&gt;&#10;&lt;li&gt;サーバー側で公開鍵を認証リストに加える&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="実装"&gt;実装&#10;&lt;/h3&gt;&lt;h4 id="クライアント側で鍵の作成"&gt;クライアント側で鍵の作成&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen -t ed25519 -f ~/.ssh/id_rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;オプションの-tの意味は、暗号化の方式の指定です。昔はRSAが標準でしたが、現在はed25519を使うのが良いとされています。互換性を重視する場合は&lt;code&gt;-t rsa&lt;/code&gt;とします。&lt;code&gt;-f&lt;/code&gt;以降は後述する鍵の名前になりますが、指定しているのはrsa方式のデフォルトと合わせるためです。&lt;/p&gt;&#10;&lt;p&gt;なんだかいろいろ聞かれますけど、全部エンターキーで進めばOKです。パスフレーズを決めないことで、鍵のみでログインすることができるようになります。セキュリティが心配ならもちろん設定してもOK。&lt;/p&gt;&#10;&lt;p&gt;ここで決めたパスは秘密鍵に登録されます。秘密鍵はクライアント側で保持するので、サーバーにパスを知られる心配がありません。パスフレーズは、秘密鍵が漏れた時の最後の砦になりますが、漏れている時点でもう色々とアウトな気がするので、利便性と天秤にかけて、私は設定していません。&lt;/p&gt;&#10;&lt;p&gt;鍵は&lt;code&gt;~/.ssh/&lt;/code&gt;に、&lt;code&gt;id_rsa&lt;/code&gt;と&lt;code&gt;id_rsa.pub&lt;/code&gt;が作成されます。&lt;code&gt;id_rsa&lt;/code&gt;が秘密鍵で、&lt;code&gt;id_rsa.pub&lt;/code&gt;が公開鍵です。秘密鍵のアクセス権は600になっている必要があるので、&lt;code&gt;ls -l&lt;/code&gt;などで確認してください。また、.sshディレクトリのアクセス権は700でなくてはいけません。なっていない場合は以下。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod &lt;span class="m"&gt;600&lt;/span&gt; ~/.ssh/id_rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod &lt;span class="m"&gt;700&lt;/span&gt; ~/.ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="公開鍵をログインしたいサーバにコピー"&gt;公開鍵をログインしたいサーバにコピー&#10;&lt;/h4&gt;&lt;p&gt;scpでコピーするのですが、サーバ側に~/.sshディレクトリがあるかどうかをまず確認。なければ、クライアント側と同じようにサーバ側でもssh-keygenコマンドで鍵を生成したりなどして、.sshディレクトリを作成しておきます。別にmkdirで作ってもよいですが…。.sshディレクトリのパーミッションは700です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp id_rsa.pub user@host:.ssh/id_rsa_client.pub&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここではコピー先の名前をid_rsa_client.pubとしましたが、別になんでもよいです。わかりやすい名前のほうが混乱しなくてよいというだけで。&lt;/p&gt;&#10;&lt;h4 id="サーバ側で公開鍵を認証リストに加える"&gt;サーバ側で公開鍵を認証リストに加える&#10;&lt;/h4&gt;&lt;p&gt;デフォルトだと、認証リストはauthorized_keysファイルです。.sshディレクトリになければ作成します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat id_rsa_client.pub &amp;gt;&amp;gt; authorized_keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;リダイレクトは&amp;gt;ではなく&amp;gt;&amp;gt;。&amp;gt;は追記ではなく上書きなので、それまでの記録が消えます。また、authorized_keysはパーミッションが644である必要があります。&lt;/p&gt;&#10;&lt;h3 id="systemd"&gt;systemd&#10;&lt;/h3&gt;&lt;p&gt;サーバの起動設定。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl status ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ファイアウォール"&gt;ファイアウォール&#10;&lt;/h3&gt;&lt;p&gt;22番を使うので開けます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw allow ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw &lt;span class="nb"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="いけたかな"&gt;いけたかな？&#10;&lt;/h3&gt;&lt;p&gt;以上で、パスなしでログインできるようになります。できないときはパーミッションの設定などがミスっている可能性大です。~/.ssh、id_rsa、authorized_keysあたりをよく見直すべし。また、もしいじっていればですが、ホームディレクトリのパーミッションも、他ユーザーからの書き込みを許可していると弾かれます（777とか…参考「&lt;a class="link" href="http://takuya-1st.hatenablog.jp/entry/20090216/1234742055" target="_blank" rel="noopener"&#10; &gt;SSHが鍵認証されないとき、パーミッションを疑え。 - それマグで！&lt;/a&gt;」）。&lt;/p&gt;&#10;&lt;p&gt;もし秘密の鍵のパスを指定したい場合、下記のようにします。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh -i ~/.ssh/id_rsa user@host&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;まぁ、デフォルトのパスで普通に使っている限りは必要ないはずです。&lt;/p&gt;&#10;&lt;h2 id="そのほか"&gt;そのほか&#10;&lt;/h2&gt;&lt;p&gt;sshの設定ファイルは/etc/ssh/sshd_configにあります。内容は参考にあるリンク参照。authorized_keysの場所なども決められます。sshの設定はセキュリティ的に大事なので、余裕がでてきたらいろいろ調べるとよいです。特に外部公開するときには…。 設定ファイルを変更したら、sshdデーモンを再起動します。再起動のコマンドは&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo service ssh restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;authorized_keysに公開鍵を書きこんでくれるコマンドもあるにはあるがかえって手間っぽい。専用コマンドを使えば打ち間違いのリスク（追記と上書きの間違いとか…）はなさそうですが、私はいつもcatでやってます。&lt;/p&gt;&#10;&lt;h2 id="おわりに"&gt;おわりに&#10;&lt;/h2&gt;&lt;p&gt;なお、本記事で紹介したパスフレーズなしの鍵認証は、セキュリティ的には推奨されるものではありません。スクリプト内でパスを入れるには、expectコマンドを使う手があります。スクリプト内にパスを書くのはもちろんNGなので、環境変数に入れておくなどの工夫がいるでしょう。&lt;/p&gt;&#10;&lt;p&gt;私は面倒なのでパスなしで運用しています。秘密鍵が漏れた時点でもう終わりかなぁと…。セキュリティと利便性はトレードオフですから、自身の用途、必要なセキュリティのバランスを加味したうえで、参考になればと思います。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="http://www-net.nifs.ac.jp/lnas/manual/man-sshrsa.html" target="_blank" rel="noopener"&#10; &gt;ssh公開鍵認証手続き&lt;/a&gt;…実装はほとんどここ参考しました…が…もう見えない…&lt;br&gt;&#10;&lt;a class="link" href="http://jitaku-server.net/ssh_crypto.html/" target="_blank" rel="noopener"&#10; &gt;公開鍵暗号でSSHのセキュリティを高める&lt;/a&gt;…概念的な話したが…もう消えてますね。&lt;br&gt;&#10;&lt;a class="link" href="http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/sshd_config.html" target="_blank" rel="noopener"&#10; &gt;SSH サーバの設定&lt;/a&gt;…SSHの設定ファイルについてです。&lt;/p&gt;</description></item></channel></rss>