<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
	
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see AdvancedOptions
<<importTiddlers>>
東京電機大学未来科学部主催
学術シンポジウム

「WEB3.0の社会・教育へのインパクト」パネリスト
国領二郎先生が、platformという言葉を創発という言葉の中でつかっていた。
 囲碁を例にとり、創発のためには、よくデザインされたプラットフォームが必要だ
  (インターネット上の創発空間)
   ここに確かにものがあったという場所認証の技術は必要だ。(PIAXはそのためにある)
[[ここ|http://www.jp.apan.net/report-2007/]]にあります。我が国のインターネットの歴史の裏側が見えておもしろいです。
現在[[準備中|http://comm.stage.ac/nict/apii2008/pro.html]]
パネルコーディネータ。APEC TELと併設。
日本と韓国のいわゆる玄海回線にまつわる[[ワークショップ|http://comm.stage.ac/nict/apii2008/]]。APEC-TELに合わせて開催されている。韓国の政府組織のリフォームにより今回から[[NIA |http://www.nia.or.kr/special_content/eng/]](National Information Society Agency)が韓国側のホスト。
NIAの面白いのは、Information Societyを実現するための政府機関であり、さまざまな政策実現のための横串を通す組織であること。したがって、純粋な研究開発のための人員は持たず、ほぼfunding bodyとして政策実現のための研究開発をアウトソースしている。R&Dはindustryか、industryと大学のマッチングファンドによって行われる。industryもsamsongなどの大会社は入らず中小企業で新しい市場のための技術を作り、政策作成部隊も持ち、新しい市場を生み出し、それに対する初期投資を行って、開発した技術と市場を育てていくというメカニズムを持っている。NICTをはじめとする日本の政府組織はぜひ見習うべき。現在はユビキタスに興味があり、空港での荷物トラッキングにRFIDを使う技術開発を行っている。

APEC-TELではセンサーネットを構成する[[iBIT|www.ibitworld.com]]と呼ばれるIPv6に基づくノードをデモしていた。
¥member{Shinji Shimojo} received the M.E. and Ph.D. degrees from Osaka
University in 1983 and 1986, respectively. He was an Assistant Professor
with the Department of Information and Computer Sciences, Faculty of
Engineering Science at Osaka University from 1986, and an Associate
Professor with Computation Center from 1991 to 1998. During this period,
he also worked for a year as a Visiting Researcher at the University of
California, Irvine. He has been a Professor with the Cybermedia Center
(then the Computation Center) at Osaka University since 1998, and from
2005 to 2008 had been the director of the Center. He is working for
National Institute of Information and Communications Technology. His
current research work is focusing on a wide variety of multimedia
applications, peer-to-peer communication networks, ubiquitous network
systems, and Grid technologies. He was awarded the Osaka Science Prize
in 2005. He is a member of IEEE and IEICE.
ひさしぶりにやられたって感じでした。
[[CAMERA|http://camera.calit2.net/]]ってスケールは大きいが比較的地味なmeta genomicsのプロジェクトだと思ってたのに、Tiled DisplayのVarrierやメディアアートとくっついておおばけしたってかんじですね。
しかも、これがcommodityなテクノロジーでできているところがすごい。
情報のわくわく感ってこういうものだと思うけどなあ。
[[Video|http://www.atlasinsilico.net/gallery.html]]はMust see
インターネットR&Dの死の谷を越える
 JGN2からJGN2plusへ
 全国テストベッドとしてのJGN2plusの現在の計画とCKPへの期待を述べる。

>> タイトル:これからのインターネット技術開発
>> 時間:    15:45-17:05 (80分間)
>> パネラー: 下條真司(大阪大学)
>>           南陽    (エヌ・ティ・ティ・コミュニケーションズ)
>>           原井洋明(情報通信研究機構)
>>           黒崎芳行(アラクサラネットワークス)
>> コーディネーター:河合栄治(奈良先端科学技術大学院大学)
アラクサラの黒崎さんからも南さんからもネットワークとアプリケーションの世界が離れていっていることが述べられた。
ネットワーク側はアプリケーションをFree Riderと呼び、投資意欲がわかない。このままでは、インターネットは悲惨なことになりそう。
それをつなぐのがオーバーレイなのか。
P2Pなど現状の混沌とした世界から抜いてしまうのも一つの手か。

山口先生からは、これからのITの課題はgreen。拡大するデータサーバーとネットワークの消費電力を抑える仕掛けが必要になるだろうという指摘があった。
[img[img/photoshinji.gif]] 
 ''[[情報通信研究機構|  http://www.nict.go.jp]] 上席研究員''
Executive Researcher, National Institute for Information and Communications Technology
Professor, Cybermedia Center, Osaka University
E-mail: sshinji アット nict.go.jp

勤務先: [[大手町RC |http://www2.nict.go.jp/q/q264/index_testbed.htm]] 
アシスタント: 酒井(yoko アット nict.go.jp)

〒100-0004
東京都千代田区大手町1-8-1 KDDI大手町ビル 21F

情報通信研究機構 大手町リサーチセンター
TEL: 03-3272-3110
FAX 03-3272-3062

アポイントの取り方
  以下のgoogle calenderをご参照いただき、秘書までご連絡ください。
* HTML
[[shinji shimojo(private)| http://www.google.com/calendar/embed?src=sshimojo%40gmail.com&ctz=Asia/Tokyo ]]
[[shimojo MS | http://www.google.com/calendar/embed?src=mvjgdhpftsmu8flrogcqhii0f4%40group.calendar.google.com&ctz=Asia/Tokyo ]]
[[ shimojo osaka | http://www.google.com/calendar/embed?src=mnslhbfon8sd6ecela3drqa33g%40group.calendar.google.com&ctz=Asia/Tokyo ]]
* ical
 [[shinji shimojo(private) | http://www.google.com/calendar/ical/sshimojo%40gmail.com/public/basic.ics]]
[[shimojo MS | http://www.google.com/calendar/ical/mvjgdhpftsmu8flrogcqhii0f4%40group.calendar.google.com/public/basic.ics]]
[[ shimojo osaka | http://www.google.com/calendar/ical/mnslhbfon8sd6ecela3drqa33g%40group.calendar.google.com/public/basic.ics]]


/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
[[Contact Me]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
Future Internet Research and Experimentation
FIRE Launch - Event and Workshop
Date: 10th September 2008
Venue: Paris City Hall (5 rue Lobau, 75004 Paris)
CORDIS : ICT : FIRE : Information Day

!Executive summery
EU FP7でのFuture Internetのためのテストベッドプロジェクトを集めたオープニングイベント。パリの市庁舎でパリ副市長も出席する中、行われた。FIREはJGN2plusと直接かぶるインフラの部分は持たないもののwireless, P2P, overlayなど14のプロジェクトから構成される。FP6からの生き残り組も多い。すべてのプロジェクトが企業と大学などのアカデミアとのマッチングで構成されており、中長期的な研究開発の狙いを据えつつも社会的な影響や実現性などをそのあたりで担保している。また、Future Inetnetにまつわる知材や社会制度のあり方も議論する。
Planetlabのヨーロッパ版であるOnelab2、ドイツのG-labなどオーバーレイによるネットワーク仮想化をプロモートしていきたい考え。また、4WARDなどEUや各国独自の新世代ネットワークに関するプロジェクトとも連携させたい考え。JGN2plusの狙う管理レベルの仮想化はFIRE外のプロジェクトであるFEDERICAで行われており、その意味で、今後の構成はJGN2plus+ダイナミック+新世代ネットワーク(公募を含む)ときわめてにてくる。ただし、GENIや我々の新世代のようなScienceを狙うプロジェクトは少ない(selfnet, openxぐらいか)。また、コンセプトを確かめるための評価、計測の話があまり出ていなかったのは気になる。
NICTとしては、中尾先生の活動はすでにonelabIIやG-labと連携しているが、それ以外にも無線でのYRPの名前が挙がっていた。P2P, wireless, IMSなどより広い連携が可能だと思われる。

!関連するプロジェクトのマッピング
中尾先生core project -- Onelab2
PARADISO -- 戦略WG
PANLAB, PII -- 武本+HOTARU
JGN2plus -- FEDERICA, 4WARD
  Network of Information -- PIAX
HOTARU -- OpenIMS (Raunhofer FOKUS)
nano data center -- PIAX

!Morning (09:00 – 12:00)
Registration – security clearing (09:00 – 10:00)
Plenary – Chairperson: Per Blixt, European Commission:
Welcoming (10:00 – 10:40)
o Jean-Louis Missika, Deputy Mayor of Paris, in charge of Innovation and Education
o Gilles Bloch, Director General for Research and Innovation Ministry, France
o Jean-Charles Pomerol, President of University Pierre et Marie Curie, Paris
o Nakita Vodjdani, Agence Nationale de la Recherche
様々なpolicy makerを含めたオープニングセレモニー。
今回登録者で240人
今回、日本以外に韓国や中国、austraria, 米国から人が来ていた。
すべてplanetlabがらみと思われる。
*ANRの人にブロシュアを送ること。

FIRE and related initiatives (10:40 – 12:00)
o Fabrizio Sestini, European Commission, FIRE initiative
 FIREに関しては、3つの狙いがある。
  Technical
        Economic and Social
        Social Responsibility
            技術の持つ社会的な影響について、アセスすること
  そのため、long term reseachとその結果を社会的に評価することのスパイラルを作りたい。
  PANLAB, PIIはコンセプトを設計する小規模なプロジェクトであり、その中でSOAやサービス合成と言ったテーマが扱われている。
   (武本はフォローする必要がある。)
   IPR, Leagal Issueもテストベッドの中で解決できる。

o Serge Fdida, UPMC, European Testbed Projects
 onelab IIの話。
 Future Inetnetはpolymorphicであるべき。
 GEANTやFEDERICAの上にonelabIIは実現されるユーザーである。
 P2Pのアプリケーションが今後出てくる予定。
  (NICTとしては、浅見先生のP2P実験協議会と協力する必要がある。)
o Suzanne Iacono, NSF, GENI initiative
 Science->society->technology のスパイラルを作るのが、NetSEの狙い。
 ScienceをNetSEでやり、GENIに展開していく。
 今回、FIND, SING, NGNIといったプロジェクトがNetSEに統合された(4年間で$20M)
     29のプロジェクト、5つのチームで構成されている。
 ちょうど、9月の5日に最初のミーティングがあった。500人集まったらしい。
Network Science and Engineering (NetSE)
NETSE workshopの模様はここから見れます。
http://www.visualwebcaster.com/event.asp
ADであるJannetの講演は聴くべき
  NSFでも独立した3つのアクティビティをマージしようという努力の跡が見える。
   scienceとengineerとapplication designer

 NSFがやるとindustryは入らず、あくまでscienceである。これは、EUとは対照的。

o Akihiro Nakao, PlanetLab and JGN2 Japan
Lunch
Afternoon (14:00 – 18:15)
Keynote: Rudolf Strohmeier, Head of Cabinet of Commissioner Reding (tbc)

Panel, FIRE challenges vol. 1 (14:20 – 15:45)
Moderator: Mario Campolargo, European Commission
1. Clean-slate approaches: needs and opportunities from FIRE
Introductions:
�� Martin May (ETH Zurich)
�� Roger Torrenti (Orionis)
�� Henrik Abramowicz (Ericsson, tbc)
 4WARDはFIRE外であるが、興味のあるプロジェクトでNetwork Virtualizationとnetwork codingを組み合わせたgeneric pathという概念を提唱している。
    100人が参加する2年間のプロジェクト。23M U
    4WARDThe FP7 4WARD Project
 network of information
  ネットワーク内にサーバーセントリックでない形で情報が蓄えられている。
     (寺西先生向きでフォローが必要)
    FIREより、よりネットワーク技術コア的に見える。

2. Industrial perspectives and expectations from FIRE
Introductions:
�� David Kennedy (Eurescom)
  PARADISOはFuture Ineternetの社会的な側面をアセスする小規模なプロジェクト
  コンセプトは"Beyond GDP"
      つまり、GDPで成長をはかるのではない、あたらしい指標を提唱したい。
  ヨーロッパから提唱し、世界をリードしたい。
  PARADISOの文書がもうすぐでるはず。
  来年の1月22-23日には、"ICT for sustainable future"というワークショップを行う。
  (NICTを招待したいという話あり。戦略WGとつなぐ)
      消費者の行動を変え、社会に新しいパラダイムを提唱していく。
  championing impact mitigation
      ICT for environment
      ICT4D, eInclution
Welcome to ICT4D's home page
eInclusion@EU
E-Inclusion - Wikipedia, the free encyclopedia
      ICT4D: ICTによってdigital devideを進めるのではなく、それを緩和する方向に進んでいこうというスローガン

�� Steve Wright (BT)
�� Marcin Pilarski (Polish Telecom)
      "service in the network"つまり、新たなサービスをネットワークの中で実現し、キャリアのインセンティブを上げたいという発言があり、会場からも議論があった。
 所詮はserviceはunbundleされるのではないか。
 EUがやるからには、規制にも踏み込むべきだが、FIREには技術だけでその手の研究はない
 (我が国では、プラットフォーム研究会が総務省にある。)
 clomeがgoogleからでてきたが、それをどうみるか。
 Google Chrome - ブラウザをダウンロード
 "Living with Testbed"
        社会的な影響をアセスしてみる。

   (我が国にはユビキタス特区と行った政策があるが、うまく新世代などと連携していない。)
       ディジタルTVと同じようにinternetも切り替えられるのではないか。
      epic(Explicitly Parallel Instruction Computing)
     clean sleteはたとえevolutionalな実現しかできないとしてもそのステップを大きくする。

Coffee Break and Poster Session on FIRE and national testbed projects (15:45 – 16:30)
Panel, FIRE challenges vol. 2 (16:30 – 18:15)
3. Existing offers as Future Internet Testbeds
Moderator: Max Lemke, European Commission
Introductions:
�� Timur Friedman (UPMC), OneLab
  今回独自の拡張として、contents distirbutionやsensorが入りつつある。
  (planetlab+PIAXはこの方向を目指しているとも言える)

�� Anastasius Gavras (Eurescom), PII
    Panlabはあくまでコンセプトを作るプロジェクトだが、SOAを作っている。
    PanlabのIMS test facilityにはYRPから参加がある。

�� Mauro Campanella (INFN), FEDERICA
  グリッド(cyberinfrastructure)ではすでにhybrid networkingは主流でそのための管理オブジェクトの定義もOGFでやっている。
  multi domainでの管理仮想化 管理ツールがあるそうだ。
  2008年 deploy

4. Building synergies with national and international initiatives
Introductions:
Moderator: Susanna Av市ta, FIREworks
�� Marc Fiuczynski, PlanetLab
�� Francois Baccelli, French Initiative on Future Internet
�� Paul Mueller, G-Lab
�� Reijo Juvonen, Finnish Initiative on Future Internet
5. Wrap-up: building synergies between research projects on Future Internet
Moderators: Per Blixt, European Commission and Serge Fdida, UPMC

小西さんが、今回のGENIとInternet2の関わりについて、以下で説明していました。
[[GENI Meta Operation Center|http://www.jp.apan.net/meetings/0810-noc/GENI-NOC.ppt]]
[[DETER|http://www.isi.deterlab.net/]]:  セキュリティ:Wroclawski @ USC/ISI
  emulabを使ったセキュリティの研究で、starbed+門林という研究に限りなく近い。
PlanetLab: 参照モデル:Peterson @ Princeton
ProtoGENI: VINI, ブローカ: Lepreau @ Utah
[[ORCA | http://nicl.cod.cs.duke.edu/orca/]]: 光テストベッド: Chase @ Duke
ORBIT: ワイヤレス: Gruteser @ Rutgers

兼務先: [[情報科学研究科応用メディア工学講座|http://www.ais.cmc.osaka-u.ac.jp/]]
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};

config.formatters.push(
{
	name: "legacyStrikeByChar",
	match: "==",
	termRegExp: /(==)/mg,
	element: "strike",
	handler: config.formatterHelpers.createElementAndWikify
});

} //# end of "install only once"
//}}}
[[Contact Me]]
[[略歴]]
[[研究プロジェクト(進行中)]]
[[その他の活動]]
[[過去の研究プロジェクト]] 
[[2007年|http://www.ais.cmc.osaka-u.ac.jp/~shimojo/index2007.html]]
[[RSS|http://www.ais.cmc.osaka-u.ac.jp/~shimojo/index.xml]]
@@color:white;[[私的|http://www6.ocn.ne.jp/~sshinji/]]@@
[[LINKS]]
<!--{{{-->
<div class='header'>
     <div class='gradient' macro='gradient vert #FF8614 #DA4A0D '>
	<div class='titleLine' >
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
    </div>
</div>
<div id='bodywrapper'>
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' 	tiddler='SideBarOptions'></div>
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter'>TiddlyWiki</div>
</div>

<!--}}}-->
NCHCが台中science parkに新しいブランチを開くのに合わせて[[PRAGMA14|http://www.nchc.org.tw/event/2008/pragma/]]が開かれました。いくつかの[[ハイライト|http://www.nchc.org.tw/event/2008/pragma/program.php]]
# Interactive Visualization in 4k With COTS Hardware by Jurgen Schulze
 starCAVE, 4K projectorなど最新の可視化技術とDavinciの絵をX線でスキャンしてみたりとartとのコラボレーションの話
# Keynotes: "A PRAGMA-OptIPlanet Collaboratory Partnership" by Larry Smarr, Director, CALIT2
CalIT2のLarry Smarrが10GにつながったTilled Display wallを世界中にばらまいてOptiplanet Collaboratoryを作るんだと息巻いています。

今回からでもセッションが中心になりつつあります。次回はWGごとにデモを出させるのだとか。
大手町RC(SPARC)のキックオフおよび飲み会が行われました。
とりあえずメンバーの皆様の熱い思いをいっぱいに浴びて元気になったのでした。
/***
This CSS by DaveBirss.
***/
/*{{{*/


.tabSelected {
 background: #fff;
}

.tabUnselected {
 background: #eee;
}

#sidebar {
 color: #000;
 background: transparent; 
}

#sidebarOptions {
 background: #fff;
}

#sidebarOptions input {
	border: 1px solid #ccc;
}

#sidebarOptions input:hover, #sidebarOptions input:active,  #sidebarOptions input:focus {
	border: 1px solid #000;
}

#sidebarOptions .button {
 color: #999;
}

#sidebarOptions .button:hover {
 color: #000;
 background: #fff;
 border-color:white;
}

#sidebarOptions .button:active {
 color: #000;
 background: #fff;
}

#sidebarOptions .sliderPanel {
 background: transparent;
}

#sidebarOptions .sliderPanel A {
 color: #999;
}

#sidebarOptions .sliderPanel A:hover {
 color: #000;
 background: #fff;
}

#sidebarOptions .sliderPanel A:active {
 color: #000;
 background: #fff;
}

.sidebarSubHeading {
 color: #000;
}

#sidebarTabs {`
 background: #fff
}

#sidebarTabs .tabSelected {
 color: #000;
 background: #fff;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

#sidebarTabs .tabUnselected {
 color: #999;
 background: #eee;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

#sidebarTabs .tabContents {
 background: #fff;
}


#sidebarTabs .txtMoreTab .tabSelected {
 background: #fff;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 background: #eee;
}

#sidebarTabs .txtMoreTab .tabContents {
 background: #fff;
}

#sidebarTabs .tabContents .tiddlyLink {
 color: #999;
 border:none;
}

#sidebarTabs .tabContents .tiddlyLink:hover {
 background: #fff;
 color: #000;
 border:none;
}

#sidebarTabs .tabContents {
 color: #000;
}

#sidebarTabs .button {
 color: #666;
}

#sidebarTabs .tabContents .button:hover {
 color: #000;
 background: #fff;
}

#sidebar {color:#999;}
/*}}}*/
このサイトは現在@@更新停止中@@。
[[こちら|http://www2.nict.go.jp/g/g560/shimojo/]]に移動しました。

今年のキーワードは@@時間に追われない@@

[[2007|index2007.html]]
//それ以前は[[こちら|oldindex.htm]]
English version is [[here|oldindex.htm]]//
Shinji Shimojo
http://www.ais.cmc.osaka-u.ac.jp/~shimojo/
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
[[SideBarWG]]

/***
!Top Menu Styles
***/
/*{{{*/
#topMenu br {display:none; }
#topMenu { background: #000 ; color:#fff;padding: 1em 1em;}
/*}}}*/

/***
!General
***/
/*{{{*/
body {
 background: #444;
 margin: 0 auto;
}

 #contentWrapper{
 background: #fff;
 border: 0;
 margin: 0 auto;
 width: 792px;
 padding:0;
}
/*}}}*/

/***
!Header rules
***/
/*{{{*/
.titleLine{
 margin: 80px auto 0em ;
margin-left:1.7em;
margin-bottom: 40px;
 padding: 0;
 text-align: left;
 color: #fff;
}

.siteTitle {
	font-size: 2em;
        font-weight: bold;
}

.siteSubtitle {
	font-size: 1.1em;
        display: block;
        margin: .5em auto 1em;
}

.gradient {margin: 0 auto;}



.header {
 background: #fff; 
 margin: 0 auto;
 padding:0 12px;
 width: 768px;
}
/*}}}*/

/***
!Display Area
***/
/*{{{*/
#bodywrapper {margin:0 12px; padding:0;background:#fff; height:1%}

#displayArea{
 margin: 0em 16em 0em 1em;
 text-align: left;
}

.tiddler {
	padding: 1em 1em 0em 0em;
}

h1,h2,h3,h4,h5 { color: #000; background: transparent; padding-bottom:2px; border-bottom: 1px dotted #666; }
.title {color:black; font-size:1.8em; border-bottom:1px solid #333; padding-bottom:0.3px;}
.subtitle { font-size:90%; color:#ccc; padding-left:0.25em; margin-top:0.1em; }

.shadow .title {
	color: #aaa;
}

.tagClear{
	clear: none; 
}

* html .viewer pre {
	margin-left: 0em;
}

* html .editor textarea, * html .editor input {
	width: 98%;
}

.tiddler {margin-bottom:1em; padding-bottom:0em;}


.toolbar .button {color:#bbb; border:none;}
.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active {background:transparent; color:#111; border:none; text-decoration:underline;}

#sidebar .highlight, #sidebar .marked {background:transparent;}

.tagging, .tagged {
	border: 1px solid #eee;
	background-color: #F7F7F7;
}

.selected .tagging, .selected .tagged {
	background-color: #eee;
	border: 1px solid #bbb;
}

 .tagging .listTitle, .tagged .listTitle {
	color: #bbb;
}

.selected .tagging .listTitle, .selected .tagged .listTitle {
	color: #222; 
}


.tagging .button:hover, .tagged .button:hover {
		border: none; background:transparent; text-decoration:underline; color:#000;
}

.tagging .button, .tagged .button {
		color:#aaa;
}

.selected .tagging .button, .selected .tagged .button {
		color:#000;
}

.viewer blockquote {
	border-left: 3px solid #000;
}

.viewer pre, .viewer code {
	border: 1px dashed #ccc;
	background: #eee;}

.viewer hr {
	border: 0;
	border-top: solid 1px #333;
 margin: 0 8em;
	color: #333;
}

.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}

.viewer .highlight, .viewer .marked {text-decoration:none;}

#sidebarTabs .highlight, #sidebarTabs .marked {color:#000; text-decoration:none;}

.tabSelected {
 color: #000;
 background: #fff;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

.viewer .tabSelected:hover{color:#000;}

.viewer .tabSelected {font-weight:bold;}

.tabUnselected {
 color: #999;
 background: #eee;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: solid 1px #ccc;
 padding-bottom:1px;
}

.tabContents {
 background: #fff;
  color: #000;
}
/*}}}*/
/***
!!!Tables
***/
/*{{{*/
.viewer table {
	border: 1px solid #000;
}

.viewer th, thead td {
	background: #000;
	border: 1px solid #000;
	color: #fff;
}

.viewer td, .viewer tr {
	border: 1px solid #111;
}
/*}}}*/


/***
!!!Editor area
***/
/*{{{*/
.editor input, .editor textarea {
	border: 1px solid #ccc;
}

.editor {padding-top:0.3em;}

.editor textarea:focus, .editor input:focus {
	border: 1px solid #333;
}
/*}}}*/

/***
!Sidebar
***/
/*{{{*/
#sidebar{
position:relative;
float:right;
margin-bottom:1em;
display:inline;
width: 16em;
}

#sidebarOptions .sliderPanel {
	background: #eee; border:1px solid #ccc;
}

/*}}}*/

/***
!Body Footer rules
***/
/*{{{*/
#contentFooter {
 text-align: left;
 clear: both;
 color:#fff;
 background: #000;
 padding: 1em 2em;
font-weight:bold;
}

/*}}}*/
/***
!Link Styles
***/
/*{{{*/
a{
	color: #000;
}

a:hover{
        color: #FF6600;
        background:#fff;
}


.button {
	color: #000;
	border: 1px solid #fff;
}

.button:hover {
	color: #fff;
	background: #ff8614;
	border-color: #000;
}

.button:active {
	color: #fff;
	background: #ff8614;
	border: 1px solid #000;
}

.tiddlyLink {border-bottom: 1px dotted #000;}
.tiddlyLink:hover {border-bottom: 1px dotted #FF6600;} 

.titleLine a {border-bottom: 1px dotted #FF9900;}

.titleLine a:hover {border-bottom: 1px dotted #fff;}

.siteTitle a, .siteSubtitle a{
 color: #fff;
}

.viewer .button {border: 1px solid #ff8614; font-weight:bold;}
.viewer .button:hover, .viewer .marked, .viewer .highlight{background:#ff8614; color:#fff; font-weight:bold; border: 1px solid #000;}

#topMenu .button, #topMenu .tiddlyLink {
 margin-left:0.5em; margin-right:0.5em;
 padding-left:3px; padding-right:3px;
 color:white;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#000; color:#FF8814}

#topMenu a{border:none;}
/*}}}*/

/***
!Message Area /%=================================================%/
***/
/*{{{*/
#messageArea {
	border: 4px dotted #ff8614;
	background: #000;
	color: #fff;
        font-size:90%;
}

#messageArea .button {
	padding: 0.2em;
	color: #000;
	background: #fff;
        text-decoration:none;
        font-weight:bold;
        border:1px solid #000; 
}

#messageArea a {color:#fff;}

#messageArea a:hover {color:#ff8614; background:transparent;}

#messageArea .button:hover {background: #FF8614; color:#fff; border:1px solid #fff; }

/*}}}*/

/***
!Popup /%=================================================%/
***/
/*{{{*/
.popup {
	background: #ff8814;
	border: 1px solid #333;
}

.popup hr {
	color: #333;
	background: #333;
	border-bottom: 1px;
}

.popup li.disabled {
	color: #333;
}

.popup li a, .popup li a:visited {
	color: #eee;
	border: none;
}

.popup li a:hover {
	background: #ff8614;
	color: #fff;
	border: none;
        text-decoration:underline;
}
/*}}}*/

.blog h2, .blog h3, .blog h4{
  margin:0;
  padding:0;
border-bottom:none;
}
.blog {margin-left:1.5em;}  


.blog .excerpt {
  margin:0;
margin-top:0.3em;
  padding: 0;
  margin-left:1em;
  padding-left:1em;
  font-size:90%;
  border-left:1px solid #ddd;
}

#tiddlerWhatsNew h1, #tiddlerWhatsNew h2 {border-bottom:none;}
div[tags~="RecentUpdates"], div[tags~="lewcidExtension"] {margin-bottom: 2em;}

#hoverMenu  .button, #hoverMenu  .tiddlyLink {border:none; font-weight:bold; background:#f37211; color:#fff; padding:0 5px; float:right; margin-bottom:4px;}
#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#f37211; background:#000; padding:0 5px; float:right; margin-bottom:4px;}

#topMenu .fontResizer {float:right;}

#topMenu .fontResizer .button{border:1px solid #000;}
#topMenu .fontResizer .button:hover {border:1px solid #f37211; color:#fff;}
#sidebarTabs .txtMainTab .tiddlyLinkExisting {
 font-weight: normal;
 font-style: normal;
}

#sidebarTabs .txtMoreTab .tiddlyLinkExisting {
 font-weight: bold;
 font-style: normal;
}

.blog h2, .blog h3, .blog h4{
  margin:0;
  padding:0;
border-bottom:none;
}
.blog {margin-left:1.5em;}  


.blog .excerpt {
  margin:0;
margin-top:0.3em;
  padding: 0;
  margin-left:1em;
  padding-left:1em;
  font-size:90%;
  border-left:1px solid #ddd;
}

#tiddlerWhatsNew h1, #tiddlerWhatsNew h2 {border-bottom:none;}
div[tags~="RecentUpdates"], div[tags~="lewcidExtension"] {margin-bottom: 2em;}

#hoverMenu {background:transparent;}
#hoverMenu  .button, #hoverMenu  .tiddlyLink {border:none; font-weight:bold; background:#f37211; color:#fff; padding:0 5px; float:right; margin-bottom:4px;}
#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#f37211; background:#000; padding:0 5px; float:right; margin-bottom:4px;}

#topMenu .fontResizer {float:right;}

#topMenu .fontResizer .button{border:1px solid #000;}
#topMenu .fontResizer .button:hover {border:1px solid #f37211; color:#fff;}
#sidebarTabs .txtMainTab .tiddlyLinkExisting {
 font-weight: normal;
 font-style: normal;
}

#sidebarTabs .txtMoreTab .tiddlyLinkExisting {
 font-weight: bold;
 font-style: normal;
}

/***
|Name|TiddlerEncryptionPlugin|
|Author|Lyall Pearce|
|Source|http://www.Remotely-Helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html|
|License|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|Version|3.1.1|
|~CoreVersion|2.3.0|
|Requires|None|
|Overrides|store.getSaver().externalizeTiddler(), store.getTiddler() and store.getTiddlerText()|
|Description|Encrypt/Decrypt Tiddlers with a Password key|

!!!!!Usage
<<<
* Tag a tiddler with Encrypt(prompt)
** Consider the 'prompt' something to help you remember the password with. If multiple tiddlers can be encrypted with the same 'prompt' and you will only be asked for the password once.
* Upon save, the Tiddler will be encrypted and the tag replaced with Decrypt(prompt).
** Failure to encrypt (by not entering a password) will leave the tiddler unencrypted and will leave the Encrypt(prompt) tag in place. This means that the next time you save, you will be asked for the password again.
** To have multiple tiddlers use the same password - simply use the same 'prompt'.
** Tiddlers that are encrypted may be automatically tagged 'excludeSearch' as there is no point in searching encrypted data - this is configurable by an option - you still may want to search the titles of encrypted tiddlers
** Tiddlers that are encrypted may be automatically tagged 'excludeLists', if you have them encrypted, you may also want to keep them 'hidden' - this is configurable by an option.
** Automatic removal of excludeLists and excludeSearch tags is performed, if the above two options are set, only if these two tags are the last 2 tags for a tiddler, if they are positioned somewhere else in the tags list, they will be left in place, meaning that the decrypted tiddler will not be searchable and/or will not appear in lists.
** Encrypted tiddlers are stored as displayable hex, to keep things visibly tidy, should you display an encrypted tiddler. There is nothing worse than seeing a pile of gobbledy gook on your screen. Additionally, the encrypted data is easily cut/paste/emailed if displayed in hex form.
* Tiddlers are decrypted only if you click the decrypt button or the decryptAll button, not when you load the TiddlyWiki
** If you don't display a tiddler, you won't have the option to decrypt it (unless you use the {{{<<EncryptionDecryptAll>>}}} macro)
** Tiddlers will re-encrypt automatically on save.
** Decryption of Tiddlers does not make your TiddlyWiki 'dirty' - you will not be asked to save if you leave the page.
* Errors are reported via diagnostic messages.
** Empty passwords, on save, will result in the tiddler being saved unencrypted - this should only occur with new tiddlers, decrypted tiddlers or with tiddlers who have had their 'prompt' tag changed.
** Encrypted tiddlers know if they are decrypted successfully - failure to decrypt a tiddler will ''not'' lose your data.
** Editing of an encrypted (that has not been unencrypted) tiddler will result in loss of that tiddler as the SHA1 checksums will no longer match, upon decryption. To this end, it is best that you do not check the option.
** To change the password on a Tiddler, change the Encrypt('prompt') tag to a new prompt value, after decrypting the tiddler.
** You can edit the tags of an encrypted tiddler, so long as you do not edit the text.
** To change the password for all tiddlers of a particular prompt, use the {{{<<EncryptionChangePassword ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro.
** To decrypt all tiddlers of a particular "prompt string", use the {{{<<EncryptionDecryptAll ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro - this will make tiddlers encrypted with "prompt string" searchable - or prompt for all 'prompt strings', if none is supplied.
<<<
!!!!!Configuration
<<<
Useful Buttons: 
<<EncryptionChangePassword>> - Change passwords of encrypted tiddlers.
<<EncryptionDecryptAll>> - Decrypt ALL tiddlers - enables searching contents of encrypted tiddlers.
<<option chkExcludeEncryptedFromSearch>> - If set, Encrypted Tiddlers are excluded from searching by tagging with excludeSearch. If Clear, excludeSearch is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Searching of Encrypted Tiddlers is only meaningful for the Title and Tags.
<<option chkExcludeEncryptedFromLists>> - If set, Encrypted Tiddlers are excluded from lists by tagging with excludeLists. If Clear, excludeLists is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Preventing encrypted tiddlers from appearing in lists effectively hides them.
<<<
!!!!!Revision History
<<<
* 3.1.1 - Obscure bug whereby if an encrypted tiddler was a certain length, it would refuse to decrypt.
* 3.1.0 - When creating a new Encrypt(prompt) tiddler and you have not previously decrypted a tiddler with the same prompt, on save, you will be prompted for the password to encrypt the tiddler. Prior to encrypting, an attempt to decrypt all other tiddlers with the same prompt, is performed. If any tiddler fails to decrypt, the save is aborted - this is so you don't accidentally have 2 (or more!) passwords for the same prompt. Either you enter the correct password, change the prompt string and try re-saving or you cancel (and the tiddler is saved unencrypted).
* 3.0.1 - Allow Enter to be used for password entry, rather than having to press the OK button.
* 3.0.0 - Major revamp internally to support entry of passwords using forms such that passwords are no longer visible on entry. Completely backward compatible with old encrypted tiddlers. No more using the javascript prompt() function.
<<<
!!!!!Additional work

***/
//{{{
version.extensions.TiddlerEncryptionPlugin = {major: 3, minor: 1, revision: 1, date: new Date(2008,9,18)};

// where I cache the passwords - for want of a better place.
config.encryptionPasswords = new Array();
config.encryptionReEnterPasswords = false;

if(config.options.chkExcludeEncryptedFromSearch == undefined) config.options.chkExcludeEncryptedFromSearch = false;
if(config.options.chkExcludeEncryptedFromLists == undefined) config.options.chkExcludeEncryptedFromLists = false;

config.macros.EncryptionChangePassword = {};
config.macros.EncryptionChangePassword.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
    var theButton = createTiddlyButton(place,
				       (params[0] && params[0].length > 0) ? params[0] : "Change Passwords", 
				       (params[1] && params[1].length > 0) ? params[1] : "Change Passwords" + (params[2] ? " for prompt "+params[2] : ""), 
				       onClickEncryptionChangePassword,
				       null,
				       null,
				       params[3]);
    if(params[2] && params[2].length > 0) {
	theButton.setAttribute("promptString", params[2]);
    }
};

config.macros.EncryptionDecryptAll = {};
config.macros.EncryptionDecryptAll.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
    var theButton = createTiddlyButton(place,
				       (params[0] && params[0].length > 0) ? params[0] : "Decrypt All", 
				       (params[1] && params[1].length > 0) ? params[1] : "Decrypt All Tiddlers" + ((params[2] && params[2].length > 0) ? " for prompt "+params[2] : " for a given 'prompt string'"), 
				       onClickEncryptionDecryptAll,
				       null,
				       null,
				       params[3]);
    if(params[2] && params[2].length > 0) {
	theButton.setAttribute("promptString", params[2]);
    }
};

config.macros.EncryptionDecryptThis = {};
config.macros.EncryptionDecryptThis.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
    var theButton = createTiddlyButton(place,
				       (params[0] && params[0].length > 0) ? params[0] : "Decrypt", 
				       (params[1] && params[1].length > 0) ? params[1] : "Decrypt this Tiddler", 
				       onClickEncryptionDecryptThis,
				       null,
				       null,
				       params[3]);
    if(params[2] && params[2].length > 0) {
	theButton.setAttribute("theTiddler", params[2]);
    }
};
// Called by the EncryptionChangePassword macro/button
// Also invoked by the callback for password entry
function onClickEncryptionChangePassword(eventObject) {
    var promptString;
    if(!promptString && this.getAttribute) {
	promptString = this.getAttribute("promptString");
    }
    // I do call this function directly
    if(!promptString && typeof(eventObject) == "string") {
	promptString = eventObject;
    }
    if(!promptString) {
	promptString = prompt("Enter 'prompt string' to change password for:","");
    }
    if(!promptString) {
	return;
    }
    if(! config.encryptionPasswords[promptString]) {
	var changePasswordContext = {changePasswordPromptString: promptString,
				     callbackFunction: MyChangePasswordPromptCallback_TiddlerEncryptionPlugin};
	MyPrompt_TiddlerEncryptionPlugin(promptString,"",changePasswordContext);
	return;
	// Callback function will re-invoke this function
    }

    // Decrypt ALL tiddlers for that prompt
    onClickEncryptionDecryptAll(promptString);
    // Now ditch the cached password, this will force the re-request for the new password, on save.
    displayMessage("Save TiddlyWiki to set new password for '"+promptString+"'");
    config.encryptionPasswords[promptString] = null;
    // mark store as dirty so a save will be requrested.
    store.setDirty(true);
    autoSaveChanges(); 
    return;
};
// Called by the password entry form when the user clicks 'OK' button.
function MyChangePasswordPromptCallback_TiddlerEncryptionPlugin(context) {
    config.encryptionPasswords[context.passwordPrompt] = context.password;
    onClickEncryptionChangePassword(context.changePasswordPromptString);
    return;
}
// Called by the EncryptionDecryptThis macro/button
function onClickEncryptionDecryptThis() {
    var theTiddler = this.getAttribute("theTiddler");
    if(!theTiddler) {
	return;
    }
    config.encryptionReEnterPasswords = true;
    try {
	theTiddler = store.getTiddler(theTiddler);
	config.encryptionReEnterPasswords = false;
	story.refreshAllTiddlers();
    } catch (e) {
	if(e == "DecryptionFailed") {
	    displayMessage("Decryption failed");
	    return;
	}
    } // catch
    return;
};
// called by the EncryptionDecryptAlll macro/button
// Also called by the callback after the user clicks 'OK' button on the password entry form
function onClickEncryptionDecryptAll(eventObject) {
    var promptString;
    if(!promptString && this.getAttribute) {
	promptString = this.getAttribute("promptString");
    }
    // I do call this function directly
    if(!promptString && typeof(eventObject) == "string") {
	promptString = eventObject;
    }
    if(!promptString) {
	promptString = "";
    }

    // Loop through all tiddlers, looking to see if there are any Decrypt(promptString) tagged tiddlers
    // If there are, check to see if their password has been cached.
    // If not, ask for the first one that is missing, that we find
    // the call back function will store that password then invoke this function again, 
    // which will repeat the whole process. If we find all passwords have been cached
    // then we will finally do the decryptAll functionality, which will then
    // be able to decrypt all the required tiddlers, without prompting.
    // We have to do this whole rigmarole because we are using a 'form' to enter the password
    // rather than the 'prompt()' function - which shows the value of the password.
    var tagToSearchFor="Decrypt("+promptString;
    config.encryptionReEnterPasswords = true; 
    var promptGenerated = false;
    store.forEachTiddler(function(store,tiddler) {
	    // Note, there is no way to stop the forEachTiddler iterations
	    if(!promptGenerated && tiddler && tiddler.tags) {
		for(var ix=0; ix<tiddler.tags.length && !promptGenerated; ix++) {
		    if(tiddler.tags[ix].indexOf(tagToSearchFor) == 0) {
			var tag = tiddler.tags[ix];
			var lastBracket=tag.lastIndexOf(")");
			if(lastBracket >= 0) {
			    // Ok, tagged with Encrypt(passwordPrompt)
			    // extract the passwordPrompt name
			    var passwordPromptString=tag.substring(8,lastBracket);
			    if(!config.encryptionPasswords[passwordPromptString]) {
				// no password cached, prompt and cache it, rather than decryptAll
				// callback from prompting form will resume decryptAll attempt.
				var decryptAllContext = {decryptAllPromptString: promptString,
							 callbackFunction: MyDecryptAllPromptCallback_TiddlerEncryptionPlugin};
				MyPrompt_TiddlerEncryptionPlugin(passwordPromptString,"",decryptAllContext);
				promptGenerated = true;
			    } // if(!config.encryptionPasswords
			} // if(lastBracket
		    } // if(tiddler.tags[ix]..
		} // for
	    } // if
	}); // store.forEachTiddler
    // If we get here, all passwords have been cached.
    if(!promptGenerated) {
	config.encryptionReEnterPasswords = false;
	// Now do the decrypt all functionality
	try {
	    store.forEachTiddler(function(store,tiddler) {
		    // Note, there is no way to stop the forEachTiddler iterations
		    if(tiddler && tiddler.tags) {
			for(var ix=0; ix<tiddler.tags.length; ix++) {
			    if(tiddler.tags[ix].indexOf(tagToSearchFor) == 0) {
				try {
				    CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler);
				} catch (e) {
				    displayMessage("Decryption of '"+tiddler.title+"' failed.");
				    // throw e;
				}
			    } // if(tiddler.tags
			} // for
		    } // if
		}); // store.forEachTiddler
	    displayMessage("All tiddlers" + (promptString != "" ? " for '"+promptString+"'" : "") + " have been decrypted");
	} catch (e) {
	    if(e == "DecryptionFailed") {
		return;
	    }
	} // catch
    }
    return;
};

function MyDecryptAllPromptCallback_TiddlerEncryptionPlugin(context) {
    config.encryptionPasswords[context.passwordPrompt] = context.password;
    // restart the decryptAll process again after the user has entered a password.
    onClickEncryptionDecryptAll(context.decryptAllPromptString);
    return;
}

saveChanges_TiddlerEncryptionPlugin = saveChanges;
saveChanges = function(onlyIfDirty,tiddlers) {
    // Loop through all tiddlers, looking to see if there are any Encrypt(string) tagged tiddlers
    // If there are, check to see if their password has been cached.
    // If not, ask for the first one that is missing, that we find
    // the call back function will store that password then invoke this function again, 
    // which will repeat the whole process. If we find all passwords have been cached
    // then we will finally call the original saveChanges() function, which will then
    // be able to save the tiddlers.
    // We have to do this whole rigmarole because we are using a 'form' to enter the password
    // rather than the 'prompt()' function - which shows the value of the password.
    config.encryptionReEnterPasswords = true; 
    var promptGenerated = false;
    store.forEachTiddler(function(store,tiddler) {
	    if(!promptGenerated && tiddler && tiddler.tags) {
		for(var ix=0; ix<tiddler.tags.length && !promptGenerated; ix++) {
		    if(tiddler.tags[ix].indexOf("Encrypt(") == 0) {
			var tag = tiddler.tags[ix];
			var lastBracket=tag.lastIndexOf(")");
			if(lastBracket >= 0) {
			    // Ok, tagged with Encrypt(passwordPrompt)
			    // extract the passwordPrompt name
			    var passwordPrompt=tag.substring(8,lastBracket);
			    if(!config.encryptionPasswords[passwordPrompt]) {
				// no password cached, prompt and cache it, rather than save
				var saveContext = {onlyIfDirty: onlyIfDirty, 
						   tiddlers: tiddlers, 
				                   callbackFunction: MySavePromptCallback_TiddlerEncryptionPlugin};
				MyPrompt_TiddlerEncryptionPlugin(passwordPrompt,"",saveContext);
				promptGenerated = true;
			    } // if(!config.encryptionPasswords
			} // if(lastBracket
		    } // if(tiddler.tags[ix]..
		} // for
	    } // if
	}); // store.forEachTiddler
    // If we get here, all passwords have been cached.
    if(!promptGenerated) {
	config.encryptionReEnterPasswords = false;
	saveChanges_TiddlerEncryptionPlugin(onlyIfDirty,tiddlers);
    }
    return;
}

function MySavePromptCallback_TiddlerEncryptionPlugin(context) {
    config.encryptionPasswords[context.passwordPrompt] = context.password;
    // validate the password entered by attempting to decrypt all tiddlers
    // with the same encryption prompt string.
    onClickEncryptionDecryptAll(context.passwordPrompt);

    // restart the save process again
    saveChanges(context.onlyIfDirty, context.tiddlers);
    return;
}

store.getSaver().externalizeTiddler_TiddlerEncryptionPlugin = store.getSaver().externalizeTiddler;
store.getSaver().externalizeTiddler = function(store, tiddler) {
    // Ok, got the tiddler, track down the passwordPrompt in the tags.
    // track down the Encrypt(passwordPrompt) tag
    if(tiddler && tiddler.tags) {
	for(var g=0; g<tiddler.tags.length; g++) {
	    var tag = tiddler.tags[g];
	    if(tag.indexOf("Encrypt(") == 0) {
		var lastBracket=tag.lastIndexOf(")");
		if(lastBracket >= 0) {
		    // Ok, tagged with Encrypt(passwordPrompt)
		    // extract the passwordPrompt name
		    var passwordPrompt=tag.substring(8,lastBracket);
		    // Ok, Encrypt this tiddler!
		    var decryptedSHA1 = Crypto.hexSha1Str(tiddler.text);
		    var password =  GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(passwordPrompt);
		    if(password) {
			var encryptedText = TEAencrypt(tiddler.text, password);
			encryptedText = StringToHext_TiddlerEncryptionPlugin(encryptedText);
			tiddler.text = "Encrypted("+decryptedSHA1+")\n"+encryptedText;
			// Replace the Tag with the Decrypt() tag
			tiddler.tags[g]="Decrypt("+passwordPrompt+")";
			// let the store know it's dirty
			store.setDirty(tiddler.title, true);
			// prevent searches on encrypted tiddlers, still nice to search on title though.
			if(config.options.chkExcludeEncryptedFromSearch == true) {
			    tiddler.tags.push("excludeSearch");
			}
			// prevent lists of encrypted tiddlers
			if(config.options.chkExcludeEncryptedFromLists == true) {
			    tiddler.tags.push("excludeLists");
			}
		    } else {
			// do not encrypt - no password entered
		    }
		    break;
		} // if (lastBracket...
	    } // if(tag.indexOf(...
	} // for(var g=0;...
    } // if(tiddler.tags...
    
    // Then, finally, do the save by calling the function we override.

    return store.getSaver().externalizeTiddler_TiddlerEncryptionPlugin(store, tiddler);
};

function CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler) {
    if(tiddler && tiddler.tags) {
	for(var g=0; g<tiddler.tags.length; g++) {
	    var tag = tiddler.tags[g];
	    if(tag.indexOf("Decrypt(") == 0) {
		var lastBracket=tag.lastIndexOf(")");
		if(lastBracket >= 0) {
		    if(tiddler.text.substr(0,10) == "Encrypted(") {
			var closingSHA1Bracket = tiddler.text.indexOf(")");
			var decryptedSHA1 = tiddler.text.substring(10, closingSHA1Bracket);
			// Ok, tagged with Decrypt(passwordPrompt)
			// extract the passwordPrompt name
			var passwordPrompt=tag.substring(8,lastBracket);
			// Ok, Decrypt this tiddler!
			var decryptedText = tiddler.text.substr(closingSHA1Bracket+2);
			decryptedText = HexToString_TiddlerEncryptionPlugin(decryptedText);
                        // prompt("Decryption request for Tiddler '"+tiddler.title+"'");
			var password = GetAndSetPasswordForPromptToDecrypt_TiddlerEncryptionPlugin(passwordPrompt);
			if(password) {
			    decryptedText = TEAdecrypt(decryptedText, password );
			    var thisDecryptedSHA1 = Crypto.hexSha1Str(decryptedText);
			    if(decryptedSHA1 == thisDecryptedSHA1) {
				tiddler.text = decryptedText;
				// Replace the Tag with the Encrypt() tag
				tiddler.tags[g]="Encrypt("+passwordPrompt+")";
				if(tiddler.tags[tiddler.tags.length-1] == 'excludeLists') {
				    // Remove exclude lists only if it's the last entry
				    // as it's automatically put there by encryption
				    tiddler.tags.length--;
				}
				if(tiddler.tags[tiddler.tags.length-1] == 'excludeSearch') {
				    // Remove exclude search only if it's the last entry
				    // as it's automatically put there by encryption
				    tiddler.tags.length--;
				}
			    } else {
				// Did not decrypt, discard the password from the cache
				config.encryptionPasswords[passwordPrompt] = null;
				config.encryptionReEnterPasswords = false;
				throw "DecryptionFailed";
			    }
			} else {
			    // no password supplied, dont bother trying to decrypt
			    config.encryptionReEnterPasswords = false;
			    throw "DecryptionFailed";
			}
		    } else {
			// Tagged as encrypted but not expected format, just leave it unchanged
		    }
		    break; // out of for loop
		} // if (lastBracket...
	    } // if(tag.indexOf(...
	} // for(var g=0;...
    } // if (tiddler && tags)
    return tiddler;
};

store.getTiddler_TiddlerEncryptionPlugin = store.getTiddler;
store.getTiddler = function(title) {
    var tiddler = store.getTiddler_TiddlerEncryptionPlugin(title);
    if(tiddler) { // shadow tiddlers are not expected to be encrypted.
	try {
	    return CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler);
	} catch (e) {
	    if(e == "DecryptionFailed") {
		var tiddler = store.getTiddler("DecryptionFailed");
		if(!tiddler) {
		    tiddler = new Tiddler();
		    tiddler.set(title,
				"<<EncryptionDecryptThis \"Decrypt\" \"Decrypt this tiddler\" \""+title+"\">>",
				config.views.wikified.shadowModifier,
				version.date,[],version.date);
		} 
		return tiddler;
	    } // if(e)
	} // catch
    } // if(tiddler) {
    return null;
};

store.getTiddlerText_TiddlerEncryptionPlugin = store.getTiddlerText;
store.getTiddlerText = function(title,defaultText) {
    // Simply retrieve the tiddler, normally, if it requires decryption, it will be decrypted
    var decryptedTiddler = store.getTiddler(title);
    if(decryptedTiddler) {
	return decryptedTiddler.text;
    }
    //Ok, rather than duplicate all the core code, the above code should fail if we reach here
    // let the core code take over.
    return  store.getTiddlerText_TiddlerEncryptionPlugin(title,defaultText);
};

// Given a prompt, search our cache to see if we have already entered the password.
// Can return null if the user enters nothing.
function MyPrompt_TiddlerEncryptionPlugin(promptString,defaultValue,context) {
    if(!context) {
	context = {};
    }
    context.passwordPrompt = promptString;
    PasswordPrompt.prompt(MyPromptCallback_TiddlerEncryptionPlugin, context);
    return;
}

function MyPromptCallback_TiddlerEncryptionPlugin(context) {
    if(context.callbackFunction) {
	context.callbackFunction(context);
    } else {
	config.encryptionPasswords[context.passwordPrompt] = context.password;
	story.refreshAllTiddlers(true);
    }
    return;
}

function GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString) {
    if(!config.encryptionPasswords[promptString]) {
	config.encryptionPasswords[promptString] = MyPrompt_TiddlerEncryptionPlugin(promptString, "");
    }
    return config.encryptionPasswords[promptString]; // may be null, prompt can be cancelled.
}

function GetAndSetPasswordForPromptToDecrypt_TiddlerEncryptionPlugin(promptString) {
    if(config.encryptionReEnterPasswords) {
	return GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString);
    } else {
	return config.encryptionPasswords[promptString];
    }
}

// Make the encrypted tiddlies look a little more presentable.
function StringToHext_TiddlerEncryptionPlugin(theString) {
    var theResult = "";
    for(var i=0; i<theString.length; i++) {
	var theHex = theString.charCodeAt(i).toString(16);
	if(theHex.length<2) {
	    theResult += "0"+theHex;
	} else {
	    theResult += theHex;
	}
	if(i && i % 32 == 0)
	    theResult += "\n";
    }
    return theResult;
}

function HexToString_TiddlerEncryptionPlugin(theString) {
    var theResult = "";
    for(var i=0; i<theString.length; i+=2) {
	if(theString.charAt(i) == "\n") {
	    i--;	// cause us to skip over the newline and resume
	    continue;
	}
	theResult += String.fromCharCode(parseInt(theString.substr(i, 2),16));
    }
    return theResult;
}
//
// Heavily leveraged from http://trac.tiddlywiki.org/browser/Trunk/contributors/SaqImtiaz/verticals/Hesperian/PasswordPromptPlugin.js  Revision 5635
//
PasswordPrompt ={
  prompt : function(callback,context){
	if (!context) {
	    context = {};
	}
	var box = createTiddlyElement(document.getElementById("contentWrapper"),'div','passwordPromptBox');
	box.innerHTML = store.getTiddlerText('PasswordPromptTemplate');
	box.style.position = 'absolute';
	this.center(box);
	document.getElementById('promptDisplayField').value = context.passwordPrompt;
	var passwordInputField = document.getElementById('passwordInputField');
	passwordInputField.onkeyup = function(ev) {
	    var e = ev || window.event;
	    if(e.keyCode == 10 || e.keyCode == 13) { // Enter
		PasswordPrompt.submit(callback, context);
	    }
	};
	passwordInputField.focus();
	document.getElementById('passwordPromptSubmitBtn').onclick = function(){PasswordPrompt.submit(callback,context);};
	document.getElementById('passwordPromptCancelBtn').onclick = function(){PasswordPrompt.cancel(callback,context);};
    },     
 	       
  center : function(el){
	var size = this.getsize(el);
	el.style.left = (Math.round(findWindowWidth()/2) - (size.width /2) + findScrollX())+'px';
	el.style.top = (Math.round(findWindowHeight()/2) - (size.height /2) + findScrollY())+'px';
    },
 	       
  getsize : function (el){
	var x = {};
	x.width = el.offsetWidth || el.style.pixelWidth;
	x.height = el.offsetHeight || el.style.pixelHeight;
	return x;
    },
 	       
  submit : function(cb,context){
	context.passwordPrompt = document.getElementById('promptDisplayField').value;
	context.password = document.getElementById('passwordInputField').value;
	var box = document.getElementById('passwordPromptBox');
	box.parentNode.removeChild(box);
	cb(context);
	return false;
    },

  cancel : function(cb,context){
	var box = document.getElementById('passwordPromptBox');
	box.parentNode.removeChild(box);
	return false;
    },
 	       
  setStyles : function(){
	setStylesheet(
	    "#passwordPromptBox dd.submit {margin-left:0; font-weight: bold; margin-top:1em;}\n"+
	    "#passwordPromptBox dd.submit .button {padding:0.5em 1em; border:1px solid #ccc;}\n"+
	    "#passwordPromptBox dt.heading {margin-bottom:0.5em; font-size:1.2em;}\n"+
	    "#passwordPromptBox {border:1px solid #ccc;background-color: #eee;padding:1em 2em;}",'passwordPromptStyles');
    },
 	       
  template : '<form action="" onsubmit="return false;" id="passwordPromptForm">\n'+
  '    <dl>\n'+
  '        <dt class="heading">Please enter the password:</dt>\n'+
  '        <dt>Prompt:</dt>\n'+
  '        <dd><input type="text" readonly id="promptDisplayField" class="display"/></dd>\n'+
  '        <dt>Password:</dt>\n'+
  '        <dd><input type="password" tabindex="1" class="input" id="passwordInputField"/></dd>\n'+
  '        <dd class="submit">\n'+
  '            <a tabindex="2" href="javascript:;" class="button" id="passwordPromptSubmitBtn">OK</a>\n'+
  '            <a tabindex="3" href="javascript:;" class="button" id="passwordPromptCancelBtn">Cancel</a>\n'+
  '        </dd>\n'+
  '    </dl>\n'+
  '</form>',
 	                         
  init : function(){
	config.shadowTiddlers.PasswordPromptTemplate = this.template;
	this.setStyles();
    }
};
 	
PasswordPrompt.init();

// http://www.movable-type.co.uk/scripts/tea-block.html
//
// TEAencrypt: Use Corrected Block TEA to encrypt plaintext using password
//             (note plaintext & password must be strings not string objects)
//
// Return encrypted text as string
//
function TEAencrypt(plaintext, password)
{
    if (plaintext.length == 0) return('');  // nothing to encrypt
    // 'escape' plaintext so chars outside ISO-8859-1 work in single-byte packing, but keep
    // spaces as spaces (not '%20') so encrypted text doesn't grow too long (quick & dirty)
    var asciitext = escape(plaintext).replace(/%20/g,' ');
    var v = strToLongs(asciitext);  // convert string to array of longs
    if (v.length <= 1) v[1] = 0;  // algorithm doesn't work for n<2 so fudge by adding a null
    var k = strToLongs(password.slice(0,16));  // simply convert first 16 chars of password as key
    var n = v.length;

    var z = v[n-1], y = v[0], delta = 0x9E3779B9;
    var mx, e, q = Math.floor(6 + 52/n), sum = 0;

    while (q-- > 0) {  // 6 + 52/n operations gives between 6 & 32 mixes on each word
        sum += delta;
        e = sum>>>2 & 3;
        for (var p = 0; p < n; p++) {
            y = v[(p+1)%n];
            mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
            z = v[p] += mx;
        }
    }

    var ciphertext = longsToStr(v);

    return escCtrlCh(ciphertext);
}

//
// TEAdecrypt: Use Corrected Block TEA to decrypt ciphertext using password
//
function TEAdecrypt(ciphertext, password)
{
    if (ciphertext.length == 0) return('');
    var v = strToLongs(unescCtrlCh(ciphertext));
    var k = strToLongs(password.slice(0,16)); 
    var n = v.length;

    var z = v[n-1], y = v[0], delta = 0x9E3779B9;
    var mx, e, q = Math.floor(6 + 52/n), sum = q*delta;

    while (sum != 0) {
        e = sum>>>2 & 3;
        for (var p = n-1; p >= 0; p--) {
            z = v[p>0 ? p-1 : n-1];
            mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
            y = v[p] -= mx;
        }
        sum -= delta;
    }

    var plaintext = longsToStr(v);

    // strip trailing null chars resulting from filling 4-char blocks:
    plaintext = plaintext.replace(/\0+$/,'');

    return unescape(plaintext);
}


// supporting functions

function strToLongs(s) {  // convert string to array of longs, each containing 4 chars
    // note chars must be within ISO-8859-1 (with Unicode code-point < 256) to fit 4/long
    var l = new Array(Math.ceil(s.length/4));
    for (var i=0; i<l.length; i++) {
        // note little-endian encoding - endianness is irrelevant as long as 
        // it is the same in longsToStr() 
        l[i] = s.charCodeAt(i*4) + (s.charCodeAt(i*4+1)<<8) + 
               (s.charCodeAt(i*4+2)<<16) + (s.charCodeAt(i*4+3)<<24);
    }
    return l;  // note running off the end of the string generates nulls since 
}              // bitwise operators treat NaN as 0

function longsToStr(l) {  // convert array of longs back to string
    var a = new Array(l.length);
    for (var i=0; i<l.length; i++) {
        a[i] = String.fromCharCode(l[i] & 0xFF, l[i]>>>8 & 0xFF, 
                                   l[i]>>>16 & 0xFF, l[i]>>>24 & 0xFF);
    }
    return a.join('');  // use Array.join() rather than repeated string appends for efficiency
}

function escCtrlCh(str) {  // escape control chars etc which might cause problems with encrypted texts
    return str.replace(/[\0\t\n\v\f\r\xa0'"!]/g, function(c) { return '!' + c.charCodeAt(0) + '!'; });
}

function unescCtrlCh(str) {  // unescape potentially problematic nulls and control characters
    return str.replace(/!\d\d?\d?!/g, function(c) { return String.fromCharCode(c.slice(1,-1)); });
}

//}}}
@@いつの間にかバージョンがあがっていました。(2.2.4 on 2007.8.2)@@
  バックステージとかできて使いやすい。

1ファイルでできているwiki.
本家本元は[[こちら|http://www.tiddlywiki.com/]].
そのほかにも、以下の日本語ページが参考になります(すでにちょっと古いか)。

#[[TiddlySnip - About|http://tiddlysnip.com/#About]]
##まるで、OneNoteのようにwebから選択するとtiddlyにしてくれるfirefox用extention.必須
# [[TiddlyWiki Style - Tips, Macros and FAQ|http://www.geocities.jp/wikistyle/]]
#[[素敵なTiddlyWiki - カスタマイズノート|http://www.geocities.jp/potto372/tiddlywiki/tiddlywikinote.html]]
NSFとNICTの共同の[[ワークショップ|http://www.csee.umkc.edu/us-japan-fnw/]]。
Invitation onlyで米国側の参加者は以下の予定。

Academic:
	Kevin	Almeroth, UC at Santa Barbara
	Kenneth	Calvert, Kentucky
	Victor 	Frost, Univ of Kansas
	Raj 	Jain, Wash U (St. Louis)
	Kevin 	Jeffay, Univ of North Carolina
	Miron 	Livny, Wisconsin
	John W. 	Lockwood, Stanford
	Steve Low, Caltech
	Matt 	Mathis, Pittsburgh Supercomputer Center
	Deep 	Medhi, Univ of Missouri-Kansas City
	Nic McKeown, Stanford	
	John 	Mitchell, Stanford
	Guru 	Parulkar, Stanford
	Dipankar Raychaudhuri, Rutgers
	[[Joseph 	Touch , ISI |  http://www.isi.edu/touch/]] [[RNA| http://www.isi.edu/rna/rna-icccn08.pdf]]プロジェクト

Industry/Internet2
	Flavio	Bonomi, Cisco
	Albert	Greenberg, Microsoft
	Tony	Li, Redback
	Krishan 	Sabnani, Alcatel-Lucent
	Rick 	Summerhill, Internet2

Day 1: Morning (8:30–12:00)
• Introductions
• Statement of Goals (Peter Arzberger and Kim Baldridge)
• Overviews (9:15 – 12:00)
o Swiss Grid (Goals of Swiss Grid, Experiences to date)
 by Christoph Witzig
 SWINGというフェデレーションによりスイス内はshibollethによるID連携ができてる。ただ、eduroamとの連携はまだ。
SWINGはグリッドのsustainableなモデルを探るための今から4年のプロジェクトである。

o Euro-Grid (Federated Approach, Experience to date)
 by Dieter Kranzlmueller
 EGI (Europian Grid Initiative)はまだEUのプロジェクトではなく、ボランタリーなinitiativeであるが、継続のためにleagal entityを設立することを目指している。
 grid vs reearch network
   まだまだクリティカルではない。
    EGEEもその意味では継続が難しい
  application neutral なグリッドを作れというEUからのrecommendation
     -- 今はhigh energy physicsだけ。
   各国にNGI (National Grid Initiative)を作ることをおねがいし、一国一代表を守る。
   したがって、institution levelの参加が必要
   FP7の中ではsustainable grid/data based e-infrastructure (utility model)
     conseptual model for sustainabilityを求めている
  ハードウェアをサポートするのは、それぞれの国(NGI)の責任

  EGI Vision Paperがすでに出ています。
 
  欧州はproduction gridを設立するために、leagal entityを建てようとしている。
  それによってfundを呼び込むことにしている。最後はサービスチャージをとるモデルに移行。

o Asia Pacific (Overview of activities in PRAGMA and the Asia Pacific)
§ Peter Arzberger and others
  telescience WGの報告をする
Working Lunch: 12:00-2:00 representative areas
 各国からのグリッドの報告
Australia: David Abramson
China: Hai Jin
EU: Piotr Bala
Japan: Shinji Shimojo NAREGIについて言及
Korea: Kum Won Cho
Malaysia: Habibah Wahab
Taiwan: Fang-Pang Lin
Thailand: Somsak Sriprayoonsakul

Day 1: Afternoon (2:00-5:00)
Theme: Synergistic Activities: Applications and Middleware
• Discussions on applications/technology synergism
o Phil Papadopoulos/Mason Katz
o David Abramson/Kim Baldridge
• Discussions on specific middleware (selected carefully for areas where there would be interest in
having the software work together. Focus in part on directions of development)
o Cindy Zheng/Nadya Williams
o Kai Nan

追加 Creig
SWITCHでのshibollethの運用(くらしくは[[こちら|http://www.switch.ch/aai/)
microsoftが学生だけにソフトウェアを配ったりするのに使っている。
 SLCS and VASH
  shibollethからgLiteを使う仕掛け
  @@new VOMSはshibolleth対応になっている。
   shibborethからtokenをもらう。-> STS (Security Token Service)
     kerberosでも使える。@@


これまでのswiss内での様々なグリッドプロジェクトをまとめて、Swiss Grid ([[SWITCH|http://www.switch.ch/]])が新しくでき、一方でEGI ([[Europian Grid Initiative|http://web.eu-egi.org/]])ができそうな雰囲気なので、swissとしてどう進めばいいかを考えるタイミングになっている。
EUの中でもグリッドをどうやってsustainableにするかが、問題になっているようでまずはfeasibleなモデルを試してみて、将来的にはサービス課金などにより長期的に維持する仕掛けを模索しているようだ。
グリッドはネットワークほどにはクリティカルな資源になっていないという認識がある。

ただ、欧州の動きはEGEEやDEISAに代表されるようにどちらかというと物理屋さんが引っ張る重いもので、PRAGMAのような軽いグリッドとは異なっている。
その意味でディスカッションがすれ違った[[pragma institute day 1]]であった。
全天周立体映像ドーム。[[科学技術館|http://www.jsf.or.jp/exhibit/floor/4/4b/]]にあり、現在は国立天文台4次元デジタル宇宙プロジェクト([[4D2Uプロジェクト|http://4d2u.nao.ac.jp/]])のコンテンツである「天の川銀河」、理化学研究所横浜研究所オミックス基盤研究領域(旧・ゲノム科学総合研究センター)による、「セントラルドグマ」同じく理研の戎崎さんらによる「コズミック・ディスカバリーズ」が9月10月は上映されている。
特に、最後のやつは全天周の迫力があった。未来のプラネタリュームなんだろう。
立体ドームも含めて、[[オリハルコン]]という会社が関わっている。

氏の大阪大学の国際推進室アドバイザリーボードの就任に合わせて、後援会が行われた(氏の紹介およびプログラムは[[こちら|http://www.osaka-u.ac.jp/jp/international/iab/eventdetail080328.html]])。
日本で勉強をして、ルワンダに帰り、その後、帰国、内戦に巻き込まれ、偶然アムダの通訳になった
[[カンベンガ・マリールイーズ|http://www.rwanda-npo.org/syoukai.html]]さんの話を紹介された。
「日本にいる時にホストファミリーの80歳のおばーさんが私に毎日新聞を読んで聞かせてくれた。日本の教育のすそ野の広さを思い知らされた。私は教育によって生き延びることができた。」という彼女の原体験が今の活動につながっているという話。
一方で、今の日本の現状にも触れ、「日銀総裁も決められない国」そのことが、国際社会に迷惑をかけている。と警鐘を鳴らされた。

これからの日本に必要な人材はrule makingをできる人間であり、そういう人たちを育てることを大学でやってほしい。そのためには、
# 若い人たちに、海外とくに途上国に行き、その文化に触れる機会を作ってほしい。
# 逆に、今いる留学生と学生が触れ合う機会を増やしてほしい。
というご示唆をいただいた。


なかで、ご紹介された[[国連職員NOW! |http://www.unforum.org/unstaff/68.html]]には、国連職員として活躍する日本人が紹介されている。元気が出る。
案内は[[こちら|http://www.ieice.org/tokyo/sinpo.html#menu16]]
JGN2plusについて紹介。
池田先生から「新世代ネットワークというのは、インターネットが最初は研究者のおもちゃだったのに、最近は遊べなくなったので、新しいおもちゃを作るということですか」と聞かれましたが。言い得て妙。「そのとおりです」と答えました。
#[[CKP]] 幹事
#日本学術振興会 インターネット技術第163委員会(Internet Technology Research Committee([[ITRC]]))委員長
#[[NPO法人バイオグリッド関西|http://www.biogrid.jp/npo/]] 理事長
#IEEE/IPSJ [[SAINT|http://www.saintconference.org/]] Steering Committee
#学術会議 連携会員
日立の庄山様、PhillipsのLoenen氏より講演を頂いた。プログラムは[[こちら|http://www.ist.osaka-u.ac.jp/GlobalCOE/activity/kickoff-symposium/overview]]。
欧州の[[Ambient Intelligence|http://www.ambientintelligence.org/]]はまさに北ヤードの目指すビジョンだと思った。Phillipsはeldary house lab, future shop labなどのshow caseを作って実験をしている。
Phillipsは自らの商品を以下の4段階でわけ、上にあがっていくべきと考えている。
# Stage experience
# Deliver service
# Make goods
# Extract commodities
(日本の家電屋さんや通信屋さんもかんがえるべき)
ここの高幣俊之氏は科学技術の可視化にも関わり、かなり面白い。
[[synraの開発|http://orihalcon.jp/news-and-topics/synra-dome-theater.html]]を始め、様々な可視化ツールの開発にも関わっておられるようだ。
科学技術館4Fには、大阪市立大学 [[南繁行|http://www.elec.eng.osaka-cu.ac.jp/~minami/]]教授監修のオーロラに関する展示がある。非常によくまとまっている。先生のHPにも[[オーロラに関する解説|http://helec.elec.eng.osaka-cu.ac.jp/~minami/sci04G.htm]]があふれている。科学に対する真摯な態度が垣間見えて暖かい。
束セグと呼ばれるディジタル地上波からワンセグ放送部分を抜き出して、束ねて放送する技術。札幌などで[[実証実験|http://plusd.itmedia.co.jp/mobile/articles/0805/28/news060.html]]が行われている。概要については、隅倉氏の[[記事|http://itpro.nikkeibp.co.jp/article/COLUMN/20080709/310490/?ST=network]]が詳しい。放送を束ねるついでにデータも束ねようと。当然ディジタル地上波が届かないことがポイント。
ネットワーク研究と社会の接点
コンピュータやインターネットはそもそも社会の強いニーズから発明され、発展してきた経緯があり、
それにまつわる技術は、社会の進展と無関係ではいられない。この傾向は今後のユビキタス社会ではより強くなると思われる。最近のネットワーク中立性の議論やユビキタスサービスにおけるプライバシーの議論など、むしろ、社会が技術に積極的にかかわらなければならない側面が増えている。この授業では、ユビキタスネットワーキングや次世代ネットワークの話題から社会と技術係わり方を議論していきたい。

資料は[[こちら|https://salamis.ais.cmc.osaka-u.ac.jp/dsweb/Get/Document-51792/%E5%B2%A1%E5%B1%B1%E5%A4%A7%E5%AD%A6%E3%83%95%E3%83%AB.pdf]]
縁あって、情報通信研究機構 上席研究員として着任いたしました。
大手町ネットワーク研究統括センター 統括センター長 というのが主な任務で、それ以外に
連携研究部門 テストベッド研究推進グループ グループリーダ、連携研究部門 テストベッド研究推進グループ 大手町リサーチセンター センター長を兼務しております。
要するに4月1日よりスタートしたJGN2plus(JGN2を引き継ぐ新たしいテストベッドネットワーク)の研究統括を担当しております。
新世代ネットワークプロジェクトと2人3脚で我が国のICTを通じた国際貢献、研究活動の発展に寄与できればと思っております。
よろしくおねがいします。
NLP系の人たちとsearchの人たちが集まって新しい潮流ができた。一昔前とは違って、情報の人たちも必死に世の中にアピールしている感じがしてすごい。(さすが、喜連川先生)
ユビキタス・センサー系もがんばらねば。
プログラムは[[こちら|http://www.infoplosion.nii.ac.jp/info-plosion/html/houkokukai-h19/]]
工学博士.
昭和33年4月7日生.
昭和61年3月大阪大学大学院基礎工学研究科後期課程修了.
昭和61年4月大阪大学基礎工学部助手.
平成元年2月同大学大型計算機センター講師.
平成3年4月同センター助教授.
平成10年4月同センター教授.
平成12年4月同大学サイバーメディアセンター教授.副センター長
平成17年8月 大阪大学サイバーメディアセンター教授・センター長
平成19年8月 大阪大学サイバーメディアセンター教授・副センター長
平成20年4月 情報通信研究機構大手町ネットワーク研究統括センター/上席研究員
現在に至る.その間米国カリフォルニア大学アーバイン校 客員研究員.

!専攻:
マルチメディア応用システム・peer-to-peer コミュニケーションネットワーク
ユビキタスネットワークシステム・グリッド技術、新世代ネットワーク

!主な著書:
[1]	「ソシオネットワーク戦略とは何か」、鵜飼康東、下條真司、篠﨑彰彦、谷田則幸、須田一幸、矢田勝俊、榎原博之、渡邊朗子、小林孝史、渡邊真治、伊達進、竹村敏彦、村上雅俊、多賀出版、全250頁
[2]	「社会基盤としてのインターネット」、村田正幸、山口英、塚本昌彦、塚田晃司、星徹、下條真司、佐藤哲司、名和小太郎、篠崎彰彦、尾家祐二他、岩波講座インターネット、pp.172-195、岩波書店 (2001年9月)
[3]	「爆発するインターネット」、下條真司、安田浩、情報処理学会、pp. 286-294 (2000年10月)
[4]	「マルチメディアの世界/マルチメディアシステムのプラットフォーム」、天野英晴、有澤博、角田博保、河野真治、清水謙多郎、下條真司、高田広章、西尾章治郎、沼尾正行、原田裕明、松原仁他50名、エンサイクロペディア情報処理2000/2001、オーム社、pp.178-181&pp.189-196 (2000年3月)
[5]	「マルチメディアにおけるオペレーティングシステム」、下條真司、吉高淳夫、マルチメディアコンピューティング(Bit別冊)、共立出版、pp. 37-47 (1996年9月)
[6]	「情報通信概論」、下條真司、オーム社 (1989年)

!受賞等
*1995年郵政大臣表彰(大阪大学大型計算機センター)受賞
*2001年情報通信月間推進協議会会長表彰 志田林三郎賞
*2001年7月 日本医用画像工学会 論文賞を受賞
*2005年11月 第23回大阪科学賞
*2006年11月 HPC Analytics Challenge on SC07, Finalist

!その他
*平成15,16年 情報処理学会(国際担当理事)
*日本学術振興会インターネット技術第163委員会(委員長)
!最新情報
*[[研究者総覧から|http://www.dma.jim.osaka-u.ac.jp/kg-portal/aspi/RX0011D.asp?UNO=12074&page=]]
*[[Dblp(あまりによくできているのでびっくり)|http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/s/Shimojo:Shinji.html]]

!著者紹介
[[About Author]]
[[著者紹介]]
#H20-H22 年度 [[JGN2plus |http://www.jgn.nict.go.jp/]] 大手町統括リサーチセンター(SPARC)
# H20-H22 総務省 情報通信技術の研究開発 「[[ユビキタス・プラットフォーム技術の研究開発|http://www.soumu.go.jp/s-news/2008/pdf/080327_1_bs2.pdf]]」(阪大チームのご意見番)
#H17~H22年度 [[情報爆発時代に向けた新しいIT基盤技術の研究|http://i-explosion.ex.nii.ac.jp/i-explosion/index.php]] 文部科学省科学研究費補助金「特定領域研究」(代表:喜連川優)A01-00-03
#H15~ [[NAREGI|http://www.naregi.org/]]
#H14~ [[PRAGMA]]
## [[PRIUS|http://prius.ist.osaka-u.ac.jp/en/index.html]]
## [[PRIME]]

ようやくプライベートなページがオープンしました。
[[こちら|http://www6.ocn.ne.jp/~sshinji/]]もよろしく。
昭和33年4月7日生.
大阪大学基礎工学部大学院後期課程, 昭和61年3月修了. 昭和61年大阪大学・助手.平成元年同大型計算機センター・講師.平成3年4月同助教授, 平成10年4月同教授、平成12年4月同大学サイバーメディアセンター副センター長、平成17年8月 同大阪大学センター長、平成19年8月 同副センター長、平成20年4月 情報通信研究機構大手町ネットワーク研究統括センター/上席研究員。現在に至る.
マルチメディア情報システムのアーキテクチャの研究に従事.データベースとネットワークに関連したマルチメディア応用システムに興味を持つ.オブジェクト指向データベースを応用したマルチメディアプレゼンテーションシステムHarmony, News On Demandシステム,QoSに対応した仮想現実共有システムC3、P2PエージェントプラットフォームPIAXなどの実装を通じてアーキテクチャを研究するというスタイルを取る.マルチメディアシステムの社会への応用にも高い関心があり,サイバー関西プロジェクト(CKP)での95年のAPEC大阪会議,97年のCOP3におけるインターネット会議中継にも参加している.また,通産省の実証実験事業,郵政省のギガビットネットワークなど次世代インターネット関係のプロジェクトにも関わった.これれの業績により、平成17年第23回大阪科学賞を授与。
工学博士.
電子情報通信学会, 情報処理学会, IEEE(Computer Society).
# H15-H19 総務省 情報通信技術の研究開発 「ユビキタスネットワーク技術の研究開発(ユビキタスネットワーク認証・エージェント技術)」 コンテンツ流通エージェント技術に関する研究開発
#H16-H19 年度 [[JGN II]] 大阪リサーチセンター
#H16~H20 Nii 委託研究「最先端学術情報基盤の構築に関する研究開発と調査[[CSI]]」(大阪大学で進行中)
# 科学技術振興調整費 重要解決型研究等の推進「[[セキュリティ情報の分析と共有システムの開発|http://61.193.204.197/html/20526A04001.htm]]」(代表:徳田 英幸(慶應義塾大学環境情報学部)、平成16年から平成17年まで参加)
# 文部科学省 科学技術振興費主要5分野の研究開発委託事業におけるITプログラム「スーパーコンピュータネットワークの構築」 [[バイオ・グリッドプロジェクト|http://www.biogrid.jp/]](平成14年から平成17年まで)
# 文部科学省 産学官連携イノベーション創出事業費補助金「構造解釈に基づいたセキュリティプログラムの開発」 (平成14年から平成15年)
# 文部科学省 21世紀COEプログラム研究拠点形成補助金[[「ネットワーク共生環境を築く情報技術の創出」 |http://www-nishio.ist.osaka-u.ac.jp/COE/]](平成14年から平成17年まで)
# 文部科学省 科学研究費補助金特定領域研究(2)「[[IT の深化の基盤を拓く情報学研究|http://research.nii.ac.jp/kaken-johogaku/]]」
## [[A05班|http://a05.ais.cmc.osaka-u.ac.jp/]]「Grid技術を適応した新しい研究手法とデータ管理技術の研究」(平成13年から平成17年まで)
# 文部科学省 科学研究費基盤研究(A)(2)[[「デジタルコンテンツとしての懐徳堂研究」|http://www.kaitokudo.jp/]](平成13年から平成15年)
# 文部科学省 振興調整費人材養成プロジェクト[[「セキュア・ネットワーク構築のための人材育成」|http://www.cmc.osaka-u.ac.jp/SecureNet/index.html]](平成13年から平成16年まで)
# 文部科学省 科学研究費「脳皮質インプラントによる運動機能再建の研究」(代表 加藤天美、平成15年)
## MEG Gridと呼ぶ。われわれの中では最初のグリッド応用プロジェクト。MEGのデータをグリッドで高速処理。
# 日本情報処理開発協会プロジェクト「次世代インターネットを用いた映像コンテンツ制作」(平成9年)
# 日本学術振興会 未来開拓事業「[[マルチメディア・コンテンツの高次処理の研究|http://www-nishio.ise.eng.osaka-u.ac.jp/JSPS/]]」分担者(代表:西尾章治郎)平成9年から5年間
# 文部省科学研究費「人間主体のマルチメディア環境形成のための情報媒介機構の研究」(代表:坂内正夫)
# 文部省科学研究費重点領域研究「メディア統合および環境統合のための高機能データベースシステムの研究開発」(略称「高度データベース」)平成8年から平成10年度まで
# 日本学術振興会 未来開拓事業「高度マルチメディア応用システム構築のための先進的ネットワークアーキテクチャ」分担者(代表:宮原秀夫)平成9年から5年間
# 財団法人日本情報処理開発協会 「スーパーコンパイラ・テクノロジの調査研究」(1998)

Source: [[|http://www.ais.cmc.osaka-u.ac.jp/~shimojo/]]
ユビキタスというよりSocial Capital Serviceに成長していきました。石郷課長から青森市の「コンパクトシティ構想」についてはじめてじっくり聞きましたが、環境との共生、身の丈に合った成長など21世紀を先取りするアイデアだと思いました。それにITが役立てば最高です。
大都会ではみえてないのですね。
青森大好きになってしまいました。[[和和(にこにこ)|https://www.aomori-niko2.jp/]](3月いっぱい。そのあとは。。)もよろしく。
ちょっと前になりますが、須田先生が、GENE/FINDについてITPROで語っておられました。([[前半| http://itpro.nikkeibp.co.jp/article/Interview/20071011/284314/]], [[後半| http://itpro.nikkeibp.co.jp/article/Interview/20071011/284313/?ST=keit]])