'안드로이드'에 해당되는 글 2건

  1. 2012.12.03 애니메이션 GIF를 만드는 안드로이드 앱을 개발하다... 21 by Dansoonie
  2. 2011.11.07 San Francisco Day 2 3 by Dansoonie

저는 안드로이드 개발자이기는 하지만 주로 안드로이드용 3D UI Framework를 만드는 일이 주된 업무라 안드로이드 앱의 기본 틀만 갖추어 놓고 OpenGL만 주로 다루다 보니 안드로이드는 잘 모릅니다. 그렇다고 해서 OpenGL도 잘 아는것도 아니지만요... (-.-)a


어쨌든, 안드로이드 개발자임에도 불구하고 제대로 된 안드로이드 앱을 만들어본 적도 없고, 다양한 경험을 해보기 위해서 안드로이드 앱을 한번 만들어 보기로 했습니다. 그냥 재미 삼아 앱에 광고도 실어서 돈도 벌어보고요... 그래서 탄생했습니다... 제가 그동안 스타벅스에서 보낸 수많은 시간들의 결실 입니다...



제가 만든 앱은 그렇게 대단한 것은 아닙니다. 사진을 찍어서 애니메이션 GIF로 만드는 앱 입니다. 개발하기 전에 이런 부류의 앱 시장에 대한 사전조사를 해보지 않아서 어떤 앱들이 나와 있는지 잘 모르겠지만, 제 앱의 특징을 말씀드리자면 애니메이션을 위한 연속된 사진을 찍는데 편의를 제공하고 있습니다. 사진을 찍고 애니메이션을 위한 다음 프레임을 찍을때 이전에 찍었던 사진이 반투명하게 나와 그 사진을 기준 삼아 그 다음 프레임을 편하게 찍으실 수 있습니다. 


이런 앱을 만들게 된 배경은 회사 앞에 아파트를 짓고 있는데, 어느날 아파트 공사 현장을 매일 매일 사진으로 찍어서 나중에 애니메이션으로 만들면 재미있겠다는 생각을 했습니다. 그래서 일단 사진을 찍었습니다. 매일 똑같은 위치에서 같은 각도로 scene을 찍기 위해 옥상 난간에 제가 쉽게 기억할 수 있는 곳에 스마트폰을 놓고 사진을 한장 찍었습니다. 그리고 그 다음날 또 사진을 찍었는데, 생각만큼 그 전날 찍은 사진과 동일한 곳을 찍는것이 쉽지 않았습니다. 그래서 사진을 찍을때 이전에 찍은 사진이 기준이 되어 쉽게 그 다음 프레임을 찍을 수 있었으면 좋겠다고 생각했습니다. 그래서 만들게 된 앱 입니다.


일단 제 앱을 실행하면 다음과 같은 화면이 뜹니다.



시간을 두고 찍은 사진들로 애니메이션 GIF를 만드는 상황을 고려해서 프로젝트의 개념을 사용했습니다. 이 화면은 Project List View 입니다. 따라서 애니메이션 GIF를 만들기 위해서 프로젝트를 생성해야 합니다. 프로젝트는 여러개 생성할 수 있으며, 동시에 여러개를 진행할 수 있습니다. 각 프로젝트를 작업하다가 나와서 이 화면으로 오면 생성해 놓은 프로젝트들을 볼 수 있습니다. Create New Project 버튼을 누르면 팝업창이 떠서 프로젝트이름과 애니메이션 GIF의 orientation(가로/세로)을 설정한 후에 프로젝트를 생성할 수 있도록 해줍니다.



저렇게 저는 일단 예제로 hello라는 프로젝트를 생성했습니다. 프로젝트를 생성해서 중복되는 프로젝트 이름이 없고 유효한 프로젝트 이름이라면 프로젝트가 생성되여 자동으로 생성된 프로젝트로 이동합니다.



이것은 Project View로 프로젝트가 막 생성되었으므로 프로젝트 내에는 아무런 사진이 없습니다. 따라서 애니메이션 GIF에 사용할 프레임을 찍어야겠죠? 프레임을 추가하기 위해서 Add New Frame 버튼을 누릅니다. 그러면 아래의 화면으로 넘어갑니다.



반투명한 하얀색 화살표 보이시죠? 화살표는 어느쪽을 위로 놓고 찍어야 하는지를 알려주고 있습니다. 그리고 프로젝트에 존재하는 사진이 없으므로 새 프레임을 추가하기 위해 사용할 기준이 될 사진이 없으므로 화살표가 나오는 것이기도 합니다.



일단 저는 첫 프레임을 저렇게 사진을 찍었습니다. 사진은 Shoot 버튼을 눌러서 찍습니다. 사진을 찍어서 애니메이션 GIF의 프레임으로 사용할 프레임이 추가 되면 Project View에 아래와 같이 새로 추가된 프레임이 표시 됩니다.



그러면 또 프레임을 추가 해야지 애니메이션을 만들 수 있겠죠? 그래서 또 Add New Frame 버튼을 눌러서 프레임을 추가하는 작업을 진행 합니다.



외쪽 사진을 보시면 제 손이 약간 반투명하게 나옵니다. 현재 카메라는 그냥 책상 위에 놓여진 노트만 preview로 보여주고 있으며, 반투명하게 보이는 제 손은 제가 이전에 찍은 사진을 기준으로 찍으라고 반투명으로 표시되고 있는 것입니다. 물론 책상과 노트도 모두 반투명으로 표시되고 있는 상황이지만 카메라 preview에 보이는 책상과 노트의 위치가 일치하기 때문에 쉽게 알아차리지 못하시는 겁니다.(사진 상단에 표시된 시간을 보시면 왼쪽 것이 더 나중이지만 이것은 제가 설명을 돕기 위해 나중에 조작해낸 사진입니다^^). 화면 상단에 보이는 seek bar로 기준으로 삼는 이전 사진의 투명도를 조절하실 수도 있습니다. 오른쪽으로 가면 이전 사진의 더욱 선명해지고, 왼쪽으로 가면 더 투명해져서 흐리게 보입니다. 이전 프레임을 기준으로 다음 프레임을 어떻게 찍을 것인지 다시 손의 위치를 잡고 다시 사진을 찍어 프레임을 추가 했습니다.



사진을 찍어서 프레임을 추가하면 위의 사진과 같이 다시 Project View로 돌아가게 되고 새로 추가된 프레임이 표시 됩니다. 화면 하단에 나오는 버튼들 위에 있는 사진들이 애니메이션 GIF의 프레임으로 사용될 사진들이고, 그 사진들 위에 크게 보이는 사진이 현재 선택된 프레임 입니다. 화면 위쪽에 보시면 Duration이라고 나와 있고 숫자가 나와 있습니다. 이것은 현재 보이는 프레임이 애니메이션 GIF가 생성될 때 사용할 프레임의 지연 시간 입니다. 단위는 ms입니다. Modify 버튼을 눌러 프레임의 지연 시간을 조절 하실 수도 있고, 찍어놓은 프레임이 마음에 들지 않으면 Delete 버튼을 눌러 삭제 할 수도 있습니다. 이제는 프레임이 2장 이상이기 때문에 Create Animated GIF 버튼을 눌러 애니메이션 GIF를 생성할 수 있습니다. 대략적으로 애니메이션이 어떻게 될지 궁금하시다면 화면 아래쪽에 나와 있는 프레임들을 옆으로 스크롤 해 보시면 선택된 프레임이 바뀌면서 큰 이미지가 선택된 프레임으로 바뀌게 되면서 어떤 식으로 애니메이션이 나올지 가늠해 보실 수 있습니다. 


하지만 2장으로 애니메이션 만드는 것은 너무 재미 없잖아요? 그래서 몇장 더 찍었습니다. 그리고 Create Animated GIF 버튼을 누르면 애니메이션 GIF를 생성하는 작업에 들어갑니다.



왼쪽 사진이 애니메이션 GIF가 생성되는 과정이고, 생성하는 과정에서 마음이 바뀌어 중단하고 싶다면 Cancel 버튼을 누르시면 됩니다. 오른쪽 사진은 애니메이션 GIF 생성이 완료되어 생성된 애니메이션 GIF를 보여주고 있는 장면입니다. 당연히 사진은 안드로이드 단말의 화면을 캡쳐한 것이기 때문에 정지해 있죠. 어쨌든, 결과가 마음에 들면 생성된 애니메이션을 안드로이드의 갤러리로 저장하실 수 있습니다. 



뭐 이런식으로 애니메이션 GIF를 제작하실 수 있습니다... 이미지 퀄리티는 GIF라서 구립니다... 하지만 아직까지는 별다른 디코더 없이 파일 하나로만 애니메이션을 표현할 수 있는 방법은 이 방법이 제일 좋다는 결론을 얻었습니다.


