諸星大二郎劇場3『上流からの物体X』

 ビッグコミック増刊(12月17日号)に諸星大二郎劇場3『上流からの物体X』が掲載されています。

 

表紙。
f:id:bunji2:20161120103950j:image

 

タイトルページ。
f:id:bunji2:20161120104003j:image

 

川辺で原始的な生活を送る男。

何故か必要なものは上流から流れてくる…という設定。
f:id:bunji2:20161120104013j:image

 

これ、単行本の「諸星大二郎選集・第二集」に収録された書き下ろし作品『クーリング・オフ』の続編でした!\(^o^)/
f:id:bunji2:20161120104022j:image

 

その選集・第二集とやらはこれ↓
f:id:bunji2:20161120104102j:image
f:id:bunji2:20161120104214j:image

クーリング・オフ』では、結婚というイベントを諸星先生的な解釈で描かれました。

 

本作では「子供を授かる」ことについて描かれています。

 

この『上流からの…』はシリーズ化ができそうですね♪

 

 

SensorTag をラズパイから操作する

Texus Instruments の SensorTag (CC2541) を触る機会があったので、またもラズパイから操作してみました。

技術情報がオープンになっているので非常にわかりやすいです。

  • SensorTag User's Guide

http://processors.wiki.ti.com/index.php/SensorTag_User_Guide

  • SensorTag attribute table

(ググるとPDFの表が出てきます)

外形はこんな感じ。赤い筐体がかっこいいです。

それでは SensorTag のプライマリサービスを見てみましょう。

$ sudo ./gatttool -i hci0 -b 78:A5:04:19:6D:DB -I
[78:A5:04:19:6D:DB][LE]> connect
Attempting to connect to 78:A5:04:19:6D:DB
Connection successful
[78:A5:04:19:6D:DB][LE]> primary
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0023, end grp handle: 0x002a uuid: f000aa00-0451-4000-b000-000000000000
attr handle: 0x002b, end grp handle: 0x0035 uuid: f000aa10-0451-4000-b000-000000000000
attr handle: 0x0036, end grp handle: 0x003d uuid: f000aa20-0451-4000-b000-000000000000
attr handle: 0x003e, end grp handle: 0x0048 uuid: f000aa30-0451-4000-b000-000000000000
attr handle: 0x0049, end grp handle: 0x0054 uuid: f000aa40-0451-4000-b000-000000000000
attr handle: 0x0055, end grp handle: 0x005c uuid: f000aa50-0451-4000-b000-000000000000
attr handle: 0x005d, end grp handle: 0x0061 uuid: 0000ffe0-0000-1000-8000-00805f9b34fb
attr handle: 0x0062, end grp handle: 0x0068 uuid: f000aa60-0451-4000-b000-000000000000
attr handle: 0x0069, end grp handle: 0x0073 uuid: f000ccc0-0451-4000-b000-000000000000
attr handle: 0x0074, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000

この中で加速度データに関するサービスの uuid は f000aa10-0451-4000-b000-000000000000 で、 関連する characteristic のハンドル番号は 0x2b 〜 0x35 が割り当てられていることがわかります。

それぞれの characteristic のタイプをみてみましょう。

[78:A5:04:19:6D:DB][LE]> char-desc 0x002b 0x0035
handle: 0x002b, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x002c, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x002d, uuid: f000aa11-0451-4000-b000-000000000000
handle: 0x002e, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x002f, uuid: 00002901-0000-1000-8000-00805f9b34fb
handle: 0x0030, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0031, uuid: f000aa12-0451-4000-b000-000000000000
handle: 0x0032, uuid: 00002901-0000-1000-8000-00805f9b34fb
handle: 0x0033, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0034, uuid: f000aa13-0451-4000-b000-000000000000
handle: 0x0035, uuid: 00002901-0000-1000-8000-00805f9b34fb

"SensorTag attribute table" と見比べていくと、SensorTag で加速度サービスを 使うのに必要そうなハンドル番号は以下のようです。

  • ハンドル番号=0x2d 加速度の読み出し
  • ハンドル番号=0x2e 通知モードの設定
  • ハンドル番号=0x31 レンジの設定
  • ハンドル番号=0x34 計測間隔時間の設定

それでは、gatttool のインタラクティブモードを使って SensorTag を操作するコマンドを以下に記述していきます。

(1) SensorTagとの接続開始

コマンド:connect

(2) 計測値のレンジの設定(ハンドル番号=0x31)

使用するレンジに応じて設定値が異なる。 またデフォルトでは加速度の計測が無効になっていることに注意。 無効 → 0x00(デフォルト) ±2G→ 0x00 ±4G→ 0x02 ±8G→ 0x03

コマンド:char-write-cmd 0x31 01

(3) 計測間隔時間の設定(ハンドル番号=0x34)

計測間隔は最小100ms/最大1000ms(デフォルト)で、設定値は10分の1の値を指定する。 最小とする場合:100ms → 100x0.1=10 → 0x0A

コマンド:char-write-cmd 0x34 0a

(4) 通知モードの設定(ハンドル番号=0x2e)

SensorTag から加速度データの通知の有無を設定する。 通知なし→ 0x0000 (デフォルト) 通知あり→ 0x0100

コマンド:char-write-cmd 0x2e 0100 (通知ありに変更)

コマンド:char-write-cmd 0x2e 0000 (通知なしに変更)

(5) SensorTag との接続終了

コマンド:disconnect

実行例は以下のようになりました。

$ sudo gatttool -i hci0 -b 78:A5:04:19:6D:DB -I
[78:A5:04:19:6D:DB][LE]> connect                     (1)
Attempting to connect to 78:A5:04:19:6D:DB
Connection successful
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x31 01      (2)
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x34 0a      (3)
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x2e 0100    (4)
Notification handle = 0x002d value: 3e 07 f3 
Notification handle = 0x002d value: 3e 07 f3 
Notification handle = 0x002d value: 3d 06 f3 
Notification handle = 0x002d value: 3e 06 f3 
Notification handle = 0x002d value: 3c 06 f3 
Notification handle = 0x002d value: 3d 06 f2 
Notification handle = 0x002d value: 3d 06 f2 
Notification handle = 0x002d value: 3c 05 f4
...(snipped)...
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x2e 0000
[78:A5:04:19:6D:DB][LE]> disconnect                  (5)
[78:A5:04:19:6D:DB][LE]> exit
$ 

(4)のコマンドを入力すると、加速度データが SensorTag から順次通知されてきます。

gatttool では通知がきた時刻がわからないため、(3)のコマンドで設定した計測間隔100ms なのか確認できません。

そこで、gatttool のソースを修正してリコンパイルしてみました。

$ tar xfJ bluez-5.23.tar.xz
$ cd bluez-5.23
$ cp attrib/interactive.c{,.ORG}
$ vi attrib/interactive.c
$ make

bluez-5.23.tar.xz を bluez.org からダウンロードし、 展開してできる attrib/interactive.c を次のように修正。

修正前

