반응형

이번 학기초에도 학과(정확히 말하면 올해부터는 전산학부, School of Computing이 되었다.)에서 석사과정 신입생을 선발했고, 이들은 주어진 일정에 따라 교수님과 연구실을 선택하는 과정을 겪었다.


올해는 전산학부가 되면서 정원이 어떻게 되었는지 정확히 모르지만, 작년에 전산학과였을 때까지는 매년 봄학기에 약 60명의 학생을 뽑았었다. 가을학기에는 그보다 많이 적었는데 정확한 숫자가 기억나지 않는다. (많아도 30명 이하였을 것이다.)


우리 연구실은 유비쿼터스 컴퓨팅 시스템, 상황인지 기술을 기반으로 네트워킹과 서비스를 조합/제공하는 플랫폼을 오래 전부터 해 오면서 최근에는 사물 인터넷(IoT) 서비스 제공 플랫폼을 연구하고 있는데, 작년까지는 석사과정 학생을 받기가 어려웠다. 여러가지 이유가 있었겠지만 대표적인 이유를 세 가지 꼽을 수 있었다: 

  1. 시스템을 설계/구축하는 연구실이다 보니 어려울 것이라는 생각에 지원을 꺼리게 되었을 수 있고, 그 당시에는 학생들의 관심사 또한 시스템보다는 데이터베이스나 인공지능 쪽이 많았다. 게다가 시스템에 관심 있는 학생들도 우리 쪽이 아닌 임베디드 시스템(embedded system) 분야로 갔었다.
  2. 교수님께서 워낙 맺고 끊으시는 것이 확실하시고, 학생의 professional 측면의 발전을 위해서 잘하는 부분에 대해서 칭찬하실 뿐만 아니라 잘못한 부분에 대해서도 거침없이 지적하시다 보니, 신입생들은 어디선가 들은 소문을 바탕으로 무서운 교수님으로 인식하는 듯했다. 또한 빡센 연구실 이미지도 있는 듯했다. 하지만 사실 겪어보면 지도교수님께서는 스마트 기기들이 정말로 똑똑하게 알아서 사람에게 맞춰주면서 진화하도록 만들고 싶다는 강력한 비전 갖고 계시고, 학생들에게 그러한 비전을 설명하시면서 연구나 과제를 앞장서서 이끌어 가시는 스타일이셔서 오히려 정말 배울 점이 많은데 이 부분을 설명하기가 쉽지 않았다. (겪어 봐야 알게 되니까)
  3. 유비쿼터스/IoT 시스템을 실제로 구축하는 과정에서 하단의 무선 네트워크부터 최상단의 서비스 연동까지 다양한 주제를 학생들이 원하는 대로 선택해서 졸업연구를 하다 보니, 연구주제의 스펙트럼이 다양해서 무엇을 하는지 잘 모르겠는 것처럼 비춰지기도 했었던 것 같다. 그나마 최근에는 각 기술들을 적용하는 IoT 테스트베드 공간을 여러 개 만들었고, 이 위에서 어떤 서비스를 돌리고 어떤 연구를 한다고 설명하니까 학생들도 더 잘 이해하는 것 같았다.


그런데 최근에는 IoT가 핵심 키워드이자 화두가 되면서 이번학기에는 IoT에 관심을 갖는 석사과정 신입생들이 많이 들어온 것 같다. 그래서 우리 연구실에서 하는 IoT 서비스 플랫폼에 대해 관심을 갖고 여러 명의 학생들이 교수님을 찾아뵙고 연구실에 들러서 우리랩 학생들과도 이야기를 나눴었다.


이렇게 우리 연구실에 높은 관심을 갖고 있고, 또한 입학 전부터 학부 과정에서 IoT와 관련된 작은 프로젝트도 나름대로 해 본 우수한 학생들이 컨택을 해 왔음에도 불구하고, 결국 전산학부의 신입생 배정 정책으로 인해서 신입생을 충분히 뽑을 수가 없었다.

전산학부에 소속된 교수님 수가 42명 정도라고 들었고, 학부에서 선발한 신입생은 60명 가량 되므로, 연구실당 TO는 대부분 1명이고, 특수한 경우에 대해서만 2명이다. 여기서 특수한 경우는 새로 부임하신 젊은 교수님 연구실에 학생이 별로 없어서 많이 뽑아야 하는 경우이다. 이에 따라 우리 연구실도 이번에 단 1명만 뽑게 되었다.


