2019/02/24

本になった私のブログ 4

約4年ぶりにブログを本にしました。今回は2014年12月30日から2018年1月31日までが対象で4冊目です。印刷は前回と同じブログ出版局にお願いしました。

Blog4

改めて1冊目からざっと目を通してみました。

まず、結構書いた内容を忘れています。

それから、印刷物だと見つけやすいのか、誤字やおかしな文章を見つけました。ブログ上では修正しました。

今年の分は新たな連載も始めたので次回に回しました。

| | コメント (0) | トラックバック (0)

2019/02/20

C# (4) ここからどう進めるか

リポジトリの最新版をローカルでビルドできるようになりました。

ここからどう進めていけばいいでしょうか。しばらく Small Basic Online をいろいろと動かしてみるのがいいかもしれません。どの程度動いているのか肌で感じるところから始めるのがいいかもしれません。それで見つかった問題点は Issues に登録していけば貢献になります。

テスト用のプログラムを作ったり、過去の Small Basic Desktop 用のプログラムを動かしてみたり、いろいろやり方はあると思います。そこで、私の場合は日本で出版された Small Basic の市販本を順番に試してみようかと思います。まず、最も最近発売された『カンタン。タノシイ。カッコイイ。小学生からのプログラミング Small Basicで遊ぼう!!』からチャレンジしてみます。

この本は4つのミッションで構成されているのですが、2つのミッションを終えたところで、以下の問題点が見つかり Issues にレポートしました。

・#44 GraphicsWindow.DrawEllipse が黒く塗りつぶされる
・#45 テキストのY座標が上部ではなくベースラインになっている
・#46 漢字などの文字列が文法エラーになる
・#47 漢字などの変数名、サブルーチン名、ラベル名が文法エラーになる

他にもブラウザやOSによって微妙に動きが違ってくるようです。まだ現象がはっきりしていないのでレポートできていないのですが、TextWindow での入力で Enter が効かなくなったり、出力の文字が重なったりするのを見ました。Small Basic Online は macOS でも動きます。まだ試していないですが、Visual Studio も macOS で動かせばビルドもできそうです。スマホでも動くのですが、入力がうまくいかない印象です。

Small Basic Online はブラウザ上で動くので、動作確認範囲も広く、より多くの方の協力が必要だと思いました。

一方でリポジトリのソースを少しずつ眺めるようにし始めたところです。全く知らないものにチャレンジするとき、まず慣れていくことが第一歩になると思います。全体の構成を把握したり、すでに修正された部分の差分を読んでみるのも理解につながっていきます。

それから、この連載の目次を作りましたのでご活用ください。

(つづく)

 

| | コメント (0) | トラックバック (0)

2019/02/15

C# (1) C# について

C# について新たな連載を始めようと思います。新しい Small Basic Online が C# ベースで作られていて、私がこの開発に参加する予定だからです。

今回はまず C# というプログラミング言語について私の知っていることをお伝えします。

インタラクティブに C# を学ぶ教材を Xamarin Workbooks (ザマリン ワークブックス)で簡単に作ることができます。このことについては以前このブログに書きました。

C# の文法は C, Java, JavaScript と似ています。これらの言語をすでに知っている方なら基本的な文法は覚えやすいと思います。

C# は主にマイクロソフトの .NET Framework (ドットネット フレームワーク)上で動作します。これは Java に似たシステムで、コンパイルすると中間言語に翻訳され、それが実行時に解釈されてシステムのライブラリを呼び出します。Small Basic も .NET 上で動作する言語で C# はその兄貴分と言えます。

C# については多くの本が出版されています。私が購入したのはオライリー発行の『プログラミング C# 第5版』です。C# の魅力についてさまざまな実例が示されています。現在はすでに第7版が出ていますのでそちらがオススメです。

インターネット上にはマイクロソフトのドキュメントサイトの「C# のガイド」に開発者向け、ITプロフェッショナル向けなどの情報がまとめられています。

Small Basic Desktop はソースは非公開ながら C# で書かれており、Extension (エクステンション:拡張機能)も C# で書くことが公式ブログなどで紹介されています。英語ですが TechNet Wiki の記事 として Extension の作り方が詳しく載っています。私自身、まだ Extension 作りにチャレンジしていないのですが、その前にこの記事を日本語訳しておきたいと思います。

