Musashitokiwa.LLC Blog

武蔵常盤株式会社のブログです。

「てんびんの詩」という近江商人の哲学を映像化した作品を見た

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

 f:id:a-j1b1k1:20180805211928p:plain

私は、自分のルーツが自分に影響を与えるような家に生まれているわけではない。

しがないサラリーマン家庭に生まれ育ち、物覚えがあまり良くない「あかんたれ」だったので、ようけいらん事をして失敗から学んで生きてきた。

 

その中で、自分で会社を作り、上司という余計な壁を取っ払って、夜眠れなくなるようなリスクを一身に受けて仕事に向かうほうが面白いということに気がつきました。

 

システムエンジニアを本業としながら、経営学も学び、実際に自分でも運用可能な「リーン・スタートアップ」を実施し、製品開発し商売の真似事を実施してきました。

 

しかし、「商売とはなんぞ?」という、根本的な疑問は、いつまでもわかっていませんでした。

 

 商売については、誰からも教わったわけでもなく、ただ、「仕事をとる、する、継続する」という所に集中し、勉強し、投資し、わざわざ社会人入学をして学士になりました。

だからこそ、私の仕事が、多くの会社の開発業務で役に立ち、困難を困難とも思わない働きぶりを評価していただきました。

 

会社を作り3年目、「地域の発展に寄与する」というテーマで、新規事業を考えたのですが、私の個人のシステムエンジニアの技術、人脈のなさ、資本の少なさから、考えは袋小路に陥ってしまいました。

 

そんな時に、「てんびんの詩」という近江商人の哲学を映像化した作品を視聴する機会を得ました。

tenbinnouta.ciao.jp

  • 大作少年がてんびんを背負い、鍋蓋行商、初めての販売を通して商売の心を学ぶ第一部。
  • 商業学校時代にで他の国籍の人との交際により学んだお客さんに国籍は関係無いという、相手の立場になって学んだ人間性の成長の第二部。
  • 戦争中の捕虜を大切に扱ったことで罰を受けるも、敗戦後、廃業寸前まで追い込まれた商店を支える、奥さん、従業員、そして、戦争中に助けた捕虜が助けの手を差し伸べてくれる一時期儲けて終わりでは無い、人の関係こそ資産であると言う第三部。

この作品には、私が今為すべきことは、ただの「御用聞き」では無いということを教えていただきました。

 

地域の人たちとの関わりが少ない今の状態を少しづつ改善し、私がすべき事を見つけて行くことこそ、「地域の発展に寄与する」という新規事業につながっていくのだということに気がつきました。

 

とはいえ、今まで、おつきあいをしてくださっているお客様やパートナー様に対して不義理を行う事なく、ことを行わなければいけないですね。

 

 

RestApiの次が、すでに出ていた!2

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

このブログは技術的な事を題材にしていますが、プログラミングなどは載っていません。

ただ、「スゲー」と思った事だけを記しています。

あまり期待しないでみてくださいね。

 

 f:id:a-j1b1k1:20180805211928p:plain

 

 ずいぶん前になってしまいますが、この記事を書いて、

仕事で実際に簡単なRestとGRPCのベンチアプリを作った。

 

Angular - rest - nodejs - grpc - Java - cassandra

Angular - rest - nodejs - rest - Java - cassandra

 

この様な構成でベンチアプリを作成した。

 

よくあるGRPC優位記事を信じて、これでGRPCが優勢なら、よかったけど、

結果はトントン。

 

数ミリ秒の誤差の範囲内でしかない差。

 

Angular - rest - Java - cassandra

この構成に勝てる速度は出ないな〜。

と思う様な結果に。

 

ちょっと残念に思ったが、それでも、Restと同程度のパフォーマンスを発揮するGRPCには、かなりの将来性を感じた。

それと同時に、Javaサーバーと、NodeJsのパフォーマンスの差にも驚いた。

「NodeJsって、やばくね」と「Javaってやばくね」という、同じ表現で、意味が全く異なる感想。

 

