Smile Engineering blog ( スマイルエンジニアリング・ブログ )

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

Ubuntu 16.04 で GCC 7

2018-08-27 10:00:00 | JSP-knowledge

はじめに

Ubuntu 16.04(Xenial) で C++17 を使うために GCC 7 をインストールしました。せっかくなので手順を残しておきます。

PPA 登録~インストール

公式リポジトリでは GCC 5.4 までしかインストールできないので、別途 PPA を登録します。Xenial だと test版 にあるらしい。

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test $ sudo apt update $ sudo apt install g++-7 

add-apt-repository がインストールされていない場合は software-properties-common をインストールします。

$ sudo apt install software-properties-common 

update-alternatives

update-alternatives を使って GCC 5 と共存させる場合はこんな感じで。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10 ¥ --slave /usr/bin/g++ g++ /usr/bin/g++-5 $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20 ¥ --slave /usr/bin/g++ g++ /usr/bin/g++-7 

Dockerfile

Ubuntu:16.04 のベース・イメージから GCC 7 を使えるようにするまでの Dockerfile です。

FROM ubuntu:16.04 USER root RUN : \ && apt-get update \ && apt-getinstall -y --no-install-recommends software-properties-common \ && add-apt-repository -y ppa:ubuntu-toolchain-r/test \ && apt-getupdate \ && apt-getinstall -y --no-install-recommends g++-7 \ && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 10 \ && update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 10 \ && ls -lahFs \ && : 

参考


moniswitch
  今お使いの離床センサーがそのまま使える!
  離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ 

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

コメント

Continuing story of elementary mathematics-3

2018-08-27 10:00:00 | JSP-knowledge

Continuing story of elementary mathematics-3

It's a small world

とあるところに数字が1桁しか使えない国がありました。
負数なんて知りません。
1桁なので0から9までの10とおりしかありません。
一番大きい数は9.一番小さい数は0です。


城内に響き渡る声

お殿様 「じい!!じい!!なにをしておる、すぐ参れ」
じい 「ははぁ、殿、如何なされましたか」
お殿様 「じい、余はシャンシャンのぬいぐるみがほしいぞよ、今なら1両と書いてある、すぐに買ってまいれ」
じい 「殿、お言葉を返すようではありますが我が国は財政難、蔵には1両もございません」
お殿様 「嫌じゃ、余はシャンシャンが欲しいのじゃ、今日はシャンシャンと一緒に寝るのじゃ、今すぐ買ってまいれ!!」
じい 「殿、蔵には1両もございませぬ、ここはひとつ・・・」
お殿様 「嫌じゃ嫌じゃ、今すぐ買ってまいれ!!シャンシャンじゃ、シャンシャンが欲しいのじゃ!!」


控えの間。
じい 「お殿様のワガママには困ったものじゃ」
家臣 「しかしシャンシャンを買わなければ殿が・・・」
じい 「うむ、わかっておる。このうえは越後屋から1両借りるしかあるまい」
家臣 「なんと、そのようなことをすれば借金ということで帳簿は0よりも小さい金額を記さなけらばなりませぬぞ」
じい 「確かに、しかし我が国には0より小さい数などない。これでは越後屋から1両借りる訳にもいかぬ」
家臣 「困りました・・・」


突然、小学生が乱入。
じい、家臣 「なにものじゃ!!」
コナソ 「たったひとつの真実見抜く、見た目は子供、頭脳は大人、その名は名探偵コナソ!」
じい 「曲者じゃ、であえであえ!!」
コナソ 「ちょっとまって、お金がないから借金したいんだよね。なら簡単だよ。マイナスってつければいいなだよ」
家臣 「なんと、マイナスじゃと。我が藩に新しい記号を増やすような資金はない!!」
コナソ 「そんなことないよ。+と-、それを今の桁の上に付けるだけだよ」
じい 「ならん!!そんなことをすれば大お殿様が作られた1桁の世を壊すことになる、断じてならん」
コナソ 「いまどき小学生でもマイナスぐらい知ってるよ、ひとつ上の桁に・・・」
じい 「切れ!!切り捨てぃ!!!」

ずばぁ、だぁぁ、ぐわぁぁ。
コナソ切られる。

じい 「ならん、桁を増やすなど断じてならん」
家臣 「御意」

じい 「お殿様のワガママには困ったものじゃ」
家臣 「しかしシャンシャンを買わなければ殿が・・・」
(以下、略)


突然音楽が流れる。
「タタタ、タン、タ、ターーン」
じい、家臣 「なにものじゃ!!」
ドラエモソ 「ぼく、ドラエモソ」
じい 「曲者じゃ、であえっ、であえっ~~!!」
ドラエモソ 「ほすう~~~」
じい 「なんじゃ」
ドラエモソ 「補数、これを使えば1桁しか無くても借金をできるんだ」
じい、家臣 「なんと!!」
ドラエモソ 「でも、条件があるよ」
じい、家臣 「なに!!」
ドラエモソ 「一番大きい数は5」
家臣 「何故!!」
ドラエモソ 「その代わり、借金も4までできるんだ」
じい 「少し待たれい」


じいと家臣が相談。
じい 「最大5とな」
家臣 「5ですな」
じい 「わしは6両などという金を見たことがない」
家臣 「6両と言えば田園調布に家が建ちまする、そのような大金は我が藩では夢のまた夢」
じい 「我が藩の財政として最大5両、借金が4両までできるというのは・・・」
家臣 「これなら殿にシャンシャンを献上することも夢ではございませぬ」
じい 「そうじゃな、これもお家のため・・・」


じいと家臣、ドラエモソと向き合う。
じい 「これ、ドラエモソとな、そちの補数とやらを使うぞよ」

その夜
お殿様 「シャンシャンじゃ、じい、シャンシャンぞよ」
じい 「は!!殿、シャンシャンにございまする」
お殿様 「今宵はシャンシャンと一緒じゃ、可愛いのう、おぉ、そうかそうか、もう眠いのか、じい、布団を敷けもう寝るぞよ、シャンシャン~~、くぁwせdrftgyふじこwwwww」


お殿様はシャンシャンと一緒に寝て素敵な夢を見ましたとさ。
めでたし、めでたし。
これで当分は1桁だけで大丈夫wwww

下らん寸劇はいいからちゃんと説明しろよ

はい、すみません・・・。
では当藩での計算方法をまとめておこう。

  • 桁数は10進数1桁。
  • 1から5まではプラスの数を表す。
  • 6から9まではマイナスの数を表しマイナス符号が付いた数に戻す場合は10を引く。
  • 足し算はそのまま行う。
  • 引き算は10進数における10の補数を足す。

10の補数の計算

当藩の決まりの最後にある、10進数における10の補数。計算方法は以下。

b 進法において、自然数 a を表現するのに必要な最小の桁数を n としたとき、

b n − a を 「b 進法における a に対する基数の補数(b の補数)」

当藩では10進数で桁数は1だから
10  − a
= 10 − a
で計算できる。桁数が4桁だったら
10  − a
= 10000 − a
ということ。この計算、必ず桁借りが発生する。あぁ、面倒くさい。こんな時、桁借りが発生しない簡単な計算方法がる。暗算する時に使うあれ。
買い物をして1万円出した時おつりはいくら?
こういう時は1万円-1円の9999円から引いて最後に1円を足す。各桁がすべて9だから絶対に桁借りは発生しない。最後に1を足すときに繰り上がりが起きるけど桁借りするよりは計算しやすい。
で、この9999円から引くって

b n − a − 1 を「b 進法における a に対する減基数の補数(b - 1 の補数)

これ。

10  − a − 1
= 10000 − a − 1
= 9999 − a

基数の補数の計算は必ず桁借りが発生するが、減基数の補数の計算では絶対に桁借りが発生しない。
減基数の補数を基数の補数にするには1を足せばよい。

減基数の補数の使い道はこれだけ。他になし。(たぶん・・・)
減基数の補数が出てきたら「あぁ、引き算面倒くさいから減基数で計算してるのね。最後に1足すの忘れないでね」ぐらいにおもっていればよい。

次回予告

補数ごときで延々と書き散らしてきましたが次回は怒涛の最終回。「ここまで10進数で考えてきたけど10進数には致命的な欠点が!!我が藩の財政の行方は如何に!!」です。


moniswitch
  今お使いの離床センサーがそのまま使える!
  離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ 

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

コメント

データ分析手法(クラスター分析)

2018-08-10 18:00:00 | JSP-knowledge

クラスター分析

クラスター(cluster)とは、群れ、集団という意味で、データ全体をお互いに似通ったものをあつめて何個かの群(グループ、集合)に分類する分析手法です。

データを「階層化して集団化する」か「階層化せずに集団化する」かの差異で、以下の2種類の方法に分類られます。
・階層クラスター分析
・非階層クラスター分析

階層クラスター分析

階層クラスター分析は、対象データを最も似ているものから順に並べて整理していき、その途中過程を階層のように表して(樹形図)いき、最終的に一つの集団まとめる手法です。

「階層クラスター分析のイメージ」
image-20180805135233829.png

似ているかをどう定義するのか。
クラスター分析では、データの個体間の距離を用います。つまり「似たもの」というのは「距離が近いもの」と考えます。

クラスター間の距離を定義する手法もいろいろあり、代表的なものは以下があります。

⓵最短距離法(最近隣法)
2つのクラスターの各々の中から一つづつ点を選択し距離を求め、その内で最も近い個体間の距離をクラスタ間の距離として用いる方法。

②最長距離法(最遠隣法)
最短距離法とは逆に、2つのクラスターの各々の中から一つづつ点を選び距離を求め、その内で最も遠い個体間の距離をクラスタ間の距離として用いる方法。

③群平均法
2つのクラスターの各々の中から一つづつ点を選び距離を求め、その個体間の距離の平均をクラスター間の距離として用いる方法。

④ウォード法(最小分散法)
2つのクラスターをまとめたときに、データのバラツキが最小になるクラスターになるようにまとめる方法。

⑤セントロイド法 (重心法)
クラスター内のデータの重心を求めて、重心間の距離をクラスター間の距離として用いる方法。

⑥メジアン法
重心法で距離を計算する際の重みをクラスター間で等しくした場合の方法。

階層クラスターのメリット

近いものから順番にクラスターを作っていく方法なので、あらかじめクラスターの数を決めておく必要がないことや出来上がった樹形図を使用しながら後からクラスター数を決めて分類していくことも可能たことです。
また、樹形図からどのクラスター同士がどんな感じで繋ぎ合わせされるかいう階層結びつきを一目で理解する事ができます。

階層クラスターのデメリット

クラスター数を決める必要がないことで、分類の対象の数が多いケースは計算量が膨大になったり、結果から出来上がる樹形図が巨大になり結果が不明瞭になってしまう事があげられます。

非階層クラスター分析

非階層クラスター分析は、階層クラスター分析と異なり予め最初にいくつのクラスターに分類するのか、クラスター数を決めた上で分類の対象をクラスターに分類していく手法です。
代表的な手法は、「k-means法」というものがあります。

非階層クラスターのメリット

あらかじめクラスター数を決めることになるため、分類の対象となるサンプル数が多くても計算量が膨大になることがありません。
また、分析の結果が階層を表す樹形図になることもないので、膨大なサンプル数を分析しても計算量が多くなりすぎたり、分析結果が不明瞭で分かりづらくなることもありません。

非階層クラスターのデメリット

あらかじめいくつのクラスターに分けるか決定しておかなければならない点です。
具体的な仮説がないと分類しづらいため、どのような目的でどういった分析を行うのかあらかじめ充分に決めておく必要があります。

 

moniswitch
  今お使いの離床センサーがそのまま使える!
  離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ 

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

コメント

サンプリング周波数とビットレート・後編(オーディオ符号化の圧縮率)

2018-08-10 18:00:00 | JSP-knowledge

オーディオ符号化の圧縮率は、エンコード時のビットレートで決まります。前回は原音(PCM)のビットレートを中心に書きましたが、今回はエンコード(符号化)のビットレートと圧縮率について書きたいと思います。

具体的には、低いビットレートを設定すれば圧縮率は高くなり、保存した時のファイルサイズが小さくなります。前回も書きましたが、圧縮前の音源(PCM)のビットレートは次になります。

  • PCMのビットレート = サンプリング周波数(Hz) × 量子化ビット数 × チャネル数

例えば、音楽CDは44.1kHzのステレオで次のビットレートになります。

  • 音楽CDのビットレート:44100Hz × 16bit × 2ch(ステレオ) = 1,411.2kbps

これをMP3やAAC等、例えば256kbpsでエンコードすると、圧縮率(原音を100%とした場合)は約18%で、ファイルサイズは1/5以下になります。

  • 音楽CDを256kbpsでエンコード:256kbps / 1,411.2kbps = 約18%

仮に4分の音楽の場合、ファイルサイスは次になります。

  • 原音:1,411.2kbps × 240秒 = 約40.4MB
  • 256kbpsでエンコード : 256kbps × 240秒 = 約7.3MB(+ヘッダ)

1曲が4分程度の場合、CD650MBに原音では16曲保存できますが、MP3やAACなど256kbpsでエンコードした場合、89曲収録できることになります。

  • 原音:CD650MB / 40.4MB = 約16曲
  • 256kbpsでエンコード :CD650MB / 7.3MB = 約89曲

webを参照するとビットレートの違いによる音質の聞き比べなどが出てきます。多分ビットレート以外は全て同じという条件とは思いますが、そもそも元の音源(PCM)のサンプリング周波数と、量子化ビット数によって音質に違いがあります(原音のビットレートが変わります)。アナログからデジタル変換(ADC)した時点でその条件により音質が決まります。条件の悪い音源をいくら高いビットレートでエンコードしても音質は悪いままです。また、同じビットレートでも、チャネル数(ステレオ or モノラル)によって、圧縮率は変わります。従って音質に対する評価も厳密に言うとビットレートの違いだけでは判断できません。
例えば48kHzと44.1kHzの16bitPCMを, 32kbps ~ 320kbpsでエンコードした場合の圧縮率は次になります。

PCM16bitの圧縮比(原音を100%とした時)

符号化 ビットレート48kHzステレオ(1,536kbps)48kHzモノラル(768kbps)44.1kHzステレオ(1,411.2kbps)44.1kHzモノラル(705.6kbps)
320kbps 320/1,536 = 約 21% 約42% 320/1,411.2 = 約 23% 約45%
256kbps 256/1,536 = 約 17% 約33% 256/1,411.2 = 約 18% 約36%
192kbps 192/1,536 = 約 13% 約25% 192/1,411.2 = 約 14% 約27%
160kbps 160/1,536 = 約10% 約21% 160/1,411.2 = 約 11% 約23%
128kbps 128/1,536 = 約 8% 約17% 128/1,411.2 = 約 9% 約18%
64kbps 64/1,536 = 約 4% 約 8% 64/1,411.2 = 約 5% 約 9%
32kbps 32/1,536 = 約 2% 約 4% 32/1,411.2 = 約 2% 約 5%

原音との比較

ちょっとひねくれた考え方ですが、例えば、上記の条件のステレオとモノラルでどちらが原音に近いのでしょうか?
圧縮率だげで考えると後者になります。もちろん、ステレオは音の奥行が表現されるなどモノラルより表現方法で優っているのでこれを比較して音質を評価するのは意味がなですが、エンコードではステレオを利用して圧縮を効率良く行うアルゴリズム(M/Sステレオインテンシティステレオ)がありますので、モノラルの半分の品質にはならず、ステレオの分効率よく圧縮がされています。

聞き比べ

実際に聞いてみてはどうでしょう。過去に検証した時の記憶では、上記表の条件でAACの128kbpsでは原音(PCM)と聞き分けが難しかったと記憶しています。これは個人差があると思いますし、私自身オーディオ、音響に携わっているにも関わらず、自分の耳が大したことがないと自覚をしていますので、もう少し上のレートでも原音との差が分かる人はいらっしゃると思います。低いところの32kbpsになると、さすがに音質の違いがはっきり分かります。音楽でいうとドラムのハイハットの金属音が良く分かると思います。
個人的には、音楽CDの44.1Hz, 16bit(ステレオ)ならば128kbps(1/10以下の圧縮)でも、十分に音質も失われず保存できると思っています。MP3でもAACでも128kbpsくらいあれば私の耳には十分です。

ビットレートは圧縮率で

仮に音声16kHz(量子化ビット数16ビットのモノラル)に、符号化ビットレート256kbpsを設定するとどうでしょう。。。圧縮率は100%なので原音と同じになります。原音と変わらない音質になるはずですが、フリーで出回っているエンコーダによっては変な挙動を招きかねません(設定エラーになるかも知れません)。

サンプリング周波数量子化ビット数チャネル数原音(PCM)のビットレート備考
32kHz 16 1 512 kbps Super wide band
24kHz 16 1 384 kbps  
16kHz 16 1 256 kbps Wide band
8kHz 16 1 128 kbps Narrow band

非可逆圧縮のAAC, MP3に関しては、いかに低レートでエンコードするかという研究の成果と思っていますので、圧縮率50%以上のビットレートを設定すると逆に良いことがないと個人的には思っています。50%くらいの圧縮率ならば、ロスレスがお勧めです(可逆圧縮、MPEG-4 ALSなど)。保存を考えるだけならPCMのままzipで圧縮しても、無音区間がある音声では半分くらいになった様な気がします。非可逆圧縮のAAC, MP3などでは、音質を重視するなら15~20%前後高圧縮を重視して10%程度でも十分な音質と思います。
さらに、音声目的では10%未満で5%くらいでも大丈夫と思いますが、音声の場合は、48kHzや44.1kHzでビットレートを抑えるよりも、サンプリング周波数を落とすことを勧めます(8kHzや16kHz)。

M/Sステレオ(Middle-Side)

左右の信号を和/差信号とするもので、両チャネルの和信号(L+R)と差信号(L-R)をそれぞれ符号化することで、ステレオのようにチャネル間の相関が高い場合、符号化効率が向上します。例えば音楽のボーカル(L/R同位相、同振幅)などで符号化効率を高めることができます。

インテンシティステレオ

高い周波数を聴く時に、L/Rの時間差よりも音の大きさに影響を受けやすい性質を利用して、高い周波数の情報(量子化係数)をひとつにまとめてビットレートを削減します。

最後に

ビットレートが音質を示す指標と思われるかも知れませんが、デジタルオーディオの分野で原音のビットレートを超えた符号化ビットレートを指定することはありません。要はそれぞれの符号化(エンコーダ)に適したビットレートを使用することが大切だと思います。

 

moniswitch
  今お使いの離床センサーがそのまま使える!
  離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ 

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

コメント

練習 Continuing story of elementary mathematics-2

2018-08-01 10:00:00 | JSP-knowledge

Continuing story of elementary mathematics

ん・・・、これって補数じゃなくてもいいんじゃね?

引き算を足し算にする方法は
  s2= x + ( 10 − y) ー 10

だった。この式を見ていて思ったのだが、10を足して、また10を引いているだけなのだから実は補数なんて使わなくてもいいんじゃない、と。10じゃなくて、いやおれは7が好きなんだよ、7にしちまえ、ということで10を7にしてみる。
  s1 = x + ( 7 − y)
  s2 = x + ( 7 − y) ー 7

xの値はn桁(ここでは1桁ね)の最大数の9とすると、こんな感じ。

7 − ys1s2
-2
-1
...        
14
15
16

おぉ、s2は確かにx ーyになってるぞ。しめしめ。
では補数を使った場合は?
  s1 = x + ( 10 − y)
  s2 = x + ( 10 − y) ー 10
とすると

yの10の補数s1s2
10
11
...        
17
18
10 19

補数を使った場合も、俺流の場合でもs2の値は同じだけどもs1は異なる。
補数を使った場合、s1の結果は当然、s2の結果よりも10だけ大きい。でもnの桁(ここでは1の位)だけ見ればs1もs2も同じ。10を法とした演算と考えればs2で行っているような10を引く、ということもする必要がない。
一方、俺流で7を使った場合、s1の値を見てもあまり得られるものは無さそう。

なるほど。わざわざ桁数を気にして補数を使ってるのはこのためなのね。

負数の世界へ

ここまではxの値を9(n桁の最大数の9)として考えていた。なんでかっていうとxを9未満にすると答えがマイナスになってしまう場合があるから。
ということでxを9未満、2とかにしてみよう。
xを2として前回と同じことをしてみる。
  s1 = x + ( 10 − y)
  s2 = x + ( 10 − y) ー 10

yの10の補数s1s2
-7
-6
...        
-2
-1
10
11
10 12

yが3以上の場合は答え(s2)は負数になる。で、s2が負数だとs1は10よりも小さくなる。
s2が0以上であればs1を10を法とした演算とすればよさそうだが、s2が-1ならs1は9。
-1が9で、-2が8ってどう解釈すれば良いのよ。

そもそも誰が負数は”ー”ってつけなきゃいけないって決めたの?

昔、「グラスの底に顔があってもいいじゃないか」って言ったげーじゅつ家がいたけど9はマイナスなんだってことにしてもいいじゃないか。
-1はー1でないといけないという法律は(多分)ないことだし、ここは耐えがたきを耐え忍び難きを忍び9はー1なんだ、ってことにしてしまおう。
s1が10 より小さいならそれは負数だ、と。
9がー1で、8がー2で、7が・・・2がー8で、1がー1。

いや、まて。s1を10を法とした演算として答えが5だったとしたらこれはプラスなのか、マイナスなのか区別つかんじゃないか。
そもそも、桁数nを1として考えている訳で「9がー1で、8がー2で、7が・・・2がー8で、1がー1」とか言っていたら1から9まで全部マイナスの値になってまうよ。

という訳で次回はマイナスの値にけりをつけて減基数まで考えるぞ!!

moniswitch
  今お使いの離床センサーがそのまま使える!
  離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ 

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

コメント