아직 마켓에는 올리지 않은 상태인데, 앱의 이름을 정하지 못해서 앱 진입시 보이는 splash screen과 아이콘을 제작하지 못해서 그렇습니다. 아직 부족한 부분도 많고 안드로이드 개발자가 만든 작품 치고는 너무 허접해서 좀 창피하지만 이렇게라도 빨리 뭐라도 해보면서 앱 개발 능력을 키워가야겠다는 생각이 들었습니다. 제발 UI가 구리다는 말씀을 하지 말아주세요... 일단 첫 마일스톤으로 기본 기능에 충실한 앱을 먼저 만들기로 한 것이니까요... 앞으로 UI를 개선하고 추가할 기능도 많습니다...



어쩄든, 이 포스팅의 원래 목적은, 이 앱 이름 공모하는 것입니다... 앱 이름좀 지어주세요...  애니메이션 생성하는 앱이고, 제 앱의 특성을 잘 알릴 수 있는 그런 이름으로요... 마음에 드는 이름 지어준 분께는 선물이나 밥이라도 드리겠습니다...

Posted by Dansoonie

San Francisco Day 2

My Life/여행 : 2011. 11. 7. 16:22
오늘은 AnDevCon II 컨퍼런스 하루 전날이었습니다. 하지만 컨퍼런스는 오늘 시작되었습니다. Pre-conference workshop이라고 해서 하루 전날에는 한주제를 가지고 깊이있게 진행되는 워크샵이 진행되었습니다.

어제 밤에 평소보다 일찍 12시쯤 잤습니다. 낮잠을 자서 그런지 피곤함에도 불구하고 어제 쓴 블로그 글을 쓸때까지 버틸 수 있었습니다. 하지만 어제 올린 글을 다시 보니 사진도 반복해서 올리고 오타도 좀 있고 그렇더군요... ㅋㅋㅋ

어쟀든, 어제 12시쯤 잠들고 오늘 아침 8시에 일어났습니다. 9시간을 잤습니다... 계산 착오 아닙니다... 진짜 9시간 잤습니다. 미국에서는 여름에 해가 길때 전기값을 아끼고 퇴근 후에도 야외 활동을 할 수 있도록 Daylight Savings를 실시 합니다. 그런데 그것이 어제 끝났죠. 그래서 1시간 벌었습니다. 그러니까 9시간 맞습니다...

원래 계획은 7시쯤에 일어나서 씻고  7시반쯤에 숙소를 나서서 8시 전에 컨퍼런스장에 도착해서 맛있는 컨티넨탈 브렉퍼스트를 먹는 것이었으나, 오랜만에 잘 잤음에도 불구하고 많이 피곤하더군요. 아마도 미국으로 오기 전날 몇일을 이번주에 회사 제품 홍보를 위해 제 안드로이드 단말에 설치할 데모 앱에 버그 잡고 짐싸느라 잠을 잘 못잔데다가, 비행기 안에서도 영화 삼매경에 빠져서 잠을 2시간도 안자서 그런것 같습니다.

어쨌든, 9시 보다 조금 늦게 컨퍼런스장에 도착해서 등록하고 안내문이랑 선물 받아들고 제가 듣기로한 워크샵에 들어갔습니다.

어떤 회사에서 우리 회사에서 제가 작업하고 있는 유사한 솔루션, 하지만 게임 엔진에 가까운 프레임워크를 소개하고 설명하는 그런 자리였습니다. 하지만 내용은 만족스럽지 못했습니다. 앱과 같은 완성제품이 아닌 이런 라이브러리 형태의 솔루션을 만들어 파는 회사에서는 모두 똑같은 문제들을 가지고 있는것 같습니다. 우리회사도 우리회사의 솔루션을 잠재 고객들에게 설명할때 고객들과 개발자들은 항상 갸우뚱 하면서 우리가 무슨 소리를 하는지 이해 못하는 경우가 많은데, 이 회사도 마찬가지로 자신들의 솔루션을 소개할때 어디서 부터 무엇을 설명해야 하는지 전혀 모르는것 같았습니다. 점점 이야기는 미궁속으로 빠지고 저는 우리나라에서 취침시간이 다가와서 그런지 계속 헤드뱅잉을 했습니다... ㅋㅋㅋ

설명을 들으면서도 무슨 얘기인지 잘 모르겠는 가운데에서도 우리 회사에서 만드는 프레임워크 보다 더 유연하고 많은 기능을 제공하는(게임엔진에 준하는 프레임워크기에 당연하기도 하지만) 좋은 솔루션이라는것을 알게 되었습니다. 그리고 대부분의 일을 한 사람이 6개월동안 만든것 같았는데, 놀라웠습니다... 