面白い経験をした。

 

僕は、画面側はそれほど得意では無いので、バックエンド側の特に連係部分のアーキテクチャに面白みを感じます。

 

自分で作る時は、Restではなくて、Grpcを使って、連係をとる様にしたいね。

GRPCは自分でも、もうちょっと調査して行こうとおもいます。

 

 

 

RestApiの次が、すでに出ていた!

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

 

 f:id:a-j1b1k1:20180805211928p:plain

 

 

今回は、AIの話ではなく、題名の通り、RestApiの次といっても過言ではない通信方法が2015年にすでに出ていたということに驚いた!というお話。

 

字引は、30歳の時点でエンジニアデビューをした。

最初の現場で初めてSoap Web Serviceを経験し、通常の画面のあるWebが最初ではありませんでした。

 

そのために、Web Serviceがコンピュータがコンピュータを使うというものであるということを先に知りました。

 

エンジニアとして年数をこなし、DIフレームワーク全盛の時代に、せっせとセミナーに参加し、情報を集める中、Rest Web Serviceという、Soapよりも簡単なWeb Service仕様があることを知り、個人的に勉強をして、自分用のRest Web Serviceを設計し、実装できるようになった。

 

その当時は、現場の基板側の偉い人でも、「Rest Web Serviceはセキュリティ的に甘いから仕事では使えない。こんなものはBtoBでは使われない。」と、言い切ってしまうくらいに認知が無かった時代。

 

数年後には、RestApi全盛になって、RestAPIのサーバーを設計構築出来るというだけで、会社員でありましたが、仕事がとれていました。

 

昨日、今仕事をいただいているエンドユーザの社員から、「gRPCをRestAPIの代わりに使ったらどれだけのパフォーマンスが出るのか調査して、実装してみて下さい。」と、依頼があって調査した。

 

RestAPIが、すでに霞んで過去のものになったように思える位の衝撃を受けた。

2015年にはすでに登場していたという事だ。

grpc.io

 

JavaEJBという、RPCの仕様があり、現場でも何度か利用した事がある。

それは、Javaというシステムに閉じたものだったのだが、gRPCは、サポートしている言語であれば、node.js>javaでも使える。

 

さすが、Google

ラクルや、サンマイクロシステムズが、考えもしなかっただろう角度からのパンチが飛んでくる。

 

この記事を読んで、「いや、RestAPIは、無くならないよ。gRPCは、そこまではやらないよ。」と、コメントしてくれる人がいたら、僕は、嬉しくなっちゃうよ。

 

5年くらい前か、その時出向していた会社で、「Httpsオンリーでシステム作ったら安全だしいいんじゃないの?」と、私は、そこで、基板系の業務をしている人にいった事がある。

 

その人は、「フルでHttpsを使うなんてサーバーの負荷をあげるだけで無意味だ。認証周りと、個人情報などを扱う部分で十分」と行っていた。

今じゃ、ブログでもトップページからHTTPs対応している。

 

時代は進む。

 

その時だけの知識で何かを判断するのは、非常に愚かなこと。

 

未来を想像して、判断するのはエンジニアとして重要な事だと思います。

 

 

 

 

 

 

AIに手を出して見る PythonとKerasによるディープラーニング - 11

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

 

 f:id:a-j1b1k1:20180805211928p:plain

5章のファインチューニングのサンプルコードを実行している間に、残りのサンプルコードを全部実行して、動作確認をしました。

残りのサンプルコードは、ほとんど時間がかからず、あっという間に処理が終了になりました。

1ヶ月どころか、1日で終わってしまいました。

 

ちなみに、ファインチューニングのサンプルは、現時点で、75エポック、昨日の21時36分から開始して、ようやくそこです。現在翌日の21時51分なので、丁度24時間経過したところです。

恐らく、あと6時間くらいで終了します。

 

 

さて、AIの実験環境の準備が、目の前の課題になりました。

AWSで利用できるGPUインスタンスは、90セント/hourくらいの費用がかかるので、時間1ドル計算して、1日24ドル、インスタンスを立てっぱなしにした場合は、1ヶ月に744ドル(およそ75000~80000円)の費用がかかるということ。

GPUインスタンスのランクなどによっては、それ以上の金額になる事も・・・

インスタンスを停止しておれば、費用がかからないという事だったら、わざわざ、固定資産を増やす必要もないので、レンタルでもいいかな。

ちゃんと調べて、検討したうえでどうするか、考えなければいけない。

 

勉強をするだけでも、だらだら実装、起動を繰り返すので、レンタルではきついかな?

 

 

 

AIに手を出して見る PythonとKerasによるディープラーニング - 10

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

 

 f:id:a-j1b1k1:20180805211928p:plain

5章も3分の2の実行が済んで、もはや、うちのラックマウントサーバーの仮想マシン(CPU)環境での実行では、20時間や30時間という、とんでもない学習時間がかかるようなサンプルコードになってきています。

 

参考書にも、「CPUでは間に合いません」と、但し書きがされています。

 

 

4章でじっくりと時間をかけて基本的な知識を理解しておいたおかげで、5章のサンプルコートを実装、実行することに僕の頭に負荷は掛かりませんでした。

 

難しいことを考えずに、シンプルに理解できます。

 

 

*1 この本の特徴について

 

 

弊社も、2期目が終わって、3期目に突入して早2ヶ月。

 

機械学習の学習環境を独自で揃えるかどうかを考えなければいけない時期に来ている。

AWSGPU処理をさせてくれるようなプランもあるそうですが、それに対して数万円投資してからオンプレミスのマシンを購入するのを検討するのでは、無駄な出費がかかるのでそれならば、オンプレミスのマシンを購入するのがいい。

 

ラックマウントサーバーを購入した時に、PCとは違うパワーに夢が広がった事を実感したように、ちゃんとした環境を用意するとそれまでみえなかった景色が見える様になる。

 

何にせよ、学習が進めば、いずれ避けて通れない環境問題。

流石に30時間の処理を繰り返すのは、効率的ではないですよね。

 

5章のサンプルは全部CPUで実行して、それ以降は、考えるか。

 

それでも1ヶ月くらいの話か・・・

 

 

 

 

*1:

この参考書の特徴として、サンプルコードはきちんと最初から全文通しで書かれていません。部分的に抜き出して書かれているので、最初のサンプルから改修、改修を繰り返して、動かしながら先に進んでいかないと、理解することは難しいです。美味しいところ取りでは、意味がわからないし、実装、実行をする事が難しいと思います。

まあ、ちゃんと探せば、GItHubなんかにソースコードが上がっていると思うんですけどね。でも、それでは、勉強にならないので、自分でタイピングします。

久しぶりのJavaについて

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

 

 f:id:a-j1b1k1:20180805211928p:plain

 

 

今日はAI以外の、本業のJavaについて書きます。

 

最近、Java Bronzeの勉強を見る機会があって、現場では絶対にゆるされないようなサンプルコードの数々に、SJCPの頃、私が、ドシロートから勉強をして資格を取っていたあの頃を思い出しました。

 

それで、とあるサンプルコードをみて、「なぜその結果になるか、わからない。」と言われたので、私も見たのですが、確かに、分からないんです。

 

コード①

interface  MyInter {

  public static final int VAL = 3;

  void foo(int s);

}

public class Test implements MyInter {

  public static void main(String args) {

    int x = 5;

    new Test().foo(++x);

  }

  public void foo(int s) {

    s += VAL + ++s;

    System.out.println("s:" + s);

  }

}

実際に実行して見ると、結果はS:16となります。

 

「あれっ?S:17じゃないの?」って、はずしてしまいます。

 

とりあえずは、まずはじめに、コードレビュー的に。

「あれ?こんな書き方したらいかんよ。処理は一目瞭然にしないと。バグの温床になるぜ。」と言う箇所。

 

  s += VAL + ++s;

 ※ s = VAL + ++s;これであれば問題はないんですよね。

 

