'All Category'에 해당되는 글 502건

  1. 2015.06.11 keepAlive 스크립트
  2. 2015.06.09 vrrp 및 ping -b가 안될때
  3. 2015.06.08 Scala 특징
  4. 2015.06.03 디폴트 Xmx Xms 확인
  5. 2015.06.02 Service onStartCommand
  6. 2015.06.01 GC
  7. 2015.05.20 USIM
  8. 2015.05.20 PuID, PrID
  9. 2015.05.20 HSS
  10. 2015.05.20 커널 upgrade
  11. 2015.05.14 HP의 ILO
  12. 2015.05.06 Call Transfer종류 & Replaces
  13. 2015.04.30 Strict Route vs Loose Route
  14. 2015.04.30 hold flow & bearer open & field정리
  15. 2015.04.22 lsof
  16. 2015.04.22 XPath : 간단히 XML 파싱.
  17. 2015.04.22 java REGEX (regular expression)
  18. 2015.04.17 va_list 가변파라미터
  19. 2015.04.16 라우팅 설정.
  20. 2015.04.14 pthread
  21. 2015.04.14 gethostbyname
  22. 2015.04.13 c에서 c++파일 하나 불러쓰기
  23. 2015.04.09 원격 자동접속 shell script 및 SCP 1
  24. 2015.04.02 key
  25. 2015.04.02 closure
  26. 2015.04.01 eclipse js 환경
  27. 2015.03.31 HTML5
  28. 2015.03.30 native <-> web페이지간 연결
  29. 2015.03.30 android + phoneGap
  30. 2015.03.27 Scrum

간혹 네트웍이  몇초간 접속 안하면

세션이 끊어지도록 구축된 경우가 있다.

 

이런 경우 네트웍이 끊어지지 않도록 계속 연결을 물고 있으면 편하므로

아래와 같은 sell script를 만들어 연결을 유지하곤 한다.

 

#!/bin/sh

while sleep 2; do
telnet server_ip server_port << EOF
quit   (서버에서 결종료 명령어.. 없으면 안써도 될듯)
EOF
done

Posted by yongary
,

vrrp가 A/B 서버간에 메시지를 broadcating하는데

근래 OS들이 이 broadcast들을 default로는 막는 경우가 존재한다.

 

조치:

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Posted by yongary
,

Scala 특징

scala 2015. 6. 8. 15:52

<<

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 

Posted by yongary
,

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

Posted by yongary
,

Service onStartCommand

Android 2015. 6. 2. 09:12

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를 쓰면 된다. (자동 재구동)

 

 

참고사이트:

 


START_STICKY : Service가 강제 종료되었을 경우 시스템이 다시 Service를 재시작 시켜 주지만 intent 값을 null로 초기화 시켜서 재시작 합니다.

Service 실행시 startService(Intent service) 메서드를 호출 하는데 onStartCommand(Intent intent, int flags, int startId) 메서드에 intent로 value를 넘겨 줄 수 있습니다. 기존에 intent에 value값이 설정이 되있다고 하더라도 Service 재시작시 intent 값이 null로 초기화 되서 재시작 됩니다.

START_NOT_STICKY : 이 Flag를 리턴해 주시면, 강제로 종료 된 Service가 재시작 하지 않습니다. 시스템에 의해 강제 종료되어도 괸찮은 작업을 진행 할 때 사용해 주시면 됩니다.

START_REDELIVER_INTENT : START_STICKY와 마찬가지로 Service가 종료 되었을 경우 시스템이 다시 Service를 재시작 시켜 주지만 intent 값을 그대로 유지 시켜 줍니다. startService() 메서드 호출시 Intent value값을 사용한 경우라면 해당 Flag를 사용해서 리턴값을 설정해 주면 됩니다

 

Posted by yongary
,

GC

java core 2015. 6. 1. 11:39

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페이지

Posted by yongary
,

USIM

IMS 2015. 5. 20. 10:54

USIM = SIM + UICC

 

참고사이트

Posted by yongary
,

PuID, PrID

IMS 2015. 5. 20. 09:45

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  /

 

와 같은 형태로   다대다 매핑이 가능하다.

Posted by yongary
,

HSS

IMS 2015. 5. 20. 09:28

 

 

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: 부가서비스만 별도로 빼서 작게 관리하기도 함.

 

 

 

참고 사이트:


Posted by yongary
,

커널 upgrade

