次ã«ããã¯ãããžãŒãåŸã ã«æãäžããŠãããŸãã ããã€ãã®æãããªäºå®ã¯ããã§ã¯çç¥ãããŠãããããæåã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããã®ããã¥ã¢ã«ããã§ã«ãèªã¿ã«ãªãããšããå§ãããŸãã
config.xml
ãµãŒãã¹ã®ã¡ã€ã³ãã¡ã€ã«ã ã€ã³ã¹ããŒã«åŸããã£ãã·ã¥ããããã®å€æŽã¯ãªã¢ã«ã¿ã€ã ã®å€æŽã«ã€ãªãããŸããã ãµãŒãã¹ãåé€ããŠåã€ã³ã¹ããŒã«ããããšããã§ããŸããã ããã¯ããµãŒããŒåŽã®javascriptïŒãµãŒãã¹ã®ãªã³/ãªãã«åœ¹ç«ã¡ãŸãïŒã®åäœãšã¯ç°ãªããããã«ã¯ã©ã€ã¢ã³ãåŽã®javascriptããã³htmlïŒãªã¢ã«ã¿ã€ã ã§å€æŽãããŸãïŒãšã¯ç°ãªããŸãã
<widget network="public private">
<widgetname>Stream media</widgetname>
<description>Stream media online from your own computer with Opera Unite! Audio, video and etc.</description>
<author>
<name>avenu</name>
<organisation></organisation>
</author>
<feature name="http://xmlns.opera.com/webserver">
<param name="type" value="service"/>
<param name="servicepath" value="stream"/>
</feature>
<feature name="http://xmlns.opera.com/fileio">
<param name="folderhint" value="home" />
</feature>
</widget>
ãããã¯ãŒã¯=ãŠã£ãžã§ããã¿ã°ã®ããããªãã¯ãã©ã€ããŒããå±æ§ã«æ³šæããŠãã ãã-å€éšãµã€ãã§äœæ¥ããå Žåã¯æå¹ã«ããããšããå§ãããŸãã AJAXã®æ©èœã«ãããç°¡åãªæ¹æ³ã§ãããã«æ¥ç¶ã§ããªãããšã«æ³šæããŠãã ããã ãã ãããã®å±æ§ã䜿çšãããšããŠã£ãžã§ããèªäœã¯ãµãŒããŒäžã®åãAJAXã䜿çšããŠã€ã³ã¿ãŒãããã«æ¥ç¶ã§ããŸãã
ããã«ããã¡ã€ã«I / O APIã¯æ¬¡ã®å Žæã«æ¥ç¶ãããŠããŸãã
<feature name="http://xmlns.opera.com/fileio">
<param name="folderhint" value="home" />
</feature>
ãããŠããµãŒãã¹ã¢ãã¬ã¹ãã©ã®ããã«èŠãããïŒ
<param name="servicepath" value="stream"/>
Javascript
ãŸããOpera UniteãµãŒãã¹ã¯ç¹å¥ãªçš®é¡ã®ãŠã£ãžã§ããïŒã¯ããOperaã®åããŠã£ãžã§ããïŒã§ãããå€ãã®æ©èœãåããŠãããšããè³ã®æ å ±ãåãå ¥ããŸãã ããã«ããããŠã£ãžã§ããAPIé¢æ°ãé©çšå¯èœã«ãªããŸãã
Javascriptã¯ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã«åãããŠããŸãã Opera Unitedã®ãã¹ãŠã®ããžãã¯ã¯ãµãŒããŒã«ç»é²ãããŸãïŒPHP / Ruby / Python /ã®é¡äŒŒç©ãèæ ®ããŠãã ããïŒãã¯ã©ã€ã¢ã³ãã§ã¯ãŠãŒã¶ãŒãèŠããµã€ãã®ããžãã¯ãå®è£ ãããŸãã ããšãã°ãjQueryã䜿çšã§ããŸãã Uniteã®HTMLã¯ãMVCããã®ãã¥ãŒã«äŒŒãŠããŸãïŒããããããµãŒããŒåŽã®JavaScriptã¯ã³ã³ãããŒã©ãŒã«é¡äŒŒããŠããŸãïŒã ãŠãããã¯ãã¹ã¯ãªããããæž¡ãããå€æ°ã«å¿ããŠHTMLãçæããŸãã
ãããã£ãŠãã¯ã©ã€ã¢ã³ãã¹ã¯ãªãããCSSããã¡ã€ã«ã¯ããã©ã«ããã©ã«ããŒpublic_htmlã«é 眮ãããŸãã ãµãŒããŒã¹ã¯ãªãããšHTMLã¯ä»»æã®ãã©ã«ããŒã«é 眮ã§ããŸããããããžã®ãã¹ã¯èªåã§æå®ããŸãã ãããè¡ãã«ã¯ãã«ãŒãã§ãå°æ¥ã®æ§æãã¡ã€ã«ã®æšªã«ãindex.htmlãã¡ã€ã«ãäœæãããã¿ã€ãã®æ§é ã瀺ããŸãã
<!DOCTYPE html>
<script src="script/markuper.js"></script>
<script src="script/functions.js"></script>
<script src="script/operafunctions.js"></script>
<script src="script/script.js"></script>
åŸã§ããŒã¯ã¢ããã¡ã«ããºã ã䜿çšããŠHTMLãæ¥ç¶ããŸãã
次ã«ãäœæããæ¥ç¶ãããjavascriptã®1ã€ïŒããšãã°ãã¹ã¯ãªãããã©ã«ããŒããscript.jsïŒã§ããµãŒããŒã®ã€ãã³ãããªã³ã«ããåŠçãæ¥ç¶ããã¹ã¯ãªããã«ãªã¯ãšã¹ãåŠçïŒURLïŒãè¿œå ããŸãã
window.onload = function ()
webserver = opera.io.webserver
if (webserver)
{
//Handle requests for various URLs
webserver.addEventListener('_index', showEntryList, false);
webserver.addEventListener('shared', download, false);
}
}
_indexã¯ããµãŒãã¹ã®éå§ããŒãžã®èå¥åã§ãã ãã®ååã¯ããã©ã«ãã§ãã äžèšã®ã«ãŒãã¢ã¯ã»ã¹ã³ãŒãã§ã¯ãshowEntryListé¢æ°ãåŒã³åºãããŸãã åæ§ã«ãããŠã³ããŒãæ©èœãžã®åŒã³åºããè¿œå ããŠãã¿ã€ã/ãµãŒãã¹å/å ±æ/ bla / bla / blaã®ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ããUnitedã®ãã¡ã€ã«å ±æã®æ©èœã解決ããŸããã
é¢æ°ã§ã¯ãEventåã®å€æ°ã䜿çšã§ããããããããŸããŸãªäŸ¿å©ãªãªããžã§ã¯ããååŸã§ããŸãã
var response = e.connection.response;
var request = e.connection.request;
ãã ããã°ããŒãã«ãªãã©ãªããžã§ã¯ãã䜿çšããŠRequestãªããžã§ã¯ããŸãã¯Responeãªããžã§ã¯ããååŸã§ããŸãããããã«ã¢ã¯ã»ã¹ããæç¹ã§ãRequestã¯æ¢ã«æ°ããå¯èœæ§ããããŸãã
opera.io.webserver.connections.request
opera.io.webserver.connections.response
Requestã䜿çšããŠãGET / POSTïŒããããïŒãªã¯ãšã¹ãããããŒã¿ããã«ã§ããŸãïŒ
var index = request.queryItems['id'][0];
var password = request.bodyItems.passwords[0];
å¿çã¯ããŠãŒã¶ãŒçšã®ããŒãžãçæããŸãã
response.write( '<!DOCTYPE html>'
+ '<html><head><title>Entries</title></head>'
+ '<body><ul>'
);
ãã ããããã¯HTMLãæäœããæã䟿å©ãªæ¹æ³ã§ã¯ãããŸããã ããŒã¯ã¢ããã¡ã«ããºã ãæ€èšããŠãã ããã
HTML
ããŒã¯ã¢ããã䜿çšãããšããµãŒããŒããžãã¯ã§HTMLãã¡ã€ã«ãäœæã§ããŸãã ããã¯ã¡ãã£ãšããTidyãã³ãã¬ãŒããšã³ãžã³ã§ãã äœæ¥ãéå§ããã«ã¯ããµãŒãã¹ãã©ã«ããŒã®ã«ãŒãã«ããindex.htmlã®markuper.jsãã¡ã€ã«ãžã®ãªã³ã¯ãè¿œå ããå¿ èŠããããŸããããã¯ãµãŒããŒã¹ã¯ãªããã®æšªã«ãããŸãã ããããããŠã³ããŒãããå¿ èŠããããŸãïŒ dev.opera.com/libraries/markuper/markuper.js 泚-ããŒã«ãŒã¯_ãµãŒãã¹ãã©ã«ããŒã«ä¿åãããæ¥ç¶ãããŠããå¿ èŠããããŸã_ïŒ..ããã©ã«ãã§ã¯äœ¿çšã§ããŸããã
ããã§ãindex-template.htmlãªã©ã®ãã³ãã¬ãŒããã¡ã€ã«ãäœæãããã³ãã¬ãŒããªã©ã®ã«ãŒãïŒãŸãã¯ããæ·±ãïŒã®ãã©ã«ããŒã«è¿œå ã§ããŸãã ã¹ã¯ãªããã§ã¯ãæ°ããMarkaperãªããžã§ã¯ãã¯æ¬¡ã®ããã«ãªããŸãã
var template = new Markuper( 'templates/index-template.html');
ãã¡ã€ã«èªäœã¯æ¬¡ã®ããã«ãªããŸãã
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Tutorial</title>
</head>
<body>
<h1>{{name}} Tutorial</h1>
<p>
This variable is further down the data object hierarchy:
'{{further.down.the.hierarchy}}'
</p>
</body>
</html>
{{path.to.variable}}ã¯ãããããã£ã«ããå€æ°ã®ãã¹ã§ãã 次ã®ãããªã¹ã¯ãªããããæž¡ããŸãã
function handleRequest( event )
{
var response = event.connection.response;
var data =
{
name : 'Template',
further : {down: {the : {hierarchy: 'yes it is!' } } }
};
var template = new Markuper( 'templates/tutorial.html', data );
response.write( template.parse().html() );
response.close();
}
MarkaperïŒtemplate.parseïŒïŒã解æãããªããžã§ã¯ããHTMLã«å€æããå¿ èŠãããããšã«æ³šæããŠãã ããïŒtemplate.parseïŒïŒãHtmlïŒïŒã
ãã¡ã€ã«å ±æ
æãéèŠãªæ©èœãAPIã«ã¯ã»ãšãã©èª¬æãããŠããããäŸã«ã¯ãŸã£ããèšèŒãããŠããŸããã ãã®ããããµãŒãã¹ã®ã€ã³ã¹ããŒã«åŸãconfig.xmlã§æ¬¡ã®æ§æãæå®ããåŸãå ±æãããã©ã«ããŒããŠãŒã¶ãŒã«ç¢ºèªããããã«åŒ·å¶ããŸãã
<feature name="http://xmlns.opera.com/fileio">
<param name="folderhint" value="home" />
</feature>
homeã¯ããã£ã¹ã¯äžã®ãŠãŒã¶ãŒãã©ã«ããŒã§ãïŒDocuments and Settings / userãªã©ïŒã ãã©ã«ããŒã®ä»ã®äŸã¯APIã«ãããŸãã ãã ãããã©ã«ããŒãžã®ãã¹ãæå®ããããšã¯ã§ããŸããã ã¯ãã¹ãã©ãããã©ãŒã ãããªãã¯ç¥ã£ãŠããŸãã
ãããå°é£ã®å§ãŸãã§ãã ãã©ã«ããŒã¯å ±æãããŠããŸããããã¡ã€ã«ã¯ãããŸããïŒïŒïŒã éæ¥çã«ãŠãã€ãããã«ããã¥ã¢ã«ããå察ãç¶ããŸããã ãã¡ã€ã«ãå ±æããªããã°ãªããªãããšã«å ããŠãå¥ã®åé¡ããããŸãã ãµãŒãã¹ãäžå®å®ãªãããäžåºŠå ±æããããã¡ã€ã«ãã»ãã·ã§ã³äžã«å ±æããããšããäºå®ã«äŸåããããšã¯äžå¯èœã§ãã ãããã£ãŠããªã¯ãšã¹ããå©çšå¯èœã«ãªã£ããšãã«ãã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ãåŠçããããšããå§ãããŸãã ãŠãŒã¶ãŒããã¡ã€ã«ãèŠæ±ããŸãã-å ±æãããŠã³ããŒã-å ±æã®ã¹ããŒã¿ã¹ãååŸããŸããã æ®å¿µãªãããæ¢åã®unshareFileé¢æ°ãshareFileé¢æ°ã¯ãæ¢ã«å ±æãããŠããªããã¡ã€ã«ãŸãã¯å ±æãã¡ã€ã«ãé©å®ã¹ãªãããããšèŽåœçãªãšã©ãŒãã¹ããŒããŸãã ã€ãŸã 2åã®å ±æã¯æ©èœããªããã®ã§ã¯ãªããæ©èœããªããµãŒããŒãåãåããŸãã
å ±æãã©ã«ããŒã«ã¯ãšã€ãªã¢ã¹ãå ±æãããŠããŸãã ããã«å ããŠãã¢ããªã±ãŒã·ã§ã³ïŒãµãŒãã¹ãã©ã«ããŒïŒãã¹ãã¬ãŒãžïŒãµãŒãã¹ããŒã¿ã«å²ãåœãŠããããã©ã«ããŒïŒããããŸãã ãµãŒããŒã«å ±ææ¥ç¶ããŸãïŒ
window.onload = function () {
webserver = opera.io.webserver;
if (webserver)
{
opera.io.filesystem.mountSystemDirectory('shared');
webserver.addEventListener('shared', download, false);
webserver.addEventListener('_index', showEntryList, false);
}
}
ãµãŒããŒãšãµãŒãã¹ããªã³ã«ããåŸãå ±æãã©ã«ããŒãããŠã³ãããŸãã äžèšã®Operaã®äžå®å®æ§ãèæ ®ãããšããµãŒããŒããªã¯ãšã¹ããæåã§åŠçããããšããå§ãããŸãã
次ã«ãããŠã³ããŒãæ©èœèªäœãäœæããŸãã
function download(e) {
var req = e.connection.request;
var res = e.connection.response;
var mp = opera.io.filesystem.mountPoints;
var filePath = fullPathWithoutServiceName(req.uri);
var file = mp.resolve(filePath);
if(file.exists) {
if(file.isFile) {
opera.io.webserver.shareFile( file, filePath );
res.closeAndRedispatch();
opera.io.webserver.unshareFile(file);
}
if(file.isDirectory) {
//deep inside... folders, folders, folders. total commander :)
showEntryList(e);
res.closeAndRedispatch();
}
}
else {
res.closeAndRedispatch();
}
res.close();
}
ããã§é·ãéåæ¢ããããšã¯ãããŸãããAPIé¢æ°ã®ååãããã¹ãŠãã»ãŒæããã§ãã urlã®ãµãŒãã¹åã®åŸã«ãã¹ãããŠã³ãããŸãã fullPathWithoutServiceNameã¯ãèªåã§äœæããé¢æ°ãURL解æã§ãã ãã¡ã€ã«ãå®éã«ååšããå Žåã¯ãããããã©ã«ããŒã§ããããããã§ãã³ã°ã¢ãŠãããŠããã ããã確èªããŸãã ãã©ã«ããŒã®å ŽåãshowEntryListãã³ãã©ãŒã«ã¢ã¯ã·ã§ã³ãæž¡ããŸãããã®ãã³ãã©ãŒã¯ããã£ã¬ã¯ããªå ã®ãã¡ã€ã«ãšãã©ã«ããŒã®ãªã¹ãã衚瀺ããã ãã§ãã ãã¡ã€ã«ã®å Žåããã¡ã€ã«ãå ±æããæ綱ããµãŒããŒã«è»¢éããæ»ã£ããšãã«ãã¡ã€ã«ããæš©å©ã奪ããŸãã ãã¡ã€ã«åã衚瀺ããåã«ããã¹ãŠã®æåãããã§ãšã³ã³ãŒããããŠããããšã«æ³šæããŠãã ããã衚瀺ããåã«ãããããunescapeé¢æ°ã§ã©ããããå¿ èŠããããŸãã ãã以å€ã®å ŽåãæãåçŽãªå Žåããã¡ã€ã«åã®ã¹ããŒã¹ã®ä»£ããã«ããŠãŒã¶ãŒã«ã¯ïŒ 20ã衚瀺ãããŸãã
closeAndRedispatché¢æ°ã䜿çšããŠããµãŒããŒã«é¢æ°ãè¿ããäœæ¥ãç¶è¡ããŸãã T.O. ãã«ãã¬ãã«ã®ãã©ã«ããŒãšãã¡ã€ã«ã§äœæ¥ãã»ããã¢ããããŸãã
ããŒãžã§ã³ã¢ãã
Firefoxã®ãããªãæŽæ°ã«é¢ããåæ§ã®éç¥ã¡ã«ããºã ã¯ãããŸããã ãŸãã¯ããŠãã€ãããã®ãµã€ãã«ããDOAPãã¡ã€ã«ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ææ°ããŒãžã§ã³ã«é¢ããæ å ±ã䜿çšã§ããŸãã ãããã£ãŠãããšãã°ããµãŒãã¹ã«ã¢ãã¬ã¹ãããå ŽåïŒ
unite.opera.com/service/322
次ã«ããã®DOAPãã¡ã€ã«ã¯æ¬¡ã®å Žæã«ãããŸãã
unite.opera.com/service/doap/322
ããã¯ãã¬ãŒã³XMLã§ããããã解æããŠããŒãžã§ã³ã確èªãããããã¢ãããŠã£ã³ããŠã«ãããã¢ããããããšãææ¡ã§ããŸãã åŠçäŸã次ã«ç€ºããŸãã
function getLastVersion() {
try {
var req = new XMLHttpRequest();
req.onreadystatechange = function(x) {
if (this.readyState == 4) {
if(this.status == 200) {
var xml = this.responseXML;
var release = xml.getElementsByTagName('release').item(0);
var version = release.getElementsByTagName('Version').item(0);
var revision = version.getElementsByTagName('revision').item(0).firstChild.data;
var lastCheckedVersion = getLastCheckedVersion();
if(revision && lastCheckedVersion && revision!=lastCheckedVersion) {
widget.showNotification("New version "+revision+" is available. Click here to update.", function() {
widget.openURL(globalSettings.url);});
setLastCheckedVersion(revision);
} } } };
req.open('GET', globalSettings.doap);
req.send(null);
}
catch(e) {
}
}
function getLastCheckedVersion() {
return widget.preferenceForKey('last_checked_version');
}
function setLastCheckedVersion(version) {
widget.setPreferenceForKey(version, 'last_checked_version');
}
å€éšãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã䜿çšãããããšã«æ³šæããŠãã ãã;åè¿°ã®ããã«ãconfig.xmlãä¿®æ£ããå¿ èŠããããŸãã
URL unite.opera.com/service/322ã¯ãçè«çã«ã¯ããµãŒãã¹ãã£ã¬ã¯ããªãã¢ã¿ããããŠconfig.xmlãã¡ã€ã«ã«ç§»åããããšã§èªåçã«ååŸã§ããŸããããã¯ãIDã®åœ¢åŒã§URLãå ¥åããå Žæã§ãã ããããç§ã¯ãããæãäžããããã«ç ŽãããŸããã誰ããã³ãŒããæžããŠéããããç§ã¯ããããã§ã:)ãããŠããã®é¢æ°ãæžãããæãŸã§ã«ãç§ã¯ãã§ã«ãã®URLãç¥ã£ãŠããŸãã
ãããã°ãã
ãšã©ãŒåŠçã¯ãŸã ãŒãã§ãã å€ãã®å ŽåããµãŒããŒã¯èŽåœçãªãšã©ãŒããåãé¢ãããŸããå€ãã®å Žåããããã®ãšã©ãŒã¯ãããäœãæå³ããã®ãæ確ã§ã¯ãããŸãããããã¥ã¢ã«ã¯ãªããæœè±¡çãªååã¯ã»ãšãã©æå³ããããŸããã ãµãŒããŒåŽã®JavaScriptã§ã¢ã©ãŒããåºãããšã¯ãããŸããã人ã ã«ãšã£ãŠå¯äžã®æ¹æ³ã¯opera.postErrorïŒ 'error'ïŒé¢æ°ã§ãã Operaéçºè ã³ã³ãœãŒã«ã®ãšã©ãŒãä¿®æ£ããŸãã
Unite.opera.comã§ã®è©äŸ¡
ã²ã©ã...æåã«ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³çªå·ã確èªããããšã¯ã§ããŸããã ããã©ã«ãã§ã¯ãæ€èšŒåŸããµãŒãã¹ã¯ããŒãžã§ã³1.0ãåãåããŸãã æŽæ°æã«ã¯ãå€æŽããã€ããŒïŒããŒãžã§ã³1.1ïŒãŸãã¯éèŠïŒããŒãžã§ã³2.0ïŒã§ããããšã®ã¿ã瀺ãããšãã§ããŸãã åæã«ãéå»7æ¥éã®ã¬ãŒã¹ã®ã¬ãŒãã£ã³ã°ããªã»ãããããæåŸã®å Žæã«æ¥èœããããšã«æ³šæããŠãã ããã T.O. éçºè ã«ã¯æ°ããåºåãã¢ããããŒãããã€ã³ã»ã³ãã£ãããããŸããã次ã®ããŒãžã§ã³ã¯èª°ã«ãæ°ä»ãããããšããªããããè©äŸ¡ã¯ãŒãã«ãªããŸãã 100幎æŽæ°ãããŠããªãã¢ããªã±ãŒã·ã§ã³ã¯ãåžžã«ãããã«çãŸãããã ã¹ã¿ãŒãç ç²ã«ããŠæŸçœ®ããããšã¯ã§ããŸããã ãã®ãããçŸæç¹ã§ã¯ãããªãã®æ°ã®ãã°ãä¿®æ£ããããŸã§ããŒãžã§ã³ãæŽæ°ããªãããšããå§ãããŸãã
ã¹ããªãŒã ã¡ãã£ã¢
ç§ã®åªåã®çµæã¯ãã¹ããªãŒã ã¡ãã£ã¢ãµãŒãã¹ã§ãããããã«ãããYouTubeã®ãããªããšã1ã2åè¡ãããšãã§ããŸãã ãããªãšãªãŒãã£ãªãåçã§ããŸãã ãã¡ãããããããMP3ããã³FLV圢åŒã®ã¿ã«å¶éãããŠããå Žåããã¹ãŠãã¯ãã¹ãã©ãŠã¶ã«ãªããŸãã ãããããããã®ã»ãšãã©ã¯AVIãªã©ã«ãããªãä¿åããŸããããã«ãããã¯ãã¹ãã©ãŠã¶ããã³ã¯ãã¹ãã©ãããã©ãŒã ã®åé¡ãçºçããŸãã ããã§ç§ã¯æ¬åœã«äœãæäŒãããšãã§ããªãã®ã§ãjQueryãã©ã°ã€ã³ã«ããããã¹ãŠãå¯èœãªéããã¯ãã¹ãã§ãã ãã ããWindows Media Playerã®AVIã§ã¯ããã¡ã€ã«å šäœãããŠã³ããŒãããããŸã§åŸ ã€å¿ èŠããããŸãã ç§ãæäŸã§ããæ倧å€ã¯ãFLVã«å€æããŠããFlashãã¬ãŒã€ãŒãèµ·åãããã衚瀺ããåã«ã¯ã©ã€ã¢ã³ãã«ãã¡ã€ã«ãããŠã³ããŒãããããšã§ãã
ãã¡ãããããŠã³ããŒãã§ããŸãïŒ
unite.opera.com/service/322
å°ãé¢åãªã®ã§ãå ¬åŒããã¥ã¢ã«ã®æŽ»ååéã«å ¥ããªããã°ãªããŸããã§ããããç§ããã£ãããšãç¹°ãè¿ãããšãªãããŠãã€ãããã®ãµã€ãã§èª¬æãããŠããªãæ©èœã«ã€ããŠè©±ãããšãã§ããŸããã§ããã 質åãããã°ãæžããŠãã ãããäžç·ã«èããŠã¿ãŸãã
PSãµãŒãã¹ãäœããã®æ¹æ³ã§åçåããããšã¯æå³ããªããšæããŸãã ãããã£ãŠãç§ã¯ããè¯ãããŒãžã§ã³ãããã«ãªãªãŒã¹ãããããšãé¡ã£ãŠããŸããç§ã¯ãã®ãããã¯ã«ã€ããŠäžäººã®äººãšå©ä»çã«è©±ããŠããŸã:)