普通に考えれば++sがインクリメントされた時点で値が変わっているものと思っていた。

 

 new Test().foo(++x);→x:6

public void foo(int s) {→s:6

s += VAL + ++s;

s:6  VAL:3  s:7→実際にはこう言う形で処理が行われる。

s:7  VAL:3  s:7→机上デバッグではこうなっていると思っていた。

 

確認しようと思って、各変数をコンソールアウトして見たところ、

こうなる。

 

コード②

interface  MyInter {
  public static final int VAL = 3;
  void foo(int s);
}
public class Test implements MyInter {
  public static void main(String args) {
    int x = 5;
    new Test().foo(++x);
  }
  public void foo(int s) {
    System.out.println("s1:" + s);
    int a =VAL + ++s;
      System.out.println("s2:" + s);
    System.out.println("a:" +  a);
    s += a;
    System.out.println("s3:" + s);
  }
}
 
結果はこうなる。
s1:6
s2:7
a:10
s3:17←あれ?違うやんか。
 
机上デバッグと実行の場合の値の違いがそのまま出てます。
コード②の場合はsがインクリメントされていますが、
コード①の場合は、インクリメントの反映タイミングがちょっと違うんですね。
基本型なので、参照を利用していないので、こう言うことが起こるんでしょうね。
 
最初に書きましたが、このようなコードはコードレビューでチェックされて修正させられます。処理は一目瞭然でなければいけない。(開発現場による)
 
このプログラムは、見事なバグの温床プログラムですわ。
 
資格試験のサンプルコードとしては「こんな事もできるんだぜ」っていうプログラムになるのでいいんでしょうが。
 
このブログで何が言いたいかといえば、
やべー、この程度のことで間違えちゃったよ〜。
ってことですね。
 
 
 
 

AIに手を出して見る PythonとKerasによるディープラーニング - 9

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

 

 f:id:a-j1b1k1:20180805211928p:plain

いくつかのサンプルのデータの内容を観察していて、

「そもそも、この4つのサンプルはディープラーニングを用いて何をしているのか?』と、いう一番根本的な疑問に行き着いた。

 

 

これも、当たり前ですが、きちんと書いてあります。

 

分類をしているだけ。

 

  • 数字の書いてある画像をラベルから集計して出した0〜9の10個のカテゴリに分類しているだけ。
  • ニュース記事のデータ(単語ではなく辞書データ(キー 数字:値 単語))を否定的か肯定的かの2つのカテゴリーに分類している。これは、二値分類の例と書いてある。
  • ニュース配信のデータもニュース記事のデータと同様で46種類のトピックに分類している。
  • 住宅価格の予測については、回帰分類らしいが、今のところそれがどういうことなのかきちんと理解できていないので、まぁ、そういうことだろうこうと言う認識で進める。

今回は、各データにデータとラベルがあって云々・・

を文章でまとめると、非常にまどろっこしいので、

 

MNISTの例をマインドマップにまとめてみた。

 

f:id:a-j1b1k1:20180819205620j:plain

 

このようにまとめてみると、シンプルなコードの中にも多くの要素があることに気がつきますね。

 

社会人入学した大学では、大半は教科書をこのマインドマップ化するのが勉強だったな〜。

 

これが出来れば、持込可の論文試験は「優」確定だったんだよな。

 

このマップをなぞって、文章を更正すると、あら不思議、論文が出来上がってしまうんですよね。

 

自分の理解の指標として、このマインドマップが描ければ、理解できている。としている。

 

学校で習うノートの書きかたっていうのは、多くある整理法の一つで、図解や、画表現を使わずに記述する方法で、いいところもあるかと思うが、大体、書いた後に何を言っていたかを思い出すのに苦労しますよね。

 

マインドマップは、各トピックを追いかければすぐに思い出すので、本の内容を思い出すのにコストがかからないですね。

 

残りの3つのマインドマップも作成しつつ、先に進もうかね。