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

  1. 2015.07.29 angular, http로 json가져오기.
  2. 2015.07.27 scala 동기화 에러 방지 예제
  3. 2015.07.22 scala 문법 요약
  4. 2015.07.20 java 7 nio2 + etc
  5. 2015.07.20 java 8 오픈
  6. 2015.07.18 Functional Programming How?
  7. 2015.07.10 특징
  8. 2015.06.29 node.js http/udp Server&client
  9. 2015.06.24 EOP
  10. 2015.06.16 SPA (single page application)
  11. 2015.06.11 keepAlive 스크립트
  12. 2015.06.09 vrrp 및 ping -b가 안될때
  13. 2015.06.08 Scala 특징
  14. 2015.06.03 디폴트 Xmx Xms 확인
  15. 2015.06.02 Service onStartCommand
  16. 2015.06.01 GC
  17. 2015.05.20 USIM
  18. 2015.05.20 PuID, PrID
  19. 2015.05.20 HSS
  20. 2015.05.20 커널 upgrade
  21. 2015.05.14 HP의 ILO
  22. 2015.05.06 Call Transfer종류 & Replaces
  23. 2015.04.30 Strict Route vs Loose Route
  24. 2015.04.30 hold flow & bearer open & field정리
  25. 2015.04.22 lsof
  26. 2015.04.22 XPath : 간단히 XML 파싱.
  27. 2015.04.22 java REGEX (regular expression)
  28. 2015.04.17 va_list 가변파라미터
  29. 2015.04.16 라우팅 설정.
  30. 2015.04.14 pthread





Curran의 20번 exam:

- $http 서비스를 이용해 json을 웹으로 가져오기.

<html ng-app="countryApp">

<head>

<meta charset="utf-8">
<title>Angular.js Example</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.min.js"></script>
<script>
var countryApp = angular.module('countryApp', []);
countryApp.controller('CountryCtrl', function ($scope, $http){

$http.get('countries.json').success(function(data) {

$scope.countries = data;
});
});
</script>
</head>
<body ng-controller="CountryCtrl">
<table>
<tr>
<th>Country</th>
<th>Population</th>
</tr>
<tr ng-repeat="country in countries">
<td>{{country.name}}</td>
<td>{{country.population}}</td>
</tr>
</table>
</body>
</html>


Posted by yongary
,

전통적인 consumer/supplier 예제를 간단히 변형해서

2개의 은행에서 각자 고객 수자를 관리하다가

전체 고객의 합을 구하는 형태를 문제가 있게 OLD한 방법으로 일부러 작성해보면 다음과 같다.

 

 

///////////////////////////////////////////////////////////////

class Bank {
var numKid:Int = 0
var numAdult:Int = 0
var numAged:Int = 0

def addNum (k:Int,a:Int,g:Int) = {
numKid += k
numAdult += a
numAged += g
Main.totalKid += numKid //no need on FP
Main.totalAdult += numAdult
Main.totalAged += numAged
}

}

////global FOR: Bank Sum total : OLD ///////////////
var totalAll:Int = 0 //NO NEED on FP
var totalKid:Int = 0
var totalAdult:Int = 0
var totalAged:Int = 0

 

