CEATEC 2016いってきた

日本なんでもIT展覧会 CEATEC 2016、いってきました。

f:id:packpak:20161008183355j:plain

今年のキーワードはズバリ「IoT」。 去年もIoTの前哨戦があり、各企業ができる限りの方向性を展示したのち1年あけての成果報告会といったところ。

エリアが2つに分かれていて、自分は技術出展のほうをメインで回っていた。 一般客というよりかは、ほんとうに企業人や学生、研修、研究者が主。 手を取りあうチャンスでもあってマニアックなブースが多く、非常に見ごたえのある展覧会だった。

IoT製品小型化は十分?

今回のテーマ「IoT」を飾るごとく、IoT関連の出展がいっぱいいっぱい。

まず大きく一角を占めていたのが、部品や端子といったハードウェア組み込みモジュールの展示エリア。

f:id:packpak:20161008184235j:plain 製品のバリエーションの広さがIoTを用いたソリューションの新規性や安定した事業の難しさを表してた一方、 何より興味深かったのが製品のパターンが明らかに見て取れたことだ。

  • 既存の部品を小型化(アクチュエータ、センサー、コンデンサレベルのものも)
  • ワイヤレスモジュールのIoT向け適応(小型化、省電力化、低電力規格の適応)
  • 電源、電池の課題(特に小型化と容量の確保。ワイヤレス給電もみたかな)

どこにでも適応できるようにするにはもちろん、どうやって、自立稼働できるようになるか、メンテのコストが下げれるようになるか、の創意工夫がいくつも見られた。

製品を見る限り、小型は十分なんだろうか?例えば倉庫で稼働する製品なんてオーバーキル相当だし(単価はどうかしらんけど)、一体型で製造したらもうなんでもはっつけれるサイズになりそう。

残る課題は電力と電源、あとは長期間の使用と稼働維持がどうなんだろう。例えば農業で使う場合、それなりの耐性が必要なはずだ。 (話を聞いたらちょっとはわかったんだけど、時間がなくても見るだけでスルーしていた。。)

IoT自体はサービス貧乏

IoT関連のソリューションをいくつか見た。

f:id:packpak:20161008194755j:plain

・・・が、この辺りはあまり見ごたえがなかった。 どれもこれも要約すると「IoTで無人で監視して、画面から管理者が一覧を見る」または「開発を支援するためのソリューション」にことにつきる。

考えてみればそうだ。

機械を小型化して色んなところに適応するっていうのは、つまり自動で何かやってくれることを期待するわけで、IoTはついでにネット繋げて遠距離間で連携しあうとこがミソだけど、ネットワーク形態ってクライアントサーバ(Master-Slave)とP2Pぐらいしかない。 で、今のIoTでサーバーとか自律した機能を持たせると電力がもたず、必然的にクライアントになってしまう。

IoT製品自体が(または単独で)ユーザーにメリットを与えるのは非常に難しく、バックにソフトウェアサービスがあってこそ初めて現実的な事業になる。

ということは、2つに1つだ

  • スマホを司令塔(または電波拠点)にしたユーザーに近いところで稼働する製品
  • いわゆる工業的な製品。自身に遠距離の通信モジュールを組み込んで、特定の拠点とやり取りする。

で、それぞれのモジュールがやることは

  • わざわざ人が出向くor機材を使って測定することを自動測定する。
  • 簡易なインタフェースでユーザーに断片的な情報を通知する。

ぐらいだ。それは、要するに人が出向くことがコストに合わないような用途に適応することに等しい。(コスト的不可の解決)

「IoTができる製品を作る」だけでは儲からないのだ。 今回の展示があるように、情報量を集めて規模を食えるサービスを別途開発して売ること、はたまたIoTに必要な商材を買う一次生産者的なビジネスが最もパイが大きい。 一次生産者は無理なので、「IoTを作る」「バックエンドのサービスも作る」両者を満たす業態が今後増えていくはずだ。

AIとデータサイエンティストの昨今

技術ブースであまり数はなかったんだけど、 IoTで集めた情報をまとめる位置づけとしてAI関連の出展がちらほら見られた。

AIといっても、「ニューラルネットワークによる学習」「アルゴリズム実装による模擬的な人工知能」「データサイエンス」がごっちゃになっている感じだけど。。(小うるさいって?)

さすがにこちらはまだまだ研究しか出ていなく、大学などが未来を感じる研究成果を発表する程度だった。

データをまとめて価値を出す、という位置づけてデータサイエンスの事例がいくつか見られた。(名前わからないけど、リクルートの方の講演もちょっぴり見た。) 人材が足りていないと噂の通り、競争の産物というよりは今の事業や作業をいかに正規化・標準化するかに絞った成果が要だったが、じゃあ人が増えて、シビアな事業になって、っていう環境はまだ遠く予測できない印象だった。弁護士みたいにならなければいいけれど・・・。

