12_Inou/TouchUIPrograming
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[12_Inou]]
* Touch UI Programing [#m182ee7f]
*「タッチUIのプログラミング環境が必要」 [#k12710bf]
** 仮説:「今後3年間でキーボード端末は駆逐される」 [#z29...
- 根拠:Windows8、iPad等、タブレット端末は増える一方。
- 小仮説:タブレット端末のカジュアル性(いつでもどこでも...
-- 根拠:初代iPadを一年半使ったことによる経験。
** 仮説:「日常的にプログラミングに触れる必要性の増大」 [...
- 根拠:安価なスマートフォン「FirefoxOS」の普及。(このOS...
- 根拠:ユビキタス社会が実現するとプログラミングの必要性...
- 根拠:小中学校へのプログラミング教育の普及(プログラミ...
- 問題点:「プログラミング言語の学習コストよりも環境の構...
- 根拠:中学校のころLEGO Mindstormを触った経験。
-- 根拠:楽譜はプログラミング言語とほぼ同じ機能を持ってい...
--- 根拠:小学生でも楽譜読めるのにプログラミング言語が読...
** 仮設:「プログラム実行環境はWebへ移る」 [#xae20375]
- 根拠:HTML5の普及
- 根拠:マルチデバイス対応の解決策としてのブラウザで動くW...
** 結論 [#b32f6a63]
- 仮説:「今後3年間でキーボード端末は駆逐される」
- 仮説:「プログラミングの必要性は増え続ける」
- 仮説:「日常的にプログラミングに触れる必要性の増大」
-- 故に「タッチUIのプログラミング環境が必要」である。
* タッチUIのプログラミング環境とは [#b657bb59]
** 要件 [#z4280276]
+ プログラミングにキーボードが不要、あるいはほとんど使わ...
-- バーチャルキーボードによるコーディングは難しい。
--- 特殊文字が打てない。
-- カーソルの移動が困難。
--- コピペですら困難。
** つまり [#m2c1b02b]
+ プログラミングのコード入力はタッチUIが基本
-- キーボードは補助的なもの
** 問題点 [#p164c476]
- タッチUIにするにはIDEが必要
-- CUIの時代にはキーボードに特化したプログラミング環境、...
-- GUIの時代にはキーボードとマウスを併用したプログラミン...
-- TouchUIの時代にはタッチ操作に特化したプログラミング環...
--- マウス主体となるグラフィカルプログラミング環境はマウ...
--- が、今後タッチUIの普及で復活する見込みがある
** これまでの状況 [#y33ce311]
- Editor
-- Vim
-- Emacs
-- Notepad++
-- SublimeText2
- IDE
-- VisualBasic
-- Xcode
-- Eclipse
- [[ビジュアルプログラミング言語 - Wikipedia:http://ja.wi...
-- LEGO Mindstorm
--- ブロック方式。逐次処理向け。
-- PureData
--- 矢印方式。関数型向け。
- スマホ、タブレット
-- Textastic
--- 補助キーボード付きエディタ。超便利。けれどやはり無理...
-- CoffeeAtOnce
-- Processing
-- [[マイクロソフトの「TouchDevelop」:http://www.publicke...
- Webアプリ
-- jsdoit
-- [[jsFiddle:http://jsfiddle.net/]]
-- [[Code9leap:http://code.9leap.net/]]
--- 上記3つはどれもHTML+CSS+JSをWeb上で編集してプレビュ...
-- [[前田ブロック:https://sites.google.com/site/purogi201...
--- GUI。専用言語
-- [[マイクロソフトの「TouchDevelop」:http://www.publicke...
--- GUI。専用言語。正直先を越された。
* othres [#f28a67ba]
-- [[スクイークEtoys:http://etoys.jp/squeak/squeak.html]]
-- [[前田ブロック:https://sites.google.com/site/purogi201...
-- [[blocky:https://code.google.com/p/blockly/]]
-- [[Scratch:http://scratch.mit.edu/]]
-- [[ビスケット:http://www.viscuit.com/]]
-- [[プログラミン:http://www.mext.go.jp/programin/]]
-- [[タッチでHTML5アプリが作れるTouchDevelop超入門:http:/...
-- [[jsmaker:http://jsmaker.com/jsmaker/]]
-- [[snap!Build Your Own Blocks:http://byob.berkeley.edu/]]
-- [[kodu game lab:http://fuse.microsoft.com/projects/kod...
-- [[MIT App Inventor:http://appinventor.mit.edu/explore/]]
-- [[Minibloq:http://blog.minibloq.org/]]
-- [[stencyl:http://www.stencyl.com/]]
-- [[starlogo:http://education.mit.edu/starlogo/]]
-- http://jp.franz.com/base/seminar/2010-11-19/seminar10-...
-- http://togetter.com/li/394716
-- [[GTEdit:http://www-ui.is.s.u-tokyo.ac.jp/~hara2001/re...
-- [[Lisping:http://slidetocode.com/]]
--- まったく同じもの。詰み。→違った
-- [[VPL ビジュアルプログラミング言語:http://matome.naver...
-- [[関数型言語の図解:http://qiita.com/items/008c8a3859d4...
-- [[データフロー型のプログラミング言語を作ってみる:http:...
-- [[関数型とデータフロー:http://modegramming.blogspot.jp...
-- [[L-System:http://ja.wikipedia.org/wiki/%E3%83%AA%E3%8...
-- [[項書き換え:http://ja.wikipedia.org/wiki/%E9%A0%85%E6...
-- [[「tree programming」画像検索:https://www.google.co.j...
-- [[「data flow」画像検索:https://www.google.co.jp/searc...
* ぼくの提案 [#ra0f482c]
** ぼくが求めているもの [#v4908d23]
+ あらゆるデバイスで開発、あらゆるデバイスで実行。
-- Web上で開発、Web上で実行。
+ HTML+CSS+JSというWebアプリで完結した開発環境。
-- 環境の導入はブラウザでサイトにアクセスするだけ。
+ タッチパネルでも、キーボードでも、ゲームパッドでも快適...
-- あらゆるデバイスに対して最適
+ ゆるふわな専用言語(Processing等)ではなく、ローレベルA...
-- JavaScriptと等価な言語。
+ タッチUIに対応しつつも、キーボードでも編集可能な言語
** 上記条件をすべて満たしている「Lisp」 [#mde7a6a8]
[[LISP - Wikipedia:http://ja.wikipedia.org/wiki/LISP]]
- 最古参にして現代の言語に負けない(というかもう絶対に負...
- Lispに特徴的な(((括弧)))を多用したコードが、タッチUIに...
-- 括弧を単位としているので、それをブロックと見なせる。
--- 括弧ごとドラッグ&ドロップ=コピペ可能。
- JavaScriptはLispを元に作られた。
-- Lispのほぼすべての機能をJavaScriptは持っている。
--- JavaScriptとLispの相互変換は容易。
** 先行研究 [#x8f3b78e]
- ClojureJS
-- Lisp -> JavaScriptの唯一の実装。
-- でもJVMで動く言語を無理やりJSに当てはめているだけなの...
--- 新言語開発の必要性
* プログラミング言語「Pebble(仮)」 [#n1aa8319]
- [[できました:https://github.com/legokichi/pebble]]
** デモ [#f82ffd18]
(= fizzbuzz (fn (n)
([1..n] 'map (fn (i)
(if
(=== (% i 15) 0) "fizzbuzz"
(=== (% i 5) 0) "buzz"
(=== (% i 3) 0) "fizz"
i)))))
(console 'log (fuzzbuzz 10))
これが
var fizzbuzz = function(n){
return (function(a, b){
var __ary = [], __i;
for(__i=a; __i<=b; __i++){
__ary.push(i);
}
return __ary;
}(1, n)).map(function(i){
return (function(){
if(i%15===0){
return "fizzbuzz";
}else if(i%5===0){
return "buzz";
}else if(i%3===0){
return "fizz";
}else{
return i;
}
}());
});
};
console.log(fizzbuzz(10));
こうなる。おわかりいただけただろうか。
** Lispを使うことの利点 [#w2925054]
- Lispはその括弧の多さで嫌われるが、括弧があることによっ...
- Lispによる簡潔な記述でコード量が削減できる
-- JavaScriptもLispを元に作られているので柔軟でなんでもで...
- Lispの最大の利点「マクロ」が利用できる。
-- マクロ使えるJSとか世間に非常に必要とされているのでこれ...
** Lispを使うことの欠点。 [#a78f7c8c]
- Lispの学習コスト。
-- 解決策:実体はJavaScriptなのでJavaScriptの知識をそのま...
- Lispの(関数名 引数)という独特の記述は慣れるまでは見にく...
-- 解決策:慣れれば生JavaScriptを読むよりもはるかに読みや...
- Lispの「マクロ」には専門の知識が必要
-- 解決策:excelの「マクロ」と一緒。使える人が使えばよい。
* 開発工程 [#deb012ee]
- 12月
-- Pebbleの仕様決定:済
-- parserの開発:開発中
-- compilerの開発:開発中
-- TouchUIの仕様決定
-- REPLの開発
- 1月
-- 試作の発表
-- debuggerの開発
* 今後の野望 [#j2e98309]
- ソーシャルコーディングシステム
-- 関数を登録しシェアできるシステム。
-- 「引数の型と返り値の型が一致する関数」あるいは「単体テ...
++ Aさんは「これを入力したら、これを出力する関数」がほし...
++ 「これ作って!」とWebサービスにポスト。
++ そのまま開発を続ける。
++ すると、このアプリ使っている他の人にパズル形式で出題さ...
++ パズル好きで暇をもてあましているBさんがサクっと実装。
++ Aさんのコードにはいつの間にかそのコードが実装されてい...
--- Idle状態の生体CPUに手伝ってもらえる!!!すげぇ!
- P2P通信
-- 正確には「サーバーサイドプログラミングを必要としない」...
-- 時代に逆行しているように見えるが、サーバー管理コストが...
--- ぼくみたいな弱小シュミグラマには必要。
- 多画面多デバイス同時開発
-- エディタ画面はこのノートPC、
-- 実行画面はこのスマホ、
-- マニュアル等のブラウジングはこのデスクトップPC
-- デバッグ画面もこのデスクトップPC
--- たくさんのデバイスの画面を最大限に活用する仕組み。
- 並列プログラミングの推奨
-- 時代はメニーコア。
-- データフロープログラミングはVPLに向いていて、
-- さらに関数型に近いので並行性も高い。
- クラウドコンピューティング
-- モバイル端末で重い処理が必要になったとき、通信速度が十...
-- クラウド上の超高速マシン、あるいは充電中の他端末に計算...
- 手続き型、オブジェクト指向、関数型、データフロー、
-- それぞれの得意分野で得意分野の言語を使う。
* 感想、要望等 [#wff09d55]
- なんかあればここに -- [[12_Inou]] &new{2012-12-27 (木) ...
#comment
終了行:
[[12_Inou]]
* Touch UI Programing [#m182ee7f]
*「タッチUIのプログラミング環境が必要」 [#k12710bf]
** 仮説:「今後3年間でキーボード端末は駆逐される」 [#z29...
- 根拠:Windows8、iPad等、タブレット端末は増える一方。
- 小仮説:タブレット端末のカジュアル性(いつでもどこでも...
-- 根拠:初代iPadを一年半使ったことによる経験。
** 仮説:「日常的にプログラミングに触れる必要性の増大」 [...
- 根拠:安価なスマートフォン「FirefoxOS」の普及。(このOS...
- 根拠:ユビキタス社会が実現するとプログラミングの必要性...
- 根拠:小中学校へのプログラミング教育の普及(プログラミ...
- 問題点:「プログラミング言語の学習コストよりも環境の構...
- 根拠:中学校のころLEGO Mindstormを触った経験。
-- 根拠:楽譜はプログラミング言語とほぼ同じ機能を持ってい...
--- 根拠:小学生でも楽譜読めるのにプログラミング言語が読...
** 仮設:「プログラム実行環境はWebへ移る」 [#xae20375]
- 根拠:HTML5の普及
- 根拠:マルチデバイス対応の解決策としてのブラウザで動くW...
** 結論 [#b32f6a63]
- 仮説:「今後3年間でキーボード端末は駆逐される」
- 仮説:「プログラミングの必要性は増え続ける」
- 仮説:「日常的にプログラミングに触れる必要性の増大」
-- 故に「タッチUIのプログラミング環境が必要」である。
* タッチUIのプログラミング環境とは [#b657bb59]
** 要件 [#z4280276]
+ プログラミングにキーボードが不要、あるいはほとんど使わ...
-- バーチャルキーボードによるコーディングは難しい。
--- 特殊文字が打てない。
-- カーソルの移動が困難。
--- コピペですら困難。
** つまり [#m2c1b02b]
+ プログラミングのコード入力はタッチUIが基本
-- キーボードは補助的なもの
** 問題点 [#p164c476]
- タッチUIにするにはIDEが必要
-- CUIの時代にはキーボードに特化したプログラミング環境、...
-- GUIの時代にはキーボードとマウスを併用したプログラミン...
-- TouchUIの時代にはタッチ操作に特化したプログラミング環...
--- マウス主体となるグラフィカルプログラミング環境はマウ...
--- が、今後タッチUIの普及で復活する見込みがある
** これまでの状況 [#y33ce311]
- Editor
-- Vim
-- Emacs
-- Notepad++
-- SublimeText2
- IDE
-- VisualBasic
-- Xcode
-- Eclipse
- [[ビジュアルプログラミング言語 - Wikipedia:http://ja.wi...
-- LEGO Mindstorm
--- ブロック方式。逐次処理向け。
-- PureData
--- 矢印方式。関数型向け。
- スマホ、タブレット
-- Textastic
--- 補助キーボード付きエディタ。超便利。けれどやはり無理...
-- CoffeeAtOnce
-- Processing
-- [[マイクロソフトの「TouchDevelop」:http://www.publicke...
- Webアプリ
-- jsdoit
-- [[jsFiddle:http://jsfiddle.net/]]
-- [[Code9leap:http://code.9leap.net/]]
--- 上記3つはどれもHTML+CSS+JSをWeb上で編集してプレビュ...
-- [[前田ブロック:https://sites.google.com/site/purogi201...
--- GUI。専用言語
-- [[マイクロソフトの「TouchDevelop」:http://www.publicke...
--- GUI。専用言語。正直先を越された。
* othres [#f28a67ba]
-- [[スクイークEtoys:http://etoys.jp/squeak/squeak.html]]
-- [[前田ブロック:https://sites.google.com/site/purogi201...
-- [[blocky:https://code.google.com/p/blockly/]]
-- [[Scratch:http://scratch.mit.edu/]]
-- [[ビスケット:http://www.viscuit.com/]]
-- [[プログラミン:http://www.mext.go.jp/programin/]]
-- [[タッチでHTML5アプリが作れるTouchDevelop超入門:http:/...
-- [[jsmaker:http://jsmaker.com/jsmaker/]]
-- [[snap!Build Your Own Blocks:http://byob.berkeley.edu/]]
-- [[kodu game lab:http://fuse.microsoft.com/projects/kod...
-- [[MIT App Inventor:http://appinventor.mit.edu/explore/]]
-- [[Minibloq:http://blog.minibloq.org/]]
-- [[stencyl:http://www.stencyl.com/]]
-- [[starlogo:http://education.mit.edu/starlogo/]]
-- http://jp.franz.com/base/seminar/2010-11-19/seminar10-...
-- http://togetter.com/li/394716
-- [[GTEdit:http://www-ui.is.s.u-tokyo.ac.jp/~hara2001/re...
-- [[Lisping:http://slidetocode.com/]]
--- まったく同じもの。詰み。→違った
-- [[VPL ビジュアルプログラミング言語:http://matome.naver...
-- [[関数型言語の図解:http://qiita.com/items/008c8a3859d4...
-- [[データフロー型のプログラミング言語を作ってみる:http:...
-- [[関数型とデータフロー:http://modegramming.blogspot.jp...
-- [[L-System:http://ja.wikipedia.org/wiki/%E3%83%AA%E3%8...
-- [[項書き換え:http://ja.wikipedia.org/wiki/%E9%A0%85%E6...
-- [[「tree programming」画像検索:https://www.google.co.j...
-- [[「data flow」画像検索:https://www.google.co.jp/searc...
* ぼくの提案 [#ra0f482c]
** ぼくが求めているもの [#v4908d23]
+ あらゆるデバイスで開発、あらゆるデバイスで実行。
-- Web上で開発、Web上で実行。
+ HTML+CSS+JSというWebアプリで完結した開発環境。
-- 環境の導入はブラウザでサイトにアクセスするだけ。
+ タッチパネルでも、キーボードでも、ゲームパッドでも快適...
-- あらゆるデバイスに対して最適
+ ゆるふわな専用言語(Processing等)ではなく、ローレベルA...
-- JavaScriptと等価な言語。
+ タッチUIに対応しつつも、キーボードでも編集可能な言語
** 上記条件をすべて満たしている「Lisp」 [#mde7a6a8]
[[LISP - Wikipedia:http://ja.wikipedia.org/wiki/LISP]]
- 最古参にして現代の言語に負けない(というかもう絶対に負...
- Lispに特徴的な(((括弧)))を多用したコードが、タッチUIに...
-- 括弧を単位としているので、それをブロックと見なせる。
--- 括弧ごとドラッグ&ドロップ=コピペ可能。
- JavaScriptはLispを元に作られた。
-- Lispのほぼすべての機能をJavaScriptは持っている。
--- JavaScriptとLispの相互変換は容易。
** 先行研究 [#x8f3b78e]
- ClojureJS
-- Lisp -> JavaScriptの唯一の実装。
-- でもJVMで動く言語を無理やりJSに当てはめているだけなの...
--- 新言語開発の必要性
* プログラミング言語「Pebble(仮)」 [#n1aa8319]
- [[できました:https://github.com/legokichi/pebble]]
** デモ [#f82ffd18]
(= fizzbuzz (fn (n)
([1..n] 'map (fn (i)
(if
(=== (% i 15) 0) "fizzbuzz"
(=== (% i 5) 0) "buzz"
(=== (% i 3) 0) "fizz"
i)))))
(console 'log (fuzzbuzz 10))
これが
var fizzbuzz = function(n){
return (function(a, b){
var __ary = [], __i;
for(__i=a; __i<=b; __i++){
__ary.push(i);
}
return __ary;
}(1, n)).map(function(i){
return (function(){
if(i%15===0){
return "fizzbuzz";
}else if(i%5===0){
return "buzz";
}else if(i%3===0){
return "fizz";
}else{
return i;
}
}());
});
};
console.log(fizzbuzz(10));
こうなる。おわかりいただけただろうか。
** Lispを使うことの利点 [#w2925054]
- Lispはその括弧の多さで嫌われるが、括弧があることによっ...
- Lispによる簡潔な記述でコード量が削減できる
-- JavaScriptもLispを元に作られているので柔軟でなんでもで...
- Lispの最大の利点「マクロ」が利用できる。
-- マクロ使えるJSとか世間に非常に必要とされているのでこれ...
** Lispを使うことの欠点。 [#a78f7c8c]
- Lispの学習コスト。
-- 解決策:実体はJavaScriptなのでJavaScriptの知識をそのま...
- Lispの(関数名 引数)という独特の記述は慣れるまでは見にく...
-- 解決策:慣れれば生JavaScriptを読むよりもはるかに読みや...
- Lispの「マクロ」には専門の知識が必要
-- 解決策:excelの「マクロ」と一緒。使える人が使えばよい。
* 開発工程 [#deb012ee]
- 12月
-- Pebbleの仕様決定:済
-- parserの開発:開発中
-- compilerの開発:開発中
-- TouchUIの仕様決定
-- REPLの開発
- 1月
-- 試作の発表
-- debuggerの開発
* 今後の野望 [#j2e98309]
- ソーシャルコーディングシステム
-- 関数を登録しシェアできるシステム。
-- 「引数の型と返り値の型が一致する関数」あるいは「単体テ...
++ Aさんは「これを入力したら、これを出力する関数」がほし...
++ 「これ作って!」とWebサービスにポスト。
++ そのまま開発を続ける。
++ すると、このアプリ使っている他の人にパズル形式で出題さ...
++ パズル好きで暇をもてあましているBさんがサクっと実装。
++ Aさんのコードにはいつの間にかそのコードが実装されてい...
--- Idle状態の生体CPUに手伝ってもらえる!!!すげぇ!
- P2P通信
-- 正確には「サーバーサイドプログラミングを必要としない」...
-- 時代に逆行しているように見えるが、サーバー管理コストが...
--- ぼくみたいな弱小シュミグラマには必要。
- 多画面多デバイス同時開発
-- エディタ画面はこのノートPC、
-- 実行画面はこのスマホ、
-- マニュアル等のブラウジングはこのデスクトップPC
-- デバッグ画面もこのデスクトップPC
--- たくさんのデバイスの画面を最大限に活用する仕組み。
- 並列プログラミングの推奨
-- 時代はメニーコア。
-- データフロープログラミングはVPLに向いていて、
-- さらに関数型に近いので並行性も高い。
- クラウドコンピューティング
-- モバイル端末で重い処理が必要になったとき、通信速度が十...
-- クラウド上の超高速マシン、あるいは充電中の他端末に計算...
- 手続き型、オブジェクト指向、関数型、データフロー、
-- それぞれの得意分野で得意分野の言語を使う。
* 感想、要望等 [#wff09d55]
- なんかあればここに -- [[12_Inou]] &new{2012-12-27 (木) ...
#comment
ページ名: