2021年7月7日水曜日

科学に使えるシンプルな3Dフォーマットを作りました。

  タイトルのまんまですが、シンプルな3Dフォーマットと、それを実装したFlutterパッケージ(https://pub.dev/packages/simple_3d)を作りました。

名前もそのまんま、Simple 3D Format」です。

作ろうと思ったきっかけは、in silicoで創薬だとか化学合成だとかをやろうとした場合に、計算だけなら良いんですが、誰かに説明するための図やアニメーションにするのが結構難しいことに気づいたからです。

3Dの世界にも様々なフォーマットがあるのですが、既存のものは正直、科学用途としては使い勝手が悪い。多機能過ぎるんです。要らないパラメータが大量にあって使いづらいし、バイナリを含んでいるためテキストエディタで開けないとか、実行環境を選ぶとか。かといって科学専用のものは表現力が足りない・・・、ということで、仕様から新しく作ったという次第です。

まだベータなので、色々足りなかったり細かい調整も行っています。

ある程度安定版になった時に、3D表示用のキャンバスも公開予定なので、合わせて使えば3D表示が超簡単になると思います。Flutterで、各OS固有の機能とかも使わない予定なので、どんなOSでも表示出来るようになりそうです。

2018年10月7日日曜日

学生のプログラミング教育について

2020年から学校でプログラミング教育を取り入れるらしいので軽く調べてみたところ、カリキュラムにかなり問題があるように思えたので久しぶりにブログに投稿します。。
まあ、僕が書いても社会的にはほぼ意味ないだろうなと思いつつ、社員の教育とかでも要るし、プログラミングの塾とかも始めるかもしれないんで、忘れないため、まとめるためにも。

国の出している概要を読んだのですが、正直なところ内容が20年以上前の”コンピュータ”教育になっていると思います。プログラミングではないです。これらは今必ず身につけているのが前提です。きっちり必須事項として色々定義しておかないと、教える先生によってとんでもない差が出かねないです。人材が足りませんし・・・。

はっきり言って、論理的思考力とか使い方とかは確かに要るんだけれども、現代で必要なのはそんなレベルじゃないです。

現代で必須になっているのは、

1.プログラムコードの再利用を考え、設計する力
2.プログラムコードの管理方法の習得
3.プログラムに置き換えることによる仕事の自動化

この3つです。この3つが無いと、コンピュータを利用して生産性を上げることを考えた時に大きな差が出ます。つまり、習得していないと競争に負けます。
各項目について、個別に見ていきましょう。

1.プログラムコードの再利用を考え、設計する力
現代におけるプログラムコードというのは、基本的に1回書けば、同じ処理はそのコードを呼び出せば達成できるようになっています。
というか、なっているべきであり、そう設計しなければなりません。
つまり、2度と同じ作業をする必要はありません。

重要なのでもう一度言いますが、「2度と同じ作業をする必要はありません」

このことが知識として無かったらどうなるでしょうか。
常に毎回同じようなコードを書くことになり、もの凄い時間的ロスが発生します。
これは、2.の習得も必要です。
何故なら、どこに書いたか分からなかったらまた同じコードを書くことになりますから。
そして、以降の3.にあるようにプログラムで仕事を自動化することができるため、この設計でプログラムが作られたのであれば、その仕事は二度と人間が行わなくてよくなります。
仕事が恐ろしいまでに高速化され”続ける”のです。1回じゃないんです。仕事をプログラム化する度に自動化されますから。
市場の要求レベルの上昇と共にやらなければならない仕事は増え続けますが、これをカバーするために継続的に高速化し続けられるんです。
当然のように気合と根性ではどうにもならない差が生まれ、さらにそれは時間経過で広がっていきます。

2.プログラムコードの管理方法の習得
プログラムコードというのは、数式っぽいですが機械を動かすための命令書ですので、どちらかというと文章的な要素が強いものです。ようは国語、英語、プログラミング言語ということです。
プログラミングの習得は1つの言語の習得とほぼ同じです。何故か小学校でコーディングはしないと概要に書いてあったのですが、コーディングはやらないと駄目です。
むしろ、やるのは早い方がいいです。言語ですから。
そして、文章なので誤字や文脈の修正が発生します。大人の方なら、マイクロソフトのWordやグーグルのDocsで、変更履歴を記録したり、見たりしたことがあるのではないかと思いますが、プログラミングでもこれが必要です。

最近、マイクロソフトがGitHubを約8200億円で買収しましたが、ここはざっくり言えばプログラムコードの変更を管理するサービスをやっているところです。どれだけ重要か、買収金額を見れば分かりますよね。
他にも、脚注やカッコ書きも「コメント」として書く必要があります。
プログラムコードは文章なので、後で他の人に分かるように、他の人が使える・アレンジ出来るように書かなければいけません。他の人と書いてますが、これはコード内容が記憶に無い人のことを指すので、1年後の自分でも分かるように書きます。
後で修正したり再利用することを常に考える必要があるのです。
扱う量が膨大になってくると、その管理のための対策も必要です。これは、まさに今世界が直面している問題の1つです。

3.プログラムに置き換えることによる仕事の自動化
最後は自動化です。これはそのまま生産性に直結します。これは題名そのままの意味もありますが、問題の発見・解決能力を鍛える必要があるということも意味します。
どこを最適化すると全体が最も良くなるのか見極める力、そしてリスク管理も覚える必要があります。
これは結構高度で、大学の経営学部なんかでやっている内容を一部含みますが、部分的に抽出して、中学生ぐらいからやるべきと思います。頭の良い子なら、実生活ですぐに応用するでしょう。
今のプログラムによる自動化はデジタルデータに対して行うものが主ですが、これからは多種多様なロボットも生まれてくるでしょうから、自動化できる範囲は現実世界の実体のあるものへどんどん広がっていくでしょう。デジタルデータのみの自動化でも凄まじい差が出るのに、今後を考えるととんでもないことになります。このスキルは必須だと思います。

僕が実感している範囲で、現代で必須のプログラミングスキルを書いてみたのですが、いかがでしたでしょうか。
「それは違う」とか、「もっとこういうスキルも要る」とか、色々なご意見がでそうですが、もしよろしければお気軽にコメントしてくださいませ(返信できるかは分かりませんが。。)。ではでは。この内容が誰かの役に立つことを祈ります。。

2016年12月20日火曜日

「Google Play デベロッパー ポリシー違反に関わる警告」のメールが来た

なんか、この前のGoogle側の改定から、カメラとかマイクにアクセスする機能をアプリが搭載している場合、「ストア」と「アプリ内」の両方にプライバシーポリシーのリンクを張らないと駄目らしい。そして、該当する機能を使用する場合は目立つ方法でユーザーに表示しないといけないというルールが追加されてる。

ただ、この「要対応」メールが来たのはJ--言語のランタイム(α版)なため、どう対応したものか非常に困る。ひとまずはアプリ内にプライバシーポリシーのリンクを追加して、カメラとマイクの権限は削除した。組み込み版だけこの機能をサポートする感じになるかも。

2016年10月22日土曜日

App Engineでパースエラー。

googleのクラウド環境(App Engine)で謎のエラーが出ると思ったら、どうもコメントを日本語で入れてたのが原因っぽい。割とよくあるけど、サーバー側のxmlとかに日本語入れると問題が起こるっていう。。

2016年9月14日水曜日

プログラミング言語J--(Jmm)

このところ新しいプログラミング言語を作っていたのですが、大体形になったので今週α版を関係各所に試用してもらうことに。一般のβ公開はまだですが、ちょっとだけ情報を公開したいと思います。

作成した言語の名前はJ--(ジェイマイナスマイナス。マイナス記号がマズイ場合はJmmと略します)です。これはインタプリタ型のスクリプト言語(静的型付け)です。対応OSは今のところAndroidのみ(アプリとしてランタイム、または組み込み版を提供)ですが、そのうちLinux版とかも出すかも。

オブジェクト指向では無く、関数などの作り方が普通のプログラミング言語とかなり異なります。人工知能から利用しやすいように作っているため、既存の言語とは色々異なる部分があって最初戸惑うかもしれません。

基本型のBaseType、変数型のVarType、コンテナのStructureTypeという3つの大きなくくりがあり、普通の変数はVarTypeです。

BaseTypeは大きく分けるとActor、Order、Fnの三種類です。

例えるならActorがバイト君、Orderが命令書、Fnは料理・・・?。

和風に例える方が分かりやすいかも。
Actorが式神。Orderが命令、Fnは呪符(必ず一定の効果を出し、副作用が無い)。
Actorが忍者。Orderが命令の巻物、Fnは忍術。とかの方が海外の方にはいいか。

この言語は基本的にマルチスレッド(最小で3スレッド)で動きます。画面操作と通常の演算を最初から別スレッド(実装によるが、想定はCPUの別々のコア)で動かしているため、アプリの利用者側からするとサクサクです。このため、まだ言語自体の処理速度は遅いのですが、実用上は気にならないと思います。プログラマーはこの3スレッドについて意識することはありません。ランタイムが処理を勝手に分離してくれます。

また、Actorは固有の領域を持つスレッドであるため、いくつ並列で動かしても基本的にメモリを壊しません。IOもランタイムレベルで管理されているため、入力と出力が同時に起こらないようになっていたり、入出力が循環して無限コピーになっていたら例外を出すなど、他の言語でありがちなミスのいくつかはそもそも起きないようになっています。このため、かなり安全に並列処理できます。今はマルチコア時代なので、上手く使えば爆速です。



・・・とりあえず今出せる情報はこんなものかな。では恒例のやつを。


(Sys@s).log("J--", "Hello, world!")



これで、AndroidのLogcatにJ--タグで「Hello, world!」が表示されます。@マークは他の言語でいうところのnewですね。J--は変数型@変数名で変数を新しく定義した後、その部分に変数が残るので、そのまま.log()などのコマンドを呼べます。J--ではvoid(戻り値が無い)なコマンドが「存在しない」ため、基本的にどのコマンドも連鎖できます。画面の方にトースト出力も同時にしたい場合は以下のように

(Sys@s).log("J--", "Hello, world!").toast("Hello, world!", true)

でトーストも同時に出せます。logやtoastの戻り値はs自身となっています。早い話が、レイアウトもこのように作れるので、かなり素早くプログラミングできます。IT系スタートアップには便利ではないでしょうか。

ある程度バグが無くなってきたら、ストアの方でランタイムアプリのβ版を出したいと思いますー。



※2016_9_27にちょっと修正しました。J--の動作は最小2スレッドでは無く3スレッドに変更されました。現在、ユーザーのタップなどに対するコールバックも専用スレッドで処理されるようになっています。これにより、最新のα版ではコールバックで重い処理を行ってもANRが発生しなくなりました(一時停止時、復帰時、及びアプリ終了時の逐次呼び出しが必須のコールバックを除く)。

※2017_2_7の修正で、Fx型をFn型に改名しました。

2016年7月24日日曜日

GooglePlayServiceを最新版(ver31)にするとEclipseで使えない。

タイトルのまんま。

GooglePlayServiceをアップデートしてver31にしたらEclipseで使えない状態だった。これは、GooglePlayServiceをプロジェクトとしてインポート出来なくなるため。

以前のバージョンにロールバックして解決したけど、段々Eclipse勢の肩身が狭くなってきてる。。

確かにバグるし重いし、だいぶアレなソフトではあるんだけど、ショートカットの使いやすさとか、慣れとか、メモリアナライザとか、Android開発だとIPAが出してるセキュリティチェック用のツールとかもあって便利なんですよね・・・。

他のIEDに変えたらしばらくはコーディング速度がかなり落ちるだろうし、出来れば変えたくないな。。。

2016年1月30日土曜日

マイデバイスを公開

Androidアプリ、「マイデバイス」を公開しました。


インストールすることで、ノートパソコン並のファイル管理機能を
スマホ・タブレットで使えるようになります。

使い方は非常にシンプルで

PCのダブルクリック = タップ
PCの右クリック = ロングタップ

です。

デスクトップ、ごみ箱、お気に入りを搭載し、普通のパソコンのような使用感を目指しました。
デザインはタッチスクリーン(特にスマホでの片手操作)に最適化してますが。。

これと、グーグルの出しているドキュメントやスプレッドシートなどを入れておけばオフィス系
ファイルもノートパソコンのようにオフラインで編集可能(2016年1月30日時点)です。
特に、デスクトップで作業すると連携がスムーズです。

また、このアプリはパソコンのものと近い機能を持つメモ帳が付属しています。
アプリ内のファイル作成ボタンですぐ作れ、テキストファイル系であればたいてい編集できます。
HTMLやXMLなんかも編集することが可能ですし、
もちろん、スクリプト言語でも問題ありません。

簡易ですがZip解凍・圧縮機能もありますので、編集した書類なんかをまとめてメール送信したり、クラウドストレージへ送ることが可能です。
もちろん、複数選択したファイルをまとめてメール送信することもできます。
一つ一つファイル添付する必要はありません。

とまあこのように、マイデバイスは
パソコンの基本的なファイル管理機能をまとめて突っ込んだアプリとなっています。
これからの時代はスマホがパソコンの本体になり、Miracastなんかで
大画面操作するようになると思われます。

ツール系アプリは、日本はアメリカに思いっきり負けてますから
なんとか頑張りたいところです。。