2020年12月5日土曜日

Ubuntuサーバーの現状と今までにやったこと、今後のToDo

当初はLinuxの操作を勉強するために使い始めたLinuxマシン(NEC Mate上で絶賛稼働中)ですが、現在はサーバーの勉強のため、様々なサーバーアプリケーションが稼働しています。

現状、自宅のサーバーマシン(Ubuntu 20.04.1 LTS)は、概ね以下のような構成で稼働しています。

・Webmin (GUIサーバー管理ソフト、削除予定)
・Samba SMBサーバー (Webmin経由でセットアップ)
・OpenSSH SSHサーバー (パスワード認証方式)
・nginx Webサーバー
    ・phpBB3
    ・phpMyAdmin
    ・WordPress
・PHP-FPM 7.4 (via Unixドメインソケット)
    ・php-curl
    ・php-gd
    ・php-imagick
    ・php-mbstring
    ・php-mysql
    ・php-mbstring
    ・php-xml
・MySQLサーバー

多分以上ですべてだと思います。

Webminが導入されている理由ですが、最初はとにかくこのマシンをNAS代わりにしたく、色々試行錯誤していたんですがSambaのコンフィグレーションの仕方がわからず、とりあえず後先考えずにWebminをインストールした感じです。
Web上から余計な設定を叩けるツールをインストールしておくのはセキュリティを考えるとあまり好ましくなさそうなので、セキュリティホール潰しとしてアンインストールを考えています。ただ、私自身、Sambaの設定がよく分かっていないので、今WebminをアンインストールするとSMBサーバーのメンテができなくなりそうで怖いです。少し躊躇していますねえ。

主にやったことの詳細ですが...(時系列順ではない)

・Linuxの基本操作とパーミッションの仕組みについて正しく理解する
パーミッションとはファイルやディレクトリに対して行える操作の権限のことです。特定のユーザーやユーザーグループに対して正しくパーミッションを付与し、招かれざるユーザーには制限された権限を与える、といった設定を行う必要があります。このためには、chmodやchownなどのコマンドを使用しますが、コマンドの使用方法については検索してください。
難しそうだなあ、と最初は思いましたが、特にそんなこと無いです。簡単簡単。

・vi(m)の習得
いずれは通る道なので覚えておきたい。
Escキーを押して標準モード、iキーを押して挿入モード、oキーを押して行挿入、ddキーを押して行のカット、あたりを覚えておくといいかな。とにかく、モード切替を学べばあとは怖くありません。h, j, k, lを使ったカーソル移動は覚えるとmanコマンドでも役に立ちますが、ほとんどの場合は矢印キーでもカーソル移動できます。挿入モードだとデフォルトではカーソル移動にhjklを使えない?みたいなので、人によってはvimでも矢印キーをよく使ってるんじゃないかなあと思います。

・OpenSSHサーバーのインストール
sudo apt install -y openssh-server を叩くだけです。OK, やりましょう!
他のマシンからsshしてターミナルを叩けるのは非常に便利。ちなみに、自環境ではSFTPやSCPも特別に設定することなく使えるようになりました。
ところで余談ですが。インターネット経由でSSHしたい人もいるかもしれませんが、その場合はwell-knownポート番号(TCP: 22番)に設定してはいけないとされています。不正アクセス、不正ログインの温床のようです。どうしてもインターネット経由でSSHしたい場合は、49152 - 65535の範囲からポート番号を選べば良いでしょう。末尾を22以外に設定するのもおすすめで、たとえば59152などに設定するとSSH用のポート番号とは気づかれにくいです。ただ、ポートスキャンツールなどもあり、ポート番号の変更だけでは万全な対策とは言いがたいのが現状。攻撃対策は抜かりなく。

・FTPの暗号化(FTP→SFTP)
当初は考えなしに平文FTPのサーバーを運用していました。ですが、FTPは平文でユーザー名やパスワード、各種ファイルやディレクトリなどのデータを流してしまうため、今や運用してはいけないプロトコルの一つだと考えています。(ユーザー名やパスワードを要求しないのであれば別ですが)
個人的に、たとえLAN内であってもユーザー名やパスワードを平文で流すのは気持ち悪かったので、真っ先に暗号化しました。とはいっても、OpenSSHサーバーを導入しただけですが。

・nginxのURLリライト設定
phpBBやWordPressなど、Webアプリケーションの中には ".htaccess" ファイルが正常に機能し、URLがリライトされることを前提に作られているものがあります。これ困るんですよねー。nginxだと正常にリンクが機能せず、突然404が返ってきたりするので。
nginxの場合は、 "nginx.conf" ファイル内にすべての設定を記述することになっているため、URLリライト処理についても同様に記述する必要があります。nginxの設定についてはここでは触れません。

・DBサーバーインストール(MySQL)
データベースサーバーをインストールして、一通りphpMyAdminが使えるようになる所まで設定しました。うちのサーバーではMySQL8.0が動いているようです。バージョンによってもセットアップ方法が違い、戸惑いました。
今のところ、MySQLは、phpBBとWordPressのために動作しています。自分で直接DBを操作して勉強することもあるかも。あくまでも予定です。

あと、今後やりたいことですが...。

・ufw導入
・GUI環境削除、不要なパッケージの整理
・nginxの設定の見直し
・MySQLデータベースのパーミッション設定の見直し
・その他サーバーのセキュリティの見直し

を、ひとまずインターネット上での公開に先立つ準備として行いたいと考えています。
その後、ドメインの取得を行い、可及的速やかにhttps対応を行いたいかなあという考えです。

それから、公開サーバーの運用に必要となるメールサーバーですが、メールシステムの勉強という意味では、PostfixなどのMTAアプリケーションを自宅のサーバーにインストールするのも面白そうなのですが、ほとんどの個人向けISPからは、TCP25番経由で送信相手のメールサーバーのMTAに直接到達することができません(OP25B)。また、下手な設定のまま運用したりすると、迷惑メールの温床になるなど、色々とマズい事が起きるのかなあという所感です。ちなみにMTAはメールを送受信するだけではなくリレーする事もできるので、迷惑メールをバラ撒くための踏み台にされると良くないですね。
従って、メールサーバーの運用にはVPSを使うことを考えています。自分のドメインのメールアドレスが必要そうだったら、ということですが。

あと、今後やりたいこととして他に考えているのは...

・Rubyインタプリタの導入
・動作確認ついでにRedmineを動かしてみる
・ゆくゆくはMastodonを動かしてお一人様インスタンスやる

という感じでしょうか。
本当はRubyを動かすくらいなら今すぐにでもできるのですが、とりあえず閉域鯖から公開鯖に魔改造してしまう作業が直近では増えそうです。

あと、本来なら潤沢にあるはずの春休み期間を使ってやりたいですが、車のお免許を取得する作業(?)がある関係で、実機のそばでの作業は中々できそうにないです。やるとしても遠隔でSSHして操作することになるかなあ。

その都合上、サーバーの死活対応も問題になってきそうですねえ。サーバーマシンであればIPMIとか生えてるので、サーバーが生きていないときでもネットワーク経由で対応できるんですが、普通のMateにはそんなの生えてないので、サーバーに疎通しなくなったらお手上げですよねえ。何か考えときます。


P.S. サーバーのバックアップ方法について考えてなかった...

2020年8月11日火曜日

NEC Mateを買ってUbuntu 20.04を入れました

じゃーん。最近、NECのMate(MK31M/B-E)をお家にお迎えしました!
Ivy Bridge世代のCore i5-3450が載っていて、メモリは4GB DDR3、DVDスーパーマルチドライブ搭載と、そこそこいい感じのスペック。有効なWindows7ライセンス(Windows 10アップグレード可能)も付属します。ストレージは250GBのHDDと、少し時代遅れ感はありますが、どうせ後で交換するので気にしないことにします。