AIやデータサイエンス分野とIoTは、端っこからのデータ生産者・データ統計からのサービス生産者で一見組み合わせられるように見えるが、 IoTで生産したデータを直接突っ込んだところで、役に立つのは、気象温度といった定期的に測定するものや一部の研究分野に限られるんだろう。 公共分野で近い開発をする場合、ちょっと知識あったほうがいいのかな。

海外勢の存在感

成約ありきのブースを展開していた日本人の傍ら、海外からの出展社も多くみられた。

中国や台湾は10年前や昭和を思わせる製品をひっさげてきたが、その価格が衝撃的だった。3Dプリンタ、1台20,000円。 まさにここの勝負だ、ということが見て取れる。

ほかにも海外の研究や事業のブースが、ぞんざいな扱いだが一角にあったが、 内容が非常に面白い。

3DSignalsという企業のプロジェクト概要から抜粋すると 「超音波データを収集するIoTセンサーと産業機械のアコースティックエミッションをビッグデータ解析するプラットフォームを開発している。」 とのことだ。

つまり、超音波から産業機械の状態を取得して、異常パターンの検出をアラートであげるプロジェクト。 非常に先進的で唸った。モジュールありき、他社連携ありき、既存路線の拡張が張り出される日本語の中、本当に挑戦的な内容が書きだされてあった。

ブースに存在感はなかったが、アイディアは本物だ。後ろにいるのはもっとでかいんだろう。

今年はサプライズなし

各企業や事業の足並みがそろいつつ、着実に次世代まで進んでいることが目に見えてわかったが、サプライズがあるような出展がなかった。今年は平日のみの開催となった意図なのだろうか。

もし、来年も名刺交換会になるようであれば、 行くのはちょっとためらう。

実行ファイルがパスのどこにあるか探す

TypeScript 2.0.3をインストールしたのに新構文が有効にならない。

tsc -version

Version 1.7.2

あれっ?

whereコマンド

Windowsならwhereコマンド、Linuxならwhereisコマンドを叩く。

where tsc

e:\Users\yu\AppData\Roaming\npm\tsc
e:\Users\yu\AppData\Roaming\npm\tsc.cmd
C:\Users\yu\AppData\Roaming\npm\tsc
C:\Users\yu\AppData\Roaming\npm\tsc.cmd

ぐぬぬ

【ExcelVBA】Application.Workbooks:Excelのインスタンスの参照

書くネタがないのでとりあえず割割り増しましで。

Application.Workbooks

Workbook = 今開いてるExcelファイル1個。

全体を保持するコレクションがApplication.Workbooks。Applicationは省略できるので、単にWorkbooksとも書ける。

Function FindBook(ByRef bookname As String) As Workbook
    For Each book In Workbooks
        If book.Name = bookname Then
            set FindBook = book
            Exit Function
        End If
    Next book
    set FindBook = Nothing
End Function

注意点

  • Office2010以前だと、1つのウィンドウがあってその中にBookの子ウィンドウがたくさんある実装だが、 Wookbooksは、その1つのウィンドウ内のものだけを保持している。(らしい) 例えばxlsmとxlsを同時開きしても、互いに別のアプリのウィンドウでVBAから見えないため悲しみが生まれる。 これなんか解決策あるんかな。。

  • Workbook.Nameは、拡張子も含む。(タイトル部分ママ)ただし、未保存のものは拡張子のない「Book1」みたいな感じになる。

【Ubuntu】サービス立ち上げ

Ubuntu、サービス上げ下げsystemdやんか。 servicedに慣れたおっさんに辛い。(なんかビミョーにタイプしにくいんだ。。)

メモ

サービスあげる

systemctl start <サービス名>

サービスを止める

systemctl stop <サービス名>

サービス再起動

systemctl restart <サービス名>

サービスの状態

systemctl status <サービス名>

ログ(エラー詳細など) 下記「」には、systemctl statusで出てる実行ファイルを直接ぶっこむ。

journalctl <Matches>

ほかにも

詳しくは知らないけど、旧来のエコシステムが軒並みFuckだから、その一環できれいなsystemd作った経緯があるみたい。 類似の機能、あといい感じの機能があるんじゃないかな。

【Linux】UbuntuでCUIオンリーに切り替える

Ubuntu 16.04 LTS入れてCUI環境作ろうとしたら、何か妙に引っかかったので検索結果めも。

起動時にCUIにする

