<?xml version="1.0" encoding="UTF-8" ?>
<feed xml:lang="ja" xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
  <title type="text">未処理の例外が発生しました</title>
  <subtitle type="html"></subtitle>
  <link rel="self" type="application/atom+xml" href="http://exception.blog.shinobi.jp/atom"/>
  <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/"/>
  <updated>2012-09-30T21:28:45+09:00</updated>
  <author><name>jjsuwa</name></author>
  <generator uri="//www.ninja.co.jp/blog/" version="0.9">忍者ブログ</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
  <entry>
    <id>exception.blog.shinobi.jp://entry/10</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/python/-python%203-%20%E3%83%87%E3%82%B3%E3%83%AC%E3%83%BC%E3%82%BF%E3%81%A7%E5%AE%9F%E8%A1%8C%E6%99%82%E9%96%93%E3%82%92%E6%B8%AC%E3%82%8B%E4%BE%8B%E3%81%AE%E3%82%84%E3%81%A4" />
    <published>2019-06-20T03:07:04+09:00</published> 
    <updated>2019-06-20T03:07:04+09:00</updated> 
    <category term="Python" label="Python" />
    <title>[Python 3] デコレータで実行時間を測る例のやつ</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<br />

<h3 class="PluginTitle">デコレータ実装での実行時間計測は、何も手を打たないと再帰関数でおかしな結果がでる</h3>
<p>デコレータで実行時間を測る例のやつ (笑) を色々試してて気になった点や欲しい機能とかをいじってたらなんか後々使えそうな代物ができたので、docstring の書き方の練習も兼ねて公開してみることに。</p>
<ul>
<li>どこかで <code>sp = SimpleProfiler()</code> とかして、
<pre style="border: solid 1px; padding: 0.5em; overflow: auto;">with sp:
    pass</pre>
とするか、
<pre style="border: solid 1px; padding: 0.5em; overflow: auto;">@sp.profile
def foo():
    pass</pre>
とすれば <code>sp</code> に測った実行時間やらカウントやらが記録されます。</li>
<li>後は時期を見計らって <code>sp</code> の各プロパティを読んで下さい。<br />
また、<code>reset()</code> で測った記録をリセットできます。</li>
<li>Python インタプリタに直接食わせると、フィボナッチ関数 (キャッシュ無しと有り) をプロファイルするデモを行います。</li>
<li>Python 3.5 (Debian Stretch に入ってるバージョン) あたりから使えると思います。<br />
当方ではとりあえずこれ書いている時点で最新の Raspbian で使えるやつ (3.5.3) と Windows版 (3.7.3) で開発・動作確認をしてあります。</li>
</ul>
<br />

<h3 class="PluginTitle">ソースコード</h3>
<p>使いたいという奇特な方は下記をコピペして <code>simpleprofiler.py</code> とかで各自保管して下さい。MITライセンスで扱って貰えば特に連絡などは要りません。</p>
<pre style="border: solid 1px; padding: 0.5em; overflow: auto;">#!/usr/bin/env python3

# simpleprofiler.py - Simple profiler
#
# Copyright (c) 2019 Takayuki 'January June' Suwa
#
# This software is released under the MIT License.
#  https://opensource.org/licenses/mit-license.php

# PEP 8 (for lexical)
#000000001111111111222222222233333333334444444444555555555566666666667777777777
#234567890123456789012345678901234567890123456789012345678901234567890123456789

# PEP 8 (for text)
#00000000111111111122222222223333333333444444444455555555556666666666777
#23456789012345678901234567890123456789012345678901234567890123456789012

"""Simple profiler."""

try:
    from time import perf_counter_ns as _perf_counter_ns
    _clock = lambda: _perf_counter_ns() * 1e-9
except ImportError:
    try:
        from time import perf_counter as _clock
    except ImportError:
        from time import clock as _clock

class SimpleProfiler(object):
    """Simple profiler implementation, as context mananger."""

    __slots__ = "__started", "__elapsed_time", "__nested_level", \
            "__entered_count", "__checked_count", "__raised_count", \
            "__clicked_count"

    def __init__(self):
        self.__started, self.__elapsed_time, self.__nested_level, \
                self.__entered_count, self.__checked_count, \
                self.__raised_count, self.__clicked_count = 0.0, 0.0, 0, 0, 0,\
                0, 0

    def __repr__(self):
        return "%s(%fsec, %d, %d, %d, %d)" % (self.__class__.__name__,
                self.__elapsed_time, self.__entered_count, self.__checked_count,
                self.__raised_count, self.__clicked_count)

    @property
    def elapsed_time(self):
        """Return the accumulated value of the elapsed time in second
        around the region of the code, inside of this context.
        """
        return self.__elapsed_time

    @property
    def entered_count(self):
        """Return the accumulated value of the counter which is
        incremented by 1 when this context is entered.
        """
        return self.__entered_count

    @property
    def checked_count(self):
        """Return the accumulated value of the counter which is
        incremented by 1 when each time check has finished.
        """
        return self.__checked_count

    @property
    def raised_count(self):
        """Return the accumulated value of the counter which is
        incremented by 1 when each uncaught exception has been raised.
        """
        return self.__raised_count

    @property
    def clicked_count(self):
        """Return the accumulated value of the counter which is
        incremented by 1 when each 'click()' method has been called.
        """
        return self.__clicked_count

    def click(self):
        """Increment the number of times this method was called, by 1.
        """
        self.__clicked_count += 1

    def reset(self):
        """Reset the elapsed time and each counters, to the initial
        state.
        """
        self.__elapsed_time, self.__nested_level, self.__entered_count, \
                self.__checked_count, self.__raised_count, \
                self.__clicked_count = 0.0, 0, 0, 0, 0, 0

    def __enter__(self):
        """Enter this context.

        When re-entered an identical context, results of that time check
        and counting are ignored.
        """
        self.__entered_count += 1
        self.__nested_level += 1
        if self.__nested_level == 1:
            self.__started = _clock()

    def __exit__(self, exc_type, exc_val, exc_tb):
        """Exit from this context."""
        if self.__nested_level == 1:
            self.__elapsed_time += _clock() - self.__started
            self.__checked_count += 1
        if exc_type:
            self.__raised_count += 1
        self.__nested_level -= 1

    def profile(self, func):
        """Decorate the below function as inside of this context."""
        def wrapper(*args, **kwargs):
            with self:
                return func(*args, **kwargs)
        return wrapper

