1. ガイダンス
増井俊之
https://gyazo.com/1077ecfb9bbbe9bebcbe4e29e93b186a
/icons/mail.icon masui@sfc.keio.ac.jp, masui@pitecan.com, tmasui@gmail.com, masui@masui.org
/icons/Web.icon http://pitecan.com
/icons/Scrapbox.icon masui
/icons/github.icon masui
/icons/twitter.icon @masui
/icons/Facebook.icon toshiyukimasui
/icons/LinkedIn.icon toshiyukimasui
/icons/skype.icon toshiyukimasui
/icons/Wikipedia.icon 増井俊之
授業情報
講義情報
関連情報
Scrapbox
クラウド上の情報共有/管理システム
https://i.gyazo.com/7057219f5b20ca8afd122945b72453d3.png
Scrapboxの特長
ブラウザ上で情報編集/共有
ワープロのように使える
ページ間リンクが簡単 (Wiki)
Scrapbox info
/help-jp
/UIPedia
/nota-press/Scrapbox紹介記事
Scrapboxサンプル
/sfc-online オンライン授業マニュアル
/masui 増井俊之.icon のブログなど
/SFCHelp SFCなんでも情報
受講の準備
CNSログインアカウント名を使ってScrapboxプロジェクト作成
sfc-pm2020-(CNSログインアカウント名)
e.g. sfc-pm2020-s12345tm
自己紹介
増井俊之
Wikipedia
シャープ、ソニー、産総研、Appleなどに勤務
ケータイの予測変換開発
iPhone日本語入力開発
様々なプラットフォームで様々なインタフェースシステムを開発
ユビキタス環境のインタフェースの構想
様々なWebサービス運用中
Gyazo (画面キャプチャ)
Scrapbox.io (Wiki)
Helpfeel (ヘルプシステム)
本棚.org (書籍情報共有)
Apple勤務時
http://gyazo.com/27357dbdc55a68142baee8c5d29ef075.png
POBox: 予測堅テキスト入力システム
https://gyazo.com/43da8e84b189a054393a8288e1d18b80
iPhoneのフリック入力
T-Cube + 予測
https://gyazo.com/1691febad27439d3bf44232c54dcb1e8.png
著書
http://hondana.org/%E5%A2%97%E4%BA%95/4756102816 https://gyazo.com/e64ce9758aa2772b17510d56409e1bfb
http://hondana.org/%E5%A2%97%E4%BA%95/4756146627 http://gyazo.com/d7e6378a56a03c4c183185b475feeacc.png
http://hondana.org/%E5%A2%97%E4%BA%95/4873113784 https://gyazo.com/3ce3843b43354fe5c47909c0debd0f10
http://hondana.org/%E5%A2%97%E4%BA%95/4873114616 http://gyazo.com/a75cf9e2eaaa5fa58e5af9faf705f3f6.png
http://hondana.org/%E5%A2%97%E4%BA%95/4873115043 http://gyazo.com/027dca09083cb76869c874bcdcb01dd9.png
http://www.kobunsha.com/img/sys/book/cover/9784334038458.jpg http://www.pitecan.com/sumaho/
その他の講義
ユーザインタフェース設計論 (春)
次世代Webプラットフォーム論 (秋/大学院)
ビジュアライゼーション (秋)
実世界/全世界インタフェース (研究会)
本講義のねらい
プログラミングについての広い視野を持つ
様々なプログラミング的概念について知る
日常的なプログラミングを考える
開発に役立つコツを知る
授業のメリット
なるべく変わった話題を提供
ググって出ない話題
教科書が存在しない話題
扱わないもの
プログラミングの基礎
ソフトウェア工学
理論計算機科学
計算可能性理論
計算量理論
ラムダ計算
授業の進め方
様々なプログラミングの話題を紹介
試験なし
レポート課題を時々出す
講義時間中にある程度解いてもらう
個人のパソコンでどんどん開発して議論してほしい
Scrapboxでプログラミング
/prog-exercises にいろいろ例がある
プログラミングとは何か
https://gyazo.com/1868d695312cb9133dd39d8c55849a0c http://www.amazon.co.jp/dp/4121504895
何故プログラムを書くのか
それ自体面白いから
パズル
便利なものを作れるから
アプリ, Webサービス
最近のプログラミング環境
あらゆるハードルが低くなった
ソフトウェアの敷居
誰でもどこでもプログラミング可能
JavaScript, Processing, etc.
全世界通信ライブラリ
ハードウェアの敷居
センサなどの普及
Arduino, RasPi, M5Stack, ...
全世界プログラミングが可能
プログラミング環境の歴史
パソコン以前 (~1980)
プログラミングは専門家のもの
大型計算機, ミニコン
パソコン黎明期 (1980〜1990)
お手軽開発環境
BASIC, HyperCard
日曜プログラマの時代
プログラミング環境の歴史
パソコン普及期 (1990〜2000)
家庭に普及しはじめる
開発環境は高価に
VisualC++, etc.
プログラミングは専門家のもの
オープンソース普及期 (2000〜2010)
プログラミングのハードルがまた下がった
プログラミング環境の歴史
全世界プログラミング(2010〜)
情報共有
GitHub
StackOverflow
Qiita
いつでもどこでも誰でもプログラミング
テキスト以外でプログラミング
全世界のセンサ利用
Demo: Processing (p5.app)
http://hondana.org/%E5%A2%97%E4%BA%95/4873113784 https://gyazo.com/3ce3843b43354fe5c47909c0debd0f10
https://gyazo.com/3c963b5324395ddbeeb12f7829af3df7
P5.js
例
https://p5js.org/examples/simulate-particle-system.html https://gyazo.com/dc35c16d9d72708a3500035661777339.png
ScrapboxでP5.jsを使う
https://gyazo.com/f3c1bfc01bde8b4a62a1794c6d065699
Scrapbox上で実行
逆正弦定理
https://gyazo.com/a786df89364d8a18d1f576758fc1dd5d
Run on Scrapbox
狭義のプログラミング
C, Java, JavaScript, ...
テキストベースの汎用計算機言語を利用
計算手順を記述
広い領域で利用
広義のプログラミング
簡単な設定
計算を定義
制約の記述
段取りの記述
データの流れを指示
動作を例示
簡単な設定
目覚まし時計
炊飯器タイマー設定
録画予約
制約の設定
表計算ソフト
数式を記述
Cynderella
幾何制約を記述
論理回路
Cinderella
https://www.youtube.com/watch?v=9bEFCPwMWyE
http://pitecan.com/Cinderella/Kempe/ https://gyazo.com/2e7e705c07fd081b840c2417dee733e6.png
論理回路
https://gyazo.com/9dd28f7a1d641c4522b723c0fde59400
https://gyazo.com/d4bdb12896f82ffdad6cf0cf77ba65be.png
論理回路のテキスト表現
code:logic.rtl
library ieee;
use ieee.std_logic_1164.all;
entity T_FF1 is
port( R,T : in std_logic;
Q,QB : out std_logic);
end T_FF1;
-------------------------------------------------
architecture RTL of T_FF1 is
signal NODE : std_logic;
begin
Q <= NODE;
QB <= not NODE;
process(R,T)
begin
if (R = '0')then
NODE <= '0';
elsif (T 'event and T ='1')then
NODE <= not NODE;
end if;
end process;
end RTL;
各種の段取り
ルーブ・ゴールドバーグ・マシン
aka ピタゴラマシン
レシピ
楽譜
ルーブ・ゴールドバーグ・マシン
https://gyazo.com/210eaff521cdc11af3bbb37592f054c5.png
Video: The Way Things Go
https://www.youtube.com/watch?v=GXrRC3pfLnE
小室の音楽
code:komuro.abc
K:B
M:4/4
Q:1/4=150
%%score {1|2|3}
V:1
g2|f6g2|f6g2|f3f2edc-|cfd4g2
V:2
z2|EGBd8|EFAc8|DFAc8|G,B,d,f,8
V:3 cleff=bass
z2|E,,E,,E,,E,, E,,E,,E,,E,,|E,,E,,E,,E,, E,,E,,E,,E,,|D,,D,,D,,D,, D,,D,,D,,D,,|G,,G,,G,,G,, G,,G,,F,,F,,
例示プログラミング
Dynamic Macro
予測システム
Demo: Dynamic Macro
キーボードマクロを自動生成
ビジュアルプログラミング
https://gyazo.com/87b08f3210ea5ba803981f6bc47e7584.png
将来のプログラミング
どこでも/いつでも/誰でも
人間の能力の拡大
知的処理に活用
計算機を何につかうか
計算
証明
検索
通信
計算機を何につかうか
ゲーム
お絵描き
楽器
シミュレーション
アート
計算機を何につかうか
生活全般
知能
生命
まだまだ面白い話がありそう!
講義内容
文芸的プログラミング
予測/例示プログラミング
文字列プログラミング
状態遷移プログラミング
並列プログラミング
ビジュアルプログラミング
インターネットプログラミング
実世界プログラミング
進化的プログラミング
インタフェースのプログラミング
エクストリームプログラミング
人力活用プログラミング
その他プログラミングパラダイム
全世界プログラミング
富豪的プログラミング
技術的な分類
手続き型プログラミング
構造化プログラミング
データフロープログラミング
オブジェクト指向プログラミング
関数型プログラミング
宣言型プログラミング
制約プログラミング
論理型プログラミング
アスペクト指向プログラミング
Beautiful code
http://www.amazon.co.jp/dp/0596510047 https://gyazo.com/4aabc8c3b3a0ad378923e7986d0221ec.png
美しいプログラム
簡潔な記述
エレガントなアルゴリズム
読みやすい
理解しやすい
汎用
汚いプログラム
code:dirty.js
if(window!=top)top.location=location.href;
(function(){if(location.href.indexOf("nocheckbrowser")!=-1)return;if(!is_browser_supported)location="?ui=html&zy=b";var agt=navigator.userAgent.toLowerCase();var wk=/webkit\/(^ +)/.exec(agt);var g=/rv:(^;)+)/.exec(agt);var ie=/msie (\d+)/.exec(agt);var opr=window.opera&&parseFloat(window.opera.version());var sup=ie&&ie1>=7&&!opr||navigator.product=="Gecko"&&g&&g1>"1.8"||wk&&wk1.split(".")0>
"522"||opr&&opr>=9.5;var win2k=agt.indexOf("windows nt 5.0")!=-1||agt.indexOf("windows 2000")!=-1;var win98OrMe=agt.indexOf("windows 98")!=-1;if(ie&&ie1==6&&!opr&&!win2k&&!win98OrMe){var jsv=Number(ScriptEngineMajorVersion()+"."+ScriptEngineMinorVersion());sup=jsv>=5.7||jsv==5.6&&ScriptEngineBuildVersion()>=8834}if(!sup)location="?ui=1";var c="jscookietest=valid";document.cookie=c;if(document.cookie.indexOf(c)==
-1)location="html/nocookies.html";document.cookie=c+";expires=Thu, 01 Jan 1970 00:00:00 GMT";if(agt.indexOf("msie")!=-1&&document.all&&agt.indexOf("opera")==-1&&agt.indexOf("mac")==-1)eval('try{new ActiveXObject(agt.indexOf("msie 5")!=-1?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP")}catch(e){location="html/noactivex.html"}')})()
スパゲッティコード
https://gyazo.com/ba6a0d78000d76428b935d3a1d63c4af.png
プログラミングの王道
駄目なものを使わない
フローチャートなど
駄目な本を読まない
イディオムを知る
美しいプログラムを読む
ハードウェアとプログラミング
フォンノイマンアーキテクチャ
CPU+メモリ
機械語実行
指令された処理を順番に実行
演算とデータ移動の繰り返し
フォンノイマンアーキテクチャ
https://gyazo.com/87eea7384aa3b9b0a2aa8ab65af15cc3.png
異なるハードウェア
連想メモリ
データが100個でも10000個でも検索時間は同じ
量子コンピューティング
計算量が根本的に変わる可能性
研究会
全世界インタフェースと全世界プログラミング
実世界のセンサとWebを融合するインタフェースを考える
課題1: 三角形問題