간혹 네트웍이 몇초간 접속 안하면
세션이 끊어지도록 구축된 경우가 있다.
이런 경우 네트웍이 끊어지지 않도록 계속 연결을 물고 있으면 편하므로
아래와 같은 sell script를 만들어 연결을 유지하곤 한다.
#!/bin/sh
while sleep 2; do
telnet server_ip server_port << EOF
quit (서버에서 결종료 명령어.. 없으면 안써도 될듯)
EOF
done
간혹 네트웍이 몇초간 접속 안하면
세션이 끊어지도록 구축된 경우가 있다.
이런 경우 네트웍이 끊어지지 않도록 계속 연결을 물고 있으면 편하므로
아래와 같은 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 /
와 같은 형태로 다대다 매핑이 가능하다.
IMS의 기본 Invite Flow를 보면 다음과 같다.
Phone1-----> P-CSCF --> S-CSCF --> I-CSCF--> S-CSCF --> P-CSCF --> Phone2
|
|
V
HSS (레지된 S-CSCF 조회)
이 그림에서 HSS의 용도를 보면
I-CSCF가 HSS를 통해서 Phone2가 등록된 S-CSCF를 찾는다.
HSS: 사용자 마스터 DB이며, 사용자 인증/보안용 암호화, 호제어, 세션관리 등 모든 기능을 한다.
HLR: HSS의 일부로서 CS/PS도메인을 제공하는 역할.
-> VLR은 로밍전용 HLR이라고 보면 된다.
User Profile: 부가서비스만 별도로 빼서 작게 관리하기도 함.
CentOS 6.3을
커널 2.6.32-279에서 2.6.32-358.14.1 로 update해보았다.
일단 binary를 받을 수 있는 URL은
-기본 버전: http://vault.centos.org/6.4/os/x86_64/Packages/ kernel-xx-.14.1.el6.x86_64.rpm
-update 버전: http://vault.centos.org/6.4/updates/x86_64/Packages/ kernel-xx.el6.x86_64.rpm
최초에 기본버전이 나오고 마이너 update버전이 나오게 되므로
보통 update버전을 많이 설치하는 것으로 보인다.
kernel은 간단하게 rpm -ivh xx.rpm으로 설치가 된다.
하지만 dependecy문제가 발생하게 되므로
1. kernel-firmware-xx.xx 먼저설치
2. kernel-devel-xx.xx 설치
3. kernel rpm 설치.. 옵션을 --nodeps를 주면 dependency없이 설치 가능.
서버가 접속이 안될 경우를 대비해
HP에서는 ILO (Integrated Light Out) 기능을 제공 한다.
독립적인 Ethernet포트를 이용해
OS에서 사용하는 것과 다른 IP어드레스와 user/비번을 제공한다.
1. ssh 터미널로 초기접속하게되면 아래와 같은 커서가 뜨게 된다.
=====================================
</>hpiLO->
2. 웹브라우저로 https://서버IP 로 접속하면
웹기반 GUI가 제공된다.
==> 접속후 보통 Remote Console (IRC)로 파워 on/off, OS설치, keyboard 입력 등의 작업을 한다.
IRC를 뛰우면 OS 로그인 prompt가 기본적으로 뜨고.. 상단메뉴에 PowerSwitch / Virtual Drives / Keyboard 가 존재한다.
Call Transfer에는 다음과 같은 3가지 종류가 있다.
1. Blind Transfer
- 제 3자 상태의 확인 없이 무조건 돌려주기
2. UnScreened Transfer
- 제3자에게 통화를 해보고 신호가 가는지 확인해서 돌려주기
3. Screened Transfer
- 제 3자와 통화를 직접해서 돌려주겠다고 말까지 한 후, 돌려주기.
<구현 방식>
1. Blind Transfer
- IP-PBX가 REFER메시지를 처리하는 방식이 일반적인 것 같고,
A단말에서 REFER를 처리하는 방법도 있다.(단말이 REFER지원해야 함)
2. (Un)Screened Transfer
- IP-PBX가 INVITE(with REPLACES)를 보내는 방법도 있고
IP-PBX에서 ReINVITE만을 사용하는 방식도 있다.
<Invite with REPLACES 예제>
Alice Alice Parking
phone1 phone2 Bob Place
| | | |
|<===============================>| |
| | | |
| Alice transfers Bob to Parking Place |
| | | |
|------------REFER/200----------->| *1 *2 |
|<--NOTIFY/200 (trying)-----------|--INVITE/200/ACK-->|
|<--NOTIFY/200 (success)----------|<=================>|
|------------BYE/200------------->| |
| | | |
| | | |
| Alice later retrieves call from another phone |
| | | |
| *3 |-INV w/Replaces->| |
| |<--200-----------| |
| |---ACK---------->|----BYE/200------->|
| |<===============>| |
| | | |
Message *1: Bob-> Parking Place
INVITE sip:parkingplace@example.org SIP/2.0
To: <sip:parkingplace@example.org>
From: <sip:bob@example.org>;tag=7743
Call-ID: 425928@bobster.example.org
CSeq: 1 INVITE
Contact: <sip:bob@bobster.example.org>
Referred-By: <sip:alice@phone1.example.org>
Message *2: Parking Place -> Bob
SIP/2.0 200 OK
To: <sip:parkingplace@example.org>;tag=6472
From: <sip:bob@example.org>;tag=7743
Call-ID: 425928@bobster.example.org
CSeq: 1 INVITE
Contact: <sip:parkplace@monopoly.example.org>
Message *3: Alice@phone2 -> Bob
INVITE sip:bob@bobster.example.org
To: <sip:bob@example.org>
From: <sip:alice@phone2.example.org>;tag=8983
Call-ID: 09870@phone2.example.org
CSeq: 1 INVITE
Contact: <sip:alice@phone2.example.org>
Require: replaces
Replaces: 425928@bobster.example.org;to-tag=7743;from-tag=6472
<SIP 메시지 포맷>
INVITE <sip:Request URI>
Via:
Route: 처음에는 UE가 P-CSCF 주소를 넣음.<1차 경유지>
나중에는 UE가 Record-Route에서 읽은 걸 여기다 넣어 줌.
(요즘 다 Loose Route 방식임)
<Route 방식 비교>
Strict Route: <RFC2543>
Requset-URI가 항상 next-hop을 지니는 방식으로 매번 Request-URI를 overwrite하게 됨.
따라서, 진짜 Request-URI는 마지막 Route에 적어줘야 함.
Loose Route: <RFC3261>
Request-URI는 항상 그대로 이며,
최상 Route로 무조건 전달. ==> Request-URI가 다음 목적지가 아니라는 점에서 큰 변화였음.
(Strict Route를 Loose Route로 바꾸는건 backword compatibility 유지하기에는 오버헤드가 큼)
<통화 중 HOLD>
hold기능이 볼때마다 헤깔려서, 잊지 않기 위해서 정리해 보면
A-B단말이 통화중에
1.A가 invite(sendOnly)를 올리면 MS(미디어서버)가 이를 받아 B로 invite(sendOnly)를 보내고
2. B는 invite(recvOnley)로 응답.
3. MS가 A로 recvOnly응답
최종적으로는 A는 MS에다가 말하는 구조가 되고
MS는 B로 음악(hold음)을 틀 수 있는 구조로 된다.
<Bearer open>
BS(Bearer Service) 오픈: P-CSCF가 P_CRF로 요청하면 P_CRF가 AccesS GW의 BS Manager를 통해
단말의 BS Manager같 통신해서 IP-CANnectivity가 연결됨.
<Invite의 각종 필드>
-Privacy: id 이면 발신자표시 금지, 로서 P-Asserted-Identity ( P-CSCF 에서 세팅 )를 상대 단말로 보낼 수 없다
-일반적으로 Reinvite는 to태그가 달라야.. 미디어갱신이 됨 (최근 많이 사용되는 아프로텍 단말은 제외)
Via : Response가 정확하게 trace-back되도록 지나간 경로를 그대로 기록. - 히스토리라서 CSCF들 다기록.
Record-Route : Request가 빠르게 따라가도록 Route경로를 기록.
CSCF들은 Via와 Record-Route를 같이 add함. (I-CSCF는 Via만 기록. Record-Route는 제외..
I-CSCF는 서치만 하고 서치가 끝난게 실제 기록된 Route임.)
Serivce-Route: REGI된 S-CSCF를 S-CSCF가 직접 200 OK에 적어 줌. (UE가 기록해 뒀다가 Invite시에 Route에 직접 이용한다는데..
P-CSCF가 자기주소를 기록하는 Path와 반대 )
Contact: UE간 직접 SIP 접근하기 위함. ( SDP의 C[커넥션 IP]과 차이점은 없나? - 같겠지만 미디어는 주로 C를 사용할 듯. )
그 외에도 callee audio/video카파 및, I-CSI , temp- GRUU , IARI(MMTel-ICSI)
ㅁ ICSI (IMS - Communication Service Identification), IARI (IMS-Application Reference Indentification),
Accept-Contact: 발신자의 Preference.
ICSI가 P-Preferred-Service헤더에 있을 경우, S-CSCF가 이걸 P-Asserted-Service로 치환.
I-CSCF는 LIR(diameter Location Info Request)을 통해 HSS를 직접 조회. (HSS가 2개이상인 경우에는 SLF도 필요)
list of Open File. 특정파일을 access하고 있는 프로세서들을 나열한다.
예)
$lsof mylogfile
$lsof /proc
XML파싱 방법에는 문서전체를 로드해서 하는 DOM방식과, 문서를 순차적으로 읽으면서 하는 SAX(Simple Api 4 Xml)방식이 있다. 참고사이트
JDom등의 별도 라이브러리를 쓰는 경우도 있지만,
내장된 XPath가 워낙 간단해서 입문자는 무조건 이방식으로 하면 될 것으로 보인다. 이 XPath는 기존의 DOM 방식이나 SAX방식이 아닌
XDM(Xml Data Model)방식으로 불리는데, 굳이 Dom/SAX와 비교하자면 Dom방식에 약간 더 가깝다고 볼 수 있을 것 같다.
<사용방식>
//어딘가 Web에 연결해서
HttpURLConnection con = (HttpURLConnection)apiUrl.openConnection();
con.setRequestMethod("GET");
//using XPath 로 파싱.
InputSource is = new InputSource( new InputStreamReader(con.getInputStream()));
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(is);
XPath xpath = XPathFactory.newInstance().newXPath();
zone = (String)xpath.evaluate("/result/zoneName", doc, XPathConstants.STRING);
String offTime = (String)xpath.evaluate("/result/gmtOffset", doc, XPathConstants.STRING);
time = timeAdd(timeCords[0], offTime);
1. 몇가지 Regex 샘플.
A."no it's all right lag" 제거 => str.replaceAll ("no (.*)lag", "A")
B. "Availability in 20 days"; 20만 발췌 => str.replaceAll("\\D+", "");
2. json 을 파싱할 때, 필요한 Regex 2개이다. (\=역슬래쉬)
String normal = json.replaceAll("[{\"}]", ""); //remove {,", }
String[] kvset = normal.split(",\\s*"); //split with , and * means space exist or not
표현식 | 설명 |
^ | 문자열의 시작 |
$ | 문자열의 종료 |
. | 임의의 한 문자 (문자의 종류 가리지 않음) 단, \ 는 넣을 수 없음 |
* | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ | 앞 문자가 하나 이상 |
? | 앞 문자가 없거나 하나있음 |
[] | 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다. |
{} | 횟수 또는 범위를 나타낸다. |
() | 소괄호 안의 문자를 하나의 문자로 인식 |
| | 패턴 안에서 or 연산을 수행할 때 사용 |
\s | 공백 문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | 숫자 [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
\ | 정규표현식 역슬래시(\)는 확장 문자 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미 |
(?i) | 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음 |
가변 파라미터를 받아서 사용하는 방법: (vprintf로 출력가능 한데)
=> 약간 변조하고 싶을 때에는 vsprintf를 사용하면 된다...
#include <stdarg.h>
void logPRINTD(const char* format, ...){
char str[512];
va_list args;
va_start(args, format);
vsprintf(str, format, args); //str로 옮기기
strcat(str,"\n"); ///////////////////// str에 \n 더하기
va_end(args);
//str로 하고싶은일 하기. bla bla
}
리눅스에서 실제 라우팅이 되는지 체크하는 명령어는
$traceroute 123.45.123.45 이다.
라우팅이 안되어 있다면
$route add -net 125.159.63.14 netmask 255.255.255.255 gw 14.63.134.254 dev eth4 명령으로 추가가능.
삭제시에는
$ route del -net 118.49.2.0 netmask 255.255.255.0 명령어로 사용.
라우팅 테이블 확인은
$route 명렁어이다. 추가와 삭제 후에 이 명령어로 확인하면 된다.
(맥북에서는 $netstat -nr 이 비슷하네요)
=====껐다켜도 되게 하려면 아래 정보 추가=================
/etc/sysconfig/network-scripts/route-eth4
ADDRESS0=14.63.237.0
GATEWAY0=10.217.80.1
NETMASK0=255.255.255.0
참조: http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Beginning/PthreadApiReference
Thread의 상태:
PTHREAD_CREATE_JOINABLE : 다른 thread끝나고 동작하는 thread. (exit나 join을 호출을 통해서 자원을 반납해야 하는 thread.)
PTHREAD_CREATE_DETACHED : 독립적으로 동작하므로 종료시점 체크필요없고, 종료시 자동자원반납.
<구조체>
typedef long pthread_t;
struct pthread_attr { void *stackaddr; size_t stacksize; int detachstate; struct sched_param param; int inheritsched; int contentionscope; }; typedef struct pthread_attr pthread_attr_t;
#define PTHREAD_CREATE_JOINABLE 0 #define PTHREAD_CREATE_DETACHED 1
<예제 - 심플 detatched thread 생성. >
pthread_t id;
pthread_attr_t attributes;
// initialize thread attributes
pthread_attr_init(&attributes)
pthread_attr_setdetachstate( &attributes, PTHREAD_CREATE_DETACHED);
//create a new thread
pthread_create( &myId, &attributes, startFunc, args); //args는 startFunc로 전달.
pthread_attr_destroy(&attributes); //자원해제
<함수 prototype>
struct hostent *gethostbyname(const char *name);
int gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);
두 함수 모두 return type은 hostent struct 이다.
<struct hostent 구조 >
struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses */
==> 아래쪽에 in_addr구조체의 s_addr 변수 참조. 같은 형태임. 0xff01ffff의 네트웍바이트(순서대로) 형태(255.1.255.255)
} #define h_addr h_addr_list[0] /* for backward compatibility */ The members of the hostent structure are:
h_addrtype The type of address; always AF_INET or AF_INET6 at present. h_length The length of the address in bytes. h_addr_list An array of pointers to network addresses for the host (in net- HOST_NOT_FOUND The specified host is unknown. NO_ADDRESS or NO_DATA The requested name is valid but does not have an IP address. NO_RECOVERY A non-recoverable name server error occurred. TRY_AGAIN A temporary error occurred on an authoritative name server. Try again later.
<그 외 network관련 struct들 >
struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ in_port_t sin_port; /* port in network byte order */ struct in_addr sin_addr; /* internet address */ }; /* Internet address. */ struct in_addr { uint32_t s_addr; /* address in network byte order */ };0xffffffff의 네트웍바이트 형태.=255.255.255.255
<in_addr_t inet_addr(hostname) 함수> 이름을 0xffffffff (255.255.255.255 효과) 형태로 변환리턴.
리턴type: typedef uint32_t in_addr_t;
INADDR_NONE= -1 (255.255.255.255)을 리턴하는 경우. 약간문제가 될때도 있으나 거의 괜찮음.
c++하나를 불러쓰는 경우
wrapping layer를 만들어서,
c언어에서 불러쓰면 된다.
예) c++파일 안에서
extern "C" {
MyClass* myclass_new()
{
return new MyClass();
}
..몇개 함수 더 매핑.
}
이렇게만 하면,
main. c파일안에서 아래와 같이 호출이 가능하다.
struct MyClass *m = myclass_new();
그리고 build시에는 특히 c빌드시(혹은 최종 link시에)
gcc main.c -lstdc++ 추가 필요....
참고 blog: http://ospace.tistory.com/215
아주 유용하게 쓰고 있는 자동접속 script.
전문가가 ssh_stdin 을 개발해 주셔서, 이를 이용해 쓰고 있다.
===================================자동접속 + 작업 SCIRPT ==============
#!/bin/sh
PASSWD="myPasswd!"
curDir=$(pwd)
SSH_STDIN=$curDir/ssh_stdin
sshOption="-T -o StrictHostKeyChecking=no -o ConnectTimeout=1 -o NumberOfPasswordPrompts=1"
SVR_LIST="172.25.49.135 172.25.49.136"
mpList=$(eval echo $SVR_LIST)
for i in $mpList
do
echo "---------"$i
echo $PASSWD | $SSH_STDIN ssh $sshOption "root@"$i "ps -ef|grep redis"
echo $PASSWD | $SSH_STDIN ssh $sshOption "root@"$i "nstatus"
#scp를 하고 싶을때는 .. -T옵션 빼고.. $1에 파일이름 줘서.. 아래처럼. 하면 된다.
echo $PASSWD | $SSH_STDIN scp $sshOption $1 "root@"$i":"$1
done
=============================ssh_stdin내용=================================
#!/bin/bash
if [ -n "$SSH_ASKPASS_PASSWORD" ]; then
cat <<< "$SSH_ASKPASS_PASSWORD"
elif [ $# -lt 1 ]; then
echo "Usage: echo password | $0 <ssh command line options>" >&2
exit 1
else
read SSH_ASKPASS_PASSWORD
export SSH_ASKPASS=$0
export SSH_ASKPASS_PASSWORD
[ "$DISPLAY" ] || export DISPLAY=dummydisplay:0
# use setsid to detach from tty
# exec setsid "$@" </dev/null
exec setsid "$@"
fi
<key event>
document.onkeydown=checkKey;
function checkKey(e){
if(e.keyCode=='37'){ //left Key, 38:up, 39:right, 40:down
alert('left');
}
}
클로져에 대해서 나름대로 정리해보면,
아래와 같은 함수에서 MyClass을 outter함수라고 부를때,
내부 함수 (gettitle)가 outter의 지역변수를 계속 사용할 수 있다는 개념.
(javascript의 initialize비용이 비싸므로, closure를 이용해서 inner함수 안에서 if(!undefined) define을 할 수 있다.)
==> Point: 외부함수가 종료된 이후에도 사용할 수 있다.
var that=this 로 해서, this도 많이 사용한다고 한다. 이렇게 안하면 this가 전역변수인 window를 나타낼 수 있기 때문...
function MyClass(_title){
var title=_title;
return{ //json스타일 객체를 return.
getTitle:function() { return title;},
}
}
g=MyClass('ggg');
m=MyClass('mmm');
alert(g.geTtitle()); //m.getTilte()도 잘 동작.
참조: devbox
1. Web, OSGI 를 설치한다. (for Web, install new software 에서)
참고사이트: http://fishbear.tistory.com/2
2. JSDT 를 설치. (for JS, eclipse marketplace 에서)
- jsdt for jQuery
- angularJS eclipse(0.10.0?)
- jsdt for ExtJS (1.7?)
속성 js Lib에서 jQuery등 추가하고..( ECMA, jQuery, ExtJS..)
$('head'). (점찍고 Ctrl+Enter로 확인)
HTML5는 javascript의 확장판이라고 볼 수 있다.
이 중에서 쓸만한 것들을 나열해보면
1.Geolocation
2.Web Storage
3.IndexedDB + Object Store
4.Application Cache
5.WebSocket
6.File API
7.Drag & Drop
그 외 5개+1는 천천히 알아보자
Server-Sent Event
Web Workers
WebGL
Selector API
Notifications API
Web SQL DataBase(2009년 중단된듯 )
1. Web에서 native 호출
webView.addJavascriptInterface ( new MyNativeAPI(), "MyNativeAPI");
class MyNativeAPI{
public String whoAmI() {
return "I am Yongary";
}
}
2. native에서 웹호출
webView.loadUrl("file://blabla"); //assets/www밑 파일
webView.loadUrl("http://blabla"); // shouldOverrideUrlLoading 함수를 override해서 폰 default브라우저로 연동하는게 좋음
webView.loadUrl("javascript:alert('I am from native')");
(그냥 android WebView를 이용해도 될 것 같은데.. 이부분은 좀 있다 확인하고..)
본 글은 andoid에서 phoneGap의 WebView를 추가하려면..
1. cordova.apache.org*을 다운받아서 android밑에 unzip
2. /framework/cordova-x.x.x.jar 를 만든다. ( framework에서 run ant jar 하면 됨)
3. .jar를 /libs 밑으로 복사
4. andoid 프로젝트에 /res/xml/main.xml 같은 layout 파일에 CordovaWebView 추가
5. andoid 소스에 CordovaInterface implements 구현.
6. Camera이용시에 setActivityResultCallback(CordovaPlugin .. ) 및 startActivityForResult(CordovaPlugin.. ) 추가
7. ThreadPool 추가. public ExecutorService getThreadPool() ==> plugins이 thread를 가지기 위함.
8. /assets/www 밑에 HTML들 복사
9. /framework/res/xml 밑에 있는 config.xml을 프로젝트의 /res/xml 밑으로 복사
위키kr : Scrum(애자일 개발 프로세스)
- 매일15분씩 회의. (어제한일, 오늘한일, 장애상황)
- 스프린트 (한 주기) 관리 ( 30일 +- 1~4주)
- Sprint backlog
다음 Sprint의 backlog도 미리 준비한다.
==========링크내용===================================
스크럼 마스터는, 일반적인 관리를 수행하는 프로젝트 관리자들과는 달리 팀원을 코칭하고 프로젝트의 문제 상황을 해결하는 역할을 하며, 제품 책임자는 스프린트 목표와 백로그등의 결정에 있어 중심이 되는 상위 관리자로, 제품 책임자가 독단적으로 목표를 결정하지 않고, 고객과 관리자 및 팀원들이 모여서 목표를 정한다.
이런 과정을 거친 뒤, 개발 팀원들이 주도적으로 스프린트 목표를 달성하기 위한 작업을 정해 나가게 된다. 보통, 각 작업들은 4시간에서 16시간 정도 걸리도록 정한다. 물론, 작업을 정하고 할당하는데는 고객이나 제품 책임자와는 상관 없이 팀원 자율로 진행된다. 이와 같은 자율적인 행위를 통해서 팀원들은 의사를 활발하게 주고 받게 되고, 끈끈한 협업체계를 가지게 된다.