「ハッカーと画家」という本を読みました

この本はどっかで読んだ本に紹介されていたのと、タイトルにいつも私が考えていることに共通することがあったので、手に取りました。

多分、プログラマーをしている人には普通に面白い本ですが、私にとって衝撃を与える、思い出に残る一冊になりました。

ハッカーと画家 コンピューター時代の創造者たち

ハッカーと画家

「普通のやつらの上を行け」という帯が若干恥ずかしい(笑)

 

まず、ハッカーという言葉に「物騒だな」と思われたかもしれませんが、これはここでは「優れたプログラマー」という意味で使われています。
「エンジニア」という広い意味ではなくて、「プログラマー」ですね。
著者のポール・グレアムさんという方は、後のYahoo!Storeとなるソフトウェアを作り、ベンチャー創業者として大きな成功を収めたことで知られる方、だそうです。

 

①アメリカ人はどうしていいプログラムを書くのか

 

冒頭の「メイド・イン・USA」という章にのっけから衝撃を受けました。
「アメリカ人はどうしていいプログラムを書くのだろう。」

どひゃー。これは、私もずっと考えてきたことなんですよね。私も日本人ですから、よく言われる
「日本ってさー 何かを改善するのはうまいけど、クリエイティブなものを作るのは苦手だよね~」
ってやつ、ほんとムカつきますよ。(アニメとかゲームとかはクリエイティブなもの作れてると思いますしね)

一瞬話はそれますが、私が会社を作った目的は
「日本にGoogleみたいな会社を作る」
ということなんですが、それは
「なんで日本にはソフトウェアの世界的に有名な会社がないんだろう??」
と思ったことが理由です。

車や車の部品を作ることはうまいのに…。

本書の抜粋ですが、
「米国人は一度何かをしたいと思い立つと、それがうまくできないんじゃないかとか、世間的に角が立つんじゃないかとか、そういうことを気にしない。
何かしたくなったら、ナイキのコマーシャルみたいにするんだ。Just do it.というやつだ。」
映画やソフトウェアはこれでうまくいく、だそうです。

まだ抜粋が続くんですが
「「几帳面」なんて言葉は、優れたプログラマがソフトウェアを書く仕事ぶりからは最も無縁なものだ。
コードはピラミッドみたいに、慎重な計画をしてから苦労して組み立てていくものではない。
(どうして日本ではよい車が作れるのかという話で)日本人の文化に、デザインと職人の仕事を尊ぶところがあるのが重要なのだと思われる。…彼らは、ものをうまく作ることに取りつかれているんだ。」

うわー。
職人を尊ぶ文化は、よいソフトウェアを生み出すのには向いていない
と言い換えていいと思います。

さて、プログラマーとは、「職人」なのか。「芸術家」なのか。
日本では、「職人」に近いと思っている人が多いと思います。
きめ細やかな仕事、整理整頓されたコード、素晴らしいアーキテクチャー。

ここで、職人と芸術家を私なりに定義してみました。
・「職人」→ 過程にこだわり、例えば「裏側を見せてもキレイ」とか「細部もめちゃくちゃちゃんとやってある」にこだわる
・「芸術家」→ 成果物にこだわり、「裏側はぐっちゃぐちゃ」、「細部はメインの引きたて」

確かに、日本は「職人の手仕事」が大好きで尊ぶところがあると思います。
それがカッコイイと刷り込まれて生きています。
プログラマーは「芸術家」なのか、「職人」なのか。

非常に定義が難しいです。
そして、私が思う「職人」と「芸術家」の最大の違いは
・「職人」 → 他人が指定したもの、あるいは期待したものを作る
・「芸術家」 → 自分が作りたいものを作る
だと思います。

プログラマーと一口に言っても、仕事や会社によって全然変わってくると思います。
受託開発・SES・Sier・下請け企業のプログラマーさんは圧倒的に職人でいることを求められると思います。
自社開発でやってる会社さんでも、企画は企画部がやって、プログラマーは完全に職人でいることを求められていることがあります。
弊社は、プログラマーさんも仕様を考えて実装するので、芸術家の割合が高いです。
ちなみに、これは職人がいいとか悪いとか、職人さんをディスする話ではありません。
何より、「ご飯を食べていく」ことを考えれば、普通に芸術家は職人よりも貧乏であることが多いですからね(笑)。

