반응형

우리가 소프트웨어 개발을 하다보면 오픈소스를 무심코 사용하게 되는 경우가 많다...

오픈 소스 말 그대로 오픈된 소스 이다. 하지만 라이센스까지 오픈된건 아니다...

즉 copyleft가 아니다.. 단지 더 많은 개발하는 사람들을 위해 더 유용하게 쓰였으면

하는 바램으로 소스 코드가 오픈 된 걸로 알고 있다...

이때 현재 진행 중인 프로젝트에서 오픈 소스가 얼마나 쓰였는지 알 수 있다면 더 좋지 않을까...

해서 나온 프로젝트가 있다고 한다.... 바로 Fossology이다.

Fossology는 역시나 오픈 소스 프로젝트이다... (HP에서 시작했다고 한다!~~)

그래서 이 Fossology를 이용해 보려고 노력을 했다...

의외로 쉽게 풀었다... (생각 보다 많은 시간이 걸렸지만 말이다.)

이 포스트에 관련된 정보를 남기려 한다..

필자는 집에 굴러다니고 있던 2003년도에 S사에서 나온 센스 노트북을 SVN 서버로 써볼까 해서

우분투 11.10을 설치해 둔 상태 이다...

해당 놋북 하드웨어 스펙은 다음과 같다
 -> CPU - Intel mobile P-4 2.0Ghz 싱글코어 
 -> RAM - 512MB 
 -> HDD - PATA 2.5인치 5400 rpm 80GB 
 -> 15인치 LCD(해상도 1024 x 768) 
 -> 특이사항 : 시디롬이 메롱한 상태이다. 그래도 돌아는 간다. 

설치는 구글링 해 본 결과 패키지 관리자로 설치하라고 하는 글이 많았다...

설치 관련 해서는 다음과 같은 주소의 글도 있다.(내용 복사 하면 저작권에 걸리기 때문에 링크를 공유한다)
http://www.oss.kr/?document_srl=41629&category=2522

이 방법은 ㅇㅇ? 좀 처럼 이해가 안 갔다.

결국 패키지 관리자를 이용 했다... 그러나 설치 되지 않았다....
(패키지 다운로드 받다가 못 받아 온다.)

그래서 찾은 방법...    

http://www.fossology.org/projects/fossology/wiki/Ubuntu_install_guide

fossology 프로젝트 위키의 우분투 인스톨 가이드 문서를 보고 따라 했다.

그럼 설치는 잘 된다.... 설치하면서 필요로 하는 것들도 같이 설치 된다.

그리고 난 다음 아파치 웹 서버 설정을 해야 한다.
-> 이 점을 알려주는 곳이 거의 없었다. 왜 설정 해야 하는지 묻는 사람도 못봤다.

이유는 다음과 같다 fossology 시스템은 웹사이트를 통해 파일이나 소스 리파지토리를 통해 

오픈 소스 라이센스를 검사한다. 설치만 했을 뿐 사용하기 위한 추가 작업이 필요 하다 

그래서 아파치 서버에 fossology 관련 경로를 지정해 주어야 이용이 가능하다.
 
관련하여 다음 사이트에서도 소개가 나와 있지만 이해를 못했었다
-> http://kldp.org/node/100937 
물론 아파치 설정 후에는 이해 했다.

설정 방법을 간단히 말하면 아파치 웹 서버에 fossology 서비스를 위한 php 파일 경로가
있는 디렉토리를 지정해 주고 아파치/DB/Fossology 각각의 서비스를 중지 -> 다시 시작하면

다음과 같이 서비스를 이용 할 수 있도록 화면을 볼 수 있다.


 

이 화면에서 fossy / fossy를 입력하면 다음과 같이 화면을 볼 수 있다.
(초기 아디/비번이 fossy/fossy 이다)


여기까지...!!!

테스트로 일반 hello world를 출력하는 c 언어 소스파일과 LGPL 라이센스가 있는 파일을 적용해 보았다.