// main
def main(args:Array[String]) = {


//// Bank Sum total :OLD ///////////////
val actorBank1 = actor {
val bank1 = new Bank
while (true) {
bank1.addNum(0, 1, 0)
Thread.sleep(10)
}
}

val actorBank2 = actor {
val bank2 = new Bank
while (true) {
bank2.addNum(2, 2, 1)
Thread.sleep(10)
}
}

//WHEN WANT TO PRINT
while (true) {
//SUM
Main.totalAll = Main.totalKid + Main.totalAdult + Main.totalAged //SUM

//NO MATCH?
if( totalAll != (totalKid+totalAdult+totalAged))
println("total:" + totalAll + ", Kid:" + totalKid + ", Adult:" + totalAdult + ", Aged:" + totalAged)

Thread.sleep(20)
}

 

 

 

이게 돌다보면 totalALL합이 맞지 않는 경우가 자주발생하도록 한 코드인데..

FP 스타일로 바꿔보면 다음과 같다.

 

 

 

================================> FP Style 로 전환

 

 

1. 가능하면 tuple을 이용

2. 전체적인 합 같은 totalAll 같은 변수를 아예 없앤다.

(그 외에 좀 더 sum2Bank같은 함수를 sum리턴안하게 좀 하고 싶은데.. 연구 중.)

 


class Bank {
var numKAG = (0,0,0)

def addNum (k:Int,a:Int,g:Int):Unit = {
numKAG = (numKAG._1 + k, numKAG._2 + a, numKAG._3 + g)
}
}

def sum2Bank (b1:Tuple3[Int,Int,Int], b2:Tuple3[Int,Int,Int] ) = {
val sum = ( b1._1 + b2._1, b1._2 + b2._2, b1._3 + b2._3 )
sum
}

def main(args:Array[String]) = {

//// Bank Sum total :OLD ///////////////
val bank1 = new Bank
val bank2 = new Bank

val actorBank1 = actor {
while (true) {
bank1.addNum(0, 1, 0)
Thread.sleep(10)
}
}

val actorBank2 = actor {
while (true) {
bank2.addNum(2, 2, 1)
Thread.sleep(10)
}
}


//WHEN WANT TO PRINT
while (true) {
//SUM
val sum = sum2Bank(bank1.numKAG, bank2.numKAG)
val totalAll = sum._1 + sum._2 + sum._3

//Always MATCH cause there is no toalALL variable
if( totalAll != (sum._1 + sum._2 + sum._3))
println("total:" + totalAll + ", Kid:" + sum._1)


Thread.sleep(20)
}


}

 

 


 


Posted by yongary
,

scala 문법 요약

scala 2015. 7. 22. 18:22

참고사이트:

 

var (x,y,z) = (1,2,3)    //튜플 선언

(1 to 5).map( 2 * )     // Vector(2,4,6,8,10)임.   2 * _ 에서 마지막에 _은 생략 가능    

import java.util.Date    //java도 import 해서 사용가능

1 :: List(2,3)             // List(1,2,3) 과 동일  연결연산자cons

 

(1 to 5)         // Range(1, 2, 3, 4, 5)

(1 until 6)       // Range(1, 2, 3, 4, 5)

(1 to 10 by 2)  // Range(1, 3, 5, 7, 9)

 

_ > 4             // v => v > 4 와 같은 predicate 임.

 

 

Posted by yongary
,

java 7 nio2 + etc

java core 2015. 7. 20. 10:56

nio2  참고사이트:  copy, move, readAllLines, Files.walkFileTree(Path, FileVisitor<T> ),  WatchService,

 

기타7 문법 참고사이트

 

1. try-with-resource,  

File nFile=new File("abc.txt");
try ( InputStream in = new FileInputStream(nFile) ){



}catch (Exception e){



}

2. String in case, 

 case "abc":

 

 

 

그 외 될 뻔하다가 적용 안된 거.

     A.(multi) catch (|), 

    B. ?(return null when null).

     C.멀티Collection생성자, //ex: new ArrayList {"one", "two", "three"}; => 1.8에서도 안 됨.

Posted by yongary
,

java 8 오픈

java8~ 2015. 7. 20. 10:03

java 5와 java8은 major release이다.

java 5에서  generic, concurrent, annotation, JMX, enum, boxing/unboxing, static import  등의 기능이  update되었다면

 

 

java8에서의 핵심update는 FP 이다. 참고사이트

 

  

 

 

1. <java.uitl.function 에 추가된 함수형 인터페이스>

  • Function <T, R> - T를 입력으로 R을 출력으로 반환
  • Predicate <T> - T를 입력으로 boolean을 출력으로 반환
  • Consumer <T> - T를 입력으로 아무것도 반환하지 않는다
  • Supplier <T> - 입력을 취하지 않고 T를 반환
  • BinaryOperator <T> - 2 개의 T를 입력으로 하나의 T를 출력으로 반환 
    => c++의 unary operator override수준이 아니라서 별로 쓸일 없어 보이지만..
    minBy, maxBy는 사용하면 stream구문 없이 사용할 수 있어서 편할 듯 함.
    REF

 

 

2. <java.util.stream>

 - 배열,리스트,맵 등 Collection을 stream으로 다룰 수 있게 된다.

 

 

그리고

 -interface에 abstract method뿐 아니라 body추가.

 -OOM을 많이 유발하단 PermGen 이 사라짐. 

 - Date변환법이 좀 추가:   LocalDateTime Duration이 쓰기 좋겠네요.  REF-SITE

Posted by yongary
,

Functional Programming How?

scala 2015. 7. 18. 11:27

<FP 기법>

1. carry Over  :  tail recursive 처럼 결과값을 계속 넘기는 방식. (carry Over: 그냥 영어임.)  

2. predicate : 함수는 f()로 표현. Boolean을 리턴하는 함수는 predicate 이라고 부름.
       (이것도 scala에선 그냥 영어임. java엔 Predicate존재) 

=> p()를 이용해  함수 input  param들을 필터처럼 거를 수 있음

 

 

<FP기법 예제 - 1.carryOver>


object Main{

  def total(list: List[Int]) = { //기존 sum함수
    var sum = 0
    for (i <- list) { sum += i }
    sum
  }

  def totalFP(list:List[Int]) = { //부분합을 계속 넘기면서 합을 해나가는 방식.  foldLeft함수가 첫번째 param으로 carryOver로 계속 받아 주면서 iterate를 제공.
    list.foldLeft(0) { (carryOver,v) => carryOver + v }
  }

  def main(args:Array[String]) = {
    println(totalFP(List(1,2,3,4,5)))
  }
}

 

 

<FP기법 예제 - 2.Predicate>

def totalFP(list:List[Int] , p:Int => Boolean) = {
list.foldLeft(0) { (carryOver,v) => if (p(v)) carryOver + v else carryOver }
}

def main(args:Array[String]) = {
println(totalFP(List(1,2,3,4,5),{ v => v % 2 == 0 })) //짝수인 2,4 만 적용되서 합이 6 이 나옴.
}

추가적으로 v => v > 4 같은 predicate은 _ > 4 로 표시 가능

 

 

그리고 아래 3가지들이 scala에서 좀 특별하다.

trait -  java의 Interface와 비슷하지만, class특성도 지님.

   <trait특성 >

     - extends 로도 with 로도 사용가능하다. 심지어는 구현body가 존재해도 된다.

     - with의 경우에는 여러가지 trait가 사용가능하며, with A, with B의 경우 B가 먼저 적용된다.

     - override abstract라는 키워드를 사용하여 기존 def를 추상화하여 사용할 수도 있다.

     - Class 가 아니고 인스턴스에도 사용가능 : with Friends

 

xml - xml이 1등급 고객임. "" 필요없음

actor - thread + 큐 : 수천개의 actor를 만들어도 된다


자세한 건 여기클릭: hillarious indian guy

 

 

Posted by yongary
,

특징

angular.js 2015. 7. 10. 10:50

참고사이트:

 

 

1. html tag에 ng-app 표시.

 

<html ng-app>  

 

 

2. script 소스 삽입

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js">
 </script>

 

여기에 있는 콜백이 html이 모두 로드된 후에, 브라우저로부터 호출되면

앵규러는 ng-app 지시어를 찾게 된다. 찾게되면 DOM의 최상위에 부트스트랩을 건다.

 

단계적으로 보면,

A.dependency injection을 위한 인젝터들이 생성되고

B. 인젝터는 root-scope를 생성하고

C. ng-app의 루토요소를 시작점으로 삼아 하위요소들을 컴파일한다.

 

 

 

3. ng 기본 문법 : 참고사이트Curran  (10번 exam)

<html ng-app> <head> <meta charset="utf-8">

<title>Angular.js Example</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.min.js"></script>
<script>
function NameCtrl($scope){
$scope.firstName = 'John';
$scope.lastName = 'Smith';
}
</script>
</head>
<body ng-controller="NameCtrl">
First name:<input ng-model="firstName" type="text"/>
Last name:<input ng-model="lastName" type="text"/>
Hello {{firstName}} {{lastName}}
</body>
</html>


4. ng-repeat 예제 

<script>

functin phoneListControler($scope)

{

$scope.phones=[

{"name":"Gal5",

  "num":"010-2222-3333"

},

]

}

</script>

<body ng-controller="phonListController">

<div ng-repeat="phone in phones">

   <p >이름: {{phone.name}} </p>

</div>

Posted by yongary
,

Click:초보자안내사이트들

 

<설치방법:install>

1. node-xx.linux-x86.tar.gz 바이너리파일 다운로드   http://nodejs.org/download 

2. 압축풀고 README파일 참조. path와 lib path만 설정하면 될 듯한데.

# ln -s /usr/local/nodejs/v0.x.x/bin/node /usr/local/bin/node

 

 

 

<실행방법>

$> node httpSvr.js


<모듈 설치방법>

$ npm intall -g blabla   (-g 안하려면.. httpSvr.js가 있는 곳에서 실행해야 그 밑에 node_modules 폴더가 생기면서 설치됨)



==httpSvr.js=====

==> express모듈을 사용하면 웹서버가 더 쉬워짐:  참고사이트

var http = require('http');

var server = http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type' : 'text/plain' });
  res.end('Hello World');
});