if __name__ == "__main__":
    print("\n[ SimpleProfiler demo ] Profiles the Fibonacci function!\n")
    p = SimpleProfiler()

    @p.profile
    def fib(x):
        return x if x &lt; 2 else fib(x - 1) + fib(x - 2)
    def fib_demo():
        p.reset()
        try:
            for n in range(40):
                p.reset()
                print(" profiling fib(%d) in progress..."
                        % n, end="", flush=True)
                print("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b=%d, %f seconds elapsed\n"
                      "   %d entered, %d checked, %d raised"
                        % (fib(n), p.elapsed_time, p.entered_count, \
                           p.checked_count, p.raised_count))
        except KeyboardInterrupt:
            print("\n***** aborted by user *****\n"
                  "   %f seconds elapsed (until abort)\n"
                  "   %d entered, %d checked, %d raised"
                    % (p.elapsed_time, p.entered_count, p.checked_count,
                       p.raised_count))
    print("[normal (uncached) version]")
    fib_demo()

    from functools import lru_cache
    @p.profile
    @lru_cache()
    def fib(x):
        return x if x &lt; 2 else fib(x - 1) + fib(x - 2)
    print("\n[cached version]")
    fib_demo()</pre>]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/9</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/iot/gnu%20toolchain%20for%20hitachi" />
    <published>2019-04-20T08:19:45+09:00</published> 
    <updated>2019-04-20T08:19:45+09:00</updated> 
    <category term="IoT" label="IoT" />
    <title>GNU Toolchain for Hitachi H8/300 series for Windows</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<p>今更シリーズの第3!弾、さて今回は往年の組み込み用 CPU、日立 H8/300 用の GCC などは如何でしょうか。ルネサスさん、なんと一部品番については 2020 年代中頃辺りまで供給するつもりらしいです。<br />
<a href="http://akizukidenshi.com/catalog/c/ch8/">秋月でもまだまだ扱いがある</a>あたり、根強い需要があるのか、それとも余程在庫が残ってるのか&hellip;</p>
<br />

<p>妙な邪推はさておき、x86 な Windows で動作する最新(本稿執筆時)の H8/300 用ビルド済み</p>
<ul>
<li>binutils 2.30 (LTO)</li>
<li>gcc 8.3.0 (C/C++, libstdc++, LTO, H8/300|H8S|H8SX multilib)</li>
<li>newlib 2.5.0 (H8/300|H8S|H8SX multilib)</li>
<li>gdb 8.2.1</li>
</ul>
<p>を公開しておきます。<br />
<a href="http://repo.msys2.org/distrib/i686/msys2-i686-20161025.exe">MSYS2 32bit</a> 環境下でビルドしてありますが、利用に MSYS2 や他のライブラリの類のインストールは必要ありません。詳しくは同梱の readme.txt とかを見て下さい。</p>
<br />

<p><a href="https://drive.google.com/open?id=1lMXuWsLmSneP8HbkZhQF3JmMe_-iTG-k">gcc-8.3.0_h8300-hitachi-elf_Windows.7z</a> (SHA-1: 22a9f12535959354877ecac1e77fb94c3108653b)</p>
<ul>
<li>素の gcc 8.3.0 ではコード生成に問題がある(特に H8SX で newlib や libstdc++ ですらコンパイルに失敗する)のを修正済み</li>
<li>ついでに素の gcc 8.3.0 より少し良いコードを生成するよう修正</li>
<li>というか巷に散見される H8/300 用 GCC は 4.9 / 4.7 / 2.9 と古かったりするので&hellip;</li>
</ul>
<br />

<p>同梱の Windows インストーラー(*.msi) を使えば直ちにインストールできます。確認とか全く聞いてこない手抜き仕様なので注意。<br />
アンインストールも Windows インストーラーなので簡単。</p>]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/8</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/iot/%E7%8E%84%E7%AE%B1-%E5%88%9D%E4%BB%A3-%E3%81%AB%20debian%20jessie%20%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9F" />
    <published>2019-04-18T01:26:11+09:00</published> 
    <updated>2019-04-18T01:26:11+09:00</updated> 
    <category term="IoT" label="IoT" />
    <title>玄箱(初代)に Debian Jessie を入れたらラジーパイZeroより狭くて遅かった件</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<p>もう平成も終わろうというのに、今さら玄箱(初代)に Debian Jessie (archive) を <code>debootstrap</code> して linux-4.4.229 を添えてみました。</p>
<br />

<h3 class="PluginTitle">想定する構成</h3>
<ul>
<li>玄箱(初代)専用、玄箱/HG も対象外</li>
<li>ブートローダーはフラッシュ版 U-Boot (u-boot-1.2.0-hd.flash.bin) を使う<br />
入手先およびフラッシュ書き込み方法は割愛</li>
<li>HDD のパーティション、およびフォーマットは
<pre style="border: solid 1px; padding: 0.5em; overflow: auto;"># /etc/fstab
proc    /proc   proc    defaults        0       0
/dev/sda3       /       ext4    defaults,noatime        0       1
/dev/sda1       /boot   ext2    defaults,noatime        0       2
/dev/sda2       swap    swap    defaults        0       0
</pre>
これは玄箱(初代)本来の割り方ではなく、他所の野良 linux 化でよくされていた割り方とも微妙に違うので、U-Boot 変数の設定とかを引き写してくる際には注意</li>
</ul>
<br />