테스트 결과 잡아 내긴 한다... 이로서 환경 설정은 끝...

관련하여 자세한 사용 법은 다음 주소를 통해 가이드 받을 수 있다.
http://www.fossology.org/projects/fossology/wiki/User_Documentation

오픈 소스관련해서 이용하고 참고 하는 건 좋지만 라이센스를 위반해 가며 쓰는 것 보다

이용한 만큼 배푸는 건 어떨까 싶다....

The End....
반응형
Posted by onlyTheOne
,
반응형

Cloud Computing관련 논문을 살펴 보았다.

1. 모바일 클라우드 컴퓨팅 기술 ( 2011년 10월 )
2. 클라우드 컴퓨팅 비즈니스 모델 개발을 위한 프레임워크 설계(2011년 03월, 이영호, 박지애)
3. 클라우드 컴퓨팅으로의 사용전환 결정요인에 관한 여구 : 구글 Docs 사례를 중심으로 (2011년 09월, 박상철, 권순재)


클라우드 컴퓨팅 관련 인터넷 자료
1. http://openmobster.googlecode.com/svn/wiki/content/app-developer-guide/html/concepts.html
2. http://www.rovio.com/en/careers/Open-positions/view/21/server-programmer-cloud-services
3. http://www.rackspace.com/cloud/cloud_hosting_products/servers/api/
4. http://ko.wikipedia.org/wiki/%EB%A6%AC%EC%B9%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98

DTCP
1. 컨텐츠 보호를 위한 DTCP용 타원곡선 암호(ECC) 연산기의 구현

DLNA
1. 동적 사설 IP 기반의 다중 홈간 DLNA 미디어 컨텐츠 공유.

Link Protection
1. 메트로 이더넷 망에서 링크 보호 기술 연구.

반응형
Posted by onlyTheOne
,

DLNA 정리...

카테고리 없음 2012. 2. 26. 00:28
반응형

DLNA 는... Digital Living Network Alliance 의 줄임말.

-> 홈 네트워크 상에서 여러 디바이스간의 멀티미디어 데이터를 공유하는 것과 관련된 컨소시엄 또는 그 기술을 뜻함.

컨소시엄 주소는
http://www.dlna.org

기존의 UPNP 기술을 확장 하는 형식으로 제안된 기술 규약

관련하여 정보를 많이 정리를 해주신 고니다님의 블로그 포스트 주소 하나 남겨 둡니다.
http://blog.naver.com/bit4rain/40149727745
반응형
Posted by onlyTheOne
,
반응형

며칠전에 이어 계속 진행하려 한다. 혹시나 일이 생길지 몰라

글은 최대한 나누어 쓰려 한다.

사실 이게 자바로 분류 하고 있긴 한데 네트워크에 더 가깝다...

오늘 스터디 범위는 Routing Information Protocol의 Spec이다.

rfc1058 문서 를 검토해 보려고 한다.

주소는 다음과 같다
http://www.rfc-editor.org/rfc/rfc1058.txt


ㅇㄹㄹ
반응형
Posted by onlyTheOne
,
반응형

필자는 몇년전 학부 텀 프로젝트 과제로

라우팅 시뮬레이터를 구현 하기로 했었었다...

이때 만들다 말았다... 이제 새로 시작하는 마음으로

다시 시작 하려 한다...

(주의 사항 : 아래 내용이 아직 100% 맞는건 아니다.. 혹시나 잘못된 정보 일 경우 수정 할 수 도 있다)

그 첫번째...  RIP 관련 사항... 에 대해 이야기 해볼려고 한다.

RIP 란 무엇일까?
-> 위키 백과와 네이버 지식사전을 보면 Routing Information Protocol, UCP/IP(? TCP와 UDP는들어 봤는데 
    UCP는 먼지 모르겠다)상에서 동작하는 라우팅 규약 이다.
