2017年09月17日

食品ロス削減を目指す「Reduce GO」とフードバンクについて

はてブのホッテントリに「Reduce GO」というサービスの紹介が上がっていました。サービスリリースは一ヶ月ほど前。
ところが市中には同じ目的の「フードバンク」という福祉活動が既にあるんですよね。
Wikipediaの食品ロスのページでもフードバンクについて言及されています。
農林水産省のサイトには、フードバンクを実施する際の食品衛生上の手引きも公開されています。
食品ロス削減に向けた活動は良い取り組みかと思いますが、フードバンクに配慮しないと既存のセーフティーネットを破壊しかねません。フードバンクと共存する未来を切に望みます。

2016年06月12日

Elecomの無線LANポータブルルーターを子機モードで使う際の問題点

本当はもっと詳細なものを途中まで書いてたんだけど、問題が次々出てきて面倒臭くなってやめた。
本題
以下、モバイルルータではなくポータブルルータであることに注意。
ここでは、モバイルルータは移動中に利用するもの、ポータブルルータは持ち運びしやすいように小型化したもの、という理解で良いと思う。

Elecomは『無線LANポータブルルーター』という持ち歩きに便利なルータを販売している。
例えば、出張先のホテルに有線LANしかない場合でも、ポータブルルータにLANケーブルを繋げば無線LANが使えるようになる。
一人で複数の無線LAN端末を持っている今の時代、非常に便利な製品ではなる。
尚且つ安価だ。
最新の上位機種では、IEEE 802.11acにも対応している。

このシリーズの比較的新しい機種は、子機モードというのを備えている。
子機モードというのは、有線LANにしか対応していない機器を無線化させる機能だ。
ちょっと前までは、このような事をしようとすると、家庭用ルータのミドルクラスの製品を購入しないといけなかったが、これにより安価で実現できるようになった。
うちではこの目的のために複数の機種を持っている。
ルータには推奨接続数というのがあるが、子機モードで使う場合は配下に接続する端末は1,2台のため、問題にはならないはず。

ところがこの子機モード、現状で使うには色々問題が発生する事がわかった。

ここでは、元からあったネットワークをネットワークA、ポータブルルータで新たに作成されるネットワークをネットワークBとする。
また、ネットワークAに接続してる端末を端末A、ネットワークBに接続している端末を端末Bとする。
検証に使ったのはWRH-300XX2シリーズのWRH-300BK2という機種。ちなみに、他の機種のうちいくつかに似たような挙動をするものがあった。
手順
工場出荷時、他の設定をすることなく動作モードの子機モードを選択
子機モードに切り替えるため再起動
無線設定でネットワークAの無線LANのSSIDとパスワードを設定
設定を反映させるため再起動
何が起きるのか
この時、ポータブルルータにはIPアドレス「192.168.2.251」が振られる。
(IPアドレスは設定画面で変更可能。)
ネットワークAがDHCPの場合、ポータブルルータにもIPアドレスが振られるが、「192.168.2.251」は有効のままとなる。
つまり、ネットワークAのDHCPが「192.168.1.0/24」で運用されていた場合、ポータブルルータには「192.168.2.251」と例えば「192.168.1.2」のようなIPアドレスとなる。
また、端末Bには「192.168.1.3」のようなIPアドレスが振られる。
ポータブルルータは、HTTPでアクセスする設定画面のために80番ポートと、DNSのために53番ポートを開いている。
問題1
一見正常に動作しているように思えるが、ポータブルルータはネットワークA側も53番ポートを開いてしまっているため、なんらかのきっかけで端末AはポータブルルータのDNSを見にいくようになってしまう。
ネットワークAに設置された正規のDNSにリレーされていれば問題ないのかもしれないが、実際はリレーされない。
一旦こうなると、端末Aはインターネットに接続できなくなる。
問題2
ネットワークAの系が「192.168.2.0/24」だった場合に起こる。
端末Aから「192.168.2.251」にアクセスするとポータブルルータが簡単に見える。
つまり、端末Aから「http://192.168.2.251/」で設定画面へのログイン画面が表示されるようになる。
設定画面は、ネットワークAから見えるかどうか選択できるようにするか、ネットワークBからしか見えないようにすべきだと思う。
問題3
ネットワークAにポータブルルータが2つ接続された場合、同じIPアドレスに「192.168.2.251」が2つ存在してしまう。
同一ネットワークに同じIPアドレスが存在すると何が問題なのかは説明するまでもないよね。
製品のサイトを見るとホテルで使う事を想定しているが(製品名のWRHは多分Wireless Router Hotelの略)、不特定多数が宿泊するホテルだと起きる可能性が高くなるというのは皮肉にしかならない。
所感等
うちの環境で問題1が度々起きていたが、再現がなかなかできないため原因特定までに2ヶ月もかかってしまった...。
問題1の整理をしていたら、さらに問題2,3が見つかって流石に疲れた。
非常に迷惑な挙動としか言いようがない。
どうすべきかというと、まずネットワークA側にはDNSとHTTPは開けないほうが良いと思う。
あと、DHCPの有効無効が選択できるようにすることと、ネットワークAのDHCPを無視しないことかなあ。
実は見つかった問題は他にもあるけど、ここに書くのは上記3つにしておく。
詳細は書かないけどハードウェアメーカーらしくソフトウェアに難があり、「あー、一部で話題になってたのってこれね」と思った。
正直、ソフトウェアにももう少し力を入れたほうが良いと思った。
Elecomに連絡しようとしたら問い合わせ用のメールアドレスもフォームもないし...。
電話で話をしても、繋がるまで待たされるし、繋がってもサポート窓口で、この手の話がわかる人にたどり着くまでに同じことを何度も話しないといけない。
問い合わせ窓口にメールかフォームがあれば、製品のユーザに面倒なことをさせなくて済むんだけどそこのところどう考えてるんだろう。
あ、一応FAXもあるけど今時FAXっていうのもね...。