でも、ポール・グレアムさんの主張に確かにそうなのかもな… と思ってしまいました。
「職人を尊ぶ文化は、よいソフトウェアを生み出すのには向いていない」
というのは私の会社を作った目的に対するヒントを与えてくれるものでした。

②常識を尊ぶ人はハッカーに向いていない

 

これもなんかわかるなって感じでした(笑)。
「ちょっと変人だな」
という人が優秀なプログラマーには多いものです。(その逆は真ではないけども)

他大多数の人と同じことがしたいと思っている人が、同時に革新的なことを生み出せるはずはないのです。
品行方正・成績優秀な優等生が優秀なプログラマーかというとそうではないんですよね。
「口にできないこと」「異端であること」には価値がある、「道徳には流行がある」なども考えさせられました。

優れたプログラマーは画家に近い

 

わかる~。本書の抜粋で
「優れたソフトウェア設計者は、建築家がエンジニアではないのと同じように、エンジニアではない。
ハッカーは、画家が絵具に関する科学を理解するのと同程度にコンピューターサイエンスを理解していればよい。」

そうなんですよ。よく、
「文系だからプログラマーとかなるのは無理です。」
みたいなことを言う人はいるんですが、それはおかしいんです。

なぜなら我々がやっている仕事のほとんどが、現実という複雑な事象から、何かを抽象化して抜き出すことだからです。
それが画家のスケッチに近いと言われれば、そうなのかもしれない。
何か絵を描くときに、いきなり細部から描けませんね。

「作家や画家や建築家が作りながら作品を理解していくのと同じで、プログラマはプログラムを書きながら理解していくべき」
わかる~。
だから、上流工程とか下流工程、とかが分かれているプロジェクトってうまく行かないことが多いんですよね。
そして、スケッチというのは、書く練習が必要なんですよ。
優れた芸術作品というのは才能ではなくて、膨大な書く練習の上に成り立ってます。

ピカソとか、15万作も作ったらしいですからね。
経験から言っても、プログラマーはいっぱい書いたほうがいいです。

私も、プログラマーの新人に、
「うまくコードを書いてくれ。」
と言いません。
「とにかくいっぱい書いてね。」
と言います。

そして、書いただけではダメで、できれば誰かに継続的に使ってもらうことが必要だと思います。芸術というのは他人に評価されてなんぼだからです。

「多くの企業はハッカーにエンジニアたれと強要する。それがよくない。」
確かに、プログラミングをしていて思うことは、プログラミングに必要な能力って、エンジニアに必要な能力とちょっと違うんですよ。

ただ、あんまりこんなことを言う人はおらず、大体
プログラマー=エンジニア
と世の中で理解されているように思います。

この話も、いずれ別のところで語りたいなと思います。

④サポートはプログラマーと密にやる

 

これはですね、弊社でも意識していることだったので、ポール・グレアムさんの会社でもそうだったのかと思って嬉しかったです。
抜粋&要約ですが
「大企業ではユーザーサポートはユーザーの機嫌を取るためのものだ。ユーザーから電話がかかってくると、サポート部門は決まった形式にそれを入力し、時間が経ってからそれをプログラマのやることリストに加える。
Viaweb(ポール・グレアム氏の会社)では、ユーザーからバグ報告があがってきて1分もたたないうちに、サポートスタッフはプログラマの横に立っていて、プログラマが
『あちゃー、これはバグだね』
というのを聞いている。」

