'전체 글'에 해당되는 글 171건

  1. 2007.12.07 [소개] 무료 UML도구 StartUML
  2. 2007.12.06 ansi 버전으로 스타워즈(Starwars) 보기 1
  3. 2007.12.03 IE(Internet Explorer)의 사망과 Add-In들 (flash.ocx) 1
  4. 2007.11.30 [GoF] Singleton pattern 싱글턴 패턴 2
  5. 2007.11.29 에스프레소 + 여러가지 재료 = 다양한 커피 1

[소개] 무료 UML도구 StartUML

IT활용 2007. 12. 7. 16:44

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

날짜 : 2007-12-07

저자 : hanburn

 

 

문서작업이 필요해서 UML을 간만에 그리려고 Visio를 사용해서 그리고 있었습니다. 셰이프를 UML로 선택해서 UML을 작성하는데, 익숙하지 않아서 인가 불편하더군요..  뒤에서 지나가던 회사 동료 병찬씨 StarUML을 써보라 해서 검색해보니 소스포지에 있더군요..

 

용량은 20MB정도 되구요, 서버가 느려서인지 저는 받는데 조금 걸리더라구요. 설치해서 띄우니까 이런~ 이런~.  모니터가 2개인 듀얼 환경인데 모니터 경계에 반반씩 걸처서 정중앙에 화면이 뜨네요 ㅎㅎ

 

그리고 클래스 다이어그램을 만들면, 클래스 이름으로 아래처럼 사람이름이 나옵니다. 9명으로김현수, 김기현, 이민규, 이장우, 정윤태, 금덕규, 김정일, 임헤진, 배란경등등.. 

 

사용자 삽입 이미지
 

 

StarUML을 만든 사람들이 한국사람인가 라는 생각에 sourceforge를 다시 유심히 살펴봤습니다. 역시나 다움과 같은 역사가 있는 프로그램이네요..

 

역사

* StarUML 이전에 "플라스틱(Plastic)" 혹은 "아고라 플라스틱(Agora Plastic)"으로 알려져 있습니다.

1996

Plastic 최초 버전(v0.9) 탄생.
그것은 모듈과 그것들 사이의 의존관계만 표현할 있는 매우 단순한 것이었습니다.

1997

플라스틱 1.0 발표.
프리웨어, OMT-지원, 현대전자주최 전국대학생소프트웨어공모전 대상수상

1998

플라스틱 1.1 발표.
UML
클래스 다이어그램 지원.

1999

주식회사 플라스틱소프트웨어 설립.
플라스틱 2.0 출시.
UML
지원, Java 코드 생성 역공학 지원

2001

플라스틱 3.0 출시.
UML 1.3
전체 다이어그램 지원

2003

플라스틱 2003 출시.
모든 소스 코드가 완전히 다시 작성됨, UML 1.4 전체 지원, 개방형 아키텍처 채용.

2005

아고라 플라스틱 2005 출시.
국제화, 확장 가능한 플랫폼 구축.
'GS(Good Software)
인증' 획득.

2005

StarUML 5.0 개명 출시.
오픈 소스 프로젝트로 전환, UML 2.0 지원, 표기법-확장 기술 구현.

 

사용해 보니 완성도가 있다 생각했는데, 예전의 플라스틱이 OpenSource로 전환한 것이 군요.

우리나라에서 예전에 플라스틱 UML의 좋다는 얘기를 들었었는데, 이렇게 오픈소스로 만나게 되니 묘한 느낌이 듭니다. 주식회사를 만들었다가, 아마도 돈주고 구입하는 사람이 적어서 그냥 오픈소스로 전환시키도 떠나버린게 아닌가 걱정도 되구요. 사실이라면 같은 개발자로 씁씁한 마음이 듭니다. 또는 개인적인 사정으로 회사를 접었을 수도 있겠지만요..  개인적으로 나름대로 우리나라의 소프트웨어 시장의 열악한 사정으로 작은 벤쳐들이 꽃을 못피우는게 아닌가 아쉽습니다.

 

아무튼 현재 무료로 사용할수 있는 StartUML 강력 추천입니다.

아래에 한글로된 자세한 정보가 있습니다.

 

정보 : http://staruml.sourceforge.net/ko/index.php  

다운받기 : http://staruml.sourceforge.net/ko/download.php

 

 

 



:

