Translate

2018년 4월 29일 일요일

[Android Studio] Android Studio에서 Eclipse 프로젝트 열기 (the output path is not specified ~ 오류 해결법)


Laptop
운영체제Windows 10 Home 64bit
개발프로그램Android Studio 3.1.1


github같은 외부 소스 파일을 불러오다보면, 컴파일을 했을 때 다음과 같은 경고창을 띄울 때가 있다.


output path를 설정하라고 되어있는데, 그 말대로 설정에서 output 경로를 설정하고 컴파일해도 아래와 같이 Can't find bundle for base name messages.AndroidJpsBundle, locale ko_KR 하는 오류를 다시 뱉는다.


이것은 Eclipse 프로젝트를 Android Studio에서 Open하려고 했을 때 나타날 수 있는 현상이며, 이 경우 아예 다른 방법으로 열어야 한다.






사실 초기 화면에서 이미 알려주고 있기는 하다. 어쨌든 Import Project를 선택하면 되며, 탐색기가 뜨면 해당 프로젝트를 다시 선택해준다.



그러고나면 이렇게 Directory를 입력하라는 창이 뜰텐데, (캡쳐에서는 지웠지만 아마 해당 프로젝트명에 1을 붙인 이름으로 되어있을 것이다.)
새로운 프로젝트를 생성하는 것과 동일하므로 기존 이름과 겹치지 않는 다른 이름을 지어주면 된다.

그 후 나오는 Maven 등의 추가 요구사항은 알맞게 설치해주면 된다.


[AutoHotkey] Window 10 OneNote에, AutoHotkey를 이용한 그리기 단축키 만들기 (요가북 기준)


Laptop
운영체제Windows 10 Home 64bit
개발프로그램AutoHotkey


Window 10의 기본프로그램 중에, OneNote라는 이름 뒤에 넘버링이 붙지 않은, 보라색 바탕에 흰색 아이콘을 가진 프로그램이 있다. (아래 그림 참고)



이는 Window 10 전용 버전인데, UI를 보면 넘버링이 붙는 버전과 다르게 심플한, 태블릿을 타겟으로 했다는 느낌이 강하다. 
요가북의 경우 펜 전환 버튼을 누르면 화면 하단에 퀵 아이콘이 뜨기도 한다.



이 프로그램의 그리기 기능을 써서 손필기 용도로 사용해보면서 느낀 가장 아쉬운 점은, 별도의 단축키가 없다는 점이다. 
예를 들어 필기 도중 지우개를 쓸 때도, 화면 상단으로 마우스를 끌어 지우개 버튼을 클릭, 지우기, 다시 펜 버튼 클릭 후 필기를 계속하는 수밖에 없다는 뜻이다.


목적이 다르긴 하지만 역시 펜을 주로 쓰는 그림툴인 메디방페인트(MedibangPaint)의 경우, 
Z키를 누른 채로 그리기를 하면 지우개 기능이 적용되고, 떼면 다시 펜으로 돌아오는 기능이 있다.



여기서 아이디어를 얻어, 매크로 작성 프로그램인 AutoHotkey로 해당 기능을 구현해보기로 했다.

다운로드는 간단하므로 따로 설명하지 않겠다.
AutoHotkey 공식 페이지: https://autohotkey.com/



다운로드가 끝나면, 바탕화면에서 우클릭 후 새로 만들기를 보면 다음과 같은 항목이 추가된 것을 볼 수 있다.



클릭하면 .ahk 확장자 파일이 하나 생성된다. 

생성 파일에서 우클릭 후 Edit Script를 클릭하면 메모장으로 열리게 되고, 아래의 코드를 입력한다. 상단 부분은 자동으로 생성된다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
; 자동 생성

; 시작 메시지박스 1초간 띄우기
MsgBox, 0, , Onenote_Script START, 1