うちもですね、ODINの開発にあたり、同じような体制でやってます。(`・ω・´)

ODINのサイトに書いてあるんですが、
「サポート担当者と、システム開発者が机を並べ、緊密に連携を取って迅速にお客様へのご質問にお答えします。どうぞお気軽にご相談ください。」。
こうすることが、お客様の満足度を上げるだけでなく、よいソフトウェアを作ることにつながっていると感じています。

 

⑤ベンチャー企業について

 

「ベンチャーはほかのベンチャーと同じことをやっていてはいけない。ベンチャー企業の平均的な成長とは、すなわち、つぶれてしまうということだ。」
うう そのとーりで肝に銘じないといけないですね。

 

うわ、めっちゃ長くなっちゃった。

でも、この本についてまだ書ききれないぐらいです!

 

全プログラミングキッズ待望のゲームができた!コードで戦うゲーム

時々、思ったことはありませんか?

アニメとかゲームとかの設定でよくある、すごいプログラマーがいて、そのプログラミング力で敵を倒すやつ。やってみたいと…!

ガンダムSEEDみたいにモビルスーツのOSをチャチャッと書き換えて、敵に勝つやつですよ。

「男と生まれたからには誰でも一生のうち一度は夢見る「地上最強の男」」

ってよく聞きますよね(笑)。

まー私は女ですが、強さを決めるってなんかワクワクしますよね。( ˊᵕˋ )

競技プログラミングとかもありますが、

「なんかこう燃えないな~」

と思っていませんでしたか?

なんかもっと、直接バトルっぽいApexっぽいのがやりたいな~ とか!

(·:゚д゚:·)ハァハァ
すみません、中二病全開が過ぎましたね。

それがなんと、そんなゲームができたらしい。

JavaScriptを打ってキャラを操作する対戦ゲーム、Steamで配信 Rustなど計13以上の言語にも対応

https://www.itmedia.co.jp/news/articles/2204/08/news140.html

 

というわけで、早速やってみます。

最初につまづいたのが、

オール英語。

そっか。そりゃそうか。

なので操作方法とか、そもそもどうすればいいのかがわかんなかったところも多くありました。

APIのドキュメントも字が小さい(笑)

しかし、チュートリアルもついているのが優しい!これありがたかった~

自分のチームの部隊をどうやって動作させるか、などはチュートリアルにサンプルコードがあるので、それで大体わかります。

というわけで、早速作ってみました。

私が作ったコードは結局2時間ぐらい取り組んでチュートリアルをつぎはぎしたにすぎません…。

でも、対戦してそこそこ勝てた(笑)

下記の動画で、白いのが私のコマで、違う色が敵さんです。この動画では、2戦して、2戦とも勝てました v( ̄Д ̄)v イエイ (最初の敵さんはピクリとも動かなかったのと、2回目の敵さんは辛勝でしたね(笑))

 

 

これ、動作させている途中にコードを書き換えることはできません。

この動画で動作させているコードはこちら。javascript です。

import {getObjectsByPrototype} from '/game/utils';
import {findInRange} from '/game/utils';
import {Creep} from '/game/prototypes';
import {Flag} from '/arena/prototypes';
import { getTicks } from '/game/utils';
import { ERR_NOT_IN_RANGE, ATTACK, RANGED_ATTACK, HEAL, OK } from '/game/constants';

export function loop() {
    var enemyFlag = getObjectsByPrototype(Flag).find(object => !object.my);
    var myCreeps = getObjectsByPrototype(Creep).filter(object => object.my);
    for(var creep of myCreeps) {

        
        let targets = getObjectsByPrototype(Creep).filter(c => !c.my);

      if(creep.body.some(bodyPart => bodyPart.type == ATTACK)) {
         attack(creep, targets)
      }

      if(creep.body.some(bodyPart => bodyPart.type == RANGED_ATTACK)) {
         rangedAttack(creep, targets)
      }

      if(creep.body.some(bodyPart => bodyPart.type == HEAL)) {
         heal(myCreeps, creep)
      }

      creep.moveTo(enemyFlag);

    }
    console.log('Current tick:', getTicks());
}

function rangedAttack(creep, targets){
   let targetsInRange = findInRange(creep, targets, 3);
   let result
   if (targetsInRange.length >= 3) {
      result = creep.rangedMassAttack();
      console.log('遠隔全体攻撃 結果')
      console.log(result)
   } else if (targetsInRange.length > 0) {
      let result = creep.rangedAttack(targetsInRange[0]);
      console.log('遠隔攻撃 結果')
      console.log(result)
   }
}

function attack(creep, targets){
   let target = creep.findClosestByRange(targets);
   if (target){
      creep.move(target);
      const result = creep.attack(target);
      console.log('攻撃 結果')
      console.log(result)
   }
}

function heal(myCreeps, creep){
   var myDamagedCreeps = myCreeps.filter(i => i.hits < i.hitsMax);
   if(myDamagedCreeps.length > 0) {
      const heal_result = creep.heal(myDamagedCreeps[0])
      if(heal_result == ERR_NOT_IN_RANGE) {
         console.log('遠くてHealできないので近づきます')
         creep.moveTo(myDamagedCreeps[0]);
      }else if(heal_result == OK){
         console.log('Healした')
      }
   }
}

コードの説明を軽くすると、これを、PC内の所定のディレクトリにおいておけば、このゲームが勝手にサーバーにアップロードしてくれて動作するという仕組みみたいです。
なので、勝敗はもうPlayボタンを押したときに決まっているわけですね。

動作させるとタイムフレームが1個ずつ進み、loopという関数の中が実行されます。
console.logが使えて、出力内容は盤面の下に表示されます。

自分の部隊、敵さんの部隊はcreep というオブジェクトで、これの中にまたBody Partというものがあって、それにattack とかranged attack とかなどの属性があるようです。

ちょっとしょぼいコードではありますが、とりあえずやってみたい人の参考になればと思い、載せておきます!

やりこみ要素はもっとあって、例えば陣地の中にある塔からビームを出したり、その塔にエネルギーをチャージしたり(?)などもできるみたいです!

(すみません、時間の都合でチュートリアルの半分しかやってない)

 

Steamで配信中で、2000円ぐらいです。⊂(^-^)⊃

 

いや、でもこれ作った人達すごいわ。

感謝ですね!

 

余談ですが、今日は日曜日なんですけど、PHPerkaigiというPHPのオンラインの勉強会があったり、このゲームやったり、プログラミング三昧です。

それが楽しいんでいいんですけどね!⊂(^-^)⊃

「コンピュータシステムの理論と実装」という本を読みました

この本はですねー。

本当に読むのに時間がかかりました…。


多分、2年近くかかってると思う(;’∀’)

読むきっかけは、

ゼロから作るDeep Learningという本を読みました

で紹介した、「ゼロから作るDeep Learning」という本で、この本が紹介されていたからです。

Deep Learningを勉強していくなかで…NandとかXorとかがすぐに理解できなかったんですよね。

 

私は、ずっと文系で来て、学校でコンピューターのことを学んだわけではありません。

なんかねー、そういうことを勉強してきた人にかなわないなって普段思ってるんですよ。

 

読むのに時間がかかった理由は、内容が難しいというのにプラス、コードを読んで、それをエミュレーターで実行しないと理解が進まない(;^ω^)

そして、そのエミュレーターの使い方が英語でしか説明がない…(つД`)

ありがたい話で、nand to tetris(原題:Nandからテトリス)ってググるとどなたかが作ったサンプルにたどり着きます。

プログラマーとして、日々プログラムを書いてちゃちゃっと実行していますが、ここに人類がたどり着くのに、すごい、道のりがあったんだなと。

よくこんな仕組みを思いついたな~と感動があります。

 

本当にいい本ですよ。買ってよかったし、読んでよかった。勉強になったし、面白かった。

私のような文系出身プログラマーにはお勧めです!

 

量子コンピューターが世界を変えるのかも

表題の話は、おとといぐらいにニュースになってましたね。

スパコンで1万年かかる計算を3分20秒で? 量子コンピューター

https://www3.nhk.or.jp/news/html/20191024/k10012146191000.html

すごいことだと思います。

IBMが反論していることも話題になってますね。

私には、真偽のほどはまったくわからないですが!

AIって、計算にすごく時間がかかるんですよ。AIによる生産革命にもっと拍車がかかるかもしれませんね。

逆に、暗号がすぐに破られるのではないかという懸念もされてますよね。

秘密にしたいような情報は、ネット上にはおけない時代になるのかもしれないし、逆に誰もが見れる情報には価値がなくなっちゃうのかもしれません。

それにしても、こういうわくわくするようなニュースに出会えて、5年後はどうなっているかわからない。