C# は Windows の開発に広く使われており、さまざまなライブラリが整備されています。Small Basic Online のサーバサイドでは ASP.NET が利用され、エディターは Blazor (ブレイザー)というフレームワークが使われています。

C# の開発環境としては Visual Studio というマイクロソフトの統合開発環境 (IDE: Integrated Development Environment) が適しているでしょう。Visual Studio については次回以降で詳しく説明していきたいと思います。

(つづく)

| | コメント (0) | トラックバック (0)

2019/02/12

TypeScript (4) Git と GitHub

今回はソースコードのバージョンを管理するツール Git と GitHub について説明します。

Git はオープンなオペレーティングシステム Linux の生みの親であるリーナス・トーバルズ氏が開発したバージョン管理システムです。リポジトリと呼ばれるアーカイブにソースコードの差分を登録し、変更箇所を比較したり、元の版に戻したりすることができます。一連の変更に対するコメントも残せます。

Git はもともとはコマンド形式でしたが、今はさまざまなツールから呼び出せるようになっています。このシリーズでは次回 Visual Studio Code の中から使ってみる予定です。

Git ではローカルフォルダにあるソースコードから管理対象を選んでローカルのリポジトリにある時点のソースコードを登録します。その際にいくつかの手順があります。ざっくり言うと、まずステージングエリアに変更したソースを追加します。この状態で、リポジトリにある以前の版と今回ローカルに編集した版の差分を確認できます。関連するソースコードをステージングしたところで、コミットというコマンドによりリポジトリに差分情報を書き込みます。

そして、GitHub というツールはオンライン上でリポジトリを管理するシステムで、これにより世界中の人たちがソースコードのさまざまなバージョンを共有できるようになりました。オープンソースを支えているシステムだと言えるのではないでしょうか。

最近、たまたま本屋さんで『いちばんやさしい Git & GitHub の教本』という本を見かけたので購入しました。イラスト入りで Git や GitHub のちょっとややこしい手順が分かりやすく解説されているほか、Visual Studio Code についても触れられているので、ホームページのソースを管理したい方にもオススメです。

この本にも詳しく書いてありますが、Git は https://git-scm.com/ からダウンロードしインストールできます。GitHub は https://github.com/ でアカウントを登録して利用します。ちなみに私のアカウントは https://github.com/nonkit です。すでに Small Basic Online v1.0 をフォークという機能で複製したものが、https://github.com/nonkit/SmallBasic-Online です。

今回の Git と GitHub についての説明はここまでとします。

さて、ここで読者のみなさまにお詫びがあります。実は上記の Small Basic Online v1.0 は全面的な方針の変更があり、TypeScript ベースではなく、C# ベースで開発されることになりました。したがって、この連載も見直しをせざるを得ない状況となりました。

そこで、C# ベースの Small Basic Online については新たな連載を始めます。この連載では TypeScript ベースの Small Basic Online で多少の修正をして動作確認するところまでをあと何回かに掲載してひとまず終了したいと思います。新しいコードベースでも一部 TypeScript が使われているので、その話をこちらにまたちょこっと書くかもしれません。

とはいえ、今回の Git / GitHub や次回予定の Visual Studio Code などは知っていて損のない情報だと思いますで、引き続き読んでいただけると嬉しいです。

(つづく)

| | コメント (0) | トラックバック (0)

2017/01/07

ディープラーニング

昨日は1月5日。囲碁の日だそうです。年末年始にかけて話題になっていたネット上の棋士のうち、Master と呼ばれる無敗の棋士が、AlphaGo の改良版であることが DeepMind Technologies 社 によって明らかにされました。昨年 AlphaGo が登場して以降、囲碁AIの成長は目覚ましく、もはや人類は勝てそうにないという状況になりつつあります。とはいえ、今年はAI対人間の対局には目が離せないことになりそうで、昨年趙治勲名誉名人に1勝した Deep Zen Go がパワーアップし、井山六冠ほかと対戦するワールド碁チャンピオンシップも気になります。