ansi 버전으로 스타워즈(Starwars) 보기

사회&문화 2007. 12. 6. 14:17

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

날짜 : 2007-12-06

저자 : hanburn

 

 

인터넷을 서핑하다가 재밌는 것을 발견했습니다. 예전에 천리안이나 하이텔등의 PC통신을 했던 분들이라면 ansi에 대해서 기억의 저편에 향수로 간직되어 있을 것입니다. 80*25의 텍스트 모드에서 화면을 꾸미기 위한 하나의 방법이었죠.. 외국의 누군가 스타워즈를 무척이나 사랑하는 사람이 만든 것으로 추정이 되는 ansi버전의 스타워즈 입니다.

 

다음의 방법으로 볼 수가 있습니다.

 

1. 윈도우에서 실행을 시작시켜 ‘cmd'를 입력하여 콘솔 화면을 띄운다.

2. 다음명령을 실행킨다. ‘telnet towel.blinkenlishts.nl’


그러면 아래처럼 콘솔에서 스타워즈 스토리가 시작된다. ㅎㅎ

 

 

사용자 삽입 이미지

 

나름대로 에니메이션 효과도 있다~ ㅋㅋ

초반의 우주선에서 레이져 광선이 나가서 비행중인 우주선도 격추시키는..

 

사용자 삽입 이미지


 

역시 IT업종에 있는 사람들중에 비범한(?) 사람들이 많습니다.  끈질긴 집념은 배워야 됩니다. ^^

 



:

IE(Internet Explorer)의 사망과 Add-In들 (flash.ocx)

IT활용 2007. 12. 3. 14:48

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

날짜 : 2007-12-03

저자 : hanburn

IE(Internet Explorer) 7.0으로 업그레이드를 한지 2~3달 된거 같습니다. 그리고 Flash Player도 최신버전인 9.0으로 설치를 하였습니다. 그런데 언제부터인지 IE가 자꾸 죽습니다. 죽으면서 오류정보를 MS로 보내고 나면 flash player에서 발생한 오류라고 하면서 아래처럼 지금은 딱히 방법이 없다는 군요..

 

사용자 삽입 이미지


이거 누구에게 문제 제기를 해야 하는지.. 아무래도 flash player 하고 IE하고 궁합이 잘 않맞아서 그런거 같은데..

컴퓨터에 Firefox 2.0도 있는데, 아무래도 사용빈도가 IE가 많다 보니까 IE에서 죽는 문제를 자주 경험하게 되는 것 같습니다. 요즘 왠만한 사이트에서 플래쉬를 사용하고 있고, 하루에도 몇번씩 죽는 IE를 보다보면, 이제 짜증이 나기 시작합니다. 우리나라 환경에서 Firefox로 않되는 곳이 많아서 그냥 IE를 주로 쓰고 있었는데, 이제 Firefox를 주로 사용하다가 않되는 곳에서만 IE를 써야할런지..

 

그럼 왜이렇게 IE는 자주 죽을까요? 아마도 MS에서 IE에 여러가지 추가기능을 넣을 수 있도록  나름대로 Open Add-on 프로그램이 아닐까 생각됩니다. 툴바나 BHO 객체, ActiveX등의 잡다한 것들이 달라붙어 같은 프로세스에 있다보니 이중에 어느 하나가 문제를 잃으키면 컨테이너 역할을 하는 IE의 프로세스가 죽어버려서 사용자는 “IE가 또 죽네~”라고 생각을 하게 됩니다. 그래서 문제를 일으키는 녀석을 잡아서 지워버리거나 사용을 중시시켜야 하는데, flash.ocx의 경우에는 사용을 안 할수도 없고~ 대략 난감합니다. 조금 검색해보면 9.0의 버전은 문제가 많아서 8.0 버전을 사용하는 사람도 꽤 되더군요.. 저도 8.0버전으로 down grading을 해보아야 겠습니다.

 

Flash.ocx 9.0을 삭제하려고 ActiveX라서 Windows->Downloaded Program Files 폴더에서 찾아보니 않보이더군요.. 이상하군.. 그래서 제어파의 프로그램 추가/삭제에 보니 있습니다. 여기서 지원주시고, 8.0 버전을 설치해야 하는데, 요츰에 찾기 힘듭니다. 국내 포털 자료실을 찾아도 않나오구요. 그래서 외국에서 찾은 파일을 첨부해 놓았습니다.

 

 

