Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LINE Developer Meetup: Javascript All The Things
Search
Joel Billaud
July 20, 2016
Programming
720
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LINE Developer Meetup: Javascript All The Things
Joel Billaud
July 20, 2016
Other Decks in Programming
See All in Programming
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
600
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
Intent as Code
shoppingjaws
6
860
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
3.8k
Foundry Localでエージェント開発
seosoft
0
170
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
700
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
500
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
130
XHTMLが残したもの
yosuke_furukawa
PRO
2
680
業務時間外もAIに働いてもらう話
colorful12
3
10k
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
120
スマート反転とウェブアクセシビリティ
camiha
0
180
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
エンジニアに許された特別な時間の終わり
watany
108
250k
How to make the Groovebox
asonas
2
2.4k
Odyssey Design
rkendrick25
PRO
2
800
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Transcript
Image copyright: Hyperbole and a Half LINE Fukuoka Joël Billaud
2016-07-20
2015 11 LINE Fukuoka Creators Market
JavaScript?
Perl JavaScript (ES6) bless +{ description => $description, methods =>
\@methods, }; bless +{ description => $description, methods => \@methods, }; { description, methods, };
Perl?
None
Green Red Pink
HTML CSS
HTML CSS JavaScript 40 PSDs 2 2 2
➜
PSD HTML Canvas
40 PSDs 2 5
⅓ ⅓ ➜
PSD
None
PSD DSL
PSD npm install psd # > const PSD = require('psd')
> const psd = PSD.fromFile(filepath) > const layer = psd.tree().children()[0] // PSD > layer.name // 'Friends @a.top.title' >[layer.width, layer.height] // [629, 1140] > layer.toPng() // Stream { ... }
"AndroidFriends": { "ja": { "width": 720, "height": 1232, "layers": [
{ "color": "a.friends.bg" "rect": { "left": 0, "top": 0, "width": 720, "height": 1232 } }, { "color": "a.top.button" "src": {
HTML Canvas
Reactive UI
Green Red Pink
function renderPreviewScreen(ctx, preview) { // Promise const renderers = preview.layers.map(layer
=> { if (layer.element) { return loadElementLayer(...); } else if (layer.rect) { return loadRectLayer(...); } else { return loadSpriteLayer(...); } }); // ... function loadSpriteLayer(layer, spriteUrl, colors) { return loadImage(spriteUrl).then(sprite => { return function render(ctx) { ctx.drawImage(sprite, src, dst); }; }); }
// Promise.all(renderers).then(...); // renderers.each(render => render.then(...)); // renderers[0].then(render => render(ctx))
.then(() => renderers[1]).then(render => render(ctx)) .then(() => renderers[2]).then(render => render(ctx)) ... .then(() => renderers[n]).then(render => render(ctx)) // reduce renderers.reduce((previous, current) => { return previous .then(() => current) .then(render => render(ctx)) });
function renderPreviewScreen(ctx, preview) { return preview.layers.map(layer => { if (layer.element)
{ return loadElementLayer(...); } else if (layer.rect) { return loadRectLayer(...); } else { return loadSpriteLayer(...); } }) .reduce((previous, current) => previous.then(() => current) .then(render => render(ctx)) ); }
npm Promise Node npm install beer vodka whiskey #
LINE