雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2003-07-10 EXPO見学

組み込みシステム開発技術展を見学に行ってきました.目的は組み込み系のUNIXに対応しているハードウェア探しと,周辺の動向を探ることです.さて,私は何屋でしょう? (答え:自分でも良くわかりません(^^;).

ゆりかもめ

初めて乗りましたが,あのスロットカーとミニ四駆を足して2で割って50倍したような構造は経済的なんでしょうか?モノレールと違って,ホームから落ちても安心というぐらいしか理由が思いつきませんが,ホームは4面全部をガラスで囲ってあるので,万が一にも転落事故はなさそうです.そもそも,路線の壁沿い(落ちると足元)に高圧線が3本並んでいるっぽいあの構造では.ホームをああいう作りにしないとまずいよなと思いました.そうなると,モノレール+ガラス張りのホームという組み合わせで良かったんじゃない?という素朴な疑問が浮かんできます.

それにしてもフジテレビの社屋は良い場所に建っていますね.そこまで計算した上なんでしょうね.

東京ビッグサイト

ここも初めてです(当たり前か).ゆりかもめの駅名は「国際展示場正門」なのですが,そこから会場まで結構歩かされます.着いた場所にある足揉みマッサージ屋さんはさぞかし儲かっていることでしょう.

正しい(?)名刺の使い方

見学の途中で詳しい話を聞く場合などに,多少名刺は必要かもなと思って,余裕を見て20枚以上持っていったのですが,ぜんぜん足りませんでした.入場の手続きでいきなり2枚.なんに使うかと言うと,1枚は入場者証にホチキス止めし,もう1枚は主催者側で取っておいて入場者証の下についているバーコードと関連付けるために使うようで,会場内のあちこちでこの入場者証のバーコードを読み取られました.

その後も,各社のブースでカタログ一式を受け取るためには,アンケートに答える必要があるのですが,そこにある所属や氏名の記入欄を書けば良いかと思いきや,「ふつう名刺を付ける」というルールになっていました.最初はそれがわからず,いちいち記入していたのですが,そうして出すと怪訝な顔をされたので,周りを観察してルールの存在に気づき,しばらくは名刺をつけていました.そうすると,見る見るうちに減ってしまって,最初に書いた使い方のための分がなくなりそうだったので,後半は嫌な顔は無視することにして,記入方式に戻しました.名刺はこういう時にこういうやり方で大量消費するから,発注枚数がああいう単位なんだと妙に納得した体験でした.

成果は上々

会場の案内図を見て「組み込みLinuxゾーン」の狭さに「30分で終わるかな?」と不安になったのですが,実際に回ってみると,むしろどこに行ってもLinuxという感じでした.あと目立っていたのはやはりT-Engine(TRON)でした.OSに関してはこの2つで7割強といったところでしょうか.Windowsはちらほら.NetBSDは数箇所でパネルに記載はあるものの,近くにいる人に話を聞くとLinuxのパンフレットを渡されたり,笑ってごまかされたりと言った感じでした.それでも1社だけ,MIPS用NetBSDのブートローダを販売しているところがあって,いろいろと話を聞くことができたのは幸いでした.そこはソフト屋さんで,ボードを開発している別会社との共同出展だったため,チップ構成は非公開だったのがちょっと残念でしたが.また,途中で出展社のスタッフとして来ていた大学時代の研究室の後輩に声をかけられるという嬉しいハプニングもありました.

データストレージEXPO

同時開催の他のEXPOにも出入り自由で,気になる製品もあったので,ついでにこちらのEXPOも覗いてきました.

すると組込みの方の地味さ(失礼)とは裏腹に,大手メーカーがどーんと大きなブースを構え,コンパニオンのお姉さん方がパンフレットを配り,カメラ親父(アレは小僧じゃない!)が写真を撮っているという,昔モーターショーで見たような光景か繰り広げられていました.肝心の気になる製品のほうは地味な(失礼)展示がしてあるだけでしたが,結構人が集まって手の空いているスタッフはいない状況でした「CGIはどうするの?」と聞きたかったのですが,本気で導入を考えているわけでもないので,しおりだけもらって帰ってきました.

残り2つの催しも一応覗いてみましたが,「翼システムって本当に大きな会社なんだなぁ」と思ったぐらいでした.

コ○ケ帰り?

1日でかなりの数のブースを回るつもりでいたので,学会の視聴者程度の服装にしたのですが,帰り道,大量のパンフレットが詰め込まれたバッグを背負い,紙袋をぶら下げている自分の姿になぜか既視感が.カタログは総重量7Kgでした.

おまけ

帰りの電車でも立ちっぱなしでいたら,駅から自宅までの運転中に右足のスネの筋肉がつりました.情けない.

本日のツッコミ(全9件) [ツッコミを入れる]

Before...

- taru-k [「会場内のあちこちで入場者証のバーコードを読み取られました」なのに、 「アンケート時には名刺が必要」って...、旗ふ..]

- hs [>ゆりかもめ モノレールだと自動運転できないということは無いと思うけど.むしろ不利な気が.]

- hs [>バーコード 指摘されて改めて思い出してみましたが,バーコードを使っていたところとそうでないところの基準は良くわかり..]


2009-07-10

[Ruby][Rails] TMailでSubjectにJIS補助漢字を使用すると文字化け

前回の続き。

前回の対処後、他に文字化けしないか検証していたところ、SubjectにJIS補助漢字が入ると文字化けすることを確認。

単純に、前回のソースの

 @mail.subject = base64(@mail.subject)

の部分を

 if NKF.guess(@mail.subject) == NKF::UTF8
    @mail.subject = @mail.subject.gsub("\xef\xbd\x9e", "\xe3\x80\x9c")
 end
 @mail.subject = base64(@mail.subject)

のように書き換えると、「〜」に関してはうまくいくようになるが、コピーライトマークのような他のJIS補助漢字を試すと、Thunderbirdなどの、本文の時には文字化けが発生していなかったクライアントでも化けてしまう。

具体例を挙げると、コピーライトマーク一文字のSubjectは、「=?iso-2022-jp?B?GyRCRCJtGyhC?=」となり、これをデコードすると 「ESC $ B D " ( B ESC ( B \n」という完全に壊れた文字列になる。

で、ソース探索の旅に出て、ようやくたどり着いたのがTMailのEncoderクラスの中のscanaddとextract_Jの両メソッド。これらがJIS補助漢字のことを考慮に入れていないため、文字列を完全に壊してしまうらしい。

ということで、サブジェクトの文字化けにも対応した版はこちら。前回のgettext_ext.rbを置き換えて下さい。

if defined? ActionMailer
  module ActionMailer #:nodoc:
    class Base #:nodoc:
      def create!(*arg) #:nodoc:
        create_without_gettext!(*arg)
        if Locale.get.language == "ja"
          require 'nkf'
          if NKF.guess(@mail.subject) == NKF::UTF8
            @mail.subject = @mail.subject.gsub("\xef\xbd\x9e", "\xe3\x80\x9c")
          end
          @mail.subject = NKF.nkf('-j -m0', @mail.subject)
          part = @mail.parts.empty? ? @mail : @mail.parts.first
          if part.content_type == 'text/plain'
            part.charset = 'iso-2022-jp'
            if NKF.guess(part.body) == NKF::UTF8
               part.body = part.body.gsub("\xef\xbd\x9e", "\xe3\x80\x9c")
            end
            part.body = NKF.nkf('-j', part.body)
          end
        end
        @mail
      end
    end
  end

  module TMail
    class Encoder
      def scanadd( str, force = false )
        types = ''
        strs = []
        ki = false
        if str.respond_to?(:encoding)
          enc = str.encoding
          str.force_encoding(Encoding::ASCII_8BIT)
        end
        until str.empty?
          if m = /\A[^\e\t\r\n ]+/.match(str)
            types << (force ? 'j' : 'a')
            if str.respond_to?(:encoding)
              strs.push m[0].force_encoding(enc)
            else
              strs.push m[0]
            end
          elsif m = /\A[\t\r\n ]+/.match(str)
            types << 's'
            if str.respond_to?(:encoding)
              strs.push m[0].force_encoding(enc)
            else
              strs.push m[0]
            end
          elsif m = /\A\e(\x24(?:[B@]|\([BD@])[^\e]+)/.match(str)
            types << 'j'
            ki = true
            str = m.post_match
            if str.respond_to?(:encoding)
              strs.push m[1].force_encoding(enc)
            else
              strs.push m[1]
            end
          elsif m = /\A\e\(B/.match(str)
            str = m.post_match
            if ki
              ki = false
            else
              types << 'a'
              if str.respond_to?(:encoding)
                strs.push m[0].force_encoding(enc)
              else
                strs.push m[0]
              end
            end
          else
            raise 'TMail FATAL: encoder scan fail'
          end
          (str = m.post_match) unless m.nil?
        end

        do_encode types, strs
      end

      def extract_J( chunksize, str )
        size = max_bytes(chunksize, str.size) - 6
        size = (size % 2 == 0) ? (size) : (size - 1)
        return nil if size <= 0
        "\e#{str.slice!(0, size)}\e(B"
      end
    end
  end

end

ちなみに、前回

 @mail.subject = base64(@mail.subject)

だったところが、

 @mail.subject = NKF.nkf('-j -m0', @mail.subject)

に書き換わってますが、これは追跡の途中、ここでbase64エンコードしておいてもまったく意味が無いことが分かったので、JISに変換するだけにしました。

余談ですが、今回、grep頼りのソース探査の限界をひしひしと感じました。IDEとか使うとこういう作業は楽になるんですかね?