예전에 Window95/98도 참 많이 죽었습니다. 그때는 하드웨어 드라이버문제가 절반인 것을 모르고 MS에대한 생각이 별로 였습니다. 그리고 IE가 종종 죽을때마다 또 비슷한 생각을 했습니다. 저와 비슷하게 생각이 많아서인지 MS에서는 IE가 죽을 때 어떤 원인으로 해서 죽는지 에러 리포팅을 추가했습니다. 아마도 에러가 발생하는 원인을 제공하여 MS에대한 인식이 더 이상 나빠지는 것을 방지하려고 하는 의도라고 생각합니다. 사용자의 입장에서는 원망의 대상이 MS에서 다른 회사 바뀌는 것 말고는 사용상 불편한 점은 그대로인 것 같습니다. MS가 독점적인 지위에 있다보니 다른 대안이 별로 없어서 참 불편합니다. Firefox가 요즘 점점 점유율이 높아지는 이유가 IE의 대안이 되기때문이겠지요. 우리나라에서는 ActiveX 문제로 작은 대안밖에는 되지가 안습니다. 안습니다라고 말하니 정말 안습(안구에 습기가 차는)’이네요~ ㅋㅋ

 

전 세계적으로 IE의 적활한 사용 비율을 모르지만, 만약 firefox가 지금의 IE처럼 많은 사용자들이 사용하고 있다고 가정하면, 지금의 IE보다 적거나 비슷한 비율의 죽는 문제를 일으킬 지도 모릅니다. 현재는 사용자가 적어서 에러 리포팅이 적을 수도 있으니까요? 이것은 단순히 개인적인 가정입니다.

 

 



:

[GoF] Singleton pattern 싱글턴 패턴

개발 2007. 11. 30. 15:38

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

날짜 : 2007-11-30

저자 : hanburn

 

1. Singleton 정의

  1.1 클래스 다이어그램

2. Singleton이 필요한곳

3. 구현

3.1 C++로 기본구현

3.2 Template 클래스화

3.3 template 화된 클래스 사용

4. FAQ

 

1. Singleton 정의

클래스의 인스턴스가 하나만 만들어 지고 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한패턴

 

  1.1 클래스 다이어그램

          

사용자 삽입 이미지

 

2. Singleton이 필요한 곳


스레드풀, 레지스트리 설정객체, 로그객체등

 

3. 구현

1.     ‘single instance’ 클래스에서 private static 멤버를 정의 한다.

2.     클래스에 static accessor를 정의한다.

3.     ‘lazy initialize(게으른 초기화 : 요청시 생성하는)’ accesor에 구현한다.

4.     생성자는 protected 또는 private로 정의한다.

 

 

  3.1 C++로 기본구현

class MyClass

{

public:

        static MyClass*        getInstance()          // 스레드의 안정성 문제가 있음

        {

               if( m_pInstance == 0 )

                       m_pInstance = new MyClass();

 

               return m_pInstance;

        }

 

        static releaseInstance()

        {

               delete m_pInstance;

               m_pInstance = 0;

        }

 

public:

        void print()

        {

               std::cout<< "print.." << std::endl;

        }

 

private:

        MyClass(){};           // private

 

        static MyClass*        m_pInstance;

};

 

MyClass* MyClass::m_pInstance = 0;

 

위의 C++로 구현된 부분에는 getInstance 부분에 멀티스레드에서 안정성이 보장이 않되는 문제가 있습니다. 멀티스레드를 고려해서 m_pInstance 를 포인터대신 m_Instance로 정적 변수로 사용하면 create on demand는 구현이 되지만 destroy on demand가 되지 않는 문제가 있습니다. 객체가 많은 리소스를 사용하고 시스템의 요구사항에 최소의 메모리 사용이 필요하다면 이것 또한 문제가 될 수 있습니다.

 

3.2 template 클래스화

 

template <class Obj>

class Singleton

{

public:

        static Obj*    getInstance()          // 스레드 안정성 문제 있음

        {

               if( m_pInstance == 0 )

               {

                       m_pInstance = new Obj();

               }

 

               return m_pInstance;

        }

 

        static releaseInstance()

        {

               delete m_pInstance;

               m_pInstance = 0;

        }

 

private:

        //Obj() {};            // 상속받는 곳에서 생성자를 private등으로 변경

 