<h3 class="PluginTitle">カーネルとユーザーランド</h3>
<ul>
<li><a href="https://drive.google.com/file/d/1ZXw0hvodgOV3lPQZKjpQ_1q2UySvk4C6/view?usp=sharing">kuroboxHD-linux-4.4.229-powerpc.tar.xz</a> (SHA1: b4a19ff993b358ab0fb77d5b4a86ea0f2bfacaa0)</li>
<li><a href="https://drive.google.com/file/d/1S9aN8HEbe-FE6ppq4ScafwvF7yJ2iaUG/view?usp=sharing">kuroboxHD-debian-jessie-powerpc.tar.xz</a> (SHA1: 3a7e0c28bb9ee340b4517b509cc59bf9623f07c2)</li>
<li>他に Unix 系機材があればそれで HDD を割って上記 tarball を突っ込めばいいでしょう。ちなみに私はラジーパイでやりました。</li>
</ul>
<br />

<h3 class="PluginTitle">初期設定で&hellip;</h3>
<ul>
<li>ホスト名は <code>kuroboxHD</code></li>
<li>IPv4 (DHCP 自動設定)、IPv6、mDNS 応答 (<code>kuroboxHD.local</code>)、および ssh が有効</li>
<li>netconsole は無効</li>
<li>シリアルコンソール、または ssh 経由で <code>root</code> へログイン可能、パスワードは <code>kuroboxHD</code></li>
<li>セルフカーネルコンパイル(要8時間以上)が可能な程度に色々と入れてあります、あと Python3 とかも<br />
まあ普通に Debian Jessie なんで好みで <code>apt-get</code> して下さい</li>
</ul>]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/7</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/%E3%81%9D%E3%81%AE%E4%BB%96/gnu%20toolchain%20for%20renesas" />
    <published>2017-06-18T04:39:28+09:00</published> 
    <updated>2017-06-18T04:39:28+09:00</updated> 
    <category term="その他" label="その他" />
    <title>GNU Toolchain for Renesas SH1, SH2, SH3 and SH4 for Windows</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<p>今更 SuperH かよ、とも思ったが<a href="https://www.renesas.com/ja-jp/products/microcontrollers-microprocessors/superh.html">ルネサスさんまだ製品展開頑張ってるんですね&hellip;</a><br />
(最大クロック増加・2ウェイスーパースケーラ化・割り込み応答速度向上など)</p>
<p>FA SBC にも結構使われているようで<a href="http://akizukidenshi.com/catalog/g/gM-11663/">秋月にも SH2A 基板が出てくる</a>あたり、それなりに力を入れているのかも。あと所用でその SH2A な FA SBC を評価することになったので、GCC ビルドすっか、というお話。</p>
<br />

<p>それで、以前の投稿ではここからビルド手順が書いてあったのですが、ややこしいのでばっさり割愛。x86 な Windows で動作する最新(本稿執筆時)の SuperH 用ビルド済み</p>
<ul>
<li>binutils 2.30 (LTO)</li>
<li>gcc 8.3.0 (C/C++, libstdc++, LTO, SH1～4 multilib)</li>
<li>newlib 2.5.0 (SH1～4 multilib)</li>
<li>gdb 8.2.1</li>
</ul>
<p>を公開しておきます。<br />
<a href="http://repo.msys2.org/distrib/i686/msys2-i686-20161025.exe">MSYS2 32bit</a> 環境下でビルドしてありますが、利用に MSYS2 や他のライブラリの類のインストールは必要ありません。詳しくは同梱の readme.txt とかを見て下さい。</p>
<br />

<p><a href="https://drive.google.com/open?id=10YUoFd-iR45wkmx2NoJVO-f6Ds9RbUlP">gcc-8.3.0_sh-renesas-elf_Windows.7z</a> (SHA-1: 985d36941f4a47708ce50985b4412958c4b7ec05)</p>
<br />

<p>同梱の Windows インストーラー(*.msi) を使えば直ちにインストールできます。確認とか全く聞いてこない手抜き仕様なので注意。<br />
アンインストールも Windows インストーラーなので簡単。</p>]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/6</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/iot/%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%82%E3%81%99%E3%81%AA%E3%82%8Biot%E3%81%A8%E3%81%84%E3%81%B5%E3%82%82%E3%81%AE%E3%82%92-%E3%81%9D%E3%81%AE5-" />
    <published>2017-05-06T11:15:07+09:00</published> 
    <updated>2017-05-06T11:15:07+09:00</updated> 
    <category term="IoT" label="IoT" />
    <title>にわかもすなるIoTといふものを(その5)</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<a href="http://exception.blog.shinobi.jp/Entry/5/">前回</a>に引き続いてラジーパイねた。<br />
