AWS를 사용하는 게임 고객사를 대상으로 ‘Amazon GameLift 세션’ 을 준비했습니다.
GameLift는 클라우드에서 세션 기반 멀티플레이 게임 서버를 배포, 운영, 조정하는 데 사용되는 완전 관리형 서비스로, 본 행사에서는 Amazon GameLift를 이용한 세션형 1:1 게임 배포 실습을 진행합니다.
Reorganizing Website Architecture for HTTP/2 and BeyondKazuho Oku
This document discusses reorganizing website architecture for HTTP/2 and beyond. It summarizes some issues with HTTP/2 including errors in prioritization where some browsers fail to specify resource priority properly. It also discusses the problem of TCP head-of-line blocking where pending data in TCP buffers can delay higher priority resources. The document proposes solutions to these issues such as prioritizing resources on the server-side and writing only what can be sent immediately to avoid buffer blocking. It also examines the mixed success of HTTP/2 push and argues the server should not push already cached resources.
AWS를 사용하는 게임 고객사를 대상으로 ‘Amazon GameLift 세션’ 을 준비했습니다.
GameLift는 클라우드에서 세션 기반 멀티플레이 게임 서버를 배포, 운영, 조정하는 데 사용되는 완전 관리형 서비스로, 본 행사에서는 Amazon GameLift를 이용한 세션형 1:1 게임 배포 실습을 진행합니다.
Reorganizing Website Architecture for HTTP/2 and BeyondKazuho Oku
This document discusses reorganizing website architecture for HTTP/2 and beyond. It summarizes some issues with HTTP/2 including errors in prioritization where some browsers fail to specify resource priority properly. It also discusses the problem of TCP head-of-line blocking where pending data in TCP buffers can delay higher priority resources. The document proposes solutions to these issues such as prioritizing resources on the server-side and writing only what can be sent immediately to avoid buffer blocking. It also examines the mixed success of HTTP/2 push and argues the server should not push already cached resources.
Presentation material for TokyoRubyKaigi11.
Describes techniques used by H2O, including: techniques to optimize TCP for responsiveness, server-push and cache digests.
- The document discusses various aspects of Unix programming using Perl, including handling errors, filehandles after forking processes, and signals.
- It provides examples of how to properly check for errors, avoid resource collisions after forking, and make code cancellable using signals.
- Key topics covered include using the Errno module to check for errors, closing filehandles after forks to prevent sharing issues, and trapping signals like SIGPIPE and SIGTERM.
Mobile deviceperfoptimization jtpa_releaseHakuro Matsuda
This document discusses optimizing performance for mobile devices. It covers hardware specifications for mobile CPUs, GPUs, RAM, screens and batteries. It then discusses areas that impact battery life like the radio, LCD and CPU/GPU usage. It also covers techniques for optimizing performance like variable CPU clock rates, CPU governors, thermal throttling and load throttling. Finally, it summarizes key hardware characteristics and discusses low-level optimization for Android using the NDK.
Phoenix Habitat For Humanity Leed PresentationICF_HCD
The document provides an overview of the Leadership in Energy and Environmental Design (LEED) green building certification program. It discusses the point system and levels (Certified, Silver, Gold, Platinum), categories evaluated, roles of key parties like the USGBC and green raters, steps in the certification process, and costs associated with a Habitat for Humanity project in Arizona that achieved Platinum certification with 86 total points.
Raccoons have black facial markings and bushy tails with light and dark rings. They live throughout North America in forests and urban areas, often near water in hollow trees, burrows, or caves. Raccoons have a varied nocturnal diet of berries, insects, fruit, and human food sources like garbage, and give birth to litters of 4-5 young in April or May.
The document lists various hypothetical scenarios that represent extremes of human traits and behaviors, including secrecy, laziness, craziness, forgetfulness, stupidity, honesty, suicide, and dehydration. Specifically, it provides brief, amusing examples to illustrate what might constitute the height or peak of each quality, such as getting a blank paper xeroxed representing the height of craziness or a pregnant woman taking one and a half tickets representing the height of honesty.
Dan McHugh lives in Singapore but is Australian. He is a competitive intelligence analyst, which involves gathering information from public sources to understand markets and companies, helping business leaders. While he has access to information, he is not a spy, as his work does not involve secret or illegal methods like dumpster diving, but rather analyzing openly available data.
Ordered and unordered lists are the two main types of lists in HTML. Ordered lists use the <OL> tag and display items in numerical or alphabetical order, while unordered lists use the <UL> tag and display items with bullet points. The <LI> tag is used within both <OL> and <UL> tags to specify each list item. The TYPE and START attributes can be used with the <OL> tag to customize the numbering or lettering of ordered lists.
Language learning and teaching through social mediaLis Parcell
Slides for the event "Utilizing digital technology and social media in language classes" hosted by the Centre for Lifelong Learning at Cardiff University and funded by HEA Arts and Humanities. An image based presentation with activities focusses on principles of effective social media engagement which might be applied to language teaching. Materials developed with help from Esther Barrett.
The document discusses the performance of HTTP/2 compared to HTTP/1.1 across different network conditions. It summarizes results from testing 8 real websites under 16 bandwidth and latency combinations with varying packet loss rates. Overall, HTTP/2 performs better for document complete time and speed index, especially on slower connections, though results vary depending on the specific site and metrics measured.
This document discusses programming TCP for responsiveness when sending HTTP/2 responses. It describes how to reduce head-of-line blocking by filling the TCP congestion window before sending data. The key points are reading TCP states via getsockopt to determine how much data can be sent immediately, and optimizing this only for high latency connections or small congestion windows to avoid additional response delays. Benchmarks show this approach can reduce response times from multiple round-trip times to a single RTT.
The document discusses optimizations to TCP and HTTP/2 to improve responsiveness on the web. It describes how TCP slow start works and the delays introduced in standard HTTP/2 usage from TCP/TLS handshakes. The author proposes adjusting the TCP send buffer polling threshold to allow switching between responses more quickly based on TCP congestion window state. Benchmark results show this can reduce response times by eliminating an extra round-trip delay.
Cache aware-server-push in H2O version 1.5Kazuho Oku
This document discusses cache-aware server push in H2O version 1.5. It describes calculating a fingerprint of cached assets using a Golomb compressed set to identify what assets need to be pushed from the server. It also discusses implementing this fingerprint using a cookie or service worker. The hybrid approach stores responses in the service worker cache and updates the cookie fingerprint. H2O 1.5 implements cookie-based fingerprints to cancel push indications for cached assets, potentially improving page load speeds.
JSON SQL Injection and the Lessons LearnedKazuho Oku
This document discusses JSON SQL injection and lessons learned from vulnerabilities in SQL query builders. It describes how user-supplied JSON input containing operators instead of scalar values could manipulate queries by injecting conditions like id!='-1' instead of a specific id value. This allows accessing unintended data. The document examines how SQL::QueryMaker and a strict mode in SQL::Maker address this by restricting query parameters to special operator objects or raising errors on non-scalar values. While helpful, strict mode may break existing code, requiring changes to parameter handling. The vulnerability also applies to other languages' frameworks that similarly convert arrays to SQL IN clauses.
This document discusses using the prove command-line tool to run tests and other scripts. Prove is a test runner that uses the Test Anything Protocol (TAP) to aggregate results. It can run tests and scripts written in any language by specifying the interpreter with --exec. Extensions other than .t can be run by setting --ext. Prove searches for tests in the t/ directory by default but can run any kind of scripts or tasks placed in t/, such as service monitoring scripts. The .proverc file can save common prove options for a project.
JSX - developing a statically-typed programming language for the WebKazuho Oku
Kazuho Oku presents JSX, a statically-typed programming language that compiles to JavaScript. JSX aims to improve productivity over JavaScript by enabling errors to be caught at compile-time rather than runtime. It also aims to optimize code size and execution speed compared to JavaScript through type information and compiler optimizations. Oku discusses JSX language features like classes and types, benchmarks showing improved performance over JavaScript, and efforts to bind JSX to W3C standards through automatic translation of interface definition languages.
The document discusses the JSX Optimizer, which performs optimizations on JavaScript code that JavaScript VMs cannot. It aims to minimize the need for inline caching, pressure on the garbage collector, and maintain the original code structure while optimizing. Some optimizations included are constant folding, inlining functions, and unboxing. Challenges include switching to SSA form and maintaining debuggability of the original code. Benchmark results show a 13.5-28.7% increase in frames per second for the Box2D game engine.
JSX is a strictly-typed object-oriented programming language that is compiled to JavaScript. It aims to provide higher productivity than JavaScript through strong typing while generating code that runs faster than plain JavaScript. Some key points:
- JSX code is compiled to optimized JavaScript using type information for performance gains
- It has classes and functions like Java but compiles to JavaScript
- Goals are higher productivity than JavaScript and applications that run faster and are higher quality
- It avoids problems of other languages that compile to JavaScript like performance penalties
17. コンストラクタのオーバーロード
通常の関数は名前を変えることでオーバーロード可能
Q. コンストラクタの場合、どうするか?
A. こんなコードを書く (JSXの内部実装より抜粋)
function $__jsx_extend(derivations, base) {
var ctor = function () {};
ctor.prototype = base.prototype;
var proto = new ctor();
for (var i in derivations)
derivations[i].prototype = proto;
}
function Point1(pt) { this.x = pt.x; this.y = pt.y; }
function Point2(x, y) { this.x = x; this.y = y; }
// new Point1 しても new Point2 しても同じ型のオブジェクトが生成するおまじない
$__jsx_extend([ Point1, Point2 ], Object);
JSX 速さの秘密 - 高速なJavaScriptを書く方法
17
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
27. 事前計算
定数畳み込み
⁃ JSXのソースコード:
const name = ”John”;
…
console.log(”Hello, ” + N);
⁃ コンパイル結果 (JavaScript):
console.log(”Hello, John”);
JSX 速さの秘密 - 高速なJavaScriptを書く方法
27
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
28. 事前計算 (その2)
Dead-code Elimination
⁃ JSXのソースコード:
const DEBUG = 0;
…
if (DEBUG) console.log(”in debug mode”);
⁃ コンパイル結果 (JavaScript):
// からっぽ
JSX 速さの秘密 - 高速なJavaScriptを書く方法
28
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
29. LTO (リンク時最適化)
以下のコードで、mの型は何?
function transform(m: Matrix, pt : Point) : Point {
return m.rotate(pt);
}
mの型はMatrix型かもしれないし、Matrixの派生型かも
⁃ これでは、rotateの実装を特定できない
•
→ rotateをインライン展開できない
そこでLTO!
⁃ LTO: プログラムが使用する全てのコードに関する情
報を使って(つまり、リンク時に)最適化
⁃ Matrixを継承した型がなければ、mの型はMatrix型
JSX 速さの秘密 - 高速なJavaScriptを書く方法
29
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
30. アフィン変換 (クラス定義)
class Matrix {
var m11 : number; var m21 : number; var m31 : number;
var m12 : number; var m22 : number; var m32 : number;
...
function transform(pt : Point): Point {
return new Point(
this.m11 * pt.x + this.m21 * pt.y + this.m31,
this.m12 * pt.x + this.m22 * pt.y + this.m32);
}
}
class Point {
var x : number; var y : number;
function constructor(x : number, y : number) {
this.x = x;
this.y = y;
}
...
JSX 速さの秘密 - 高速なJavaScriptを書く方法
30
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
31. アフィン変換 (コンパイル例)
JSXのソースコード:
var pt = new Matrix(1, 0, 0, 0, 2, 0).transform(new Point(x, y));
x = pt.x;
y = pt.y;
最適化コンパイル後 (JavaScript):
var pt$x = x + 0 * y;
y = 0 * x + 2 * y;
x = pt$x;
適用された最適化手法:
⁃ LTO (transformの実装を確定)
⁃ インライン展開
⁃ Unboxing
⁃ 定数畳み込みとDCE
JSX 速さの秘密 - 高速なJavaScriptを書く方法
31
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
32. まとめ
JSX 速さの秘密 - 高速なJavaScriptを書く方法
32
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.