2016年03月18日

ズンドコキヨシ with Scratch

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
そこで、Scratchで作ってみた。
せっかくScratchで作っているので歩かせてみた。
関連リンク

2016年03月17日

ズンドコキヨシ with PowerPoint VBA

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
そこで、PowerPoint VBAで作ってみた。
Sub addSlide(text As String, Optional size As Integer = 360)
    With ActivePresentation.Slides
        Dim slide As slide
        Set slide = .addSlide( _
            Index:=(.count + 1), _
            pCustomLayout:=.Parent.SlideMaster.CustomLayouts(7) _
            )
        With slide
            Dim shape As shape
            Set shape = .Shapes.AddShape( _
                Type:=msoShapeRectangle, _
                Left:=0, _
                Top:=0, _
                Width:=960, _
                Height:=540 _
            )
            With shape
                .TextEffect.FontSize = size
                .TextFrame.TextRange.text = text
            End With
        End With
    End With
End Sub

Sub Zundoko()
    Do While True
        If Rnd < 0.5 Then
            addSlide "ズン"
        Else
            addSlide "ドコ"
        End If
        With ActivePresentation.Slides
            Dim zd As String
            zd = ""
            For i = 4 To 0 Step -1
                If .count - i > 0 Then
                    If .Item(.count - i).Shapes.count > 0 Then
                        zd = zd + .Item(.count - i).Shapes.Item(1).TextFrame.TextRange.text
                    End If
                End If
            Next
            If zd = "ズンズンズンズンドコ" Then
                Exit Do
            End If
        End With
    Loop
    addSlide "キ・ヨ・シ!", 144
End Sub
関連リンク

2016年03月16日

ズンドコキヨシ with AppleScript

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
そこで、AppleScriptで作ってみた。
『ズン』と『ドコ』はログの履歴のメッセージに表示され、『キ・ヨ・シ!』は結果に表示される。

比較演算子さえも英語のように記述できるAppleScriptの特徴がよく出ていると思う。
(もちろん記号でもOK。)
set zundoko to {}
repeat while zundoko as string is not equal to "ズンズンズンズンドコ"
    set r to random number from 0 to 1
    if r is equal to 0 then
        set zd to "ズン"
    else
        set zd to "ドコ"
    end if
    log zd
    set the end of zundoko to zd
    repeat while ((count zundoko) is greater than 5)
        set zundoko to rest of zundoko
    end repeat
end repeat
return "キ・ヨ・シ!"
関連リンク

2016年03月15日

ズンドコキヨシ with Excel VBA

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
そこで、Excel VBAで作ってみた。
Sub Zundoko()
    Do While True
        If Rnd < 0.5 Then
            ActiveCell.Value = "ズン"
        Else
            ActiveCell.Value = "ドコ"
        End If
        Cells(ActiveCell.Row + 1, ActiveCell.Column).Activate
        Dim zd As String
        zd = ""
        For i = 5 To 1 Step -1
            If ActiveCell.Row - i > 0 Then
            zd = zd + Cells(ActiveCell.Row - i, ActiveCell.Column).Value
            End If
        Next
        If zd = "ズンズンズンズンドコ" Then
            Exit Do
        End If
    Loop
    ActiveCell.Value = "キ・ヨ・シ!"
End Sub
関連リンク