その前回で結局ローカルのIPカメラ画像をインターネット越しライブ配信するやりかたを書かずじまいだったけど、そんなのは各自勝手にやってくれとしか(をい) と言うかもうRTMPで流れてるんだからRTMP受け付けてくれる動画配信サービスにFFmpegで投げればいいだけ。<br />
<br />
お次にラジーパイにやらせるねたはずばり、貧乏人のハイレゾオーディオ。<br />
個人的にオーディオ系の話題は宗教あるいは「沼」だと思ってたので敬して遠ざけておくのがいいやね、どうせ耳にLPFが勝手にインストールされるお年頃だし(笑)&hellip;とか考えてたら、
<ul>
<li>ラジーパイからはI2SとかいうD/Aコンバーター直結用インターフェース信号が出ている</li>
<li>そのI2Sにぶら下げたD/Aコンバーターをラジーパイからオーディオデバイスとして扱う用意(OS/ドライバ/ミドルウェア/アプリ)が既にある</li>
<li>ユニバーサル基板での手ハンダ電子工作レベルでI2S接続して実際に音を出せるD/AコンバーターICが秋葉原で安く売られている</li>
</ul>
<br />
今I2S DAC ICを求めて全力疾走している僕は自宅警備員をしているごく一般的な男の子。強いて違うところをあげるとすればついさっきハイレゾオーディオに興味を持ったってとこかナ&hellip;そんなわけで、外神田は<a href="http://www.sengoku.co.jp/">千石電商</a>本店1F奥のICコーナーにやってきたのだ。<br />
<img src="http://www.ti.com/graphics/folders/partimages/PCM5102A.jpg" alt="TI / Burr-Brown 2Vrms DirectPath&trade;, 112dB Audio Stereo DAC with 32-bit, 384kHz PCM Interface PCM5102A" /><br />
<a href="http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4M38">『ウホッ!いいIC&hellip;』</a><br />
(同じICを0.1"ピッチ変換基板に貼っただけのものが最近<a href="http://akizukidenshi.com/catalog/g/gK-11836/">秋月でも</a>扱いが始まったのでSSOPハンダ付けとかしたくない方はどうぞ。あとピッチ変換基板・ピンヘッダ込みでかつ安くあがるのでケチな人もw)<br />
<br />
このIC、<a href="http://www.ti.com/lit/ds/symlink/pcm5102a.pdf">TI / Burr-Brown PCM5102A</a>の諸元はこんな感じ。
<ul>
<li>2chステレオ、最大サンプルレート384kHz、32ビット分解能、SNR 112dB</li>
<li>低歪FIR/低遅延IIRを随時切り替え可能な最大8倍補間デジタルフィルタ<br />
(アナログ段LPFがとても簡素に)</li>
<li>負電源チャージポンプ内蔵でグランドセンター2.1Vrms ポップフリー・アナログライン出力<br />
(DC阻止コンデンサが不要でイヤホン規模負荷なら直接駆動可)</li>
<li>システムクロックはI2S BCKから内蔵PLLで自己供給可<br />
(I2Sソース同期したシステムクロック発振が不要に)</li>
<li>秋葉パーツ屋での末端価格が円建てで3桁<br />
(価格破壊の風が語りかけます&hellip;安い、安すぎるw)</li>
</ul>
<br />
うん、一応TI / Burr-Brownって高級オーディオICの代名詞だと思ってたんですが&hellip;かがくのちからってすげー!<br />
(動作設定用I2Cインターフェースや内蔵DSP動作をいじれる上位モデルもありますね&hellip;フフフ、奴はPCM5100番台の中でも最弱&hellip;)<br />
<br />
基本的にはデータシートの"Typical Applications"に沿って作ればいい。必要なものは秋月で揃うので忘れずに買っておく。
<ul>
<li><a href="http://akizukidenshi.com/catalog/g/gP-11073/">ラジーパイ用の亀の子ユニバーサル基板</a>と<a href="http://akizukidenshi.com/catalog/g/gC-10702/">接続コネクタ。</a>亀の子ユニバーサル基板に載せる<a href="http://akizukidenshi.com/catalog/g/gC-09408/">5V電源用ジャック</a>はお好みで</li>
<li>DAC ICを載せた変換基板を挿すコネクタ。細ピンヘッダが20本、600mil幅なので<a href="http://akizukidenshi.com/catalog/g/gP-00012/">これとか</a>を加工して使うといい感じ。コンタクトが金メッキじゃないと嫌な人は<a href="http://akizukidenshi.com/catalog/g/gP-00241/">適当なピンソケット</a>を使うべし</li>
<li><a href="http://akizukidenshi.com/catalog/g/gP-04940/">デカップル用セラコン100nF</a>と<a href="http://akizukidenshi.com/catalog/g/gP-06034/">正負電源チャージポンプ用セラコン2200nF</a></li>
<li>アナログ出力LPF用<a href="http://akizukidenshi.com/catalog/g/gR-03367/">金皮470&Omega;</a>と<a href="http://akizukidenshi.com/catalog/g/gP-07686/">フィルムコン2.2nF</a></li>
<li>アナログ系安定用の低ESR電解コン。"Typical Applications"では10&mu;FとなっていてDVDD/LDOO-DGND間に入ってたりCPGND-VNEG間に入ってなかったりと素人目にも首を捻るところが&hellip;私はCPVDD-CPGND、CPGND-VNEG、そしてAVDD-AGNDに<a href="http://akizukidenshi.com/catalog/g/gP-08300/">高分子電解47&mu;F</a>を入れてデジタル系はデカップルだけで放置(誤動作さえしなければどうでもいいと思う)。電解コンはオーディオ用のものでも然程値段は高くないのでまあその辺はお好みで。</li>
<li>ラジーパイ基板からの3.3Vはノイズ塗れかつ余裕が少ないと思われるので元電源の<a href="http://akizukidenshi.com/catalog/g/gI-00538/">5Vから3.3Vを作るLDO</a>を用意してアナログ系に使う</li>
<li>後はアナログ出力を引き出すコネクタやジャックもお好みでどうぞ</li>
</ul>
<br />
実装上の留意点、というほどのものでもないが気をつけることとしては、
<ul>
<li>DAC ICとセラコンとの距離を最小化するべし。"Layout Guidelines"にもそう書いてある。デカップル用100nFは変換基板ピンヘッダ実装部の隙間に配置できる。チャージポンプ用セラコン2200nFも頑張れば変換基板上に配置できる(ヒント：裏側)</li>
<li>DAC ICのSCK、FMT、DEMPはDGNDに落とす(直結またはプルダウン)。ミュート制御用のXSMTは真面目に実装すると面倒なのでDVCCに上げておくに留める(直結またはプルアップ)。FLTはDGNDに落とすか、適当な手段でDVCCに上げられるようにしておくのもいい</li>
<li>各I2S信号線にはリンギング防止に200&Omega;程度の終端抵抗を入れたほうがいいという意見もある(シュミットトリガ入力なのでそれほどの効果はないかも)</li>
</ul>
<br />
DAC ICのDEMPについてナニコレイミワカンナイ!な人が多いようなのでここで解説。<br />
"Pin Functions"見ても "De-emphasis control for 44.1-kHz sampling rate" としか書かれていないからか頓珍漢な思い込みを書いてしまっている方もいるが、要は<a href="https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%95%E3%82%A1%E3%82%B7%E3%82%B9">初期のCD-DAの一部に高域SNR改善のために予め高域を持ち上げて(Pre-emphasis)</a>サンプリングしたものがあって、それを正しく再生するために逆特性フィルタを掛ける(De-emphasis)、そういうことである。<br />
もちろん昔はアナログ段でそういう特性のフィルタを作っていたのだが、今や数百円のICに複数の32ビット積和演算器と数百語のレジスタが当たり前に入る世の中なので(笑)、デジタル補間処理のついでで片付いてしまう。ただ、Pre-emphasisかかってるCD-DAは希少で、最近ではまず使われない。DEMPピン制御するよりはFFmpegとかで24ビット変換しつつDe-emphasisしたほうがよいかと思われ。<br />
<br />
<img src="//exception.blog.shinobi.jp/File/867c7834.jpeg" alt="PCM5102A on Raspberry PI 3 model B" /><br />
<a href="http://exception.blog.shinobi.jp/Entry/4/">その3</a>に貼っていた写真をもう一度。こんな見てくれでもまあ立派に鳴ってくれるのはご愛敬。少なくともラジーパイ本体のPWMモジュールででっち上げた48kHz、12ビット分解能相当の音とは確実に違う。と言うかオーディオは凝りだすとホント沼なのでこのくらいで丁度いい。大体、たかが数千円のシングルボードコンピュータと数百円のDACに釣り合わない金銭と労力を投じても仕方がないよ(笑)<br />
<br />
組み立てに失敗してなければRaspbianでもVolumioでもとりあえず同じICを採用しているHiFiBerry DACだと誤認させれば使えるはず。具体的な方法はGoogle先生に聞いて下さい。<br />
食わず嫌いはいかんとな思って一応Volumioもちょっと使ってみたけど&hellip;どうも性に合わないようで。やっぱFFmpegとかでALSAデバイスとして扱うのが個人的には好きです(笑)<br />
<br />
ああそうだ、一応官能評価も書いておくか。
<ul>
<li>LPFと耳鳴りの入った耳には48kHz以上のサンプルレートの違いは正直わからない。ただ16ビット分解能と24ビット分解能の違いはわかる</li>
<li>低歪FIRフィルタ(FLT=DGND)は所謂ハイレゾオーディオ系、特にクラシックとかに向いている感じ。低遅延IIRフィルタ(FLT=DVCC)はJ-POPとか、あと不可逆圧縮されたソースに向いている感じ<br />
(なんか他の人の感想と逆なんだな&hellip;)</li>
</ul>
(個人の感想です、あくまでもw)]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/5</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/iot/%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%82%E3%81%99%E3%81%AA%E3%82%8Biot%E3%81%A8%E3%81%84%E3%81%B5%E3%82%82%E3%81%AE%E3%82%92-%E3%81%9D%E3%81%AE4-" />
    <published>2017-05-04T10:19:50+09:00</published> 
    <updated>2017-05-04T10:19:50+09:00</updated> 
    <category term="IoT" label="IoT" />
    <title>にわかもすなるIoTといふものを(その4)</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<a href="http://exception.blog.shinobi.jp/Entry/4/">前回</a>の続きのようなもの。<br />
