scala로 EOP (Expression Oriented Programming)을 하기에 좋다.
http://alvinalexander.com/scala/best-practice-think-expression-oriented-programming-eop
scala로 EOP (Expression Oriented Programming)을 하기에 좋다.
http://alvinalexander.com/scala/best-practice-think-expression-oriented-programming-eop
SPA를 위한 여러가지 framework들이 있지만, framework없이 간단한 library로만
js SPA를 구현하는 방법이 있다.
http://tutorialzine.com/2015/02/single-page-app-without-a-framework/
handlebars.js 를 사용한다.
간혹 네트웍이 몇초간 접속 안하면
세션이 끊어지도록 구축된 경우가 있다.
이런 경우 네트웍이 끊어지지 않도록 계속 연결을 물고 있으면 편하므로
아래와 같은 sell script를 만들어 연결을 유지하곤 한다.
#!/bin/sh
while sleep 2; do
telnet server_ip server_port << EOF
quit (서버에서 결종료 명령어.. 없으면 안써도 될듯)
EOF
done
vrrp가 A/B 서버간에 메시지를 broadcating하는데
근래 OS들이 이 broadcast들을 default로는 막는 경우가 존재한다.
조치:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
<<
JAVA: bytecode는 interpre언어이나.. 실행시 JIT Compiler가 기계어로 바꿔서 실행하므로 compile언어라고 본다.
Scala는 이와 동일하게 javabytecode로 바꾸는 방식을 그대로 따르며, 완전한 java bytecode를 이용한다. >>
이름에서 나와있듯이 scalable한 언어이다.
아래 1번 scalable이 6번 안전성과 관계를 좀 더 살펴봐야 할 것 같은데
어쨌던 Functional 언어의 등장 자체가
multi-core에서 안전성을 가지기 위해서 이므로..
6번의 안전성을 기반으로 1번 확장성도 가지게 된다고 개인적으로 보고 있다.
<Scala의 특징>
1. scalable
2. pure Object-Oriendted (java는 primitive가 Object가 아님)
3. Functional 언어
- Assignment를 없애서, 참조투명성(REFERENTIAL TRANSPARENCY) 을 확보.
4. Java 호환.
5. 함수도 객체.
6. future-Proof
7.Fun
< 기본 문법>
def : function이나 method를 선언할때 사용
val : reasign이 불가능한 상수를 선언할때 사용
var: reasign이 가능한 변수를 선언할때 사용
exam )
def helloWorld = println("hello world.")
val foo: Int = 1
var bar = "test"
<case Class>
new 없이 쓸 수 있고, getter필요없이 바로 .value 로 access.
Several Example : http://alvinalexander.com/scala/
<Flat Map>
http://alvinalexander.com/scala/collection-scala-flatmap-examples-map-flatten
You can use the following command to find out the defaults on the system where your applications runs.
java -XX:+PrintFlagsFinal -version
Look for the options MaxHeapSize (for -Xmx) and InitialHeapSize for -Xms.
On a Unix/Linux system, you can do
java -XX:+PrintFlagsFinal -version | grep HeapSize
android로 간단한 서비스 구현시 필요한 건 다음 2~3가지 정도이다.
1. extends Service
2. onStartCommand (return START_STICKY)
3. onBind {return null;} ==>Bind형 서비스 용도 : AIDL과 함께 사용하는 참고 사이트
4. onDestroy
서비스에서 제일 중요한 함수는 onStartCommand라고 할 수 있는데
최초 실행시에는 onCreate->onStartCommand순으로 호출되고
실행중 재호출시에는 onStartCommand로 바로 호출되기 때문이다..
서비스의 onStartCommand에는 3가지 return type을 가질수 있다.
보통은 특정파라미터가 없다면, START_STICKY를 쓰면 된다. (자동 재구동)
|
|
GC(Garbage Collection)에는 serial방식과 Parallel방식이 있는데
single thread (32bit window)등 특수환경에서만 serial방식이 쓰이고, 대부분 Parallel 방식이 쓰인다.
serial방식의 경우, 어플리케이션을 freezing시켜 버린다.
GC의 중요한 2가지 기능별 분류:
CMS GC(concurrent-mark-sweep) :
- 동시에 여러Thread를 이용해서 mark하고 sweep.
- 일반적으로 STW(Stop-The-World)를 유발하지 않지만 아래2가지 경우 STW 발생가능..
a. Initial Root 마킹
b. 동작중에 앱의 heap 상태 변경으로 재구동 필요시
G1 GC(Garbage first Collector - JDK1.7u4 에서 4GB 이상 heap을 우선처리하기 위해 등장 함)
- JDK1.8u20 에서는 string dup제거 로직도 추가됨
추가로,
Java8에선 PermGen (class 메타데이타 저장소)가 없어짐. OOM을 많이 유발하던 부분임.
CMS GC의 버그는 1.7에서 해결되었으며,
G1 GC의 버그는 1.8에서 해결됨. : 슬라이드 30페이지
Public User ID: 국제적으로 통용하기 위한 ID로서, 공용ID인 만큼, 명함이나 출판물에 찍어서 교환해도 되는 고유Id이다.
tel Uri 혹은 Sip Uri로 표시한다.
- tel:+821012345678
- sip:john.doe@ims.korea.com
Private User ID: 통신사 내에서 쓰기위한 용도이다.
< Puid와 Prid의 관계 >
PuID는 폰마다 하나씩 존재해야 하지만,
PrID는 하나를 만들어 여러개의 폰에 공용으로 사용할 수 있다.
PrID는 sip:joe@mytelecom.com 형태로 쓰면 된다.
<GRUU>
폰을 위해 GRUU(Grobally Routable User agent URI)를 사용할 수 있으며
GRUU를 여러개 만들어서 폰하나에 GRUU 2개를 할당할 수도 있다.
즉 Phone1- GRUU1 - Puid1
- GRUU2 - Puid2
Phone2 - GRUU3 /
와 같은 형태로 다대다 매핑이 가능하다.