新しいことにどんどん出会える。

それがIT業界のいいところだと思います!

それにしても、量子コンピューターのイラストがあるなんて、いらすとやさん、しゅごい…。

Gitクライアントの話

Gitクライアントって何使ってますか??

私は、実は昨日までCLI(コマンドライン)で使ってました。

Windowsのコマンドプロンプトで使うやつです。

その前まで、SourceTreeを使ってたんですが、SourceTreeがなんかの不具合で使えなくなって、直す気がなくなってCLIを使ってました。

 

CLIの利点がいくつかあって

・速い!!!!

・複雑なことをしやすい

・できるプログラマー感がある(笑)

ですね。

 

デメリットは

・ファイルの差分を見るのがめんどい!!

・視覚情報が少ない…

です。

これは私からした考えなので、ほかの人は違う意見だと思います。

 

しかし、今日、やっと思い立って、SourceTreeを直して、使いなおしました!!!

理由は…。

やはり、ファイルの変更差分を見るのに、GUIの方が圧倒的差があるからです。見やすいし、コマンドうつ面倒くささがない。

その差…っ!!圧倒的…っ!歴然…っ!!!

んで、ファイルの変更差分を見る、というのが私的には一番Gitでやりたいことなんだよなぁぁ。

そして、SourceTreeさんもなんだか早くなってる!!(現在のバージョンは2.5.5.0)₍ᐢ⑅•ᴗ•⑅ᐢ₎♡

 

とはいえ、コマンドラインでも操作ができたほうがいいときがありますね。なんかおかしくなっちゃった時とかの操作が、SourceTreeだとにっちもさっちもいかなくなる時があるからです。(´・ω・)

ちなみに、Githubご謹製のGitクライアントも試したことがありますが、SourceTreeの方が使いやすかったですね。

もし、ほかにオススメのGitクライアントがあれば、教えてください。

みちびきの話

さてさて、日本版GPSともいう「みちびき」が11月1日にスタートしましたね!

http://qzss.go.jp/

弊社では、Smart動態管理や、タクシー検索たくる といった、位置情報を使ったサービスを運営してますので、みちびきについては時々聞かれます。

よくある勘違いがコレ!!

「みちびきができたからさ~ 御社のアプリでもGPSの精度がセンチメートル単位になるのでは?」