ズンドコキヨシ with 秀丸マクロ

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
そこで、秀丸マクロで作ってみた。
秀丸マクロには、配列がないため文字列の連結で対応した。
また、浮動小数点版の秀丸でないと乱数が使えない。
Windowsが起動してからの経過時間を取得するtickcountという、一見乱数につかえそうなものがあるが、単位がミリ秒であるため、ループ内で使用すると同じ値が連続して帰ってきてしまう。
今回のような用途では、擬似乱数生成器を自分で実装する必要がある。
ここでは、線形合同法を用いた。
また、実装した乱数生成器は偶数と奇数を交互に返すため、このまま利用すると『ズンドコ』を延々に繰り返してしまう。
これを避けるために、10の位を判定に利用している。
$zundoko = "";
#rand = tickcount % 256;
while($zundoko != "ズンズンズンズンドコ") {
    #rand = (129 * #rand + 83) % 256;
    if ((#rand / 10) % 2 == 0) {
        $zd = "ズン";
    } else {
        $zd = "ドコ";
    }
    insert $zd;
    $zundoko = $zundoko + $zd;
    $zundoko = rightstr($zundoko, 20);
}
insert "キ・ヨ・シ!";
秀丸マクロ実行のたびに『ズン』もしくは『ドコ』の出力を一度しか行わないのであれば、乱数代わりにtickcountを利用できる。
ここでは配列代わりに出力済みのテキストを使い、より簡潔に記述している。
if (tickcount % 2 == 0) {
    insert "ズン";
} else {
    insert "ドコ";
}
$str = gettext(x - 20, y, x, y);
if ($str == "ズンズンズンズンドコ") {
    insert "キ・ヨ・シ!";
}
後者のマクロは、秀丸のマクロ登録でこのマクロをキーに割り当てると、『ズン・ズンズン・ズンドコ』のリズムでキーを押しながらマクロを実行できるので、ある意味気持ちいい。
複数人で誰が『キ・ヨ・シ!』を出すのかという『ズンドコゲーム』も可能だ。
成功確率も1/32のためそれなりにエキサイトするのではないか。
関連リンク

2016年01月22日

「盗み見できるカメラ」をメーカー別に数えてみた

まずはこれ。
不用意に公開しているWebカメラがたくさんあるとか、それを収集したサイトがあるとか、結構前から有名な話だと思ってたんですが違うんですかね。
某社の仕様がアレなので◯◯すれば見つかりやすいとかなんとか。

で、報道されていたサイトにはWebカメラのメーカー名が載っていたので、メーカー別にカウントしてみた。
どれくらいの割合なのか前々から気になってたしね。
カウント方法は単純にスクレイピングしただけ。
対象は日本国内に限った。
せっかく色々隠して報道されているのに不必要な情報まで載せたくないのでコードは載せない。

で、集計結果。
PanasonicHD : 1767
Panasonic : 839
Foscam : 1
Axis : 273
Sony : 64
Axis2 : 2
NetCam : 2825
NetCamはコインパーキングに設置された映像が多く、想像するにそういうソリューションを展開して意図的に公開しているっぽい。
NetCam以外のメーカー品でも意図的に公開しているカメラもあるはずだけど、NetCamを除外した数値が「意図せず公開されているであろうWebカメラ」の実数に近いと思う。
この数値も収集されたカメラだけのものなので、実際はもっと多いはず。
しかし、想像はしていたけど凄い割合だ。
メーカーもメーカーだけど、防犯カメラ設置を担当したであろう業者も業者だよね。

あと、NHKでの報道は効いたらしく、コードを書いている間に100サイト以上減っていった。さすがテレビというところか…。
(時間帯によって変化しているだけかもしれないけど。)

2016年01月13日

「痛いの痛いの飛んでけ」の痛みはどこに飛ばすのか

「痛いの痛いのお父さんの方に飛んでけ!」とか
「痛いの痛いのお母さんの方に飛んでけ!」とかして
大袈裟に痛がってあげるのオススメ。
普通に「痛いの痛いの飛んでけ!」ってやるより
リアクションを見て喜んですぐ泣き止む。
そのうち直ぐに一緒になって
「痛いの痛いの◯◯の方に飛んでけ!」ってやるようになる。
欠点は、転んだりしていない時に突然
「痛いの痛いの◯◯の方に飛んでけ!」ってやられて
反応に困ることかな。
特に人前でやられると対処に困る。

2015年12月01日

楽譜も数式も

楽譜も数式も一種のDSLなんですよ。コンピュータ言語ではないけども。
※ 念のため補足 : 正確にはDSLは"コンピュータ言語"という意味を含みます。
Google

タグ クラウド