static void events_handler(const uint8_t *pdu, uint16_t len, gpointer user_data)
{
        uint8_t *opdu;
        uint16_t handle, i, olen;
        size_t plen;
        GString *s;

        handle = get_le16(&pdu[1]);

        switch (pdu[0]) {
        case ATT_OP_HANDLE_NOTIFY:
                s = g_string_new(NULL);
                g_string_printf(s, "Notification handle = 0x%04x value: ",
                                                                        handle);
                break;

修正後

static void my_g_string_printf_with_time(GString *s, uint16_t handle) {
        struct timeval myTime;
        struct tm *time_st;
        gettimeofday(&myTime, NULL);
        time_st = localtime(&myTime.tv_sec);

        g_string_printf(s,
                "%d/%02d/%02d %02d:%02d:%02d.%06d Notification handle = 0x%04x value: ",
                time_st->tm_year+1900,
                time_st->tm_mon+1,
                time_st->tm_mday,
                time_st->tm_hour,
                time_st->tm_min,
                time_st->tm_sec,
                myTime.tv_usec,
                handle);
}

static void events_handler(const uint8_t *pdu, uint16_t len, gpointer user_data)
{
        uint8_t *opdu;
        uint16_t handle, i, olen;
        size_t plen;
        GString *s;

        handle = get_le16(&pdu[1]);

        switch (pdu[0]) {
        case ATT_OP_HANDLE_NOTIFY:
                s = g_string_new(NULL);
                /*
                g_string_printf(s, "Notification handle = 0x%04x value: ",
                                                                        handle);
                */
                my_g_string_printf_with_time(s, handle);
                break;

この改造版 attrib/gatttool で実行するとマイクロ秒単位での時刻付きで表示されます。

$ sudo attrib/gatttool -i hci0 -b 78:A5:04:19:6D:DB -I
[78:A5:04:19:6D:DB][LE]> connect
Attempting to connect to 78:A5:04:19:6D:DB
Connection successful
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x31 01
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x34 0a
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x2e 0100
2016/11/12 19:23:26.818633 Notification handle = 0x002d value: fb 02 42 
2016/11/12 19:23:26.886093 Notification handle = 0x002d value: ff 04 42 
2016/11/12 19:23:27.021098 Notification handle = 0x002d value: 00 06 41 
2016/11/12 19:23:27.088594 Notification handle = 0x002d value: 00 06 41 
2016/11/12 19:23:27.223609 Notification handle = 0x002d value: fe 04 41 
2016/11/12 19:23:27.291091 Notification handle = 0x002d value: ff 06 41 
2016/11/12 19:23:27.358580 Notification handle = 0x002d value: ff 03 42 
2016/11/12 19:23:27.493601 Notification handle = 0x002d value: fe 06 40 
2016/11/12 19:23:27.561082 Notification handle = 0x002d value: fe 04 3f 
2016/11/12 19:23:27.696095 Notification handle = 0x002d value: 00 06 41 
...(snipped)...
[78:A5:04:19:6D:DB][LE]> char-write-cmd 0x2e 0000
[78:A5:04:19:6D:DB][LE]> disconnect
[78:A5:04:19:6D:DB][LE]> exit
$ 

目測ではありますが、設定通りに 0.1 秒くらいの間隔で計測データが通知されていることを確認できました。

CICADA#3(月刊!スピリッツ2016.12)

現在発売中の月刊!スピリッツに原作山田玲司先生✕作画バナーイ先生の『CICADA』第三話が掲載されています。

 

前回、レムは焚書官の身分が、漫画好きの少女にばれてしまいました。

それでも、レムは少女に自分のことを知ってもらいたい。そのために、少女の集めている漫画を軍の研究施設に盗みに行きます。

 

表紙。
f:id:bunji2:20161030203632j:image

 

タイトルページ。


f:id:bunji2:20161030203717j:image

 

データベースの中に、あるロボットのデータを眼にします。

それがこれ!


f:id:bunji2:20161030203819j:image

 

そして、囚われていた「シカーダ」という男を助けました。 
f:id:bunji2:20161030203925j:image

追いつめられたレムを救ったのがこれ!


f:id:bunji2:20161030204010j:image

 

凄い!凄すぎる!

今月は漫画の神様、手塚治虫先生のアトムとプルートゥが出てしまいました!

 

 今月号でやっとタイトルに結びついた♪(^o^)b

これからの展開も、そして次に登場する作品が楽しみです!

「BOX〜箱の中になにかいる」第13話

現在発売中の月刊モーニングtwoに諸星大二郎先生の「BOX〜箱の中になにかいる」第13話が掲載されています。

 

表紙。
f:id:bunji2:20161027214649j:image

 

タイトルページ。
f:id:bunji2:20161027214714j:image

 

先月に続き、光二くん、惠くん、神宮さん、興子の四人で出口に向かってるところです。

 

今月のイチャイチャ!(?)
f:id:bunji2:20161027214830j:image

光二くんが惠くんが登るのを手伝います。

惠くん、顔を赤らめてますがまんざらでもない様子。

 

今月の甲田さん!
f:id:bunji2:20161027215128j:image

ますますワケの分からないモノに変化してしまいました。手塚賞を受賞した『生物都市』を彷彿とさせます。まさに諸星先生らしさがほとばしってます!

 

今月のキョーコ。
f:id:bunji2:20161027215425j:image

 魔少女と再開。

興子が正式なプレイヤーとなったので、魔少女は襲って来ませんでした。

 

今月の気になるコマ!
f:id:bunji2:20161027215635j:image

このコマの興子、なかなか素敵ですね。

いい感じにエロいオーラが出てると思いました。

うまく説明できないのですが(^o^;)

 うーん。

 

そして!今月の諸星先生!
f:id:bunji2:20161027220044j:image
f:id:bunji2:20161027220116j:image

他社の企画って…なんでしょう。

気になります。

 

さぁて、来月はいよいよ単行本の発売です!
f:id:bunji2:20161027220335j:image

 これ、第一話のタイトルページですけど、微妙に書き換わってますね♪他にも色々書き換わってるんだろなぁ♪楽しみです♪(^o^)

 

ん?

 

あれ?

 

下の方になんか書いてあるぞ…
f:id:bunji2:20161027220522j:image

 

ええっ!

 

早くも『私家版鳥類図譜』と『私家版魚類図譜』の新装版っすか〜(=o=;)

 

いやいや。

 

マニアだから絶対に買いますとも!(・∀・)v

 

 

bunji2.hatenablog.com

 

妖怪ハンターを極める(諸星大二郎中級編)

以前、「諸星大二郎入門」と銘うって妖怪ハンターについて紹介いたしました。

↓ 

bunji2.hatenablog.com

 

 

今回は皆さんにさらに極めて頂きたく、全ての妖怪ハンター作品を読むための情報を紹介させて頂きます。

 

妖怪ハンターの全話を発表順に列挙し、それぞれの収録されている単行本と、主要な登場人物について整理してみました。

 https://github.com/bunji2/moro/raw/master/list_yokai_hunter.pdf

 

1974年の発表から最新作の2015年まで、途中あいていたとは言え、41年。

なんと!41年ですよ!奥さん!

いやはや、もう、驚くべき年月です。

 

あの時生まれた子供が、今じゃしがない中年サラリーマンに!

 

 そして!今なお諸星先生は現役で画業を営んでいらっしゃいます!

 

さて。2016年10月現在で、書店で購入可能な妖怪ハンター本を並べてみました。


f:id:bunji2:20161010010200j:image

 

上段は、以前「諸星大二郎入門」で紹介した三部作「地の巻」「天の巻」「水の巻」です。

 

下段は左から以下の通りです。

・「稗田のモノ語り 魔障ヶ岳」(講談社

・「闇の鶯」(講談社

・「妖怪ハンター 稗田の生徒たち(1)夢見村にて」(集英社

・「妖怪ハンター 異界への旅」(平凡社

 

最後の本は平凡社妖怪ハンターを特集したムック本なので、諸星先生の単行本というわけではありません。ただ、書き下ろしの『雪の祭』が収録されています。


f:id:bunji2:20161010011302j:image

 

これらを読破すれば、妖怪ハンター作品のほとんどを網羅したことになります。

 

 残念ながら書店で入手できないのが、これです。

f:id:bunji2:20161010012500j:image
f:id:bunji2:20161010012510j:image

『美加と境界の神』

 

もうこれだけはどうしようもありません。

古書店やオークションでウルトラジャンプのバックナンバー(2009年8月号)を探しましょう。

また最低でも国会図書館でコピーしてもらうという手があります。

 

You!妖怪ハンター、極めちまいなYo!(^_-)-☆

 

 

bunji2.hatenablog.com

bunji2.hatenablog.com

 

Python の xml.dom.minidom で GetElementById をするメモ

Pythonxml.dom.minidom モジュールを使って XML ファイルを操作する時に、getElementById がうまくいかなかったのでその対処方法についてメモっておく。

●お題編

次のような XML でサイトのリストを作ってみる。Google サイトのタグに id属性をつけている。

data.xml:

<?xml version="1.0"?>
<sites>
<site>
<name>Yahoo!</name>
<url>http://www.yahoo.co.jp/</url>
</site>
<site id="my_favorite_site">
<name>Google</name>
<url>http://www.google.co.jp/</url>
</site>
<site>
...以下省略...
</sites>

これをこんな python スクリプトで id属性="my_favorite_site" の要素配下を表示してみる。

pick_up_node.py:

# -*- encoding: utf-8 -*-

"""
特定のid属性をもつ要素配下を表示するサンプル
(Python2)
"""

import xml.dom.minidom, sys
from textwrap  import dedent

# 特定のXMLファイルを読み込み、特定のid属性をもつ要素配下を表示する関数
# 引数:id:id属性の値
# 引数:xml_file:対象となるXMLファイル
def pick_up_node(id, xml_file):
  # XMLファイルをパースして DOM を取得
  dom = xml.dom.minidom.parse(xml_file)

  # 特定のid属性のノードを検索
  node = dom.getElementById(id)

  # 該当するノードがないとき
  if not node:
    print "Not found!"
    return

  # 該当するノードがあるときはXMLの形式で表示
  print node.toxml()

def usage():
  print >> sys.stderr, dedent("""\
    Usage:
    python %s id xml_file
  """ % sys.argv[0])

def main(argv):
  if len(argv) < 3:
    usage()
    quit()
  id, xml_file = argv[1:]
  pick_up_node(id, xml_file)

if __name__ == '__main__':
  main(sys.argv)

ところが、実行するとうまくいかない。。。

C:\work>python pick_up_node.py my_favorite_site data.xml
Not found!

HTML+JavaScript で DOM の処理をする時のように、ちょろっとスクリプトを書いただけではだめみたいだ。

●解答編(その1)

ソースファイル (minidom.py) を眺めてみたところ、適切に ID属性型であることが DTD で宣言されていないとうまく検索してくれないようだ。

冷静に考えれば、HTML+JavaScript で getElementById できるのは、HTML(XHTML?)のスキーマ定義ですべてのタグに ID属性型を持つよう前もって定義されているからなのだと予想される。

従って、上のスクリプトを生かしつつ、XML の流儀にしたがって記述を適切に修正し、DTD を追加してやればよい。

data2.xml:

<?xml version="1.0" ?>

<!DOCTYPE sites [
<!ELEMENT sites (site+)>
<!ELEMENT site (name,url)>
<!ATTLIST site id ID #IMPLIED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT url (#PCDATA)>
]>

<sites>
<site>
<name>Yahoo!</name>
<url>http://www.yahoo.co.jp/</url>
</site>
<site id="my_favorite_site">
<name>Google</name>
<url>http://www.google.co.jp/</url>
</site>
...以下省略...
</sites>

上の、

<!ATTLIST site id ID #IMPLIED>

の行で ID属性型を宣言している。これで期待通りの結果となる。

C:\work>python pick_up_node.py my_favorite_site data2.xml
<site id="my_favorite_site">
<name>Google</name>
<url>http://www.google.co.jp/</url>
</site>

しかし。

XML の厳密な世界ではこれでいいのでしょうが、DTD を意識しなければならないのはうっとうしすぎる。。。

もっと簡単に済ましたいですよね。。。

●解答編2

もう、自前で getElementById を実装してしまいましょう。

自分で責任を持つから、自由にさせて下さい!!!

以下、修正版 pick_up_node2.py の差分です:

from xml.dom.minidom import (Node, Document)

def _my_getElementById(self, id):
  # 子ノードを再帰的にたどっていくサブ関数
  def _get_element_by_id_helper(parent, id):
    for node in parent.childNodes:
      if node.nodeType == Node.ELEMENT_NODE and \
        node.getAttribute("id") == id:
        return node
      r = _get_element_by_id_helper(node, id)
      if r:
        return r
    return None
  return _get_element_by_id_helper(self.documentElement, id)

# Document クラスにインスタンスメソッド getElementById2 を追加
Document.getElementById2 = _my_getElementById

def pick_up_node(id, xml_file):
  # XMLファイルをパースして DOM を取得
  dom = xml.dom.minidom.parse(xml_file)

  # 特定のid属性のノードを検索
  #node = dom.getElementById(id)
  node = dom.getElementById2(id) # ← 追加したメソッドを実行

  # 該当するノードがないとき
  if not node:
    print "Not found!"
    return

  # 該当するノードがあるときはXMLの形式で表示
  print node.toxml()

これだと DTD を追加する前の XML でも期待通りの動作をします。

C:\work>python pick_up_node2.py my_favorite_site data.xml
<site id="my_favorite_site">
<name>Google</name>
<url>http://www.google.co.jp/</url>
</site>

最近 JSON ばかり使っていたので、いまごろ XML の制約を眼にしました、という次第であります。

諸星大二郎劇場2『(眼鏡なしで)右と左に見えるもの』(ビッグコミック増刊2016.10)

 ビッグコミック増刊号諸星大二郎劇場2『(眼鏡なしで)右と左に見えるもの』が掲載されています。


f:id:bunji2:20161001133931j:image

 

 タイトルページ。
f:id:bunji2:20161001133942j:image

 

エリック・サティ…ですか!
f:id:bunji2:20161001133953j:image

 

前回の『影人』は中国の民話風でしたが、今回は全く異なるジャンルの現代劇(それとも異世界?)でした。なんというか…人知れず敵と戦う男たちの物語です。いや、実は何と戦っているのかすら語られませんが。(^o^;

そのストーリーがサティのピアノ曲にのせて展開します。

 

ファンタジックであり、SF的であり、コミカルでもあり、そこに組曲風味をきかしてくるという…。

なかなかに挑戦的な作品だと感じました。(^_^)

 

ビッグコミック増刊号で連載されていく「諸星大二郎劇場」、単行本化されるとかなりバラエティに富んだ作品集になりそうですね。

 

 

bunji2.hatenablog.com

 

 

 

ところで、手塚治虫文化賞20周年のムック本が出てました。諸星先生の書き下ろし載らないかな〜と期待したんですが。残念ながらなかった(;´∀`)