server.listen(8000);



===udpSvr.js===========================================================

var PORT = 33333;

var HOST = '127.0.0.1';


var dgram = require('dgram');

var server = dgram.createSocket('udp4');


server.on('listening', function () {

    var address = server.address();

    console.log('UDP Server listening on ' + address.address + ":" + address.port);

});


server.on('message', function (message, remote) {

    console.log('Svr Log:'+remote.address + ':' + remote.port +' - ' + message);


});


server.bind(PORT, HOST);





==udpClient.js==========================================

var PORT = 33333;

var HOST = '127.0.0.1';


var dgram = require('dgram');

var message = new Buffer('My KungFu is Good!');


var client = dgram.createSocket('udp4');

client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {

    if (err) throw err;

    console.log('UDP message sent to ' + HOST +':'+ PORT);

    client.close();

});




==========packet분석 with cap===================


Posted by yongary
,

EOP

scala 2015. 6. 24. 08:59

scala로 EOP (Expression Oriented Programming)을 하기에 좋다.

 

 

http://alvinalexander.com/scala/best-practice-think-expression-oriented-programming-eop 

Posted by yongary
,

SPA를 위한 여러가지 framework들이 있지만, framework없이 간단한 library로만

js SPA를 구현하는 방법이 있다.

 

http://tutorialzine.com/2015/02/single-page-app-without-a-framework/ 

 

 

 handlebars.js 를 사용한다.

 

Posted by yongary
,

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

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

 

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

아래와 같은 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
,