목록분류 전체보기 (315)
삶 가운데 남긴 기록 AACII.TISTORY.COM
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/8Ryf6/btqD2vBzZ7I/BTHhada9FmDOVEhIKPeysk/img.jpg)
도스박스(DOSBox)는 윈도우나 리눅스 환경에서 예전 도스 운영체제를 가상으로 구현 시켜주는 프로그램입니다. 그래서 예전 도스 시절 게임과 프로그램들을 실행 시킬 수 가 있는데 자세한 사용법은 INTRO(도스박스명령어)나 HELP(도스 운영체제 명령어)를 치고 엔터를 입력하면 설명이 나옵니다. 도스박스는 프리웨어로 소스 코드까지 공개되어있습니다. 도스박스 공식 홈페이지나 다음 카페에서 최신버전을 구할 수 있습니다. 링크된 파일은 윈도우용(32bit,64bit) 설치 파일입니다. 여기서는 도스용 프린세스메이커2를 실행해 보면서 도스박스의 기본적인 사용법을 알아보도록 하겠습니다. 도스박스를 실행시키면 위와 비슷한 화면이 보입니다. Z:\>SET BLASTER=A220 I7 D1 H5 T6 이 부분은 도스게..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bK8ZXM/btsDHnwX7wG/xggkxXbfscf39Zn7ERhBuk/img.png)
이벤트 처리는 이벤트를 전달하는 이벤트 클래스와 이벤트를 처리하는 리스너가 담당합니다. JFace는 이런 이벤트 처리를 간단하게 해줍니다. SWT 에서 이벤트 처리 SWT는 운영체제의 이벤트 큐를 사용합니다. Application의 Display클래스는 해당 큐의 내용을 정렬하는데 readAndDispatch()와 msg 필드를 사용합니다. msg필드는 운영체제의 메시지 큐에 대한 핸들로 동작합니다. 해당 이벤트를 최상위 Shell 객체로 보내고 Shell객체는 어떤 위젯이 해당 이벤트를 받을지 결정합니다. Shell은 해당 위젯으로 이벤트를 보내고 해당 위젯은 이 정보를 리스너 라는 인터페이스로 전달합니다. 그러면 리스너는 이벤트 핸들러를 호출해 이벤트에 필요한 동작을 수행합니다. Adapter 클래스..
Composite 클래스 컨테이너 위젯은 GUI의 배경 구조를 구성하고 모듈식 코드를 제공합니다. 여러 composite 객체가 다른 composte 객체에 결합될 수 있습니다. Composite 클래스의 메소드 getChildren() : Control 객체의 배열을 반환 getLayout() : composite에 연결한 레이아웃을 반환 setLayout(Layout) : composite에 연결할 레이아웃을 설정 getTabList() : 탭 순서에 따른 Control 객체의 배열을 반환 setTabList(Control[]) : Composite의 위젯들의 탭 순서를 설정 Composite 클래스는 Scrollable 클래스의 하위 클래스 입니다. 그래서 모든 Composite 클래스는 스크롤바를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/umYip/btsBFIWV1QX/kJSDrG7yg9rrtxrZqpOAI0/img.png)
도스판 기준 1999점 득점 공략은 여왕+왕자와의 결혼입니다. 무사 수행과 세이브-로드 노가다가 필요한 공략이라 실제 플레이 시간이 오래 걸립니다. 모성 수치가 게임상에서 표시 안되어서 에디터로만 확인 가능합니다. 모성을 올릴 경우 가정교사 보모로 올려야 하는데 이 공략에서는 모성 점수는 제외하도록 하겠습니다. 모성이 0점이어도 1999점은 달성됩니다. 생일 9월 30일~10월 10월에 수확제가 있어서 다음 수확제까지 시간이 제일 여유가 있습니다. 그리고 운명의 날이 11월로 밀리기 때문에 10월 생일을 추천합니다. 이 공략에서는 10월 24일 생일 기준으로 합니다. 키 초기 수치가 중요하므로 큰 키를 원하면 초기 키를 150 이상이 나올 때까지 다시 시작합니다. 고양의 눈으로 캣시 이벤트를 이용할 수도..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FrfVR/btqD1qOimj8/qnEotU78uOQqiqEyQDcKtk/img.png)
windows10 에서는 종종 네트워크에서 내 PC 포함 네트워크 상의 PC들이 검색이 되지 않을 때가 있습니다. 여러 가지 원인이 있을 수 있겠지만 폴더 공유를 켜 놓고, 작업 그룹도 등록하고, 네트워크도 연결되어 있고, 방화벽도 점검하고, 등등.... 많은 세팅들을 뒤적거렸지만 알 수 없었습니다. 결국 문제의 원인을 찾았는데 windows10에서는 아래의 서비스가 수동이어서 검색이 되지 않았던 것입니다. >제어판>관리도구>서비스>Function Discovery Resource Publication 이 서비스를 수동에서 자동으로 바꾸고 서비스를 시작하니 예전처럼 네트워크에 해당 PC가 검색됩니다.
자바로 파일을 다루다 보면 파일 이름으로 금지된 문자들을 걸러낼 필요가 있습니다. 그래서 만들어 봤습니다. 제가 쓰려고요. //파일명으로 금지된 문자들을 검사 public static boolean isContainsForbiddenChar(String input) { // 금지된 문자들 배열 char[] forbiddenChars = { '/', '\\', '*', '"', '', '|' }; // 입력 문자열에 금지된 문자가 포함되어 있는지 검사 for (char forbiddenChar : forbiddenChars) { if (input.contains(String.valueOf(forbiddenChar))) { return true; } } // 금지된 문자가 없는 경우 return false;..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kB9H8/btqERQ57zG7/lCGEXDouv1uG2rlKBfCD51/img.png)
Thread dump는 언제 해야 하는 가? 1. Java 어플리케이션이 Hang 상태가 될 때 Hang 상태는 Java 어플리케이션의 Thread들이 멈춰있는 상황입니다. Shared Resource의 접근할 경우 다른 Thread가 사용할 수 없도록 Lock을 획득하며, 또한 이러한 Lock을 다른 Thread들이 이미 획득하고 있을 경우, Lock을 획득하기 위해 대기하게 됩니다. Java에서의 Lock은 내부 Monitor를 통해 관리되기 때문에 Monitor 획득이 Lock 획득을 의미합니다. 이렇게 Lock을 획득하기 위해 대기하는 Thread들이 많아지고, 대기 시간이 길어지면 Hang 인것처럼 보여지게 됩니다. Java 프로그램에서 Lock을 획득하기 위해서는 Synchronized구문을 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmCYH2/btsDKRwEsRO/KiG6FhgMaI2zBwOqrJm8lK/img.png)
Widget 클래스 모든 위젯들의 상위 클래스 입니다. 그러나 위젯을 상속받거나 코드에서 바로 사용하면 안됩니다. 하나의 구조로 모든 위젯들을 단일화 하기 위함이기 때문입니다. setData(String Object) : 위젯에 객체를 붙임. 문자열로 접근 가능. getData(String) : 위젯에서 문자열에 대응하는 데이터와 관련된 객체를 반환 getStyle() : 위젯의 스타일에 해당하는 정수를 반환 getDisplay() : 위젯과 관련된 Display 객체를 반환 toString() : 위젯 클래스를 표현하는 문자열 반환 dispose() : 위젯과 위젯 자원에 대한 할당을 해제. isDisposed() : 위젯의 할당을 해제했는지에대한 boolean 값 반환 Control 클래스 Contr..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/B7UzH/btsDFWFndcQ/B8fPbQcgYUWdeVbn6HkEak/img.png)
com.google.zxing 라이브러리 아래는 Zxing Core 3.5.x 버전을 기반으로 한 예제입니다. maven이나 gradle 등을 통해 라이브러리를 프로젝트에 추가할 수 있습니다. 다만 너무 최근 버전보다 안정화된 버전을 사용하는 것을 권장드립니다. 이 zxing 라이브러리는 String을 QR 코드로, 다시 QR코드를 String으로 복원할 수 있습니다. QR 코드 스펙상 문자열의 길이의 제한이 있을 수 있습니다. 인코딩 방식이나 오류 레벨 설정 라이브러리 종류나 버전 등에 따라 차이가 있을 수 있지만 수백 글자에서 수천 자까지만 가능합니다. 따라서 긴 문자열은 QR코드를 여러개로 분할하여 변환해야 합니다. 아래 예제는 긴 문자열을 1000 글자로 나누어서 QR 코드로 변환 후 다시 Str..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqyqIA/btsDByrTWx0/TERnXht7LwR3QKY2wJEp41/img.png)
모델 기반 어댑터 JFace는 SWT 위젯을 좀 더 쉽게 다룰 수 있도록 헬퍼 클래스들을 지원하는데 이들을 모델 기반 어댑터라고 부릅니다. 어댑터의 종류 뷰어 : 위젯의 모양과 정보를 구별. 가장 많이 사용. 액션과 컨트리뷰션 : 이벤트 처리 절차를 간단하게 만들고 조직화 이미지와 폰트 레지스트리 : 폰트와 이미지의 할당과 해제를 관리 대화상자와 마법사 : 사용자와의 상호작용을 위해 SWT Dialog의 기능을 확장 HelloSWT_JFace 예제 이 예제는 순수 SWT 예제와 비슷하지만 구조가 다릅니다. import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Co..
Westwood에서 만든 고전 게임 DUNE2000입니다. 듄은 프랭크 허버트의 SF 소설을 원작으로 하고 있습니다. 듄은 스타워즈나 스타크래프트, 바람 계곡의 나우시카 등 스페이스 오페라 장르에 많은 영향을 끼친 고전 작품입니다. 영화로 1984년에도 제작되었고 2021년 드뉘 빌뇌브 감독, 티모시 샬라메 주연으로 새로 제작되어 개봉했습니다. DUNE2000은 RTS(리얼 타임 시뮬레이션) 게임 장르를 개척한 작품인 dune2를 윈도 95용으로 리메이크한 버전입니다. 배경 설정 서기 1만6천년 즈음 발생한 버틀레리안 지하드(종교적 성향이 강한 반기계 운동) 때문에 기계 문명이 쇠퇴하고 정치는 중세 귀족 문명으로 퇴행했습니다. 대신 인간 컴퓨터라 불리는 멘타트와 인간의 초능력을 이용한 우주 항행 기법이 ..
Display class Display 클래스가 외관을 보여주는 역할을 하지는 않지만 GUI 자원을 관리하고 운영체제와 소통을 담당합니다. 코드에 있는 SWT/JFace 명령들을 운영체제에 호환되도록 바꾸어 전달하는 일을 합니다. 주요 메소드 Display() : 플랫폼 자원을 할당하고 Display 객체를 생성. getCurrent() : 사용자 인터페이스 스레드를 반환. readAndDispatch() : Display 객체가 이벤트를 해석해서 리스너로 넘겨 줌. sleep() : Display 객체가 이벤트를 기다림. Shell class Shell 클래스의 인스턴스는 위젯, 이벤트들과 연동하며, 시각적인 부분을 구현합니다. 운영체제에 접근하기는 하지만 윈도우 열기, 활성화, 최대화, 윈도우 닫기를..
윈도우즈 환경에서 이클립스 플러그인 SWT/JFace 개발을 위한 환경 설정을 해보겠습니다. JDK 설치 여기서는 JDK11 을 기준으로 합니다. 다운로드 및 설치는 OpenJDK나 오라클에서 하시면 됩니다. https://openjdk.org/ OpenJDK Learn about the key active Projects in the Community including Amber (high-productivity language features), Loom (lightweight concurrency), Panama (foreign functions and foreign data), Valhalla (primitive types and specialized generics), and, of course..
postgresql 14 에서 백업 및 복원 방법을 알려드리겠습니다. # 데이터베이스 백업 pg_dump -h 호스트네임 -p 포트번호 -U 사용자이름 -F tar -b -v 데이터베이스이름 > 백업파일이름 실행하게 되면 비밀번호를 물어보게 됩니다. 이 때 비밀번호는 postgresql 사용자이름에 할당된 비밀번호를 입력하면됩니다. # 데이터베이스 복원 pg_restore -h 호스트네임 -p 포트번호 -U 사용자이름 -d 데이터베이스이름 백업파일이름 복원할 때도 마찬가지로 비밀번호를 물어봅니다. postgresql에 있는 모든 데이터베이스를 백업 및 복원은 다음과 같습니다. 백업은 pg_dumpall 명령으로, 복원은 psql 명령으로 합니다. # 모든 데이터베이스 백업 pg_dumpall -h 호스트..
여기서는 grep의 다양한 옵션에 대해 다루지는 않겠습니다. 사용하기 유용했던 패턴 샘플만 몇개 언급하도록 하겠습니다. 1. 실행 중인 프로세스 중 "java"를 포함하는 프로세스를 찾을 때 ps -ef | grep java 하지만 이건 우리가 찾으려는 프로세스 외에 프로세스가 grep 자체 프로세스도 표시되는데요. 그래서, 2. 실행 중인 프로세스 중 "java"를 포함하는 프로세스를 찾되, grep로 시작하는 프로세스를 제외할 때 ps -ef | grep java | grep -v grep 요렇게 하면 됩니다. 3. 실행 중인 프로세스 중 "java"를 포함하는 프로세스의 PID만 찾되, grep로 시작하는 프로세스를 제외할 때 ps -ef | grep java | grep -v grep | awk ..