お値段はヤフオクで3,800円。 送料が2,000円ちょい掛かりましたが、お買い得です。

Mate、かっこいい...。


■ストレージ換装とUbuntuのインストール

このPCには250GBのHDDが搭載されていますが、我が家には旧メインPCから取り出して使わなくなってしまった256GBのSSD(Intel 545s)と、データがたっぷり入った2TBのHDD(WD20EZRZ)があります。せっかくなので、それを搭載することにしましょう。

このPCには、5インチベイ(光学ドライブで占有済み)、3.5インチシャドウベイ、3.5インチFDDベイがそれぞれ1つずつ存在します。うまくいけば、光学ドライブを含めて3台のストレージを搭載できそうです。

ですが、このPCのマザーボードにはSATAポートが2つしか存在しないため、ストレージを3台搭載するのは簡単ではありません。考えられうる対処法としては;
1. 光学ドライブを接続せず、代わりに2台のストレージを接続する
2. ポートマルチプライヤを使い、マザーボードのSATAポートを分岐して使う
3. PCIe to SATA 拡張ボードを使い、SATAポートを増設する
4. ストレージの内蔵をあきらめ、USB接続する
などがあります。
今回は3番の方法を取り、玄人志向から出ているSATA3I2-PCIeという製品を使ってSATAポートを増設しました。ですが結果的には、PCをスリープから復帰させた際に、拡張ボードに繋げたストレージをロストしてしまいアクセス不能になる症状が発生しています。症状の再現性もかなり高めです。こういった相性問題はよく見られることのようで、SATA拡張ボードの使用は、あまりオススメできるものではなさそうです。

これがストレージ換装と増設を終わらせた後の様子(配線は後で修正しています)。右上に、SSDとHDDがベイに1台ずつ搭載されている様子が見えます。
FDDベイにSSDを搭載するのも実は結構苦労していたり。ネジ位置の関係でうまく搭載するのが難しいんですよね。

そういや、このPCにはマザーボード上にPCIe x16スロットが搭載されていません。グラボをつけたい人は気をつけようね。


■Ubuntuのインストール

SSDにUbuntu 20.04 LTSをインストールします。
Ubuntuをインストールするのは、Linux OSの勉強を目的としています。Ubuntuにしたのは、たまたまLiveUSBが手元にあったからですね...数GBにも及ぶディストリビューションをポンポン落とせるほどの回線はなく。
Ubuntuでやりたいことは、基本操作を学んだり、シェルスクリプトに触れてみたり、まあ色々です。メインPCをデュアルブートにするのも考えましたが、使い慣れたWindows PCをそばで起動しておけばいつでも調べ物や作業、学校の課題などで使えるということで、独立したPCにUbuntuをインストールしたいなあと。それがMateを買ったきっかけだったりします。

インストールはそれほど困難ではありませんが、今回はトラブルの連続でした。
このPCはUEFIブートに対応していないので、ブートデバイスはMBRでパーティションを構成する必要があります。ですが、今回UbuntuをインストールしたSSDはもともとGPTでパーティションが構成されていました。そのままの状態でパーティションを全部削除し、パーティションを作り直してレガシーブートできる設定でUbuntuをインストールしましたが、肝心のパーティションテーブルがGPTのままなので、ブートできません。

LiveUSB環境でUbuntuをブートし、GPartedでSSDのデータをHDDにクローニングし、SSDのパーティションテーブルをMBRに変更し、GPartedでHDDからSSDにデータを戻し、Boot Repairでブートローダーを書き込みました。いやあ、大変だった。

本当はもっと効率的な方法もあるかも。

 

■Ubuntu環境のできあがり!

Ubuntu環境、構築できましたー!がんばって作業した甲斐あって、非常に快適に利用できています。
上の画像では、デスクトップ環境としてKDEを入れています。Kubuntuではないです。色々なデスクトップ環境を試してみたく...。

今はまだまだLinux初心者ですが、これから色々勉強していこうかなあと思ってます。基本的なコマンドなんかを少しずーつ覚えている段階です。

Mate、安くてかっこいいのでみなさんも一台いかが?

2020年7月17日金曜日

PCの大幅パワーアップ


じゃーん。買いました。2TBのM.2 NVMeのSSDです。
お値段は3万円をちょっと切る程度。SATAとNVMeで価格差はほぼありませんでした。
SSD、まだまだ高いですが、一昔前に比べて大幅に容量が増えました。

本体はこんな感じ。SSDとしては珍しく、コントローラーの上にステッカーが貼られてなく、丸見えになっています。銀色の大きなチップがSilicon Motion製のコントローラー。中央の小さな黒いチップがキャッシュメモリで、左側の大きな黒いチップが64層3D NAND TLCフラッシュメモリ。


それから、このようなヒートシンクも付いてきました。薄っぺらいですが、これでも多少の放熱効果はあるとのこと。私はまだ使っていませんが...


外箱、本体、ヒートシンク以外には付属品は全くありません。誰も読まない説明書や、扱いに困る保証書などは入っていません。(本当に新品が届いたのか、中古品を掴まされたのではないかと不安になってしまった...)

取り付けた感想ですが、多少は速くなった...ような気がします。SSDからSSDへの移行なのでどうしても速度差が実感しにくいのと、同時にメモリ増設を行ったことや、CPUが動作のボトルネックになっていることもあり、SSDの換装による速度向上効果を実感できていないのが正直なところです。

それよりも、ストレージの空き容量不足が解消された点が一番大きいかな。以前は256GBのSSDを使用していましたが、常に空き容量が20GB以下、ピーク時は空き容量が10GBを切っていたので、非常に使い勝手が悪かったんです。今回、2TBのSSDに移行したことで、何をしても使い切れないくらいの潤沢なストレージを手に入れられました。生産性がとても上がりそう。
今のところ、2TBのうち300GB程度しか使えていません。とりあえず、別のHDDに移してあった写真とかゲームとか、買ってから全然遊んでなかったスッチムゲーとかを入れておきました。

それから、メモリ増設もやりました。
私が使っている富士通SH75/C3は最大12GBのメモリを搭載できますが、メーカー推奨容量をガン無視して人柱になる覚悟で、思い切って32GBのメモリを購入しました。


買ったのは、TranscendのDDR4-2666 32GBx1 SO-DIMMという規格の製品。Amazonで15000円程度と、容量にしてはかなりのお買い得価格。メモリの容量単価もだいぶ下がった印象です。

取り付けると、DDR4-2400として動作しました。マザーボードにはんだ付けされている4GBと合わせて、合計で36GBが利用可能になりました。
メーカー推奨容量を大幅に超えているので動作するか本当に不安でしたが、今のところ不具合もなく安定動作しています。



36GBもメモリがあっても、実際のところ殆ど使いきることはできていません。そこでWindows君が気を利かせているのか、メモリに多くのデータをキャッシュしてくれています(SuperFetch / SysMain)。
これによる効果か分かりませんが、体感上ストレージへのアクセスが非常に少ない気がします。というか、ほとんどアクセスがない。かなり快適です。

PCの増強を終えて、重いゲームとかで色々遊んでみましたが、ストレージやメモリなどによるボトルネックが完全に解消し、CPUがボトルネックになりましたCPUの性能をフルに使い切れる状態となりました。
...ゲームをしていてCPU使用率100%に張り付くことが非常に多いんですよね。メモリに空きがあり、ストレージへのアクセスも少ないにもかかわらず、です。
ボトルネックを解消してCPUの利用効率を高めることが今回の目的だったので、目的は十分に果たせましたが、それと同時に、Core i5-8250Uの性能限界を実感することになりました。

