The document compares and contrasts the Java and C# programming languages. It summarizes that Java is not fully object-oriented as it uses primitive types, while C# makes all types objects. It also discusses various language features introduced over time, showing that C# often introduced useful features earlier than Java, such as generics and LINQ. The document provides code examples to demonstrate how tasks can be expressed more declaratively and concisely in C# compared to Java.
Discover how mobile game companies are leveraging AWS to build cost-effective, scalable games. Learn how companies like Supercell are using EC2 and S3 to run their online game servers. Understand the challenges in scaling game databases, and how developers like Halfbrick use DynamoDB to overcome these demands. Learn how you can use the new EC2 G2 and C3 instances to run multiplayer games in the cloud. Finally, see how developers like Rovio are using SNS to send mobile push notifications to keep players engaged.
Discover how mobile game companies are leveraging AWS to build cost-effective, scalable games. Learn how companies like Supercell are using EC2 and S3 to run their online game servers. Understand the challenges in scaling game databases, and how developers like Halfbrick use DynamoDB to overcome these demands. Learn how you can use the new EC2 G2 and C3 instances to run multiplayer games in the cloud. Finally, see how developers like Rovio are using SNS to send mobile push notifications to keep players engaged.
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
패치해야할 서버가 전 세계에 나뉘어져 있다면, 어떻게 해야 동시에, 빠르면서, 또 신뢰성있게 서버를 패치할 수 있을까?이를 구현하기 위해 개발된 1)작은 크기의 패치데이터를 빠르게 생성하는 알고리즘과 2) 글로벌 데이터 복제를 위한 기술, 3) 동시 패치와 롤백이 가능하도록 구성한 시스템의 설계와 구조에 대해서 알아본다. 또, 핵심기능에 대한 시연과 함께넥슨아메리카에서 실제로 이를 어떻게 활용하고 있는지, 현장에서 얼마만큼의 개선이 이루어졌는지를 실증적 데이터에 기반하여 공유하고자 한다.
배민찬(https://www.baeminchan.com) 서비스의 백엔드 시스템 중 일부가 지난 1년간 어떤 고민과 아이디어, 결과물을 만들어냈는지 공유하려고 합니다. 발표 중 언급되는 용어나 도구에 대해 일반적인 정의나 간단한 설명은 언급되나 자세히 다루지 않습니다. 사용된 도구들로 어떻게 이벤트 기반 분산 시스템을 만들었는지에 대한 이야기가 중심입니다.
"JavaScript in 2016" by Eduard Tomàs
Some years ago in a far far away company, Brendan Eich created JavaScript. A lot of things happened since then. Times changed, the web grown, the language itself was updated, and we as a developers need to adapt too. Last year the last standard of the language arose: ECMAScript 2015 is here, and has some new and interesting features. In this talk we will show the most relevant ones, and also we will introduce some interesting patterns that you can use in JavaScript: you'll learn how to master the language and made JavaScript your best ally to conquest the world!
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
패치해야할 서버가 전 세계에 나뉘어져 있다면, 어떻게 해야 동시에, 빠르면서, 또 신뢰성있게 서버를 패치할 수 있을까?이를 구현하기 위해 개발된 1)작은 크기의 패치데이터를 빠르게 생성하는 알고리즘과 2) 글로벌 데이터 복제를 위한 기술, 3) 동시 패치와 롤백이 가능하도록 구성한 시스템의 설계와 구조에 대해서 알아본다. 또, 핵심기능에 대한 시연과 함께넥슨아메리카에서 실제로 이를 어떻게 활용하고 있는지, 현장에서 얼마만큼의 개선이 이루어졌는지를 실증적 데이터에 기반하여 공유하고자 한다.
배민찬(https://www.baeminchan.com) 서비스의 백엔드 시스템 중 일부가 지난 1년간 어떤 고민과 아이디어, 결과물을 만들어냈는지 공유하려고 합니다. 발표 중 언급되는 용어나 도구에 대해 일반적인 정의나 간단한 설명은 언급되나 자세히 다루지 않습니다. 사용된 도구들로 어떻게 이벤트 기반 분산 시스템을 만들었는지에 대한 이야기가 중심입니다.
"JavaScript in 2016" by Eduard Tomàs
Some years ago in a far far away company, Brendan Eich created JavaScript. A lot of things happened since then. Times changed, the web grown, the language itself was updated, and we as a developers need to adapt too. Last year the last standard of the language arose: ECMAScript 2015 is here, and has some new and interesting features. In this talk we will show the most relevant ones, and also we will introduce some interesting patterns that you can use in JavaScript: you'll learn how to master the language and made JavaScript your best ally to conquest the world!
Apple's Swift has achieved the top place in Stack Overflow's "Most Loved" list of programming languages in its 2015 Developer Survey. Based on information gleaned from GitHub and Stack Overflow, analyst firm RedMonk has seen Swift's popularity ranking soar from 68 to 22 in an unprecedented 6 months.
The "Extreme Swift" event does not require advanced, or even any, knowledge of Swift. Learn about some of the more outrageous features of the language which help explain what the fuss is all about!
Never look at programming the same way again — even if you never end up writing a single line of Swift code in your life.
Now that C#6 is officially available, most people will have a look to new features. The purpose of this talk is not only to show you the new feature but also, and mostly to show you how it can improve your code to write it in a better, smaller and more readable way
Clojure is a new dialect of LISP that runs on the Java Virtual Machine (JVM). As a functional language, it offers great benefits in terms of programmer productivity; as a language that runs on the JVM, it also offers the opportunity to reuse existing Java libraries. Simon’s interest is in using Clojure to build desktop applications with the Java Swing GUI library. In this presentation Simon discusses how the power of Clojure can be applied to Swing, and whether it hits the sweet spot.
To assess the quality of PVS-Studio C# diagnostics, we test it on a large number of software projects. Since projects are written by different programmers from different teams and companies, we have to deal with different coding styles, shorthand notations, and simply different language features. In this article, I will give an overview of some of the features offered by the wonderful C# language, as well as the issues that one may run into when writing in this language.
Similar to Why Java Sucks and C# Rocks (Final) (20)
7. • Believe CLR is better than JVM
• Believe .NET is better than Java platform
• Get rid of Java language right away
• Use C# instead of Java language
• Use .NET instead of Java platform
13. In Java you can NOT ...
ArrayList
list
=
new
ArrayList();
list.add(5);
//
cannot
compile
int
i
=
(int)list.get(0);
//
cannot
compile
int
hash
=
3.hashCode();
//
cannot
compile
14. You have to ...
ArrayList
list
=
new
ArrayList();
Integer
five
=
Integer.valueOf(5);
list.add(five);
int
i
=
((Integer)list.get(0)).intValue();
Integer
three
=
Integer.valueOf(3);
int
hash
=
three.hashCode();
15. In C# ...
• No primitive types
• All types are subtypes of Object.
• Just value types and reference types
• Programmers can build custom value types
• Value types can be assigned to Object
variables without explicit casting.
16. So you can always ...
ArrayList
list
=
new
ArrayList();
list.Add(5);
int
i
=
(int)list[0];
int
hash
=
3.GetHashCode();
18. Finally you can ...
ArrayList
list
=
new
ArrayList();
list.add(5);
//
auto
boxing
//
auto
unboxing
int
i
=
(Integer)list.get(0);
//
you
still
can’t
do
this!
int
hash
=
3.hashCode();
19. Java 5.0 also brings ...
• Annotation - allows language constructs to
be tagged with additional data
• Enumerations - the “enum” keyword
creates a typesafe, ordered list of values
• Varargs - make passing an array as
parameter easier then before
• Enhanced “for” loop - simplified iteration
20. But most of these
features were already
provided by C# 1.0 ...
28. What’s the output?
List<String>
a
=
new
ArrayList<String>();
List<Integer>
b
=
new
ArrayList<Integer>();
bool
sameType
=
a.getClass()
==
b.getClass();
System.out.println(sameType);
29. And you can’t do this
public
class
MyClass<E>
{
public
static
void
myMethod(Object
item)
{
if
(item
instanceof
E)
{
//
Compiler
error
...
}
E
item2
=
new
E();
//
Compiler
error
E[]
iArray
=
new
E[10];
//
Compiler
error
}
}
38. So closure and yield are ...
• Increasing productivity dramatically
• Coming with new programming patterns
• Important features for async / parallel /
reactive programming
• The primitives for Fibers - lightweight
computation units
45. Java 6 is cool because of ...
• pluggable annotations (JSR 269): customized
compile-time processing (Project Lombok)
• dramatic JVM improvements: compiler
performnace, start-up time, GC, JIT...
• scripting language support (JSR 223): Rhino
JavaScript for Java included
51. LINQ is made up of ...
• Extension method - safely add methods to
types without breaking anything
• Lambda expression - make C# a better
functional language
• Anonymous type - compile time auto
generated types
• Expression tree - language-level code in the
form of data
66. List<string>
keywords
=
...;
var
result
=
keywords
.GroupBy(k
=>
k[0])
.ToDictionary(
g
=>
g.Key,
g
=>
g.OrderBy(k
=>
k).ToList());
67. List<string>
keywords
=
...;
var
result
=
keywords
.GroupBy(k
=>
k[0])
.ToDictionary(
g
=>
g.Key,
g
=>
g.OrderBy(k
=>
k).ToList());
Declarative code
“What” to do
78. C# is an FPL because of
• First class functions (as .NET delegates)
• Elegant lambda expression syntax
• Enough type inference for most cases
• Full set of functional primitives in BCL
• Great extensibility (by extension method)
79. Fixed-point combinator
static
Func<T,
TResult>
Fix<T,
TResult>(
Func<Func<T,
TResult>,
Func<T,
TResult>>
f)
{
return
x
=>
f(Fix(f))(x);
}
var
fib
=
Fix<int,
int>(f
=>
x
=>
x
<=
1
?
1
:
f(x
-‐
1)
+
f(x
-‐
2));
86. Java 7 is coming
• Automatic Resource Management
• Collection Literals
• Improved Type Inference for Generics
Instance Creation
• Language support for JSR 292
• Simplified Varargs Method Invocation
• Support for Strings in Switch Statements
90. Ruby-like Markup Builder
dynamic
b
=
new
XmlMarkupBuilder();
var
persons
=
new
[]
{
new
Person("Tom",
10),
new
Person("Jerry",
8)
};
XElement
xml
=
b.persons(
from
p
in
persons
select
b.person(p.Name,
age:
p.Age));
91. Ruby-like Markup Builder
dynamic
b
=
new
XmlMarkupBuilder();
var
persons
=
new
[]
{
new
Person("Tom",
10),
new
Person("Jerry",
8)
}; <persons>
XElement
xml
=
<person
age=”10”>Tom</person>
<person
age=”8”>Jerry</person>
b.persons( </persons>
from
p
in
persons
select
b.person(p.Name,
age:
p.Age));
92. Convariance &
Contravariance
• Improving the generics type system
• More powerful and safer than Java’s use-site
variance
• Really a brain fucker
97. Java is popular since it’s ...
• Fast - designed for the JVM, as C is
designed for the machine
• Stable - it’s always one and only one way to
do things
• Easy - most of the features are quite easy
to learn
99. Java is too noisy
• The only way to work is not simple
• Write more and do less
• Little room for smart people.
100. Java is weird ...
int
a
=
1000,
b
=
1000;
System.out.println(a
==
b);
//
true
Integer
c
=
1000,
d
=
1000;
System.out.println(c
==
d);
//
false
Integer
e
=
100,
f
=
100;
System.out.println(e
==
f);
//
true
101. ... and becoming even more
//
C#
dynamic
o
=
...;
int
i
=
o.SomeMethod(true,
“hello”);
//
Java
Object
o
=
...;
Object[]
args
=
new
Object[]
{
true,
“hello”
};
InvokeDynamic.<int>SomeMethod(o,
args);
102. If JVM is machine ...
• Java byte code is the machine code
• Java language is the ASM.
112. Why Scala?
• a statically-compiled language
• a pure object-oriented languages
• clean & powerful generic support (including
convariance & contravariance)
• enough functional features
• actor-based programming model
• really scalable