장기적인 안목을 가지고 플랫폼 독립적인 프레임워크로 만들어서 향후 새로운 플랫폼으로 거듭나는것이 목표라는 이야기를 들었을때 부럽지 않을 수가 없었습니다. 우리 회사에서 개발하고 있는 프레임워크 보다 더 우수해 보이는 프레임워크를 거의 한 사람이 더 발전 가능성이 보이는 프레임워크를 단 6개월만에 만들어내다니 후덜덜...

일단 우리나라에는 그런 정도의 제품을 설계할 수 있는 사람이 몇이나 될까라는 생각이 들었고, 그런 제품을 잘 만들려고 노력하는 회사는 우리나라에 몇이나 될까 생각해봤습니다. 안타깝게도 우리나라는 그런 정도의 설계 능력을 가진 사람도 별로 없을 뿐만 아니라 그런 사람이 있다고 해도  우리나라의 IT 산업은 용역중심의 산업으로 전락하여 소프트웨어를 하나의 부품이나 제품처럼 찍어 만들어내야 하는 특성이 강하기 때문에 회사에서는 그런 제품이 나오도록 사업 방향을 정하지 못할 것이라는 생각이 들었습니다. 우리나라는 뭘 만들어도 당장 돈이 될만한것만 만들려고만 하고, 어느정도 제품이 완성되면 이미 그것을 장기적인 발전 방향으로 가져가는것은 힘들게 된다고 느끼게 되는 요즘인데, 생전 들어보지도 못한 회사는 멀리 내다보고 열심히 개발하고 있습니다... 아!!! 절망적입니다...

비극적인 상황들에 대한 생각은 계속 이어졌지만, 그 반면에 자바로 개발하는 것에 대한 전반적인 유용한 정보들도 조금 알게 되어 제가 너무 졸려서 계속 헤드뱅잉한것만 빼면 나쁘지는 않았습니다. 하지만 체계적으로 내용이 전달되지는 않았기에 좀 실망스럽기는 했습니다...

하루종일 졸다가 워크샵이 끝난 후에는 개발자에게 가서 내가 아직 시차적응이 안되서 졸려서 너무 졸아서 미안하다라고 전했고, 우리 회사에서 개발한 티파니 프레임워크와 레지나 런처를 보여줬습니다. 그랬더니 관심을 조금 갖고 명함이 있으면 달라고 해서 우리회사에서 티파니와 레지나를 홍보하면서 나눠주라고한 선물을 같이 줬더니 좋아라 했습니다...

그 밖에도 제이슨, 패트릭, 그리고 아스커라는 친구들도 사귀어 레지나를 보여주고 소개했습니다... 제이슨은 아직 학생이고, 패트릭과 아스커는 3D UI는 쓸일이 없는 분야에서 일하고 있어서 사업적인 홍보 효과는 별로 없었지만 레지나 런처 무료버전 다운로드 수는 덕분에 3개 올라갔습니다. 음하하하~

오늘 일정이 끝나는 그 순간까지도 저는 졸려 미치는줄 알았습니다. 컨퍼런스가 진행되는 호텔은 추워 죽겠을 정도로 에어콘을 빵빵 틀어대고 있어도 정신은 한개도 안돌아오더군요... 너무 졸려서 저녁을 먹을까 말까 고민하다가 너무 일찍 자면 또 새벽 2~3시쯤 일어나서 못자다가 아침에 또 졸릴까봐 저녁을 먹기로 했습니다. 오늘 저녁은 Chipotle를 먹기로 했습니다. 아이폰으로 가장 가까운 매장을 찾아보니 어제 갔었던 장소랑 비슷해서 다른 장소로 가보기 위해 두번째로 가까운 곳으로 갔습니다. 남쪽으로 13 mile 정도 떨어진 곳까지 운전해서 가서 먹었습니다. 차 렌트는 잘 한것 같습니다...


 신선한 요채로 만든 굵고 큰 부리또... 그리고 3가지 핫소스 정도는 다 가지고 있어야 만원정도 내고 먹는 부리또가 돈이 아깝지 않을텐데... 우리나라는 내용물도 적고 핫소스도 두개 밖에 없으면서 비싸기만 하죠...

 
 
식사하고 다시 숙소로 돌아오니 아주 졸립습니다... 블로그 쓰다가 잠시 잤는데, 마져썼으니 이제 다시 자야겠습니다... 오늘도 졸려서 블로그 급 마무리 하고 잡니다... 
Posted by Dansoonie