<br />
さてさて<a href="https://www.raspberrypi.org/products/raspberry-pi-3-model-b/">ラジーパイ3B</a>を入手したが何に使おうか、ということで。<br />
あ、皆が皆ラジーパイにWordPressを入れたがるのはどういう理由付けなのか個人的に理解できないのでパス。C言語学習でのHello Worldみたいなものなのかね。<br />
<br />
とりあえずはオンボードH.264エンコードエンジン活用も兼ねてIPカメラ化を。<br />
公式カメラモジュールや適当なUSBカメラを接続してLANまたはインターネット越しにライブ画像を眺める。用意するソフトは、<dl><dt>nginx</dt><dd>おなじみ軽量HTTP(など)サーバー。<a href="http://nginx.org/en/download.html">公式ダウンロードページ</a>からMainlineなりStableなりのtarballを拾ってくる。</dd><dt>nginx-rtmp-module</dt><dd>nginxでRTMPを扱うアドオン。<a href="https://github.com/arut/nginx-rtmp-module">公式GitHub</a>からCloneするなりzipでダウンロードするなりする。</dd><dt>FFmpeg</dt><dd>おなじみマルチメディア十徳ナイフ(笑)。これも<a href="https://github.com/FFmpeg/FFmpeg">公式GitHub(ミラー)</a>あたりを同上。まあFFmpegは毎日がエブリデイ更新状態なのでgit clone/pullしておくのも悪くはない。</dd></dl>ビルドはお好みでどうぞ&hellip;と書いても記事にならないので参考までに。<ol>
<li>まずはビルドの前提になるものを&hellip;
<pre>sudo apt-get install \
 libpcre3-dev libssl-dev \
 libasound2-dev libfontconfig1-dev librtmp-dev libx264-dev libsdl2-dev</pre>
</li>
<li>nginx w/RTMP&hellip;
<pre>./configure \
 --conf-path=/etc/nginx/nginx.conf \
 --error-log-path=/var/log/nginx/error.log \
 --pid-path=/var/run/nginx.pid \
 --lock-path=/var/lock/nginx.lock \
 --http-log-path=/var/log/nginx/access.log \
 --http-client-body-temp-path=/var/cache/nginx/body \
 --http-proxy-temp-path=/var/cache/nginx/proxy \
 --http-fastcgi-temp-path=/var/cache/nginx/fastcgi \
 --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
 --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
 --with-http_ssl_module \
 --add-module=../nginx-rtmp-module</pre>
</li>
<li>FFmpeg w/RPi OMX&hellip;
<pre>./configure \
 --prefix=/usr/local/ffmpeg \
 --enable-gpl \
 --enable-version3 \
 --enable-fontconfig \
 --enable-libfreetype \
 --enable-librtmp \
 --enable-libx264 \
 --enable-mmal \
 --enable-omx-rpi \
 --extra-libs=-ldl</pre>