-> 경유할 가능성이 있는 라우터를 Hop 수로 수치화 하여, Distance Vector Algorithm(DVA)라는 알고리즘으로
    인접 호스트와의 경로를 동적으로 교환하는 일이다.
-> 현재 버전은 2가지가 있으며 버전 1은 Internet과 Intranet에서 이용되고 있다. 버전 2는 CIDR에 대응 할 수 있도록
    기능이 확장 되어 있다. 모두 LAN에 이용되는 경우가 많다. 
    => 참고자료 : http://terms.naver.com/entry.nhn?docId=849600 /  http://ko.wikipedia.org/wiki/%EB%9D%BC%EC%9A%B0%ED%8C%85_%EC%9D%B8%ED%8F%AC%EB%A9%94%EC%9D%B4%EC%85%98_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

- RIP에 이용되는 알고리즘은 Bellman-Ford algorithm 이다.
 -> 관련 링크 : http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm

- 자바로 RIP 시뮬레이터 돌리는 곳이 있다...
 -> 관련 링크 : http://pi4.informatik.uni-mannheim.de/pi4.data/content/animations/ripdvmrp/index.html

- 프린스턴 대학에 나온 정보
 -> http://algs4.cs.princeton.edu/44sp/

To be continue ... (보다 더 정리 하여 업데이트 하겠다..)
반응형
Posted by onlyTheOne
,
반응형
오늘은 iOS 5에서 단말 디버깅


즉 브레이크 포인트가 안걸리는 상황에

대한 대처 방법에 대해서 적어 보려고 한다.

내가 성공한 방법이며 다른 분들이 동일 상황에서 될지는

보증 할 수 없다.... (이 방법으로 3명의 이슈를 수정했다.)

자세한 내용은 오늘 중으로 정리되서 올라갈 예정이...다
반응형
Posted by onlyTheOne
,
반응형

요즘 참여 중인 프로젝트에서 화면 rotation 처리 문제로

머리 아파 하시는 분이 계시다...

찾 던 중 발견한게 [UIDevice setOrientation:] 을 쓰는것..

이건...Reject 대상이다... 히든 API를 이용하는거 자체가 Reject임을 애플은 밝히고 있다.  

가끔 리뷰어에게 안걸려서 통과 되는 경우가 있는데 안걸리면 좋은거지만 걸리면 피곤해지는 것이다.

그러니 꼭 View를 돌리거나 아니면 모든 ViewController에서

공용으로 처리 할 수 있도록 ViewController를 상속받은 클래스를 하나 만들어 두고

그 클래스를 기존에 ViewController를 상속받아 구현 중인 클래스에 상속 클래스를

교체 해서 써야 하는게 나아 보인다....

그러니 히든 API는 꼭 피하거나 해당 기능을 하는 함수를 만들어 쓰는 것이 바람직 하다.


반응형
Posted by onlyTheOne
,
반응형
이글은 제가 운영했던 네이버 블로그에 2009년 02월 22일에 게제되었던 글입니다.

오랜만에 Apache POI 라이브러리를 공부중이다.

 

그중 첫번째로 MS Excel에서 만든 파일의 데이타를 불러오는 것이다.

 

아래 소스는 특정 파일에서 모든 데이타를 numeric, string, fomula, null 로 구분 값을 찍는 소스이다...

 

주석은 없으니.... 알아서 살펴 보길 바라며

 

여기서 사용한 라이브러리는 "poi-bin-3.2-FINAL-20081019.tar.gz" 에 있는 jar파일 3개를 썼습니다.

 

이 소스에 대한 저작권은 저에게 있으며 저작권자의 허가 없이 상업적 용도로 사용시 저작권 침해로 소송을 걸수 있으니

 

상업적 이용에 대한 제한을 걸어둡니다. (단, 정보 습득과 자기 계발, 공부를 위한 사용이라면 누구나  소스 사용 가능 합니다.)

 

--- 소스내용 ----

import org.apache.poi.hssf.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.*;

 

public class TestFrame {
 public TestFrame() {
  
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println("Main start");
  TestFrame test = new TestFrame();
  test.process();
 }

 
 private void process() {
  try {
  
   POIFSFileSystem fs =
    new POIFSFileSystem(new FileInputStream("d://workbook.xls"));
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);
    int maxlow = sheet.getLastRowNum();
    System.out.println("max_row is " + maxlow);
  
    HSSFCell cell = null;
    HSSFRow row = null;
    
    for(int i=0; i<maxlow+1; i++) {
     row = sheet.getRow(i);
     int last_cell = 0;
     try {
      last_cell = row.getLastCellNum();
      System.out.println("last_cell is " + last_cell);
     } catch(NullPointerException nex) {
      
     }
     
     for(int j=0; j<last_cell; j++) {
      cell = row.getCell(j);
      int other = cell.getCellType();
      switch(other) {
       case HSSFCell.CELL_TYPE_BLANK : {
        System.out.print("  ");
       } break;
       
       case HSSFCell.CELL_TYPE_FORMULA : {
        System.out.print(cell.getCellFormula());
       } break;
       
       case HSSFCell.CELL_TYPE_NUMERIC : {
        System.out.print(cell.getNumericCellValue());
       } break;
       
       case HSSFCell.CELL_TYPE_STRING : {
        System.out.print(cell.getStringCellValue());
       } break;
      }
      System.out.print(" ");
     }
     System.out.println("");
    }
    
    System.out.println("5step");
    
    
  } catch(Exception ex) {
   ex.printStackTrace();
   
  }
 }