私自身の C++ や Javascript による囲碁プログラムは一向に進んでいないのですが、ヒューリスティックなコードを組み合わせて作ること自体が疑問になってきているので、今年はまず、ディープラーニング(深層学習)について勉強する予定です。去年購入した『ゼロから作る Deep Learning』が教科書です。プログラミング言語としては Python が使われています。

この本を勉強しながら、ニューラルネットワークとは何かについて Small Basic のプログラムを作りながら解説できたらなと考えています。

| | コメント (0) | トラックバック (0)

2015/01/27

C++ (11) C++ の動向

先日紹介した『C++とOOPパラダイム』という本は1994年(英語版が1993年)に発行された本です。あまりにも古いので、『C++プログラミング入門 新版』(2001年発行)を入手しました。こちらはC++の基本的な機能を理解できるように詳しく書かれています。

ただこの本も結構古いです。この本を発行しているオライリー・ジャパンのサイトでC++関連の本を検索したところ、7冊発行されていて、この本が一番古いものでした。最新の本『C++クックブック』でも2006年の発行です。

英語版では『Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14』が昨年11月に発行されています。

C++ は UNIX という OS のベースになったC言語を拡張したオブジェクト指向プログラミング言語で、より機械語に近く処理は速いものの泥臭いイメージがありましたが、2000年代から新しい規格が模索されてきました。C++11 とそのマイナーチェンジである C++14 が策定され、現在 C++17 が策定中です。

この新しい C++ は Modern C++ とも呼ばれ、近年さまざまなデバイスが増えてきたこともあり、今後さらに利用者が増えるかもしれません。小さいデバイスほど C++ は威力を発揮しそうです。

Visual Studio 2013 では C++11 の機能をかなり取り込んでいます。MSDN に機能の一覧が公開されています。さらに、C++14 以降については MSDN blog (英語)に予定が掲載されています。

今作成している CBVector クラスは std::bitset というクラスとかなりの部分が重複していることが分かりました。bitset は C++11 以前からあったようです。現時点の CBVector では int の動的配列にビット情報を入れているため、この動的配列のメモリを解放するタイミングがうまくいかず、releaseMem というメソッドを作りました。

例えば (a∧b)∨c を a.and(b).or(c) と記述した場合、a.and(b) の結果が格納されているメモリは .or(c) の演算の前に解放されては困ります。JavaScript の場合、すべてのメモリは自動的に解放され、何の意識もせずにこのような記述で正常に動作していましたが、C++ ではプログラマが気をつけなければなりません。

オブジェクト指向プログラミングなので、物理的なメモリの存在はなるべく基本的なクラスの中に隠ぺいしたいところです。C++11 の shared_ptr は生のポインターとは違い参照カウンターを持っていて参照カウンターが 0 になるまでメモリが保持されます。CBVector は std::bitset と shared_ptr を組み合わせるともっと簡単になりそうです。

Modern な C++ を駆使して、より平易なプログラミングをしていきたいと思います。

| | コメント (0) | トラックバック (0)

2015/01/04

C++ (1) オブジェクト指向

囲碁プログラムの開発を JavaScript で行ってきました。今後本格的なプログラムにするにあたり、サーバーとの接続などを考えると C/C++ のほうが便利そうなので、移行することにしました。どのようなデバイスでも動くという点は犠牲になりますが、まずは他の囲碁プログラムとの接続を優先しようと思います。

囲碁プログラムの開発は C/C++ が主流で、一部 Java なども使われています。オープンソフトウェアのコードを利用することを考えると、C/C++ が無難そうです。Visual Studio Community 2013 がリリースされたこともあり、Visual C++ の開発環境を使おうと考えています。

ところで、C++ と言えば C言語にオブジェクト指向の考え方を導入した言語です。実際の囲碁プログラムではオブジェクト指向はあまり意識されていないようなのですが、Java や JavaScript のプログラミングを経験した今、改めてオブジェクト指向とは何なのか、おさらいしてみようと思います。

教科書は B.R.ラオ著 『C++とOOPパラダイム』(マグロウヒル出版)です。この本はその昔オブジェクト指向プログラミングとは何かを知るために購入したものですが、当時は全く理解できませんでした。