이전부터 우리 연구실에서 매년 1명씩 석사과정 신입생을 받았지만1), 최근 2년 동안 받은 3명의 석사과정 학생들 중에서 2명은 창업에 관심이 높아서 결국 창업을 하겠다며 논문석사(지도교수가 배정되어 졸업논문을 쓰고 졸업하는 석사과정 학생)를 포기하고 나갔고, 나머지 한명은 예전부터 갖고 있던 정신적인 질병으로 인해서 고생을 많이 하느라 수업 수강을 비롯한 학생의 생활을 하는 것이 힘들어서 우리 연구실에서 같이 연구를 하지는 못했다.


사실 전산학부에서는 학생들이 창업하는 것에 대해서 매우 환영하고 좋아하며, 가능하면 지원해 주려고 한다. 그런데 우리 연구실에서 석사과정 학생 두 명이 각각 창업을 하나씩 하려고 노력했고, 그 중에 하나는 지금도 사업이 잘 진행중인 나름 성공 사례이기 때문에2) 사실 전산학부에 기여한 측면이 있다. 하지만 정작 우리 연구실은 이렇게 학생들이 빠져나가면서, 여러 석사과정 학생들과 함께 더 규모 있는 좋은 IoT 시스템을 구축할 수도 있었는데 그 부분을 약간 포기하고 나머지 학생들이 조금씩 더 수고하고 있다.


더군다나 우리 연구실에서는 항상 1년에 정부출연금 5억원 규모의 과제를 2011년부터 지금까지 계속 수행해 오고 있으며, 그 덕분에 IoT 시스템 관련 연구가 지속되어 어느정도 자리를 잡기 시작했을 뿐만 아니라 학부에 재정적인 측면에서도 결코 기여를 작게 하지는 않았다고 생각된다.3)

이와 같이 최근 선발한 학생들의 특수한 상황과, 그로 인해서 전산학부에 나름대로 기여하게 된 측면을 특수성으로 감안하고 우리 연구실에 TO를 한 명만 더 늘려 주었으면 정말 좋을텐데 하는 생각이 든다.


물론, 우리 연구실뿐만 아니라 다른 모든 연구실도 석사과정 학생을 필요로 하고, 각 분야에서 좋은 연구성과를 내고 있기 때문에 우리 사정만 고려해 달라고 하는 것은 과도한 욕심일 것이다. 나도 내 생각이 욕심에서 비롯된 것임을 부정하지 않는다. 하지만 이번 학기에 IoT에 관심 있 석사과정 신입생들 여러 명과 이야기를 나눠 보면서, 이렇게 관심 분야가 잘 정해져 있고 실력도 좋은 학생들을 한 명만 더 뽑아서 같이 재미있게 연구하면 얼마나 좋을까 하는 아쉬움이 남는 것이다.


KAIST 석사과정 입학 정원을 늘리지 않는다면 근본적인 학생 수 부족 문제는 해결되지 않을 것 같다. 하지만 그렇다고 국민의 세금으로 학생들에게 장학금을 주는 기관이므로 함부로 정원을 늘릴 수는 없다.

여러 모로 아쉬움과 고민이 교차하는 오늘이다.



<각주>

1) 2012년에는 특수한 경우로 가을학기에 1명을 더 선발하게 되었다. 사실 가을학기는 신입생 수가 적어서 TO 배정받기도 쉽지 않다.

2) 스타트업의 대부분이 1년 내로 포기하는 것과 달리 몇년 째 잘 운영되고 수익도 내고 규모도 꽤 있으면 성공적이라고 할 만 하다.

3) KAIST에서는 정부출연이든 산학과제든 연구과제 하나당 총 연구비의 약 26% 가량을 간접비 명목으로 떼어 간다. 이 비용이 KAIST 중앙 부서뿐만 아니라 각 학과에도 흘러간다고 들었다.



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 12.04 LTS (64-bit)

Kernel: 3.5.0-54-generic

Wine version: 1.4

한컴오피스 한글 버전: 한글 2010


와인(wine)을 이용해서 한컴오피스 한글 워드프로세서(Hwp)를 실행할 수 있으나, 이미지가 들어가 있는 페이지에 접근하면 아래와 같은 오류를 내면서 강제 종료되는 문제가 있다.

