programming 에 해당하는 글11 개
2007/12/03   FDT : Not enough memory (5)
2007/11/26   Remove SVN Folders(Shell scripting)
2006/11/20   Why abstract Method ?
2006/11/15   XP : eXtream Programming
2006/07/01   Adapter pattern(1)
2006/06/18   Structural Patterns
2006/06/18   The Design Patterns in Java
2006/05/24   java에서 리소스 사용의 균형 (2)
2006/05/17   PHP 리다이렉션(redirection) 방법
2006/05/17   디미터 함수 법칙
2006/05/12   리팩토링은 언제해야할까?

programming | 2007/12/03 02:13

FDT를  3.0.2 build 1001  버전으로 업데이트를 하고 나서 이클립스에 메모리가 부족하다는 메시지가 생겨났다. 이전까지 별 무리없이 쓰고 있었는데 작업을 앞두고 갑자기 먹통이 되어버리니 참 답답할 노릇이였다. 아마도 여러가지 기능이 추가되면서 필요로 하는 메모리가 늘어난듯 싶다.
찾아보니 fdt 포럼에도 이같은 문제가 제기되었는데 단순히 아래 메시지가 나오는 것과
같이 설치폴더에 있는 eclipse.ini 환경설정 파일의 메모리 최대 사용량을 늘려주라는 이야기 뿐이였다.

사용자 삽입 이미지

