Slide 1

Slide 1 text

ࣾ಺γεςϜΛָ͘͢͠Δ 3ͭͷίπ

Slide 2

Slide 2 text

ࢁຊ ༟հ @yusuke

Slide 3

Slide 3 text

ࣾ಺γεςϜ

Slide 4

Slide 4 text

ฐࣾࣾ಺γεςϜ (μϛʔσʔλ)

Slide 5

Slide 5 text

ʢαϜϥΠζϜʣࣾ಺γεςϜͷ՝୊ • ຯؾͳ͍σβΠϯ : Bootstrapؙग़͠ • ࡶͳ࡞Γɺ༷ʑͳʮӡ༻ͰΧόʔʯ • ʮ͜͜͸ߋ৽ͨ͠ΒUndoग़དྷͳ͍ͷͰؾΛ͚ͭͯʯ • ʮ͜ͷϘλϯԡ͢ͱ2෼͘Β͍଴ͨ͞ΕΔ͚Ͳɺ଴ͬͯʯ • ʮ଴ͬͯΔؒʹೋ౓ԡ͢͠ΔͱԿ͔ྑ͘ͳ͍͜ͱ͕ى͖Δʯ • ʮॲཧ͕׬͔ྃͨ͠Ͳ͏͔͸ը໘࠶ϩʔυͯ֬͠ೝͯ͠Ͷʯ

Slide 6

Slide 6 text

ͳͥࣾ಺γεςϜ͸ࡶͳͷ͔ ར༻ऀ͕গͳ͍ ࡞ΓࠐΉΑΓར༻ऀΛ஁͑Δํ͕खͬऔΓૣ͍ɻ ϑʔϧϓϧʔϑͳ࣮૷ίετ > खಈϩʔϧόοΫ͢Δίετ

Slide 7

Slide 7 text

ͦͯ͠ࡶͳ࡞Γͷࣾ಺γεςϜ͸ ࢖ָ͍ͬͯͯ͘͠ͳ͍

Slide 8

Slide 8 text

ͦ͜Ͱ গ͠Ͱ΋ָࣾ͘͠಺γεςϜΛར༻Ͱ͖Δ޻෉Λ͠·ͨ͠

Slide 9

Slide 9 text

σϞ

Slide 10

Slide 10 text

αϜϥΠζϜࣾ಺γεςϜͰ΍ͬͨ͜ͱ ɾ༷ʑͳΠϕϯτͰԻ͕໐Δʂ → ָ͍͠ʂ / ଟॏԡ͠๷ࢭ ɾ଴ͭ৔໘ͰGIFಈը͕ग़Δ → ָ͍͠ʂ ɾ௨஌͕ग़Δ → ௕͍ॲཧ࣌ɺը໘ϦϩʔυΛ܁Γฦ͞ͳͯ͘΋ਐḿ͕෼͔Δ

Slide 11

Slide 11 text

ԻΛग़͢

Slide 12

Slide 12 text

ԻΛग़͢ - Web Audio API (1/2)

Slide 13

Slide 13 text

ԻΛग़͢ - Web Audio API (2/2) function confirmWithSound(message, effectName){ if (confirm(message)) { const soundEffect = document.getElementById(effectName); soundEffect.play(); const d1 = new Date(); while (true) { const d2 = new Date(); if (d2 - d1 > (soundEffect.duration * 1000)) { break; } } return true; } return false; }

Slide 14

Slide 14 text

ԻΛग़͢ - ஶ࡞ݖ͸ʁ ख࣋ͪͷૉࡐΛࣾ಺ͰඇӦརʹԻΛग़͢෼ʹ͸ஶ ࡞ݖ๏ୈ38৚ʹΑΓ໰୊ͳͦ͞͏ɻ དྷ٬ऀ޲͚ͳͲɺӦར໨తͰྲྀ͢৔߹͸؅ཧஂମʹ૬ஊΛɻ ʢͪ͜Β͸ૉਓ͕ௐ΂ͨݶΓͷ৘ใͰ͢ɻ࣮ࡍʹ͸ઐ໳Ոʹ ͝૬ஊ͍ͩ͘͞)