Linux 2015. 5. 20. 09:02

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없이 설치 가능.

 

 

참고 사이트:

Posted by yongary
,

HP의 ILO

Linux 2015. 5. 14. 16:36

서버가 접속이 안될 경우를 대비해

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 가 존재한다.

 

 

User_Guide는 여기클릭

 

Posted by yongary
,

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

 

Posted by yongary
,

Strict Route vs Loose Route

IMS 2015. 4. 30. 17:20

<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 유지하기에는 오버헤드가 큼)

  

Posted by yongary
,

<통화 중 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 필요)


Posted by yongary
,

lsof

Linux/Linux:sh개발 2015. 4. 22. 22:54

list of Open File.  특정파일을 access하고 있는 프로세서들을 나열한다.


예)

$lsof mylogfile


$lsof /proc

Posted by yongary
,

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);

Posted by yongary
,

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



Regex정리 사이트


표현식

 설명 

 ^

 문자열의 시작

 문자열의 종료

 .

 임의의 한 문자 (문자의 종류 가리지 않음)

 단, \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

 앞 문자가 하나 이상

 앞 문자가 없거나 하나있음

 []

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를      나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 {}

 횟수 또는 범위를 나타낸다.

 ()

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음


Posted by yongary
,

가변 파라미터를 받아서 사용하는 방법: (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 

}   


Posted by yongary
,

라우팅 설정.

Linux 2015. 4. 16. 16:29

 

 

리눅스에서 실제 라우팅이 되는지 체크하는 명령어는

$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

Posted by yongary
,

pthread

Linux/Linux:c개발 2015. 4. 14. 11:28

참조: 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); //자원해제 



Posted by yongary
,

gethostbyname

Linux/Linux:c개발 2015. 4. 14. 09:46

<함수 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)을 리턴하는 경우. 약간문제가 될때도 있으나 거의 괜찮음.




Posted by yongary
,

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 

Posted by yongary
,

아주 유용하게 쓰고 있는 자동접속 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

Posted by yongary
,

key

javascript 2015. 4. 2. 23:07

<key event>

document.onkeydown=checkKey;

function checkKey(e){

  if(e.keyCode=='37'){  //left Key, 38:up, 39:right, 40:down

     alert('left');

  }

}



Posted by yongary
,

closure

javascript 2015. 4. 2. 09:39

클로져에 대해서 나름대로 정리해보면,

아래와 같은 함수에서 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

      Nonblock

Posted by yongary
,

eclipse js 환경

javascript 2015. 4. 1. 08:31

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로 확인)

Posted by yongary
,

HTML5

javascript 2015. 3. 31. 14:55

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년 중단된듯 )





Posted by yongary
,

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')");

  

Posted by yongary
,

android + phoneGap

phoneGap 2015. 3. 30. 09:42

(그냥 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 밑으로 복사 



원본 링크




Posted by yongary
,

Scrum

IT 2015. 3. 27. 17:21


위키kr :  Scrum(애자일 개발 프로세스)


- 매일15분씩 회의. (어제한일, 오늘한일, 장애상황)


- 스프린트 (한 주기) 관리  ( 30일 +- 1~4주)


- Sprint backlog

  다음 Sprint의 backlog도 미리 준비한다.



==========링크내용===================================

제품 책임자(Product Owner) 
제품 백 로그를 정의하여 우선순위를 정해 준다.

스크럼 마스터(ScrumMaster) 
프로젝트 관리자(코치)

스크럼 마스터는, 일반적인 관리를 수행하는 프로젝트 관리자들과는 달리 팀원을 코칭하고 프로젝트의 문제 상황을 해결하는 역할을 하며, 제품 책임자는 스프린트 목표와 백로그등의 결정에 있어 중심이 되는 상위 관리자로, 제품 책임자가 독단적으로 목표를 결정하지 않고, 고객과 관리자 및 팀원들이 모여서 목표를 정한다.

이런 과정을 거친 뒤, 개발 팀원들이 주도적으로 스프린트 목표를 달성하기 위한 작업을 정해 나가게 된다. 보통, 각 작업들은 4시간에서 16시간 정도 걸리도록 정한다. 물론, 작업을 정하고 할당하는데는 고객이나 제품 책임자와는 상관 없이 팀원 자율로 진행된다. 이와 같은 자율적인 행위를 통해서 팀원들은 의사를 활발하게 주고 받게 되고, 끈끈한 협업체계를 가지게 된다.

Posted by yongary
,