반응형
Posted by onlyTheOne
,
반응형
글쓰다가 키보드 배치가 달라서 날려 먹고 다시 쓴다. (이래서 키보드는 맥용 키보드만 써야 하나 보다 ....

iOS 앱을 단말 즉 아이폰 또는 아이패드(이하 아이팟 터치)에 올리고 테스트 하거나 앱스토어 배포 하고 나면

크래쉬 로그를 입수 하게 될 것이다.

여기서 크래쉬 로그란.... (모르는 분을 위해서)
-> 앱이 죽을때 내가 무얼 하다 죽었다 라고 유언장 같은 걸 남긴다 이게 바로 크래쉬 로그 이다.

이 크래쉬 로그를 열어 보면 메모리 주소랑 이것저것 만 보여진다.

아무것도 알 수 없다. 이때 dSYM 파일이라 불리우는 심볼릭 관련 파일을 통해

앱의 유언장을 앱 개발자가 알아 볼 수 있게 된다.

여기서 잠깐 dSYM이 어디있나요?(라고 물어 보시는 분이 있을거 같아 남긴다.)
-> dSYM은 디바이스 빌드하여 나온 결과물 *.app 파일과 같은 폴더내에 존재 한다.
이 dSYM 파일은 빌드시마다 바뀌니 배포나 테스트 목적으로 .app 파일을 만들 경우
dSYM 파일도 같이 복사하여 사본을 만들어서 따로 저장해야 한다.

다음으로 할 것은 다음과 같다.

dSYM이 존재한다면 crash 로그를 xcode의 organizer 를 통해 확인을 할 수 있다.

통상 이렇게 보여진다.
출처 : http://stackoverflow.com/questions/6086201/need-help-about-ios-crash-log
Date/Time:       2011-05-22 11:28:40.514 +0700
OS
Version:      iPhone OS 4.3.3 (8J2)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xf039cde6
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x32da1c98 objc_msgSend + 16
1   iPORTALs                        0x000801a0 0x1000 + 520608
2   iPORTALs                        0x00080930 0x1000 + 522544
3   iPORTALs                        0x0006eb0a 0x1000 + 449290

자 여기서 APP은 iPORTALs 라는 앱이다.  0xOOOOOO~ 이렇게 보이는게 메모리 주소다
dSYM을 통해 심볼릭이 된다면 저 구간이 소스파일의 어디 함수 인지 보여준다.

그러나 안보일때가 있다 이때는 다음과 같은 방법을 써야 한다.

위와 같이 crash 로그 파일을 열어 두고

app파일이 있는 디렉토리 경로로 터미널을 이용해서 접근한다. (설마 리눅스 또는 유닉스를 안써본건 아니시죠? ^^:)

접근하고 다음과 같은 명령어를 입력 하면

크래쉬 로그의 모든 내용이 심볼릭 된 결과는 아니지만

최소한의 심볼릭 된 결과를 볼 수 있다.

명령어는 다음과 같다
atos -arch arm7 -o "App명.app/App명" 메모리주소(0xOOOOOOO?)

을 입력하면 해당 메모리의 소스 파일 및 메소드 명을 알아 낼 수 있다.

정확도는.... 내가 테스트 한거 기준으로는 꽤 높았다. (죽는 케이스도 몇 번 잡았다.)

끝~
반응형
Posted by onlyTheOne
,
반응형
본글은 2007년 01월 07일에 네이버 블로그(본인 운영) 에 포스팅 한 글입니다.

지식인에 Button을 마우스 드래그 할때 마우스 따라 움직이게 하는 방법에 대해서

 

제가 올린 답변입니다. 질문자가 요청 한 만큼은 처리 못했네요...

 

내공 향상을 위해 오늘도 열공중입니다....

 

아래 소스 한번 참고 해 보세요.~~

 

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestButton extends JFrame {
 
  JPanel pan = new JPanel(); // 이벤트 등록용 패널

  // AWT의 Button으로도 가능
  JButton bu = new JButton("버튼");

  // 버튼의 기본 좌표용 변수
  int x = 10;
  int y = 10;
  int width = 80;
  int height = 20;
 
  // 버튼의 움직임 여부 결정용 변수
  boolean moves = false;
 
 
  public TestButton(){ // 생성자 디자인 및 이벤트 설정
    this.getContentPane().setLayout(new BorderLayout());
    pan.setLayout(null);
    bu.setBounds(x,y,width,height);
    pan.add(bu);
    this.getContentPane().add("Center", pan); 
    this.setSize(600,400);
    this.setVisible(true);
    bu.setFocusable(false);
   
    // 마우스 버튼을 놓았을경우 이동 가능 여부 false로 돌림
    pan.addMouseListener(new MouseAdapter() {
     public void mouseReleased(MouseEvent ev) {
      moves = false;
     }
    });
   
    // 배경 JPanel에 MouseMotionListener를 등록시켜 Drag때 처리하도록 함...
    pan.addMouseMotionListener(new MouseMotionAdapter() {
     public void mouseDragged(MouseEvent ev) {
      int tem_x = ev.getX(); // 이벤트 발생 좌표값중 x값 추출
      int tem_y = ev.getY(); // 이벤트 발생 좌표값중 y값 추출..

   
      /*System.out.println("버튼의 좌표 : " + bu.getX() + ", " + bu.getY());
      *System.out.println("버튼의 영역 : " + (bu.getX()+bu.getWidth()) + "," +
       * (bu.getY() + bu.getHeight()));
      *System.out.println("이벤트발생위치 : " + ev.getX() + ", " + ev.getY());
      * 버튼의 영역 안에 있으면 true로 설정...
     */

     if((tem_x >= bu.getX()) && (tem_x <= (bu.getX() + bu.getWidth()))) {
       
       if((tem_y > bu.getY()) && (tem_y <= (bu.getY() + bu.getHeight()))) {
        moves = true;
       }
      }
      // 마우스 포인터가 버튼 영역 안 여부 판단 후 버튼 위치 재지정...
      if(moves) {       
       bu.setBounds(tem_x-(width/2), tem_y-(height/2), width, height);
       
      }
     }
    });
  }
 
  public static void main(String [] args) {
    TestButton tb = new TestButton();
  }
}


반응형
Posted by onlyTheOne
,