かつてはラジーパイ実機でFFmpegビルドとか重すぎ(苦笑)だったらしいのだが今は昔。make -j4とかすればどんどん捗る(要強制冷却)。</li>
<li>nginxをsystemd配下で稼動させる設定ファイル(nginx.service)&hellip;
<pre>[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Nice=-10

[Install]
WantedBy=multi-user.target</pre>
</li>
<li>nginx自体の設定ファイル(/etc/nginx/nginx.conf)&hellip;
<pre>#
worker_processes 1;
user root staff;
events {
    worker_connections 128;
}
rtmp {
    server {
        listen 1935;
        chunk_size 16384;
        buflen 1000ms;
        exec_kill_signal term;
        allow publish 127.0.0.0/8;
        allow publish 192.168.0.0/16;
        deny publish all;
        allow play 127.0.0.0/8;
        allow play 192.168.0.0/16;
        deny play all;
        application webcam {
            live on;
            exec_pull /usr/local/webcamhelper/nginx_rtmp_exec_pull_wrapper '$app' '$name';
        }
    }
}</pre>
</li>
<li>rtmp://{ラジーパイのアドレス}/webcam/* に接続した際に呼ばれるシェルスクリプト(/usr/local/webcamhelper/nginx_rtmp_exec_pull_wrapper)&hellip;
<pre>#!/bin/bash

FFMPEG=/usr/local/ffmpeg/bin/ffmpeg
on_TERM(){
 pkill -TERM -P $$
}
trap 'on_TERM' TERM
STEM=$(dirname $0)/rtmp
DEVICE=$(readlink -f $(cat "$STEM.$1.$2.device"))
$STEM.$1.$2.init $DEVICE
$FFMPEG -hide_banner $(cat $STEM.$1.$2.ffmpeg_arg0) -i $DEVICE $(cat $STEM.$1.$2.ffmpeg_arg1) -f flv "rtmp://localhost:1935/$1/$2" &amp;
wait</pre>
</li>
<li>nginx_rtmp_exec_pull_wrapper と同じ場所に rtmp.{$app}.{$name}.device という名前で使用するカメラを識別するデバイスパスを、
<pre>/dev/v4l/by-id/*</pre>
rtmp.{$app}.{$name}.init という名前で最初の接続の際)に呼ばれるシェルスクリプト(主にカメラ初期化用)を、
<pre>#!/bin/bash

uvcdynctrl -d $1 -s Brightness *
uvcdynctrl -d $1 -s Contrast *
...</pre>
rtmp.{$app}.{$name}.ffmpeg_arg0 / rtmp.{$app}.{$name}.ffmpeg_arg1 という名前でFFMpegに渡すパラメータを書いておく。
<pre>-loglevel error
-fflags nobuffer -rtbufsize *M
-f v4l2 -video_size *x* -input_format rawvideo -framerate *</pre>
<pre>-filter_complex hqdn3d=3,drawtext=text=%{localtime}:fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf:fontsize=32:fontcolor=white@1.0:shadowcolor=black@0.8:shadowx=3:shadowy=3:x=(w-text_w)/2:y=16,fps=*
-c:v h264_omx -b:v *M -g * -zerocopy 1</pre>
{$app} は上記の例だと webcam に、{$name} はわかりやすい名称や番号とかにする。あとアスタリスクになっているところは実際の機材や環境に合わせて適当に。</li>
</ol>これで rtmp://{ラジーパイのアドレス}/{$app}/{$name} をアクセスすると初期化スクリプトやFFmpegが勝手に起動して指定のカメラ動画をネット越しに取れるようになる。 単にカメラ動画取れました、おしまい&hellip;ではなくてカメラの種類や台数に変更があっても系統だって対応できるように仕立ててあるのでよかったら参考に。]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/4</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/iot/%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%82%E3%81%99%E3%81%AA%E3%82%8Biot%E3%81%A8%E3%81%84%E3%81%B5%E3%82%82%E3%81%AE%E3%82%92-%E3%81%9D%E3%81%AE3-" />
    <published>2017-03-07T21:37:52+09:00</published> 
    <updated>2017-03-07T21:37:52+09:00</updated> 
    <category term="IoT" label="IoT" />
    <title>にわかもすなるIoTといふものを(その3)</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<p>IoTが立派なバズワードへと成り下が&hellip;いや成長し、イギリスの名物料理がニシンパイやうなきパイではなく木苺パイとなってから早数年、主記憶1GBにGHz越えクワッドコア・おまけにWi-Fiと青歯もつけてお値段なんと\5k! Don't miss it!(通販番組並みの感想) というわけで(何がだ)、秋葉で<a href="https://www.raspberrypi.org/products/raspberry-pi-3-model-b/">Raspberry Pi 3 Model B</a> (もちろん<a href="http://www.element14.com/community/community/raspberry-pi">安い方</a>w)や他諸々を買ってくる。</p>
<p><img src="//exception.blog.shinobi.jp/File/867c7834.jpeg" alt="PCM5102A on Raspberry PI 3 model B" /></p>
<p>えっ<a href="http://espressif.com/en/products/hardware/esp-wroom-02/overview">ESP-WROOM-02</a>はどうしたって? 今は元気にIPリモコンリレー装置として活躍中ですが何か。あと今更<a href="https://github.com/esp8266/Arduino/commit/04df3adb54a73f13960738fa10a0a0b680f68cf0">LLMNRレスポンダ公式化</a>っておせーよ(苦笑) ラジーパイ絡みもあって結局Bonjour入れたしな。</p>
<p>閑話休題。余ってた8GBマイクロSDカードに<a href="https://www.raspberrypi.org/downloads/raspbian/">公式からダウンロードしたRaspbian</a>を頭からベタ書きしてラジーパイに食わせる。軟弱なんでもちろんGUIが使える方を。んでそれからやったことを適当に列挙。</p>
<ul>
<li>Windows PCからヘッドレス運用したいのでxrdpとtightvncserverを拾う。
<pre>sudo apt-get --purge install tightvncserver xrdp</pre>
あと日本語キーボードがまともになるように先人の知恵を丸パクリ(苦笑)
<pre>cd /etc/xrdp/
sudo wget http://w.vmeta.jp/temp/km-0411.ini
sudo ln -s km-0411.ini km-e0010411.ini
sudo ln -s km-0411.ini km-e0200411.ini
sudo ln -s km-0411.ini km-e0210411.ini</pre>
</li>
<li>SDカード上にページスワップファイルを置くとか正気を疑いたくなるので止める。
<pre>sudo dphys-swapfile swapoff</pre>
</li>
<li>要らん物(個人の主観です)は撤去。
<pre>sudo apt-get --purge autoremove \
 bluej \
 chromium-browser \
 claws-mail \
 debian-reference-en \
 dillo \
 dphys-swapfile \
 epiphany-browser \
 geany-common \
 greenfoot \
 libraspberrypi-doc \
 libreoffice-common \
 libreoffice-core \
 minecraft-pi \
 netsurf-common \
 nodered \
 python-pygame \
 python3-pygame \
 realvnc-vnc-viewer \
 scratch \
 sonic-pi \
 triggerhappy \
 wolfram-engine \
 xpdf</pre>
これで随分と軽くなって4GB以内に余裕で収まる。</li>
<li>シャットダウン完了タイミングが把握しづらいのでLED点滅の仕様を変更。
<pre>sudo bash -c "echo dtparam=act_led_trigger=heartbeat &gt;&gt; /boot/config.txt"</pre>
</li>
</ul>
<p>まあこんなところかな。何だか大した内容でもないのに長くなったので今回はここまで。</p>]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/3</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/iot/%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%82%E3%81%99%E3%81%AA%E3%82%8Biot%E3%81%A8%E3%81%84%E3%81%B5%E3%82%82%E3%81%AE%E3%82%92-%E3%81%9D%E3%81%AE2-" />
    <published>2016-06-10T18:24:34+09:00</published> 
    <updated>2016-06-10T18:24:34+09:00</updated> 
    <category term="IoT" label="IoT" />
    <title>にわかもすなるIoTといふものを(その2)</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[さて、<a href="http://exception.blog.shinobi.jp/iot/%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%82%E3%81%99%E3%81%AA%E3%82%8Biot%E3%81%A8%E3%81%84%E3%81%B5%E3%82%82%E3%81%AE%E3%82%92-%E3%81%9D%E3%81%AE1-">前回</a>で<a href="http://akizukidenshi.com/catalog/g/gK-09758/">ESP-WROOM-02</a>をプログラムする準備ができたので早速いじり倒す。<br />
<br />
あ、Arduino IDEやESP8266環境コアのインストールについては検索すればいくらでもヒットするので省略。ダウンロード時間含めても数十分で終わります。マジ簡単。<br />
あとArduino言語についてもCやC++の知識がちょっとあればすぐにスケッチ(Arduinoユーザープログラム)を書いたり理解したりできると思います。斯く言う私も事前に調べずいきなりインストールしましたし。<br />
<br />
そしてESP8266環境コアに付属の作例や検索でヒットした先人の足跡を辿りつつ定番のLEDチカチカやらWebサーバ化やらやってみる。<br />
<br />
<a target="_blank" href="//exception.blog.shinobi.jp/File/ArduinoIDE_ESP8266.jpg" title="Arduino IDE /w ESP8266"><img src="//exception.blog.shinobi.jp/Img/1465546205/" alt="Arduino IDE /w ESP8266" /></a><br />
高々十数行コーディングした程度で\1000もしないIoTデバイスが手近なWi-Fiアクセスポイントに繋がってIPアドレスを受け取り、小規模HTTPサーバーが動作する。<br />
Webブラウザ上のボタン操作で離れた場所のLEDがオンオフできるのはなかなか楽しい。身の回りの照明や家電機器の電源をPCやスマホから操作したいなら、ここからLEDを適当なフォトリレーなどに置き換えて電源ケーブルに割り込ませればいいだけだ。むしろESP-WROOM-02それ自体の電源をどうするかといったことの方が面倒になってくる。<br />
<br />
で、そうこうやっているうちに少しばかり問題も見えてくる。私のPCはWindows 7機なのだが、これだとWi-Fiの向こうのESP-WROOM-02を指定するのが優しくない。向こう側がSoftAPモードならばDHCPサーバが動いているのでDNSサーバを追加して好きな名前を騙らせたりCaptive PortalでWebブラウザ表示先を引き込んだりできる。そこまでしなくともDHCPサーバ稼動の都合上、IPアドレスは固定である。<br />
ところがステーションモードだとWi-FiアクセスポイントからIPアドレスが動的に割り振られるので別途調べなければならず実に面倒くさい。そういうわけで名前問い合わせに個々のIPアドレスを応答させるmDNSレスポンダが用意されているのだが、標準でmDNS問い合わせをしてくれるのはMacとWindows 10だけ、Linuxとかは必要なものを各自入れて使うのが文化だからいいとしても、Windows 7とかで遊んでいる筆者のような人はこれで不便だとは思わないのだろうか&hellip;<br />
<br />
どうやら、ESP8266でArduino開発している人は皆
<ul>
<li>MacかWindows 10、あるいはLinux使いである</li>
<li>あるいは別途mDNSレゾルバ(Bonjourとか)をわざわざインストールしている</li>
<li>ステーションモードでHTTPサーバなどを動かさず、クライアント動作に徹している</li>
</ul>
のいずれか一つ以上に合致しているらしい(苦笑)<br />
<br />
冗談はさておいて、私は天邪鬼なのでWindows Vista以降が実装しているmDNS類似プロトコルであるLLMNRのレスポンダをESP8266上のArduinoに実装してしまうのでした。<br />
(当然として先人の成果物がないか散々検索したがまともな結果がでてこない&hellip;IETFにも冷たくあしわられてRFCもinformational扱いでしかないのでお察しとも)<br />
<br />
<a href="https://github.com/jjsuwa/ESP8266LLMNR">GitHub - ESP8266-based Arduino LLMNR responder</a><br />
とりあえずGitHubで公開してみました。どうぞご自由に(MITライセンス)。<br />
<br />
つかいかた。<ol>
<li>スケッチに追加</li>
<li>LLMNRResponder型のインスタンスを確保</li>
<li>自機のIPアドレスが決まった後に&uarr;のbeginメソッドに応答したい名前を渡す</li>
</ol>]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/2</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/iot/%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%82%E3%81%99%E3%81%AA%E3%82%8Biot%E3%81%A8%E3%81%84%E3%81%B5%E3%82%82%E3%81%AE%E3%82%92-%E3%81%9D%E3%81%AE1-" />
    <published>2016-06-09T14:07:55+09:00</published> 
    <updated>2016-06-09T14:07:55+09:00</updated> 
    <category term="IoT" label="IoT" />
    <title>にわかもすなるIoTといふものを(その1)</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[世の人曰くIoTが流行っているとのことで、乗るしかない このビッグウェーブに(笑)<br />
<br />
ま、前々から興味はあったんですが。というわけで色々と秋月で買い込む。<br />
<br />
<a target="_blank" href="//exception.blog.shinobi.jp/File/AE-ESP-WROOM-02.jpg" title="AE-ESP-WROOM-02"><img src="//exception.blog.shinobi.jp/Img/1465444962/" alt="AE-ESP-WROOM-02" /></a><br />
<a href="http://akizukidenshi.com/catalog/g/gK-09758/" title="秋月電子通商 AE_ESP-WROOM-02 [K-09758]" target="_blank">秋月電子通商 AE_ESP-WROOM-02 [K-09758]</a><br />
みんな大好き、技適取得済み格安中華Wi-Fiモジュール。私はへたれなので2.54mmピッチに変換されたやつを使う(笑)<br />
こいつにはそれなりの規模のMCUが乗っててファームウェア次第では単独で自己完結したWi-Fi機器にできるとのこと(ご丁寧に開発元から公式開発キットが公開されている)。既に有志によるArduino互換の環境コアができていて、簡単にArduino IDEに統合してすぐに使い始めることができる。<br />
ちょっと前までは試作MCUボードで無線LANを(ひいてはTCP/IPを)扱おうとすれば多大な手間とそれなりのパーツ購入が必要だったのがまるで嘘のようだ。<br />
<br />
ちなみに、上記\650也。モジュール単品だと\550、10個買えば@\450。2.4GHzの風が語りかけます&hellip;安い、安すぎる(笑)<br />
<br />
お次はMCU開発に欠かせないプログラマ。人の役割のことではなくて所謂書き込み器。<br />
<br />
<a target="_blank" href="//exception.blog.shinobi.jp/File/Programmer-FT231X.jpg" title="Programmer-FT231X"><img src="//exception.blog.shinobi.jp/Img/1465446863/" alt="Programmer-FT231X" /></a><br />
大概はシリアル通信でファームウェアを突っ込むんですが今時のパソコンにシリアルポートなんぞないのでUSB-シリアル変換ICででっちあげる。<br />
<a href="http://akizukidenshi.com/catalog/g/gI-06713/" title="秋月電子通商 FT231XS [I-06713]" target="_blank">秋月電子通商 FT231XS [I-06713]</a><br />
一応これにもピッチ変換モジュールがあるんだけど割高なので手持ちのパーツで自作する。3.3V電源の能力不足で動作が安定しない事例が散見されるので別途LDOを載せてそちらから供給することに。<br />
<br />
あとプッシュ式のターミナルブロックが地味に便利。マジお勧め。<br />
<a href="http://akizukidenshi.com/catalog/c/ctblock2/" title="秋月電子通商 プッシュ式ターミナルブロック一覧" target="_blank">秋月電子通商 プッシュ式ターミナルブロック一覧</a><br />
<br />
で、後は件のAE_ESP-WROOM-02をブレットボードに置いてプログラマと結線すれば&hellip;なのですが、何点かプルアップ/プルダウンしてあげないと駄目なのと、個人的にブレットボードにごてごて盛るのが好きじゃないので開発ボードもでっちあげる。<br />
<br />
<a target="_blank" href="//exception.blog.shinobi.jp/File/ESP8255-DevBoard.jpg" title="ESP8255-DevBoard"><img src="//exception.blog.shinobi.jp/Img/1465448272/" alt="ESP8255-DevBoard" /></a><br />
見てくれはアレですが、手動リセット/モード選択スイッチに加えてNodeMCU相当のリモートリセット回路も組んであります。<br />
<br />
もうね、<a target="_blank" href="http://akizukidenshi.com/catalog/g/gP-02628/">C型ユニバーサル基板さん</a>が大活躍(笑)<br />
<br />
<a href="http://exception.blog.shinobi.jp/iot/%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%82%E3%81%99%E3%81%AA%E3%82%8Biot%E3%81%A8%E3%81%84%E3%81%B5%E3%82%82%E3%81%AE%E3%82%92-%E3%81%9D%E3%81%AE2-">次回に続く&hellip;</a>]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
  <entry>
    <id>exception.blog.shinobi.jp://entry/1</id>
    <link rel="alternate" type="text/html" href="http://exception.blog.shinobi.jp/.net/mugi%20-multi%20giga%20cipher--" />
    <published>2012-10-05T11:36:23+09:00</published> 
    <updated>2012-10-05T11:36:23+09:00</updated> 
    <category term=".NET" label=".NET" />
    <title>MUGI (MUlti GIga cipher), cryptographic pseudorandom number generator; .NET 2.0 managed implementation</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[ストリーム暗号向け疑似乱数生成器 MUGI の .NET 実装です。<br />
<br />
リンク:<br />

<ul>
<li><a href="http://www.hitachi.co.jp/rd/yrl/crypto/mugi/">MUGI：暗号技術：日立</a></li>
<li><a href="http://www.ipa.go.jp/security/enc/CRYPTREC/fy15/doc/10_02jspec.pdf">仕様書(PDF)</a></li>
</ul>
System.Security.Cryptography 名前空間に RandomNumberGenerator クラスからの派生クラスとして Mugi クラスを実装しています。<br />
コンストラクタに 128 ビット のキーと初期化ベクタを与え、後は RandomNumberGenerator クラスの流儀で使います。<br />
<br />
.NET 2.0 以降で、32/64 bit およびバイト順によらず利用可能です。<br />
(日立の製品や仕様は大抵ビックエンディアンなんで x86/x64 だと面倒&hellip;)<br />
<br />
<a href="//exception.blog.shinobi.jp/File/System.Security.Cryptography.Mugi.zip">System.Security.Cryptography.Mugi.zip (DLL と C# ソースコード) (1.0.0.5) のダウンロード</a><br />
変更点:
<ul>
<li>細かいところで問題がありそうな部分を修正しています。</li>
<li>ライセンスを明確にしました(MITライセンス)。</li>
</ul>
※ MUGI は日立製作所の日本における登録商標です。]]> 
    </content>
    <author>
            <name>jjsuwa</name>
        </author>
  </entry>
</feed>