;무한 루프 (실행 유지)
LOOP
{
 ; F2를 눌렀을 때 (Down Event)
 if(GetKeyState("F2", P))
 {
  ; 지우개 클릭 후 커서 제자리로
  MouseGetPos, xpos, ypos 
  MouseClick, left,  250,  150
  MouseMove, xpos, ypos
  
  ; Down Event 이후에 Up이 입력됐을 경우, 다시 pen을 클릭하여 원상태 복구
  LOOP
  {
   if(!GetKeyState("F2", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 if(GetKeyState("F3", P))
 {
  MouseGetPos, xpos, ypos 
  MouseClick, left,  350,  150
  MouseMove, xpos, ypos
  
  LOOP
  {
   if(!GetKeyState("F3", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 if(GetKeyState("F4", P))
 {
  MouseGetPos, xpos, ypos 
  MouseClick, left,  410,  150
  MouseMove, xpos, ypos
  
  LOOP
  {
   if(!GetKeyState("F4", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 if(GetKeyState("F5", P))
 {
  MouseGetPos, xpos, ypos 
  MouseClick, left,  470,  150
  MouseMove, xpos, ypos
  
  LOOP
  {
   if(!GetKeyState("F5", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 ; Ctrl + "-" 입력 시, 메시지박스 띄운 후 종료
 if(GetKeyState("-", P) && GetKeyState("Ctrl", P))
 {
  MsgBox, 0, , Onenote_Script END, 1
  break
 }
}

특정 조건이 눌리면 현 커서 위치를 저장했다가 화면 상에서 버튼 위치로 이동 후 클릭하고 저장했던 위치로 돌아오는, 단순한 원리의 코드이다.
단 요가북에서만 테스트 해봤기 때문에, 다른 해상도의 PC에서도 동일한 위치값을 가질지는 모르겠다. 만약 아니라면 X, Y값의 조정이 필요하다.

첫번째 if문 이후는 키만 변경한 반복되는 코드이다.
사용하는 단축키는 OneNote의 기존 단축키와 겹치지 않는 F2~F5로 했다.
정리하자면 아래와 같다.



그 전에 Ctrl 이나 Alt로도 실험을 해봤는데, 충돌되는 뭔가가 있는지 반응 속도가 엄청 느렸다.


사용한 함수들을 간단히 설명하자면, 다음과 같다.
쓰지 않은 매개변수를 생략했으니 더 자세히 알고 싶으면 공식 도움말을 참고하도록 하자.

GetKeyState (KeyName , Mode )

Mode는 두 가지가 있다.
P: 키를 누르고 있는지의 물리적 상태. Down(누르고 있음)의 경우 1, Up(손을 떼고있음)의 경우 0을 반환
T: CapsLock, NumLock 등의 토글 상태에 따라 켜지면 1, 꺼지면 0을 반환


MouseGetPos  , OutputVarX, OutputVarY

현재 마우스 커서의 위치값을 읽어 저장한다.
OutputVarX/Y 에 변수명을 쓰면 된다.


MouseClick , WhichButton, X, Y

클릭 이벤트를 실행시킨다.
WhichButton에는 Left (default), Right, Middle 혹은 스크롤을 감지하는 WheelUp 등을 넣을 수 있다. X, Y에는 위치값을 넣는다.


MouseMove, X, Y

마우스 커서를 특정 위치로 이동시킨다.
X, Y에 위치값을 넣는다.


MsgBox , Options, Title, Text, Timeout

메시지 박스를 띄운다.

Options: 확인, 중단, 예/아니오 등의 메시지 박스의 종류를 나타낸다. 0은 기본값인 확인버튼이다.

Title: 제목의 텍스트. 생략 시 스크립트 파일명이 된다.

Text: 본문 텍스트

Timeout: 해당 시간이 지나면 창이 자동으로 꺼진다. 초 단위.


그 외 LOOP문의 경우 while(1)와 같다고 생각하면 된다. break로 중간에 강제 종료시키는 것도 동일하다.



스크립트 파일을 더블클릭해도 실행이 되지만,
스크립트 파일에서 우클릭 후 Compile Script를 선택하면 동일한 이름의 .exe 파일이 생성되고, 이것을 실행해도 된다.
그리고 작업표시줄에 등록해놓고 쓰면 편리하다.

종료 시에는 Ctrl + "-" 를 누르면 된다. (중복되지 않게 잘 쓰지 않는 단축키를 사용한 것뿐, 큰 의미는 없다.)


결과 영상



2018년 3월 26일 월요일

[스크래치 2 / Scratch 2] Sandbox Simulator 프로젝트


Laptop
운영체제Windows 10 Home 64bit
개발프로그램Scratch 2 Offline Editor
프로젝트명Sandbox Simulator







Scratch 설치 외에 순서대로 따라할만한 절차가 없기 때문에 소스파일 자체를 공유한다.

Sandbox_Simulator.sb2


모래, 물, 불, 전기 원소를 이용한 샌드박스(Sandbox) 시뮬레이션 프로그램이며, 
기능은 위 영상과 소스파일의 댓글(주석과 동일. Scratch에서는 이렇게 부른다)에서 모두 나오게 했다.
영상에 나오지 않고 소스파일에만 있는 먹구름 이벤트도 있으나, 만족스러운 결과가 나오질 않아 일단 언급만 해둔다.

발표용으로 급하게 간단히 만들고 그 후 사용하지 않은 프로젝트라 미완성적인 부분이 상당히 많으나,
혹시 비슷한 주제로 프로젝트를 만들기 위해 참고 혹은 응용 목적으로 사용할 사람이 있을까 하고 올려본다.
미완성된 부분을 적어보자면 (사실 결국 Scratch 자체의 퍼포먼스 한계 때문이다)

1. 원소 복제 시 스프라이트를 통채로 복사하면 렉이 너무 심해, 이동까지만 스프라이트 복제 상태로 존재하고 정지 후 사라지며, 남아있는 상태는 Scratch 내장 기능인 펜으로 존재한다.



2. 1.가 원인으로, Tree 이벤트에서 허공에 떠있을 수밖에 없는 fire 원소를 (정확히 말하면 펜 자국) 프로그래밍적으로 지울수가 없어 hide로 가리는 방법을 쓴다.



3. 2.가 원인으로, Tree_exist 변수를 사용, Tree를 딱 하나만 생성할 수 있게 하기로 했다. (hide 스프라이트 때문)



4. 비슷한 이유로(렉) Flame이나 Spark는 각각 ..._count 변수를 이용하여 생성 수 제한이 걸려있다.



퀄리티가 한참 못미치긴 하지만 참고한 작품은 아래 영상에 나온 샌드박스 게임이다.




https://www.youtube.com/watch?v=iXvCliSyviY



2017년 11월 28일 화요일

2017년 9월 16일 토요일

[R] Data Frame, List에서 name을 변수로 받는 방법


Laptop
운영체제Windows 10 Home 64bit
개발프로그램RStudio Version 1.0.153

자료형 중 name 속성을 가지는 것들에는 모두 해당될 것 같다. 
(Data Frame, List 밖에 몰라서 제목은 그 2개만 썼다.)
아래 소스는 data.frame을 list로 바꿔도 동일한 결과가 나온다.

df <- data.frame(X=1, Y=2, Z=3)

이런식으로 X, Y, Z 라는 name들을 가진 Data Frame이 있다고 하자.

일반적으로 각 값에 접근할 때, $ 기호를 이용하여



이런식으로 실행된다.
단 이게 적용이 되지 않는 경우가 있는데, 바로 아래와 같이 name을 변수로 받을 때이다.

for (i in names(df)){
  show(i)
  show(df$i)
}








결과를 보면 names(df)에 해당하는 i를 출력했을 때 X, Y, Z는 제대로 출력되지만,
df$i 의 경우 접근하지 못하고 NULL이 출력된다.


이 경우, [[]] 를 대신 사용한다.

소스를 고쳐 다음과 같이 쓰면, 정상적인 결과가 출력된다.

for (i in names(df)){
  show(i)
  show(df[[i]])
}









꼭 반복문에서만 이런게 아니라, $ 기호는 변수 자체를 받지 못하는 것 같다.
이걸 보면 알 수 있다.







기초적인 문법인 것 같으나, 독학을 하다보니 약간 헤맸다.

2017년 7월 25일 화요일

[Python] mongod 실행 중 ERROR: Insufficient free space for journal files 오류 해결법


Laptop
운영체제Ubuntu 16.04 LTS 64bit

mongod 명령어를 입력했을 때 ERROR: Insufficient free space for journal files 가 포함된 로그가 출력되면서 제대로 되지 않을 때가 있는데, --smallfiles 옵션을 추가하면 해결된다.
(에러 바로 아래에 [initandlisten] Please make at least 3379MB available in /data/db/journal or use --smallfiles 라는 로그가 함께 나오긴 한다.)

$ sudo mongod --smallfiles

혹은 mongod.conf 파일을 생성하여 smallfiles=true를 입력하면 된다.
/etc/ 에 생성했을 경우, 실행은 다음과 같이 한다.

$ sudo mongod -f /etc/mongod.conf



그 외에, listen이나 bind 등 연결 관련 오류가 난다면 이전 연결이 종료가 제대로 되지 않은 상태이므로
$ sudo killall -15 mongod 를 해보고 실행해보면 된다.

참고 사이트:
https://stackoverflow.com/questions/14584393/why-getting-error-mongod-dead-but-subsys-locked-and-insufficient-free-space-for

https://stackoverflow.com/questions/6478113/unable-to-start-mongodb-local-server

[R] installation of package ‘curl’ had non-zero exit status 오류 해결법


Laptop
운영체제Ubuntu 16.04 LTS 64bit
개발프로그램RStudio Version 1.0.143
(R version 3.4.1)

KoNLP 패키지 설치 중 curl 관련 오류가 뜨길래 install.packages('curl') 을 했더니 다시 오류가 나왔다.
installation of package ‘curl’ had non-zero exit status

libcurl4-openssl-dev를 설치하면 해결된다. 
$ sudo apt-get install libcurl4-openssl-dev


추가로 아래와 같은 패키지들을 요구할 수도 있다. 마찬가지로 sudo apt-get install로 설치하면 된다.

libssl-dev    (package on e.g. Debian and Ubuntu)
openssl-devel (package on e.g. Fedora, CentOS and RHEL)
openssl

참고 사이트: https://stackoverflow.com/questions/31686470/install-curl-and-readr-on-r