今後機会があれば、高性能なデスクトップPCの自作にもチャレンジしてみたいです。
それから...中古でもいいのでThinkPad欲しいなあ。トラックポイントとか打ちやすいキーボードとかに憧れています。なかなか買う機会がないですが...。

2020年6月27日土曜日

【Arduino】delay関数を使わないLチカ

こんにちは。そろそろ遠隔授業に疲れてきたたかみやです。

みなさんは、Lチカってご存じですか?知らない方はいませんよね(強引)

LEDを点滅させる「Lチカ」は、Arduinoのチュートリアル的存在としても知られています。
新品のAVRにブートローダーを書き込んだ時なんかの動作確認にも用いられますよね

そんなLチカに関してですが、僕は最近、こんなものを書きました。Bloggerへのコードの張り方がわからないので画像で失礼しますが...
これ、なんだか分かります?実はこれも「ただのLチカ」なんです。このスケッチの動作自体は、Arduino IDEのスケッチ例に入っている「Blink」と全く同一です。

delay関数を使わない代わりに、millis関数を使って計時しているのがこのスケッチの特徴です。計時中もloop関数は常に実行されているので、計時しながら別の処理を実行させることができるのも特徴です。

実はこのLチカは、delay関数を使えばこんな風にシンプルに書くことができます。
非常に簡単ですね。
じゃあ、いつもdelay関数を使えばいいのでは...と思うかも知れませんが、そういうわけにはいきません。
delay関数は、指定した時間だけ、(ほとんど)すべての処理を止めてしまう関数です。ms単位で指定するので、引数に1000を指定すれば、1000ミリ秒=1秒間もの間、すべての処理が止まってしまうことになります。
Lチカの場合はLEDを光らせることにしかマイコンを用いていないので無問題ですが、マイコンで様々な情報を処理させたり、複数の表示デバイスを同時に用いたり、スイッチやセンサからの入力をリアルタイムで監視する場合など、delay関数が問題になる場面は多いのです。
そんなわけで、なるべくdelay関数を排除してプログラミングできないか、最近は模索するようにしています。今回のLチカプログラム「Blink_NoDelay」はその一環です。

ちなみに先ほどのLチカですが、pinModeやdigitalWrite関数などをAVR寄りに置き換えるとこういう書き方もできます。名付けて「Blink_NoDelay_HS」。HSは「High Speed」の略で、プログラムの動作を高速化させたという意味合いで付けた名前です。
この手法はマイコンの動作を高速化できる手法として知られていますが、スケッチの容量削減にも一役買ってますね。標準的なblinkスケッチが924バイトもあるのに対し、こちらはコードがゴリゴリ記述されているにもかかわらず、654バイトしかありません。
ちなみに先ほど説明した「Blink_NoDelay」は936バイトと、標準的なblinkスケッチよりもスケッチのサイズが大きくなってしまっています。pinModeやdigitalWrite関数を省いたことでスケッチの容量を削減できたことは明らかです。

ところで、なんでこの期に及んでLチカなんか書いているんだい?と思われるかも知れませんが...
実は実家に帰省していて、ArduinoとPCだけ実家に持って帰ってきたんですが、他の電子部品を全部アパートに置いてきたので、電子パーツを使った工作が全然できない状況なんです。
そのため、他の電子部品を一切使わないようなプログラムを書いたりして、気晴らしをしています。
Arduinoに2次方程式を解かせたり...

Arduinoに5元連立1次方程式を解かせたり...

とにかく色々やって遊んでます。まあ、C言語の練習かな。
2次方程式を解くプログラムはオリジナルですが、連立方程式はQiitaに掲載されていたプログラムをほぼ流用しています。
今までJavaでプログラミングを学んでいたので、C言語は訳が分からなくて苦労していますが、少しずつ慣れていけたらなと思います。

---- おまけ(三角関数を含む総和計算) ----
Arduino、何やってもめちゃくちゃ高速に演算して結果返してくれるので、ヤケクソになって「とにかく時間かかる演算ばかりさせてCPUパワーを消費してやるー!」と思い、こんな計算をさせてみました。この計算はATmega328Pにはしんどいようで、約2.8秒かかるという結果に。ですがよく考えてみると、16MHzのCPUでここまでできれば、まあ優秀ですよね。
ちなみに、計算に使用した数式ですが、以下のサイトで紹介されていたものを利用しました。

2020年6月5日金曜日

秋月のATmega168/328ボードが完成した!


じゃーん!できたー!!!
まともにはんだ付けするのがものすごい久々なので、部品の実装がめちゃくちゃ雑になっちゃいました。各方面から怒られそうなはんだ付けですが、これでも「めっちゃ丁寧にやったつもり」なんです許してください!

組み立てで難しかったのは、はんだ付け前の部品の固定でしょうか。特に1列のピンヘッダーとかピンソケットが動かないように固定するのが難しいです。多分、他の部品を実装する前にまずピンヘッダーやピンソケットを実装してしまったほうが楽に作業できるのではないでしょうか。

組み立てる上でのこだわりポイントは、基板上のLEDの配色です。このキットには元々赤色LEDが4個付属してくるのですが、自分は純正のArduino UNOに合わせて、電源LEDをグリーン、それ以外のLED(Tx, Rx, L)をイエローにしました。LEDのVfが2.1V前後で、数mA程度の電流を流せるものであれば、特になにもしなくてもポン付けできると思います。

このキットを組む上で避けては通れないのが、FuseBitとブートローダーの書き込みです。
FuseBitは、いわばマイコンに対する初期設定のようなものです。マイコンの動作条件などを指定します。ブートローダーは説明が難しいですが、簡単に言えば「Arduinoのスケッチを読み込むための下準備」といった感じです。

これらの初期セットアップをするためには様々な方法があります。
正攻法では、AVRISPmkIIという書き込み装置と、Atmel Studio 7という統合開発環境を使い、PCからマイコンにプログラムを書き込める環境を用意します。ですが、AVRISPmkIIは入手が今のところ困難なようですし、書き込み装置を別途用意するのはお手軽ではありません。
このため、ボードに標準搭載されているUSB-シリアルインターフェース "FT232RL" を使った、Bitbangと呼ばれる書き込み方法がお手軽です。
ですが、個人的にハマった点が、Atmel Studio 7はどうやらFT232RLからのBitbang書き込みには対応してなさそうなんです。悪戦苦闘の末、Atmel Studio 7を使うのは諦めました。

結局のところ、以下のURLで紹介されている手法を用い、AVRdude-serjtagを使ったBitbang書き込みを行いました。
外付けAVRライタ無しでBootloaderを書き込む - kosakalab
Bootloaderファイルは、Arduino IDEをインストールするとついてきます。

また、以下のサイトも参考とさせていただきました。助かりました。

ちなみにこれは耳寄り情報なのですが、既に動作するArduino(もしくはその互換機)を持っていれば、Arduino as ISPという機能を使って、Arduino(もしくはその互換機)同士を接続してブートローダーやスケッチの書き込みができるようです。結構簡単に扱えるので苦労も少ないかもしれません。
そういう面では、このキットは既にArduinoを持っている人が2台目3台目として組み立てるのに向いているとも言えそうです。

完成したキットでLチカをしたり、LCDで遊んでみたりしましたが、それは別の記事として書くことにします。
いやあ、マイコン遊びは超楽しいです。

2020年5月29日金曜日

Arduino互換ボードと買い物メモ

Arduino UNO欲しいけど高いなあ、と思っていたら、秋月電子でこのようなキットを見つけました。



ATmega168/328 マイコンボードキット | 秋月電子通商

1キットで2100円と、純正品のArduino UNOより1200円ほど安いです。
しかし、組み立てが必要であり、失敗するリスクもあります。ブートローダーの書き込みも必要で、そのためにはメス-メスのジャンパーも必要です。
買ってすぐ使えるArduinoの手軽さを考えると、差額の1200円の価値はあると思います。
しかしこれ、ちょっと気になるなあ。最近いいはんだこてを買ったことだし、はんだ付けの練習も兼ねてこの基板を組んでみたいです。