残念ながら、そうではありません!!(´・ω・`) (そうだといいんだけど)

Wikipediaさんによると、

準天頂衛星システム

https://ja.wikipedia.org/wiki/%E6%BA%96%E5%A4%A9%E9%A0%82%E8%A1%9B%E6%98%9F%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0
cm級測位に必要な補正情報を民間に無償で配信(日本国内限定)しているのは現状QZSSだけである。もっとも、2018年時点ではcm級測位に必要なモジュールやアンテナは車両や大型ドローンへの搭載レベルであり、携帯電話・スマートフォンへの搭載は大きさや消費電力の点から実現していない(これはQZSS以外のGNSSでも同様である)。

また、cm級測位は農耕車や工事車両、測量などを主眼としており、測定には衛星経由のため10数秒のタイムラグが生じる。よってカーナビなど高速で移動する車両等では、cm級測位は利用するとしても他の測位技術と組み合わせた補助的な利用となる[26]。

つまり、平たい言葉で言い直すと、スマホではまだセンチメートル級の測位はできない、ということです。

▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂ うわあああああぁぁぁぁぁぁぁ

 

日本では、iPhoneでみちびきが受信できます。

かといって、iPhoneは昔から測位がいいんですよね。ロシア版GPSである、GLONASSというシステムがありますが、それを受信しているからだともいわれています。

正直なところ、みちびき以前・以後であまり変わらないな~と思われます…。

Androidについては、GLONASSを受信しているかどうかは、機器によります。

 

ちなみに、衛星が今どの辺をどのぐらい回っているのかを、なんと見ることができますwww

GNSS View

http://qzss.go.jp/technical/gnssview/index.html

 

早速見てみましょう~

いっぱい飛んでる~ ⊂(^-^)⊃

実にムネアツ!!(…でもないか…)

QZSが日本のみちびき、GPSがアメリカの衛星、GLONASSがロシアの衛星、BDSが中国です。以下略。

 

OCテックノートができました。

弊社の新しいオウンドメディア、OCテックノートができました!

OCテックノート

 

パチパチパチパチ。(๑•̀ㅂ•́)و✧

実は、以前、「でじうぃき」って名前で運営していたWikiで作った情報サイトがあったのですが、それをWordPressに移行した形になります。

理由は、「でじうぃき」はPukiwikiというWikiのクローンでできていましたが、もう10年ぐらい前からあるので、劣化が激しかったからです…。

Pukiwikiも進化しないしね…。

移行はちょっと大変だったんですけど、弊社のMが移行プログラムを書いてくれました。ありがとう!⊂(^-^)⊃

こだわったのは、コードが見やすいこと。

どうでしょうか?

 

でじうぃきは、名刺を渡したりすると、

「あ、このロゴ見たことあります」

って言ってもらえることが多かったりして、それなりに世間の役にたってたのかなと思ったりしました。

 

んで、OCテックノートはどういう位置づけかっていうと、いわゆる、ITの会社が運営するテックブログとは違います。

もっと現場に近い形で、じゃんじゃん書いて、じゃんじゃん検索してもらえるサイトを目指しています。(๑•̀ㅂ•́)و✧

誰かがノートのはしっこに書いたことが、誰かの役にたてばいいな~。っと。

でじうぃきから変わらない方針ですね。

 

この業界って、日本語情報ってやっぱり全然少ないんですよね。

なので、Stack Overflow見て解決したことでも、誰かが日本語で書き直してくれると、助かりませんか?

私的には大変ありがたいです。

 

後は、

「みんなが!驚くような!最先端かつ全く間違いのない記事を書いてやるぜ!!ハハハ (゜∀゜)」

とか思っていると、おそらく永遠に書く日が来ません。。。(´ω`)

なので、勉強中でもいいし、間違っててもいいので、アウトプットすることが大切と思っています。⊂(^-^)⊃

アウトプットしていると、間違ってると誰かが教えてくれて、それが自分の進化につながりますからね!

それがこの業界っぽいじゃないですか!

 

後は、アウトプットすると、アウトプットした分、自分のものになるって側面ありますよね。

Alpha Go Zeroのすごさを機械学習とか知らない人向けに説明してみる

Deep Mind社のAlpha Goという囲碁のAIが人間のプロ棋士を負かした、というニュースは皆さんご存知かと思いますが、実はAlpha Goはそれからさらに進化していて、Alpha Go Zeroになっています。

Alpha Go Zeroの何がすごいかっていうと、

①自分自身との対戦で強くなった(教師とするデータがいらない)

②GPUなどの消費がずっと少なくなった

③以前のAlpha Goが数か月で達成した強さをAlpha Go Zeroは数日で達成

③それでいてAlpha Goよりずっと強い(100-0でAlpha Goに勝利)

 

というところなのです!!

この教師とするデータがいらない、というのはすごいことで、なぜかというとデータを集めるのが大変なんですよね。

碁の棋譜データとかは、もうデータになってるんですが(1000年以上分ぐらいらしい(´ω`))昔に紙に書かれたものを、集めるのも大変だっただろうし、データにするのはさぞかし大変だっただろうし、というわけです。

 

2017年10月19日に学術誌Natureに下記のAlpha Go Zeroの論文が発表されていますので、今これを勉強してます。

Mastering the game of Go withouthuman knowledge

https://www.nature.com/articles/nature24270.epdf?author_access_token=VJXbVjaSHxFoctQQ4p2k4tRgN0jAjWel9jnR3ZoTv0PVW4gB86EEpGqTRDtpIz-2rmo8-KG06gqVobU5NSCFeHILHcVFUeMsbvwS-lxjqQGg98faovwjxeTUgZAUMnRQ

 

自分でも考えをまとめるために、いろいろとここに記述しておきたいと思います。

このブログでは、あまり技術的なことは書かないつもりなんですが、現在弊社の技術的なオウンドメディアはメンテナンス中なので、ここに書きます。

 

さて、私の好きな名言に

『6才児に説明できなければ、理解したとはいえない byアインシュタイン』

というのがありますので、ならってやってみようと思います。

Alpha Go Zeroの理論のすごさをAiとか機械学習とかまったく知らない人に説明したいと思います。

 

私の大好きなマンガ、ドラゴンボールの主人公、孫悟空にたとえてみますね!

———————————————————————————————————————————-

孫悟空は亀仙人とか、カリン様とか、界王様とか、いろんな師匠に教えられたり、ピッコロ、ベジータ、フリーザなどの強敵と戦って強くなるじゃないですか。

しかし、孫悟空のクローンが作れるとしたら、孫悟空は自分自身のクローンとずっと対戦してた方が、いろんな先生に教わるよりも、敵と戦うよりも強かった。ということ発見されたわけですね。

 

ここでミソとしては、ただたんにクローンと対戦しててもダメなのです。

6人ぐらいの孫悟空のクローンが同時にいたとして、2人ずつ3組に分けます。

3組は同時に戦います。うち一組を①とすると、①チームは

「最初は軽いパンチ、次にカメハメ波を出したほうが強い」

とかそういうことをひたすら研究します。研究結果はメモって記録していきます。

もう一つの2組目②は、①の研究結果を使って実践で対決します。

んで、本当に強いのー??ということを研究します。研究結果はメモって記録していきます。

最後の3組目③は、②の結果を使って、本当に試合形式で対決します。

そして、勝ったクローンを残し、負けたほうは消滅する、という手段で最強のクローンを残します。

(③の結果は、①チームにも②チームにもフィードバックされます。)

 

これが同時に繰り返し行われることで、この最強のクローンがどんどん強くなっていく、ということです。

ただ、100万回ぐらい繰り返さないとダメなんですけどね(;^ω^) 「精神と時の部屋」でやればいいんでしょう。

 

悟空が強くなるためには、最初に格闘技の知識すら必要ありません。

———————————————————————————-

 

 

以上はだいぶ概略のイメージです。

伝わったでしょうかー?!( ゜Д゜)

 

しかし、6歳児には説明できてないなw

 

ドラゴンボール好きな人には説明できたかもしれないww

実はこのたとえ話を書きたかったw

 

AIの強さがどんどんインフレしていく感じが、少年漫画っぽいじゃないですか。

前回のシリーズで敵だったキャラが、今回の敵キャラにまったく歯が立たない、というのはよくある展開ですよね!!

Alpha Goは、もうAlpha Go Zeroにまったく歯が立たないんです。

「おめー、つええなぁ。オラ、わくわくすっぞ!!」

 

 

ところで、この仕組みを

「いたって単純」

という人がいます。上のたとえを読んだ人も、そう思われたのではないでしょうか?!

スゴイプログラムというのは、なんかもっとそんな単純なことじゃなくって、何万行もあったり、その中でヽ(*`Д´)ノ【ス】【ゴ】【イ】ヽ(`Д´*)ノことが行われたんじゃないか、と思われたのではないでしょうか?!

 

ちなみに、論文読んでるだけではわかりにくい部分もあるので、下記のソースコードをサンプルにして勉強しました。

下記はオセロをAlpha Go Zeroの仕組みで学習する、というプログラムです。

https://github.com/suragnair/alpha-zero-general

確かに、とってもシンプルです。

 

 

印刷すると、ホワイトボード一枚に収まるらしいですね。

 

「AlphaZeroのソースコードはわずかホワイトボード一枚に収まる : 情熱のミーム 清水亮」

https://japanese.engadget.com/2018/02/12/alphazero/

 

わかってしまえばそうだな、なんぜ今までやらなかったんだ!ということって、結局それを発見、発案した人はすごいですよね。

コロンブスの卵と一緒ですよね。

 

単純なことだとしても、「わかる」までの道のりは、果てしなく遠かったわけじゃないですか。

今までのAlpha Goでの取り組み、モンテカルロ木探索、強化学習、ResNetとか今までの研究結果のいろんなことを詰め込んでなされたわけですよね。

 

この仕組みを考えた方の努力と天才性に拍手喝采、そしてそれを公開してくれることに感謝感激です。

 

実用性に異議を唱える人もいますが、世のいろいろな人が試してみたところ

・完全情報公開ゲーム

・ゼロサムゲーム

では、この方法が相当強いことがだいぶ証明されているようです。

 

 

次回は論文の中身を真面目に紹介する予定でーす(`・ω・´)

国内のサーバー業者のクラウド

GWも明けましたね!急に寒いですが、体調大丈夫でしょうか?

私は、今日はヒートテック着てても寒かったです(>_<)

 

実は、GW中の1日に、とあるお客様向けに納入したシステムでサーバートラブルがありました。(Smart動態管理ではありません)

なぞの不具合で、私も一通り的なことはわかるのですが、対応しきれず、最終的にはサーバー管理者Tに出社してもらう羽目に…。

Tには申し訳ないことをしました。(>_<)

使っているのは国内事業者のクラウドなんですけどね。

なぜかどんどんファイルが破損していくという不思議な現象がおきまして。

突然の再起動を起こしたり。SSHでログインできなくなったり。

ハードの不具合かと思ったんですよね。

 

結局原因不明でして。復旧の方を優先させたんですが。

結局原因不明というのはこの世界でよくあることだから仕方ないんですけど、サーバー業者さんの対応があまりよくなかった(>_<)

2度も電話したんですけど、マニュアル見て返事してるって感じで

「OS立ち上がってるならこちらのせいではありません」

「こちらでは不具合起こってません」

とのお答え。

 

AWSって、サポート有料だけど、もっと突っ込んだことまで教えてくれるんですよ。

ま、同じ不具合が起きたことがないので同じことが起きたらどうかはわかりませんけども。

なんというか、技術力で彼我(USと日本)の差があるのは仕方ない。

しかし、対応の親切さで差があるのはなんかな~。わざわざ国内事業者選んだ意味がないですよ(つД`)

サーバー業者もこのままじゃ、MSとAWSの2強だけになっちゃうんじゃないかな。

 

同じような体験をした方がいたら教えてください。

パソコン作ったった

今日はネットワークの障害があって、大変でしたね…。

弊社も弊社のサービスがつながらない、とお客様からお問い合わせが多くありました。

こんなこともあるんですね。

さて、最近パソコンを作りました~(^_^)

目的は、新しいパソコンほしかったのと、単に勉強のため(`・ω・´)シャキ

今まで、メモリを増設したり、BIOSの電池変えたりぐらいのことはしたことがありますが、作ったことはなかったので、いっちょやってみるか!と。

 

私、機械ダメなんですよw

ナチュラルボーンマシーンブレーカー というか。

プラスとマイナス間違えてくっつけるとか、なんやかんや壊してしまうんですよねw

もちろん、仕事でそれではいけないですが、ハードウェアを触るような仕事はほとんどありません。

よかった!!最低限起こるハードウェア的な仕事も

「わっ わたしはソフトウェアを扱う専門だから!!」

と言ってほかのもっとそういうことが得意な人にやってもらってます。

Linuxをシェルで操作するぐらいはやるんですけどね。

 

ですが~

やっぱりソフトウェアはハードウェアの上で動くものなので、その仕組みって絶対知っておいた方がいいとはずっと思ってたんですよね(>_<)

 

それにしても、所要時間3時間ぐらい、結構大変だった…。(>_<)

このマザーボード使いました。

 

まだまだ勉強中ですが、楽しんでやっていきたいです~⊂(^-^)⊃