Korea Blog
HackFair 출품작 소개 3탄!~ ash로 다양한 기기를 하나의 디바이스로 제어해 보세요!
Wednesday, December 5, 2012
세상에는 우리가 편리한 삶을 누릴 수 있게 도와주는 다양한 기기가 있습니다. 하지만, 몇몇 기기는 익숙치 못하고 누군가에겐 불편한 조작방법으로 인해 다루기가 쉽지 않습니다.
더 많은 사람들이 더 많은 기기를 편리하게 다룰 수 있게 된다면
세상은 더 편리해 질 수 있지 않을까요?
그런 생각에 이 프로젝트를 시작했습니다.
ash는 자신에게 더 익숙한 기기를 이용해 자신에게는 덜 익숙한 기기를 편하게 다룰 수 있게 도와주는 소프트웨어이자, 이를 개발하는 프로젝트의 이름입니다.
2012년 4월 GDG Suwon 에서 개최한
Hackathon
에 참가, ash의 전신인 MonkeyPySon을 개발해 아이디어 우수상을 받았고, 2012년 Google Hackfair 를 맞아 다듬고 개선해 ash라는 이름으로 전시된 것을 계기로, 이렇게 구글 디벨로퍼 블로그에 소개되게 되었습니다.
ash 로 할 수 있는 것
카카오톡, 문자 앱과 같이 좁은 터치스크린을 이용해야 하는
안드로이드 폰의 어플리케이션을 컴퓨터의 키보드와 마우스로 제어
할 수 있습니다.
손안의
안드로이드 폰을 이용해 컴퓨터의 볼륨을 높이고 줄이거나 프리젠테이션 도구, 또는 터치패드로 사용
할 수 있습니다.
다수의 컴퓨터와 안드로이드 폰 / 타블렛 등의 기기를
하나의 키보드와 마우스
또는 터치스크린으로 제어할 수 있습니다.
프로그래밍 지식 없이 손쉽게
PC 또는 안드로이드용
어플리케이션의
자동화 테스트
를 만들고 버튼 하나로, 또는 정해진 시간마다 자동으로 실행시킬 수 있습니다.
이 외에도 제가 상상치 못한 일들을 하실 수 있습니다.
ash 란 무엇인가?
ash는 PC, 안드로이드 등의 다양한 기기를 하나의 기기에서 편리하게 제어할 수 있는 기능을 제공하는 커맨드 기반 실행 환경입니다.
ash는 PC, 안드로이드 등의 다양한 기기에 설치될 수 있으며, ash가 설치된 기기는 다른 ash가 설치된 기기의 마우스를 움직이거나 키보드를 누르고 화면을 터치하는 등의 제어가 가능합니다. 이를 이용해 사용자는 PC의 키보드/마우스로 안드로이드 기기의 카카오톡이나 문자 앱 등을 조작하고, 거꾸로 안드로이드 기기를 이용해 PC의 볼륨을 높이고 줄이거나 프리젠테이션 도구, 리모콘으로 활용할 수 있습니다.
물론, PC로 PC를, 안드로이드 기기로 안드로이드 기기를 제어하는 것도 가능합니다.
ash의 구조와 설계
ash는 기본적으로 리눅스나 DOS의 커맨드 프롬프트처럼 텍스트 기반 명령어를 입력받아 동작하는 구조로 설계되었습니다. 사용자의 의도는 ash가 지정한 매우 간단한 문법을 따라 ash가 이해 가능한 언어로 표현되며(expression), ash는 이를 해석, 기기를 제어함으로써 사용자의 의도를 수행(evaluation) 합니다.
이에 따라 ash는 아래 그림과 같이 사용자로부터 키보드 / 마우스 등으로 입력을 받아 ash 문법에 유효한 명령어로 만들어 해석기에 전달하는 User Interface 계층, ash 문법의 명령어를 받아 이를 해석하고 처리하는 Evaluator 계층, 그리고 해석된 사용자 의도에 따라 기기를 제어하거나 내부 데이터를 처리하는 Controller 계층으로 구성되어 동작합니다.
User interface 계층은 사용자의 입력을 단순 키보드/마우스 등의 기기만이 아니라 파일이나 네트워크로부터 받는 것도 가능합니다. 따라서 ash 문법에 기초한 간단한 스크립트/프로그램을 작성하거나 ash 끼리 맺은 네트워크를 통해 통해 다른 기기를 제어하는 것이 가능합니다.
제 3의 개발자 또는 사용자는 자신에게 익숙하고 편리한 개발환경을 사용해 ash 문법을 지원하여 다른 기기의 ash와 상호 동작 가능한 자신만의 ash를 구현할 수 있습니다.
또한, User Interface 계층은 사실상 ash 환경 위에서 동작하는 하나의 응용 프로그램이기에, 가속도 센서나 자신이 직접 만든 컨트롤러를 이용하는, 자신만을 위한, 또는 다른 사람들을 위한 참신한 User Interface 계층의 wrapper를 쉽게 만들어 기존의 ash 위에 동작하는 응용 프로그램을 만들 수 있습니다.
즉, ash는 하나의 완결된 응용 프로그램이 아니라, ash의 문법에 따라 작성된 프로그램을 실행 가능하고 다른 개발 환경에서 만들어진 프로그램과도 쉽게 결합 가능한 하나의 실행 환경입니다.
따라서 일반 사용자들은 ash 문법을 이해할 필요 없이 자신에게 유용한 Interface를 제공하는 ash 기반 응용 프로그램을 사용함으로써, 키보드, 마우스 등의 자신에게 익숙하고 편리한 인터페이스로 원하는 기기를 제어할 수 있습니다.
ash는 ashdi 라는 PC용 기본 인터페이스를 제공해 키보드, 마우스로 기기들을 편리하게 제어할 수 있는 기능을 제공하며, AshFa라는 안드로이드용 ash를 이용해 터치스크린 인터페이스를 제공하고 있습니다. 다른 개발자 / 사용자 분들도 ash 문법을 이용하며 다양한 인터페이스를 개발해서 사용하거나 공개, 판매 할 수 있습니다.
ash 문법
ash의 문법은 ash의 핵심으로 Lisp과 python 등의 언어에서 영감을 얻어 설계되었으며, 지극히 간단하여 쉽게 배우고 사용할 수 있습니다. 자세한 내용은 생략하고, 여기서는 그 특징 몇가지만 설명합니다.
모든 표현식은 리스트
ash의 문법으로 만들어지는 모든 문장은 표현식(expression)으로 간주되고, 해석기는 단순히 이 표현식을 recursive 하게 계산/평가(evaluation)하고 그 결과를 내놓습니다.
모든 표현식은 리스트입니다. 리스트는 하나 이상의, 더이상 해석되지 않는 단순 문자인 atom 또는 또다른 리스트를 원소로 가지는 자료 구조입니다. atom은 함수와 유사한 operator 와 data로 나뉘어, 각 data는 각 operation 에서 숫자 또는 문자열 등의 적절한 type으로 해석됩니다.
리스트의 첫번째 원소가 오퍼레이터인 리스트는 함수 호출문이라 불리어, 두번째부터 나머지 원소들을 인자로 받아 오퍼레이터가 가리키는 명령어 리스트를 해석한 결과를 해석 결과로 내놓게 됩니다.
그렇지 않은 경우 단순한 리스트로 해석됩니다.
코드 == 데이터
따라서 ash language 에서는 함수 호출문의 리스트가 곧 코드이자 함수로, 평범한 데이터 리스트와 똑같은 형태로 취급됩니다. 때문에 보다 유연하고 간편한 코드 실행 / 작성이 가능합니다.
콜백
사용자의 이벤트를 자유롭게 정의 가능하며, 해당 이벤트 시에 호출될 operator를 callback 이라는 이름으로 지정 가능합니다. callback은 자신이 호출될 이벤트와, 자신이 호출되었을 때 evaluate 될 명령어의 리스트(코드)로 구성됩니다.
사용자의 이벤트는 이벤트 모드 / 이벤트 타입 / 이벤트 값의 세가지 데이터 atom으로 구성되는 리스트입니다.
User Interface 계층에서 하는 대부분의 일은 키보드/마우스 등의 입력장치로부터 이 형식의 이벤트를 만들어 주는 것입니다. 이벤트 모드 / 타입 / 값은 문자열 데이터 atom 이므로, callback 등록 시 어떤 내용으로든 자유롭게 줄 수 있습니다.
ash 에서는 함수 정의/구현과 같은 기능을 제공하지 않고, callback 등록만을 제공합니다. 사실 ash의 많은 오퍼레이터가 alias type 이벤트에 대한 callback 입니다. 이러한 유연하고 일관된 구조의 callback 덕분에 다양한 인터페이스를 큰 복잡함 없이 구현 가능하고 다양한 기능을 유연하게 추가할 수 있습니다.
이벤트 녹화 기능
ash를 이용하면 다양한 기기를 편리하게 제어할 수 있습니다. 한걸음 더 나가서, 반복적인 제어를 쉽게 자동화 할 수 있다면 좋을 것입니다.
ash는 ash를 이용해 사용자가 기기를 제어하는 일련의 동작을 그대로 녹화, 손쉽게 재생 가능한 event recording 기능을 제공합니다.
이를 이용해 손쉽게 매크로 작성 등이 가능하며, 안드로이드 / PC 소프트웨어를 막론한
사용자 레벨 테스트 자동화
를 간단하게 적용 가능합니다.
데모 영상
지난 구글 핵페어에서 촬영된 ash의 데모 영상입니다.
http://youtu.be/XaA7UHmpJsU
사용된 기술
PC용 ash 의 구현은 python과 Java Swing을 이용해 이루어졌으며, 안드로이드 기기 제어를 위해 android에서 제공하는 monkeyrunner가 사용되었습니다.
Android용 ash인 AshFa의 구현은 여타 안드로이드 어플리케이션과 동일하게 Android SDK와 Java를 이용해 이루어졌습니다.
실행 환경
현재까지(2.0.0.0 버전) ash는 Ubuntu와 Android FroYo 이상 버전만을 정식 지원하고 있으며, Java Runtime과 Android SDK tools의 설치를 필요로 합니다.
앞으로 가야할 길
아직 갈길이 멉니다. 속도가 더딜 수 있겠지만 꾸준히 개선해 나갈 예정입니다.
앞으로 지속적으로 다양하고 편리한 기능을 추가 구현하고 Mac OSX과 MS Windows 를 지원할 계획이며, 추후 Chrome 위에 ash를 올릴 계획을 검토 중입니다.
라이센스
ash는 GPL v3(
http://www.gnu.org/licenses/gpl-3.0.html
)를 라이센스로 사용하는 오픈 소스 소프트웨어입니다.
누구나 소스코드를 열람하고 사용할 수 있습니다만, GPL v3의 제약 사항을 지켜 주셔야 합니다. 대표적인 GPL v3의 제약사항은, 소스코드를 수정하시고 재배포 하신다면, 수정하신 소스코드도 공개하셔야 한다는 것입니다. 자세한 사항은 GPL v3의
링크
를 따라가 확인해 주시기 바랍니다.
ash 의 문법, 구조를 기반으로 다른 ash와 호환 가능하게 처음부터 다시 구현하신 경우라면 GPL v3를 따르지 않고 각 개발자의 라이센스를 따를 수 있습니다. 기존 소스 코드를 사용하지 않고 기존 ash 위에서 동작 가능하게 만든 ash 기반 응용 프로그램들 또한 마찬가지입니다.
공식 홈페이지와 배포처
공식 홈페이지(ash 관련 정보와 소스코드 제공)
AshFa(Android용 ash) Google Play 다운로드 / 설치 페이지
AshFa 소스 코드 저장소
팀 구성 및 문의처
현재 ash는 박성재 1인 팀 구조로 진행되고 있습니다.
ash와 관련해 질문이나 의견 등이 있으신 경우 언제든
sj38.park@gmail.com
으로 연락주시면 감사하겠습니다.
No comments :
Post a Comment
ラベル
ad
AdMob
admob_sdk
Advanced Power Searching
Android
Android App Quality
android back button
Android back end
Android navigation
Android Player API
android server
android up button
androidL
androidtv
androidwear
App Translate Service
Audio Focus
Chrome
Chromecast
Code-in 2012
Core App Quality Guidelines
Daydream
design
designing for Tablets
designsprint
dialog
Drive SDK
Game Developers Conference
GCi
GCi 참가자
GDA
GDC
gdg
gdgkorea
Go
Google Cast
Google Code-in
Google Play
Google Play 스토어
Google Search
Google Summer of Code
Google+ Sign-In
Google+ Sign-In Bootcamps
Google+ 로그인
Google+ 로그인 부트캠프
googleanalytics
googleio
GooglePlay #AndroidDevStory #PlayStore #MaterialDesign #AndroidStudio #DeveloperConsole
GSOC
hackathon
HackFair 출품작
In-app Billing
io
io2014
ioapp
iobytes
ioextended
IRC Talk
IRC 서버
java7
kitkat
launch
Marshmallow
materialdesign
mobile ad
mobile_ads_sdk
multiscreen
NaCl
Native YouTube Player API
NRRN 사용 제한
Power Searching
product launch
SD 카드에 앱 설치
SecureKeyFactory
ux
webview
YouTube
YouTube Android Player API
YouTube API
YouTube API 3.0
YouTube API Update RSS Feed
광고
구글 HackFair
구글 Summer of Code
구글 개발자 사이트 홍보
구글 개발자 아카데미
구글 개발자 온라인 강좌
구글 검색
구글 고급 파워 서치
구글 드라이브 앱
구글 부트캠프
구글 아카데미
구글 코드인
구글 플러스 로그인
구글 핵페어
구글로 로그인하기
네이티브 클라이언트
데이드림
멀티 모바일
멀티 플랫폼
모바일 광고
수익화
스마트 브라우저
안드로이드
안드로이드 4.2
안드로이드 Back 버튼
안드로이드 Up 버튼
안드로이드 개인 정보 보호 정책
안드로이드 네비게이션
안드로이드 데이드림
안드로이드 디자인
안드로이드 방향탐색
안드로이드 보안
안드로이드 사용자 데이터
안드로이드 서버 백엔드
안드로이드 앱 품질
안드로이드 원격 제어
안드로이드 태블릿 디자인
안드로이드 현지화
안드로이드 화면 보호기
애드몹
애플리케이션 SD카드 설치
애플리케이션 개발 주민등록번호 사용 제한
애플리케이션 외부 저장 장치
앱 품질 체크리스트
오픈 소스
오픈소스 프로그램
웹 DMB
유튜브
유튜브 API
유튜브 API 3.0
유튜브 API 업데이트
유튜브 모바일
유튜브 안드로이드 플레이어 API
인앱 결제
인터넷상 주민등록번호 수집 이용 제한
주민등록번호 사용제한
추천이미지
출시
크롬브라우저
태블릿 디자인
태블릿용 앱
파워서치
한국 구글 개발자
한국 구글 개발자 사이트
핵심 앱 품질 가이드라인
핵심 태블릿 앱 품질 체크리스트
핵페어
핵페어 출품작
ブログ アーカイブ
2016
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
Google Code-in 2012 - 참가자수, 대한민국 8위!
Google Play에서 홍보 그래픽을 국가별로 현지화하세요.
간단하면서 더욱 강력해진 새로운 유튜브 Data API 출시!
GDE(Google Developers Expert) Summit 참가 후기
HackFair 출품작 소개 9탄! 언제 어디서든 우리는 개발한다, 구름 IDE
HackFair 출품작 소개 8탄!~ 멀티 플랫폼/모바일 환경의 약점을 극복한다, IRCT...
인앱 결제 (In-App Billing) 버전 3 출시!
HackFair 출품작 소개 7탄!~ 안드로이드 단말기를 PC로 제어한다, 리모트로이드~!
HackFair 출품작 소개 6탄!~ 웹에서 고화질 DMB를!!!, WebDMB!
HackFair 출품작 소개 5탄!~ 크롬 브라우저의 가능성을 열다, Cbox Console
HackFair 출품작 소개 4탄!~ 디지털 그림자 인형극
Google HackFair가 무사히 끝났습니다~
HackFair 출품작 소개 3탄!~ ash로 다양한 기기를 하나의 디바이스로 제어해 보세요!
HackFair 출품작 소개 2탄!~ 나만의 리듬 액션 게임 WimyLime!!
안드로이드로 구글 드라이브 앱 개발하기
HackFair 출품작 소개 1탄! - 스마트 브라우저
플레이 스토어(구 안드로이드 마켓) 추천 이미지 가이드라인
November
October
September
August
July
June
May
March
February
January
2011
December
November
Feed
No comments :
Post a Comment