æ°æ¥åãHabrã®Canvasã§è³ªåããããšãææ¡ããŸããã Habrakatã®äžã§-27ã®è³ªåã«çããŸãã
1.ãªãCanvasãå¿ èŠãªã®ããããã¯äœãªã®ãããã©ãŠã¶ãµããŒãã¯äœãªã®ããã¢ããªã±ãŒã·ã§ã³ã®äž»ãªé åã¯äœãªã®ãããã¬ãŒã ã¯ãŒã¯ã¯ã©ã®ããã«éçºãããŠããã®ããäŸïŒ
Canvasã¯ãã°ã©ãã£ãã¯ã¹ãã¬ã³ããªã³ã°ããããã®äœã¬ãã«APIã§ãã ææ°ã®ãã¹ãŠã®ãã©ãŠã¶ãŒã§ãµããŒããããŠããŸãã åœç¶IEã®ã¬ã¬ã·ãŒããŒãžã§ã³ïŒ8以äžïŒã§ã¯ãµããŒããããŠããŸãã
ãã¬ãŒã ã¯ãŒã¯ã¯é²åããŠããŸããããŸã æé·ããå¿ èŠããããŸãã åºæ¬çãªäŸã¯MDCã«ãããŸãã ãã匷åãªäŸã¯ã Chrome Experimentsã®ãµã€ããããã¬ãŒã ã¯ãŒã¯äžã®ã¢ããªã±ãŒã·ã§ã³ã®äŸïŒ LibCanvasãªã©ïŒã«ãããŸãã
2. Canvasã䜿çšããå¿ èŠãããã®ã¯ãã€ã§ãããFlashã¯ãã€ã§ããïŒ
åªããããŒã«ãšãã¬ãŒã ã¯ãŒã¯ã«ãããFlashã¯ããé«éã§ã¯ãã¹ãã©ãŠã¶ã«ãªããŸãã
Canvasã¯çŸåšãäž»ã«æ奜家ãå®éšè ã«ãã£ãŠäœ¿çšãããŠããŸãã
ãã©ãã·ã£ãŒãåžå Žãé¢ããç¹å¥ãªçç±ã¯ãããŸããã
ããããGoogleãMozillaãAppleãMicrosoftãªã©ã®å€§èŠæš¡ãªãã¬ãŒã€ãŒã¯Canvasã«åŸäºããŠããããããã¯ãã¹ãŠCanvasã®ã¬ã³ããªã³ã°ãæé©åããã³å éããå€ããã©ãŠã¶ã¯åŸã ã«æ¶æ» ããæ°ãããã©ãŠã¶ãç»å ŽããŸãã Firefox 2.0ããã³Firefox 4.0ãã芧ãã ããã 3幎éãé床ã¯1æ¡åäžãã4çªç®ã®ããŒãžã§ã³ã®ãªãªãŒã¹ã§äž»ãªé£èºãæ£ç¢ºã«éæãããŸããã åæ§ã«-Operaã ãŸãããã®éãChromeã¯ãã©ãŠã¶ã®12ã®ã¡ãžã£ãŒããŒãžã§ã³ã衚瀺ããŠãªãªãŒã¹ããŸããã äžè¬ã«ãHTML5ãšCanvasã¯ç¹ã«æããæªæ¥ãæã£ãŠããŸãã
3. Canvasã䜿çšããã¿ã€ãã³ã°ãšSVGã䜿çšããã¿ã€ãã³ã°
ããã¯ããªãŠããã®ããŒãã§ãã 圌女ã«ã¯ããŸããŸãªèŠæ¹ããããŸãã
ãã®ãã£ã¹ã«ãã·ã§ã³ãèªãïŒ habrahabr.ru/blogs/javascript/114129/#comment_3678242
ãã®åçãã芧ãã ããã
èšäºã CanvasãšSVGããã€äœ¿çšãããã«ã€ããŠã®èã ããèªãã§ãã ããã
äžæ¹ã§ã¯ãCanvasã䜿çšããå ŽåãSVGã§æ¢ã«å®è£ ãããŠãããã®ãå®è£ ããå¿ èŠããããŸãã äžæ¹ãCanvasã§ã¯ããã£ãã·ã¥ããã®ã¬ã³ããªã³ã°ãªã©ãSVGã§ã¯äžå¯èœãªæé©åãé©çšã§ããŸãã
æºåž¯é»è©±ã§ã¯ãSVGãšCanvasã®ä»£ããã«CSS3ã䜿çšããããšãéèŠã§ãã ããŒããŠã§ã¢ãé«éåããéåžžã«ã¹ã ãŒãºã«åäœããŸãã
4.èªãã¹ãæç®ã¯ïŒ
Mozilla Developers Networkããå§ããããšããå§ãããŸããããã§ã¯ãšãŠãã¯ãŒã«ã§ãCanvasã®åºæ¬ã¯äŸã§èª¬æãããŠããŸãã ãã®åŸãã¿ã¹ã¯ãèãåºãããããå®è£ ããŠã¿ãŠãã ããã APIã¯éåžžã«ã·ã³ãã«ã§ãäž»ãªãã®ã¯çµéšã§ãã
O'Reilly Mediaã«ããææ°ã®æ¬ã HTML5 Canvas ãããããŸãã ç§ã¯èªãã§ããŸããããO'Reillyã¯éåžžãã¯ãŒã«ãªæ¬ããªãªãŒã¹ããŠããŸãã
5. Canvasã®ã¹ã¯ãªãŒã³ã·ã§ãããæ®ãæ¹æ³ã¯ïŒ
ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã®äž¡æ¹ã«Canvasãä¿åã§ããå°ããªcanvas2imageã©ã€ãã©ãªããããŸãã ã¯ã©ã€ã¢ã³ãã§ã¯ãä¿åã¯toDataURLã䜿çšããŠè¡ãããŸãã ãµãŒããŒã§ã¯ãã³ã³ãã³ãã¯getImageDataã䜿çšããŠååŸãããbase64ã³ãŒãã«å€æãããPOSTèŠæ±ã«ãã£ãŠéä¿¡ãããŸãã ãµãŒããŒã§ã¯ã次ã®ã³ãŒãã®ãããªããšãè¡ãã ãã§ååã§ãã
if (empty($_POST['data'])) exit; $data = $_POST['data']; $name = md5($data); $file = "$path/$name.png"; if (!file_exists($file)) { $image = str_replace(" ", "+", $data); $image = substr($image, strpos($image, ",")); file_put_contents($file, base64_decode($image)); } echo $file;
ãŸããçãã¯azproductionããã§ã
ããã£ã³ãã¹ã®ã¹ã¯ãªãŒã³ã·ã§ãã===ç»åãšããŠãã£ã³ãã¹ãä¿åãã®å ŽåïŒ
/* */ canvas.getAsFile("test.jpg", "image/jpeg"); // File https://developer.mozilla.org/en/DOM/File /* */ canvas.toDataURL(); // String data url /* */ function test() { var canvas = document.getElementById("canvas"); var f = canvas.mozGetAsFile("test.png"); var newImg = document.createElement("img"); newImg.src = f.toDataURL(); document.body.appendChild(newImg); }
èªã
éèŠåºå®ãã£ã³ãã¹ãµã€ãºãïŒå¹ /é«ããŸãã¯ã¹ã¿ã€ã«ãä»ããŠïŒæå®ããå¿ èŠããããŸããããããªããšãtoDataURLããäžæ£ãªããŒã¿ãååŸãããŸãã
6.ããã©ãŒãã³ã¹ãåäžãããæ¹æ³ïŒfpsãäžããïŒã«èå³ãããã
ã¢ããªã±ãŒã·ã§ã³ã«äŸåããããŸããŸãªæé©åæ¹æ³ããããŸãã LibCanvasã®Pyatnashkiãããã¯ã§ãããã®3ã€ã説æããŸãã ã ããã¯ïŒ
*å¿ èŠã«å¿ããŠãã£ã³ãã¹ãæä»çã«æŽæ°
*ãã£ã³ãã¹å šäœãåæç»ãã代ããã«ãå€æŽãããããŒã¹ã®ã¿ãåæç»ããŸã
*ãªããžã§ã¯ãããããã¡ã«æç»ããŸãïŒããã«ããããã¬ãŒã ããšã«ãã¯ã»ã«ã®ã»ãããšããŠãªããžã§ã¯ããæç»ã§ãããã¹ãŠã®ãã£ã«ã¿ãŒãšæã®ãã¿ã³ãé©çšã§ããŸããïŒ
ãæ°ã«å ¥ãã®ãã©ãŠã¶ã®ãããã¡ã€ã©ã倧ãã«åœ¹ç«ã¡ãŸãã
7.ãããªãã£ããã£ã®æäœ
azproduction ïŒ
ã«ã¡ã©ãããããªããã£ããã£ããå ŽåïŒ
ãã®APIã¯Media Capture APIä»æ§ã®ãã©ããã«ã®ã¿ååšããä»æ§ã®æãè¿ããªãªãŒã¹ã¯PhoneGapã§å¯èœã§ã-ãã©ã³ã¯ã«ããå¯èœæ§ããããŸãã 圌ãšã®ä»äºã¯ãšãŠãç°¡åã§ãã ãã³ãã©ãŒã¯ãããã€ã¹ãã«æããããåãã¬ãŒã ã¯ããŒã¿uri圢åŒã®ç»åãšããŠéä¿¡ãããŸãã
function success(data) { var container = document.createElement("div"); for (var i in data) { var img = document.createElement("img"); img.src = data[i].url; container.appendChild(img); } document.body.appendChild(container); } function error(err) { if (err.code === err.CAPTURE_INTERNAL_ERR) { alert("The capture failed due to an internal error."); } else { alert("Other error occured."); } } navigator.device.capture.captureImage(success, error, { limit: 1 });
8. Canvasã§ä»»æã®ç»åãïŒWebGLãªãã§ïŒã¬ã³ããªã³ã°ããå ŽåãçŸæç¹ã§ãã¯ã»ã«åäœã®ã¢ã¯ã»ã¹ã§æãå¹æçãªãœãªã¥ãŒã·ã§ã³ã¯äœã§ããïŒ ããšãã°ãGuro / Fongã·ã§ãŒãã£ã³ã°ã䜿çšããŠ3Dãæ§ç¯ãããšãã®é¡ã®æåæç»ã
2ã€ã®ãããã¯ãèŠãŠãã ããã
habrahabr.ru/blogs/crazydev/93594
habrahabr.ru/blogs/crazydev/94519
ãã¯ã»ã«åäœã®ã¢ã¯ã»ã¹ã®å Žåããœãªã¥ãŒã·ã§ã³ã¯1ã€ã ãã§ã-getImageDataã䜿çšããŸã
9.ãã£ã³ãã¹ããã¹ãŠã®å éšã§å¹çããã¯ãã¹ãã©ãããã©ãŒã ã§æ¡å€§çž®å°ããŠç»é¢ã«åãããæ¹æ³ã¯ãããŸããïŒ
cssã䜿çšããŠã¿ãŠãã ããã ãã£ã³ãã¹{å¹ ïŒ100ïŒ ; é«ãïŒ100ïŒ ; }ã ãã®ãããªãã®ã ããããjsã³ãŒãã¯ãã®éšåãèæ ®ããå¿ èŠããããŸãã 座æšãã·ããããŸãã
10. Android / iOSããã€ã¹ã§ã®ãµããŒããšããã©ãŒãã³ã¹
å®å šã«ãµããŒããããŠããŸãã 確ãã«ãiPhone2ã§ãµããŒããããŠããªãfillTextã«æ°ã¥ããŸãããããããå¯äžã®ãã®ã§ãã
ããã©ãŒãã³ã¹ã®åé¡ã§ãããäœããå®è¡ã§ããŸãã ã¢ãã€ã«ã®å ŽåãCSS3ã®æ¹ãåªããŠããŸãã ããããå°æ¥ãäœããå€ããã§ãããã
11.ãã€ã³ããæç»ããæéã®æ¹æ³ã«èå³ãããïŒããšãã°ãã°ã©ãã®å ŽåïŒã åäžãã¯ã»ã«ããã³4ãã¯ã»ã«ã®ä»»æã®è²ã
ããã©ãŒãã³ã¹ã®é¢ã§æãéãã®ã¯ãåäžã¬ã³ããªã³ã°ã«fillRectã䜿çšãããã«ã¯ã¬ã³ããªã³ã°ã«getImageData + putImageDataã䜿çšããããšã§ãã
12.ãplaybiolab.comã®ãããªããµã€ããã¥ãŒã®ã²ãŒã ã§ãäžçããä¿åã衚瀺ãåæç»ãããåœ¢åŒ ãã¬ãŒã€ãŒã¯å³ã«èµ°ããã«ã¡ã©ãäžç·ã«åããäžçã¯ãåããŸããã
ãã€ãªã©ãã§ã©ã®ããã«è¡ãããã®ãæ£ç¢ºã«ã¯ããããŸããã ããã€ãã®æ¹æ³ããããŸãã è€æ°ã®ãã£ã³ãã¹ã¬ã€ã€ãŒãéããŠéããäžã®äžçã«æç»ããCSSã䜿çšããŠç®çã®éšåã衚瀺ã§ããŸãã
13. 3Dãã£ã³ãã¹
Three.js-3D Javascriptãšã³ãžã³
14.ç·šéè -äœã«ã€ããŠæžãã¹ããïŒ
ä»»æã®JavaScriptãšãã£ã¿ãŒãé©ããŠããŸãã 以åã¯Netbeans 7ã䜿çšããŠããŸããããä»ã§ã¯Jetbrains WebIdeã«åãæ¿ããŸãã
15.ããŒã¿ããŒã¹
ã¯ã©ã€ã¢ã³ãåŽã«ããŒã¿ãä¿åããã«ã¯ã webStorageãšIndexedDBã® 2ã€ã®ææ°ã®æšæºããããŸãã
IndexedDBã¯å€ãã®æ©èœãåããã¯ãŒã«ãªã€ã³ã¿ãŒãã§ã€ã¹ã§ããã Habrã§èª¬æãããŠããŸãã ãwebStorageã¯ã·ã³ãã«ãªããŒããªã¥ãŒã¹ãã¬ãŒãžã§ã
16. CanvasãšIE
IEã§ã¯ã9çªç®ãŸã§ã®ããŒãžã§ã³ã¯ãµããŒããããŠããŸããã ããããµããŒãããããšãããã¹ãŠã®è©Šã¿ã¯ãéåžžã«çãç¯å²ã®ã¿ã¹ã¯ã«ã®ã¿é©ããŠãããšèšããŸãã
ç§èŠãå¯äžã®ãªãã·ã§ã³ã¯Google Chrome Frameã§ããããã¯ãFlashãSilverLightãªã©ã®ããŒããã©ãŠã¶ã«ã€ã³ã¹ããŒã«ããInternet Explorerã®çããã®ãææ°ã®ãã©ãŠã¶ã«å€ãããã©ã°ã€ã³ã§ãã
17.æç»ããããªããžã§ã¯ãéã®è·é¢ãèšç®ããæ¹æ³ãæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã¯ãããŸãã
ãªããžã§ã¯ãã«äŸåããŸãã ããã€ãã®ããšã¯éåžžã«ç°¡åã«è¡ãããŸãã ããšãã°ããã€ã³ãéã®è·é¢ã¯ãã¿ãŽã©ã¹ã®å®çã«ãã£ãŠèšç®ãããŸãã åé-ååŸã®æžç®ãããã€ã³ãéã®è·é¢ãèæ ®ããŸãã ããè€éãªå³ã«ã¯ç¬èªã®æ³åããããŸãã
äœãïŒå°ãªããšã亀差ããé·æ¹åœ¢/å/å€è§åœ¢ïŒã¯ãã§ã«LibCanvasã«ãããŸãã ç¹å¥ãªèŠä»¶ãããå Žåã¯ãã¢ã«ãŽãªãºã ãæ¢ãå¿ èŠããããŸãã ç§ã¯ãããã¢ããã€ã¹ããããšãã§ããŸãïŒ
è¡çªãšãããã«å¯Ÿããåå¿ããã©ãã·ã¥ã§æ±ºå®ããããã®æ¢ç¥ã®ã¢ã«ãŽãªãºã ã
18. Canvasã§ã¢ãã¡ãŒã·ã§ã³ãäœæããæ¹ãã©ã®ãããªæ段ã§åªããŠããŸããïŒ
æè¿ãã ã¢ãã¡ãŒã·ã§ã³ãšãã£ã³ãã¹ ããšããè¯ããããã¯ããããŸããã ãŸããã³ã¡ã³ãã§ã¯ã LibCanvasã䜿çšããå®è£ ã«ã€ããŠèª¬æããŸãã ã
19. Canvasã§ã®ããã¹ãã®æäœïŒã¢ãã¡ãŒã·ã§ã³ãå«ãïŒ
ããã¹ãã¯fillText / strokeTextã䜿çšããŠã¬ã³ããªã³ã°ãããŸã ã ã«ã¹ã¿ã ãã©ã³ãã¯CSS3ã䜿çšããŠæ¥ç¶ã§ããŸã ã
圱ãå€åœ¢ãè²ã®èšå®ãªã©ããã¹ãŠã®ã«ãŒã«ã®åœ±é¿ãåããŸãã ããšãã°ãæãèæ¯ã«æãã圱ã䜿çšãããšãæããããã¹ããç°¡åã«äœæã§ããŸã
20.ç»åãæäœããŸãã
ç»åã®æäœæ¹æ³ã¯ãMDCã§èª¬æãããŠããéåžžã«ã¯ãŒã«ã§ã ã
21.ããã¯ãããã¡ãŒã䜿çšããŠããããã£ã³ãã¹ãå¥ã®ãã£ã³ãã¹ã«æç»ããæ¹æ³ã
é衚瀺ã®Canvasã«æ å ±ãæç»ãããšãç»åã®ããã«äœ¿çšã§ããŸãïŒåã®æ®µèœãåç §ïŒã
ãããã¡ãªã³ã°ã«ãããã¬ã³ããªã³ã°ãäœåºŠãé«éåã§ããŸãã ããšãã°ããããã¡ãã1ã€ã®ã°ã©ããŒã·ã§ã³ãæç»ãããšãåãã°ã©ããŒã·ã§ã³ãçŽæ¥æç»ããããã5åéããªããŸãã
䜿ãæ¹ã¯ãšãŠãç°¡åã§ãïŒ
// : var buffer = document.createElement('canvas'); buffer.width = 64; buffer.height = 32; buffer.ctx = buffer.getContext('2d'); // LibCanvas: var buffer = LibCanvas.Buffer(64, 32, true); // buffer.ctx.fillRect(/* */) // : var ctx = canvas.getContext('2d'); ctx.drawImage( buffer, 0, 0 );
22.ãã£ã³ãã¹ã§ã®ã¢ãã¡ãŒã·ã§ã³ã¯ãå®å šãªåæç»ã¡ãœããã䜿çšããŠè¡ãããŸãã ãããã£ãŠããã¹ãŠã®ãªããžã§ã¯ãã«é¢ããæ å ±ã¯JSãªããžã§ã¯ãã«ä¿åãããæ¯ååæç»ãããŸããããããšãã©ããããããã¹ãã©ã€ããšã¬ã€ã€ãŒãäœæã§ããŸããïŒ
ã¯ããããŸããŸãªããªãã¯ããããŸãã å€æ°ã®å°ããªãªããžã§ã¯ããæç»ããªãããã«ãããã¡ã䜿çšã§ããŸãããã£ã³ãã¹ãéšåçã«ã®ã¿åæç»ã§ããŸãããå€ãã®å Žåãåæç»ããå¿ èŠããããã®ãšããã§ãªããã®ãç解ãããããããã¹ãŠãåæç»ããæ¹ãå®äŸ¡ã§ãã
23.ãã£ã³ãã¹ã䜿çšããŠ3Dãªããžã§ã¯ããæç»ãïŒã§ããã°é è¿æ³ãèæ ®ããŠïŒãå転ããæ¹æ³ãç¥ãããã§ããïŒ
HTML5å®éšïŒå転ãããœãªãããã¥ãŒã
24. Canvasã§ã®SVGã®ã¬ã³ããªã³ã°
CanVGã§å¯èœã§ã ã ã»ãšãã©æå³ããªãïŒ
25.ãã©ãŠã¶ã§ã®ãµããŒãã¯ã©ã®çšåºŠç°ãªããŸããããŸãã¯å šå¡ãæšæºã«åŸããŸããïŒ
éãã¯æå°éã§ãã ãã€ããŒãªãã°ãããããªççŸããããŸããã ããšãã°ãOperaã¯è² ã®èŸºãµã€ãºã®é·æ¹åœ¢ãæç»ã§ããŸããã§ããã
ctx.fillRect(50, 50, -20, -20);
ç»åã®å§çž®ãšå転ã¯ç°ãªããŸãã ããšãã°ãChromeã§ã¯ãè§ãæ²ãããšæ¯ãç®ç«ã¡ãŸãïŒæ»ããã«ãªããŸããïŒ
ããããããã¯FxãOperaãããåªããŠããŸãïŒ
JavaScriptã«ã¯ãŸã å°ããªéãããããŸãã ããšãã°ãäžéšã®ãã©ãŠã¶ã§ã¯ã
sort
ã¯äžå®å®ãª
sort
å®è£ ããŠãããããèŠçŽ ãZ-indexã§ãœãŒããããŠããå ŽåãåãZ-indexã®èŠçŽ ãã¹ã¯ãããããŸãã
ãããã¯éåžžã«å°ããªãã¥ã¢ã³ã¹ã§ãã ã»ãšãã©ã¯ã䜿ãããããã¬ãŒã ã¯ãŒã¯APIã®èåŸã«é ããŠããŸãã å人çã«ãç§ã¯1ã€ã®ãã©ãŠã¶ãŒã®ã¿ãéçºããã»ãšãã©ã®å Žåãä»ã®ãã©ãŠã¶ãŒã§ã¯ãã¹ãŠãå®å šã«æ£ããåäœããŸãã
26. putImageDataãšdrawImage
ç°¡åã«èª¬æããŸã-putImageDataã¯ãã£ãšé ãã§ãã ããã«ãç»åã®ãµã€ãºã倧ãããªããšãé床ãäœäžããŸãã
27.ã¬ã€ã€ãŒããšãã¥ã¬ãŒããããã¢ã¯ãã£ããªèŠçŽ ïŒã«ãŒãœã«ãçŸåšçœ®ãããŠããïŒãå®çŸ©ãããã€ãã³ã管çã·ã¹ãã ãäœæãããªã©ããã£ã³ãã¹ã©ã€ãã©ãªã®äž»ãªæ©èœã®å žåçãªå®è£ ã«ã€ããŠèããŠã¿ãããšæããŸãã
ãã®è³ªåã¯ç§ã«æãé »ç¹ã«å°ããããŸããããªããªã圌ã®ããã«- å¥ã®ããã㯠ïŒ
æªåçã®è³ªå
ãããã®è³ªåã«çããããšãã§ãã人-ã³ã¡ã³ãããŠãã ãã
1. IEïŒIE8- + excanvas.jsïŒã§ãã£ã³ãã¹ã«ããã¹ãã衚瀺ããæ¹æ³ã¯ïŒ Googleã³ãŒãããtext.canvas.jsãè©ŠããŠã¿ãŸãã-äœãã°ãªãããªãããšã«é¢ãããšã©ãŒã衚瀺ãããŸãã
IEã§ãšãã¥ã¬ãŒã·ã§ã³ã䜿çšããŸãã
2.倪ããå€åããç·ãæç»ã§ããç§å¯ã®ã©ã€ãã©ãªã¯ãããŸããïŒ çŽç·ã®å Žåãããã¯ãæŸèæãã®æ¹æ³ã§æ¯èŒçç°¡åã«å®è£ ã§ããŸãããããããçš®é¡ã®ããžã§æ²ç·ã¯ãæããã«äœããã¯ã»ã«ã¬ãã«ã§ã®ã¿ã§ãã
3.ç·ã®ã°ã©ããŒã·ã§ã³ã«ã©ãŒãªã³ã°ãæç»ã§ããç§å¯ã®ã©ã€ãã©ãªã¯ãããŸããã ã€ãŸããç·ã«æ²¿ã£ãŠããŒãéã§è²ãæ»ããã«å€åããããã«ãªããå¿ ãããçŽç·ã§ã¯ãããŸããã ãã®ãããªé¢æ°ã¯ãããšãã°OpenGLã«ãããŸãã
ãããã«
äžæãªç¹ãããå Žå-質åããŠãã ãããè£è¶³ããŸãïŒããªãã®è³ªåãåçãããŠããªãå ŽåããŸãã¯è³ªåãããŠããªãå Žå-ã³ã¡ã³ãã§å床質åããŠãã ããã ç»é²ããªãå Žåã¯ãshocksilien @ gmail.comã§ç§ã«ã¡ãŒã«ãæžãããšãã§ããŸã
ãã®ãããã¯åœ¢åŒã¯å¥œãã§ããïŒ