Linuxは起動時に読み込むrunlebelという設定値があって、 1~6の中のどれかを指定することでGUIとかCUIとかを切り替えたりする慣習あるんだけど、 今の?Ubuntuとかdebianは事情が異なって、「~.target」ファイルの指定を変えるらしい。

デスクトップ右クリック → 端末

sudo systemctl set-default multi-user.target

参考

キーボードレイアウトを変える

CUI環境、デフォだとなんか英語キーボードだった。 (デスクトップ環境は自動で設定されるみたい)

以下参照。

Ctrl + Alt + F1 とかで入れるまっくろ画面だと日本語が文字化けて読めないため、 以下実行してロケールを一時的に英語化。

sudo update-locale LANG=en_US.UTF-8 LANGUAGE="en_US.UTF-8" 
sudo source /etc/default/locale

(他のディストリビューションでも同じだけど、Ubuntuが直接乗っけてる直コンソールが  日本語対応してないから文字化ける。TeraTermなどで接続して同じバイトセット読み込むと  化けずに表示する。)

【Linux】cpとmvのファイル存在時の挙動。

cp

ファイル

宛先に同名のファイルが存在したとき

  • 上書きされる。環境によっては無言。
    • せめてもの回避法として、コピー時には以下のようにする流派がいるらしい。
# cp srcfile destfileに相当。間違って上書きしても、destfileに追記した部分を消せば復元できる。
cat srcfile >> destfile

宛先に同名のディレクトリが存在したとき

  • コピーしない。環境によっては無言

ディレクト

中に何かあるときは-rコマンドが必要。

cp -r srcdir destdir

いくつかのケースで分岐。

宛先に同名の「ファイル」が存在したとき

  • コピーしない

宛先が既に存在するディレクトリだった場合

# tree
.
|-- 1
|   `-- 1
`-- 2

3 directories, 0 files
# cp -r 1 2
# tree
.
|-- 1
|   `-- 1
`-- 2
    `-- 1
        `-- 1

5 directories, 0 files
#
  • 再帰コピーでコピー先とパスがかぶった場合、ファイルなら上書きする。
  • 再帰コピーでコピー先とパスがかぶった場合、ディレクトリならマージする。 ← !
  • ディレクトリがネストしていても対応。

mv

ファイル

宛先に同名のファイルが存在したとき

  • 上書きされる。環境によっては無言。
  • 超危険なため、設定ファイルの移動だけならば日常的にはcat srcfile >> destfileを推奨。

ディレクト

移動先のディレクト

宛先に同名の「ファイル」が存在したとき

  • 移動しない

宛先がまだ何も作られていないパスだった場合

  • 移動する

宛先が既に存在するディレクトリだった場合

  • 宛先のディレクトリ直下に名前そのままで移動する ← !?
# tree
.
|-- 1
|   `-- a
|       `-- b
|           `-- c
|               |-- d
|               `-- e
`-- 2

7 directories, 0 files
# mv 1 2
# tree
.
`-- 2
    `-- 1
        `-- a
            `-- b
                `-- c
                    |-- d
                    `-- e

7 directories, 0 files
#
  • 再帰コピーでコピー先とパスがかぶった場合、ファイルでもディレクトリでもエラーとなる。 ← !

ディレクトリの挙動、いまさらだけどこマ?ってなってる。 何か設定で依存するのかな。

【AngluarJS1】$httpリクエスト先が返してきたステータスコードによるIHttpProcessのsuccess、error

angularjsで$httpサービスでリクエストを問い合わせた際、HTTPステータスコードが200系以外だと 返却されるPromiseにてsuccessではなくerrorが呼び出される。

検証コード

status.php

<?php
http_response_code((int)$_GET['code']);

index.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta charset="utf-8">
<meta name="description" content="sample html">
<meta name="author" content="packpak">
<meta name="viewport" content="width=device-width, intial-scale=1">

<link rel="shortcut icon" href="">

<script src="angular.min.js"></script>
<script src="index.js"></script>
</head>
<body>
<div ng-app="app">
  <div ng-controller="mainCtrl as main">
    <button ng-click="main.send()">get</button>
  </div>
</div>
</body>
</html>

index.js

"use strict";

let app = angular.module('app', []);

class MainController {
  constructor($scope, $http) {
    this.host = '';
    this.$scope = $scope;
    this.$http = $http;
  }
  
  send() {
    for (let code of [200, 201, 204, 400, 401, 403, 404, 409, 500, 501]) {
      const url = "http://localhost/status.php?code=" + code;
      this.$http.get(url)
        .then(
          function(response) { console.log('status code:' + response.status) },
          function(response) { console.error('status code:' + response.status) }
      );
    }
  }
};

app.controller('mainCtrl', ['$scope', '$http', MainController]);