Slide 15

Slide 15 text

GIFಈըΛग़͢

Slide 16

Slide 16 text

GIFಈըΛදࣔ͢Δ • ଴͍ͬͯΔָ͍ؒ͠(?)GIFಈըΛදࣔ • ιʔε͸ giphy.com (API͋Γ·͢) • ݕࡧAPIͰ "waiting"ͰϚονͨ͠ಈըΛද͍ࣔͯ͠ Δ

Slide 17

Slide 17 text

giphy.comͷAPIΛ࢖͏ʹ͋ͨͬͯ

Slide 18

Slide 18 text

Giphy4JΛ࡞Γ·ͨ͠ • https://github.com/yusuke/GIPHY4J •

Slide 19

Slide 19 text

੕͍ͩ͘͞ • https://github.com/yusuke/GIPHY4J •

Slide 20

Slide 20 text

Giphy4Jͱ͸ • Java / Kotlin͔Β؆୯ɺܕ҆શʹGiphy APIΛ࢖͑Δ Javaίʔυྫ) class Giphy4JExample{ public static void main(String... args){ String apiKey = "myapikey"; Giphy4J giphy4j = new Giphy4J(apiKey); List gifs = giphy4j.search("sponge bob"); } }

Slide 21

Slide 21 text

Giphy4Jར༻ྫ Kotlinίʔυྫ) fun main(args: Array) { val giphy4K = Giphy4K("apikey") val gifs = giphy4K.random(tag = "sponge bob") // ࢦఆͨ͠ΩʔϫʔυͷϧʔϓಈըͷURL println(gifs.images.looping.mp4) }

Slide 22

Slide 22 text

௨஌Λग़͢

Slide 23

Slide 23 text

Push.js • https://pushjs.org • Web Notification APIϥού • ੜWeb Notification APIΛ௚઀ୟ͘ΑΓ΋؆୯(Β͍͠)

Slide 24

Slide 24 text

Push.jsར༻Πϝʔδ let ϝοηʔδ = "௨஌͢Δϝοηʔδ" Push.create("Yabumi", { body: ϝοηʔδ, icon: 'https://' + location.host + '/images/icon.png', timeout: 4000, onClick: function () { window.focus(); this.close(); } }); • ஫)SafariͰ͸ΞΠίϯ͸දࣔ͞Εͳ͍ ஫)4ඵఔ౓ͰOS͕ফͯ͠͠·͏ɻ4ඵҎ্දࣔ ͠ଓ͚Δ௨஌͸࡞Εͳͦ͞͏ɻ

Slide 25

Slide 25 text

ࡶʹॻ͍ͨฐࣾͷ࣮ࡍͷΞʔΩςΫνϟ ϒϥ΢β Nginx Spring Boot Click! STOMP over WebSocket Push.js αʔό͔Βͷ௨஌͸STOMP over WebSocketΛ௨ͯ͠ϓογϡ

Slide 26

Slide 26 text

Nginxͷઃఆ server { listen 80; server_name localhost; location / { proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; # to proxy WebSockets in nginx proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass_header Sec-Websocket-Extensions; proxy_pass http://backend:8080; } }ç WebSocketͷϓϩΩγʹඞཁ

Slide 27

Slide 27 text

·ͱΊ Web Audio APIͰࣾ಺γεςϜ͸ָ͘͠ͳΔ GiphyͰࣾ಺γεςϜ͸ָ͘͠ͳΔ Web Notification APIͰࣾ಺γεςϜ͸ָ͘͠ͳΔ Giphy͸͓͖ͯ͞ɺ༷ʑͳΠϕϯτͰԻΛ໐Βͨ͠Γ ௨஌ͨ͠Γ͢Δͷ͸࣮༻্΋େม༗ҙٛͳͷͰΦεεϝ