        static Obj*    m_pInstance;

};

 

 

3.3 template화된 클래스 사용

 

#첫번째 방법

템플릿을 사용한 버전은 해당 클래스를 상속 받으면 Singleton 클래스로 된다. 한가지 상속을 받고 생성자를 private 또는 protected로 변경해주어야 한다. 이렇게 하면 컴파일시에 Singleton 템플릿 클래스의 getInstance()에서 new 부분에서 생성자가 private이라서 오류가 나므로 아래처럼 Singleton 클래스를 friend 클래스로 선언을 해주어야 한다.

 

<템플릿 클래스 상속을 통해서 정의>

class aa : public Singleton<aa>

{

friend class Singleton<aa>;   // 생성자가 private이므로

public:

        void print()

        {

               cout<< "aa::print" << endl;

        }

private:

        aa() {};       // 생성자는 private으로

};

 <사용시에는>

aa::getInstance()->print();   // getInstance 처음호출시 객체생성

// 기타작업

aa::releaseInstance(); // 자원을 해제할 경우 releaseInstance 호출

 

 # 두번째 방법

템플릿 버전을 아래처럼 사용하는 방법도 있다.


 <보통 정의된 클래스>

class bb

{

public:

        void print()

        {

               cout<< "bb::print" << endl;

        }

 

        int a;

};

 

 <사용시>

Singleton<bb>::getInstance()->print();

Singleton<bb>::getInstance()->a = 5;

int b = Singleton<bb>::getInstance()->a;

Singleton<bb>::releaseInstance();

 

두번째 방법은 기존에 정의되어 있는 클래스에 Singleton 템플릿 클래스가 Singleton 컨테이너(?)역할을 하게 된다. 물론 bb라는 클래스를 정의해서 사용할 수도 있게 되므로 bb 클래스자체가 Singleton이 되는 것은 아니다. 그저 사용시에 Singleton처럼 사용이 되는 것이다.

 

템플릿화된 클래스를 첫번째 방법처럼 상속을 통해서 사용할 수 있고, 두번째 방법처럼 사용할 수도 있다. 템플릿 정말 매력적이다.

 

 

4.  FAQ

Q : 정의대로 하나만 만들어 지고 어디서든지 접근 가능하다면 전역변수와의 차이점은 무엇인가요?

A : 전역변수는 프로그램이 시작될 때 객체가 생성되므로 객체의 라이프 싸이클(life-cycle)을 관리 할 수 없는 문제가 있음



:

에스프레소 + 여러가지 재료 = 다양한 커피

사회&문화 2007. 11. 29. 11:54

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

요즘에 커피 종류가 참 많이 있습니다. 에스프레소, 카페라떼, 카푸치노등등..  저는 주로 캬라멜 마끼야또를 즐겨 먹습니다. 단게 좋아 지는거 보니 나이가 들었나.. ㅋ

회사의 커피머신에도 카페라떼와 카푸치노가 있는데 맛이 비슷해서 질문을 했더니 누군가 아래의 정보를 알려 주셨습니다.

출처 : http://blog.naver.com/wagong/10013600709




 
 

에스프레소

































에스프레소
















 




 





뜨거운 물




거품낸우유





에스프레소




에스프레소



















아메리카노




마키아토














 




 





생크림




캐러멜시럽





에스프레소   + 설탕




거품낸우유








에스프레소












콘파냐



       캐러멜 마키아토













 




 


 



데운 우유




에스프레소


에스프레소
 +
 우유



에스프레소













쵸콜릿시럽




우유




카페모카



        라떼 마키아토

   카페라떼







 (섞지 않음)


(섞는다)












 





 




생크림





거품낸우유




따뜻한
에스프레소





우유








에스프레소




설탕








비엔나





카푸치노











그림으로 아주 설명을 해주어서 따로 설명이 필요 없습니다. 스타벅스에서 먹던 캬라멜 마키아또를 생각해 보면 위의 그림대로 입니다. 섞이지 않은 상태로 에스프레소 / 거품낸 우유 / 캬라멜 시럽의 순서로 되었었는데..
근데 저는 캬라멜 마키아또를 먹을때 섞어서 먹곤 했는데, 카페라떼가 섞어서 만드는 것을 보면 왠지 섞어서 먹으면 않되는 것 같은 느낌이 드네요 ^^



: