KOYAMA Yoshiaki のブログ

プログラミングについての試行錯誤をつらつら書き溜めていきます。

近況と書籍 Creative Selection、Programming Rust の紹介

ご無沙汰しています。

Raspberry Pi を主に Radiko の録音に使っています。最近、何度も挑戦して諦めていた Ruby on Rails が理解できるようになりました。

Raspberry Pi 上で録音した音声ファイルを iOS の GoodReader で聴いていたのですが、ブラウザで再生する Ruby on Rails プログラム yplayer を作ってみました。ほとんど完成しているのですが、実行画面と動画をちょっとだけチラ見しておきます。

実行画面

動画

この動画は Ruby on Rails をインストールした Rapsberry Pi 上で、録音した Radiko.jp の音声ファイルを yplayer を使って、iPhone XS MaxSafari で聴いている様子を録画したものです。

公開するためにはもうしばらくかかりそうです。できれば GitHub で公開しようと思っています。


今日は2つ書籍を紹介します。

まず最初は

2018/11/18(Sun) 14:32:41
Amazon.com
Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs Kindle Edition
by Ken Kocienda (Author)
Audible Audiobook from $16.22 

Hardcover  $18.89 

Paperback $12.90 

Kindle $15.07 

1$=¥112.82
¥1700
クレジット会社からの請求
¥1750

です。私は米国 Amazon.comKindle 版を購入しています。日本の Amazon.co.jpKindle 版を購入すると 1,474 円 と割安です。

Podcast、Rebuild.fm と Misreading Chat で紹介されていました。

Rebuild - Podcast by Tatsuhiko Miyagawa
http://rebuild.fm/

Misreading Chat – CS の論文読んで話をしよう
https://misreading.chat/

Apple の製品開発プロセスの内情を紹介したものです。作者 Ken Kocienda さんが関わったプロジェクト SafariiOS のソフトウェアキーボードの開発過程が詳細に説明されています。

最初に Steve Jobs 氏の前でデモする場面が書いてあるのですが、読みながら緊張してしまいました。時代背景の説明や識者からの言葉の引用があったり面白く読めました。

作者はオリジナル Macintosh の開発者 Bud Tribble さんと Mac のソフトウェアエンジニア Andy Hertzfeld さんが起こしたスタートアップ会社 Eazel で働いていました。

その時の上司だった Don Melton さんと一緒にアップルに入社します。Don さんは Eazel の前に Netscape に勤めていました。Ezael で Linux 向けに作った Nautilusオープンソースだったのは WebKitオープンソースだったりするのに影響しているのでしょうか?

作者はアップルで自前のウェブブラウザを開発することになるのですが、最初は Mozilla を移植しようと取り組んでいました。上手くいかず、新しく入った元 NeXT 社員、Richard Williamson さんが KHTML を移植し、頓挫していたプロジェクトの救世主になります。

WebKit
https://webkit.org/

Blink - The Chromium Projects
https://www.chromium.org/blink

KHTML をフォークした Safari のブラウザエンジン WebKitSafariWebKit を fork した blink、Chrome の基礎となるわけですから、世の中わからないですよね。

全然関係ないですが Steve Jobs 氏が現在の Apple Store、店舗を開くと聞いた時、大丈夫かなと思ったのですが、それが iPhone のサポートなどに使われるわけですから、私のような凡人には予測不可能ですね。

2018/12/07(Fri) 15:56:38
Microsoft Edge: Making the web better through more open source collaboration - Windows Experience BlogWindows Experience Blog
https://blogs.windows.com/windowsexperience/2018/12/06/microsoft-edge-making-the-web-better-through-more-open-source-collaboration/ 

上記よりブラウザ勢力図はどうなるんでしょうか?

iOS のキーボートを開発していく過程も細かく描写されています。iPhone を見た時の感動や iPhone が発表されて初めて製品名が iPhone だと知ったことなどが書かれています。

後半には題名 Creative Selection にもなっている Apple開発プロセス demo -> feedback -> next demo: creative selection と Google の A/B テストを用いた開発の違いが説明されています。

英語力が乏しいので間違って理解している箇所もあるかもしれません。

もう一冊は