ちなみに。ブートローダーについては以下の記事が詳しいです。
Arduinoのブートローダって何?(1) - しなぷすのハード製作記

さて。これを買ってやることは、キャラクタ液晶の制御です。
元々キャラクタ液晶で遊んでみたくて、そのためにマイコンを買おうと思ったのが今回のきっかけです。
液晶本体やブレッドボードなどはすでに手元にあるので...
・Arduinoもどきボード
・チップ抵抗 22Ω (バックライト用。サイズ測らないとなあ)
・半固定抵抗 10kΩ (コントラスト調整用VR)
・半固定抵抗調整用ドライバー
・両メス端子 ジャンパー線
・USB Type-C to Mini-B ケーブル
・工具類(追加でニッパー、ラジオペンチなどを購入予定)
この辺があればいいでしょう。
手元になかったテスター類は実家から持って帰ってくる予定です。

キャラクタ液晶を使って何をしたいかですが、まあ色々です。とりあえず実験するのが今の目的で、何をするかは後から考えます。

今のところ構想しているのは、再生中の音楽のタイトルやアーティスト名をキャラクタ液晶やグラフィック液晶で表示したら便利そうかなーってところ。自分はよくSpotifyで音楽を聴くのですが、「この曲だれのだろー?」って気になることがよくあります。そういうときのためにに曲名とかアーティスト名をいつでも確認できるディスプレイがあると便利ですし、ついでに「お気に入り」に登録するボタンもつけておけば便利かなと思っています。
こういうことはArduinoでやるのは不向きかもしれないので、Raspberry Piでやりたいなと思います。いわゆる「ラズパイオーディオ」の機能の一部として実装してみたいですね。ラズパイでSpotifyの音楽流せるのかなあ。

あとは、これもArduinoでできるかは微妙ですが、MIDIのFM音源装置をつくってみたいなって思ってます。USBケーブルなどでPCとつなぎ、PCで再生したMIDI譜面の音をジェネレートする装置です。細かいことはまだ考えていないですが、とりあえず表示装置としてキャラクタ液晶つけたらかっこよくない?くらいの発想です。

2020年5月22日金曜日

1602キャラクタ液晶のバックライト抵抗メモ


サンライクのSC1602BSLBです。
秋月とかでよく売られている、16文字2行で、バックライトが黄緑色で、文字が黒いタイプの液晶です。Arduinoなどに繋ぐことで、数字列やテキストを表示できます。
僕はカホパーツで1000円ちょいで買いました。

この液晶、バックライトのための電流制限抵抗が実装されていません。そのかわり、リード部品の100Ω抵抗が2本付属してきます。「標準だと100Ωを1本繋げばいいけど、明るくしたいなら2本並列に繋いでね」とのこと。ですがこれが罠なんです。説明書通りに100Ω抵抗を繋いでも暗い暗い。合成で50Ωになるようにつなぐと確かに明るくなりますが、まだ十分な明るさではなさそうです。

ということで、バックライトから直接リード線を生やして、ブレッドボードに繋ぎ、10Ωの抵抗を何本か直列に繋いで検証しました。
なお今回使用した電源は、パナソニック製エネループ(公称1.2V)を4本直列にしたものです。テスターが手元になかったため、電源電圧は測定していません。

うん、20Ωくらいがちょうどいいですねえ。明るい場所でもしっかり光って見えます。


暗い場所だとこんな感じ。かなり明るいので、主に暗所で使うという場合はもう少し抵抗値を大きくしてあげてもいいと思います。
10Ωも試しました。気のせいかもしれませんが、さすがに10Ωになると液晶の裏面がほんのり温かくなっている気がしました。そんなに明るくする必要はないということで、10Ωでの常用はやめておきます。

あとは基板裏面のパターンに、20Ω程度のチップ抵抗をハンダ付けすればOKです。市販で手に入りやすいのは22Ωでしょうか。
今回は電流制限抵抗の値を決めるのが目的だったので、チップ抵抗は買っていません。また今度、Arduinoを購入したときにでも、液晶にチップ抵抗をはんだ付けし、最終的に使える状態まで持っていくつもりです。

なおこのバックライトなんですが、やっぱりどうしても、利用するシーンによって必要な明るさは変わってしまいます。周囲の明るさがめまぐるしく変わるといった用途では、バックライトの明るさを後々変更したくなる時もあると思います。
こういった場合は、バックライト端子に直接ピンを立てて、可変抵抗に繋いだり、10~20Ωくらいの抵抗を直列に挟んでマイコンに繋ぎ、PWMで明るさを調整しても良いでしょう。LEDの明るさをPWMで変更するのはマイコン工作では定番だと思います。
今回はそこまでやりませんが、機会があったらやってみたいですね。

・追記: 消費電力計算
今回使用した、SC1602BSLBのバックライトですが...
Vcc=5V
Vf=4.2V
R=20Ω

この条件では、バックライト点灯回路に流れる電流は、次のようになります。 
If=40mA

消費電力としては、LEDで168mW、抵抗含めて200mW消費する計算です。

・さらに追記: チップ抵抗について
この液晶のバックライトを点灯するには、2種類の方法があります。一つはバックライト端子にピンヘッダを立てる方法で、この方法では液晶表示とは無関係にバックライトを個別制御できます。そして本項目で触れるのが、液晶本体とバックライトで電源を共用する方法です。
液晶裏面のR9のランドに電流制限のためのチップ抵抗を取り付け、さらにジャンパーランドJ3をはんだでショートさせることで、液晶本体のVddとVssの端子からバックライトに電源を分岐させることができます。この場合、Vdd, Vssのオン・オフと連動してバックライトが点灯するため、「液晶を表示したままバックライトだけを消す」といった制御ができなくなります。

この液晶に付属するマニュアルには、バックライト抵抗R9のサイズが記載されていません。アマチュアの方の多くはリード部品の抵抗で代用されているようです。
自分は見た目を綺麗に仕上げたかったのでチップ抵抗を使いました。寸法をちゃんと測ったわけではないですが、試しに2012サイズの抵抗を取り付けたところ丁度いい大きさでした。

ただし、はんだ付けは難しかったです。米粒よりも小さい部品なので位置決めが困難ですし、適切なこて先やピンセット、フラックスなどの道具や材料をそろえる必要もあると感じました。今回はネット上で多く紹介されている「糸はんだでランドに予備はんだをし、部品を片側にはんだ付けし、もう片方にもはんだ付けをする」といった手順を試しましたが、はんだ量の調整が困難で、フラックスもどんどん揮発するためはんだが表面張力を失ってしまいました。結果として到底お見せできない仕上がりに...。
今後チップ部品を取り付けることが多くなるかもしれないので、道具をきちんとそろえたうえで練習したい所存です。

2020年4月19日日曜日

10万円をなににつかうかの私的めも

なんか、知らんけど、国が10万円を渋々ばら撒こうとしてるらしいんです。知らんけど。
本当にもらえるのか確定してないので、現時点ではまだ捕らぬ狸の皮算用って感じなんですが、妄想するのは楽しいのでメモしておきます。
こういうの見るの好きじゃないって人もいると思うけど、自分用メモなのでごめんね。

・PC
満足いく構成のPCを組むなら15万くらい必要なのかなあ、と思っていたんですが、なんか、10万ちょっとあればいいのが組めるっぽいんですよね。
構成を組みました。
良いよね。多分これで動くよね。
AMD Ryzenが人気なのでそっちで組んでもいいと思うんですが、CPUをAMDにするならビデオカードもRadeonにしたいところだと思うんです。(あるいはAPUというものもあるんでしたっけ?)。ただ、dGPUを載せるならぼくはGeForceにしたいなあっていうこだわりがあって、悩んでますね。気が向いたら、Ryzenで構成考えてみたいかな。

ただ、PCを組む必要性は正直あんまり感じてないんです。
まず、そんなにゲームしないんですよね。手元に高性能PCがあればゲーム遊ぶハードルは確かに下がるんですが、ゲーム買うお金あんまりないし、回線が細いのでゲーム落とすのも大変なんです。
これらのマイナス要因のどれかが解消されたらPC購入もアリかなーって思ってるんですけど、PC組むなら、最低限でも光回線とセットにしたいです。
ただ、PC組んじゃうと他のところまで手が回りません。

・PC-98
PC98Factoryってところだと、本体が5万くらい、CRTが3万くらい、キーボードが5000円くらいであるみたいです。
前々から遊んでみたかったので、欲しいんですが、学生にとって10万は結構大金です。なので、こんなのに金突っ込んだら "PC-98熱" が冷めたころに後悔しそうなんで、あんまり積極的に買うのは考えてないです。
あと、色々拡張ボードとか買っていくともっとお金必要になりそうです。

・カメラのレンズ
カメラ関係で欲しいのは山ほどあるんですが、広角~標準の単焦点だったり、望遠ズームだったりが欲しいです。ざっと見積もって1つあたり7万くらいかな。
買ったら満足すると思うけど、もっと他の用途にお金使いたいかなあ。今のところは。

・フィルムカメラ
EOS-1Vが欲しいって言ったら、写真部の先輩に「お前正気か?」と言われました。ええ、分かってます。正気じゃないと思います。

・全自動エスプレッソマシン
これ買ったら生活が豊かになると思うんですよね。
現状、コーヒー飲める手段が、コンビニコーヒーか学内の自販機コーヒーかスーパーの安いドリップパックのコーヒーくらいなんですよね。
スーパーの安いアレはハッキリ言ってマズいと思います。僕の淹れ方の問題かもしれないけど、どうやって淹れても雑味マシマシで全く美味しくないです。マズい。
手軽にコーヒー飲める方法は欲しかったので、結構前向きに検討してます。
デロンギの例のアレが8万くらいらしいので、まあちょうどいいかな。

・車の免許
残念、足りない!!あと20万くれ!!

・光回線
まじめに引きたいんだがコレ?って感じです。
大学の遠隔講義も実施されるし、(遠隔講義には間に合わないと思うけど)回線を見直す機会としては丁度良いと思ってます。
今のところ、ドコモ光を引きたいかなーって思ってます。NTT系のアクセス網はかねてより混雑が指摘されていますが、国内で最もIPv6の対応が進んでいて、それらに関する情報も豊富なうえ、IPoE方式による接続ではネットワークの混雑を大幅に避けられることから導入を検討しています。
ヤマハのエントリールーターも試したかったんですよね。RTXの800番台。ぶっちゃけシスコとかNECにしても良いんですが、国内でオタク層に割と人気なのがヤマハだし、昔からネットワーク機器作ってるメーカーだし、業務向けで安定した品質がありそうなので、ヤマハでいいかなーって思ってます。
問題は解約時の違約金です。いま光回線を引くと、どうしても大学を4年で卒業して引っ越すときに違約金を払わないといけなくなります。(留年すれば解決!とか言ってきたやつは許さねえw)
今はWiMAX2+を固定回線代わりに使っていますが、正直もう無理です。限界が見えています。

・モバイルノートのSSD換装
M.2 SATA 256GBのSSDが今刺さってるんですが、これを1TBのNVMeに換装したいです。正直もう容量足りてないので。
2万じゃ足りないらしい。軽く見積もって3万超えかなあ。

2020年4月15日水曜日

アナログモデムの通信音について

アナログモデムと呼ばれる、電話回線を使ってデータ通信をするための装置があります(多分、今でもFaxモデムとして売ってます)。インターネット接続手段としても利用され、アナログモデムでプロバイダーへ接続する方式をダイヤルアップ接続と呼びます。
まだ光回線やADSLがない時代に最盛期を迎えた方式で、現代の日本ではダイヤルアップ接続によるインターネット接続はほとんど役目を終えています。ですが、アナログモデム自体は「ファクシミリ(Fax)」という形でまだまだ活躍しています。Fax電話機にはアナログモデムが内蔵されていて、画像データを音声周波数帯域に変調して送り合っています。

アナログモデムは独特の通信音、接続音で知られています。「ピーヒョロロー」と表現される音で、当時からパソコンを利用していた方や、家族がパソコンを使っていたという方ならば聞いたことがあるかもしれません。今ではむしろ、リアルタイムでアナログモデムの通信音を聞いたことが無い方のほうが多数派かもしれません。

アナログモデムの通信音を可視化して詳しく解説した動画を何本か見つけました。
Modemowe połączenia dial-up - migawka elektroda.pl | YouTube
Sound of the dialup modem explained | YouTube

1つ目の動画が分かりやすくてオススメです。ポーランド語ですが英語字幕があり、平易な英文なので比較的読みやすいと思います。
2つ目の動画は図が精細に描かれていますが、情報量が多すぎて読みにくいかも。

これらの動画を見て頂くと分かるのですが、あの通信音は接続にあたっての各種設定や下準備を行うという、いわゆるネゴシエーションを行っている音なんですね。
何らかの問題で接続がうまくいかなかったとき、ユーザーが「どこで止まっちゃったんだろう」と調べやすくするために音を出しているんだと思います。
ネゴシエーションが終了して実際に通信を開始すると、うるさい通信音はミュートされてしまいます。あくまでもミュートされるだけなので、実際の電話回線には常に音が流れ続けています。

■ネゴシエーションでは何をしているのか
アナログモデムの規格は高速化のための拡張を繰り返されたため様々な通信モードがあり、接続相手が対応する規格や電話回線の質によってそれらを使い分けます。
そのため、まずは低速かつ確実な通信モードで最小限の接続を確立し、それを起点として「より高速に通信できないか、より確実性の高い通信ができないか」をお互いに探り合います。
高速な通信モードでの通信が確立した場合には、通信を安定させるための音響設定などを調整します。低速な通信モードではそれが必要ないため省略されます。

以下は、先ほど紹介したポーランド語の動画を参考に、ネゴシエーションの手順をまとめたものです。理解するためには電話回線の基礎知識が必要になります。

・交換機から発信モデムへダイヤルトーンの送出
・発信モデムから交換機へ電話番号の送信
・(交換機から相手モデムを呼び出す)
・(相手モデムが応答し、回線接続が完了)
・相手モデムはV.8 bisで接続を試行
・発信モデムはFSK 300bpsで応答、ネゴシエーションのためV.8への切り替えを要求
・相手モデムはV.8への切り替えを了解
・発信モデムはV.8 bisでの接続が終了することを確認
・相手モデムは送信チャンネルにおけるエコーキャンセラーを無効化
・発信モデムは対応する接続機能の一覧をFSK 300bpsで送信
・相手モデムは対応する接続機能の一覧をFSK 300bpsで送信
・互いのモデムが対応する接続機能について、DPSK 600bpsでより詳細に通信
・電話回線の質を測定するために広帯域音声信号を送信
・受信した信号の結果についてDPSK 600bpsで通信
・最終段階で、イコライザーとエコーキャンセラーを調整
・ネゴシエーションが完了し、接続が確立されるとモデムのスピーカーはミュートされる

■なぜ通信が「音」として聞こえるのか
通信に使われる電気信号は交流信号です。
電話回線は、人間が発する音声を、電磁誘導などを利用して交流の電気信号に変換して送ります。実際に回線を流れるのは、音声通話に必要かつ合理的な周波数帯域である300Hz~3.4kHzの信号です。
アナログモデムは、電話回線に流すことのできる、この300Hz~3.4kHzの周波数帯域を使い、コンピューターにおける通信に適したデジタル変調方式を使ってデータをやり取りします。
このアナログモデムの変調信号は人間の可聴周波数帯域に含まれているので、アナログモデムが送り合う電気信号をスピーカーなどで空気の振動に変換すると、いわゆる「ピーヒョロロー」という音として聞こえるわけです。

ちなみに、この「通信音」なんですが、ビットレートによって人間が体感できる音が変わってきます。
ビットレートが低い場合は「ピロピロピロ」といった音がします。まだゆっくりした音です
1200bpsくらいになると、「ガラガラガラガラ」という非常に速いペースの音が聞こえます。
9600bpsやそれよりさらに上のビットレートでは「ジャーッ」というホワイトノイズのような音になります。

2020年4月10日金曜日

PC-98で音源を鳴らして遊びたい話と、環境構築の備忘録的なもの

「PC-98で遊びたい」が正しいのか「MS-DOSで遊びたい」が正しいのか、自分でも分かってないんですが。ふふふ。

事の発端は、自分のTwitterのタイムラインに、ある動画が流れてきたのがきっかけです。
下北沢俊一(@Tani_Century)氏のこの動画なんですが、FM音源特有のちょっとピコピコしたサウンドもさることながら、MIDI(で合ってるかな?)譜面のビジュアライザーの素晴らしいGUIに感銘を受けてしまって、「これすき!これで遊びたい!!」という思いが止まらなくなってしまったわけです。

自分自身、Windows XP x86の時代からPCを触り始め、中学生の頃から自分専用のWindows 7 x64マシンに当たり前のように触れて育つという大変に恵まれた(?)世代なわけですが、そんな自分から見ても、PC-98の当時のマシンだったりUIというのはむしろ現代以上に先進的に見えるわけです。とてつもなくカッコイイし、それだけではなく「このパソコンがあれば何でもできるんだ」という充実感というものを強烈に感じられます。そして、当時の人々もまた、自分と同じような感覚を持っていたに違いありません。

とまあ、ポエムのような前書きはさておき。

自分がやりたいこととしては、MS-DOS環境でFM音源など各種音源をピコピコ鳴らしてみたくて、出来れば各種ビジュアライザー上で音楽を流したい、と。広大な電子の海を漁れば譜面くらい転がっているでしょうし(権利関係が怪しいものも多いかもしれませんが)、最悪なければ自分で打ち込めばいいや(作れるのか?)、くらいに考えています。

元々はFMDSPというビジュアライザーに惚れ込んでしまったのがきっかけなので、それらビジュアライザーをリスペクトして作られたWin32向けのソフトを色々試しました。
まず試したのがWMDSPですが、こちらはあまりにも重くて動作困難でした。
次に試したのがMDXWinです。こちらも予想通りかなり動作が重いですが、WMDSPほど重くはなく、十分余裕を持って動作させられました。Web上で配布されていた「きまぐれオレンジロード」の譜面を鳴らしてみたところ、綺麗なUIと音色で動作しました。
問題としては、古い環境向けのソフトですので、想定されている画面解像度が随分荒いのでしょう、FullHD環境で表示させると表示が小さくて読みにくいというものが一点。
それから、MDX形式の譜面の入手性が悪いというのが一点(これは当たり前の話ですが)。
最後に、「やっぱりFMDSPライクのGUIが欲しい...」ということで、自己満足出来なかったのが一点。

これらを踏まえて、やっぱり実機のMS-DOSでビジュアライザーとか動かしたいなあという気持ちが高まってきました。当時の環境を復刻させたい、というわけです。

自分なりに、当時のハードウェアを使ってFMDSPで譜面を鳴らしている方々の環境を調べつつ、環境構築を自分なりに考えてみました。
参考にしたのはこちらの動画: ナイト・オブ・ナイツ 【東方旧作音源 PC-98】 - ニコニコ動画
まずハードウェアですが...
本体としては、PC-9821Xa10/C4を使っているようです。こちらはPCM音源が内蔵されているようなので、別途サウンド関連のハードウェアを増設しなくても、PCM音源やその下位互換のFM音源くらいなら鳴らせるでしょう(なんにも詳しくないけど)。
ただし、この動画の作者さんはC Bus接続のサウンドボード「PC-9801-118」を増設されています。従って、先ほどの自分の見立ては誤りであり、デフォルトではFM音源は鳴らないという可能性や、音源を鳴らすにあたって様々な制約がある可能性もあります。
スペックは、AMD K6-2 450MHz、SIMM 16MB、HDD(CompactFlash) 4GBとあります。FMDSPは重いそうですから、スペックはできる限り高性能なものが欲しいところです。
HDDに関しては「4GBの壁」というものがあり、4GBを超えるとそれ以上の領域は認識しないことや、当時のHDDはもはや骨董品であり、消耗品でもあることから入手しにくいという問題があります。したがって、IDE互換のインターフェースを採用したCFカードを応用し、物理的なコネクタ形状を変換してHDDの代用とするのが定石のようです。この辺りはあとから考えます。

ソフトウェアとしては、 OSにMS-DOS6.20、音源ドライバーはPMDPPZとあります。OSはFreeDOSで代用しても良いでしょう。ドライバーは盲点となりがちで、これがないと当然音が鳴りません。ドライバーはまだ詳しく調べていないので、今後詳しく調べておきます。
プレイヤーはFMDSPとあります。こちらはVectorで今でも配布されており、既に実行ファイルを入手しています。

あとはキーボードとディスプレイですが、キーボードは専用のものが必要でしょう。配列もキーの種類や役割も独自のものになってしまうので、今どきの日本語配列や英語配列のものではダメでしょう。コネクターもPS/2ですらないようです。マウスはオプション扱いだろうから無くてもいいでしょうし、あったところで使い道はそうそう無いかもしれません。
ディスプレイは信号としてはAnalog RGBで、コネクターはD-Sub形状ですが15ピン3列と15ピン2列の2種類があるようです。どちらにせよ変換してディスプレイに繋げば動くはずなので、「無ければ変換アダプタを作る」くらいの精神で。
当時モノのディスプレイは既に骨董品だと思いますが、やっぱり当時モノのCRTディスプレイに憧れます。ですが、こだわらなければCRTディスプレイ自体はWindows XPの初期の頃まで普通に使われていたはずなので、どこかでそれを入手してくれば「それっぽく」なるでしょう。
実はアナログ接続のカラーLCDは手元にあるので、PC98本体の動作確認にはそっちを使おうと思います。

最後にハードウェアの入手方法ですが、PC98Factoryというサイトを見ていると意外にもリーズナブルな価格で手に入るみたいです。もうすでに骨董品みたいなものだと思うのですが、PC/AT(DOS/V)互換機が世界標準になる以前はPC98が国内標準のような存在だったそうなので、そのおかげで安いということなのでしょうか。詳しくないですが...。

今はお金も厳しく、PC98を買えるのがいつになるかは分かりませんが、とりあえず現段階で調べたことをまとめておいて、今後またPC98が欲しくなったときのために活かします。
相変わらず内容の薄い記事ですが、今回はこの辺で...。

2020年3月30日月曜日

Fukuoka Growth Nextでdocomo 5G基地局を撮影


2020年3月25日に一般向けにサービスを開始したdocomoの5G(第5世代移動体通信システム)ですが、福岡でも既に複数個所でのサービス提供がアナウンスされています。
そのサービスエリアのうちの1か所にあたる Fukuoka Growth Next には、屋内向けの 5G 基地局が整備されています。
今回はその設備の一部を撮影してきました。


今回撮影した通信設備の全体図です。
Fukuoka Growth Next の1階部分の廊下、東側と西側に、このような設備が1か所ずつついています。写真はそのうちの1か所(西側)です。
これらの設備は、Sub-6GHz 帯の通信を担っている設備のように見えます。
また、Fukuoka Growth Next の基地局整備に関して判明したのは、屋内設備のみの整備であり、屋外にはアンテナ含め一切の設備が整備されていない点です。ただし、今後屋外設備の整備が進む可能性は否定できません。




それぞれの通信設備をアップで撮影しました。 
私はこれらの装置には詳しくないですので、詳しい方がいらっしゃればコメントで情報を補足していただけるとありがたいです。

アンテナとしては、このような屋内向けの小型のアンテナが廊下に点在していました。
形状としては IMCS 局などでよく見かけるタイプのものだと思います。

その他、minne LAB というコワーキングスペース内に28GHz帯のアンテナ(280L2SRU)が上下逆さまに取り付けられていることを確認済みです。
ただし、minne LAB 内は一般の方の立ち入りを制限されていることや、受付に常駐のスタッフさんがいないことなどから、許可を取っての撮影は今回していません。

今回撮影した機器の大半は銘板もアップで撮影していますが、画像枚数が多くなりすぎるので掲載はしていません。必要な方がいらっしゃれば追記したり別途アップロードするなどして情報提供します。

最後におまけ。
Fukuoka Growth Next 内に設けられた docomo 5G の特設ブース(?)です。
ディジタルサイネージとパンフレットの配布、VR ヘッドマウントゴーグルの体験などがあります。展示内容は写真にあるもので全てで、大した展示内容ではないと思いますが、一般の方でも自由に立ち入れる場所にありますので興味がある方は是非。

2020年3月25日水曜日

docomoが5Gをはじめるらしいので

一昨年くらいからずっと5Gを試したくて試したくて。高校の時から「5Gの端末が出たら人柱になるんだ」なんて言いながらずーっと待ってました。
いよいよなんですね...!

5Gの概要などはドコモ5Gホワイトペーパーを見て頂いたりすると分かりやすいのかなと思います。
「ミリ波帯を使った今までとは根本から違う通信方式」と思っている方も多いかもしれませんが、そうではなく、今までの4Gまでの技術を長期的に成長させつつ、新しい無線アクセス技術としてミリ波帯など非常に高い周波数帯も取り入れるという構造になっています。5Gの土台はあくまでも4Gであって、全くの無から5Gが生えてくるというのは違います。
そして、5Gでは端末や基地局を増強して一人あたりの通信速度を増大させることだけではなく、より多くのユーザーが同時に快適に通信を行えるという「大容量化」も重要な目標になっています。そのためにはバックボーンの整備や更新もしていかないと5Gの恩恵はなかなか得られないのかなあと思ってます。

5Gのサービスインが秒読みに入るいま、全国で5Gの基地局整備がどんどん進んでいます。基地局は意外な場所に整備されていることも多く、例えば博多駅博多口では地下通路の入り口の建物に基地局が取り付けられています。
こういうのとか...

こういう感じのものが至る所で見れます。
5Gの28GHz帯のアンテナはお弁当箱のような形状で非常に目立つため、探しやすいと思います。
福岡では、博多駅博多口のほかに、福岡市役所や大名小跡のFukuoka Growth Nextなどでドコモの5G基地局が整備されているようです。市役所にあるのは知っていましたがGrowth Nextに整備されているのは初耳ですので、今度撮影してこようと思います。

5Gの当面の課題は通信エリアです。今まで以上に高い周波数帯を使うため、直進性の高さや到達距離の短さなどに阻まれてエリア整備が難しくなるでしょう。
閑散としたエリアでは今までのように700MHz~2GHzといった低めの周波数帯を主に活用し、比較的人の集まる場所でサブ6と呼ばれる比較的高い周波数帯を使い、非常に多くの人が滞留する場所や通信量が膨大な場所において28GHz帯を整備するなど、バンドの使い分けが今まで以上に進むのではないかなと予測しています。
航空祭や屋外フェスといった、大勢の人が一堂に集まる催事なんかで、移動基地局車を持ってきてサブ6や28GHz帯を開放したりできたら良さそうだな、とも思ったり。
いずれにせよ、地方でも5Gの恩恵が受けられるまでどれくらいの期間が掛かるのかが気がかりですね。

思えば、日本でLTEのサービスが始まった当初もエリアが相当狭かったと記憶しています。docomoでは2010年終わりごろから始まったサービスですが、10年が経過した今では全国をほぼ網羅しており、LTEと入れ替わる形で3Gのサービスが終わりを迎え始めようとしています。LTEの導入によって、それまで低速だった屋外でのデータ通信が十分高速かつ実用的なものになり、ブラウジングやSNSのみならず動画のストリーミング再生すらスムーズにこなせるようになりました。まだまだ目新しい存在だったスマートフォンも、LTEに支えられてその地位を確固たるものにし、普及が加速していきました。

そして、今から5年後、10年後を考えたときに、5Gがどれくらい全国に浸透しているのか。LTEが携帯電話のあり方を変えたように、5Gがスマートフォンのあり方をどのように変えていくのか。これからが楽しみです。


2020年3月12日木曜日

HDDの論理障害が発生したのでデータを復旧した話

普段使っている、ウェスタンデジタルのHDD(WD20EZRZ)がある日突然論理障害を起こしてアクセスできなくなったので、自分でデータ復旧を行った話を軽く時系列順にまとめました。

■おやくそく
データ復旧作業には、データ全喪失の危険性が常に付きまとう。
「HDDから異音がするなど、明らかな物理障害の兆候が見られる場合」や「喪失が許されないデータや、仕事で使うデータが入っている」ような場合は、絶対に個人でのデータ復旧を試みてはならない。
個人でのデータ復旧作業はあくまでも実験や遊びと同程度のものであると考え、完全な自己責任の下で行うべきである。
また、この記事はあくまでも日記であり、データ復旧の方法を紹介するものではなく、この記事を参考にして行ったデータ復旧によって損害が起きた場合も一切の責任を負わない。

■今回の作業環境について
・PC: 富士通 LIFEBOOK SH75/C3, Windows 10 Pro 64bit
・内蔵ストレージ: Sandisk SD9SN8W-256G-1016 (M.2 SATA 256GB)

・復旧対象のHDD: WD20EZRZ(3.5インチSATA 2TB)
→元々デスクトップPCで使っていたデータドライブ。PCを入れ替えた後も外付けキットを介して上記PCに接続。ファイルシステムはNTFS、パーティションはGPT。

・作業用ストレージ1: Intel SSDSC2KW256G8 (2.5インチSATA 256GB)
・作業用ストレージ2: SanDisk 64GB SDXCカード(並行輸入品のよくわからんやつ)
→PCの内蔵ストレージの空きがないため、データ移行の際に補助的に利用(そして作業に手間取った要因でもある)。

・外付けキット: フリーダム社のこの製品(SATA 1.5Gbps ⇔ USB2.0)
→上記のHDDや作業用SSDにPCからアクセスする際に使用。速度が非常に遅く、私の環境では最高でも30MB/s前後の速度しか出ない。その代わりに非常に安定した読み書きができるので、信頼して使用している。

・今回の復旧作業の立役者: Ubuntu 18.04.3 LTS (Live USB)
→Testdiskを叩いたり、辛うじて読み出せるようになったHDDからデータを引き抜いたりするのに大活躍。

■障害の発覚と状況の切り分け(時刻はJST)
・3/10 18時頃
いつものようにHDDをWindowsにつないでも認識されない(Dドライブをフォーマットしますか?の表示すら出ない)。
Adminでログインし、ディスクの管理画面からHDDを見てみても、パーティションがNTFSであるともRAWであるとも書かれておらず、ディスクの容量も16384GBと、明らかにおかしな表示。そのうえ、ドライブレターが消えている。これではchkdskコマンドを叩けないため、Windowsでの対処は困難と判断。
HDDからの異音もなく、CrystalDiskInfoからのSMART情報の読み込みも成功。不良セクタ等の表示にも異常が無いことから、論理障害を疑う。

・3/10 22時頃
作業用SSDにUbuntu起動イメージとRufasをダウンロードし、LiveUSBの作成完了。これ以降はUbuntuを主に使用して作業を進めていく。

・3/10 23時以降
gparted、ntfsfixなどを試したがパーティションが読み込めない。
sudoでapt updateとapt install testdiskを叩き、testdiskからEFI GPTを選択してクイックスキャン。
希望するファイルやフォルダがずらっと並んでいることを確認した。

■障害からデータを救出する作業
・3/10 23時以降
testdiskで発見したパーティションの痕跡が正常っぽかったため、そのままWrite。
結果、Ubuntuからはファイルが正常に読み出せる状態に。

・3/11 0:30頃
Windowsからファイルが読み出せるか試行も、「ファイルシステムがRAWである」と表示され、フォーマットを促される(怖いからやめてくれ!)。ドライブレターが復活するも、この状態ではchkdskでのファイルシステム修復も出来ない。
再度testdiskでの復旧を検討しつつ、パーティションの復旧方法を模索する。

・3/11 1:00頃
再度Ubuntuに入り、最低限必要なデータを退避させる作業に入る。
この際、Ubuntuから作業用のSDカードにデータを一旦移動し、その後Windows上から作業用のSSDにデータを移行してSDカードの残量を空けるという方法をとったため、非常に手間取ってしまった(作業用SSDの都合上Ubuntuから書けないことや、作業環境の貧弱さなどが関係した)。

・3/11 2:00頃
作業を一時中断。

・3/12 0:00頃
データ退避作業の再開。この時点では最低限必要なデータのみを作業用SSDへ退避させている。

・3/12 3:00頃
データを退避させたため、testdiskから再びWriteを試みる。
相変わらずUbuntuからはファイルが読めるも、WindowsではRAWと認識されてフォーマットを促される(chkdsk叩けない)。
HDDの状況がこれ以上良くならないことを確信。

■最終的な復旧方針
・必要なデータはHDDから作業用SSDやSDカードにすべて待避。
→完了。不要なデータもHDDに多く存在したが、今回はすべて見捨てることにした。

・HDDは一度フォーマットし、パーティションやファイルシステムを消して書き直す。
→完了。

・HDDに試験的に少量のデータを書き込み、問題なければ待避させたデータを戻して復旧完了。
→HDDの健全性を確認したため、データを書き戻す作業を継続中。
→完了(3/13)。現状ではHDDや保存したデータに異常は見られない。


■今回の障害の原因は?
・以前「HDD用の外付けケース」を2台ほど試したことがあるが、2台とも連続読み書き中にフリーズするという粗悪品であった(変換基板の熱暴走っぽい)。
・HDD外付けケースに内蔵した当該HDDへのデータの書き込み中に、Windowsを巻き込んでフリーズし、そのたびに外付けケースの電源を途中で落としたり、USBを引っこ抜いたりしていたので、ファイルシステムが破損してしまった可能性がある。
・あくまでも推測であり、詳しい原因は分からない。

■今回の障害における学習ポイント
・HDDの障害原因は必ずしも物理障害や不良セクタが原因とは限らず、今回のような論理障害も起きうる。
・HDDに限らず、大容量ストレージに保存したデータはいつ喪失するかわからない。
・NTFSが壊れるとWindowsからは読めなくなることがあり、Linuxからは読めても修復作業までは困難になる。
・バックアップは重要である。

■今回の障害対応で気をつけたこと
・障害が起きたHDDへの書き込みはあくまでも最小限(testdiskでのWrite)にとどめ、ファイルを移動したり書き込んだり削除する操作は行わず、読み出すだけに留めた。

■感想
作業環境が貧弱で苦労したのと、論理障害からの復旧作業は初めてなので手探りで復旧するのが大変でした。
データを全ロストする恐怖が付きまとう中でこんな面倒な作業の繰り返しをやらされる大変さを考えれば、データ復旧業者の作業費用は決して高いものではないなと感じます。

2020年3月5日木曜日

電線共同溝の地上機器について

日本は世界的にみても電柱や電線が多い国だとされています。
電柱を使って架空線で配線する方式には「安く迅速に工事できる」「狭い道でも配線が容易」というメリットがありますが、景観に対する悪影響や、地震や風水害といった災害への弱さが問題視されてきました。そこで我が国でも進められているのが「電線類地中化事業」です。

現在行われている電線類地中化事業では、電線共同溝(C.C.BOX)という管路を地中に埋め、そこに様々な事業者の配電線や通信線を収容するという方式がとられています。
この管路は普段は地中に完全に埋もれていて、地上から目にすることができませんが、管路の途中途中に設けられる地上機器やマンホールといった「特殊部」を目にすることはできます。

今回は九州電力管内の地上機器を撮影してきましたので、写真とともに紹介します。

■地上設置型開閉器塔(SWT)

開閉器とは電気用語でスイッチを意味します。
6,600V高圧系統を区分するための装置で、高圧系統を切ったりつなげたりする役割があります。一般的に、普段は開閉器が「閉」つまりオンの状態になってますが、作業や保守点検などで必要な際には「開」つまりオフにすることができます。

地上設置型変圧器塔(TR)

6,600Vの高圧で送られてくる電気を降圧し、100V/200Vの低圧に下げて配電するための装置です。通称「パットマウント」と呼ばれています。
電気は高圧であればあるほど、大量の電力をより細い電線で送電でき、さらに送電ロスが少なくなるという性質があります。しかし、高圧の電気には、感電のリスクなどが高いなどの扱いにくい点があります。そのため、変電所やパットマウント変圧器など要所要所で変圧して、目的通りの電圧に調整しています。

■地上設置型低圧分岐装置(LB)

地中の低圧電線路の幹線を分岐させ、家庭やお店といった需要家に配線するための分岐箱です。地上設置型のほか、地中のハンドホール内に設置する分岐装置もあります。
他の電力会社ではLBではなくLSと略しているところが多いようです。

■おわりに
この記事を書いたのは、「地上にいろんな機器が置いてあるけど、なんのための箱なんだろー?」と疑問に思ったのがきっかけでした。この記事を通して、電線共同溝について知識が深まれば幸いです。
地上に設置される機器としては、今回ご紹介した3種類がほとんどを占めます。
今回ご紹介した機器はすべて地上に露出しているものですが、このほかにマンホールやハンドホールも撮影してきました(蓋だけで、内部は撮影していませんが...)。こちらも機会があったらご紹介したいと思います。

■参考にさせていただいたサイト
九州高圧コンクリート工業/ハンドホール
地上機器の略称と正式名称を紐づけるのに役立ちました。
配線分野 | 九電テクノシステムズ株式会社
LBの役割について調べさせていただきました。
CCBOX(電線共同溝)とは?
電線共同溝の基礎知識について、わかりやすく解説されています。
電線共同溝の設備 | 道路 | 国土交通省 関東地方整備局
電線共同溝の機器の概説と、ハンドホール内部の写真が閲覧できます。

※2020/3/15 - 画像の差し替えを行いました。

ATmega328P-PUを最小構成で動かす

最近、空き時間にAVRマイコンで遊んでいるのですが、Arduinoボードのように周辺機器や回路を満載せず、最小構成で動かしたいと感じることがあります。 Arduinoボードには、USB-シリアル変換インターフェース、5Vおよび3.3V定電圧電源、水晶発振子やセラミック発振子、電源...