tag:blogger.com,1999:blog-68471991414140122752024-03-13T12:18:31.896+09:00WM×LIWindows Mobile,Linux,Android,楽天Kobo・・・etcみらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.comBlogger301125tag:blogger.com,1999:blog-6847199141414012275.post-2817984651405952652022-01-15T23:32:00.001+09:002022-01-15T23:32:05.568+09:00Subversion にコミット済みのファイルの実行権限を変更するSubversion
からファイルをチェックアウトすると,その一部に実行権限が付与されている場合がある.
<br />
<br />
しかし,chmod
コマンドでそのファイルから実行権限を削除してからコミットしても,リポジトリ上ではそのファイルから実行権限は削除されない.(そもそもパーミッションを変更しただけでは,svn
的にはファイルを変更したと認識されないため,コミットすることができない)
<br />
<br />
Subversion にコミットされているファイルの実行権限は svn:executable
というプロパティで管理されているため,chmod ではなく svn propdel コマンドや svn
setprop コマンドを使用して変更する必要がある.
<br />
<br />
以下に実行権限の有無の確認方法と追加・削除の方法をそれぞれ示す.
<br />
<a name='more'></a>
<br />
ファイルの実行権限の有無の確認.(svn:executable
が表示される場合は,実行権限あり)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ svn proplist hogehoge
'hogehoge' の属性:
svn:executable
</pre>
<br />
ファイルに実行権限を追加する場合
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ svn setprop svn:executable ON hogehoge
</pre>
<br />
ファイルから実行権限を削除する場合
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ svn propdel hogehoge
</pre>
<br />
<br />
svn setprop または svn propdel
コマンドで実行権限を変更した場合,そのファイルは修正されたとみなされるためコミット可能な状態になる.
<br />
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ svn status hogehoge
M hogehoge
</pre>
<br />
<br />
ちなみに,Subversion に新規追加するファイルに関しては,svn add
コマンドを実行した時点で対象のファイルに実行権限があるときは,svn:executable
が属性に追加された状態でコミットされる.
<br />
<br />
また,読み取り権限,書き込み権限に関しては,ファイルをチェックアウト or
エクスポートする環境のumask値にしたがうため,Subversion上では管理されていない.
みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-23788339683241973652021-11-23T00:46:00.002+09:002021-11-23T00:46:49.841+09:00オフライン環境でDockerを使う.コンテナイメージをエクスポート・インポートする方法今更だが最近,Dockerを使い始めた.
<br />
便利という話は聞いていたが,予想以上の代物でもっと早く使えば良かったと思う今日この頃.
<br />
<br />
しかし,世の中にはネットに繋がっていない(繋げられない)残念な開発環境も少なくない.
<br />
そんな環境でもDockerを使うため,コンテナのイメージをエクスポート/インポートする方法を調べた.
<br />
<br />
我が家のDebianでイメージを作成し,それをRedHat に取り込んで問題なく動いたので,
<br />
大抵のディストリビューションで可能な方法だと思う.
<br />
<a name='more'></a>
<br />
まずは,Debian でコンテナイメージを作成する.
<br />
<br />
Docker をインストールしていなければ,apt install
し,自分のユーザをdockerグループに追加する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install docker
$ sudo apt install docker.io
$ sudo usermod -aG docker [Dockerを使うユーザ名]
</pre>
<br />
次にDockerfileを用意する.オフライン環境にインポートするので,必要なパッケージは今のうちにインストールしておく.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cat Dockerfile
FROM centos:centos8
RUN yum update -y
RUN yum groupinstall -y 'Development Tools'
</pre>
<br />
Dockerfile を保存したらイメージをビルドする.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ docker build -t centos:centos8_update .
</pre>
<br />
ビルドしたイメージをエクスポートする.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ docker save centos:centos8_update > CentOS8_Update.tar
</pre>
<br />
エクスポートされたイメージはtar 形式で容量が大きいので圧縮する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ gzip CentOS8_Update.tar
</pre>
<br />
圧縮したファイルをオフライン環境にコピーし,解凍・インポートする.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ gunzip CentOS8_Update.tar.gz
$ docker load < CentOS8_Update.tar
</pre>
<br />
docker images コマンドで無事にインポートできたか確認する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos8_update xxxxxxxxxxxx 13 minutes ago 1.49GB
</pre>
<br />
<br />
ところで,本記事では取っ付きやすさのため,エクスポート/インポートという表現を用いたが,正確にはセーブとロードである.
<br />
<br />
Dockerにはexportとimportというコマンドが別にあり,こっちはイメージではなく,コンテナ自体をエクスポート/インポートするコマンドらしい.(使ったことがないので詳細は割愛)
みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-42826842641420582292021-10-24T14:42:00.000+09:002021-10-24T14:42:14.470+09:00Linux サーバーでOpenVPN を構築するDebianで作成した自作ルーターにOpenVPN を立てたので手順を残す.<br />
<br />
今回参考にさせて頂いたのは以下のページ.非常にわかり易い.投稿者様に感謝.<br />
<a
href="https://qiita.com/noraworld/items/2fe6be489e1d93c748b8#%E5%8F%82%E8%80%83%E3%82%B5%E3%82%A4%E3%83%88"
>OpenVPNのインストールとセットアップからインターネット接続までのガイドブック -
Qiita</a
><br />
<br />
手順としては大きく分けて3段階あり,はじめにEasy-RSAで証明書を生成し,次にサーバー用の設定ファイルを作成してOpenVPN
を起動する.最後にクライアント用の設定ファイルを作成して,クライアントからVPN
接続できれば完了だ.<br />
<br />
まずは,実行環境の確認.Debian
系なら大差ないと思うが,適宜環境に合わせて欲しい.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cat /etc/debian_version
11.1
$ uname -srvmo
Linux 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux
</pre>
<br />
<br />
以降,具体的な手順に移る.
<br />
<a name='more'></a>
<br />
最初に,Easy-RSA をインストールし,証明書作成のためにディレクトリをコピーする.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install easy-rsa
$ cp -r /usr/share/easy-rsa ~/
</pre>
<br />
コピーしたディレクトリに移動し,init-pki サブコマンドを実行する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cd ~/easy-rsa
$ ./easyrsa init-pki
</pre>
<br />
初期設定はここまで.ここから先はこの easyrsa ディレクトリ内から実行する.<br />
以降の手順で失敗した場合は,もう一度 init-pki サブコマンドからやり直す.<br />
<br />
<br />
CA 証明書の生成.CAのパスワードを訊かれるので先に考えておくと良い.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ./easyrsa build-ca
</pre>
<br />
DH 鍵の生成.少し時間がかかるので終わるまで待つ.(30秒〜1分くらい)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ./easyrsa gen-dh
</pre>
<br />
サーバー証明書の生成.パスワードを訊かれるので,先程設定したCA
のパスワードを入力する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ./easyrsa build-server-full server nopass
</pre>
<br />
これで Easy-RSA による証明書の生成は完了.
<br />
<br />
<br />
次にOpenVPN をインストールし,TLS の鍵を生成する./usr/sbin
にパスが通っていない場合は絶対パスでコマンドを指定して実行する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install openvpn
$ /usr/sbin/openvpn --genkey tls-auth ./pki/ta.key
</pre>
<br />
サンプルディレクトリから,サーバーの設定ファイルを pki
ディレクトリにコピーして編集する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf ./pki/
$ vim ./pki/server.conf
----------
;topology subnet ←コメント解除する(行頭のセミコロンを削除)
;push "redirect-gateway def1 bypass-dhcp" ←コメント解除する
;push "dhcp-option DNS 208.67.222.222" ←コメント解除し,DNSのIPを適宜設定する
;user nobody ←コメント解除する
;group nogroup ←コメント解除する
;log /var/log/openvpn/openvpn.log ←コメント解除する
;log-append /var/log/openvpn/openvpn.log ←コメント解除する
</pre>
<br />
作成した設定ファイルと証明書を /etc/openvpn/server/
ディレクトリにコピーする.ただしdh.pem
ファイルのみファイル名を変更しているので注意する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo cp pki/ca.crt /etc/openvpn/server/
$ sudo cp pki/dh.pem /etc/openvpn/server/<font color="red">dh2048.pem</font>
$ sudo cp pki/ta.key /etc/openvpn/server/
$ sudo cp pki/server.cont /etc/openvpn/server/
$ sudo cp pki/issued/server.crt /etc/openvpn/server/
$ sudo cp pki/private/server.key /etc/openvpn/server/
</pre>
<br />
<br />
<br />
OpenVPN を起動する準備が整ったので,現在の状態を確認する.
非常に紛らわしいが,openvpn,openvpn@server,openvpn-server@server
という3種類のサービスが存在する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl status <font color="red">openvpn openvpn@server openvpn-server@server</font>
</pre>
<br />
今回は3番目の openvpn-server@server
用に設定しているので,最初の2種類が起動している場合は,サービスを停止させておく.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl stop openvpn openvpn@server
</pre>
<br />
また,自動起動になっている場合はそれも止めておく.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl is-enabled openvpn openvpn@server
$ sudo systemctl disable openvpn openvpn@server
</pre>
<br />
いよいよ OpenVPN を起動する.(もともと起動していなくてもrestart
サブコマンドで問題ない)
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl restart openvpn-server@server
</pre>
<br />
何もエラーが表示されなければ正常に起動しているはず.念のため,問題なく立ち上がっていることを
status サブコマンドで確認する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl status openvpn-server@server
</pre>
<br />
status
サブコマンド結果にも異常がなければ,自動起動できるように設定しておくと良い.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl enalbe openvpn-server@server
</pre>
<br />
なお,ファイヤーウォールやルーティングテーブルの設定は割愛する.各々の状況に合わせて適宜,設定して欲しい.基本的には UDP で1194番ポートにアクセス可能にしておけば良いだろう.
<br />
<br />
ここから先は,スマホなどVPN 接続したいクライアント用に設定ファイルを作成する.
<br />
<br />
まずは,クライアント用に秘密鍵を生成する.パスワードを訊かれるので,はじめに設定したCA
のパスワードを入力する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ./easyrsa build-client-full client01 nopass
</pre>
<br />
サンプルディレクトリから,クライアントの設定ファイルを pki
ディレクトリにコピーして編集する.
<br />
編集の際,証明書からキーをコピーするなど少し煩雑だが,この手順は必須なので頑張る.
<br />
<br />
なお,ファイルをコピーする際,名前を変更することに注意する.(秘密鍵生成に使用した client01
という名前を使用したが,その部分は任意で構わない.大切なのは拡張子を ovpn
に変更しておくこと.)
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ./pki/<font color="red">client01.ovpn</font>
$ vim ./pki/<font color="red">client01.ovpn</font>
----------
remote my-server-1 1194 ←my-server-1を接続先サーバーに変更する
;user nobody ←コメント解除する(行頭のセミコロンを削除)
;group nogroup ←コメント解除する
ca ca.crt ←コメントアウトする(行頭にセミコロンを追加)
cert client.crt ←コメントアウトする
key client.key ←コメントアウトする
tls-auth ta.key 1 ←コメントアウトする
key-direction 1 ←追記する
<ca> ←この行以降をすべて追記する
-----BEGIN CERTIFICATE-----
〜CA証明書(./pki/ca.crtファイル)内のキーをコピーする〜
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
〜クライアント用秘密鍵(./pki/issued/client01.certファイル)内のキーをコピーする〜
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
〜クライアント用秘密鍵(./pki/private/client01.keyファイル)内のキーをコピーする〜
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
〜TLS鍵(./pki/ta.keyファイル)内のキーをコピーする〜
-----END OpenVPN Static key V1-----
</tls-auth>
</pre>
<br />
ここまで来たらあと一息.作成した ovpn ファイルをスマホなど,VPN
接続したい端末にコピーしてアプリや設定からファイルを読み込んで接続する.
<br />
<br />
スマホから接続する場合は,以下のアプリが使い易く便利だ.私はAndroid版しか試していないがiPhoneでも同様だと思われる.
<br />
<div style="text-align: left;" id="appreach-box">
<img
src="https://play-lh.googleusercontent.com/E9DIOxBPab_nMUfmf2fhzNcEAmjOx-wstIak5zwJpZm7184nd8fUPGBeWMvBMnkOHg=s128"
alt="OpenVPN Connect – Fast & Safe SSL VPN Client"
style="float: left; margin: 10px; width: 25%; max-width: 120px; border-radius: 10%;"
id="appreach-image"
/>
<div class="appreach-info" style="margin: 10px;">
<div id="appreach-appname">
OpenVPN Connect – Fast & Safe SSL VPN Client
</div>
<div id="appreach-developer" style="font-size: 80%; display: inline-block;">
開発元:<span id="appreach-developerurl">OpenVPN Technologies</span>
</div>
<div id="appreach-price" style="font-size: 80%; display: inline-block;">
無料
</div>
<div
class="appreach-powered"
style="font-size: 80%; display: inline-block;"
>
posted with<a
href="https://mama-hack.com/app-reach/"
title="アプリーチ"
target="_blank"
rel="nofollow"
>アプリーチ</a
>
</div>
<div class="appreach-links" style="float: left;">
<div id="appreach-itunes-link" style="display: inline-block;">
<a
id="appreach-itunes"
href="https://apps.apple.com/jp/app/openvpn-connect/id590379981?uo=4"
rel="nofollow"
><img
src="https://nabettu.github.io/appreach/img/itune_ja.svg"
style="height: 40px; width: 135px;"
/></a>
</div>
<div id="appreach-gplay-link" style="display: inline-block;">
<a
id="appreach-gplay"
href="https://play.google.com/store/apps/details?id=net.openvpn.openvpn"
rel="nofollow"
><img
src="https://nabettu.github.io/appreach/img/gplay_ja.png"
style="height: 40px; width: 134.5px;"
/></a>
</div>
</div>
</div>
<div class="appreach-footer" style="margin-bottom: 10px; clear: left;"></div>
</div>
<br />
インストールしたら,プロファイルのインポートからスマホにコピーした ovpn
ファイルを選択する.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfIg_KLgCHA9BRE5vIQ5VHmtgeBsKaRvYwmq1wvjx62a9I5eRqdGq3A5pLWtsdTMRTIEZOOPB_-_5Q2um7Cz20UlANExcsv0VTvw7VlAnk83eUqCUpo8i26de9HeiOgm54A3NCah7oaeSD/s1920/Screenshot_2021-10-24-14-13-34-202_net.openvpn.openvpn.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
height="600"
data-original-height="1920"
data-original-width="1080"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfIg_KLgCHA9BRE5vIQ5VHmtgeBsKaRvYwmq1wvjx62a9I5eRqdGq3A5pLWtsdTMRTIEZOOPB_-_5Q2um7Cz20UlANExcsv0VTvw7VlAnk83eUqCUpo8i26de9HeiOgm54A3NCah7oaeSD/s600/Screenshot_2021-10-24-14-13-34-202_net.openvpn.openvpn.png"
/></a>
</div>
<br />
設定がうまくいっていれば接続できる.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSraRijwQtAKeYZYdmSrj4Y0Uf_8BRh0MIPYgDF1Shf0eib142Un4KE1L9T-oNueYbhDbOdYp62Jy3_ACBETgqO3T-FUCVrK5z5ItJSlz2zAu5ZVGURpnZBs_oitggiPqBb4ZsqeuN7x6p/s1920/Screenshot_2021-10-24-14-13-48-424_net.openvpn.openvpn.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
height="600"
data-original-height="1920"
data-original-width="1080"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSraRijwQtAKeYZYdmSrj4Y0Uf_8BRh0MIPYgDF1Shf0eib142Un4KE1L9T-oNueYbhDbOdYp62Jy3_ACBETgqO3T-FUCVrK5z5ItJSlz2zAu5ZVGURpnZBs_oitggiPqBb4ZsqeuN7x6p/s600/Screenshot_2021-10-24-14-13-48-424_net.openvpn.openvpn.png"
/></a>
</div>
<br />
<br />
在宅勤務の広がりでVPN の認知度が上がっている今こそ,自宅でもVPN を立てて,NO
VPN, NO LIFE を実現しよう.
みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-92060179805567994832021-07-11T20:52:00.003+09:002021-07-11T20:52:56.953+09:00Echo Auto の設置に百円均一のマグネットが最適でしたプライムデーで990円という破格で手に入れたEcho Auto.
<br />
<br />
デバイス自体はとても気に入っていたのですが,標準のマウントは何となくズングリムックリしている.
<br />
しかも,私の愛車のデミオ(DJ系)にはこういった類のデバイスを設置できる箇所がとても少ない.
<br />
<br />
そのため,使い始めてからずっと設置方法を模索していましたが,ひとつの答えをYouTubeで発見しました.
<div style="text-align:center">
<iframe
width="480"
height="270"
src="https://youtube.com/embed/b-5lEREbLb0"
frameborder="0"
></iframe>
</div>
<a name='more'></a>
<br />
できればEcho Auto
に元々付いているマグネットを有効活用したいと考えていたので,動画の方法は私にとってベストアンサー.さっそくセリアに足を運び,目当てのブツを購入.そのままセリアの駐車場で設置してきました.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNDBu7U_uCDo9K_kbPszYI5PhGQ1CxLspBaUyQXx5ue6Y5G2gUEnYrsr33ZEmdElPPAtnMDNcJbm9H7YcxH156lLR1rrLx3gZjlGDFmhH8uy634AYPAgL-nzAa_DtoKZyl3HFRFaEtzaPl/s2048/P7117782.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
height="600"
data-original-height="2048"
data-original-width="1536"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNDBu7U_uCDo9K_kbPszYI5PhGQ1CxLspBaUyQXx5ue6Y5G2gUEnYrsr33ZEmdElPPAtnMDNcJbm9H7YcxH156lLR1rrLx3gZjlGDFmhH8uy634AYPAgL-nzAa_DtoKZyl3HFRFaEtzaPl/s600/P7117782.jpg"
/></a>
</div>
<br />
購入したのが上の商品.シールで車と設置して,スマホとはマグネットで着脱するタイプの車用スマホホルダーです.
<br />
<br />
余談ですが,USBケーブルやスマホスタンドが並んでいる,いわゆるスマホコーナーを10分以上捜索しても見つからず,車用のコーナーに移動したらあっさりと発見しました.この2つのコーナー,せめて近くにして頂けないでしょうか?汗
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSenIfK2-IprjoeQ3KmIxNAqcUvADLwIrgL7NiqNvuBV0Z6U_Hg_A8PNtg2Ban_GmndWKVpyEBw6PNRlM_NYABiXwTMvNLZdNtn49kBeGenIitcDEoRN9v3jF0quS9-utvWplKf1x50jS/s2048/P7117785.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSenIfK2-IprjoeQ3KmIxNAqcUvADLwIrgL7NiqNvuBV0Z6U_Hg_A8PNtg2Ban_GmndWKVpyEBw6PNRlM_NYABiXwTMvNLZdNtn49kBeGenIitcDEoRN9v3jF0quS9-utvWplKf1x50jS/s600/P7117785.jpg"
/></a>
</div>
<br />
購入して気づいたのが,こちらの製品は一般的なマグネットタイプの車載ホルダーに比べて一回り小さいということ.このあたりが100円ショップクオリティなのでしょうが,今回はこれが幸いして,Echo
Autoのマウンターにピッタリハマります.
<br>
<br>
例えば左下に写っている車載ホルダーはEcho Autoのマウンターに対して大きすぎて上手くマウントできませんでした.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2as-VetyPGy3hQ6bVo5Ou-2ZzHxGnwir8YqZ9BqDLdFsgkLjNpTf7hhfTsp6V4uxSwdC6cGhV-G9iPqP8EkhMYGnxwMiZDT2dRjIFaELl-5OXNLl0CzrI4fQuP1zRDZIAcKksv_c7rdEd/s2048/P7117788.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2as-VetyPGy3hQ6bVo5Ou-2ZzHxGnwir8YqZ9BqDLdFsgkLjNpTf7hhfTsp6V4uxSwdC6cGhV-G9iPqP8EkhMYGnxwMiZDT2dRjIFaELl-5OXNLl0CzrI4fQuP1zRDZIAcKksv_c7rdEd/s600/P7117788.jpg"
/></a>
</div>
<br />
写真のようにマツダコネクトの手前に設置しましたが,画面を隠すことも無く,標準搭載か?というほどのしっくり感です.運転中も全くブレること無く,反応時の青色ランプも非常に見やすくなったので,購入して大正解でした.
<br />
<br />
ほとんどのEcho
Autoユーザーに手放しでオススメできる商品だと思いますので,近くにセリアがある方は検討されるとよろしいのでは無いでしょうか?失敗しても100円ですし笑みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-71177777700736612532021-06-16T23:30:00.003+09:002021-06-16T23:30:40.673+09:00Celeron J3455 1.5GHz メモリ8GB SSD 128GB のミニPC ACEPC AK1を購入タイムセールで安くなっていたのでACEPC という中華系メーカーのミニパソコン(AK1
シリーズ)を購入しました.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRyrVaf6bUQXWZqfCxEgNhP1fXJQralp8oOoOL_I3ui0-sAbZzNXCfUsTBLRwTnRjmBZo-HoMiMWPTuB-NNEoE2m4jsxCnSkkltM1r2Q6WpsmjVUfQVQqhm1ceKfH8vfwlmj51hl_pIKR5/s2048/P5247601.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRyrVaf6bUQXWZqfCxEgNhP1fXJQralp8oOoOL_I3ui0-sAbZzNXCfUsTBLRwTnRjmBZo-HoMiMWPTuB-NNEoE2m4jsxCnSkkltM1r2Q6WpsmjVUfQVQqhm1ceKfH8vfwlmj51hl_pIKR5/s600/P5247601.jpg"
/></a>
</div>
<br />
128 x 128 x 52 mm の小型PC.
<br />
<br />
CPU は Intel の Celeron(R) CPU J3455 1.5GHz
<br />
メモリは 8.0GB
<br />
補助記憶は 128GB の SSD
<br />
<br />
台座のようになっている下部に2.5インチのHDD/SSD を装着でき,最大2TB
までストレージを拡張可能です.
<a name='more'></a>
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnESOPksFE6HDjAfNsqsOq5ocPxAypePLPq2gs7BZ8NPlnuti6TwzqUjtlmt5515lKRyQiU6mDwC2rdIXCIo9v0QtWsO41kvhP8Q4Br2TBBthpA8XlP_cMMy7KrMrIsBUQS9dF4Lnf6LAK/s2048/P5247603.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnESOPksFE6HDjAfNsqsOq5ocPxAypePLPq2gs7BZ8NPlnuti6TwzqUjtlmt5515lKRyQiU6mDwC2rdIXCIo9v0QtWsO41kvhP8Q4Br2TBBthpA8XlP_cMMy7KrMrIsBUQS9dF4Lnf6LAK/s600/P5247603.jpg"
/></a>
</div>
<br />
インターフェースは正面から見て,右側面と裏側に搭載されています.
<br />
<br />
右側面に,電源ボタン,microSD のスロット(正確にはTFカードスロット),USB 3.0
ポートx2,USB 2.0 ポートx1.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2_npiLqN_2Rz2ClpNopanpbtoDaAVGkGXJEPROdkClsQiXp_FAeSG05JP5Yu6zQjllUKC2-6TX5TRwSQ99ItzNAFh6ayZqNz-oY2sQxB1ILEZsh-IpajhgyQMeY99iatQZBhf_DyjXZbz/s2048/P5247606.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2_npiLqN_2Rz2ClpNopanpbtoDaAVGkGXJEPROdkClsQiXp_FAeSG05JP5Yu6zQjllUKC2-6TX5TRwSQ99ItzNAFh6ayZqNz-oY2sQxB1ILEZsh-IpajhgyQMeY99iatQZBhf_DyjXZbz/s600/P5247606.jpg"
/></a>
</div>
<br />
裏側に,電源,USB 2.0 ポートx1,HDMI 出力x2,LAN
ポートx1,イヤホンジャック,セキュリティスロット.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUAZ38uC0bXzDNRv-CdACicQvAK3QgXQVfcs2JhLbXBTO4f1f8Jwcg8IWR96TAXNfFWWaMWGE7notqqA2Flli27cGbyoXrtJEZYI3E6YApI3G20UNBvzF_BaUpCJLgAC_iz4qFA7EYKuRh/s2048/P5247607.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUAZ38uC0bXzDNRv-CdACicQvAK3QgXQVfcs2JhLbXBTO4f1f8Jwcg8IWR96TAXNfFWWaMWGE7notqqA2Flli27cGbyoXrtJEZYI3E6YApI3G20UNBvzF_BaUpCJLgAC_iz4qFA7EYKuRh/s600/P5247607.jpg"
/></a>
</div>
<br />
これだけ小型で2 画面同時出力可能.しかも 4K 対応なので夢が広がりますね.(後述の通り,私はそういう使い方は一切していませんが!笑)
<br />
<br />
また,2.4GHz/5.0GHz のデュアルWi-Fi と Bluetooth に対応しているので,電源と HDMI
さえ繋げば設置場所は選びません.ちなみに左側面はまっさらです笑
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO00FlJuk8VN0FPBd3stdp7YUEmxLhCnreQDeYCUFEkKTMuR7kIcYkSwl4f1VFwidfh2HxhE0aefp8OxaqksStcHcN4KPDZZYEkWH3I0TI_M6wA6Gha_Vyzg61F4-1MYrsJ2rdUSmpx87r/s2048/P5247608.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO00FlJuk8VN0FPBd3stdp7YUEmxLhCnreQDeYCUFEkKTMuR7kIcYkSwl4f1VFwidfh2HxhE0aefp8OxaqksStcHcN4KPDZZYEkWH3I0TI_M6wA6Gha_Vyzg61F4-1MYrsJ2rdUSmpx87r/s600/P5247608.jpg"
/></a>
</div>
<br />
底面に二箇所付いているロックをスライドすると,下部を取り外すことが出来ます.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgydiVWe3NlTemAT6hPnIXoLQNxSPuRvCxOGESv3iAjn7mKHXp2SujmxPUGEUi0A9j9mjyQP1E4eDBdOHDz8nDEaJLcwgQg52U_PVI90rwS2Myro8RjQasj9nsPvWP_i1v6JPKdU02SWqeh/s2048/P5247609.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgydiVWe3NlTemAT6hPnIXoLQNxSPuRvCxOGESv3iAjn7mKHXp2SujmxPUGEUi0A9j9mjyQP1E4eDBdOHDz8nDEaJLcwgQg52U_PVI90rwS2Myro8RjQasj9nsPvWP_i1v6JPKdU02SWqeh/s600/P5247609.jpg"
/></a>
</div>
<br />
上部と下部はUSB Type-Cで接続される構造.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaqIoqxEls5K2_IfSQbtSR3WwB-1r5GBfgjNH-9vyTNYaIewsYYb5kPuDe50IQLfsygHYLHMe-bOS0Jf3hhQQmBxtZ_qvjsRIMJUxrbq5DPisRmhKB9XJ7cickRJkoqk93Cc9z3HZ2KvnG/s2048/P5247610.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaqIoqxEls5K2_IfSQbtSR3WwB-1r5GBfgjNH-9vyTNYaIewsYYb5kPuDe50IQLfsygHYLHMe-bOS0Jf3hhQQmBxtZ_qvjsRIMJUxrbq5DPisRmhKB9XJ7cickRJkoqk93Cc9z3HZ2KvnG/s600/P5247610.jpg"
/></a>
</div>
<br />
ストレージを拡張しない場合は,下部を取り外した状態でも使用できるので,高さがさらに低くなります.(32mm)
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvzsijsqwzTCWNVdDWNJ3QtDVYsOoNHXew_GbTMiPQ4PVFLVN-FSQHRYDKNpd9tVJnS2YH-XmZh9yoqIvHx5R2CdWe6-DjYF3l_AayHXZiq8qoPXyp6zidUGkTbvEK-EhUJhb-gvoaXask/s2048/P5247616.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvzsijsqwzTCWNVdDWNJ3QtDVYsOoNHXew_GbTMiPQ4PVFLVN-FSQHRYDKNpd9tVJnS2YH-XmZh9yoqIvHx5R2CdWe6-DjYF3l_AayHXZiq8qoPXyp6zidUGkTbvEK-EhUJhb-gvoaXask/s600/P5247616.jpg"
/></a>
</div>
<br />
OSはWindows10 がプリインストールされています.
<br />
<br />
私はDebian
をインストールしてルーターとして可動させているので,最初にWindowsをスタンドアローンで起動してC
ドライブの容量を減らしてデュアルブート環境を作成した後はWindowsでの動作は未検証ですが,十分にサクサク動作する印象でした.
<br />
<br />
また,今回購入したミニPCにはLAN ポートがひとつしかありませんが,<a
href="http://nort-wmli.blogspot.com/2021/04/netgear-gs308t-nic-pc.html"
target="_blank"
>先日購入したVLAN 対応ハブ</a
>を使用して,LANポートひとつだけでルーターとし動作させています.
<br />
<br />
実は,何年か前からルーターとして動かすためのミニPCを検討していたのですが,VLAN
を応用する手段を知らず,複数の LAN
ポートを搭載するモデルばかりを探していたので,VLANを応用する方法を覚え,選択肢が一気に広がったこのタイミングで購入意欲を唆るモデルを発見してしまい,ほとんど衝動買いでした.
<br />
<br />
ちなみに,DVDドライブも付いていないので,Debian のインストールは,<a
href="http://nort-wmli.blogspot.com/2021/06/debian-usb.html"
target="_blank"
>ブータブルUSBを作成</a
>して実施しましたが,デフォルトではネットワークデバイスを認識できず,ドライバをインストールしたりとルーターとして動かせるようになるまで色々とあったので,その話はまた次回以降にしたいと思います.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-13249049696493328882021-06-11T22:36:00.002+09:002021-06-11T22:36:19.533+09:00Debian のブータブル USBメモリを作成するいままでOSのインストールにはDVDを使ってきましたが,最近購入したミニPCにドライブが搭載されておらず,外付けのドライブを使うと読み込み速度が低下するので,USBメモリでブータブルディスクを作成した.
<br />
<br />
あまりにも簡単に作れて,読み込み速度もDVDの比にならないくらい早いので,もっと早く実践しておけば良かったと後悔.
<br />
<br />
ということで,ブータブルUSBメモリの作り方.Debianでしか試していないため,他のディストリビューションでも同様の手順で作成できるかは未確認.
<br />
<br />
まずはISOイメージを取得.もちろんブラウザからアクセスしても問題ない.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ get https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso
</pre>
<br />
ダウンロードが完了したら念の為,ハッシュ値を確認.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sha256sum debian-10.9.0-amd64-netinst.iso
8660593d10de0ce7577c9de4dab886ff540bc9843659c8879d8eea0ab224c109 debian-10.9.0-amd64-netinst.iso
</pre>
<br />
rootユーザになって,catコマンドでUSBメモリのデバイスファイルに吐き出し.最後にsyncコマンドを実行
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
# su
# cat debian-10.9.0-amd64-netinst.iso > /dev/sdb
# sync
</pre>
<br />
<br />
これだけ.あとはパソコンにUSBメモリ挿して,ブートすればOSのインストール画面が開く.ビックリするほど簡単だった.
みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-72720002340954205892021-04-25T15:45:00.003+09:002021-04-25T15:55:11.865+09:00NETGEAR製スマートスイッチ GS308T を使用して,NIC が1つしかない PC でルーターを自作する我が家ではRaspberry Pi にUSB-NIC を接続することで,LAN
ポート(NIC)を増設してルーター化していますが,以下のサイトで紹介されているように<b
>タグVLAN</b
>
を使用することで,LAN ポートを増設すること無く Linux PC
をルーター化できることが判ったので,早速試してみました.
<br />
<br />
Linuxルータのタコ足配線を解消しよう ~ タグVLAN(IEEE 802.1Q)の活用
<br />
<a href="http://dsas.blog.klab.org/archives/50391881.html"
>http://dsas.blog.klab.org/archives/50391881.html</a
>
<br />
LinuxとVLANで作る、シンプル&スケーラブルネットワークの極意
<br />
<a href="https://www.irori.org/doc/infra/wd41.html"
>https://www.irori.org/doc/infra/wd41.html</a
>
<br />
<br />
VLAN に対応したスイッチングハブを所持していなかったため,NETGEAR 製の GS308T
を購入しました.5,000
円ちょっとでこれだけ高機能な代物が手に入るのは本当に凄いことだと思います.
<br />
<br />
近い将来,ネットワークカメラも導入したいと考えているので,PoE
対応製品にすることも考えましたが,GS308T
と比べてだいぶ値段が上がってしまうことと,配線の関係から結局ネットワークカメラもWi-Fi
接続になるような気がしたので,PoE については見送ることにしました.
<br />
<a name='more'></a>
<br />
それでは,GS308T について紹介してきます.外装はこんな感じです.
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtxCl5ZfyhkDdoVYdN2KRc9vUaJ4ZLHYP7yvykZUJpRewMmst5fDlXTfnJH3SUSqOxHDHy9Q0TkzMbe5ehSbO-w_VqYjncqxUp_ZL8WSx-JB1QLrQSl0vLizNsEj6wcFg8rM1wsJCos-Bc/s2048/P4207398.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtxCl5ZfyhkDdoVYdN2KRc9vUaJ4ZLHYP7yvykZUJpRewMmst5fDlXTfnJH3SUSqOxHDHy9Q0TkzMbe5ehSbO-w_VqYjncqxUp_ZL8WSx-JB1QLrQSl0vLizNsEj6wcFg8rM1wsJCos-Bc/s600/P4207398.jpg"
/></a>
</div>
<br />
同梱品は余計なものは一切なく,本体とACアダプタ.あとは,簡単な取説や保証書などの書類のみ.
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgASY7hKdK8XBt93p0uLMDjrBMmZkmlsk6DAWLm9utrhunp5aWda15pixFM413Xvd1DWs0PJkChuTZD6Oq5y0N7NdURILhHKb-Sga5ikpGo2nHgL42qAA9PCo24hnYbqDclF8UMIu9O-Cqs/s2048/P4207400.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgASY7hKdK8XBt93p0uLMDjrBMmZkmlsk6DAWLm9utrhunp5aWda15pixFM413Xvd1DWs0PJkChuTZD6Oq5y0N7NdURILhHKb-Sga5ikpGo2nHgL42qAA9PCo24hnYbqDclF8UMIu9O-Cqs/s600/P4207400.jpg"
/></a>
</div>
<br />
ポートは8口あり,ポートごとの区別は特にありません(多分).ACアダプタからの電源供給プラグ差込口はポートとは反対側にあり,うっすら写っている底面には,MACアドレスなどの製品情報がプリントされたシールが貼付されています.
<br />
<br />
また,通信速度に応じて各ポート左上のランプの色が変化します.(100Mbpsはオレンジ.1Gbpsは緑.)
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhojy9A3kLCNQMGRCD3YUVk7U__5Mk7dzFie_BruM-Xqij2hpUMJaTO2hh9jY9ELhH1ycMt3yAutjIvNmgOidVxsdRl-GZxFQjLMv2oaIJcF6wETVkIT4ygVEiQbidwHLpjOVZCA0FEWX0z/s2048/P4207402.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhojy9A3kLCNQMGRCD3YUVk7U__5Mk7dzFie_BruM-Xqij2hpUMJaTO2hh9jY9ELhH1ycMt3yAutjIvNmgOidVxsdRl-GZxFQjLMv2oaIJcF6wETVkIT4ygVEiQbidwHLpjOVZCA0FEWX0z/s600/P4207402.jpg"
/></a>
</div>
<br />
さて,ここからインストールに移ります.
<br />
<br />
まず物理的な接続としては,8番ポートをWAN側に接続し,7番ポートは別のスイッチングハブ.6番ポートにラズパイルーター.その他のポートは,blu-ray
プレイヤーなどのネットワーク機器を繋ぎました.
<br />
<br />
したがって,<b
>8番ポートと6番ポートでひとつの Virtual LAN,1〜7番ポートでもうひとつの
Virtual LAN</b
>
を組めば実現したい構成になります.
<br />
<br />
ブラウザでアクセスした画面は直感的に操作できる UI
になっているので,迷いなく操作できると思います.今回は,VLAN
IDとして「3」を追加し,1〜7番ポートをデフォルトのVLAN
ID:1に,6番,8番ポートを追加したVLAN ID:3に繋ぎました.
<br />
<br />
余談ですが,NETGEAR
製のスイッチングハブはDHCPでIPアドレスが自動付与される仕様のため,IP
アドレス探索用の専用アプリも提供されているようですが,我が家のように Linux
ルーターであれば,SSH でログインして arp コマンドもとい ip neighbor show
コマンドを使用すれば,すぐにIP アドレスを特定することができます.
<br />
<br />
VLAN ID:1の設定画面
<br />
1〜7番ポートをUntaggedポートとして接続.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlubYIcVbw8CS2zv8mrWsSILr8E6Zn07SUU7hw_AJvFgxvDC725scErEXHSshxTmkAiV1_JexvGF3eP_VZ30PxTbLaoNJOG9Nd9c1I4zuwFegpYjKZw4XnofFcDQfctKvqcY3oQpBpDEVX/s1080/screenshot01.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1080"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlubYIcVbw8CS2zv8mrWsSILr8E6Zn07SUU7hw_AJvFgxvDC725scErEXHSshxTmkAiV1_JexvGF3eP_VZ30PxTbLaoNJOG9Nd9c1I4zuwFegpYjKZw4XnofFcDQfctKvqcY3oQpBpDEVX/s600/screenshot01.png"
/></a>
</div>
<br />
VLAN ID:3の設定画面
<br />
8番ポートをUntaggedポート.6番ポートをTaggedポートとして接続.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-TosBeerbWbgIsaewE6n55Zk1yyHYrh0CQPgh_1OpdjfIoA-OUy_Oi60M-EXgj8E28yOOAHhgCKuWlYtEAq_tVuGbusNtg2-VHgAas_dZdnGFwgfJKpfFQMggQubKlyagWsA29QztHTih/s1080/screenshot02.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1080"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-TosBeerbWbgIsaewE6n55Zk1yyHYrh0CQPgh_1OpdjfIoA-OUy_Oi60M-EXgj8E28yOOAHhgCKuWlYtEAq_tVuGbusNtg2-VHgAas_dZdnGFwgfJKpfFQMggQubKlyagWsA29QztHTih/s600/screenshot02.png"
/></a>
</div>
<br />
これで設定は完了.と思っていたので,うまく接続できなくてかなり焦りました.
<br />
<br />
ここからラズパイの設定を色々弄ったり,ハブのポートをあれやこれや繋ぎ変えて実験したり,そもそもVLAN自体使うのが初めてだったので,VLANの仕組みを一から勉強し直したり...2,3日悩み続けようやく答えにたどり着きました.
<br />
<br />
それが下記のPort VLAN ID(PVID)設定です.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAxma2vaDxzOeTw2rdd3PHNTvo0D-Y9iSdyjY6nefwM7KK9rHt2L5-u1RVj0swcF8UITnwn5KILoisJaRRpCV8YwEAr4lLkwwvIN_0jYx16PSaG2nDhtSWjdJUrTJwHFzcgRgW1PDR_mBh/s1080/screenshot03.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1080"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAxma2vaDxzOeTw2rdd3PHNTvo0D-Y9iSdyjY6nefwM7KK9rHt2L5-u1RVj0swcF8UITnwn5KILoisJaRRpCV8YwEAr4lLkwwvIN_0jYx16PSaG2nDhtSWjdJUrTJwHFzcgRgW1PDR_mBh/s600/screenshot03.png"
/></a>
</div>
この画像ではすでに正しい設定になっていますが,初期状態ではg1〜g8の全てのPVIDが1に設定されています.つまり,<b
>8番ポートはVLAN ID:3のVirtual
LANにしか所属しない設定になのに,PVIDは1というチグハグな状態</b
>になっていた訳です.
<br />
<br />
色々と柔軟に設定できるように敢えてそのような状態を許容しているのかもしれませんが,普通はやらない設定だと思うので,せめてアラートぐらい出してほしいですね...ともあれ,これでスイッチングハブ側の設定は完了です.
<br />
<br />
次にラズパイルーター側の設定に移ります.まずは VLAN
を使うためのパッケージをインストールします.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install vlan
</pre>
<br />
パッケージのインストールが完了したら,VLAN 用の仮想インターフェイスを作成します.eth0
を分割し,VLAN ID:3 で使用するため,インターフェイス名は
<b>eth0.3</b> になります.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/network/interfaces
----------
auto eth0.3
iface eth0.3 inet manual
vlan-raw-device eth0
</pre>
<br />
必須ではありませんが,ここで一度再起動してから,ip link show コマンドを実行して
eth0.3 が正常に作成されているか確認しても良いかもしれません.
<br />
<br />
最後に,eth0.3
を使用するための設定です.ここで,これまでの自作ルーターの記事を以下に纏めておきます.結論から言うと,下記記事の
eth1 で設定していた項目を全て,eth0.3 に書き換えると設定は完了です.
<hr />
<ol>
<li>
<a
href="https://nort-wmli.blogspot.com/2021/03/raspberry-pi-ipv4-over-ipv6ds-litexpass.html"
>Raspberry Pi を楽天ひかりのIPv4 over
IPv6(DS-Lite・Xpass)に対応したルーターにする</a
>
</li>
<li>
<a
href="https://nort-wmli.blogspot.com/2021/03/raspberry-pi-ds-lite-pppoe.html"
>Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる</a
>
</li>
<li>
<a
href="https://nort-wmli.blogspot.com/2021/03/raspberry-pi-dynamic-dns.html"
>Raspberry Pi ルーターに Dynamic DNS を導入する</a
>
</li>
<li>
<a href="https://nort-wmli.blogspot.com/2021/03/raspberry-pi-lan-vpn.html"
>Raspberry Pi ルーターでポートフォワーディングして,LAN 内の VPN
に接続する.</a
>
</li>
</ol>
<hr />
<br>
具体的には,
<br>
1番の記事の,「IPv4 over IPv6(DS-Lite・Xpass)の設定」で eth1 を eth0.3 に書き換えます.
<br>
1番の記事の,「NAT及びFireWallの設定」で eth1 を eth0.3 に書き換えます.
<br>
2番の記事の,「PPPoE接続の設定」で eth1 を eth0.3 に書き換えます.
<br>
<br>
最後にラズパイルーターを再起動して,設定が反映されたことを確認します.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-46807277133470060932021-03-23T13:40:00.005+09:002021-03-24T19:47:11.392+09:00Raspberry Pi ルーターでポートフォワーディングして,LAN 内の VPN に接続する.最近,自作ルーターの話題ばかりですが今回はポートフォワーディングする話.
<br />
<br />
なお,これまでのルーターの設定は以下の記事に纏めてある.
<br />
<a
href="http://nort-wmli.blogspot.com/2021/03/raspberry-pi-ipv4-over-ipv6ds-litexpass.html"
>Raspberry Pi を楽天ひかりのIPv4 over
IPv6(DS-Lite・Xpass)に対応したルーターにする</a
>
<br />
<a href="http://nort-wmli.blogspot.com/2021/03/raspberry-pi-ds-lite-pppoe.html"
>Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる</a
>
<br />
<a href="http://nort-wmli.blogspot.com/2021/03/raspberry-pi-dynamic-dns.html"
>Raspberry Pi ルーターに Dynamic DNS を導入する</a
>
<br />
<br />
ざっくり言うと,ラズパイをIPv4 over
IPv6接続に対応したルーターに設定することで,回線の混雑を避けて通信速度を維持しつつ,PPPoE接続も共存させることで外部からのアクセスを可能にし,Dynamic
DNSによってホスト名による外部からのアクセスを可能にしている.
<br />
<br />
<br />
今回はさらに,<b>ポートフォワーディング機能</b>を追加する.
<br />
<a name='more'></a>
<br />
スマホ等からも簡単に接続できて結果を確認しやすかったのと,以前から公衆Wi-Fi利用時のセキュリティを向上させたいと考えていたので,ポートフォワーディングする対象はVPNにした.
<br />
<br />
また,上述の記事で紹介したようにラズパイ起動時にiptablesの設定を読み込むよう設定しているので,ポートフォワーディングさせるための設定はリストアするファイルに追記するだけで良い.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/iptables.settings(<font color="red">赤字</font>の箇所を追記)
------------------------------
<font color="red">*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p udp -m udp --dport 1194 -j DNAT --to-destination 192.168.100.3:1194
-A POSTROUTING -d 192.168.100.3/32 -o ppp0 -p udp -m udp --dport 1194 -j MASQUERADE
COMMIT</font>
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i ppp0 -p icmp --icmp-type 8 -j ACCEPT
-A INPUT -i ppp0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -i br0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.100.0/24 -i br0 -o ds-lite -j ACCEPT
-A FORWARD -d 192.168.100.0/24 -i ds-lite -o br0 -j ACCEPT
<font color="red">-A FORWARD -s 192.168.100.3/32 -i br0 -o ppp0 -p udp -m udp --sport 1194 -j ACCEPT
-A FORWARD -d 192.168.100.3/32 -i ppp0 -o br0 -p udp -m udp --dport 1194 -j ACCEPT</font>
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
</pre>
<br />
ポートフォワーディングは,natテーブルの,PREROUTINGチェイン及びPOSTROUTINGチェインで設定する.UDPの1194番ポートに入ってきた通信を192.168.100.3:1194に飛ばし,戻りの通信はIPマスカレードすれば良い.
<br />
<br />
また,filterテーブルで,FOWARDをDROP指定しているので,UDPの1194番ポートを許可する設定も追記している.
<br />
<br />
最後に私の環境では,PPPoE用のルーティングテーブルを別途作成しているので,1194番ポートで転送された通信もそのテーブルを参照するよう設定する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/rc.local(追記)(<font color="red">赤字</font>の箇所を追記)
------------------------------
ip route add default dev ppp0 table 128
ip route add 192.168.100.0/24 dev br0 table 128
ip rule add ipproto icmp dev ppp0 table 128
ip rule add ipproto icmp dev lo table 128
<font color="red">ip rule add dport 1194 dev ppp0 table 128
ip rule add sport 1194 dev br0 table 128</font>
ip rule add dport 22 dev ppp0 table 128
ip rule add sport 22 dev lo table 128
</pre>
<br />
以上で,ラズパイルーターのiptablesコマンドによるポートフォワーディング設定は完了.
<br />
<br />
次にポートフォワードされた側(IPアドレス:192.168.100.3)でVPNを構築する.といってもVPNの構築は先人の知恵を借り,以下の記事で紹介されているgitのスクリプトを取得して実行するだけで終わらせる.
<br />
<a href="https://kureuetan.com/web/gadget/6793/"
>VPSで、簡単にVPNサーバを作る!【海外から日本のテレビを見る~2019年】</a
>
<br />
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ wget https://git.io/vpn -O openvpn-install.sh
$ sudo bash openvpn-install.sh
</pre>
<br />
途中,VPNの設定内容を確認されるので,
<ul>
<li>ポート番号:1194(デフォルト)</li>
<li>プロトコル:UDP</li>
<li>ホスト名:Dynamic DNSで取得済みのホスト名</li>
</ul>
を指定する.
<br />
<br />
スマホにOpenVPNのクライアントアプリをインストールし,生成されたovpnファイルをインポートして接続する.
<br>
<br>
以下のスクリーンショットのように接続できれば設定はすべて完了だ.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeWLbPcq0W9xnyT6MZwqvQt7WU5k82JDDRXF2qsF05Q4ThC3h4MIkKqaF_WhXRgIePu_XHzmCZJC1PlWbRgE0FZ_jDsiWYMk3DQSKiPE-LDiLVvVcYi5ib1j-1BPRqJjIO3DHxxYv5-eBn/s2048/canvas.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
height="600"
data-original-height="2048"
data-original-width="970"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeWLbPcq0W9xnyT6MZwqvQt7WU5k82JDDRXF2qsF05Q4ThC3h4MIkKqaF_WhXRgIePu_XHzmCZJC1PlWbRgE0FZ_jDsiWYMk3DQSKiPE-LDiLVvVcYi5ib1j-1BPRqJjIO3DHxxYv5-eBn/s600/canvas.png"
/></a>
</div>みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-1842402753763540872021-03-18T00:42:00.004+09:002021-03-24T19:47:00.698+09:00Raspberry Pi ルーターに Dynamic DNS を導入するIPv4 over IPv6 接続した Raspberry Pi ルーターに PPPoE 接続を共存させ外部から
IPv4 で接続することができるようになったので,Dynamic DNS を導入した.
<br />
<br />
<hr />
これまでの設定は以下の記事に纏めてあるので,最初から読みたい方はどうぞ.
<br />
<a
href="http://nort-wmli.blogspot.com/2021/03/raspberry-pi-ipv4-over-ipv6ds-litexpass.html"
>Raspberry Pi を楽天ひかりのIPv4 over
IPv6(DS-Lite・Xpass)に対応したルーターにする</a
>
<br />
<a href="http://nort-wmli.blogspot.com/2021/03/raspberry-pi-ds-lite-pppoe.html"
>Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる</a
>
<hr />
<br />
今回は無料で使える No-IP を利用する.
<br />
<br />
初めに,<a href="https://www.noip.com/">https://www.noip.com/</a>
にアクセスしてアカウントの作成とホスト名の取得を完了したら,以下の記事に従ってクライアントソフトをビルドする.ただし,ルート権限の取得と
make install はしないようにする.
<br />
<a name='more'></a>
<br />
<a
href="https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/"
>How to Install the Dynamic Update Client on Linux</a
>
<br />
<br />
理由は,/etc とか /usr/local とかを勝手に弄られるのが嫌だから.
<br />
<br>
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
$ cd noip-2.1.9-1
$ make
</pre>
<br>
ビルドが完了したら,以下のコマンドで conf ファイルを作成する.設定は全てデフォルトで良い.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ./noip2 -C -c hoge.conf
</pre>
<br>
conf ファイルが作成されたら,IPアドレス更新のテストを実行する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ./noip2 -c hoge.conf -i XXX.XXX.XXX.XXX
</pre>
<br>
No-IP のアカウントページに表示された IP が XXX.XXX.XXX.XXX に更新されていたら,クライアントソフトの設定はひとまず完了.
<br>
<br>
次はこれを定期的に実行するために,cronを仕込む.
<br>
<br>
cronで動かすために作成したスクリプトは以下の通り.host コマンドで取得したDDNS によるIPアドレスと,ip コマンドで取得したデバイスの実 IPアドレスが異なっていたら,クライアントソフトを使ってIPアドレスを更新するという流れ.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/home/mirasuni/bin/hoge.sh
----------------------------------------
#!/bin/bash
readonly NOIP_DIR="${HOME}/noip-2.1.9-1/"
readonly CONF_FILENAME="hoge.conf"
readonly HOST_URL="hoge.ddns.net"
readonly DEVICE_NAME=ppp0
if HOST_IP=$( host ${HOST_URL} ); then
HOST_IP=$( echo ${HOST_IP} | awk '{print $4}' )
echo ${HOST_URL} : ${HOST_IP}
else
echo Failed : host command
exit 1
fi
if DEVICE_IP=$( ip addr show dev ${DEVICE_NAME} | grep inet ); then
DEVICE_IP=$( echo ${DEVICE_IP} | awk '{print $2}' )
echo ${DEVICE_NAME} : ${DEVICE_IP}
else
echo Failed : ip command
exit 1
fi
if [ "${HOST_IP}" != "${DEVICE_IP}" ] ; then
cd ${NOIP_DIR}
./noip2 -c ${CONF_FILENAME} -i ${DEVICE_IP}
else
echo ${HOST_URL} and ${DEVICE_NAME} are same.
fi
exit 0
</pre>
<br>
スクリプトの動作確認をして,問題なければ,これが5分に1回実行されるようcronを仕込む.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ crontab -e
----------------------------------------
*/5 * * * * /home/mirasuni/bin/hoge.sh
</pre>
<br>
<br>
以下,補足.
<br>
No-IPが提供するクライアントソフトは-i オプションを付けずに起動すると常駐して,conf ファイル作成時に設定した間隔でアップデートするように動作するが,デフォルトの間隔は30分と長いので,今回はcronで回すようにした.
<br>
<br>
クライアントソフトの設定を5分間隔にして常駐させてしまうと,頻繁にアップデートが走りサーバーに負荷をかけてしまう恐れがあるので,スクリプトでアップデートの要否を判定してからIPアドレス指定で動作するように仕込むことで,サーバーに負荷をかけずに,IPアドレスが変わった場合のラグも最小限に抑えることを目論んでいる.
<br>
<br>
次回はラズパイルーターでポートフォワードさせて,LAN 内の端末(こっちもラズパイだけどw)で VPN を構築したいと思う.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-43224752035598199902021-03-14T20:30:00.007+09:002021-03-24T19:46:48.057+09:00Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる先日,楽天ひかりのIPv4 over IPv6
を利用するための設定方法をまとめたが,(下記参照)
<br />
<a
href="http://nort-wmli.blogspot.com/2021/03/raspberry-pi-ipv4-over-ipv6ds-litexpass.html"
>Raspberry Pi を楽天ひかりのIPv4 over
IPv6(DS-Lite・Xpass)に対応したルーターにする</a
>
<br />
<br />
今回はその続きとして,PPPoE による接続も共存させる方法.
<br />
<br />
なぜ,こんなことが必要かというと,DS-Lite方式の接続では,結局のところ,dgw.xpass.jp
に対して作成したトンネルの出口をゲートウェイとして使っているので,ルーターがネットの世界と直接繋がっているわけではなく,SSH
でルーターにログインしたり,Apacheを立ててHTTPでアクセスしたりすることができない.(正確にはIPv6を使えば接続可能だけど,できれば慣れ親しんだIPv4で接続したい)
<br />
<br />
これを実現するには,PPPoE
の接続が必要になるが,ルーティングテーブルを適切に設定しないと,PPPoE
接続と,DS-Lite 接続のどちらを優先すべきかルーターが判断できなくなってしまう.
<br />
<br />
これを踏まえ今回は,DS-Liteと共存させるための,PPPoE
接続の方法及びルーティングテーブルの設定方法を記載する.
<br />
<br />
<a name='more'></a>
pppoeconf を利用して自動接続しても良いが,<a
href="http://nort-wmli.blogspot.com/2020/06/pppoeconf-raspberry-pi-pppoe.html"
>以前の研究結果</a
>を元に今回はすべて手動で設定していく.
<br />
<br />
<h2>PPPoE接続の設定</h2>
<br />
1. パッケージのインストール
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install pppoe
</pre>
<br />
<br />
2. 設定ファイルの編集
<br />
設定が完了したら再起動し,ifconfig コマンド等で接続されたか確認する
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/ppp/pap-secrets(追記)
------------------------------
"raXXXXXXXXXX@m.rakutenbb.jp" * "password"
</pre>
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/ppp/chap-secrets(追記)
------------------------------
"raXXXXXXXXXX@m.rakutenbb.jp" * "password"
</pre>
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/ppp/peers/dsl-provider(以下のように修正)
------------------------------
# pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452" ←コメントアウト
# defaultroute ←コメントアウト
plugin rp-pppoe.so eth1 ←追記
user "raXXXXXXXXXX@m.rakutenbb.jp" ←追記
</pre>
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/network/interfaces(追記)
------------------------------
auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth1 up
provider dsl-provider
auto eth1
iface eth1 inet manual
</pre>
<br />
注)ユーザーIDとパスワードは別途プロバイダーから通知されているものを入力する.
<br />
注)defaultroute をコメントアウトすることで,ルーティングテーブルに宛先 default
として自動的に追加されるのを防ぐ
<br />
<br />
<br />
<h2>FireWallの設定</h2>
<br />
冒頭にリンクを貼った記事ですでに,iptablesの設定を実施しているので,以下の赤字箇所を追記する.ここでは22番ポートを解放してSSH
を許可するよう設定した.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/iptables.settings(<font color="red">赤字</font>の箇所を追記)
------------------------------
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
<font color="red">-A INPUT -p tcp --dport 22 -j ACCEPT</font>
-A INPUT -s 192.168.100.0/24 -i br0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.100.0/24 -i br0 -o ds-lite -j ACCEPT
-A FORWARD -d 192.168.100.0/24 -i ds-lite -o br0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
</pre>
<br />
<br />
<h2>ルーティングテーブルの設定</h2>
<br />
ここまでの設定で通信手段は確保したが,通信経路が定まっていない.仮に外部からのSSHの接続元が特定の一箇所ないしは,サブネットマスク指定で表現できるところからに限定可能ならば,デフォルトのルーティングテーブルに追加するだけで済むが,不特定多数の箇所から接続できるようにする場合,宛先が default になる.
<br />
<br />
しかし,宛先が default の経路ははすでにDS-Lite接続に設定しているため,二重に設定することはでいない.
<br />
<br />
そこで,ルーティングテーブル自体を追加して,ppp0 宛の SSH 接続に関しては,追加したルーティングテーブルを参照するようルールを追加する.また,死活チェックのために,pingも通るようにした.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/rc.local(追記)
------------------------------
ip route add default dev ppp0 table 128
ip route add 192.168.100.0/24 dev br0 table 128
ip rule add ipproto icmp dev ppp0 table 128
ip rule add ipproto icmp dev lo table 128
ip rule add dport 22 dev ppp0 table 128
ip rule add sport 22 dev lo table 128
</pre>
<br />
<br />
再起動し,設定が反映されているか確認する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ip route show table main
default dev ds-lite scope link
XXX.XXX.XXX.XXX dev ppp0 proto kernel scope link src XXX.XXX.XXX.XXX
169.254.0.0/16 dev eth1 scope link src 169.254.150.132 metric 203
192.168.100.0/24 dev br0 proto dhcp scope link src 192.168.100.1 metric 206
</pre>
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ip route show table 128
default dev ppp0 scope link
192.168.100.0/24 dev br0 scope link
</pre>
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ip rule show
0: from all lookup local
32762: from all iif lo sport 22 lookup 128
32763: from all iif ppp0 dport 22 lookup 128
32764: from all iif lo ipproto icmp lookup 128
32765: from all iif ppp0 ipproto icmp lookup 128
32766: from all lookup main
32767: from all lookup default
</pre>
<br />
設定に問題がなければ,試しにスマホのモバイル通信など,外部のネットワークから,ppp0
のIPアドレス宛にSSH接続できるか確認する.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-56415305774249224392021-03-07T17:24:00.003+09:002021-03-24T19:46:32.166+09:00Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする光回線の契約をソフトバンク光から楽天ひかりに乗り換えた.(一年無料なので,ソフトバンクに解約金を払っても十分にお釣りが来る.)
<br />
<br />
ソフトバンク時代は,IPv4 over
IPv6を利用するのに光BBユニットのレンタルが必須だったが,楽天ひかりでは対応したルーターを用いれば専用機器をレンタルする必要はないので,Raspberry
PiをDS-Lite・Xpassに対応させてルーターとして可動させた.
<br />
<br />
同時に,DHCP,RADVD,DNS,さらに,2.4GHz帯/5.0GHz帯のマルチSSD無線LANとしても可動させているので,その設定手順を備忘録として記録する.
<br />
<br />
最終構成は以下の通り.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
eth0 :ラズパイにある有線LANポート.スイッチングハブと接続する.
eth1 :USB-NICで拡張した有線LANポート.ONUと接続する.
wlan0 :ラズパイにある無線LANポート.5.0GHz 帯無線LANアクセスポイントとして動作させる.
wlan1 :USBドングルで拡張した無線LANポート.2.4GHz 帯無線LANアクセスポイントとして動作させる.
br0 :eth0,wlan0,wlan1をつなぐブリッジ.192.168.100.1/24に設定する.
ds-lite:IPv4 over IPv6用のトンネル.
br0 に DPCP及びRADVD を設定し,接続した機器には自動でIPv4アドレス及びIPv6アドレスを振るように設定.
</pre>
<a name='more'></a>
<!-- ここからブリッジの設定 -->
<br />
<br />
<h2>ブリッジ(br0)の設定</h2>
<br />
1. パッケージのインストール
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install bridge-utils
</pre>
<br />
2. ブリッジの作成
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/network/interfaces(以下を,追記)
------------------------------
auto br0
iface br0 inet manual
bridge_ports eth0 wlan0 wlan1
bridge_stp off
bridge_maxwait 3
</pre>
<br />
3. DHCPクライアントの設定
<br />
eth0,wlan0,wlan1にはIPを振らないように,またbr0は固定IPに設定する
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/dhcpcd.conf(以下を,追記)
------------------------------
denyinterfaces eth0 wlan0 wlan1
interface br0
static ip_address=192.168.100.1/24
static ip6_address=fd00:0:0:1::1/64
static domain_name_servers=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
</pre>
<!-- ここからDHCPの設定 -->
<br />
<br />
<h2>DHCPの設定</h2>
<br />
1. パッケージのインストールと自動起動設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install isc-dhcp-server
$ sudo systemctl enable isc-dhcp-server.service
</pre>
<br />
2. DHCPを提供するデバイスの設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/default/isc-dhcp-server(以下の通り,修正)
------------------------------
(修正前)INTERFACESv4=""
(修正後)INTERFACESv4="br0"
</pre>
<br />
3. confファイルの設定
<br />
提供するIPv4アドレスの範囲等の設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/dhcp/dhcpd.conf(以下の通り,修正)
------------------------------
(修正前)
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
#authoritative
(修正後)
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
authoritative
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.101 192.168.100.120;
option domain-name-servers 192.168.100.1;
option domain-name "hoge.piyo"; # 必要ならドメインネームを記載する
option routers 192.168.100.1;
option broadcast-address 192.168.100.255;
default-lease-time 600;
max-lease-time 7200;
}
host fuga { # 固定IPを振りたい場合は,MACアドレスとIPアドレスを記載する
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 192.168.100.10;
}
</pre>
<br />
4. バグ対応
<br />
デフォルトでは,(デバイスに対してIPが振られる前にDHCPを起動しようとするから?)DHCPの起動に失敗することがあるため,起動シーケンスの中で成功するまで再起動する設定を追記
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/rc.local(追記)
------------------------------
for i in {1..10}; do
systemctl restart isc-dhcp-server && break
printf "[ NG ] Restart ISC-DHCP-SERVER : Failure\n"
sleep 5
done
printf "[ OK ] Restart ISC-DHCP-SERVER : Success\n"
</pre>
<!-- ここからRADVDの設定 -->
<br />
<br />
<h2>RADVDの設定</h2>
<br />
1. パッケージのインストールと自動起動設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install radvd
$ sudo systemctl enable radvd.service
</pre>
<br />
2. confファイルの設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/radvd.conf(新規作成)
------------------------------
interface br0
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
prefix fd00:0:0:1::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
</pre>
<!-- ここからDNSの設定 -->
<br />
<br />
<h2>DNSの設定</h2>
<br />
1. パッケージのインストールと自動起動設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install dnsmasq
$ sudo systemctl enable dnsmasq.service
</pre>
<br />
2. confファイルの設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/dnsmasq.conf(以下の通り,修正)
------------------------------
(修正前)#domain-needed
#bougus-priv
(修正後)domain-needed (コメントを外す)
bougus-priv (コメントを外す)
</pre>
<br />
2. 名前解決したいホストとIPアドレスの設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/hosts(以下のように適宜,追記する)
------------------------------
192.168.100.10 fuga
</pre>
<!-- ここからルーターの設定 -->
<br />
<br />
<h2>IPv4 over IPv6(DS-Lite・Xpass)の設定</h2>
<br />
1. トンネルの作成
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/rc.local(追記)
------------------------------
for i in {1..10}; do
LOCAL=`ip a | grep 'mngtmpaddr' | awk '{print $2}' | awk -F/ '{print $1}'`
[ -n "${LOCAL}" ] && break
printf "[ NG ] mngtmpaddr device is not found\n"
sleep 5
done
printf "[ OK ] mngtmpaddr device is found\n"
REMOTE='2001:f60:0:200::1:1'
ip -6 tunnel add ds-lite mode ipip6 remote $REMOTE local $LOCAL encaplimit none dev eth1
ip link set dev ds-lite up
ip route add default dev ds-lite
</pre>
<br />
<br />
<h2>IPフォワーディングの設定</h2>
1. confファイルの設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/sysctl.conf(以下の通り,修正)
------------------------------
(修正前)#net.ipv4.ip_forward=1
#net.ipv6.conf.all.forwarding=1
(修正後)net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
</pre>
<br />
<br />
<h2>NAT及びFireWallの設定</h2>
<br />
1. iptablesの設定(IPv4はトンネルに飛ばすので,NATは不要)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/iptables.settings(新規作成)
------------------------------
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -s 192.168.100.0/24 -i br0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.100.0/24 -i br0 -o ds-lite -j ACCEPT
-A FORWARD -d 192.168.100.0/24 -i ds-lite -o br0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
</pre>
<br />
2. ip6tablesの設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/ip6tables.settings(新規作成)
------------------------------
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s fd00:0:0:1::/64 -o eth1 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -s fd00:0:0:1::/64 -i br0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s fd00:0:0:1::/64 -i br0 -o eth1 -j ACCEPT
-A FORWARD -d fd00:0:0:1::/64 -i eth1 -o br0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
</pre>
<br />
3. 起動時に読み込む設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/rc.local(追記)
------------------------------
/sbin/iptables-restore /etc/iptables.settings && printf "[ OK ] IPv4 Tables Restore : Success\n"
/sbin/ip6tables-restore /etc/ip6tables.settings && printf "[ OK ] IPv6 Tables Restore : Success\n"
</pre>
<br />
<br />
ここまでの設定で,IPv4 over IPv6対応ルーターとして動作する.
<br />
<br />
ここからさらに無線LANルーターとして動作するための設定を追加していく.
<br />
<br />
<h2>5.0GHz帯無線LANの設定</h2>
<br />
1. パッケージのインストールと自動起動設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt install hostapd
$ sudo systemctl unmask hostapd.service
$ sudo systemctl enable hostapd.service
</pre>
<br />
2. confファイルのパスの設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/default/hostapd(以下の通り,修正)
------------------------------
(修正前)#DAEMON_CONF=""
(修正後)DAEMON_CONF="/etc/hostapd/hostapd.conf"
</pre>
<br />
3. confファイルの作成
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/hostapd/hostapd.conf(新規作成)
------------------------------
interface=wlan0
bridge=br0
driver=nl80211
ssid=HogeHoge5.0
hw_mode=a
channel=36
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=PiyoPiyo
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
</pre>
<br />
<br />
<h2>2.4GHz帯無線LANの設定</h2>
<br />
1. confファイル及びsystemd用のファイルを5.0GHzのものからコピー
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
(以下のコマンドを実行)
------------------------------
# sed -e 's/hostapd\/hostapd.conf/hostapd\/hostapd2.conf/g' /etc/default/hostapd > /etc/default/hostapd2
# sed -e 's/hostapd\/hostapd.conf/hostapd\/hostapd2.conf/g' -e 's/default\/hostapd/default\/hostapd2/g' /lib/systemd/system/hostapd.service > /etc/systemd/system/hostapd2.service
</pre>
<br />
2. 自動起動設定
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl enable hostapd2.service
</pre>
<br />
3. confファイルの作成
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/hostapd/hostapd2.conf(新規作成)
------------------------------
interface=wlan1
bridge=br0
driver=nl80211
ssid=HogeHoge2.4
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=PiyoPiyo
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
</pre>
<br />
<br />
<h2>Power Managerの無効化</h2>
<br />
1. 起動時の設定
<br />
Power
Managementが有効になっていると,作成したアクセスポイントが不安定になるため無効化する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/rc.local(追記)
------------------------------
/sbin/iw dev wlan0 set power_save off && printf "[ OK ] Power Management : Off\n"
</pre>
<br />
以上.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-82796030920619119082021-02-27T00:18:00.004+09:002021-06-11T22:37:38.402+09:00Bash でプロセスの死活チェックをスマートにやる方法プロセス名を hogehoge としたとき,<br />
<br />
よく見かけるのはこんな感じ.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
#!/bin/bash
ProcessName=hogehoge
<font color="red">IsActive=`ps aux | grep ${ProcessName} | grep -v grep | wc -l`</font>
if [ ${IsActive} -gt 0 ]; then
echo "${ProcessName} is Active."
else
echo "${ProcessName} is Disactive."
fi
exit 0
</pre>
<br />
<br />
ps aux で全てのプロセスを表示して,それをプロセス名でgrep し,ただし grep
自身もヒットしてしまうので,それを grep -v で除き,最後に wc
でライン数を数える.そのライン数が0よりも大きければプロセスが存在する.と判定する.<br />
<br />
やっていることはよく判ります.でもパイプで色々繋いだりすると,想定外の例外で引っかかることが多い...<br />
<br />
(例えばプロセス名自体が,どこかに「grep」を含んでいる場合,この方法では検出できない)
<br />
<br />
<h2>これをもうちょっとスマートにやる方法を紹介します</h2>
<a name='more'></a>
<br />
まずは,pgrep コマンドを導入します.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
#!/bin/bash
ProcessName=hogehoge
IsActive=`<font color="red">pgrep ${ProcessName}</font> | wc -l`
if [ ${IsActive} -gt 0 ]; then
echo "${ProcessName} is Active."
else
echo "${ProcessName} is Disactive."
fi
exit 0
</pre>
<br />
赤字の部分が変更箇所です.ps + grep
というべきコマンド.pgrepを使用することで,パイプが2つ減りました.<br />
<br />
次に,wc コマンドでライン数を数えるのをやめます.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
#!/bin/bash
ProcessName=hogehoge
<font color="red">pgrep ${ProcessName} > /dev/null</font>
if [ <font color="red">$? -eq</font> 0 ]; then
echo "${ProcessName} is Active."
else
echo "${ProcessName} is Disactive."
fi
exit 0
</pre>
<br />
これで,パイプもIsActive変数もなくなりました.<br />
<br />
grep もとい,pgrep コマンドはヒットするものがあるとき,戻り値として0
を返すので,それを利用しています.(何もヒットしないときは戻り値:非ゼロ)<br />
<br />
シェルでは基本的に変数はグローバル変数になってしまうので,定義は少ないに越したことはない.と私は考えています.
<br />
<br />
ただし,変数に代入しなくなったことで,pgrep コマンドの結果として,プロセスID
が標準出力されてしまうので,それは/dev/null に捨てています.<br />
<br />
次はこちら.$? 変数で結果を参照するのをやめます.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
#!/bin/bash
ProcessName=hogehoge
if <font color="red">( pgrep ${ProcessName} > /dev/null )</font>; then
echo "${ProcessName} is Active."
else
echo "${ProcessName} is Disactive."
fi
exit 0
</pre>
<br />
prep コマンドの実行結果(成否判定)を if 文に直接渡すようにしました.<br />
<br />
シェルに不慣れな人にとっては,若干可読性が下がってしまうかもしれませんが,pregpの戻り値(ゼロ?or非ゼロ)を深く考える必要がなくなるのはメリットかと思います.
<br />
<br />
なお,わかりやすさのために,コマンドを()で囲っていますが,無くても同じ結果が得られます.<br />
(厳密にはサブシェルが立ち上げられるため,全く同じという訳ではありませんが)<br />
<br />
<br />
最後はこちら.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
#!/bin/bash
ProcessName=hogehoge
<font color="red">pgrep ${ProcessName} > /dev/null && {</font>
echo "${ProcessName} is Active."
<font color="red">} || {</font>
echo "${ProcessName} is Disactive."
<font color="red">}</font>
exit 0
</pre>
<br />
そろそろ原型を留めていませんが,なんとなくC言語っぽく書けるので,可読性は回復したと思います.
<br />
<br />
シェルにおいて,「&&」は直前のコマンドが成功していたら実行.「||」は直前のコマンドが失敗していたら実行するので,if文の代わりにこのように記述することができる訳です.
<br />
<br />
なお,中括弧{}を普通の括弧()に変更すると,内部のコマンドは全てサブシェルで実行されることになるので,適宜使い分けると良いでしょう.
<br />
<br />
また,pgrep に似たコマンドとして,pidof というコマンドもあります.pgrep
は指定したワードがプロセス名に含まれていた場合ヒットしますが,pidof
の場合,プロセス名が完全一致しないとヒットしないので,より曖昧さを取り除くことができます.
みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-74359097767975220102021-02-22T00:05:00.003+09:002021-03-17T00:38:00.092+09:00Linux でGUI を自動操作するツール【自作】GUI の自動ツールとしては,xdotool
などが有名だが,そういったツールを使用できない場合は自作するのもひとつの手段.<br />
<br />
マウスポインターを指定した座標に動かして,クリックするだけのプログラムならば,数行のコードで実現できる.<br />
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
click.c
--------------------------------------------------------------------------------
#include <stdlib.h>
#include <X11/extensions/XTest.h>
int main ( int argc, char ** argv )
{
// Arguments 1 is Point of X, Argument 2 is Point of Y
int position[2] = {atoi ( argv[1] ), atoi ( argv[2] ) };
// Open Default Display
Display * display = XOpenDisplay ( NULL );
if ( display != NULL )
{
// Open 'Virtual core XTEST pointer'
XDevice * device = XOpenDevice ( display, 4 );
if ( device != NULL )
{
// Move Poitner
XTestFakeDeviceMotionEvent ( display, device, False, 0, position, 2, 0 );
// Press & Release Left Button
XTestFakeDeviceButtonEvent ( display, device, Button1, True, NULL, 0, 0 );
XTestFakeDeviceButtonEvent ( display, device, Button1, False, NULL, 0, 0 );
XCloseDevice ( display, device );
}
XCloseDisplay ( display );
}
return 0;
}
</pre>
<br />
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ gcc -lX11 -lXi -lXtst click.c -o click
$ ./click 100 500
</pre>
<a name='more'></a>
<br />
<br />
DISPLAYや,デバイスIDを引数で指定できるようにすると,こんな感じ.<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
click2.c
--------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <X11/extensions/XTest.h>
struct Arguments
{
char * DisplayName;
XID DeviceID;
int Position[2];
};
int getOptions ( int, char **, struct Arguments * );
int main ( int argc, char ** argv )
{
struct Arguments args;
args.DisplayName = NULL;
args.DeviceID = 4;
args.Position[0] = 0;
args.Position[1] = 0;
if ( getOptions ( argc, argv, &args ) != 0 )
{
return 1;
}
Display * display = XOpenDisplay ( args.DisplayName );
if ( display != NULL )
{
XDevice * device = XOpenDevice ( display, args.DeviceID );
if ( device != NULL )
{
// Move Poitner
XTestFakeDeviceMotionEvent ( display, device, False, 0, args.Position, 2, 0 );
// Press & Release Left Button
XTestFakeDeviceButtonEvent ( display, device, Button1, True, NULL, 0, 0 );
XTestFakeDeviceButtonEvent ( display, device, Button1, False, NULL, 0, 0 );
XCloseDevice ( display, device );
}
XCloseDisplay ( display );
}
return 0;
}
int getOptions ( int argc, char ** argv, struct Arguments * args )
{
for ( int i = 0; i < argc; i++ )
{
int option = getopt ( argc, argv, "d:i:" );
if ( option == -1 )
{
break;
}
switch ( option )
{
case 'd':
memcpy ( & ( args->DisplayName ), &optarg, sizeof ( optarg ) );
break;
case 'i':
args->DeviceID = atoi ( optarg );
break;
default:
puts ( "Option Error!" );
return -1;
}
}
if ( argc < optind + 2 )
{
puts ( "Too few arguments" );
return -1;
}
for ( int i = 0; i < 2; i++ )
{
args->Position[i] = atoi ( argv[i + optind] );
}
if ( args->DisplayName != NULL )
{
printf ( "Display Name : %s\n", args->DisplayName );
}
printf ( "Device ID : %d\n", ( int ) args->DeviceID );
printf ( "Position : %d, %d\n", args->Position[0], args->Position[1] );
return 0;
}
</pre>
<br>
<br>
DISPLAYは-dオプションで指定,デバイスIDは-iオプションで指定する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ gcc -lX11 -lXi -lXtst click2.c -o click2
$ ./click2 -d localhost:0.0 -i 4 100 500
Display Name : localhost:0.0
Device ID : 4
Position : 400, 500
</pre>みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-57140660761670569982021-02-15T22:51:00.001+09:002021-03-17T00:39:03.225+09:00Subversionの接続先のURLを変更するサーバーの老朽化や,VPSの引っ越し,その他設定の見直し等々,Subversion のホストが変更になることは珍しいことではない.<br>
<br>
接続先が変更された場合,ローカルのチェックアウトを無かったことにしてしまうのも一つの手だが,コミットする前の変更ファイルを引き継ぎたい場合などは,接続先を変更すると良い.<br>
<br>
といっても,とても簡単で,svn switch --relocate [変更前の接続先] [変更後の接続先] とするだけ.<br>
<a name='more'></a>
<br>
まず,ローカルのチェックアウトしたフォルダに移動し,svn info で現在の接続先を確認する
<pre style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0">
$ cd LocalCheckout
$ svn info | grep ^URL
URL: svn://aaa.bbb.ccc.ddd/hogehoge
</pre>
<br>
<br>
これが変更前の接続先になるので,例えば,svn://eee.fff.ggg.hhh/piyopiyo に変更する場合,以下のようにする.
<pre style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0">
$ svn switch --relocate svn://aaa.bbb.ccc.ddd/hogehoge svn://eee.fff.ggg.hhh/piyopiyo
</pre>
<br>
リポジトリの容量次第でしばらく時間がかかるが,プロンプトに応答が返ってくれば接続先の変更は完了.<br>
<br>
試しに,svn up してみて問題なく動作すれば,接続先の変更は成功だ.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-36237859540324363172021-02-10T00:52:00.002+09:002021-03-17T00:39:20.055+09:00【MySQL】 ソートで NULL を一番最後にするとき,IS NULL ASC としてはいけない理由.少々挑戦的なタイトルですが,<b>本当は IS NULL ASC で全然構いません.(笑)</b>
<br />
<br />
ただ私が言いたいのは,魔法の呪文のように意味も分からず IS NULL ASC
とするのはやめたほうが良い.
<br />
より厳密には,それだけ覚えてしまうのは<b>勿体無い</b>.ということです.
<br />
<br />
IS NULL ASC のように ORDER BY
句を用いれば,様々な条件でソートすることができるので,この記事では,<br />
なぜ IS NULL ASC で NULL
を後ろにできるのか実演しながら,より汎用的な条件付きソートについて考えていきます.<br />
<br />
サンプルとして以下のようなテーブルを用意しました.(例によってラズパイを使っているので
MariaDBですが,基本的に MySQL でも同じです)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [sample]> SELECT * FROM SAMPLE;
+------+-------+
| id | value |
+------+-------+
| 1 | 0 |
| 2 | 10 |
| 3 | 4 |
| 4 | NULL |
| 5 | 8 |
| 6 | 1 |
| 7 | 3 |
| 8 | 2 |
| 9 | NULL |
| 10 | -5 |
+------+-------+
</pre>
<br />
<a name='more'></a>
これを普通に ORDER BY するとこうなります.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [sample]> SELECT * FROM SAMPLE <b>ORDER BY value</b>;
+------+-------+
| id | value |
+------+-------+
| 9 | NULL |
| 4 | NULL |
| 10 | -5 |
| 1 | 0 |
| 6 | 1 |
| 8 | 2 |
| 7 | 3 |
| 3 | 4 |
| 5 | 8 |
| 2 | 10 |
+------+-------+
</pre>
<br />
このとき NULL を一番後ろにするには,ORDER BY に IS NULL ASC
を付けると良い.というのがよく見る解説です.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [sample]> SELECT * FROM SAMPLE ORDER BY value <b>IS NULL ASC</b>, value;
+------+-------+
| id | value |
+------+-------+
| 10 | -5 |
| 1 | 0 |
| 6 | 1 |
| 8 | 2 |
| 7 | 3 |
| 3 | 4 |
| 5 | 8 |
| 2 | 10 |
| 4 | NULL |
| 9 | NULL |
+------+-------+
</pre>
<br />
これが冒頭で魔法の呪文に例えた部分ですが,実のところ,これは単に
<b>ORDER BY 句で2つの要素を指定してソートしている</b>だけです.<br />
<br />
ここで言う,2つの要素とは,
<ul>
<li>value IS NULL</li>
<li>value</li>
</ul>
<br />
の2つ.そして,前者は明示的に昇順(Ascent:ASC),後者は暗黙(デフォルト)で昇順(Ascent:ASC)としています.<br />
<br />
まだ良くわからない.という人は次の結果を見てください.(太字箇所の類似性に注目)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [sample]> SELECT id, <b>value IS NULL, value</b> FROM SAMPLE ORDER BY <b>value IS NULL ASC, value</b>;
+------+---------------+-------+
| id | value IS NULL | value |
+------+---------------+-------+
| 10 | 0 | -5 |
| 1 | 0 | 0 |
| 6 | 0 | 1 |
| 8 | 0 | 2 |
| 7 | 0 | 3 |
| 3 | 0 | 4 |
| 5 | 0 | 8 |
| 2 | 0 | 10 |
| 4 | 1 | NULL |
| 9 | 1 | NULL |
+------+---------------+-------+
</pre>
<br />
いかがでしょうか.
<br />
<br />
つまり,<b>value IS NULL</b> は value が NULL
のとき1,それ以外のとき0を返すような条件分で,それを昇順にソートしつつ,value
でも昇順にソートしているわけです.
<br />
<br />
以上を踏まえると,例えば,NULL
または負の数を後ろにしたいときは,以下のように条件を組み合わせます.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [sample]> SELECT id, <b>value IS NULL, value < 0, value</b> FROM SAMPLE ORDER BY <b>value IS NULL ASC, value < 0 ASC, value</b>;
+------+---------------+-----------+-------+
| id | value IS NULL | value < 0 | value |
+------+---------------+-----------+-------+
| 1 | 0 | 0 | 0 |
| 6 | 0 | 0 | 1 |
| 8 | 0 | 0 | 2 |
| 7 | 0 | 0 | 3 |
| 3 | 0 | 0 | 4 |
| 5 | 0 | 0 | 8 |
| 2 | 0 | 0 | 10 |
| 10 | 0 | 1 | -5 |
| 4 | 1 | NULL | NULL |
| 9 | 1 | NULL | NULL |
+------+---------------+-----------+-------+
</pre>
<br />
便利ですが,だんだん混乱してきますね.
<br />
<br />
そもそも,条件を付けるときは,手前に持ってきたい値の条件を考えるのが直感的だと私は思います.<br />
今回の例で言うならば,<b>NULLでなく,0以上のものを手前に抽出したい,</b>と.
<br />
<br />
なので,そうします.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [sample]> SELECT id, value IS <b>NOT</b> NULL, value <b>>=</b> 0, value FROM SAMPLE ORDER BY value IS <b>NOT</b> NULL <b>DESC</b>, value <b>>=</b> 0 <b>DESC</b>, value;
+------+-------------------+------------+-------+
| id | value IS NOT NULL | value >= 0 | value |
+------+-------------------+------------+-------+
| 1 | 1 | 1 | 0 |
| 6 | 1 | 1 | 1 |
| 8 | 1 | 1 | 2 |
| 7 | 1 | 1 | 3 |
| 3 | 1 | 1 | 4 |
| 5 | 1 | 1 | 8 |
| 2 | 1 | 1 | 10 |
| 10 | 1 | 0 | -5 |
| 4 | 0 | NULL | NULL |
| 9 | 0 | NULL | NULL |
+------+-------------------+------------+-------+
</pre>
<br>
条件一致が1,不一致が0なので,手前に抽出したい条件を指定して,<b>降順(Descent:DESC)</b>にすれば良いわけです.
<br>
<br>
というわけでタイトル回収.<br>
<br>
ソートで NULL を一番最後にするとき,IS NULL ASC ではなく,IS NOT NULL DESC を用いましょう.
<br />
<br>
余計に魔法の呪文のようになってしまったと言えなくもないですが,考えて条件を指定するときは直感的になると思います.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-69390821640243884202021-02-07T17:22:00.127+09:002021-03-17T00:39:37.683+09:00【MySQL,MariaDB】 レプリケーションを設定するデータベースでマスタースレーブ型のレプリケーションを設定する方法を示す.<br />
手元のラズパイ2台を使用するため,MariaDBで設定するが,基本的にはMySQLも同様の方法でできるはずだ.
<br />
<br />
データベースの初期設定手順は以下のエントリーを参照されたし.<br />
<a href="https://nort-wmli.blogspot.com/2019/06/raspberry-pi-mysqlmariadb.html"
>WM×LI: Raspberry Pi にデータベースを構築する【MySQL,MariaDB】</a
>
<br />
<a name='more'></a>
<br />
<h2>【マスター側】</h2>
<br />
初めに設定ファイルを編集する.(server-id
は任意の数字で構わないが,スレーブとは異なる値にする)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/mysql/mariadb.conf.d/50-server.cnf
----------------------------------------
[mysqld]
server-id=1 ←追記する
log-bin ←追記する
</pre>
<br />
MariaDB にログインし,レプリケーション用のユーザーを作成する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
</pre>
<br />
マスター情報が Empty であることを確認しておく.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> SHOW MASTER STATUS\G;
Empty set (0.001 sec)
</pre>
<br />
Empty ではなく,マスター情報が表示された場合はマスター情報をリセットしておく.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
mysql> RESET MASTER;
</pre>
<br />
MariaDB を再起動する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
mysql> QUIT;
$ sudo systemctl restart mysql
</pre>
<br />
MariaDB
に再ログインして,マスター情報を取得する.(ファイル名とポジションはスレーブ側の設定で使うのでメモる)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> SHOW MASTER STATUS\G;
*************************** 1. row ***************************
File: mysqld-bin.000001
Position: 329
Binlog_Do_DB:
Binlog_Ignore_DB:
</pre>
<br />
この状態でマスター側はいったん置いておく.<br />
<br />
<br />
<h2>【スレーブ側】</h2>
<br />
スレーブ側も,設定ファイルの編集から実施する.(replicate-do-db
は同期するデータベースを記入する)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
/etc/mysql/mariadb.conf.d/50-server.cnf
----------------------------------------
[mysqld]
server-id=2 ←追記する
replicate-do-db=repl_db ←追記する
</pre>
<br />
MariaDBを再起動する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl restart mysql
</pre>
<br />
MariaDBにログインして,スレーブ情報を表示する
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> SHOW SLAVE STATUS\G;
Empty set (0.001 sec)
</pre>
<br />
もし,Empty
ではなく,スレーブ情報が色々と表示された場合は,スレーブを停止→リセットし,MySQLを再起動する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
mysql> STOP SLAVE;
mysql> RESET SLAVE;
mysql> QUIT;
$ sudo systemctl restart mysql
</pre>
<br />
スレーブとして動作するための設定を CHANGE MASTER 文で実行する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST='master', ←マスター側のホスト名orIPアドレス
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl',
-> MASTER_LOG_FILE='mysqld-bin.000001',
-> MASTER_LOG_POS=329;
mysql> START SLAVE;
</pre>
<br />
スレーブ情報を取得する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000001
Read_Master_Log_Pos: 329
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 556
Relay_Master_Log_File: mysqld-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: repl_db
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 329
(以下,略)
</pre>
<br />
多くの情報が表示されるが重要なことは以下の二点.
<ul>
<li>Slave_IO_Stateが "Waiting for master to send event" であること</li>
<li>
Read_Master_Log_Pos 及び Exec_Master_Log_Pos が共に,マスター側のPosition
と等しいこと
</li>
</ul>
<br />
<br />
<br />
以上を確認できた場合,置いておいたマスター側に戻り,repl_db を作成する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> CREATE DATABASE repl_db;
</pre>
<br />
再びスレーブ側でデータベースを確認すると,repl_db が作成されている(はず)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| repl_db | ← repl_dbが作成されている
+--------------------+
</pre>
<br />
最後にマスター情報とスレーブ情報を再確認する.マスター情報のPosition,スレーブ情報のRead_Master_Log_Pos
及び Exec_Master_Log_Pos がそれぞれ増加していることがわかる.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> SHOW MASTER STATUS\G;
*************************** 1. row ***************************
File: mysqld-bin.000002
Position: 464
Binlog_Do_DB:
Binlog_Ignore_DB:
</pre>
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000001
Read_Master_Log_Pos: 464
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 691
Relay_Master_Log_File: mysqld-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: repl_db
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 464
(以下,略)
</pre>
<br />
マスター・スレーブ相互に同期したい場合は,同様の設定を逆向きに設定するだけ.<br>
<br>
また,既存のデータベースのレプリケーションを作成する場合は,データを一旦エクスポートしてスレーブ側でインポートする必要がある.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-83512480010078034702021-02-07T16:52:00.001+09:002021-03-17T00:39:55.013+09:00Raspberry Pi のモデル名を確認する性能が段違いなので,基本的なことはラズパイ4 にやらせているが,敢えてラズパイ4 からは切り離して可動させているサービスもあったりするので,我が家ではラズパイ3,ラズパイ2 もまだまだ現役だ.<br>
<br>
基本,ホスト名で判別しているが,どのラズパイがどのモデルだったか分からなくなることが時々ある.<br>
<br>
そんなときは,/proc/device-tree/mode を確認すると,モデル名が表示される.<br>
<a name='more'></a>
<br>
ラズパイ2 の場合<br>
<pre style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0">
$ more /proc/device-tree/model
Raspberry Pi 2 Model B Rev 1.1
</pre>
<br>
ラズパイ3 の場合<br>
<pre style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0">
$ more /proc/device-tree/model
Raspberry Pi 3 Model B Rev 1.2
</pre>
<br>
ラズパイ4 の場合<br>
<pre style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0">
$ more /proc/device-tree/model
Raspberry Pi 4 Model B Rev 1.2
</pre>
<br>
cat コマンドを使用するとなぜか改行されずに表示されるので,more コマンドで参照する方法を紹介した.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-59267723591128312322021-02-06T20:45:00.003+09:002021-03-17T00:40:13.604+09:00Raspberry Pi で初回起動時からsshでアクセスする方法何番煎じかわからないけれど,Raspberry Pi用のmicro SDカードにRaspberry Pi
OSをインストールした直後の初回起動時からsshでアクセスできるようにする方法.<br />
<br />
<b>結論から言うと,/boot/ 直下に ssh という名前のファイルを置くだけ.</b>
<br />
<br />
それでは細かい手順を解説します.<br />
<a name='more'></a>
<br />
<h2>【OSのインストール】</h2>
<br />
インストール済みの人は読み飛ばしてください.<br />
<br />
Raspberry Pi の公式HPからOSのイメージをダウンロードする(.torrent
ファイルの方が早くてオススメです)<br />
<a href="https://www.raspberrypi.org/software/operating-systems/"
>https://www.raspberrypi.org/software/operating-systems/</a
>
<br />
<br />
.torrent
ファイルを落とした場合は,BitTorrentクライアントソフトで受信する.(終了したらCtrl+Cで止める)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ transmission-cli -w . 2021-01-11-raspios-buster-armhf-lite.zip.torrent
</pre>
<br />
受信したzipファイルのハッシュ値を確認する.(OSのダウンロードサイトにハッシュ値が載っているので照合する)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sha256sum 2021-01-11-raspios-buster-armhf-lite.zip
d49d6fab1b8e533f7efc40416e98ec16019b9c034bc89c59b83d0921c2aefeef 2021-01-11-raspios-buster-armhf-lite.zip
</pre>
<br />
zipファイルを解凍する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ unzip 2021-01-11-raspios-buster-armhf-lite.zip
Archive: 2021-01-11-raspios-buster-armhf-lite.zip
inflating: 2021-01-11-raspios-buster-armhf-lite.img
</pre>
<br />
イメージファイルをmicroSDカードに書き込む.(途中経過が表示されるので,ddよりもddrescueを推奨します)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo ddrescue --force 2021-01-11-raspios-buster-armhf-lite.img /dev/sdb
GNU ddrescue 1.23
Press Ctrl-C to interrupt
ipos: 1862 MB, non-trimmed: 0 B, current rate: 2424 kB/s
opos: 1862 MB, non-scraped: 0 B, average rate: 14898 kB/s
non-tried: 0 B, bad-sector: 0 B, error rate: 0 B/s
rescued: 1862 MB, bad areas: 0, run time: 2m 4s
pct rescued: 100.00%, read errors: 0, remaining time: n/a
time since last successful read: n/a
Finished
</pre>
<br />
<br />
<h2>【microSDカードのマウント及びsshファイルの作成】</h2>
<br />
一時ディレクトリを作成して,microSDカードの一番目のパーティションをマウントする
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ mktemp -d
/tmp/tmp.0d9rgrOiIT
$ sudo mount /dev/sdb1 /tmp/tmp.0d9rgr0iIT
</pre>
<br />
一時ディレクトリに移動して,sshファイルを作成する.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cd /tmp/tmp.0d9rgr0iIT
$ sudo touch ssh
</pre>
<br />
元のディレクトリに戻り,microSDカードをアンマウントする.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cd -
$ sudo umount /dev/sdb1
$ rmdir /tmp/tmp.0d9rgr0iIT
</pre>
<br />
<br />
<h2>【Raspberry Piにsshでアクセスする】</h2>
<br />
起動したRaspberry PiのIPアドレスを探す.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ arp
Address HWtype HWaddress Flags Mask Iface
192.168.100.108 ether b8:27:eb:XX:XX:XX C br0
</pre>
<br />
sshでアクセスする
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ssh pi@192.168.100.108
pi@192.168.100.108's password: ← 初期パスワードは'raspberry'になっている
</pre>
<br />
実際にssh及びsshdが自動起動される設定になっているか確認する<br />
(すでに,sshでアクセスできている時点でそうなっているに決まっているが.)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo systemctl is-enabled ssh sshd
enabled
enabled
</pre>
<br>
<br>
ずいぶん前からセキュリティ対策のためにデフォルトでssh無効になってしまったが,モニターレスで使う場合,非常に面倒くさい..orzみらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-56022368494492070372021-02-04T23:17:00.004+09:002021-03-17T00:40:29.095+09:00マルチスレッドなプログラムをgdbでデバッグするたまにはエンジニアらしくソフトウェアのお話を.<br />
<br />
マルチスレッドなプログラムを書くとき,
常に念頭に置きながら設計しなければならないのが排他制御だが,そんなとき,どの処理がどのスレッドで実施されているか表示できることは非常に有効なテクニックだ.<br />
<br />
そこで次のようなコードで実験する.
<br />
<br />
<サンプルコード:test.cpp>
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
test.cpp
--------------------------------------------------------------------------------
#include <iostream>
#include <thread>
#include <unistd.h>
void a( void )
{
for( int i = 0; i < 30; i++ )
{
std::cout << "i : " << i << std::endl;
sleep( 1 );
}
}
void b( void )
{
for( int j = 0; j < 10; j++ )
{
std::cout << "j : " << j << std::endl;
sleep( 3 );
}
}
int main( void )
{
std::thread * _a = new std::thread( a );
std::thread * _b = new std::thread( b );
_a->join();
_b->join();
return 0;
}
※本来は,coutする前後でmutexを貼る必要があるが,今回は可読性重視で割愛する.
</pre>
<br />
これをコンパイルして,gdbで実行する
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ g++ -g -pthread test.cpp -o test
$ gdb ./test
</pre>
<a name='more'></a>
<br />
gdbに制御が移るので,マルチスレッドで処理している関数a及び関数bにそれぞれブレイクポイントを設定する.<br />
(それぞれstd::cout
の行にブレイクポイントを設定したので,文字列が出力される直前で動作が停止する)
<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
(gdb) break test.cpp:9
Breakpoint 1 at 0x11fa: file test.cpp, line 9.
(gdb) break test.cpp:18
Breakpoint 2 at 0x125a: file test.cpp, line 18.
</pre>
<br />
ここで,runすると,9行目のブレイクポイントで停止した.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
(gdb) run
Starting program: /home/mirasuni/test
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff7ab2700 (LWP 5638)]
[New Thread 0x7ffff72b1700 (LWP 5639)]
[Switching to Thread 0x7ffff7ab2700 (LWP 5638)]
Thread 2 "test" hit Breakpoint 1, a () at test.cpp:9
9 std::cout << "i : " << i << std::endl;
</pre>
<br>
info threads でスレッド情報を取得すると,2つめのスレッドで停止していることがわかる.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
(gdb) info threads
Id Target Id Frame
1 Thread 0x7ffff7ab3740 (LWP 5634) "test" clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:78
* 2 Thread 0x7ffff7ab2700 (LWP 5638) "test" a () at test.cpp:9
3 Thread 0x7ffff72b1700 (LWP 5639) "test" clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:78
</pre>
<br>
continueして次のブレイクポイントまで移動.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
(gdb) continue
Continuing.
[Switching to Thread 0x7ffff72b1700 (LWP 5639)]
Thread 3 "test" hit Breakpoint 2, b () at test.cpp:18
18 std::cout << "j : " << j << std::endl;
</pre>
<br>
再びinfo threads でスレッド情報を取得すると,今度は3つめのスレッドで停止していることがわかる.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
(gdb) info threads
Id Target Id Frame
1 Thread 0x7ffff7ab3740 (LWP 5634) "test" clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:78
2 Thread 0x7ffff7ab2700 (LWP 5638) "test" 0x0000555555555201 in a () at test.cpp:9
* 3 Thread 0x7ffff72b1700 (LWP 5639) "test" b () at test.cpp:18
</pre>
<br>
<br>
単純なプログラムであれば,深く考えるまでも無いが,複数の処理が複雑に絡み合っている場合,色々と考えを巡らせるより,さっさとデバッグ情報を調べたほうが単純かつ明確だったりする.<br>
<br>
それよりも重要なことは,安易にマルチスレッド化に走らず,まずはシングルスレッドで効率よく処理できるよう設計することだけれども.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-44970068898602176942021-01-17T21:47:00.001+09:002021-03-17T00:40:45.616+09:00理想の手帳が無かったので自作してみた.一冊から製本できるオンデマンド印刷サービス"製本直送.com"が便利.年が明けてから2週間以上も過ぎてしまいましたが,ようやく今年の手帳が届きました.<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ8DwZaW6fjMj_PnfdAP4nxIr55UnVGAZrxMVnPumLrHASKW2Jt2i7FL94FfwJe9bZa5GDANwQbT-xCBwCdBqBhYsuRKUG3VvGWiFidym-Nr2oLRHSENSrCZQhI4hX7cVoqDpPwGW65glK/s2048/P1177381.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ8DwZaW6fjMj_PnfdAP4nxIr55UnVGAZrxMVnPumLrHASKW2Jt2i7FL94FfwJe9bZa5GDANwQbT-xCBwCdBqBhYsuRKUG3VvGWiFidym-Nr2oLRHSENSrCZQhI4hX7cVoqDpPwGW65glK/s600/P1177381.jpg"
/></a>
</div>
<br />
<br />
ここ数年は取引先の会社から頂いた手帳を使わせてもらっていましたが,いつまでも同じ会社と取引が続くとも限らないし,他社のロゴが入った手帳を持ち歩くのもなんだか虚しい...そこで昨年の12月,「来年はちゃんと自分で買った手帳を使おう」と,本屋の手帳コーナーで色々と手にとってみたのですが,理想の手帳は見つかりませんでした.<br />
<br />
<a name='more'></a>
ちなみに私の求める条件は,まず全般として,
<ul>
<li>一週間の始まりは月曜日</li>
<li>
前年の12月始まりで,翌年の3月終わり,かつ,<b
>その全てが同じ大きさであること</b
><br />(前年12月や翌年1月以降のページだけ枠が小さい手帳をよく見かけますが,私はあれが好きになれません)
</li>
</ul>
<br />
次に個々のページの条件として,
<ul>
<li><u>年間カレンダー</u>は今年と来年の二年分</li>
<li>
メインページは<u>バーティカル式の見開き一週間</u>で,<b
>土日が平日と同じサイズ</b
>
</li>
<li>サブページは<u>月間横ケイ式の見開き二ヶ月</u></li>
<li>メモページは多め</li>
<li>アドレスページは不要</li>
<li>付録ページは最小限(あると便利かと思いきや,実はほとんど使わないので)</li>
</ul>
<br />
条件が細かすぎる自覚はありますが,せっかく買うなら妥協はしたくありません.見つからないならいっそのこと,ノートにボールペンで線を引いて自作しようかと考え,自作手帳に向いているノートをネットで検索すると,<br />
<br />
<font size="+1">
<b>手帳を自作・製本したというブログを見つけました.</b>
</font>
<br />
<br />
<a
href="https://amamimori.hatenablog.com/entry/2018/09/22/193000"
target="_blank"
rel="nofollow"
>自作手帳① 個人が1冊から注文できる印刷・製本サービス - 文具クエスト
(ブンクエ)</a
>
<br />
<br />
<br />
ここで紹介されていたのが,今回利用させて頂いた一冊から格安で製本できる
<a href="https://www.seichoku.com/" target="_blank">「製本直送.com」</a>
というサービス.試しにサイト内の料金シミュレーターにページ数を入力してみると,1,000円ちょっとで製本できることが判りました.この値段なら本屋で買っても変わらないし,自作すれば完全に理想通りのものが手に入ります.<br />
<br />
入稿データもPDF形式ということだったので,理想の手帳を探すことから,理想の手帳を作ることにシフトし,早速LaTeXで文書作成に取り掛かりました.<br />
<br />
最初に年間カレンダー,バーティカル式見開き週間ページ,月間横ケイ式の見開きページ,メモページのレイアウトをそれぞれ作成し,次に各ページを一括で作成するためのシェルスクリプトを作成しました.その際,祝日データを読み込んでそれぞれ文字の色を変更する工夫も加えました.<br />
<br />
また,前述の通り私は付録ページをほとんど使ってきませんでしたが,それは<b
>内容が私に合っていなかったからだ</b
>
と考え直し,仕事中に検索して調べることが多い<u>vimのチートシート</u>
と
<u>HHKBのキー配列表</u>
を作成.それらを合わせて理想の手帳が完成しました.<br />
<br />
ここから,それぞれのレイアウトを紹介します.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2dKxE8S2fiBnQHPLUBse_riaqFNNNMTU0rQ98wfz9offlrgdbTTArwd3KQI8pH-LW-SeQaw9O57mrpVhbRVx8SjCBaE45Y0kSn9SCPAQaxoW-9y6rb6b4VQ3W89X15iSQKbCE2USLLh-v/s2048/calendar-3.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="400"
data-original-height="1436"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2dKxE8S2fiBnQHPLUBse_riaqFNNNMTU0rQ98wfz9offlrgdbTTArwd3KQI8pH-LW-SeQaw9O57mrpVhbRVx8SjCBaE45Y0kSn9SCPAQaxoW-9y6rb6b4VQ3W89X15iSQKbCE2USLLh-v/s400/calendar-3.png"
/></a>
</div>
<div style="text-align: center;">
年間カレンダー<br />
見開きで今年と翌年を表示.土曜日は青文字,日曜・祝日は赤文字に変更しています.
</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU3Zs5uNtHIiiBDiQri-bbadmTF-n8Cah4VJm_ui_EFcQ8Nu85Hsc2eF6EeusQb2TQRb1LEWmaHd2fdeSUITG0Lkthq0emusX7gRZDHvN6r7Uikw3JlDb48o7bK2-R7rEl1A5U-n04Lydd/s2048/monthly-3.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="400"
data-original-height="1436"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU3Zs5uNtHIiiBDiQri-bbadmTF-n8Cah4VJm_ui_EFcQ8Nu85Hsc2eF6EeusQb2TQRb1LEWmaHd2fdeSUITG0Lkthq0emusX7gRZDHvN6r7Uikw3JlDb48o7bK2-R7rEl1A5U-n04Lydd/s400/monthly-3.png"
/></a>
</div>
<div style="text-align: center;">
バーティカル式見開き一週間<br />
見開きで左ページに月曜から水曜,右ページに木曜から日曜を表示.<br />
左ページは3日分でスペースが余るので,前月・今月・翌月のカレンダーも載せています.<br />
また祝日のほか,会社の休日も赤字で表示しています.
</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1mksx-rVF7sjFTtiKeoMd8YcuIQXIFsQO3iR4-AH79lyAm1iGzi1KFQ2XWQouxH0nA6JYMQEISThKR3XlUSXZXBBw3NpyrK0EoOqv1H7plbf2VWoRjaEFlyKg2LTYWZe6rBjv_rra9Bk/s2048/weekly-3.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="400"
data-original-height="1436"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1mksx-rVF7sjFTtiKeoMd8YcuIQXIFsQO3iR4-AH79lyAm1iGzi1KFQ2XWQouxH0nA6JYMQEISThKR3XlUSXZXBBw3NpyrK0EoOqv1H7plbf2VWoRjaEFlyKg2LTYWZe6rBjv_rra9Bk/s400/weekly-3.png"
/></a>
</div>
<div style="text-align: center;">
月間横ケイ式の見開き二ヶ月<br />
このページは至ってシンプルに.
</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw5lTw-fmFS3PD-t8XQD1Yx1O4yqgdV9GP4G2oi5OBATw8se_OQMlgAjMmMR4dqoVkdNGIpfK5vFJW-JcScDoP_9LIUEhkkrxBCgaaNYAZQJ_kgzHdozqucbbk2PuDp59Mwuwnb8fYXv-X/s2048/memo-3.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="400"
data-original-height="1436"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw5lTw-fmFS3PD-t8XQD1Yx1O4yqgdV9GP4G2oi5OBATw8se_OQMlgAjMmMR4dqoVkdNGIpfK5vFJW-JcScDoP_9LIUEhkkrxBCgaaNYAZQJ_kgzHdozqucbbk2PuDp59Mwuwnb8fYXv-X/s400/memo-3.png"
/></a>
</div>
<div style="text-align: center;">
メモページ<br />
行番号とページ番号を表示しています.<br />
ページ番号はメモページのみに表示するようにし,冊子としては途中からですが,敢えて1から番号を振ってみました.
</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5hbphyphenhyphenfG1pFW9hek5CVEE6Ha_vr2qxt8akkR_kScq0XcrU1MKkiSABJ3zlBi-5sxMf5H3rLjExtUCG3K6shTstryxQ8i4nC1g9Yzua7aZLtbI_de-iePElHHR9GE9IJvjgk_KJ_SrOfMQ/s2048/vim-3.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="400"
data-original-height="1436"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5hbphyphenhyphenfG1pFW9hek5CVEE6Ha_vr2qxt8akkR_kScq0XcrU1MKkiSABJ3zlBi-5sxMf5H3rLjExtUCG3K6shTstryxQ8i4nC1g9Yzua7aZLtbI_de-iePElHHR9GE9IJvjgk_KJ_SrOfMQ/s400/vim-3.png"
/></a>
</div>
<div style="text-align: center;">
vimのチートシート<br />
ここに表示しているのは基本的なキーばかりですが,次ページ以降にあまり多用しない上級者向けのキーもたくさん載せています.
</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLrpdwyZXTlKnxi5eGkLek1HLSUaG-rtg2wGy_1bXkyni2OlxhyiqZdJ3gh4CgacIUGteBN5gqqTvomRACNdwbHGGRAp76m7Of4PgOhhCEJhcwEHXlZffwAzhXUm6oNH9RtS1o4uIikMdk/s1701/hhkb-1.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="200"
data-original-height="1701"
data-original-width="1213"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLrpdwyZXTlKnxi5eGkLek1HLSUaG-rtg2wGy_1bXkyni2OlxhyiqZdJ3gh4CgacIUGteBN5gqqTvomRACNdwbHGGRAp76m7Of4PgOhhCEJhcwEHXlZffwAzhXUm6oNH9RtS1o4uIikMdk/s400/hhkb-1.png"
/></a>
</div>
<div style="text-align: center;">
HHKBのキーレイアウト<br />
Fnキー押下時のキー変化だけどうしても覚えられないので,必要なときに参照するつもりです.
</div>
<br />
そして,完成したPDFデータを製本直送.com
に入稿しました.カラー印刷にしたことや,用紙のサンプルも合わせて注文したため当初予算よりだいぶオーバーし,送料込みで2,178円の費用がかかりました.そこから待つこと11日間.ようやく手帳が届きました.概ね,思い描いていた通りの出来栄えでしたが,気になるところもあるので,来年の手帳作成に向けて反省点を記載します.<br />
<br />
<h2>反省点①:閉じしろを小さく設定しすぎた</h2>
製本直送.com の入稿ガイドにはMicrosoft
Wordでのレイアウト設定方法が載っていて,<u
>閉じしろは設定せず余白のみを6〜20mmに設定する</u
>
とありましたが,LaTexでは偶数ページと奇数ページで余白のサイズを個別に設定することが可能なので,左右の余白を7mm,閉じしろを8mmに設定しました.(閉じられる側は15mmの余裕があり,反対側は7mmの余裕があるということ)
<br />
<br />
読み物として見たとき,この設定は理想的な値でしたが,手帳は書き込んでなんぼ.始めの方のページや後ろの方のページは問題ありませんでしたが,真ん中あたりのページではどうしても開く範囲が狭まるので,見開き一週間ページで言うと,水曜,木曜が書き込みにくくなってしまいました.<br />
<br />
単純に閉じしろを増やすだけで解決すると断言はできませんが,次回は改善したいと思います.
<br />
<br />
<h2>反省点②:カラー印刷は料金が高くなる</h2>
今回,土曜日は青文字,日曜・祝日は赤文字に装飾して印刷をお願いしましたが,逆に言うと色をつけたのその部分のみ.カラー印刷はモノクロ印刷と比べてざっと倍の費用になるので,これだけのためにカラー印刷するのは勿体無いと思いました.<br />
<br />
次回は,グレー(色を薄くする)だけで土曜・日曜・祝日を見やすく表現できる方法を模索してみたいと思います.<br />
<br />
反省点は以上の2点のみです.初挑戦だったので,もっと「こんなはずじゃなかった」が出てくると思いましたが,予想以上に上手く作ることができたと思います.<br />
<br />
次に,今回,手帳を自作してみて気づいた自作手帳のメリットを挙げてみたいと思います.
<ul>
<li>理想のレイアウトを実現できる</li>
<li>メモページなどのページ数も自由に決められる</li>
<li>会社の休日など,個人的な予定も反映できる</li>
<li>
<b>来年以降も手帳を探す必要がない</b>
</li>
<li><b>手帳を使うのが楽しくなる</b></li>
<li><u>技術力が付く(※LaTeXや自動生成のための技術力.)</u></li>
</ul>
<br />
それでは最後に各ページを写真でお送りして,今回は終わりたいと思います.
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr0RGpNf6g6OUu6ueT1D7xUBZ62DYKCjuebnkJ6U5z2YNqua9mgKl6W0HohY8qWnLJcaYgIGXIAV3Cc6YDyq-vv72_HlUzCMpOrOCJxG1T5a-ceOxKtjPFgO7W-aoDP44kslpUqYRvSqcZ/s2048/P1177393.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr0RGpNf6g6OUu6ueT1D7xUBZ62DYKCjuebnkJ6U5z2YNqua9mgKl6W0HohY8qWnLJcaYgIGXIAV3Cc6YDyq-vv72_HlUzCMpOrOCJxG1T5a-ceOxKtjPFgO7W-aoDP44kslpUqYRvSqcZ/s600/P1177393.jpg" /></a
>表紙の次に,アイボリーの遊び紙を設けています.
</div>
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsIv17i_4QtQfaOQ5_vz3mga2-QwCydyqJYURBuzzyjecf7-6c8M9ZVKwIyf38g4McFkRd-V1JimuEWc_TjqelYmk_Go5Yu_jPWd0zzVPf-gvLkqoUxttpC9Eksq25KQxaKsoyQKoWv40-/s2048/P1177395.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsIv17i_4QtQfaOQ5_vz3mga2-QwCydyqJYURBuzzyjecf7-6c8M9ZVKwIyf38g4McFkRd-V1JimuEWc_TjqelYmk_Go5Yu_jPWd0zzVPf-gvLkqoUxttpC9Eksq25KQxaKsoyQKoWv40-/s600/P1177395.jpg" /></a
>和田先生の有り難いお言葉.
</div>
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifZSE1w7vZ8kyDcXBN7Y0hYGJ-GkFMCgTie8mR-lD6ccM7NoBV4gDPxc90t9JQxO-aZ1dVvr0lSy58Xl2uUhBs7B39URD15fIAQuNcnuD7gwwzfzvQvIJZBrjY_1Zs1eSP_gE2jT0-V9yu/s2048/P1177382.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifZSE1w7vZ8kyDcXBN7Y0hYGJ-GkFMCgTie8mR-lD6ccM7NoBV4gDPxc90t9JQxO-aZ1dVvr0lSy58Xl2uUhBs7B39URD15fIAQuNcnuD7gwwzfzvQvIJZBrjY_1Zs1eSP_gE2jT0-V9yu/s600/P1177382.jpg" /></a
>年間カレンダー
</div>
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzsAASUJWpfYdPmstzy_ay2OLs0Zhj-XKuL3pZBXTJiQr0q5BjCMwOIs_mfbIQvs4T8vlUw1pZYjQNQaYSEiWl9ZvMlIlTGAw6wZZj9imarZRn_X2LJN_QYf_VWnbFaElGGGl4cJieJmcN/s2048/P1177383.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzsAASUJWpfYdPmstzy_ay2OLs0Zhj-XKuL3pZBXTJiQr0q5BjCMwOIs_mfbIQvs4T8vlUw1pZYjQNQaYSEiWl9ZvMlIlTGAw6wZZj9imarZRn_X2LJN_QYf_VWnbFaElGGGl4cJieJmcN/s600/P1177383.jpg" /></a
>バーティカル式見開き一週間
</div>
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitcqWrmZ9j4U22zZL5z0W3t2uC-CjqpbWuKt8BxbCj51mNCYHadWqXVFBlL7IQF4iTE9dRebFpN5yROHPWCuy98BhuUk_7rBABKtelGmeF_zHlrtVu-eCksbzaz4O35zSUn_g2AeMTN7dM/s2048/P1177386.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitcqWrmZ9j4U22zZL5z0W3t2uC-CjqpbWuKt8BxbCj51mNCYHadWqXVFBlL7IQF4iTE9dRebFpN5yROHPWCuy98BhuUk_7rBABKtelGmeF_zHlrtVu-eCksbzaz4O35zSUn_g2AeMTN7dM/s600/P1177386.jpg" /></a
>月間横ケイ式の見開き二ヶ月
</div>
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicG-IklbfCazA4cApPxI4BfrKG8d0UJ-7zLl08g19tAoIov-mVzJ280vK5I2AAYonSRtxdxFdGSBatNt4ePojmkbbJGlFtbPx48qY00dvQGxJr8hl2nx6oa55GlEwNBxgIjYoRhv9sm8rM/s2048/P1177388.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicG-IklbfCazA4cApPxI4BfrKG8d0UJ-7zLl08g19tAoIov-mVzJ280vK5I2AAYonSRtxdxFdGSBatNt4ePojmkbbJGlFtbPx48qY00dvQGxJr8hl2nx6oa55GlEwNBxgIjYoRhv9sm8rM/s600/P1177388.jpg" /></a
>メモページ(50ページ用意しました)
</div>
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8toO368hB0VAJsvwt6UtvRGrE014PL0eVP2jQGgHJCuZIj0k7UwWhAFIyRzgxjh2k3HhgdW70mW1kl6pOJMinP4lCHjU2skQaLXkXuKRGod-HZfkN0J180XEhm3n-e0-mKNOjBON1lYw7/s2048/P1177389.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8toO368hB0VAJsvwt6UtvRGrE014PL0eVP2jQGgHJCuZIj0k7UwWhAFIyRzgxjh2k3HhgdW70mW1kl6pOJMinP4lCHjU2skQaLXkXuKRGod-HZfkN0J180XEhm3n-e0-mKNOjBON1lYw7/s600/P1177389.jpg" /></a
>付録(vim チートシート)
</div>
<div class="separator" style="clear: both; text-align:center;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8CJJ3miXCu-4YU8DRbDWDOWKbD_Ma1TxDaw1hY-6LCxPUnqR0_qD-MvcNdXMO2J-Ta7aOyD05SzYmsjbr-MfdkttgX6JBYqxJJWCEA-zw8EkJUy5VbWvw7gGQPtMGjCRa2r1aR15tdA8B/s2048/P1177390.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8CJJ3miXCu-4YU8DRbDWDOWKbD_Ma1TxDaw1hY-6LCxPUnqR0_qD-MvcNdXMO2J-Ta7aOyD05SzYmsjbr-MfdkttgX6JBYqxJJWCEA-zw8EkJUy5VbWvw7gGQPtMGjCRa2r1aR15tdA8B/s600/P1177390.jpg" /></a
>付録(HHKBキー配列表)
</div>
<br />
以上みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-25772266821473476792021-01-13T23:38:00.005+09:002021-03-17T00:40:58.857+09:00svnsync で定期的にSubversion のバックアップを取得するこれまでSubversion については,何度か取り上げてきたが,<br />
<br />
<a
href="https://nort-wmli.blogspot.com/2017/06/raspberyy-pi-subversion-systemd.html"
target="_blank"
>WM×LI: Raspberyy Pi を Subversion のリポジトリサーバにして,systemd
で自動起動するように設定する.</a
><br />
<a
href="https://nort-wmli.blogspot.com/2019/02/svnadmin-dumpsubversion_26.html"
target="_blank"
>WM×LI: 【svnadmin dump】Subversionのリポジトリを別のサーバーに移行する.</a
><br />
<a href="https://nort-wmli.blogspot.com/2019/05/subversion.html" target="_blank"
>WM×LI: Subversionで直前のコミットを取り消す.</a
><br />
<br />
今回はsvnsync コマンドを使用して,リモートで定期的にSubversion
をバックアップを取るお話.<br />
<br />
先日,WebArena IndigoでレンタルしているVPSをアップデート(apt
upgrade)していたら,途中で突然停止し,その後アクセス不可,再起動不能になり,<b
>Subversionのリポジトリデータが全部吹っ飛んだので,やり方を調べた.</b
><br />
<a name='more'></a>
<br />
(最新のチェックアウトデータがあったので,最悪の事態は免れたが,リポジトリの履歴は全てパーになった...涙)<br />
<br />
方法は以下の通り.<br />
<br />
1. バックアップ用のディレクトリを作成
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ mkdir backup
</pre>
<br />
2. 作成したディレクトリにリポジトリを作成
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ svnadmin create backup
</pre>
<br />
3. hooks ディレクトリに移動して,設定ファイルをテンプレートからコピー
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ cd backup/hooks/
$ cp pre-revprop-change.tmpl pre-revprop-change
</pre>
<br />
4. 設定ファイルの修正
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
pre-revprop-change(以下の通り,修正)
------------------------------
(修正前)exit 1
(修正後)exit 0
</pre>
<br />
5. svnsync の初期化コマンドを実行(URLはsvn://など適宜,合わせる)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ svnsync initialize file:///home/mirasuni/backup/ <バックアップするリポジトリのURL>
Copied properties for revision 0.
</pre>
<br />
6. svnsync の同期コマンドを実行(revision
1から始まり,最新リビジョンまで順にコピーされる)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ svnsync synchronize file:///home/mirasuni/Subversion/backup/
...
...
...
Transmitting file data ..
Committed revision 471.
Copied properties for revision 471.
</pre>
<br />
7. cron で毎日0時に同期コマンドが実行されるように設定する
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ crontab -e
------------------------------
0 0 * * * /usr/bin/svnsync synchronize file:///home/mirasuni/backup</pre
>
<br>
以上みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-25903761234203785212020-12-13T22:42:00.002+09:002021-03-17T00:41:21.868+09:00HHKB ミートアップVol.4 に参加してきたもはや恒例行事となりつつあるHHKBミートアップVol.4 に参加してきました.<br />
<br />
過去のイベントの記事はコチラ→<a
href="https://nort-wmli.blogspot.com/2017/09/hhkb-20_27.html"
>WM×LI: HHKB 20周年記念ユーザーミートアップ に参加してきた</a
><br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQKxmx7ThO79dHlK8-zh7H9R1jia90u9PThFr61Ll-kw9UvrmCn5o7g676MhkCbehWoG7RcH9ELE30JRjGaiudv8FbzLTLfXjcgeWCtMsU9ZNzAN8CD9_rpeJaowh8oH6jrLiZArfeHtOx/s1280/vlcsnap-2020-12-13-10h57m25s884.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQKxmx7ThO79dHlK8-zh7H9R1jia90u9PThFr61Ll-kw9UvrmCn5o7g676MhkCbehWoG7RcH9ELE30JRjGaiudv8FbzLTLfXjcgeWCtMsU9ZNzAN8CD9_rpeJaowh8oH6jrLiZArfeHtOx/s600/vlcsnap-2020-12-13-10h57m25s884.png"
/></a>
</div>
<a name='more'></a>
<br />
4回目の今回は,新型コロナウイルスの影響でオンライン開催.<br />
<br />
愛知県民としては,オンライン開催は非常にウェルカムです.仕事休まなくても参加できますからね.<br />
<br />
(Vol.1,
Vol2のときは,たまたま別件で東京に赴いていたので運良く参加できましたが,Vol.3
は仕事で参加できず...新HHKBの発表を自宅からYoutube越しに指を咥えて見てました.)<br />
<br />
そんな今回のお品書きはコチラ.<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMWhek6V2lYuemJMjDUfvG3qLurNW8Dr_NHmoOHMycF_T1_fGGQIVwACBztUgUhmyn8NSTXzzvRoDcIotACY6kMGEaxWAHG27rAW3fomA96PM1qQyMMS1XobLrZmlI-sZj_dmpzKHLrHjm/s1280/vlcsnap-2020-12-13-11h18m10s022.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMWhek6V2lYuemJMjDUfvG3qLurNW8Dr_NHmoOHMycF_T1_fGGQIVwACBztUgUhmyn8NSTXzzvRoDcIotACY6kMGEaxWAHG27rAW3fomA96PM1qQyMMS1XobLrZmlI-sZj_dmpzKHLrHjm/s600/vlcsnap-2020-12-13-11h18m10s022.png"
/></a>
</div>
<br />
冒頭,PFUの増田氏から開催のご挨拶を頂き,続いて,HHKBの生みの親,和田先生からもご挨拶を頂きました.和田先生は,ご自宅からオンラインでのご出席です.書斎の本が凄いですね.<br />
<br />
曰く,今年でHHKB は24歳なので,4割還暦だそうですw
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiskKoElnZxGsgJsJdnGUbp9BzvJnMcOcrKG7ssvH4gBBJcmFKNY8v0tnqLYf6h3C7Qi2WTEYPMaNgg6Nix4gUU-iAstwmXcdnqSLqq8BMzCiShfV-USUNrzB_4LMZdXR-pbF6_LChs6Yds/s1280/vlcsnap-2020-12-13-11h52m39s713.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiskKoElnZxGsgJsJdnGUbp9BzvJnMcOcrKG7ssvH4gBBJcmFKNY8v0tnqLYf6h3C7Qi2WTEYPMaNgg6Nix4gUU-iAstwmXcdnqSLqq8BMzCiShfV-USUNrzB_4LMZdXR-pbF6_LChs6Yds/s600/vlcsnap-2020-12-13-11h52m39s713.png"
/></a>
</div>
<br />
その後,PFUの山口氏から新HHKB発売後の1年の振り返りをご報告いただきました.<br />
<br />
その中で面白かったのが,新HHKBの販売台数比率.<br />
<br />
HHKBにあまり詳しくない人のために補足すると,HHKBには現在,以下の3つのモデルがあり,
<ul>
<li>有線接続のみで使用できる下位モデルの"Classic"</li>
<li>Bluetoothと有線両方で使える中間モデルの"HYBRID"</li>
<li>
"HYBRID"に高速タイピング性と静寂性に優れたType-Sキーを採用した最上位モデルの"HYBRID
Type-S"
</li>
</ul>
<br />
このうち,最上位モデルのHYBRID Type-Sが異常なほど売れているというお話.<br />
<br />
ちなみに私が持っているのも,HYBRID Type-Sです.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiGl9pt6QNz9gOdSCLjAakXR4P-hQVpQT5txJ5v-KNNI5vteac6sNR4t6NLXld1AjYkCs3ZTPMgL5frZ-F-EWg0zni7St_C3auvRcj5NfiTtRSXvoYZf5vgfIeBK_v-GNVNgqZhYzEvOo1/s1280/vlcsnap-2020-12-13-19h08m05s977.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiGl9pt6QNz9gOdSCLjAakXR4P-hQVpQT5txJ5v-KNNI5vteac6sNR4t6NLXld1AjYkCs3ZTPMgL5frZ-F-EWg0zni7St_C3auvRcj5NfiTtRSXvoYZf5vgfIeBK_v-GNVNgqZhYzEvOo1/s600/vlcsnap-2020-12-13-19h08m05s977.png"
/></a>
</div>
<br />
PFUさんは,上位モデルから順に5:4:1の割合で仕込んでいたそうですが,発売後1ヶ月目は9割近い購入者がHYBRID
Type-Sを購入.それでも最初はコアファンが買っているものだと油断していたら...
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ31n_LeOGMm3cp6dCP-NtnPPFXkpFggsmXZx6flj5wwCyeatjXKg-GC-5RtzgwmdIu5M5E2LU5OkeMEwVK9Q8lFovs_2HsbVlMCoAtAKGdS9-g1-L4HNojBaAmNRhN6iAHnTHVbhW6jdy/s1280/vlcsnap-2020-12-13-19h14m14s063.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ31n_LeOGMm3cp6dCP-NtnPPFXkpFggsmXZx6flj5wwCyeatjXKg-GC-5RtzgwmdIu5M5E2LU5OkeMEwVK9Q8lFovs_2HsbVlMCoAtAKGdS9-g1-L4HNojBaAmNRhN6iAHnTHVbhW6jdy/s600/vlcsnap-2020-12-13-19h14m14s063.png"
/></a>
</div>
<br />
結局,発売後3ヶ月以上経っても,販売比率はほとんど変わらず,現場は大混乱.各所で在庫切れに陥ったそうですw<br />
<br />
私は発売日に自分の1台を購入したあとのことは知らなかったので,非常に興味深い話でした.HHKBを買う層は金に糸目はつけないってことですね.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivf4YTbqM5L8xjQ49I_NQZSuwcQ4hivozRQt8amDu2Ti8eZgwLiM5uePk2Fcj1QEAvd7rSnGij_J2JEVpRYY2j7zEqhASk4W2Ibn-nSwOGiWD4HQf5rO7D-qv73NjHW88JMKlArrIK15eI/s1280/vlcsnap-2020-12-13-19h11m53s967.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivf4YTbqM5L8xjQ49I_NQZSuwcQ4hivozRQt8amDu2Ti8eZgwLiM5uePk2Fcj1QEAvd7rSnGij_J2JEVpRYY2j7zEqhASk4W2Ibn-nSwOGiWD4HQf5rO7D-qv73NjHW88JMKlArrIK15eI/s600/vlcsnap-2020-12-13-19h11m53s967.png"
/></a>
</div>
<br />
その他にも,コロナ禍でテレワークが推奨されたことから,2台持ち,3台持ちする層が再購入し,販売台数が伸びた話とか,ウェブ会議で音が気になり,旧モデルを使っていたけど,Type-Sに乗り換えた層がいたとか,マツコの知らない世界でHHKBが取り上げられた直後に,Amazonタイムセールでバカ売れした話とか,中の人だからこそ知る裏話をたくさん教えていただきました.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQcG5djVGgCxV9Nl8MHbzCDVAHsa4xC3q9cezGxiglSgTAXqjRk7oSuyIT_kuStTdBtpjTS7BNNhZ-DlzvtowCR1FTB9xJ8OMheFmOFAPGHH9aN9CoB9DNdzlhvoSZbqsNIu80Jh60ma4R/s1280/vlcsnap-2020-12-13-19h51m10s201.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQcG5djVGgCxV9Nl8MHbzCDVAHsa4xC3q9cezGxiglSgTAXqjRk7oSuyIT_kuStTdBtpjTS7BNNhZ-DlzvtowCR1FTB9xJ8OMheFmOFAPGHH9aN9CoB9DNdzlhvoSZbqsNIu80Jh60ma4R/s600/vlcsnap-2020-12-13-19h51m10s201.png"
/></a>
</div>
<br />
その次のトークセッションは話題があまりにも多すぎて紹介しきれないので,登壇書のみご紹介します.
<ul>
<li>今年から広報担当になられたお馴染みのPFUの松本氏</li>
<li>PFUで企画を担当されている轡田氏</li>
<li>
YouTubeでほぼ週刊キーボードニュースを運営されている,びあっこ氏とぺかそ氏
</li>
<li>プロフットバックプレイヤーの石田氏</li>
<li>結婚式でのHHKBウェディングケーキでお馴染みの魚住氏</li>
</ul>
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilxhmXyuPaHbIIPt7c81rFVdpEq7sbuOAM8upGqqjhfcAWd8-mnXJYUV_LyW27JNF7HqttcmSlpEzsXL-AKyM2k6ZWXVjXCcJaR5hwGO24StxxdPZ4rWB4THMcwNWMylheP3PQNdYhFDnO/s1280/vlcsnap-2020-12-13-20h07m35s007.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilxhmXyuPaHbIIPt7c81rFVdpEq7sbuOAM8upGqqjhfcAWd8-mnXJYUV_LyW27JNF7HqttcmSlpEzsXL-AKyM2k6ZWXVjXCcJaR5hwGO24StxxdPZ4rWB4THMcwNWMylheP3PQNdYhFDnO/s600/vlcsnap-2020-12-13-20h07m35s007.png"
/></a>
</div>
<br />
ちなみに,マツコの知らない世界に出演されていたのは,びあっこ氏とぺかそ氏だそうです.<br />
<br />
また,プロフットバックプレイヤーの石田氏は,少し前にHHKBの公式Twitterで動画が上がっていたので,誰だろう??と思っていましたが,HHKBのコアユーザでこのあと紹介する,HHKB
Evangelist のおひとりです.HHKBを100回以上分解してるらしい.<br />
<br />
魚住氏については,我々にとってはもう有名人なので紹介するまでもありませんが,ご存じない方は,HHKB
ウェディングケーキで検索するとすぐに見つけられますw<br />
ちなみに本職は高校の情報の先生で,教師のiPad仕事術の著者でもあります.
<br />
<br />
そして,今回新登場のHHKB Evangelist のご紹介
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3DSiBEdMZvad6Tij9yW7zomci7iwwKHIZHCy8JR3ajGmjkEV7caParR6Z3jit7h3yHnu4qbqp0tBASt9RRR3OnpBY2-EC0ugq4jPotwx7NIngCFfNMg1d3hyE-6Yn9d0yFRJpQdB70sn0/s1680/evangelist_bn.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="780"
data-original-width="1680"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3DSiBEdMZvad6Tij9yW7zomci7iwwKHIZHCy8JR3ajGmjkEV7caParR6Z3jit7h3yHnu4qbqp0tBASt9RRR3OnpBY2-EC0ugq4jPotwx7NIngCFfNMg1d3hyE-6Yn9d0yFRJpQdB70sn0/s600/evangelist_bn.jpg"
/></a>
</div>
HHKBの公式サイトにウェブページが開設されたので,詳しくはそちらを見ていただいた方が良いかと思いますが,<br />
<a href="https://happyhackingkb.com/jp/evangelist/"
>https://happyhackingkb.com/jp/evangelist/</a
><br />
<br />
要は,HHKBを世に広めていく,公式認定の方々です.<br />
<br />
過去のミートアップでトークセッションに登壇されていた方もたくさんいらっしゃいますね.個人的には初代HHKB開発者の1人である,白神氏の話がとても面白かったのを覚えています.(Vol.1のときのトークセッション)<br />
<br />
そしてEvangelist に認められると,特性キートップが頂けるそうです!
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikGt2mfnCZIKfMU11i4_FpgAcpXKygQO8o8xDeY2nN2q5Isyk1naOVgeYWF9GLOF-SMkAPpUr4MhF7a0Bi2KiiU2btTA2IRTORt2pzRtBOKc9Z3JRVJOUPC44_cVHIGgG_vZBImkPWvf-b/s1280/vlcsnap-2020-12-13-20h36m45s929.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikGt2mfnCZIKfMU11i4_FpgAcpXKygQO8o8xDeY2nN2q5Isyk1naOVgeYWF9GLOF-SMkAPpUr4MhF7a0Bi2KiiU2btTA2IRTORt2pzRtBOKc9Z3JRVJOUPC44_cVHIGgG_vZBImkPWvf-b/s600/vlcsnap-2020-12-13-20h36m45s929.png"
/></a>
</div>
<br />
<h1>羨ましい!</h1>
<br />
キートップもそうですが,Evangelist
の肩書が羨ましい.どうやら自薦方式でプロフィール書いてメールすると認定してもらえる可能性があるそうですが,こんな弱小ブログ運営者ぐらいの肩書しかない自分ではちょっと無理そうですね.HHKB愛だけならば負けない自信あるんですけど.<br />
<br />
万が一,なにか別のことで世の中に羽ばたける機会が訪れたら,それを引っさげて堂々と立候補してみたいと思います.<br />
<br />
<br />
<br />
<br />
それから,関連商品,関連サービスのご紹介<br />
<br />
自作キーボード向けショップの遊舎工房さんからキートップ刻印サービスや,HHKBユーザーならお馴染みのバード電子さんから分割式パームレストなど,今回も新しいサービス・商品が紹介されましたが,今回の目玉はやはり,松葉製作所さんの<b
>木製キーボードルーフ兼パームレスト</b
>
だと思います.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7OJ7cjXRl3ksK_wApze5u0JjPoROJ9j6SeFO_wTA1EaJNBUOQTLNCP9pd5Sn_La-T_TsigVlAfP4aQvfPoT0DwX86b0RoCbu4aAmpL66k0T4fhJhrBx6LmuhXt86LYONvEv7iDSABoMde/s1280/vlcsnap-2020-12-13-21h35m56s618.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="720"
data-original-width="1280"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7OJ7cjXRl3ksK_wApze5u0JjPoROJ9j6SeFO_wTA1EaJNBUOQTLNCP9pd5Sn_La-T_TsigVlAfP4aQvfPoT0DwX86b0RoCbu4aAmpL66k0T4fhJhrBx6LmuhXt86LYONvEv7iDSABoMde/s600/vlcsnap-2020-12-13-21h35m56s618.png"
/></a>
</div>
<br />
ひとつひとつ手作りで作られていて,表面は亀甲名栗と呼ばれる模様をのみで掘られているそうです.手作りだから高いだろうな,と思いましたが予想以上のお値段で,<b
>29,800円</b
>
.HHKBがもう一台買えそうなほどの値段でした.<br />
<br />
<h2>ちなみに私,買いました</h2>
<br />
そして,この記事を書いている最中に届きました.(間に合わなかったw)<br />
このキーボードルーフ兼パームレストに関しては,熱く熱く語りたいと思いますので,別記事で紹介する予定です.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXq21VPTCGuXH2f_iTES7TcnSHZrRygUa9AYUWlXGW7ATwkS2BPf_2l2zKyJYRVhBHMo8lYdHGkggr2_jCag3IXrYWVD0M6ikqIs_Wk7-aYL0hlURfyI72cuxg_k0PzrmP0HXQ9YAu1EH4/s2048/PC137377.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXq21VPTCGuXH2f_iTES7TcnSHZrRygUa9AYUWlXGW7ATwkS2BPf_2l2zKyJYRVhBHMo8lYdHGkggr2_jCag3IXrYWVD0M6ikqIs_Wk7-aYL0hlURfyI72cuxg_k0PzrmP0HXQ9YAu1EH4/s600/PC137377.jpg"
/></a>
</div>
<div align="center">到着してすぐに記念撮影しました.質感が素晴らしく,ほんのり良い香りもします.</div>
<br />
そして,最後にZoom参加者のみのお楽しみコーナー<br />
恒例の抽選会が行われ,残念ながら,今回も何も当たりませんでした.<br />
<br />
それから,それから,Vol.5の開催が発表されました!<br />
<br />
日時は確定ではありませんが,HHKBの来年の誕生日頃(12月)とのことです.来年までに東京に移住する予定は無いので,頑張って遠征して,また参戦したいと思います.<br />
<br />
また,今回は参加中に"HHKBミートアップ"のハッシュタグでTwitterを更新していたら,イベント終了後に司会をされていた小山氏と少し絡むこともできました.これだけでもだいぶ嬉しいw<br />
<br />
<br />
それでは,最後まで読んでくださりありがとうございました.ちなみにミートアップVol.4の内容はまだYoutubeで配信されていますので,ご覧になりたい方はお早めにどうぞ.<br />
<br />
<div align="center">
<iframe
width="480"
height="270"
align="center"
src="https://www.youtube.com/embed/w-7BibCBJZc?start=1135"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
></iframe>
</div>みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-33827809163843092852020-12-12T22:40:00.002+09:002021-03-22T23:30:15.775+09:00Chromebook のタブレットモード解除法結論から先に述べると,ずばり,<b>Bluetoothのマウスを接続すること</b>です.<br />
タブレットモードが嫌いな人は試してみると幸せになれるかもしれません.<br />
<br />
ただし,Lenovo Ideapad
Duetでのみ動作確認しているため,他機種の場合はこの限りではないかもしれません.<br />
<br />
<br />
さて,ここからタブレットモードのお話.<br />
モバイルPCとして非常に優秀なChromebook.私も愛用していますが,ひとつ気になる点を挙げるとすれば,それは<br />
<br />
<h2>タブレットモード</h2>
<br />
です.<br />
<br />
キーボード着脱式のChromebookであれば,<b>キーボードを外したとき.</b><br />
360度回転式のChromebookであれば,<b>ある角度以上に本体を開いたとき.</b><br />
<br />
通常のPCモードからタブレットモードに<b>強制的に</b> 移行してしまいます.<br />
<a name='more'></a>
<br />
タブレットモードでは,下のスクリーンショットのようにタブバーが非表示になり,
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2b8WDerbw-514kI_-ESwDhsfkjbzflubpqnMiQ70CMN8cROQvssYFntK3aHxZmpfF33t6jVa9it9ahGEmSxE3vLtUTzE8KEtGez36Ize9_FUj7iiMhksFtUOGAwWsKPzUh1o-VCocyAvP/s1920/Screenshot+2020-12-12+at+20.52.18.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1200"
data-original-width="1920"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2b8WDerbw-514kI_-ESwDhsfkjbzflubpqnMiQ70CMN8cROQvssYFntK3aHxZmpfF33t6jVa9it9ahGEmSxE3vLtUTzE8KEtGez36Ize9_FUj7iiMhksFtUOGAwWsKPzUh1o-VCocyAvP/s600/Screenshot+2020-12-12+at+20.52.18.png"
/></a>
</div>
<br />
タブを切り替えるには,右側にある開いているタブの数を表したボタンをタッチし,タブごとのウィンドウのサムネイルを選択する.という2アクションが必要になります.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1t9hqA86Y2C6d-VAaKSPZ2ug8sUEdwjGNGBRa-hq0FOWQKGOtrCbJmrFCtLapMVLCNRAUqDX1E5oJdsvDt3rTOSn03u8YXx10-ZIvM7MZunW-4p10ZuT2wmwA7SDXd38tQ8VRGR0kW4t/s1920/Screenshot+2020-12-12+at+20.55.22.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1200"
data-original-width="1920"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1t9hqA86Y2C6d-VAaKSPZ2ug8sUEdwjGNGBRa-hq0FOWQKGOtrCbJmrFCtLapMVLCNRAUqDX1E5oJdsvDt3rTOSn03u8YXx10-ZIvM7MZunW-4p10ZuT2wmwA7SDXd38tQ8VRGR0kW4t/s600/Screenshot+2020-12-12+at+20.55.22.png"
/></a>
</div>
<br />
また,シェルフ(Windowsで言うところのタスクバー)も非表示になるので,いちいちタッチして呼び出す必要があっったり,デスクトップに常にアプリ一覧が表示されるので,壁紙が見えにくくなったりします.<br />
<br />
Duetはキーボード着脱式なので,普段はキーボードを外してHHKBをBluetooth接続して使っているのですが,タブレットモードのせいで利便性が半減していしまい,どうにかしてタブレットモードを無効にできないかと,何度も何度もネットで検索しましたが,ついに方法を見つけることができませんでした.<br />
<br />
そして,今日たまたまBluetoothのマウスを接続したところ,タブレットモードが解除されたのです!
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8660Ip_dZ7IXCsp3lu4mkbNWK3fj3s3aiVOaYhmuSK8GwqaQeFEeFL1E8Cuf0H8WpA2fm4QtJgwR6XOjgKYmM6c_n8EyVn4vELkYoJUEqQW-KzzNZrYwXwlZaj5PMaGfnkWYsHhuRN-Of/s1920/Screenshot+2020-12-12+at+22.15.31.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1200"
data-original-width="1920"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8660Ip_dZ7IXCsp3lu4mkbNWK3fj3s3aiVOaYhmuSK8GwqaQeFEeFL1E8Cuf0H8WpA2fm4QtJgwR6XOjgKYmM6c_n8EyVn4vELkYoJUEqQW-KzzNZrYwXwlZaj5PMaGfnkWYsHhuRN-Of/s600/Screenshot+2020-12-12+at+22.15.31.png"
/></a>
</div>
<br />
そして気づきました.<br />
<br />
Duetはキーボードを外したからタブレットモードに移行したのではなく,キーボードを外したから,<b
>必然的にタッチパッドも外れ,</b
>
ポインティングデバイスがタッチのみになったので,タブレットモードに移行したのだと.<br />
<br />
気づいてしまえば当たり前で,キーボードの有無とタブレットモードの切り替えには関係なく,あくまでもポインティングデバイスの有無が関係していたということですが,Chromebookにはマニュアルが無いので,このことに気づくのに先代Chromebookの頃から数えて,5年もかかってしまいました.<br />
<br />
やっぱりちゃんとしたマニュアルって大事だなぁ.と思いました.ガラケーのあの分厚いマニュアルが懐かしいですね.私はマニュアルをしっかり読む派なので,当時,隅から隅まで読んでいたことを思い出しました.みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-6439239148807460502020-12-12T12:31:00.002+09:002020-12-12T12:32:23.049+09:00【Youtube動画ダウンロード】 youtube-dlでエラーが発生したら最新のツールに置き換えよう動画をダウンロードしようとして久しぶりにコマンド叩いたら,以下のようなエラーが発生してダウンロードに失敗した.<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ youtube-dl https://www.youtube.com/watch?v=HogeHoge
[youtube] HogeHoge: Downloading webpage
[youtube] HogeHoge: Downloading video info webpage
ERROR: HogeHoge: YouTube said: Invalid parameters.</pre
>
(動画のIDはHogeHogeに変更しています)<br />
<br />
ツールが最新ではない場合,上記のようなエラーが発生することがあるようだ.<br />
<a name='more'></a>
<br />
apt update && apt upgrade
してもツールが更新されない場合は,そもそもリポジトリが配信しているバージョンが古いので,公式からツールをダウンロードする.<br />
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ wget https://yt-dl.org/downloads/latest/youtube-dl
</pre>
<br />
実行権限を付与して,再実行すると今度はダウンロードに成功した.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ chmod +x youtube-dl
$ ./youtube-dl https://www.youtube.com/watch?v=HogeHoge
[youtube] HogeHoge: Downloading webpage
[youtube] HogeHoge: Downloading MPD manifest
[dashsegments] Total fragments: 100
[download] Destination: (動画の名前)-HogeHoge.f248.webm
[download] 100% of 91.06MiB in 00:44
[dashsegments] Total fragments: 54
[download] Destination: (動画の名前)-HogeHoge.f251.webm
[download] 100% of 11.31MiB in 00:03
[ffmpeg] Merging formats into "(動画の名前)-HogeHoge.webm"
Deleting original file (動画の名前)-HogeHoge.f248.webm (pass -k to keep)
Deleting original file (動画の名前)-HogeHoge.f251.webm (pass -k to keep)</pre
>
<br />
アップデートはUオプションを付与してコマンドを実行することで可能.冒頭のようなエラーが発生した場合は,これからは以下を実行するだけで良い.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ ./youtube-dl -U
youtube-dl is up-to-date (2020.12.12)</pre
>
<br />
<br />
<br />
とりあえず使うだけならばこれで十分だが,リポジトリからインストールしたコマンドと置き換える場合は,公式からダウンロードしたyoutube-dlをパスが通ったディレクトリに移動する.<br />
<br />
例えば,/usr/local/bin
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo mv -i youtube-dl /usr/local/bin</pre
>
<br />
例えば,/opt
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo mkdir -p /opt/youtube-dl
$ sudo mv -i youtube-dl /opt/youtube-dl/</pre
>
<br />
例えば,~/bin
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ mkdir -p ~/bin
$ mv -i youtube-dl ~/bin</pre
>
<br />
<br />
移動先のディレクトリが,リポジトリからのインストール先(/usr/bin)よりも参照先として上位にあれば,whichコマンドの結果が置き換わる.
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ which youtube-dl
/usr/local/bin/youtube-dl</pre
>
<br />
リポジトリからインストールしたyoutube-dlをアンインストールしない理由は,manを見れる環境は残しておきたいから.<br />
(manのバージョンと,実際に使用するツールのバージョンが異なることになるので注意)
<br />
<br />
whichコマンドの結果が変化しない場合は,パスの定義を変更するか,仕方無しにリポジトリからインストールしたyoutube-dlをアンインストールする.(パスの定義変更方法は環境によって異なるので割愛する)
<pre
style="width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:black 1px solid;background-color:#f0f0f0;font-family:monospace;margin:0"
>
$ sudo apt remove youtube-dl</pre
>
<br />
<script
async
src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"
></script>
<!-- Rectangle-Big -->
<ins
class="adsbygoogle"
style="display:inline-block;width:336px;height:280px"
data-ad-client="ca-pub-6480546156103176"
data-ad-slot="8665348434"
></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<div class="ninja_onebutton">
<script type="text/javascript">
//<![CDATA[
(function(d){
if(typeof(window.NINJA_CO_JP_ONETAG_BUTTON_c4178a9d46587ac2c932946bfe06f3be)=='undefined'){
document.write("<sc"+"ript type='text\/javascript' src='http:\/\/omt.shinobi.jp\/b\/c4178a9d46587ac2c932946bfe06f3be'><\/sc"+"ript>");
}else{
window.NINJA_CO_JP_ONETAG_BUTTON_c4178a9d46587ac2c932946bfe06f3be.ONETAGButton_Load();}
})(document);
//]]>
</script>
<span class="ninja_onebutton_hidden" style="display:none;"></span
><span style="display:none;" class="ninja_onebutton_hidden"></span>
</div>
みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0tag:blogger.com,1999:blog-6847199141414012275.post-32296970003453760402020-12-06T22:57:00.002+09:002020-12-06T22:57:40.143+09:00Xiaomi製モニターライトが素晴らしい.マルチディスプレイ環境の人にこそお勧めしたい.【Xiaomi Mijia Monitor Hanging Light】皆さんは「デスクライト」と聞いたときどんなものを想像するでしょうか?恐らく↓のようなイメージですよね?<br />
<br />
(参考:Googleで「デスクライト」で検索した結果)
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirrNA-H598Ubwz2Xbqe4RaK1hHO_mIyjeamGEv-9dU6O58gRRPnZUhj1ZhkGqCJyCmvBC6ybMnAY2VdWzjsvSPRlYtesOavMg5QikidgOGmndLiJN7O4isVDO0SITw_bacVTEc7SVJ_MgX/s1080/screenshot.png"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="480"
data-original-width="1080"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirrNA-H598Ubwz2Xbqe4RaK1hHO_mIyjeamGEv-9dU6O58gRRPnZUhj1ZhkGqCJyCmvBC6ybMnAY2VdWzjsvSPRlYtesOavMg5QikidgOGmndLiJN7O4isVDO0SITw_bacVTEc7SVJ_MgX/s600/screenshot.png"
/></a>
</div>
<br />
私も少し前までこういうイメージを持っていましたし,実際このタイプのデスクライトを使用していました.<br />
<br />
しかし,<b>机上のスペースを確保できる利点から</b>
注目され始めているのが「モニターライト」と呼ばれるモニターの上に設置するタイプのライトです.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihQ7w7e1u4uibO3SvmrmbPmqauGJb50cuLCJJT7cvNWQRbBKg8GDnSOIZOzR6zk6o0Lav0F5XFmEr4EEWuAdUer-jrKRK9OA-qfbr4gnaIgtAxf18cHzx4Cyh5UITt64VGlmpveDEFOrg6/s2048/PC067364.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihQ7w7e1u4uibO3SvmrmbPmqauGJb50cuLCJJT7cvNWQRbBKg8GDnSOIZOzR6zk6o0Lav0F5XFmEr4EEWuAdUer-jrKRK9OA-qfbr4gnaIgtAxf18cHzx4Cyh5UITt64VGlmpveDEFOrg6/s600/PC067364.jpg"
/></a>
</div>
<a name='more'></a>
<br />
有名所ではBenQから.その他は主に中華系メーカーから似たような製品が発売されいますが,いずれ日本メーカーも参入してくるだろうと私は思っています.<br />
<br />
その特徴を纏めると以下の通り.
<ul>
<li><b>モニターに設置するので机上のスペースが増える</b></li>
<li><b>輝度や色温度を調節可能</b></li>
<li>電力供給はUSBバスパワー</li>
<li>
操作は本体にあるパネルを直接操作する製品と,リモコンで操作するタイプの2種類
</li>
<li>価格帯は3,000円台から1万円を超える高級品まで多数</li>
</ul>
<br />
今回,私が購入したのはXiaomiから発売されている<b>Hanging Monitor Light</b
>という,<u>ワイヤレスリモコンで操作可能</u>
なタイプの製品で,価格は概ね50〜80ドルぐらい.<br />
<br />
Amazonや楽天では取り扱っていなかったため,中国の通販サイトBanggoodで購入しました.中国サイトと聞くと不安を覚えてしまいますが,<b
>箱がベコベコに潰れていたこと以外は</b
>
トラブルも無く,注文から一週間ほどで届きました.<br />
<br />
それではレビューしていきます.まず,こちらが件(くだん)の箱です.苦笑
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVlTlE15n_L9ytUprHEF33rt2Z9_j3G0eEumyuHFlHjOoAZNrHKCo5cX9K-QfzqS7ALK5NBa7EYVn6SVIJVLivkrr79b7tX39loRxFvpM_lf8XWtm7AAZmkpJWQkUqq_0DCkvlC35-boYl/s2048/PC067313.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVlTlE15n_L9ytUprHEF33rt2Z9_j3G0eEumyuHFlHjOoAZNrHKCo5cX9K-QfzqS7ALK5NBa7EYVn6SVIJVLivkrr79b7tX39loRxFvpM_lf8XWtm7AAZmkpJWQkUqq_0DCkvlC35-boYl/s600/PC067313.jpg"
/></a>
</div>
<br />
<br />
私は中身が無事ならば箱の状態は気にしませんが,さすがは中国クオリティです.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWfLghMsq9CuxUtZa-WiC8Gbat7rlqMrO0VQ1OvARDlbD90h7cccVnMwOGdPdA0wKhplWIZFZ2oSIceX6_AR3cZRhlvpjUvHxeilZqyYDk98AJKZ4x92HmDmApOTjqWH6mfpbNPnVtZMtR/s2048/PC067318.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWfLghMsq9CuxUtZa-WiC8Gbat7rlqMrO0VQ1OvARDlbD90h7cccVnMwOGdPdA0wKhplWIZFZ2oSIceX6_AR3cZRhlvpjUvHxeilZqyYDk98AJKZ4x92HmDmApOTjqWH6mfpbNPnVtZMtR/s600/PC067318.jpg"
/></a>
</div>
<br />
<br />
開けてみると,中身は傷一つありませんでした.(よかった,よかった)
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixz_fx0qocBj5XtieGwy_5B0gdOXpaQ9-v2l3i1zyzJiRv1QYQcMczxVKp5nFyXPgRfnKB2tELLhYf3KUaiBMWo1DTOcvr0Gc-EtOZxZgyJGDfMx6Bvey0rMuuVpjzzkDrAVqnPPWp6Cn2/s2048/PC067322.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixz_fx0qocBj5XtieGwy_5B0gdOXpaQ9-v2l3i1zyzJiRv1QYQcMczxVKp5nFyXPgRfnKB2tELLhYf3KUaiBMWo1DTOcvr0Gc-EtOZxZgyJGDfMx6Bvey0rMuuVpjzzkDrAVqnPPWp6Cn2/s600/PC067322.jpg"
/></a>
</div>
<br />
<br />
同梱品は,ライト本体,モニターに設置するベース部分,ワイヤレスリモコン,USB
Type-Cケーブル,マニュアルの5種類.<br />
<br />
マニュアルは中国語なのでサッパリですが,数字と漢字と図から推測して,
<ul>
<li>モニターの厚さは10mmから32mmに対応していること</li>
<li>色温度は2700Kから6500Kに変更可能であること</li>
<li>ライト角度の可動域が25°であること</li>
</ul>
<br />
が読み取れました.また,電池も同梱されているような絵が描かれていましたが,どこにも見当たりませんでした.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcBX5efOh8sa-p-giKsnKWULcrnqUVm3fkBVVnzM-ZMijFVlpK9ZuHXc82_73pHg_6e57te4moAddVklkCcaATdvX8OGD6Pyan4ViQOBxcG2cocguMvRu-p13Yd4RrvNVMrb3SC1iNBvPk/s2048/PC067324.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcBX5efOh8sa-p-giKsnKWULcrnqUVm3fkBVVnzM-ZMijFVlpK9ZuHXc82_73pHg_6e57te4moAddVklkCcaATdvX8OGD6Pyan4ViQOBxcG2cocguMvRu-p13Yd4RrvNVMrb3SC1iNBvPk/s600/PC067324.jpg"
/></a>
</div>
<br />
<br />
ワイヤレスリモコンは小型のマウスぐらいの大きさで,押したり,回したりして操作します.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1ls179L12MIi0qhU2Ey4gB5rgrL-LZCvY8vb-KhTmHLSx_u0wDsSRPSVIGTcshwCguvpgJ5TuXv6yQgEqYrjVoW-TsKLC5U834VuDgIKQdoU9yR3R6GpsedjWIXYYydossDNOQ0DlPMUM/s2048/PC067333.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1ls179L12MIi0qhU2Ey4gB5rgrL-LZCvY8vb-KhTmHLSx_u0wDsSRPSVIGTcshwCguvpgJ5TuXv6yQgEqYrjVoW-TsKLC5U834VuDgIKQdoU9yR3R6GpsedjWIXYYydossDNOQ0DlPMUM/s600/PC067333.jpg"
/></a>
</div>
<br />
<br />
底面は滑り止め兼電池蓋の役割.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuhNFuwlJ7FFMwr2EbWWs0QEizrhwMMykL50XXcu3zufLwYJeMY0TBu2HGwaQ0oeJOqkwTolzDcfOk3A7E3Fjf-Gra2Tmiay5uZcrdsSNG4mTaeUzMiTgTNrAmBVx1Gt_P3RlbMvIz5JMz/s2048/PC067334.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuhNFuwlJ7FFMwr2EbWWs0QEizrhwMMykL50XXcu3zufLwYJeMY0TBu2HGwaQ0oeJOqkwTolzDcfOk3A7E3Fjf-Gra2Tmiay5uZcrdsSNG4mTaeUzMiTgTNrAmBVx1Gt_P3RlbMvIz5JMz/s600/PC067334.jpg"
/></a>
</div>
<br />
<br />
前述の通り,電池は付属していないため,私はeneloopを使用しました.(単4電池x2本).
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvtELJjxVmlPx1Mgg6UcNDoDEdBZmFe88wmPzCUt0rEUgCFzY2IUUEzaYg5PHY26hHUQMv9IYhKQ8ZreR_DOOVq946vD-zaBmvWLkIFeONXyVRb___IlrFBzAKl4LeLTUxDc6mHAgj9TeZ/s2048/PC067336.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvtELJjxVmlPx1Mgg6UcNDoDEdBZmFe88wmPzCUt0rEUgCFzY2IUUEzaYg5PHY26hHUQMv9IYhKQ8ZreR_DOOVq946vD-zaBmvWLkIFeONXyVRb___IlrFBzAKl4LeLTUxDc6mHAgj9TeZ/s600/PC067336.jpg"
/></a>
</div>
<br />
<br />
モニターに設置するベース部分に電力供給用のType-C接続端子があり,USBで電力を供給するので,モニターにUSB端子がある場合,机の上に一切ケーブルを這わすことなく配線可能です.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUaeGZS_1_pJedxIrIz-uhKMI_a4uGMdcNBYI9JSv6iTPmRZdubacaBKiuId4xWFO5XHn1SG0i6bbslPQ4BSHLZgaUrnyZh85EvEQ06IJzp61QPN5HSoTphnhgY1xkhN9tlKnpqqCRyUT/s2048/PC067350.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUaeGZS_1_pJedxIrIz-uhKMI_a4uGMdcNBYI9JSv6iTPmRZdubacaBKiuId4xWFO5XHn1SG0i6bbslPQ4BSHLZgaUrnyZh85EvEQ06IJzp61QPN5HSoTphnhgY1xkhN9tlKnpqqCRyUT/s600/PC067350.jpg"
/></a>
</div>
<br />
<br />
私のモニターにもUSB端子がついていたので,そこから電力を供給しています.(写っていませんが...)
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxVnzyzvY1TZJbUz0rgP5UvcO91xocVMFkXaCpoffbBOci5w9ZnJnpggpietzOMr9Z0lCPkRb3W_1HZSF04cerxR2Z361d7_4993Zc5T_tOjFXGeEE9v0jfRtNmaoi3JF0zgUz146iistS/s2048/PC067344.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxVnzyzvY1TZJbUz0rgP5UvcO91xocVMFkXaCpoffbBOci5w9ZnJnpggpietzOMr9Z0lCPkRb3W_1HZSF04cerxR2Z361d7_4993Zc5T_tOjFXGeEE9v0jfRtNmaoi3JF0zgUz146iistS/s600/PC067344.jpg"
/></a>
</div>
<br />
<br />
ベース部分とライト本体の接続はマグネット式.25°の可動域があるため,照らす方向を調節できます.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3R72dnpk-cDdKRHox4NDubARsszC8GpMfraCsSm_oFZeEm8ZBjDTJYI-oaCeyRiIdUSOGkqPyP4H9MFZISf_rxPJ57oVvx9VeHdCGo1xffGqQtDYfgw9rMUy2OOsOB3tv5rGR_0b0dhL5/s2048/PC067331.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3R72dnpk-cDdKRHox4NDubARsszC8GpMfraCsSm_oFZeEm8ZBjDTJYI-oaCeyRiIdUSOGkqPyP4H9MFZISf_rxPJ57oVvx9VeHdCGo1xffGqQtDYfgw9rMUy2OOsOB3tv5rGR_0b0dhL5/s600/PC067331.jpg"
/></a>
</div>
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyKJjlPXLszyyoaW7q1HXjMvhaandVze9BEzf4RZLeFfrVDbueasEvefi0rmkW2tzDWdbhACLNhdmFgA-OOPWkC5K2NatL7jK1a28Saoq80OSgKq0_kBo_68u5BFjS5nL8lJxcaYB0weKz/s2048/PC067332.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyKJjlPXLszyyoaW7q1HXjMvhaandVze9BEzf4RZLeFfrVDbueasEvefi0rmkW2tzDWdbhACLNhdmFgA-OOPWkC5K2NatL7jK1a28Saoq80OSgKq0_kBo_68u5BFjS5nL8lJxcaYB0weKz/s600/PC067332.jpg"
/></a>
</div>
<br />
<br />
本体に操作パネルは無く,ワイヤレスリモコンからのみ操作可能なので,設置が完了したらワイヤレスリモコンをポチッと押して点灯させます.<br />
<br />
回転すると輝度が調整でき,押しながら回転すると色温度が変更可能です.
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFJDExQab8B85ITxkyBnqqWyypb2DM0B-VIVcfjmAdZ0ZKfpYEPXice8_n5X0FxEnfNBaO3tcJ2GdWZfRObObLU6YxliFsOLYIzVYBdbJfsEa_neTElaskv6lKxTWAeoRjiQY1d5KskX9O/s2048/PC067361.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFJDExQab8B85ITxkyBnqqWyypb2DM0B-VIVcfjmAdZ0ZKfpYEPXice8_n5X0FxEnfNBaO3tcJ2GdWZfRObObLU6YxliFsOLYIzVYBdbJfsEa_neTElaskv6lKxTWAeoRjiQY1d5KskX9O/s600/PC067361.jpg"
/></a>
</div>
<div align="center">色温度:2700K(最小),輝度:最小のとき</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7jvs1Ow1zxQDbA3my1ou5FCl1QT6PnqdJruO8d-ABc0LzGKBJACjV76AX70NKyNXCu8McdiAyhPbw57ttY0AHlEBdE-f0PV0N3rtquxOcjousr7ZMwwLY6tm-tUwgvTj8bx0rKRwDb8Z6/s2048/PC067362.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7jvs1Ow1zxQDbA3my1ou5FCl1QT6PnqdJruO8d-ABc0LzGKBJACjV76AX70NKyNXCu8McdiAyhPbw57ttY0AHlEBdE-f0PV0N3rtquxOcjousr7ZMwwLY6tm-tUwgvTj8bx0rKRwDb8Z6/s600/PC067362.jpg"
/></a>
</div>
<div align="center">色温度:2700K(最小),輝度:最大のとき</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijIoo6tdsRltN7pv5-wVK_Q_gtI29EVnxdis8043CchMNkp5bnlcQCZgCyf2437fDJCMIDZhsVhLWojG0v__7HN9opTjGwod77ICfvsfnNFXe2PVog25N63Li6g0tG-tf_4H10_FeQnBAV/s2048/PC067363.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijIoo6tdsRltN7pv5-wVK_Q_gtI29EVnxdis8043CchMNkp5bnlcQCZgCyf2437fDJCMIDZhsVhLWojG0v__7HN9opTjGwod77ICfvsfnNFXe2PVog25N63Li6g0tG-tf_4H10_FeQnBAV/s600/PC067363.jpg"
/></a>
</div>
<div align="center">色温度:6500K(最大),輝度:最小のとき</div>
<br />
<div class="separator" style="clear: both;">
<a
href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFdQzUuOsOURy3smXP1T2hRZGA6vvzD1RlQCqWt0pAkFTFMK-gntx7PDr8KYWHkMdzMTEIwOHYSmzF1czL9_GGr2c17S-s5KZztj4WAeqMpPEkXoMX4kfOg2Orm16WEE20fukIQcW0uyCq/s2048/PC067364.jpg"
style="display: block; padding: 1em 0; text-align: center; "
><img
alt=""
border="0"
width="600"
data-original-height="1536"
data-original-width="2048"
src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFdQzUuOsOURy3smXP1T2hRZGA6vvzD1RlQCqWt0pAkFTFMK-gntx7PDr8KYWHkMdzMTEIwOHYSmzF1czL9_GGr2c17S-s5KZztj4WAeqMpPEkXoMX4kfOg2Orm16WEE20fukIQcW0uyCq/s600/PC067364.jpg"
/></a>
</div>
<div align="center">色温度:6500K(最大),輝度:最大のとき</div>
<br />
<br />
写真では,最大輝度のときかなり明るい印象ですが,実際には少し暗めに感じます.USBバスパワーなので,やや電力が足りていない感じを受けました.<br />
<br />
また,本体の大きさが448mmなので,23インチディスプレイの横幅より少し小さいぐらいの大きさです.私は23インチのディスプレイを縦向きで使用しているので,真ん中のディスプレイから左右のディスプレイに少しはみ出しています.<br />
<br />
<br />
最後にモニターライトがおすすめな人を私なりの視点で紹介します.<br />
<br />
まずは,<b>机上のスペースを有効活用したい人.</b>
これは理由は言うまでもないと思いますので割愛します.<br />
<br />
次にお勧めしたいのは<b>マルチディスプレイ環境の人</b> です.<br />
<br />
デスク全体を照らしてくれるライトは可能な限り,机の中心に置きたいですが,ディスプレイの方が優先度は高いため,実際にライトを中心に据える人は少ないと思います.<br />
<br />
そしてマルチディスプレイを取り入れ,その数を2,3,4,…と増やしていくと,ライトはさらに机の端に追いやられてしまいます.(上の写真で右の方に写っているのが,まさに端に追いやられてしまったデスクライトです)<br />
<br />
これを回避するためには,足の長いデスクライトを使用して,ディスプレイの上から照らすぐらいしか方法がありませんが,私のようにディスプレイを縦置きしている場合や,モニターアームを使用して縦にディスプレイを並べている場合,さらに上から照らせるほど足の長いライトは種類が限られてしまい選択肢が多くありません.<br />
<br />
<b>これを解決してくれるのが,モニターライトです.</b><br />
<br />
そもそもモニターの上から照らすことをコンセプトにしているライトのため,縦置きしようが,アームを使って高い位置にディスプレイを設置しようが,ディスプレイを増やして机の端から端までディスプレイを並べようが,常にディスプレイの上から照らすことが可能です.<br />
<br />
だから私は,今回紹介したXiaomi製のものも含め,マルチディスプレイ環境の人にこそモニターライトの導入をお勧めします.
<br />
<br />
<script
async
src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"
></script>
<!-- Rectangle-Big -->
<ins
class="adsbygoogle"
style="display:inline-block;width:336px;height:280px"
data-ad-client="ca-pub-6480546156103176"
data-ad-slot="8665348434"
></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<div class="ninja_onebutton">
<script type="text/javascript">
//<![CDATA[
(function(d){
if(typeof(window.NINJA_CO_JP_ONETAG_BUTTON_c4178a9d46587ac2c932946bfe06f3be)=='undefined'){
document.write("<sc"+"ript type='text\/javascript' src='http:\/\/omt.shinobi.jp\/b\/c4178a9d46587ac2c932946bfe06f3be'><\/sc"+"ript>");
}else{
window.NINJA_CO_JP_ONETAG_BUTTON_c4178a9d46587ac2c932946bfe06f3be.ONETAGButton_Load();}
})(document);
//]]>
</script>
<span class="ninja_onebutton_hidden" style="display:none;"></span
><span style="display:none;" class="ninja_onebutton_hidden"></span>
</div>
みらすにhttp://www.blogger.com/profile/01896897297580249609noreply@blogger.com0