2018/07/06(Fri) 18:38:39
Amazon.com
Programming Rust: Fast, Safe Systems Development 1st Edition, Kindle Edition
by Jim Blandy (Author), Jason Orendorff (Author)
Digital List Price: $50.99
Print List Price: $59.99 Save $26.67 (44%)
Kindle
$33.32
1$=¥110.63
¥3686
クレジット会社
¥3771

Programming Rust: Fast, Safe Systems Development

Programming Rust: Fast, Safe Systems Development

プログラミングRust

プログラミングRust

です。以前からプログラミング言語 Rust に興味を持っていました。読んでいる途中ですが、Rust を理解するには、インタープリタコンパイラがどのように作られているか理解している必要性を感じました。lifetime parameter のように言語の構造がむき出しになっている部分もあります。簡単なプログラミング言語 basic

basic version 1.0.0
http://kyoshiaki.sakura.ne.jp/osx/lion.html#bas100 

を作成した経験やプログラミング言語作成の書籍を読んだ知識が理解するのに役に立ちました。

ニンテンドー 3DS プチコン3号 SmileBASIC 版 チェスプログラム YOS_CHESS [Chess Program] 公開

以前、ブログを書いてから一年ぐらい経ちますが、色々取り組んでいました。ニンテンドー 3DS ダウンロードソフト 'プチコン3号' でコンピュータと対戦できるチェスプログラムを作ってみました。

公開キー、実行画面、動画を載せておきます。

YOS_CHESS (YKChess)
チェス
コンピュータと対戦できるチェスプログラム。
公開キー W2E433R4

実行画面

動画


麗の小屋 - Phono Transceiver PetitModem -
http://rei.to/petitmodem.html

上記 PetitModem Ver. 1.2.7 の使い方を解説した PDF ファイルと Mac 上のテキストエディタ CotEditor でプチコン3号のソースをカラーリング化する定義ファイルなどをまとめた SmileBASIC.zip も公開します。

PetitModem Ver. 1.2.7 の使い方、SmileBASIC 用 CotEditor 定義ファイル 
[ SmileBASIC.zip ]  
http://kyoshiaki.sakura.ne.jp/osx/Sample/SmileBASIC.zip

上記 URL に含まれる PetitModem Ver. 1.2.7 の使い方を解説した PDF ファイルは、結構苦労して作成しました。良かったらぜひダウンロードして読んでみてください。


チェスプログラム YOS_CHESS.PRG は、

Chess Engine In C - YouTube
https://www.youtube.com/playlist?list=PLZ1QII7yudbc-Ky058TEaOstZHVbT-2hg
Vice (Video Instructional Chess Engine)
Sources (ソース)
http://bluefever.net/Downloads/ViceReadMe.html

上記 URL の YouTube のチェスプログラミング講座とソースを参考に作成しました。

chessprogramming - home
https://chessprogramming.wikispaces.com/

Chessprogramming wiki
https://www.chessprogramming.org/Main_Page

チェスプログラミングの用語、変数名は、上記 URL の Wiki で検索し、理解しました。

プチコン3号の変数は

整数型…変数名末尾が %
32ビット符号あり

データ型 #
倍精度実数型…変数名末尾が #
(省略可能・デフォルト)
64ビット

上記のように整数型とデータ型があります。64ビット整数型の変数が使えないので、局面を64ビットのハッシュ値で表すことができません。そのため、

three-fold repetition (同局面三反復、3レピティション)
同じ局面が3度現れるとドローを主張できる。

Threefold repetition には対応していません。



YOS_CHESS (YKChess) の強さは、Level 5 でも Xboard に一度も勝つことができませんでした。非常に弱いので、初心者向けです。

macOS Sierra バージョン 10.12 付属のチェス (バージョン 3.13) で、2手先まで考えるように設定し、3回対戦しました。YOS_CHESS (level 5) の2勝1引き分けでした。

英語が苦手なのでメッセージの英語表記には、おかしな箇所があるかもしれません。



チェスプログラムを作成してみて、以前より理解が深まったので

2005/06/15(Wed)
リバーシアルゴリズム C++&Java対応—「探索アルゴリズム」「評価関数」の設計と実装 - Seal Software
¥ 1,995 

2005/03/08(Tue)
コンピュータ将棋のアルゴリズム—最強アルゴリズムの探求とプログラミング - 池 泰弘
¥1,995 

以前購入した上記2冊を読み返してみようと思いました。ただし、書籍「コンピュータ将棋のアルゴリズム」は紛失してしまいました。