Unhandled exception: unimplemented function gdiplus.dll.GdipEnumerateMetafileSrcRectDestRectI called in 32-bit code (0x7b839cf2).

Register dump:

 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b

 EIP:7b839cf2 ESP:0033db1c EBP:0033db80 EFLAGS:00000287(   - --  I S - -P-C)

 EAX:7b826245 EBX:7b894ff4 ECX:7d099549 EDX:0033db44

 ESI:80000100 EDI:0033e28c

Stack dump:

0x0033db1c:  0033dba0 00000008 7d050000 80000100


... (이하 생략)


즉 gdiplus 라이브러리가 필요한데, 기존에 알려진 방법(https://kldp.org/node/136898)을 따라해도 오히려 한글 2010 실행이 안되고 "Could not load GdiPlus.dll" 이라는 오류 메세지가 뜨는 것이었다.


다른 방법이 없을지 찾아보던 중에 アリア님의 블로그에서 Linux Mint 17에서 Wine으로 카카오톡, 한글 2010 설치하기(http://jetzt.tistory.com/810) 포스팅에서 도움을 받아서, 간단하게 해결할 수 있었다. 이 분의 블로그를 확인하기 전까지는 winetricks의 존재도 모르고 있었는데 감사한 일이다.


아래와 같이 명령을 치면 알아서 라이브러리를 직접 다운로드 받아서 설치한다.

$ winetricks gdiplus


アリア님에 의하면 한글 2010에서 닷넷2.0 라이브러리도 필요한 것 같은데, 아직까지는 gdiplus 라이브러리 문제만 해결한 채 계속 사용하고 있다. 사용하다가 또 오류가 나서 필요한 경우 추가해야 할 것 같다.



반응형
블로그 이미지

Bryan_

,
반응형

Dropbox(드롭박스)에서 특정 폴더를 만들어 놓고, 영어 문자 일부의 대문자와 소문자만 바꾸려고 하면 변경이 되지 않는 문제가 있다.

정확히 말하면, 내가 로컬 컴퓨터에서 영문자가 들어간 폴더에서 영문자 한개를 소문자에서 대문자로(또는 대문자에서 소문자로) 바꿔도, 동기화 중임을 나타내는 빙글빙글 돌아가는 표시만 나고 다른 공유 컴퓨터에는 이름이 바뀌지 않는다.


예를 들면,"TESt 전용 폴더입니다" 라는 이름의 폴더를 만들고 나서, 잠시 후에 내가 "TEST 전용 폴더입니다" 라고 중간의 소문자 t를 대문자 T로꾸더라도 최종 반영이 안되는 것이다. 그래도 폴더 내부에 새로운 파일을 추가하거나 삭제, 변경하는 것은 정상적으로 반영이 되었다. 오직 영문자 이름의 대소문자를 바꾸는 것만 되지 않더라는...


(소문자 t를 대문자 T로 바꿔도 빙글빙글 돌아가는 파란색 동기화 표시가 사라지지 않는다)



Dropbox 웹사이트에 들어가서 확인해 보니 역시나 폴더 이름이 바뀌어 있지 않았다. 그래서 웹사이트에서 직접 파일이름 변경을 시도했더니, 아래와 같은 경고 메세지가 나오고 변경되지 않았다.



아마 Dropbox 내부 시스템에서 대소문자 구분이라던지 동기화 처리 과정에서 의도적으로 대소문자만 바꾸는 작업을 지원하지 않도록 해둔 것이라고 예상된다.


조금 번거롭지만 현재로써는(2015.02.21 현재) 이름의 대소문자를 바꾸고 싶으면 띄워쓰기를 추가하거나 빼는 식으로 다른 문자를 추가/제거하면서 같이 이름이 바뀌도록 하는 방법을 써야겠다.



반응형
블로그 이미지

Bryan_

,
반응형

*개발 도구: Eclipse ADT Plugin (Android Developer Tools)

*자바(Java) 버전: 1.8.X


개인적으로 아직까지는 이클립스(Eclipse)에 플러그인 형태로 이미 안드로이드 개발 환경이 덧붙여진 툴을 선호하는 탓에, ADT에서 안드로이드 앱 개발을 하고 있다.

Play Store에 개발자 등록을 하고 나서 그냥 [프로젝트 이름]/bin/ 디렉토리에 있는 APK 파일을 바로 업로드하면, 아래와 같은 메세지를 보이면서 진행이 되지 않는다.


업로드 실패

zip 정렬되지 않은 APK를 업로드했습니다. APK에 zip 정렬 도구를 실행한 다음 다시 업로드해야 합니다.


저런 식으로 표현을 하니까 사실 무슨 의미인지 잘 와닿지 않지만, 대략 전자 서명을 받은 (digitally signed) 앱만 배포 가능하다는 조건인 것 같다. Android Studio에서 Digital Sign 과정을 거치고 zip 정렬이 된 APK 파일을 만드는 방법은 아래 구글 공식 페이지에 적혀 있다.


http://developer.android.com/tools/publishing/app-signing.html#debug-mode


그 외에 zipalign 이라는 콘솔 프로그램을 활용하는 방법도 같이 설명되어 있지만, 아쉽게도 내가 쓰고 있는 ADT 환경에서의 방법은 설명되어 있지 않고 (아마 ADT가 구형이라서 더 지원하지 않는 것일 지도...), zipalign 이라는 프로그램 역시 ADT 내부에 있는 sdk 디렉토리를 찾아봐도 없다.


ADT 환경에서 좀더 쉽게 zip 정렬하는 방법을 찾아본 결과, 아래와 같이 할 수 있다.



(1) 배포하려는 안드로이드 프로젝트 아이콘의 오른쪽 단추를 눌러서 뜨는 메뉴에서 "Export..."를 누르고, Android > Export Android Application 선택.




(2) 배포하고자 하는 안드로이드 프로젝트 이름을 선택하고,




(3) Keystore를 선택해서 암호를 입력한다.

Keystore가 없을 경우, "Create new keystore" 항목을 선택하고 새로운 암호와 함께 만들면 된다.

Location은 안드로이드 앱 배포를 위한 keystore 파일을 보관하기 좋은 위치 아무 곳이나 상관이 없고, (필자는 ADT 플러그인 폴더 내부에 keysotre 라는 위치를 새로 만들었다.) 파일 이름 또한 아무렇게나 해도 상관이 없으며, 확장자를 jks로 한다.




(4) Key alias selection 이라는 항목도 없을 경우 새로 만들어서(create new key) 적당한 암호를 설정해 주면 된다.




(5) Destination APK file 에는 zip 정렬이 되어서 생성될 APK 파일을 저장할 위치를 원하는 아무 곳으로 지정하면 된다.

이 화면에서는 인증서의 유효기간과 MD5, SHA1 같은 값들을 보여준다.

Finish 버튼을 누르면 창이 사라지고, 잠시 후에 지정한 위치에 가보면 zip 정렬된 apk 파일이 생성되어 있다.






*그외 자주 실수하는 부분:

Play Store에 변경된 새로운 apk 파일을 올리려면, 무조건 AndroidManifest.xml 파일에서 Version code 숫자를 바꿔야 한다. 참고로 Version name은 변경하지 않아도 상관 없다.





반응형
블로그 이미지

Bryan_

,
반응형

Java 버전이 올라가면서 향상된 for 루프문(enhanced for loop) 문법이 나왔는데, 이것으로는 배열을 초기화할 수 없다는 사실을 발견했다.


예를 들어, 10개짜리 문자열 배열(String array)을 만들고 향상된 for 루프를 쓰게 되면 아래와 같이 코딩할 수는 있는데,

String[] strArray = new String[10];

for( String str : strArray ){

str = "test_string";

}


for( String str: strArray ){

System.out.println(str); // NullPointerException 발생

}


위와 같이 하면 배열의 각 문자열이 초기화되지 않고 여전히 null 상태로 존재하게 된다.

번거롭더라도 배열 초기화는 index number를 사용해서 아래와 같이 명시적으로 해 주는 것이 좋다.


for(int i=0; i<strArray.length; i++){

strArray[i] = "test_string";

}


이 문제는 String 뿐만 아니라 객체 배열(Object array), 기본 타입 배열(primitive type array; 예를 들어, int[], double[])에서도 마찬가지로 발생한다.

다만 기본 타입(primitive type) 배열의 경우에는 향상된 for 루프를 쓰더라도 NullPointerException은 발생하지 않지만, 값들이 0인 상태로 바뀌지 않은 채 존재할 것이다.



반응형
블로그 이미지

Bryan_

,