この本では単に C++ の説明するのではなく、オブジェクト指向の設計~プログラミング~テストの考え方がどのように C++ に反映されているか(あるいはされていないか)を説明しています。したがって C++ にはない永続性、委託、総称といった考え方についても説明されています。

オブジェクト指向にクラスという考え方があります。これはデータ型をデータだけではなくコードにも拡張した考え方です。データの型に縛られない JavaScript にはクラスという考え方がありません。この本を読んでいると、それぞれの言語の設計思想がなんとなく分かってきます。

C++ は型づけられていて、クラスに基づいたオブジェクトしか作れません。

囲碁のプログラムでは、碁盤、碁石、局面、棋譜、局面を表すグラフなど、オブジェクトとして扱いやすいものが結構あります。特にグラフをベクトルで表した場合、ベクトルや行列の演算に演算子のオーバーロードの機能を使うとコードがすっきりしそうな予感します。

このような感じで、C++ の機能をうまく活かした囲碁プログラムを作っていこうと思います。この新シリーズの目次をこちらに用意しました。ご利用ください。

| | コメント (0) | トラックバック (0)

2014/12/30

続々、本になった私のブログ。

以前の記事『続、本になった私のブログ。』にトラックバックしています。

ココログ出版のサービスは終了してしまったのですが、ブログ出版局という外部のサービスを利用して前回の続きをまた本にしました。

たかはしのんき年月記3

ココログの管理ページでブログをテキストに落とし、それをブログ出版局にアップロードします。操作はココログ出版とそれほど変わりません。まず電子版で確認するのですが、そこまでなら無料でできます。

1年と5か月の期間で98ページでした。ココログ出版のものより少し字が小さいせいでしょうか。もしかしたらココログのペースが落ちたのかもしれません。

| | コメント (0) | トラックバック (0)

2014/02/21

プログラミング講座(144) Bスプライン曲線

Small Basic Forum の2月のチャレンジにある「スプライン曲線を描け」という問題に挑戦しました。参考にした教科書は学生時代に購入したと思われる『アルゴリズムとプログラムによるコンピュータ グラフィックス』(全2巻)です。

この中にBスプライン補間による曲線の描き方について、PIDGIN ALGOL という言語のプログラム付きで解説があったので、Small Basic に移植しました。結構デバッグに手こずりました。本のプログラムリストの中で I を 1 と書いてあるバグを見つけたりもしました。

できたプログラムは WWV142 で発行しました。マウスでクリックした10個の点を標本点とする3次のBスプライン曲線を描くプログラムです。

図140 3次Bスプライン曲線
【図140 3次Bスプライン曲線】

以前、ト音記号を描くというプログラムに挑戦したときに、曲線を描くプログラムがほしいと思ったのが「スプライン曲線を描け」という問題を出題したきっかけです。このプログラムを応用して、Small Basic でもいろいろな図形を描けるようにしていきたいと思います。

| | コメント (0) | トラックバック (0)

2013/10/24

JavaScript (28) 『JavaScript 第6版』

JavaScript の書籍をもう1冊紹介します。

オライリー社の『JavaScript 第6版』です。プログラミングの本といえばオライリーの動物の表紙をまず思い浮かべる方も多いと思います。この本があれば一通り JavaScript という言語が理解できるようになっています。データの型、演算子の優先順位、変数のスコープ(有効範囲)、オブジェクト、配列、正規表現、Javaプログラムとの連携、フォーム、JSONエンコードされたデータなど、細かいところまで説明されています。

実は私が持っているのはこの本の第5版なので、HTML5、サーバーサイド JavaScript、jQuery ライブラリについてはまだ書かれていません。HTML5が有望視されている今、やはり最新版を購入されることをお奨めします。

ちなみにこの本の表紙はサイですが、Aptana Studio 3 にも「JavaScript コンソール」として組み込まれていて Java 環境で動作する JavaScript のシステム「Rhino(ライノ)」はこのサイの絵から命名されたそうです。

| | コメント (0) | トラックバック (0)

より以前の記事一覧