2018/11/28(水)ハンダの吸煙器が欲しい

はてブ数

キットとかの大量のはんだ付けするときに、はんだ付けの蒸発したヤニでいつも喉を痛めていたのですが、こんなあおりを受けました。

というわけでハンダ吸煙器が欲しくなったメモ。

まっとうなハンダ吸煙器

専用の機械も売られていますが、8000円ぐらいしますし結構デカイです。

asin:B001D7L0QM

電池とかで動くほうが便利かなと、卓上扇風機も見てみました。

asin:B06XKQ1LGL

2000円代前半ですし結構ありかなと思ったのですが、よくよく見ると15cm×18cmぐらいあります。はんだ付けするときってただでさえ机狭くなるので、ちょっと邪魔です。

8cmファンがあるじゃないか

世の中USB(5V)で動くPC用ファンがありますので、それを使うことにしました。

asin:B06ZXXT6L9 asin:B00MWH4FL4

似た商品はいくつかありますが後者を購入。どれも1000円ぐらいです。網を外して、スポンジを差し込みました。

inhaler_01.jpg
inhaler_02.jpg

実際にテストするとそれなりに吸い込みます。

inhaler_03.jpg

スポンジの厚さは2mmぐらいが良いようです。5mmぐらいあるとぜんぜん吸い込まず、刃物で薄く削りましたが、適当なスポンジを買ってくるほうが良いでしょう。

あと、ディアルファン対応のコネクタが邪魔だったので、切り取ってしまいました。

inhaler_04.jpg
inhaler_05.jpg

実際のはんだ付けでどれぐらい効果があるか少し楽しみです。

2018/09/29(土)Strawberry PerlでImage::Magick(PerlMagick)ごとEXE化

はてブ数

Image::Magickモジュールを含むWindows用EXEが生成できる pp 環境の構築。

Strawberry Perl

Strawberry Perlのサイトから、ダウンロードしました。執筆時点で最新は「5.28.0.1」ですが、Image::Magickが入らないので、5.26.2.1を選択。

形式はどれでも構わないと思いますが、個人的にPortableを選びました。

Image::MagickとPAR::Packerの導入

Image::Magickはppmから入れるので簡単でした。

c:\> ppm
ppm> install Image::Magick
Install package 'Image-Magick?' (y/N): y

ppm> quit

続いてPAR::Packerです。PARは普通にインストールするとよくエラーが出るので、force installしました。

c:\> cpan
cpan> force install PAR::Packer

コンパイル&テストが長いのでそこそこ待たされます。

PAR::Packer Ver1.047の修正

Image::Magickをパッケージに含めるためには、Image::MagickのDLLを一緒に含める必要があります。

pp は -l オプションや -a オプションを使うと、DLLや他のファイルを一緒にパッケージ化することができます。できますが、それではImage::Magickのロードに失敗します。Image::MagickのDLLは通常と違う場所に置かれているのでDLLがロードできませんし、DLL以外の必要ファイルを参照するための情報も不足します。

これを修正するために、perl/vendor/lib/PAR.pm にパッチを充ててください。

sub import {
    my $class = shift;

    PAR::SetupProgname::set_progname();
    PAR::SetupTemp::set_par_temp_env();

    # patch for sitelib by nabe@abk ---------
    if ($ENV{PAR_TEMP} && $^O eq 'MSWin32') {
        my %conf;
        foreach(keys(%Config)) {
            $conf{$_} = $Config{$_};
        }
        *Config::Config = \%conf;   # replace read-only object

        my $base = "$ENV{PAR_TEMP}\\inc";
        $Config::Config{sitelib}    = "$base\\site\\lib";
        $Config::Config{sitelibexp} = "$base\\site\\lib";
    }
    # patch end -----------------------------

Image::Magickは環境変数を参照しながら、.dllや.xmlファイルをその都度ロードするようになっているのですが、それらのファイルは指定しないとパッケージ化されませんし、パッケージ化しても $Config{sitelib} が適切に設定されていないため、Magick.pm で正しく環境変数を設定できません。

これを解決するためのパッチになります。

Image::MagickのライブラリごとEXE化

pp コマンドの -a オプションで、Image::Magickのライブラリ類(*.dll, *.xml)を一緒にパッケージ化します。

Strawberry Perlインストールディレクトの「perl\site\lib\Image」以下にあるすべてのファイルをパッケージに収録します。面倒なのでファイルに記述してそれをコマンドラインで与えることにします。

以下は例になります。パスは適当に読み替えてください。

pp -a "C:/strawberry-perl-5.26.2.1/perl/site/lib/Image;site/lib/Image"
   -o test.exe test.pl

オプションが長くなり入力が面倒なので、pp-option というファイルを用意してその中にオプションを書きました。

pp @pp-option

注意

スクリプト内で、スレッド生成やforkをしている場合は、必ず「use Image::Magick」してください。生成されたスレッドやプロセスから「require Image::Magick」しても必要な環境変数が設定されず、Image::Magickが動作しません。

まとめ

Image::Magickモジュールごと、PerlスクリプトをEXE化できるようになりました。

ActivePerlでも同じ方法で解決できると思います。

2017/10/30(月)LAN内に外部公開サーバを置いて、内部からアクセスさせる

はてブ数

ルーティングテーブル書き換え(route)によるアクセス制御から、unboundによるDNSの一部書き換えに移行したメモ。

状況

LAN内のLinuxマシンを、家庭用ルータのポートマッピングを使って外部公開している状況を想定しています。小規模の会社とかでも、こういう設定をされていることがありますね。

home-LAN-newtork.png

この場合、内側のPCから外部公開時のホスト名である「global.my.ip」にアクセスするとグローバルIPを引いてしまいます。そして、PCからルーターの外側IPにアクセスすることになるのですが、NEC等のルータではこの際ポートマッピングが有効にならずアクセス不能となります。*1

ルータのルーティングテーブルを書き換えることができれば色々と解決策はあるのですが、そんな機能を持った機種はまずありません……。*2

*1 : Buffaloはたしかアクセスできたような気がする。

*2 : Atermとかでは外向きの静的ルーティングはできても、内向きは無効です……

力技で解決していた

どうにもならないので、PCを起動するたびに、外部IPを確認して、外部IPにアクセスするときはLinuxサーバ(192.168.1.8)にルーティングするような設定をしていました。

@echo off
' route-add.bat
for /f "usebackq tokens=2 skip=1" %%i in (`nslookup global.my.ip 192.168.1.1 ^| findstr "[0-9]\.[0-9]"`) do set IP=%%i
route add %IP% 192.168.1.8

これで、PCから外部IP向けのパケットがLinuxサーバに向かうので、Linuxサーバ側でNAT処理をします。

MY_LOCAL="192.168.1.2"
MY_GLOBAL=`dig +short global.my.ip`
#---------------------------------------------------------------------------
# Special forward for myself
#---------------------------------------------------------------------------
iptables -t nat -A OUTPUT      -d $MY_GLOBAL -s $MY_LOCAL \
         -j DNAT --to-destination $MY_LOCAL
#---------------------------------------------------------------------------
# Special forward for local network
#---------------------------------------------------------------------------
iptables -t nat -A PREROUTING  -d $MY_GLOBAL -s $MY_LOCAL/24 \
         -j DNAT --to-destination $MY_LOCAL

これで無事アクセスはできるのですが、スマホ等からのアクセスは断絶されたままでした。

unboundによるDNSの書き換え

unboundというDNSキャッシュサーバには、特定のホスト名やドメインだけ、DNSの結果を書き換える機能が付いています。

本当は外部IPでのアクセスがすべてLinuxサーバに転送されるのが理想なのですが、そうも言ってらもないので、この方法で解決を試みました。以下、Debianサーバでの設定例です。

sudo su
apt-get install unbound

/etc/unbound/unbound.conf を編集して以下を追加します。

server:
        interface: 0.0.0.0
        access-control: 127.0.0.1 allow
        access-control: 192.168.0.0/16 allow

続いて /etc/unbound/unbound.conf.d/global.my.ip.conf というファイルを新規作成します。

local-data: "global.my.ip A 192.168.1.8"

作成したら unbound にリロードさせます。

service unbound reload

確認

$ dig @localhost global.my.ip
;; ANSWER SECTION:
global.my.ip.           3600    IN      A       192.168.1.8

ルータの設定書き換え

ルータのDHCPの設定を書き換えて、DNSのプライマリサーバに 192.168.1.8 を指定します。セカンダリは 192.168.1.1 を指定しておくと良いでしょう。

まとめ

NECのルータは性能は悪くないけど、細かい設定ができないのでちょっと面倒ですね。

UPnPタイムアウトを設定できないし(高級機のみ可)。Buffaloのほうがいいのかもしれない。ポート転送が内側に対しても効いた気がするし。

そしてdd-wrt対応のルータ使ってみたい。

2017/10/08(日)Volumio2を入れてみた

はてブ数

さていつものラズパイ用DACですが、最新のVolumio2をちょっと入れて試してみました。

volumio2.jpg

使い続けた Volumio Ver1

昔(といっても2年ぐらい前)は、オーディオ用ディストリビューションと言ってもVolumioぐらいしか認知されてなくて、事実上他に選択肢はありませんでした。

まあ色々と使いにくい点もあったのですが、カスタマイズして使っているうちにちょうどよくなってそのまま使い続けたという。

他のディストリビューションはどうにも肌に合わず、当時Volumio2のβ版は使い勝手が悪くて結局そのままという状況でしたので、一念発起して使ってみることにしました。*1

入れてみるとさすがに完成度が高く、これなら完全に乗り換えても良いですね。

*1 : ついでにMoode Audio Playerのアップサンプリング再生(SoXカーネル?)で問題が出ている人が居るらしいので、最新カーネルでも問題ないことを確認しておこう(Moode側の問題であることを切り分けておこう)と思った次第。

外部クロック動作の確認

msBerryDACはHiFiBerry DAC+ PRO互換ですが、このPRO付きとPROなしはドライバが共通になっています。

HiFiBerry DAC+外部クロックなし
HiFiBerry DAC+ PRO外部クロックあり

この判別はドライバ側で行っていて、音が鳴っていても外部クロックが正しく使われているかはソフトからでは分かりません。ドライバ側で認識方法が狂っていたりすると、外部クロックが使われずに音が再生されたり、狂ったクロック(速度)で音が再生されてしまいます。

これを確実に確認するには、発振器(やクロック)の端子にテスター等を当ててクロックがきちんと動作しているか確認するしかありません。

というわけで、最新のVolumio2で外部クロックの動作を確認しました。ついでに分かったことですが、リサンプリングをオフにしておいても、リサンプルされて48k系列のクロックで再生されているようです。

384KHz/32bit再生の確認

β版当時には存在しなかったアップサンプリングを設定して、384KHz/32bitで再生できているのか確認しました。

まずは96KHz/32bit再生から。

volumio_msBerryDAC_096.png

BCLK(ビットクロック)端子を観測しています。BCLKとは音楽データを1bit送るためのクロック信号です。96KHz/32bit再生では、

96KHz × 32bit × 2ch(L/R) = 6.144Mbit/sec

つまり 6.144MHz のBCLKが必要になります。オシロの観測画像を見ると6.144MHzの信号が出ているので、きちんと96KHz/32bitで動作していることが分かります。

続いて192KHz/32bit。

192KHz × 32bit × 2ch(L/R) = 12.288Mbit/sec

volumio_msBerryDAC_192.png

そして384KHz/32bit。

192KHz × 32bit × 2ch(L/R) = 24.576Mbit/sec

volumio_msBerryDAC_384.png

ということで、24.576MHzのBCLKが出ています。

Volumio Ver1では、msBerryDACで384再生はソフトに手を入れない限り無理だったので確認していなかったのですが、Volumio2により無事384KHz/32bit再生されていることを確認できました。

768KHz/32bitを設定したら……

Volumio2のアップサンプリングって「768KHz再生」も設定できるのです。興味そそられますよね!

もちろん試して見しまたが、無理でした(笑)。設定自体はできるし、その状態で再生もできるのですが、768KHzに設定してもBCLK=24.576MHzだったので384/32で再生されてるだけでした。

よく考えたら、載ってるクロックが24.576MHzなのでこれ以上のBCLKはどうやっても無理に決まってた(笑)*2

*2 : 768KHz/32bitで再生したければ、49.152MHzのクロックを載せねばならない(もしくはクロックなし)ということなのだけども、対応しているボードは存在するのでしょうか?

ssh有効化(メモ)

  • http://volumio/dev/ にアクセス。

まとめ

  • Volumio2は今では成熟して十分使いやすい(Ver1を使う必要はなくなった)
  • ジャケット画像を勝手に拾ってくるのはなにげに便利。
  • msBerryDACで384KHz/32bit再生をハードウェア的に確認した。

ちなみに、波形が鈍っているのはプローブの設定間違えたせい……。

OK キャンセル 確認 その他