ところが最近、最新刊が

2016/09/07(Wed)
Java将棋のアルゴリズムアルゴリズムの強化手法を探る (I・O BOOKS)
池 泰弘
¥ 2,484

発売されていました。上記、書籍とソースを参考に理解を深めています。

最後に YOS_CHESS (YKChess) の取扱説明書 README_JA.PRG の内容を添付しておきます。

===== README_JA.PRG =====

'
' YKChess (YOS_CHESS.PRG)
' Version 1.0 Programmed by KYoshiaki
'
'【概要】
'
' YouTube のチェスプログラミング講座とソースを参考に、プチコン3号で
' コンピュータと対戦できるチェスプログラムを作ってみました。思考ルーチンは、
' 単純なアルファ・ベータ法を使用しています。非常に弱いので、チェスを始めてみたい
' 人向けです。
'
'【説明】
'
' YKChess には、3つのモード
'
' ・プレイモード
' ・プレイヤーのタイプ、レベル選択モード
' ・棋譜再生モード
'
' があります。
'
' YOS_CHESS.PRG を実行すると `プレイモード´ に入ります。
'
' New ボタンをタッチすると `プレイヤーのタイプ、レベル選択モード´、
' Play ボタンをタッチすると `プレイモード´、
' `プレイモード´ でゲームが終了するか、Resign ボタンをタッチすると 
' `棋譜再生モード´ に入ります。
'
'■ プレイモード
' 駒を動かして、ゲームをプレイできます。
'
' 駒の移動は、駒をタッチして選択し、次に移動したいマス目をタッチしてください。
' Assistant ラジオボタンがオンなら、選択した駒の移動可能なマス目が緑色で
' 表示されます。
' Assistant ラジオボタンをタッチしてオフにすると、移動可能なマス目は表示
' されません。
'
'■ プレイヤーのタイプ、レベル選択モード
' New ボタンをタッチするとプレイヤーのタイプ、レベル選択モードに入ります。
'
' White(白), Black(黒) それぞれのプレイヤーの Type (タイプ)、
' Level (レベル) をポップアップメニューをタッチして選択できます。
'
' Type は、2種類あります。
'
' You: あなた
' Machine: コンピュータ
'
' Level (レベル)は 1 から 5 まで選択できます。YKChess では
' レベル 5 が最強です。
'
' コンピュータ同士の対戦を終了したい場合は、START ボタンを押して強制終了
' してください。
'
' Eval は、思考ルーチンの情報を表示します。
'
' Material: 
' 駒ごとに割り当てた点数の合計で評価する関数を使用します。
'
' Table:
' 駒の点数と盤上の位置に割り当てた点数の合計で評価する関数を使用します。
'
' Depth:
' 先読み数(半手)。
' チェスの1手先読みが、Depth 2 になります。
'
' Level: 2
' Eval:
' Material
' Depth: 2
'
' この場合、思考ルーチンは、1手先読みのアルファ・ベータ法で、評価関数は 
' Material 使用しています。
'
'■ 棋譜再生モード。
'
' |<
' 棋譜の最初に移動。
' <
' 半手戻す。
' >
' 半手進める。
' >|
' 棋譜の最後に移動。
'
'【ボタンの解説】
'
' New
' 新規のゲーム
'
' Play
' ゲームの開始
'
' Undo
' 1手戻す
'
' Flip
' チェス盤の反転
'
' Resign
' リザイン
' 投了
'
' Quit
' プログラムの終了。
'
' 【情報】
' Ply: half-move
' 半手数。
' 白と黒のどちらか半手動くと Ply が 1 増えます。
'
' チェスの1手は、Ply では 2 になります。チェスでは、白、黒、両方動いて
' 1手になります。
'



'
' DIALOG
'
RESTORE @DIALOG

READ NUM
FOR I=0 TO NUM-1
 READ TEMP$
 TEXT$=TEXT$+TEMP$+CHR$(13)
NEXT

DIALOG TEXT$,0

@DIALOG
DATA 3
DATA "取扱説明書は README_JA.PRG に記載されています。"
DATA "作業用プロジェクトを YOS_CHESS に変更し、'SmileBASICでプログラムを作る' から"
DATA "ファイル README_JA.PRG を読み込んで閲覧してください。"