물론 메로리 설정을 변경하고 이상이 없다면 다행이지만 나의 경우에는 -Xmx512 로 설정할 경우
eclipse 런처가 실행조차 안되는 문제가 발생한다.
한참만에 이것이 Eclipse 3.3.1 버전의 런처가  Sun VM 을 인식못하는 버그가 있다는 사실을 알아냈다. (http://wiki.eclipse.org/FAQ_How_do_I_increase_the_permgen_size_available_to_Eclipse%3F)

따라서 이러한 문제를 해결하려면  eclipse.ini 파일을 약간 수정해야한다.
 
<original eclipse.ini>
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize   -------> remove

256m                        -------->remove
-vmargs
-Xms40m
-Xmx256m                  ------> replace -Xmx256m to -Xmx512m


 eclipse.ini 을 열면 위와 같은 코드를 볼 수 있을 것이다.
FDT3.0 을 위해 최대 사용할 메모리를 늘리려면  맨 아래줄의 -Xmx256m 부분의 숫자 부분을 512 이상으로 변경해주면 된다. (자신의 메모리 용량에 따라 512이상으로 적절하게 설정해주면된다.)

그리고 붉은색 코드부분을 모두 삭제해준다.

<revised eclipse.ini>
-showsplash
org.eclipse.platform
-vmargs
-Xms40m
-Xmx512m


위과 같이 수정해 주면 이클립스 메모리 문제를 해결할 수 있을 것이다.



 
 
태그 : eclipse 3.3.1 bug, FDT, not enough menory
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/106
BlogIcon 땡굴이 2007/12/08 01:45 ReplyDelete
앙.. 이런 문제가 있군요. 아직 메시지는 뜨지 않았지만 혹 뜨게 된다면 아주 유용하게 처리할 수 있겠습니다. 후후.. 감사해요..
BlogIcon 기정e 2007/12/09 02:37 Delete
이 문제 때문에 지난주말을 완전히 날려먹었죠~~~^^
이젠 개발할때 메모리까지 신경써야한다는 점이 신경쓰이긴하지만 한편으론 플래시가 그만큼 커졌다는 생각이 들어요.
BlogIcon 땡굴이 2007/12/10 16:36 ReplyDelete
어흥.. 말이 씨가 된었나봐요.. 크크.. 오늘 휴가라 집에서 작업하려는데 이 메시지가 뜨더라고요. 맥이라 ini파일 찾는 법을 몰라서 힘들었지만 손쉽게 문제를 해결했네요. 호호 다시 한번 감사합니다.
BlogIcon 기정e 2007/12/10 20:01 Delete
윽..그러세요...mac용은 패키지 내용을 뜯어봐야 eclipse.ini 파일이 보여서 좀 애먹으셨을거에요..^^ mac용 경로를 올릴까 하다가 안올렸는데..아마도 이클립스 유로파 버전으로 새로 설치하시고 fdt 설치하시는 분이라면 위 메시지가 반드시 뜨는거 같아요..
암튼 해결하셨다니 다행이에요~~
흑심 품은 마니또 2007/12/12 20:53 ReplyDelete
올~ 이렇게 남들에게 도움되는 좋은 정보를 공유하고 있었군아.

역시 멋쟁이 울 마니또 하하핫 하하핫

오늘 부터 스토커 적인 너의 사생활을 파해치기 시작해따 하하핫 하하핫

담에 또 놀러오께... ^^* 3주 후에 보자

행복한 하루 보내삼.

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming | 2007/11/26 17:51

요즘들어  상당 수의 플래시 오픈소스 개발로 인해 버전관리 프로그램을 많이들 사용하고 있다.

버전관리의 효율적인 측면에서는 인정하지만 최종소스을 공유할 시 각 폴더에 들어있는 .svn 폴더로 인해 상당히 괴로울(?) 때가 있을 것이다.

물론  대표적인 Subversion 윈도우용 쉘프로그램인 TortoiseSVN 에서는 최종소스를 익스포트할 수 있게 해주는 기능이 존재하지만 이 기능은 해당 SVN 시스템에 귀속된 채 관리되는 것이라 만약 내부의 .svn 폴더가 임의로 삭제되었거나 변경이 되었을시 익스포트를 못 할 경우도 있다.

하지만 아래와 같이 shell script 를 이용하여 레지스트리를 편집하면  전혀 SVN 프로그램에 영향받지 않고서도 손쉽게 .svn 폴더를 삭제할 수 있게된다.


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

사용방법은

1. 임의의 텍스트 파일을 생성한다.
2. 위 스크립트를 복사하여 붙여넣기를 한다.
3. 파일명을 deleteSvn.reg 로 변경한다. (파일이름은 상관없다 단, 확장자는 reg)
4. 생성한 reg 파일을 더블클릭하여 레지스트리에 등록한다.

위 과정을 거친후에  .svn 을 포함하고 있는 폴더에 마우스를 가져다가 우클릭을 하면
'Delete SVN Folders' 라는 새로운 메뉴가 보일 것이다.
이 명령을 실행하면 그 폴더를 포함하여 자식폴더까지 모든 .svn 폴더가 삭제될 것이다.

단, 주의사항은 반드시 .svn 폴더를 제거하려고 하는 소스의 복사본으로 실행을 해야한다는 것이다.
그렇지 않으면 원본 svn 폴더가 삭제될 것이다.

download registry file...

reference from article below
http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx







 
 
태그 : remove, subversion, SVN
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/105

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/java | 2006/11/20 00:38

상속가능한 메소드 구현(즉, 실제본체가 있는 메소드)은 상위 클래스에 집어넣기에 딱 좋다.
하지만 추상 클래스에서는 하위 클래스에서 유용하게 써먹을 수 있는 일반적인 코드를 전혀 만들 수 없기 때문에 메소드를 구현한다는 것이 아예 말이 안 되는 경우가 종종 있다. 추상메소드를 만드는 이유는 실제 메소드 코드를 전혀 집어넣지는 않더라도 일련의 하위클래스를 위한 규약(protocol)의 일부를 정의하기 위한 것이다.

그렇다면 장점은?.......

OOP의 핵심이라 할 수 있는 다형성(polymorphism)이다.
상위클래스 유형을 메소드의 인자나 리턴유형 또는 배열유형으로 쓸 수 있게 만드는 능력이 필요하다. 그래야만 새로운 유형을 처리하기 위한 새로운 메소드를 추가하거나 기존의 메소드를 고칠 필요없이 프로그램에 새로운 하위클래스 유형을 추가할 수 있기 때문이다.

플래시에서는 추상클래스를 지원하지는 않는다.
하지만 추상클래스 보다 더 추상적인 개념인 인터페이스(interface)가 존재한다. 물론 자바에서 사용되는 인터페이스와 똑같다.
앞으로 사용될 AS3.0 에서도 추상클래스는 지원하지 않지만 인터페이스 만으로도 비슷한 역할을 구현할 수 있을 것이다.


 
 
태그 : abstract class, java, polymorphism
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/70

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/방법론 | 2006/11/15 23:56

익스트림 프로그래밍(XP, eXtream Programming)이라는 방법은 최근의 소프트웨어 개발 방법론 분야에 새로 등장했다. 많은 사람들이 "프로그래머들이 정말 원하는 방법" 이라고 하는 XP는 90년대말에 등장했으면 두명으로 구성된 조그만 회사에서 포드 자동차에 이르기까지 다양한 규모의 회사에서 쓰이고 있다.

XP의 가장 큰 장점은 막판에 스펙에 변경되는 일이 있어도 고객이 원하는 것을 고객이 원하는 기한에 맞춰서 제공할 수 있다는 점이다.
XP는 서로 조화롭게 쓸 수 있도록 계획된 일련의 규칙이 있다. 물론, 그 가운데 일부만을 채택하고 있는 프로그래머도 많이 있긴 하다.
규칙에는 다음과 같은 것들이 있다.

- 조금씩, 하지만 자주 발표한다.
- 사이클을 반복해서 돌리면서 개발한다.
- 스펙에 없는 것은 절대 집어넣지 않는다.
- 테스트 코드를 먼저 만든다.
- 야근은 하지 마라. 항상 정규일과 시간에만 작업한다.
- 기회가 생기는 족족 언제 어디서든 코드를 개선한다.
- 모든 테스트를 통과하기 전에는 어떤것도 발표하지 않는다.
- 조금씩 발표하는 것을 기반으로 하여 현실적인 작업 계획을 만든다.
- 모든일을 단순하게 처리한다.
- 두 명씩 팀을 편성하고 모든 사람이 대부분의 코드를 알 수 있도록 돌아가면서 작업한다.


- Head first Java 中-


 
 
태그 : Extream Programming, XP
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/69

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/java | 2006/07/01 21:41

상속에 의한 Adapter 패턴 -  가장 기본이 되는 클래스를 중심으로 클래스를 확장하는 방법으로 인터페이스로 구현하는 방식, 어쩌면 클래스 확장에 있어 가장 기본이 되는 디자인 패턴인듯 싶다.
플래시에서도 가장 쉽게 적용되는 방식이다.

*Adaptee - Banner Class
접합하는 측이 아니라 접합되는 측. 이미 준비되어있는 메소드를 가지고 있는 역할.

public class Banner{
  private String string;
  public Banner(String string){
  this.string=string;
  }
  public void showWithParen(){
  System.out.printIn("("+string+")");
}
public void showWithAster(){
  System.out.printIn("*"+string+"*");
}

}

*Target - Print Interface
필요로 하는 메소드를 제공하는 역할.

public interface Print{
  public abstract void printWeak();
  public abstract void printStrong();
}

*Adapter - PrintBanner Class
Adaptee 역할의 메소드를 사용하여 Target 역할을 충족시키는 역할.

public class PrintBanner extends Banner implements Print{
  public PrintBanner(String string){
    super(string);
  }
  public void printWeak(){
  showWithParen();
  }
  public void printStrong(){
   showWithAster();
  }
}

*Client - Main Class
Target 역할의 메소드를 사용해서 일을 하는 역할

public class Main{
  public static void main(String[] args){
  Print p= new PrintBanner("Hellow");
  p.printWeak();
  p.printStrong();
  }
}
Print interface 를 사용하여 구현하고 있다는 점을 강조하기 위해 인스턴스 변수를 Print 형 변수에 대입하여 사용함...


 
 
태그 : design pattern, java
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/38

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/방법론 | 2006/06/18 20:59

구조 패턴은 복잡한 구조를 이루는 클래스들을 어떻게 하면 개발하기에도 쉽고 보기에도 좋은 형태를 만들어 줄 것인가에 대한 답을 제시해 준다. 구조 패턴을 이용해서 시스템을 구축하면 새로운 기능을 가진 복합객체를 효과적으로 작성할 수 있다.


구조패턴에는

1. Facade 패턴
2. Adapter 패턴
3. Bridge 패턴
4. Composite 패턴
5. Decorator 패턴
6. Flyweight 패턴
7. Proxy 패턴

1. Facade 패턴

일반적으로 프로젝트를 수행할 때, 하나의 목적을 위해 여러개의 오브젝트들이 유기적으로 연결되게 된다. 이때, 오브젝트들을 묶을 수 있다고 판단이되면, 별도의 오브젝트를 새롭게 만들어 사용자들에게 새롭게 만든 오브젝트의 인터페이스를 이용하여 다른 오브젝까지 모두 사용할 수 있게 만들수 있다. 이처럼 대표 인터페이스를 이용하여 다른 여러 오브젝트를 사용할 수 있게 만드는 패턴이 바로 Facade 패턴이다.

2.  Adapter 패턴

어댑터 패턴은 기존에 존재하는 클래스를 직접 변경하지 않고도 원하는 형태의 인터페이스를 가지게 만드는데, 효과적으로 사용할 수 있는 패턴이다. 외부에서 돈을 주고 구입한 클래스나 다른 부서가 개발한 클래스들이 적용하고자 하는 시스템에 적합하지 않을 경우, 시스템을 변경하지 않고도 이들 클래스를 활용할 수 있는 방법을 제공한다.

3. Bridge 패턴

브리지 패턴은 어댑터 패턴과 팩토리 패턴을 합친 것 같은 패턴으로 이들의 장점을 시스템에 적용한 패턴이다. 이를 간단히 설명하면 동일한 조상을 가진 객체들은 팩토리 패턴을 이용하여, 객체의 생성을 추상화해서 객체들을 사용하는 모듈과 이들을 분리시키지만, 동일한 조상을 가지지 않았거나 동일한 인터페이스를 소유하지 않은 객체는 팩토리 패턴을 적용하기 어렵다. 브리지 패턴은 어댑터 패턴을 이용하여 같은 조상을 가지지 않은 시스템구조에 팩토리 패턴을 적용할 수 있도록 만들어 주는 패턴이다.

4. Composite 패턴

객체집단을 다루는데 유용한 컴포짓패턴은, 시스템이 집합속에 포함될 객체와 집합을 가지고 있는 객체, 이들 모두가 자기 사진과 동일한 타입(메소드와 데이터)의 객체리스트를 가지게 한다. 그래서 객체리스트에 객체를 삽입하거나 삭제하는 방법으로, 객체집단을 기존의 집단에 신속하게 벗붙이고 삭제하는 작업을 수행할 수 있게 만든다. 그리고 객체집단의 어느 특정한 부분에 명령을 전달하면 특정 부위의 객체집단 모두가 그 명령을 수행하게 만드는 구조를 가진다.

5. Decorator 패턴

데코레이터 패턴은 장식자라는 이름에서도 알 수 있듯이, 특정 객체를 원하는 모양(기능)으로 장식시켜주는 객체를 만들어 준다. 즉, 장식 시켜주는 객체들과 장식 받을 객체들을 만든 뒤, 이들을 이용하여 장식 바은 객체가 원하는 모양이되도록 만들어 주는 것이다. 이대, 기존의 객체(장식받을 객체)를 활용하고 있던 모듈은 장식이 이루어지는 것과 무관하게 작동하도록 한다.

6. Flyweight 패턴

Flyweight 패턴은 시스템 속에 유사한 클래스나 객체의 난립을 줄여주는 역할을 한다. Flyweight 패턴은 데이터를 관리하고 있다가 시스템이 원하는 데이터가 있을때 이를 객체로 만들어 준다. 객체를 만들 때는 데이터를 객체로 변경시켜주는 팩토리에 데이터를 넘겨주고, 팩토리는 이를 필요한 형태의 객체로 만들어서 반환하게 된다.

7. Proxy 패턴

프록시 패턴은 프록시가 대리인이라는 의미를 가지고 있는 것처럼, 원하는 작업을 대신해서 처리하도록 만드는 패턴이다. 시스템이 작업을 처리하는 가운데, 시스템의 처리과정을 효율적으로 만들기 위해 처리를 분산시킬 필요가 있다. 이렇게 처리과정의 일부부능ㄹ 다른 프로세서에 대행시키고자 할 때 프록시 패턴을 적용하면, 시스템의 구조를 어렵지 않게 효율적으로 변경시킬 수 있다.


출처  : C# 객체지향언어로 배우는 디자인 패턴 (정보문화사/Devpia)


 
 
태그 : design pattern, Structural Patterns
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/34

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/java | 2006/06/18 20:24

The Design Patterns in Java : Table of Contents

Some Background on Design Patterns
Object-Oriented Programming Concepts
Defining Design Patterns
1. Creational Patterns
The Factory Pattern
The Abstract Factory Pattern
The Singleton Factory Pattern
The Builder Pattern
The Prototype Pattern
Summary of Creational Patterns
2. Structural Patterns
The Adapter Pattern
The Bridge Pattern
The Composite Pattern
The Decorator Pattern
The Facade Pattern
The Flyweight Pattern
The Proxy Pattern
The Summary of Patterns
3. Behavioral Patterns
Chain of Responsibility
The Command Pattern
The Interpreter Pattern
The Iterator Pattern
The Mediator Pattern
The Memento Pattern
The Observer Pattern
The State Pattern
The Strategy Pattern
The Template Pattern
The Visitor Pattern
Appendix
Standard Coding Rules
UML
References

 
 
태그 : design pattern, java, Programming
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/33

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/java | 2006/05/24 21:53
C++과 달리 자바에서는 게으른 방식의 자동 객체 삭제를 사용한다. 참조가 없는 객체들은 가비지 콜랙션(garbage collection)의 후보가 되며, 만약 가비지 콜랙션이 그 객체들을 지우려고 하기만 한다면, 객체의 finalize 메서드가 호출될 것이다.
더이상 대부분 메모리 누수 책임을 지지 않게 되어 개발자에게는 아주 편해진 일이지만, C++방식대로 자원을 청소하도록 구현하기는 어려워졌다.
다행스럽게도 사려깊은 자바 언어의 설계자들은 이것을 보상하기 위한 기능 하나를 추가해두었다.
finally 절이 그것이다. try 블록에 finally절이 들어있다면, 그절안의 코드들은 try 블록 안의 코드가 한문장이라도 실행되면 반드시 실행되도록 되어있다. 예외가 던져지더라도 상관없다.
finally 절 안의 코드는 반드시 실행된다. 이말은 다음과 같은 코드로 리소스 사용의 균형을 잡을 수 있다는 뜻이다.

public void dosomething() throws IOException{
       File tmpFile = new File(tmpFileName);
       FileWriter tmp = new FileWriter(tmpFile);
       try{
               //실행코드
       }
       finally{
               tmpFile.delete();
       }
}

이 루틴에서 사용한 임시파일은 루틴에서 어떻게 나가든 지워야 한다.
finally 블록이 이렇게 간결하게 해결해 준다.
 
 
태그 : java, Programming, 리소스
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/21
chang 2006/05/26 00:33 ReplyDelete
와 너무 어려워서 무슨말인지 하나도 모르겠다.
하튼 열심히 하는 기정군.
BlogIcon 기정e 2006/05/26 16:54 ReplyDelete
ㅋㅋ 장어른님이셨군...


Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/php | 2006/05/17 19:33

1. 먼저 메타테그를 이용한 방법
<?
echo "<meta http-equiv='refresh' content='0; url=http://kimkijeung.com'>";
?>

현재 가장 많이들 쓰고 있는 방법이고 url 다음에 해당 경로를 넣어주면 되고
절대경로 상대경로에 관계없으며 또한 파라미터의 전달 등도 가능하다.
시간설정(초단위)을  하면 원하는 시간동안 딜레이도 가능

2. 자바스크립트를 이용한 방법
<?
echo "<script>
document.location.href=http://kimkijeung.com';
</script>";
?>

. 또 다른 방법

<?
echo "<script>

window.location.replace(http://kimkijeung.com');

</script>";
?>

변수전달가능하고 상대경로도 가능합니다. 딜레이는 자바스크립트를
이용하면 가능

3. 헤더를 이용한 방법

<?
header("Location: http://kimkijeung.com");
?>



 
 
태그 : php, 리다이렉션
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/19

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/방법론 | 2006/05/17 01:39

디미터 함수 법칙은 프로그램에서 모듈간 결합도를 최소화하려 시도한다.
이법칙은 한 객체가 제공하는 메서드에 접근하기 위해 또 다른 객체들을 통하는 것을
허용하지 않는다.

디미터 함수 법칙 - 모든 메서드는 다음에 해당하는 메서드만을 호출해야 한다.

class Demeter {
  private :
     A *a;
      Int func();
  public :
        //...
        void example(B&  b);
}
void Demeter :: example(B& b){
    C c;
    Int f= func();  <----------- 자신
    b.invert(); <--------------메서드로 넘어온 인자
    a= new A();
    a->setActive(); <---------자신이 생성한 객체
    c.print(); <---------------직접 포함하고 있는 객체

}

참고 디미터 프로젝트
- 적응적 프로그래밍(Adaptive programming) 을 이용해서 소프트웨어를 유지보수하기 쉽고 진화하기도 쉽게 만드는데 초점을 두는 연구


 
 
태그 : Programming, 결합도, 디미터함수, 방법론
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/17

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기

programming/방법론 | 2006/05/12 10:45



내 주변을 둘러보니 변화와 쇠퇴뿐...  
-라이트HF.Lyte, "함께하소서 Abide with me"



코드가 더 이상 잘 맞지 않아서 장애물에 부딪쳤을때. 사실은 하나로 합쳐져 있어야 할 두개를 발겨했을때, 어떤 것이든 '잘못'되었다고 생각될때, 그것을 변경하는 일을 주저하면 안된다. 언제나 바로 지금이 최적기다.

. 중복 DRY(don't repeat youself) 원칙의 위반을 발견했을시
. 직교성이 좋지 않은 설계


코드를 리택토링(refactoring) 하는 것- 기능을 이리저리 옮기고 이전에 내린 결정을 갱신하는 것-은 사실 고통관리(pain management)를 실천하는 것이다.

현실을 피하지 말자. 소스코드를 이곳저곳 변경하는 것은 굉장히 고통스러운 작업일수도 있다.
거의 작동하는 수준까지 올려놓은 코드였는데 이제 완전히 망가져 버린다.

일찍 리팩토링하고, 자주 리팩토링 하자....


- The Programatic Programer 中 -


 
 
태그 : refactoring, 방법론
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/15

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기


[PREV] [1] [NEXT]

 
전체 (104)
flash (73)