2017年10月22日

XML にローカル変数が使えるようになる vbslib の LoadLocalVariableInXML

vbslib の LoadLocalVariableInXML を使うとローカル変数が使える XML に簡単に対応できるようになります。(ローカル変数が使えるかどうかは、XML をロードするスクリプトによります。)

vbslib は、以下からダウンロードできます。 Windows 用です。
http://vbslib.osdn.jp/
http://www.sage-p.com/vbslib/vbslib/vbslib.htm
https://github.com/TsNeko/vbslib

前回、vbslib では、Variable タグを変数定義として扱うことを説明しました。 Variable タグで定義した場合、同じファイルの中のどこからでも変数の値を参照できます。 XML をロードするスクリプトによっては、他のファイルからでも参照できることもあります。 このようにどこからでも参照できる変数を、一般にグローバル変数と呼びます。

しかし、どこからでも参照できることが逆に、副作用を伴うケースもあります。 例を挙げます。


<Example>

<Group name="1">
<Variable name="${Base}" value="C:\Base1"/>
<File>${Base}\FileA.txt</File>
<File>${Base}\Sub\FileB.txt</File>
<File>${Base}\Sub\FileC.txt</File>
</Group>

<Group name="2">
<Variable name="${Base}" value="C:\Base2"/>
<File>${Base}\FileD.txt</File>
<File>${Base}\Sub\FileE.txt</File>
</Group>

</Example>



${Base} 変数が 2か所で定義されています。 この XML をロードすると、すでに定義されているという警告が echo 表示されますが、そのまま続きを実行します。 変数を参照すると、参照する場所に関わらず、下で定義した値になります。 つまり、File タグの間のテキストは、

C:\Base2\FileA.txt
C:\Base2\Sub\FileB.txt
C:\Base2\Sub\FileC.txt
C:\Base2\FileD.txt
C:\Base2\Sub\FileE.txt


になります。

C:\Base1\FileA.txt
C:\Base1\Sub\FileB.txt
C:\Base1\Sub\FileC.txt
C:\Base2\FileD.txt
C:\Base2\Sub\FileE.txt


ではありません。

XML はデータを表現しており、スクリプト言語のような手順を表現していません。 よって、変数と呼びますが、スクリプト言語での「定数」に相当します。

このように変数名(シンボル)が衝突してしまったときでも、変数を参照できる範囲を一部に限定すれば、衝突しません。 Variable タグの代わりに LocalVariable タグを XML に記述すれば、参照できる範囲を一部に限定できます。 その範囲(スコープ)は、LocalVariable タグの兄弟か子、別の言い方をすれば、LocalVariable タグの親の子です。 このような変数を、一般にローカル変数と呼びます。


<Example>

<Group name="1">
<LocalVariable name="${Base}" value="C:\Base1"/>
<File>${Base}\FileA.txt</File>
<File>${Base}\Sub\FileB.txt</File>
<File>${Base}\Sub\FileC.txt</File>
</Group>

<Group name="2">
<LocalVariable name="${Base}" value="C:\Base2"/>
<File>${Base}\FileD.txt</File>
<File>${Base}\Sub\FileE.txt</File>
</Group>

</Example>


File タグの間のテキストは、

C:\Base1\FileA.txt
C:\Base1\Sub\FileB.txt
C:\Base1\Sub\FileC.txt
C:\Base2\FileD.txt
C:\Base2\Sub\FileE.txt


になります。

vbslib の XML のローカル変数は、XML の仕様を変えるわけではないので、XML をパースして取得できる値は、変数が展開された値ではありません。 それぞれのローカル変数のスコープに合わせて、変数展開をする関数を呼ぶ必要があります。

まず、変数を使わずに XML をパースするスクリプトを示します。

path_of_XML = "Example.xml"
Set root = LoadXML( path_of_XML, Empty ) '// LoadXML は vbslib の関数
For Each a_file_tag In root.selectNodes( "Group/File" )
  value_with_variable = a_file_tag.selectSingleNode( "text()" ).nodeValue
Next


次に、グローバル変数を展開するスクリプトを示します。

path_of_XML = "Example.xml"
Set root = LoadXML( path_of_XML, Empty )
Set global_variables = LoadVariableInXML( root, path_of_XML ) '// ★追加
For Each a_file_tag In root.selectNodes( "Group/File" )
  value_with_variable = a_file_tag.selectSingleNode( "text()" ).nodeValue
  value = global_variables( value_with_variable ) '// ★追加
Next


最後に、グローバル変数だけでなくローカル変数も展開するスクリプトを示します。

path_of_XML = "Example.xml"
Set root = LoadXML( path_of_XML, Empty )
Set global_variables = LoadVariableInXML( root, path_of_XML )
For Each a_file_tag In root.selectNodes( "Group/File" )
  Set variables = LoadLocalVariableInXML( _
    a_file_tag, global_variables, path_of_XML ) '// ★追加
  value_with_variable = a_file_tag.selectSingleNode( "text()" ).nodeValue
  value = variables( value_with_variable ) '// ★変更
Next


5行目の LoadLocalVariableInXML が、ローカル変数をロードする関数です。 global_variables にロードされているグローバル変数と、ロードしたローカル変数の両方が返り、variables に格納されます。 LoadLocalVariableInXML 関数の第1引数には、変数を展開する値を持っている XML要素、または、その兄弟の XML要素を指定します。






sage_p at 21:40|PermalinkComments(0)プログラミング 

注目ニュースリンク10/23

◇ 一部 Google Home Mini で勝手に録音してサーバに送信するバグ。修正済み。
https://japan.cnet.com/article/35108585/
… 何かのタイミングで、録音してサーバに送信する機能自体はあるようだ。

◇ Wi-FiのWPA2脆弱性 KRACK、今ユーザーにできる対処法。
https://japan.cnet.com/article/35108866/
… 攻撃者はワイヤレスネットワークの電波が届く範囲内にいる必要がある。

◇ 10月17日に配信開始。Windows 10 Fall Creators Update でPCはこう変わる。
http://www.itmedia.co.jp/pcuser/articles/1710/17/news045.html
… 1つの目玉は、絵に自動的にタグが付いて検索できること。

◇ Bash on Windows という名称は非推奨に。正式名称 Windows Subsystem for Linux 。
http://www.publickey1.jp/blog/17/bash_on_windowswindows_subsystem_for_linuxwsl.html
… Ubuntu 以外も乗せられる。 Javaも動く。

◇ ついにWindowsへ導入が始まった Fluent Design System 5つの基本要素。
http://ascii.jp/elem/000/001/570/1570738/
… 3D空間にウィンドウが浮いたようになるのはいつだろう。

◇ NVIDIA、レベル5の自動運転を見据えた DRIVE PX Pegasus を発表。
https://japan.cnet.com/article/35108589/
… 周囲の環境を常に監視する端子を多く備えている。

sage_p at 21:37|PermalinkComments(0)注目ニュースリンク 

2017年10月09日

スマート スピーカー Google Home が日本で発売

2017年 10月 6日、グーグルは、スマート スピーカー Google Home を日本で発売開始した。 アメリカでは、Amazon Echo があるが、日本では、まだ発売していない。 5日には、LINE が Clova WAVE を発売した。

スマート スピーカーとは、iPhone の Siri のように音声で質問したり命令することができるスピーカーだ。 スマホの音声認識機能とのいちばんの違いは、スマホを持つ必要がなく、スマホを探す必要がないことだ。 電源コンセントにスマート スピーカーを接続して音声認識が常時オンになっているので、声に出すだけで応答してくれる。 単なるマイク付きスピーカーではなく、部屋のどこにいても認識することや、音楽を流していても認識するようにノイズキャンセリング機能が付いている。

音声認識といえば何でも応答してくれそうな感じがするが、そう考えると期待外れに感じるだろう。 残念ながら A.I. を使っていても、何でもできるわけではない。 しかし、特定の用途であれば期待通りの認識をしてくれる。 そのできることを、スマート スピーカーの先駆者である Amazon Echo では「スキル」と呼んでいる。 スマホのアプリに対応する概念だ。

最も分かりやすいスキルは、音楽再生だろう。 何たってスピーカーだからだ。 再生の開始と停止をするときは、プレイヤーのボタンを押しに行くことなく、声に出すだけだ。 音量の調整もできる。 曲名を声に出して曲をえらぶこともできるが、プレイリストをあらかじめ登録しておけば、他の曲と間違えることも少ないだろう。 ただし、Google Play Music 会員でないと快適ではない。 曲を購入しなくてもアップロードすれば使えるので実質何でも聞けそうだが、曲の検索はできないか間違えることがあるだろう。 結局、Google Play Music へ引き込むのが狙いだ。

タイマーのスキルも便利だろう。 カップラーメンを待つときや、洗濯物をしまうときに役に立つだろう。 簡易的な今日のスケジュール管理としても使えるだろう。

スマート スピーカーは、IoT(モノのインターネット)のユーザーインターフェースとしても期待されている。 たとえば、部屋の電灯のオン・オフ。 寝るときにスイッチを押してからベッドに入るか、リモコンを探して押す必要があったが、スマート スピーカーがあればベッドに入って声に出すだけだ。 この分野は家電メーカー各社が参入を狙っている。

忙しい朝、傘が必要かどうかを聞くことも便利だろう。 料理をする人なら、手順を1つずつ読み上げるのも便利そうだ。 スマホとの連携をカスタマイズしたいなら、IFTTTのサービスを利用するとよいだろう。

何でもできる賢い A.I. ではないが、特定の用途であれば声に出すだけで応答してくれるのは快適だろう。

しかし、Amazon も Google も個人的な好みを分析する企業であること、Android にはセキュリティホールが多いことに注意した方がいい。 開始コマンドである OK Goodle から始めなくても、普段の会話を分析しているのだ。 相手は機械だがスマート スピーカーは盗聴器と同じだ。 家の中だからとパスワードを声に出しながら入力するようなことは避けなければならくなるだろう。 将来、インストールしたスキルがパスワードを盗むかもしれない。 とはいえ、普通、パスワードは声に出さないから、知識として知っておくぐらいでよいだろう。

ソース
http://www.itmedia.co.jp/mobile/articles/1710/05/news117.html
https://www.youtube.com/watch?v=EZ2jCovzg2Q
https://www.youtube.com/watch?v=S7fKPChrXrA
https://www.youtube.com/watch?v=p5w_hs0b64g
http://www.itmedia.co.jp/news/articles/1707/13/news081.html
https://matome.naver.jp/odai/2148587588850024101
https://qiita.com/kazunori279/items/fdadbfde58ed133bb9d5

sage_p at 23:44|PermalinkComments(0)IT ニュース&コラム 

注目ニュースリンク10/ 9

◇ 子ども向けVR、グリーが開発。単眼式、目が疲れにくい。
http://www.itmedia.co.jp/news/articles/1710/05/news074.html
… たぶん、ドラゴンボールのスカウターが付いたメットで、手動で持った時だけ覗けるとか。

◇ Microsoft、量子コンピュータ向けプログラミング言語を年内プレビュー公開へ。
http://www.itmedia.co.jp/news/articles/1709/26/news064.html
… グーグルに続くマイクロソフト。 今回は根本的に仕組みが違うが C#のように逆転できるか。

◇ マイクロソフトは何のために存在するのか、ナデラCEOが追究、示してきたこと。
https://japan.zdnet.com/article/35108349/
… 他の会社にも言える、他の人がテクノロジを生み出すためのテクノロジを作る会社。

◇ Netflix、米国で値上げへ。
http://www.itmedia.co.jp/news/articles/1710/06/news058.html
… これだけの値上げで持続可能な経営が成立するかどうか。

◇ macOS High Sierra、パスワード盗まれるゼロデイ脆弱性の指摘。リリース直前に。
https://japan.cnet.com/article/35107753/
… アップルだけセキュリティのバグ報奨金プログラムがない。

◇ Apple Watch発表から3年。最新モデル、ではなくApple役員の体型に注目してみた。
http://news.mynavi.jp/articles/2017/09/25/apple_watch/
… Apple Watch を身に着けると、スリムになるらしい。

◇ Amazon、読み放題 Prime Reading 日本版スタート。プライム会員向け。
http://www.itmedia.co.jp/news/articles/1710/05/news089.html
… 実質0円で、読める本は、Kindle Unlimited より少ない。

sage_p at 23:44|PermalinkComments(0)注目ニュースリンク 

2017年09月24日

XML に変数が使えるようになる vbslib の LazyDictionaryClass

vbslib の LazyDictionaryClass を使うと変数が使える XML に簡単に対応できるようになります。(変数が使えるかどうかは、XML をロードするスクリプトによります。)

vbslib は、以下からダウンロードできます。 Windows 用です。
http://vbslib.osdn.jp/
http://www.sage-p.com/vbslib/vbslib/vbslib.htm
https://github.com/TsNeko/vbslib

vbslib では、Variable タグを変数定義として扱います。

<Variable name="${Var1}" value="ABC"/>


これは、変数 ${Var1} の値が ABC であることを定義しています。

ちなみに、XSL には変数の仕様があり、XSL の変数の定義は以下のように書きます。

<xsl:variable name="Var1" select="'ABC'"/>


始めは、xsl:variable タグと同じ仕様にしようと考えたのですが、XSL の name 属性と異なり、Variable タグの name 属性には $ も含める仕様にしました。 Var1 と ${Var1} を比べて見たとき、Var1 は変数ではないと認識しますよね。 いくら ${ } の文字が変数の名前の部分ではないと言われても認識するときは関係ないです。 W3C の関係者は、その辺のセンスがないですね。 それに、定義を検索するときは、${Var1} を検索キーワードにするでしょうから、それでヒットしないのは不便です。 なお、XML は文字列型しかないので、XSL のように ' ' で囲む必要はありません。

変数を使って、XML データを表現する例を挙げます。 テキスト(タグの間)でも、属性値でも使えます。

<Example>
<Variable name="${Var1}" value="ABC"/>
<Value>123${Var1}456</Value>
<Tag value="123${Var1}456"/>
</Example>


vbslib の XML の変数は、XML の仕様を変えるわけではないので、XML をパースして取得できる値は、変数が展開された値ではありません。 変数展開をする関数を呼ぶ必要があります。 しかし、それはとても簡単です。 比較のために、まず、変数を使わずに XML をパースするスクリプトを示します。

path_of_XML = "Sample.xml"
Set root = LoadXML( path_of_XML, Empty ) '// LoadXML は vbslib の関数
value_with_variable = root.selectSingleNode( "Tag" ).getAttribute( "value" )


次に、XML をパースして変数を展開するスクリプトを示します。 2行追加するだけです。

path_of_XML = "Sample.xml"
Set root = LoadXML( path_of_XML, Empty )
Set variables = LoadVariableInXML( root, path_of_XML ) '// ★追加
value_with_variable = root.selectSingleNode( "Tag" ).getAttribute( "value" )
value = variables( value_with_variable ) '// ★追加


3行目は、すべての Variable タグによる変数の定義が入った LazyDictionaryClass のオブジェクトを variables 変数に代入しています。 5行目は、変数を展開しています。 たとえば、value_with_variable の値が 123${Var1}456 なら、value の値は、123ABC456 になります。

Variable タグは、変数を参照している位置の上に書いても下に書いても構いません。 それができるのも、前回説明したように LazyDictionaryClass が遅延評価するから、変数に値を代入する順序に依存しなくなるからです。


sage_p at 23:47|PermalinkComments(0)プログラミング 

注目ニュースリンク 9/25

◇ Nintendo Switchには特定の日付&アクションで起動する隠しゲームあり、故・岩田聡氏の命日に起動。
http://gigazine.net/news/20170921-nintendo-switch-hidden-golf/
… 来年の7月11に起動できるだろうか。

◇ iOS 11では32bitアプリが動かず。タイトーはゲームアプリ5つを配信終了に。
http://www.itmedia.co.jp/mobile/articles/1709/19/news129.html
… iOSにアップデートすると動かなくなるアプリケーションが多い。

◇ iOS 11では操作画面の録画が可能に。
http://www.itmedia.co.jp/mobile/articles/1709/20/news056.html
… SNSに動画の投稿が増え、通信量が増えそう。

◇ Google、HTCのスマホ部門を買収。HTC PixelチームがGoogleに移籍。HTCは自社スマホ継続。
http://pc.watch.impress.co.jp/docs/news/1081890.html
… またモトローラと同じように権利だけ頂戴して売却するだろう。

◇ 壁面に埋め込むWi-Fiアクセスポイント、エレコムが法人向けに販売。
http://internet.watch.impress.co.jp/docs/news/1081656.html
… インターネット付き住宅が有線から無線へ。

◇ 日本は周回遅れ。業界の垣根を越えた77社が取り組む“暮らしのIoT。
http://www.itmedia.co.jp/lifestyle/articles/1709/15/news120.html
… オープンな標準化と競争力がつく部分への集中が普及のカギ。

◇ GoogleドライブのAndroidバックアップは2週間使わないと2カ月後に削除される。
http://www.itmedia.co.jp/mobile/articles/1709/19/news054.html
… Androidが2台目の人は注意。

◇ 総務省とNICT、さまざまな分野の翻訳データ1億文の集積目指す 翻訳バンク。
https://japan.cnet.com/article/35107027/
… 英語が必要なら、最終的にはオープンデータにすべき。

◇ なんと約880万件、URL短縮サービス終了により発行済みの短縮URLがすべて無効化。
http://internet.watch.impress.co.jp/docs/yajiuma/1081357.html
… オープンデータにしても問題ないのでは。

◇ オンライン海賊版はコンテンツ売上にネガティブな影響を与えないという報告書を発表せず。
http://gigazine.net/news/20170922-copyright-piracy-not-harmful/
… 有名でなければ、広告効果があるだけ。 ただし、有料サイトも存在しなければ影響も何もない。

◇ Java EEの策定はEclipse Foundationへ、オラクルからの移管を発表。
http://www.publickey1.jp/blog/17/java_ee_eclipse_foundation.html
… Google との裁判が一段落したからか。

sage_p at 23:46|PermalinkComments(0)注目ニュースリンク 

2017年09月10日

京セラが汎用的な IoTユニットを開発。屋外での監視作業を自動化へ

2017年 8月31日、京セラは、LPWA対応の通信モジュール、IoTユニットを開発したと発表した。 IoTユニットには、通信機能だけでなく、温度、湿度、気圧、照度、加速度、角速度(ジャイロ)、地磁気、GPS のセンサーを標準搭載している。

IoT(Internet of Things = 物のインターネット)関連は将来大きな市場になる予想があることや、日本の少子高齢化社会に必要な技術と言われているが、あまり普及しているイメージがない。 体重計や鍵などが、Bluetooth で近くのスマホと接続し、そこからインターネットとつながることぐらいだろうか。 無線LANルーターが普及した現在では、屋内では Bluetooth や Wi-Fi で十分だろう。

京セラの IoTユニットはスマホを経由せず、屋外に設置している物から3G/LTEなどの携帯電話網に直接接続する。 LPWA(Low Power Wide Area)は、1〜50kmもの間を通信することが、電池1個で1〜2年も使える無線通信の種類だ。 通信できるデータ量が少ない欠点があるが、常にカメラで動画を送り続けるようなことがなければ、IoT の用途では十分であろう。

実は機械が監視してネットで見ることができるアプリケーションは、すでにいろいろある。 駐車場の空き状況であったり、バスや電車の位置であったり、自動販売機の売り切れ状況であったり、河川のライブカメラであったりだ。 2015年時点の予測で 154億個もすでにつながっている(平成28年版情報通信白書、IHS Technologyの推定より)。

日本は他国に比べて、非ICT企業(情報系ではない企業)が IoT に対する期待が低いらしい。 IoT といえば無線技術だが、無線を使う場面がないかと考えていては普及しない。 人が遠くに出かけて行う作業の一部を自動化できるかもしれないと考えれば、IoT で人件費を削減できることに気づくかもしれない。 人を仕事で活躍させるのではなく、作業量を減らして社員が働きやすくなること考えてみてはいかがだろう。

自動化しようとする作業の多くはそれぞれ異なるので、それぞれにシステムを開発していてはコストがかかりすぎる。 そこで、監視やメンテナンスに関する作業は、京セラの IoTユニットのような汎用品を流用するのがいいだろう。

ソース
http://businessnetwork.jp/Detail/tabid/65/artid/5622/Default.aspx
http://www.soumu.go.jp/johotsusintokei/whitepaper/h28.html
https://time-space.kddi.com/ict-keywords/kaisetsu/20170428/
http://www.core.co.jp/product/embedded/m2masura/

sage_p at 21:01|PermalinkComments(0)IT ニュース&コラム 

注目ニュースリンク 9/11

◇ ごみ箱に溜まった量を遠隔監視。KDDI、沖縄で屋外実証実験。
https://japan.cnet.com/article/35107022/
… 携帯電話系無線 LTE-M を使ったシステム。

◇ 人工知能は暴走する、ただしそれは“人の手”によって。
http://www.itmedia.co.jp/enterprise/articles/1709/07/news019.html
… 人工知能の普及には、「ざっくり」でも暴走した原因の説明が必要。

◇ ゲームライブストリーミング Twitch が日本市場へ本腰。東京にオフィス開設。
https://japan.cnet.com/article/35106899/
… 日本のゲーム市場の規模は大きいが、特殊な市場の理解が必要。

◇ レッドソックス、Apple Watch でサイン盗む。ヤンキースが苦情。
https://japan.cnet.com/article/35106915/
… 昔からスパイ映画があったはず。

◇ 匿名もOK!SkypeでWebコードエディタを共有できる Interviews on Skype。
http://plus.appgiga.jp/masatolan/2017/08/28/57924/
… プログラミング エディターをクラウド化。ベータ公開。

◇ Vistaっぽい見た目を実現したWindows互換OS ReactOS 0.4.6。
http://pc.watch.impress.co.jp/docs/news/1079887.html
… まだ一部のアプリが動くだけだが。

◇ ビジネス書が売れなくなった本当の理由。
http://www.itmedia.co.jp/business/articles/1709/08/news022.html
… 精神論と同じく万人に通じるのは、ざっくりしすぎている。 大学生向け。

sage_p at 21:01|PermalinkComments(0)注目ニュースリンク 

2017年08月27日

変数の展開を遅延評価する vbslib の LazyDictionaryClass

vbslib の LazyDictionaryClass は、${ } 形式の文字列変数を遅延評価する辞書です。 遅延評価をすると、変数に値を代入する順序に依存しなくなります。

vbslib は、以下からダウンロードできます。 Windows 用です。
http://vbslib.osdn.jp/
http://www.sage-p.com/vbslib/vbslib/vbslib.htm
https://github.com/TsNeko/vbslib

遅延評価を説明する前に変数の基本をおさらいしましょう。 スクリプトにおいて、変数は、ファイルやフォルダーのパス(アドレス)の一部に使うことが多いです。 変数は値に展開されます(後記サンプルを参照)。 Linux の $HOME や Windows の %USERPROFILE% などは環境変数という変数です。 Makefile や開発環境では、${HOME} のように ${ } で囲むことが多いです。 フォルダーのパス(または、その一部)に変数を使うと、フォルダーを置く場所が変わったとしても、変数を展開すれば、その中にあるファイルやフォルダーのパスが修正されます。

たとえば、1台の PC に Aさんと Bさんの 2つのアカウントを作っているとき、Aさんのデスクトップがあるパスと Bさんのデスクトップがあるパスは異なりますが、環境変数を使えば(展開する前は)同じになります。

  ・Aさんのデスクトップのパス: C:\Users\A\Desktop
  ・Bさんのデスクトップのパス: C:\Users\B\Desktop

  ・変数を使ったデスクトップのパス: %USERPROFILE%\Desktop
  ・Aさんの %USERPROFILE% 変数の値: C:\Users\A
  ・Bさんの %USERPROFILE% 変数の値: C:\Users\B

シェルやバッチファイルでは、自動的に環境変数を自動的に値に変換しますが、それ以外では変数を値に展開する関数を呼び出す必要があります。

vbslib の LazyDictionaryClass は、変数名(${ }形式)を辞書のキーに、変数の値を辞書の値に指定することで、遅延評価ができるようになります。

Set g = new LazyDictionaryClass
g("${RootPath}") = "C:\Folder${Target}" '// 変数 ${RootPath} に値を設定
g("${Target}") = "A" '// 変数 ${Target} に値を設定
Assert g("${RootPath}") = "C:\FolderA" '// 変数 ${RootPath} を参照


上記のコードは文法的には、VBScript の WSH で初めから使える辞書と同じです。 辞書の文法についての詳細を知りたいときは、VBScript Scripting.Dictionary をネットで検索してください。

バッチファイルやシェルスクリプトは、遅延評価ではなく毎行で評価する(先行評価・正格評価である)ため、${Target} の代入を先にするよう順序を変更しなければ期待した結果が得られません。 WSH で初めから使える辞書も先行評価なので、順序を変更しなければなりません。 ちなみに先行評価より正格評価が正式のようにネットで書かれていますが、わざわざ読みが正確評価や性格評価と間違えそうなほうを選ぶ意味が分かりませんし、eager evaluation の eager に正格の意味はなさそうです。

Set g = CreateObject( "Scripting.Dictionary" )
g("${Target}") = "A"
g("${RootPath}") = "C:\Folder"+ g("${Target}")
Assert g("${RootPath}") = "C:\FolderA"


(ただし、上記の ${RootPath} 変数への代入の行は、VBScript が自動的に評価しないことに対応するコードと、一部を評価することができないことに対応するコードも含んでいます。)

遅延評価があれば、${RootPath} 変数への代入と ${Target} 変数への代入の順序を入れ替えても、期待した結果が得られます。

Set g = new LazyDictionaryClass
g("${Target}") = "A"
g("${RootPath}") = "C:\Folder${Target}"
Assert g("${RootPath}") = "C:\FolderA"


上記のコードは、最後の行で ${RootPath} を展開し、その結果に変数 ${Target} があるので更に展開して、最終的に C:\FolderA という値になります。

評価するタイミングは、辞書の値を参照するときです。 遅延評価するコードでは評価するタイミングがいつであるかを踏まえることが挙動を理解するのに重要です。 しかし、ネットで遅延評価を検索しても関数型言語の遅延評価の説明ばかりで、その関数型言語での評価(計算・サンク)のタイミングは、予想できないという大きな欠点が明らかになっています。

また、挙動が理解できても期待する動作が得られなかったとき(デバッグするとき)は、変数に代入する値や展開した値を1つずつ確認しなければ解決することは難しいです。 そこで、vbslib の LazyDictionaryClass では、

g.DebugMode = True


をコードに追加することで、次のように echo 出力から確認することができます。

<DictionaryEx operation="Set" key="${Target}">A</DictionaryEx>
<DictionaryEx operation="Set" key="${RootPath}">C:\Folder${Target}</DictionaryEx>
<DictionaryEx operation="Get" key="${RootPath}">
<Expand count="1">C:\Folder${Target}</Expand>
<Expand count="2">C:\FolderA</Expand>
</DictionaryEx>


なお、LazyDictionaryClass の遅延評価は、文字列の展開しかサポートしていませんが、一般に「遅延評価」という用語には、式の展開やコードの実行での遅延も含まれます。

この遅延評価という仕組みは、XML などのデータ構造に変数を使うときに必須となる機能です。 次回は、LazyDictionaryClass を使うことで簡単に、変数が使える XML に対応する方法を説明します。

参考:
https://ja.wikipedia.org/wiki/遅延評価
http://marycore.jp/prog/cpp/cpp-lazy-evaluation-and-partial-function-application/

sage_p at 22:48|PermalinkComments(0)プログラミング 

注目ニュースリンク 8/28

◇ ネットワーク障害 グーグルが設定誤りで謝罪。
http://www3.nhk.or.jp/news/html/20170827/k10011114211000.html
… ネットワークの設定の誤りというが、他社はそんなミスをしていない。

◇ 小学校の先生がプログラミングを体験。 必修化に向けて横浜市。
https://japan.cnet.com/article/35106069/
… 理数系の勉強と絡めると相乗効果が期待できる。

◇ アプリごとに音量調節するUSBボリューム PCPanel。 出力先の選択もワンタッチ。
https://japan.cnet.com/article/35106045/
… Windows の音声ミキサーを使っていないなら不要かも。

◇ 暗号通貨プラットフォーム Enigma にハッキング。 50万ドル被害か。
https://japan.cnet.com/article/35106164/
… 電子通貨というより、Enigma のドメインがハッキングされた。

◇ Windows 10 Pro for Workstations は何がスゴイのか。
http://www.itmedia.co.jp/pcuser/articles/1708/22/news069.html
… プロセッサーのソケットが 4つ、メモリーが 6TB まで対応。

◇ ソニー、ディープラーニングの開発環境 Neural Network Console を公開。
https://japan.cnet.com/article/35105937/
… まだ AI はオープンソースで普及を目指す段階。

sage_p at 22:44|PermalinkComments(0)注目ニュースリンク 

2017年08月15日

HTML5 版ゲームのサービス開始や会社の設立が相次ぐ

2017年 7月18日、ヤフー ジャパンは、ブラウザーだけで楽しめるヤフー ゲームに、ヤフー ゲーム プラスのサービスを開始した。 ヤフー ゲーム プラスは、クラウドゲームと HTML5 ゲームの2種類があり、前者はサーバーで動作するゲームを映像配信する。

また、8月4日、楽天ゲームズは、名作シューティング ゲーム DARIUS を HTML5 に移植した DARIUS THE ORIGIN の配信を開始した。 これまではナムコのレトロゲームが主力製品だったので、少し進化したことになる。 バンダイナムコとドリコムも HTML5 ゲームを開発する BXD 社を 5月に設立した。

ブラウザーゲームで最も成功しているのは、2013年から開始された DMM の艦これである。 440万人以上登録しており、現在でも新規サーバーが解放されるまで新規に着任できない状態にある。 艦これは、ブラウザーゲームといっても、実際は、Flash 上で動作している。 2016年からは Google Play ではない Android 版を提供している。

なぜ iOS や公式の Google Play から提供していないかというと、iOS のアプリや Android のアプリは、課金するときに30%もアップルやグーグルに取られてしまうからだ。 AppStore が登場して 9年になるが、未だに 30%のまま徴収しており、完全に寡占による不当な価格である。 15%に下げる条件もあるが、それは例えばユーザーが 2年目以降に課金した場合であり、非常に難しい。 ただし、任天堂のスーパーマリオ ランのようなビッグタイトルでは個別契約しているかもしれない。

ファミコンやプレイステーション1の場合、まだオンライン購入ができないために小売店のマージンが最も多く、単純な比較はできないが、ソフトメーカーから見れば、定価の 60〜70%も取られていたことを考えると 30%は安い。しかし、ハードメーカーのロイヤリティは、15%〜20% だ。 Switch や PS4 については、情報が見つからなかった。 ロイヤリティだけを考えれば Windows がいいだろうが、最近はスマホのユーザーのほうが圧倒的に多いため、ロイヤリティの問題を考えざるをえなくなった。

HTML5 で動作するゲームの現状は、2Dグラフィックスの古いゲームやアクション性がないゲームばかりだ。 ゲーム開発環境 Unreal Engine や Unity にもロイヤリティが発生するのだが、それが古いゲームばなりになる要因の1つかもしれないが、おそらく、HTML5 には対応しているが、本格的なゲームを作ると遅かったり表示されなかったりと、完全対応まではできていないのだろう。 楽天ゲームズが海外のエンジニアを前面にホームページで紹介していることからも、鍵は開発環境の出来なのだろう。

まとめると、ゲームの内容やターゲットユーザーに応じて、どこにロイヤリティを支払うのが最も良いかという話なので、HTML5 だからロイヤリティが不要で最も利益が發い箸いγ噂磴箆辰任呂覆い箸いΔ海箸澄

ソース
http://gamebiz.jp/?p=189159
http://corp.rakuten-games.com/
https://gamedeets.com/archives/256383
http://www.4gamer.net/games/032/G003263/20150826035/
http://kotetsu.game-waza.net/ゲーム売上・考察/ゲームソフトのロイヤリティをまとめ 任天堂、sceの取り分は-
https://www.unrealengine.com/ja/faq
https://developer.nintendo.com/
http://jp.gamesindustry.biz/article/1702/17022102/

sage_p at 01:53|PermalinkComments(0)IT ニュース&コラム 

注目ニュースリンク 8/14

◇ ビットコインから分裂した、ビットコインキャッシュとは何者か。
https://japan.cnet.com/article/35105311/
https://japan.cnet.com/article/35104451/
… 取引スピードが遅くなってきたため、バージョンアップ。

◇ WannaCry 犯人、身代金のビットコインを全額引き出し。14万ドル相当。
https://japan.cnet.com/article/35105298/
… 犯人は引き出しに成功した。 ビットコインでは追跡する機関がないのでは。

◇ 歩けば保険料の一部をキャッシュバック。フォッシル、MISFITでヘルスケア事業に進出。
https://japan.cnet.com/article/35105286/
… 1日8000歩以上ならキャッシュバック。 OEMで広がるか。

◇ コンソールが24bitカラーに対応。Windows 10 Insider Preview。
http://forest.watch.impress.co.jp/docs/news/1074095.html
… 実は未だに 256色しか対応していなかったコマンド プロンプト。

◇ Raspberry Pi3と同サイズで性能2倍のASUS製 Tinker Board が国内発売。
http://pc.watch.impress.co.jp/docs/news/1073926.html
… 価格は、1.5倍。NASとしても使えそう。

◇ 独自の言語使用法に行き着いたAI は人類を危機にさらすものなのか?
http://gigazine.net/news/20170802-facebook-ai/
… 理解できない原因のほとんどは、意味のない会話だからではないか。

◇ グーグルのエンジニアが自社の多様性志向を批判、性差別と内紛に。
https://japan.cnet.com/article/35105380/
… 人種や性別で判断しないのならいいが、劣っているのに無理矢理同じ数にするのはどうか。

sage_p at 01:53|PermalinkComments(0)注目ニュースリンク 

2017年07月30日

人が死んだバグ、セラック25の事故から学ぶべき Nancy 教授の教訓

2017年 7月、cpprefjp - C++日本語リファレンスの bool 型に対するインクリメント演算子が C++17 から仕様から削除された理由を推測する文において、バグによって 3人が死亡した放射線被曝事故が紹介され、「人が死ぬバグ」としてツイートされた。 しかし、実際は、風が吹けば桶屋が儲かると揶揄されるように、因果関係はない。

bool 型に対するインクリメントのサンプルとして以下の C++14(2014年版 C++言語)のコードが挙げられている。

#include <iostream>
#include <vector>

int main()
{
 std::vector<int> v{};
 //append elements to v
 int8_t flag = 0; // as bool type
 for ( auto&& i : v ) { // range-based for loops (for each)
  if ( flag++ ) { std::cout << ','; }
  std::cout << i << std::endl;
 }
}

このコードは、for 文の中の if ( flag++ ) にバグを含んでいるらしい。

変数 v は、STL (Standard Template Library) による整数の配列である。 for 文のループ変数 i には、v の配列要素が入る。 なお、この for 文の書き方は、range-based for loops という言語仕様であり、一般的には for each 文として知られている。(一般に知られている for each というキーワードを使わないことにC++ の仕様策定者のセンスの無さを感じる)。 ここでは、STL とか for each とか、配列の実装方法については関係ないので無視していい。

flag は 8ビット整数型(int8_t)であり、for 文の中でインクリメント(++演算子によって、変数の値を+1)している。 if 文が真になる条件は、flag 変数をインクリメントする前の値が 0 以外のときである。 int8_t 型が扱える値の範囲は、一般的な CPU では、-128 〜 +127 であり、+127 から +1 するとオーバーフローを起こしてエラーもなく -128になる。 よって、最初(1回目)と 257回目と…(1 + 256 * n 回目)に、if 文が偽になる。

最初だけ if 文が偽になる仕様に対するコードであれば、このコードにはバグがあるということになるというわけだ。

ただし、1 + 256 * n 回目にコンマを出力しないという仕様であれば、バグではないのだが、一旦伏せておく。

問題は、コンマが出力されないために、前の出力値と結合した値が出力されてしまったことである。 たとえば、256回目の値が 123、257回目の値が 45 なら、256回目の値が 12345 という値に大きくなってしまい、おそらく放射線の出力が 100倍近く通常より大きい値になってしまったことで、死亡事故になったのだろう。

この死亡事故は、史上最悪のソフトウェア バグの1つとして知られている 1987年の「セラック25」という放射線治療装置の誤作動として知られている。(本当にこのコードが原因であるかは不明)

当時は、C++言語は普及していなく、実際のコードはアセンブラで記述されていた。 当時の CPU は、インクリメント命令がよくあり、アセンブラの1命令で簡単に記述でき高速に動作したのだろう。 ちなみに、現在の CPU は +1 や -1 だけ特別な命令にはなっていないものも多くあり、高速でもない。 C言語の ++/-- 演算子は、この古い CPU 仕様やその背景にある +1, -1 が多かったことから生まれているのだが、現在では特に多いわけでもなく、for each が多く使われるので、たまに ++ が書いてあって何だこれとなることがないように、Python のように += 1 のように書くのがいい。 また、1が明示されていて読みやすい。

インクリメントの不具合から得られる再発防止策や教訓を考えるとすると、bool 型(として扱う変数やレジスター)にはインクリメントしないようにしようとか、オーバフローに気を付けようとか考えるのが一般的であろう。 ソフトウェアがよく分からない人に説明するときは、この説明のほうが明快でいいだろう。 しかし、実際はそんなに簡単なことではなく、再発防止にはつながらない。 なぜなら、前述のとおり、1 + 256 * n 回目にコンマを出力しない(または、改行に変える)という仕様であれば、バグではないからだ。(よく分からない人には混乱を生むだけなので説明しないほうがいいだろう。 つまり、相手によっては、明快な説明だけで不具合ゼロと自信をもって断言するのがよい。)

バグであるかそうでないかは、内部実装だけでは決まらない。 外部仕様と違っているかどうかで決まるのである。 よく、プロセスが品質を上げると言っているが、プロセスという言葉からは内部実装や実務をイメージしがちであるので、内部実装だけ時間をかけてレビューしがちであるが、それは見当違いである。 もっと積極的に優先的に外部仕様に関わるべきであるり、それゆえ、要求者は、外部仕様が神であると押し付けてはならないし、実装者は、要求の変更を多少は受け入れを覚悟すべきである。(ただし、開発の最終段階では Fix を優先し、次のバージョンで変更を反映する。)

セラック25の事故を調査したマサチューセッツ工科大学の Nancy Leveson 教授は、事故調査を終えて次のような教訓を書き残している。 まさに、バグであるかそうでないかは、内部実装の品質だけでは決まらないのである。 プログラミングの教科書に是非とも載せるべき内容である。

・ソフトウェアはどんなに慎重に作っても満足できるほどに完璧にはならないため、ソフトウェアがどんな動きをしたときでも、人命に危険が及ばないようにシステムを設計する必要がある(フェールセーフ、独立した安全装置の設置など)

・ソフトウェアの信頼性をできるだけ高めるのは悪いことではないが、それでソフトウェアが安全になるわけではない。プログラマは要求を満たすようにコードを書くが、要求が正しいとは限らない。事故のほとんどは、プログラミングのエラーではなく、要求が間違っていたり、不完全であったりしたために起きている

・われわれの目標は、だれもがこの経験を生かせるようにすることであり、装置のメーカーや他の人を批判することではない。間違いは、このメーカーにだけ起きたのではなく、残念ながら、安全が最優先されるべきその他のシステムにも、きわめて日常的に起きている

・いくつかの出来事が複雑に絡み合って起きた事故が、一つの原因にされることが多すぎる。ほとんどの事故は、システム事故、つまり、さまざまな構成部分や機能が複雑に作用しあって起きるものだ。事故の原因を一つに特定することは、大きな間違いだ。

セラック25の時代は、ソフトウェアのほうが劣化するハードウェアよりも信頼性が高いと信じられていたため、実はソフトウェアは安全ではない、という感じで書かれている。 現在では、ソフトウェアかハードウェアかは関係ない。 それぞれのレベルで独立したチェックすること、多重化することが重要なのである。 セラック20(25の前)では、時折ヒューズが飛んで結果的に事故を防いでいた。 しかし、ヒューズというハードウェアが重要なのではない。 放射線の出力を制御する範囲を制限したり、放射線の出力を計測して警告するシステムを追加したりすることが重要だ。 ヒューズは前者の1つの方法にすぎない。

TDD(テスト駆動開発)では、Nancy 教授の教訓を最優先に考慮している状況にあるため、開発コストの割には品質が高い。 要求の例がそのままテストのコードになるため、要求の問題が見つけやすいからだ。 逆に、内部仕様やコードから要求に合っていることを確認することは難しい。 私はこの内部仕様と要求にある性質を「内包と外延のギャップ」と呼んでおり、そのギャップに矛盾がないこと(ギャップを埋めること)をテストプログラムなどで実証し、その品質保証の範囲を現実的かつ広くすることが品質向上のカギであると考えている。 内部仕様をいくら厳密に長時間レビューしても、不具合ゼロという要求に対する悪魔の証明(ないことの証明)はできないので、現実的な範囲での実証が不具合ゼロの要求に対する現実解なのである。(これを理解できない人には説明するだけ無駄なので、不具合ゼロと断言する。)

多重化したシステムの安全装置は、セルフ テストと呼ぶことがあるが、TDDで品質を確保するために開発するテストとは異なる。 なぜなら、品質を上げるためには、内包と外延のギャップを埋めなければならず、安全装置のコードは内包的定義で記述され、テストは外延的定義で記述するから、全く別物だ。 つまり、安全装置が何かのテストに相当するかもしれないが、安全装置自体のテストは別途必要だ。

また、多くの開発プロセスに見られるような、ユニット テストを先に完璧に仕上げれば、後の工程から戻らないから効率的である、という主張は、誤りであることも、Nancy 教授の教訓から言える。 事故のほとんどは要求の問題なので、スパイラル開発や、スケルトンやプロトタイプを用いた結合テストやフィールド テストを早期に行うべきなのである。 そうしないと、ユニット テストが無駄になるので、非効率なのである。

ちなみに、IPA(独立行政法人情報処理推進機構)は、「大規模・複雑化した組込みシステムのための障害診断手法」を発行しているが、最も重要である Nancy 教授の教訓がない。 また、FTA/FMEA は、要因事象の発生頻度を集計してその重大事象の発生頻度を計算する手法、つまり劣化するハードウェアの保守の話なのに、ソフトウェアの問題を発見する手法であると見当違いなことを書いている。 単に現象には原因があるだけのことなので、学ぶことは特にない。 対象が古いシステムから抜け出せていないのではないだろうか。 マスコミの批判もそうだが、日本人は優先度が低い古い価値観を無視できないために多くの無駄を生んでいるように見える。

https://cpprefjp.github.io/lang/cpp17/remove_deprecated_increment_of_bool.html
http://ecompliance.co.jp/MedicalDevice/SW/Therac-25.html
http://codezine.jp/article/detail/3699
http://qiita.com/rinse_/items/cdfce8aa6a685a8ebe0c
http://www.ipa.go.jp/files/000045158.pdf
http://www.geocities.jp/takaro_u/fta.html

sage_p at 20:31|PermalinkComments(0)プログラミング 

注目ニュースリンク 7/31

◇ グーグルの2段階認証、SMSからプロンプト方式への移行を推奨。
https://japan.cnet.com/article/35104345/
http://gootara.org/library/2016/07/g2fa.html
… 多くのアカウントを作成することの防止には使えるが、セキュリティ強化には使えないSMS。

◇ Tesla車の事故は自動運転機能のせいではない。運転者が当初説明を撤回。
http://www.itmedia.co.jp/news/articles/1707/18/news063.html
… Autopilot 機能を解除していたことを忘れたという新しい状態が危険なのでは。

◇ 車載システム向けのUSB Power Deliverについて。
http://ednjapan.com/edn/articles/1707/25/news017.html
… USB Type-C 対応 PC のように、USB Type-C 対応車と呼ぶ日が来る。

◇ 家の戸締まりをLINEで確認できる leafee Premium の先行版が公開。
https://japan.cnet.com/article/35104094/
… IoT の端末の地位を狙う LINE。

◇ Microsoft、Windows 10 の秋の更新で、ペイントのプリインストールは終了へ。
http://www.itmedia.co.jp/news/articles/1707/25/news050.html
… ペイント 3D でも、2D 画像を編集できるため。

◇ IDC Japan 国内3Dプリンティング市場予測。3Dプリンタ市場は終わったのか?
http://techfactory.itmedia.co.jp/tf/articles/1707/28/news004.html
… 3Dプリンターのバブル期が終わって安定成長へ。

sage_p at 20:31|PermalinkComments(0)注目ニュースリンク 

2017年07月16日

チケットの転売対策にも普及したSMS認証とその闇

2017年 6月30日、イープラスは、チケットの不正購入や高額転売などの根絶に向けて、会員登録をする場合は、6月29日から、SMS認証による2段階認証が必須となった。 既存会員は、11月16日から抽選の申し込みに、2018年 1月18日から一般発売の申し込みにSMS認証が必須になる。

SMS認証とは、これまでパスワードの入力で行ってきた本人確認を、そのパスワード入力だけでなく、携帯電話のショート メールに送られてきたワンタイム
パスワードでも行う方法だ。 単に2段階にすることでセキュリティを強化することが目的ではなく、一人で大量のアカウントを作成することを防ぐことが目的だ。 1つの電話番号につき、毎月千円払わなければならないことと、一人が大量に電話番号を持つことがキャリアに知られやすいことが担保になる。 ちなみに、IP電話用の050、IoT用の020から始まる電話番号はSMSが使えない。

2段階認証(2要素認証)が有名になったのは、Google がそれを始めたからであるが、キャリア メールも使えた。 キャリアを変更するとキャリア メールが変わってしまい大変なことになるため、現在は、NMP(ナンバー ポータビリティ)できる電話番号によるSMS認証が主流だ。 つまり、いつのまにか、NMPしないことのほうが難しい状況になっている。

SMSを1通送るのに10円弱かかるが、Google は特別な契約をしているのだろう。 ローソンチケット(ローチケ)では、会員に国際SMSの代金を払わせているが、何度も送ると高額であると非難され、対応を行った。

SMS認証は、LINE、ツイッター、メルカリ、ヤフオクでも使われており、一人が多くの人になりすますことが難しくなっている。 ただし、ツイッターなどは、一人で1つしかアカウントが持てないことは不便であるため、少しは複数アカウントが持てるようである。 LINE が普及し始めた当初は、電話番号が不正に売られることが懸念されたが、上場企業など身元が明らかな企業なら、そんな信頼を失うような行為はしないだろうという考えが広まってきて抵抗がなくなってきた。 ただし、大企業ならその考えでいいだろうが、見知らぬ企業では、その考えは注意すべきだ。

SMS認証があれば、一人が多くの人になりすますことが難しくなっているようだが、検索すれば、転売屋(せどり)は、すでにSMS認証を回避する方法を公開している。 まず、無料でSMS用の電話番号を取得出来るサービス(HeyWire、textPlus など)を利用する方法がある。 携帯電話がなくても、ログインしてメッセージを受信できるのだ。 しかし、現在では、電話番号を保持する通信会社を判別して、SMS認証できなくしている。

SMS認証の代行業者も現れている。 これは名義貸しにあたり、偽計業務妨害罪の可能性があるが、現実はヤフオクなどで検索すればすぐに見つかるほど堂々とSMS認証の代行が販売されている。 1000円弱かかるが、高額転売する転売屋にとっては、小さな額だ。

米国立標準技術研究所(NIST)は、SMS認証の安全性に警告を出している。 SMS はプロバイダー内に保護されたネットワークであるが、比較的古い技術であるため(施設に入ってウィルスを潜入させたりすれば)、傍受(インターセプト)が簡単であるという。

2段階認証と言っているが、Google アカウントなどでは、パスワードを忘れたと嘘をつけば SMS認証だけになり、実質1段階認証であることも問題だ。 パスワードを再発行するときでも、たとえば、個人しか知りえない質問(セキュリティ質問)とSMS認証のように 2段階認証すべきだろう。

このような状況で、チケットの不正購入や高額転売に SMS認証が有効なのだろうか。 ないよりはマシではあるが、名前が書かれたチケットと身分証による本人確認との組み合わせにしなければ、効果はないのではなかろうか。 実際には入場時に本人確認が行われないことがあるが、主催者はクレームを恐れず本人確認を徹底するのが良いだろう。 転売撲滅に協力してくださいともっと言ったほうがいいだろう。

ソース
https://japan.cnet.com/article/35103587/
http://app-review.poox.xyz/archives/632
https://www.bengo4.com/internet/1078/b_462538/
https://www.j-cast.com/2017/05/19298469.html?p=all
http://jpnpay.com/archives/561
https://japan.zdnet.com/article/35095393/
https://security.srad.jp/story/16/07/26/0920203/

sage_p at 22:58|PermalinkComments(0)IT ニュース&コラム 

注目ニュースリンク 7/17

◇ Microsoft、企業向け組織横断分析ツール、Workplace Analytics 提供開始。
http://www.itmedia.co.jp/news/articles/1707/06/news059.html
… メールを返事する時間や会議の時間が監視される。 非技術職にも効率の意識を。

◇ まだ7を使う? 2017年秋にWindows 10のセキュリティと管理機能はここまで進化する。
http://www.itmedia.co.jp/pcuser/articles/1707/05/news104_2.html
… リモートで特定のプロセスを停止させられる機能は悪用されそう。

◇ JSONデータからTypeScriptのコードを生成するVisual Studio Code拡張機能 JSON to TS。
http://forest.watch.impress.co.jp/docs/review/1068942.html
… 型がない JSON から、型を分析。

◇ 超高速交通システム Hyperloop、真空チューブ内で初の試験走行に成功。
https://japan.cnet.com/article/35104259/
… 空気漏れの検出に IoT の技術を。

◇ UbuntuがMicrosoft公式のWindowsストアからダウンロード可能に。
http://gigazine.net/news/20170711-ubuntu-on-windows-store/
… Windowsストアから提供するのにユニバーサルではない。

◇ 暗号化ツール、アタッシェケース に未修正の脆弱性、暗号化ファイルの実行には注意を。
http://forest.watch.impress.co.jp/docs/news/1070740.html
… 7zipの暗号化に切り替えよう。

sage_p at 22:57|PermalinkComments(0)

2017年07月02日

Keyword Substitution の違いを無視して比較する DiffWithoutKS

vbslib の DiffWithoutKS コマンド(ショートハンドは diffks)は、Keyword Substitution(例:$Date: 〜 $)の違いを無視して比較するために、KS の値をカットしてから比較ツールを起動します。

vbslib は、以下からダウンロードできます。 Windows 用です。
http://vbslib.osdn.jp/
http://www.sage-p.com/vbslib/vbslib/vbslib.htm
https://github.com/TsNeko/vbslib

Keyword Substitution は、ソースファイルの中の $ から $ で囲まれた部分です。 たとえば、下記のようなテキストです。

:
$Author: user1 $
$Revision: 43 $
$Date: 2016-10-26 11:07:39 +0900# $
:


Git や SubVersion といったバージョン管理ツールでは、コミットするタイミングで、Keyword Substitution の値を自動的に編集します。 $Revision: は、バージョン管理ツールが定義するコミットのリビジョン番号です。

Git や SubVersion では、変更があったファイルだけ Keyword Substitution の値を編集するため、vbslib の DiffWithoutKS コマンドを使うメリットはないのですが、たとえば、モジュールを構成するいくつかのソースファイルに共通したバージョン番号を Keyword Substitution 形式で記述するときにメリットがあります。(逆に言えば、そういったバージョン管理は、Git や SubVersion ではできないのです。)

たとえば、Example モジュールを構成する Example.c ファイルと Example.h ファイルの中に、以下の Keyword Substitution とコードがあるとします。

Example.h
/* $Version: 1.01 $ */
/* $Revision: 101 $ */
extern int g_Global;


Example.c
/* $Version: 1.01 $ */
/* $Revision: 101 $ */
int g_Global = 1;


このリビジョンから、g_Global 変数の初期値を変えたら、バージョン番号やリビジョン番号は以下のようになります。 ただし、$Version は、手動で、または Git や SubVersion 以外のツール(たとえば、vbslib の ModuleAssort2 )が編集し、$Revision は、Git や SubVersion が編集するものとします。

Example.h
/* $Version: 1.02 $ */
/* $Revision: 101 $ */
extern int g_Global;


Example.c
/* $Version: 1.02 $ */
/* $Revision: 102 $ */
int g_Global = 2;


$Version は、Example モジュールのバージョン番号を適切に表していますが、その代わり、Example.h ファイルを実質変更していないのに、ファイルの比較ツールでは「$Version: 1.02」の部分に変更があったと表示されてしまいます。 もし、モジュールを構成するファイルが何十もあるときは、実質変更がない多くのファイルに対して変更があると表示されてしまいます。

vbslib の DiffWithoutKS コマンドを実行すると、下記のように Keyword Substitution の値を削除してから、ファイルの比較ツールを起動します。

Example.h
/* $Version: $ */
/* $Revision: $ */
extern int g_Global;


この場合、「$Version: 」の部分に変更はありません。 バージョン番号を適切に表しながら、変更があったファイルを最小限だけ表示するようになります。

sage_p at 23:25|PermalinkComments(0)プログラミング 

注目ニュースリンク 7/ 3

◇ イープラス、SMS認証を導入。チケット不正購入を根絶へ。
https://japan.cnet.com/article/35103587/
… 一人でたくさんのアカウントを持って大量購入することを禁止する。

◇ 強いキャラ持つバンダイナムコ VR施設やライブも展開。
http://trendy.nikkeibp.co.jp/atcl/column/16/021400099/062200014/
… アップルやグーグルと連携することで世界とライトユーザーに配信。

◇ Nintendo Switchを置くだけでスタンドになってバッテリーの充電も可能な外出時必携アイテム。
http://gigazine.net/news/20170701-nintendo-switch-mobile-battery/
… Switch 用スタンド付きモバイル バッテリー。

◇ Amazonが支配しようとしているのはオンライン通販ではなく商取引全体のインフラである。
http://gigazine.net/news/20170627-amazon-control-underlying-infrastructure/
… 独占すると、消費者の選択肢をコントロールしてしまう。

◇ 目指すは機械学習の民主化。Googleが考えるビッグデータ・AI活用の在り方。
https://news.mynavi.jp/itsearch/article/cloud/2825
… ビッグデータ解析プラットフォーム。 インフラ整備はグーグルにおまかせ。

◇ アンプとピアノを共同開発。オンキヨーと河合楽器が業界の枠を超えてコラボ。
https://japan.cnet.com/article/35103600/
… 楽器のデジタル化が進むとアンプも楽器の一部に。

◇ Mozilla Japan、組織名を WebDINO Japan に変更へ。米国から独立。
https://japan.cnet.com/article/35103585/
… Mozilla の活動が一段落したのか。

◇ HDMI出力/有線LANなどを増設できるUSB Type-C外付けドッキングステーション
http://www.itmedia.co.jp/pcuser/articles/1706/30/news086.html
… 実質 Mac 専用かも。

sage_p at 23:24|PermalinkComments(0)注目ニュースリンク 

2017年06月18日

安心して手軽にボランティア活動ができる &HAND

2017年 6月 15日、LINE、大日本印刷、東京メトロは、障がい者(援助や配慮を必要としている人)とボランティア(そういった人を手助けしたい人)とをつなぐ、チャット ボットを使った「&HAND」の事業化を連携して進めると発表した。

似たようなシステムに東京都が作成した「ヘルプマーク」がある。 赤十字とハートを縦に並べて赤白を反転したマークだ。 ヘルプマークを付けている人に対して、席を譲ったり、状況を把握できていないような人がヘルプマークを提示していたら声をかけたりする、といったきっかけになるマークだ。 しかし、常にヘルプマークを提示することに抵抗がある人もいるだろう。

&HAND は、助けを求めている人と助けたい人の心理的なハードル下げることができる、スマホを活用したシステムだ。 具体的には、LINE Beacon(の &HAND 版)のボタンを押すと、近距離無線通信(Bluetooth)で bot が活動を開始し、bot が近くの &HAND を持っている人の LINE に定型文を送るシステムだ。 なお、LINE Beacon は、&HAND 以外でも使われている。

耳が不自由な人なら、すぐ近くに行かなくても、LINE のトーク(チャット機能)で音声で流れている情報を文字で提供するという活動ができる。 たとえば、電車が緊急停止して止まっているとき、耳が聞こえる人なら、なぜ止まっているかの情報が放送されてイライラや不安を解消できるが、耳が不自由な人にもそういった情報が与えられるというわけだ。 匿名でコミュニケーションをとるため、助けを求めることも助けることも心理的なハードルが低い。

目が不自由な人なら、本当に助けが必要なときだけ LINE Beacon のボタンを押せば、駅員や周りの人にスマートに助けを求められる。 声を出せばいいかもしれないが、もし、周りに人がいないかもしれないことを考えると声を出しづらいのかもしれない。

誰かが助けるだろうという心理や、助けるとプライドを傷つけて逆に怒られるかもしれないという心配から、都会の人は冷たいと思われているが、日本人は優しいと報道されているように、自分に助けを求められたらほとんどの人は助けるものだ。 そんなすれ違いを &HAND が解消してくれるだろう。

ソース
https://japan.cnet.com/article/35102842/
https://www.slideshare.net/atiektakizawa/hand-line-bot-awards-botawards
http://blog.feedmatic.net/entry/2017/01/20/184529
http://www.fukushihoken.metro.tokyo.jp/shougai/shougai_shisaku/helpmark.html

sage_p at 22:51|PermalinkComments(0)TrackBack(0)IT ニュース&コラム 

注目ニュースリンク 6/19

◇ スイッチは使わなくなった。 引っ越して半年の住民が話すIoTスマートハウスの住み心地。
https://japan.cnet.com/article/35102280/
http://n-styles.com/main/archives/2015/01/11-064500.php
… 一括コントロールできることが便利さにつながっているとのこと。

◇ Google、継続的デリバリに対応したデプロイ自動化ツール Spinnaker 1.0 正式リリース。
http://www.publickey1.jp/blog/17/googlespinnaker_10gcegkeawsazureopenstack.html
http://www.nttdata.com/jp/ja/insights/trend_keyword/2013061301.html
… 一部の先行ユーザーに対してだけリリースする「カナリア リリース」などが選べる。

◇ Project Scorpio 改め Xbox One X、11月7日に米国発売 PS4 Pro対抗4Kゲーム機。
http://www.itmedia.co.jp/news/articles/1706/12/news050.html
https://www.youtube.com/watch?v=g-gp-Voq6MQ
… 4K/60FPS という綺麗な画面でゲームができるが、シリアスな洋ゲーしかない。

◇ Qualcommが Snapdragon 835 で動くWindows 10をデモ 実際どんな感じ?
http://www.itmedia.co.jp/news/articles/1706/01/news155.html
https://www.youtube.com/watch?v=VeOQp5V7EgM
… x86 バイナリの 7zip が ARM で動いている。

◇ アマゾン、高級スーパーのWhole Foodsを137億ドルで買収へ。
https://japan.cnet.com/article/35102875/
… AmazonFresh と共存していくのか。

◇ アプリケーションを疎結合化するハブモデル。
http://news.mynavi.jp/series/informatica_dataready/004/
… データの依存関係をスパゲティにしない手法。

sage_p at 22:51|PermalinkComments(0)TrackBack(0)注目ニュースリンク