Search results for 'Google'

Google I/O 2015 첫 번째 날

2015. 6. 9. 22:31

올해 초만 해도 막연히 올해 미국을 한 번 가보고 싶다는 흐릿한 목표만 있었다. 이번 구글 IO는 '되면 좋고 아님 말고' 정도의 생각으로 신청했는데 덜컥 당첨되어 다녀올 수 있었다. 이렇게 컨퍼런스를 다녀오면 미국에서의 흐름은 어떤지, 한국과는 어떻게 다른지를 깨달을 수 있어 도움이 되는데 이번 컨퍼런스도 마찬가지였다.



행사장인 모스콘 센터 서관 입구. 오른쪽은 등록을 위한 줄이고 왼쪽은 입장을 대기하는 줄이다. 등록은 행사 전날부터 이루어졌기에 많이 붐비지는 않았다. 등록은 전혀 기다리지 않고 진행할 수 있었다.



행사장에 들어가기 위해 줄은 필수이다. 들어보니 전날 등록을 위해서도 줄을 한참 섰다고 한다. 줄은 모스콘 센터를 둘러싸는 형태로 되어 있었으며 거의 행사장을 한바퀴 감싼듯 했다. 다른 곳에서는 커피 등 간단히 먹을 것을 나눠준 것 같은데 내가 서있는 곳에서는 전혀 발견할 수 없었다.



사람, 사람, 사람. 줄을 서있는 사람의 숫자도 많았지만 그 구성도 다양했다. 한국인도 종종 눈에 띄었고 일본인도 쉽게 발견할 수 있었다. 중국어 사용자도 상당히 많이 눈에 띄었는데 어디서 왔는지는 확인하기 어려웠다. 원래 샌프란시스코에는 중국인이 많아 이곳 사람일 수도 있다. 또한 다른 개발자 행사에 비해 여자의 비율이 꽤 높은 느낌이었다. 추첨제로 바뀌면서 여성이 일정 비율이 될 수 있도록 한 것일까? 사실 관계는 확인할 수 없지만 여성의 비율은 확실히 높았다. (그런데 왜 위 사진에는 모두 남자만..;; )



사진에는 안나와 있지만 줄을 서있는 도중 줄의 끝을 알 수 없는 문제가 발생했다. 스태프가 줄 끝에 서있어야 하는데 줄 끝을 알고 있는 스태프가 아무도 없었던 것. 스태프에게 어디가 제대로 된 줄이냐며 묻는 사람들이 있었다. 그래도 소리지르는 사람은 하나도 없었다. 정말로 문의하는 수준. 그리고 크게 화내지도 않고 조용히 기다리는 모습이었다. 스태프가 어딘가를 갔다 오더니 곧 정리를 해줬기에 문제는 곧 해결됐다. 하지만 아직 내가 섰던 줄이 제대로 된 줄이었는지는 잘 모르겠다. 스태프가 좀 어리바리한 느낌이었음.



행사 시간이 다 되어 입장하는 중이다. 미동하지 않는 줄에 서있다가 줄이 줄어들기 시작하니 시작한다는 기대감에 즐거워지기 시작했다. 여기가 거의 입구 바로 앞인데 내가 입장한 후에도 상당히 많은 사람들이 계속 입장했다.



행사장에 준비된 아침식사. 아무것도 못먹고 나온터라 몇 개를 집었다. 미국의 컨퍼런스는 비싸기는 하지만 이런 형태로 돌려주는 것들이 꽤 있다. 특히 잘나가는 회사에서 주최하는 행사일수록 이런 부분에서 후하다는 느낌을 받는다. 빵과 함께 바나나와 사과도 집었는데 사과는 결국 맛을 못보고 체크아웃 하면서 호텔에 버리고 왔다.



이번 행사의 경우 키노트 발표장의 혼잡을 줄이기 위해서였는지 등록한 순서에 따라 입장할 수 있는 곳이 나뉘었다. 나는 행사 당일 아침에서야 등록을 했기 때문에 키노트를 발표하는 행사장에 들어갈 수 없었다. 그러나 행사 전날 오후에 등록했던 다른 일행들은 키노트 행사장에 입장할 수 있었다. 이곳에서는 대형 화면을 통해 키노트 행사장을 중계해주고 있었다. 일정의 문제로 일찍 등록을 하는 대신 다른 일정을 선택한 것이기는 하지만 막상 키노트 행사장에 들어가지 못하니 아쉽긴 했다. 일정의 앞부분이 여유롭지 못했는데 아마 내 지갑에서 비용을 내는 것이 아닌 이상 어쩔 수 없는 부분일듯.



행사장에 들어가는 사람과 그렇지 못한 사람의 차이는 팔에 찬 태그의 끈 색에 따라 달랐다. 내 끈은 오렌지 색이었지만 행사장에 들어갈 수 있는 사람들의 끈 색은 파란 색이었다. 나중에 보니 녹색, 회색 등의 다른 색도 있었는데 키노트 행사장에 들어갈 수 있다는 것을 제외하고는 차이가 없었다.



키노트 시작 전에는 기다리는 사람들을 카메라에 비춰주기도 하고 핑퐁 게임을 하는 모습을 보여주기도 했다. 사진에는 없는데 행사장에 ㄷ자 모양으로 스크린을 꾸며 한쪽 끝에서 다른 쪽 끝까지 공이 움직이는 핑퐁 게임을 계속 보여줬다. 처음에는 화면을 왜 ㄷ자 모양으로 과도하게 꾸몄을까 의문이었지만 키노트를 보며 그런 의문은 자연스럽게 해소됐고 도리어 목적에 맞는 훌륭한 구성이라고 생각하게 될 정도였다.



키노트가 시작됐다. 이날의 키노트는 사람들에게 많은 호응을 받지는 못했다. 큰 박수도 한 번에 그쳤고 그마저도 기술이나 서비스의 중요한 내용을 발표할 때가 아니라 사진을 무제한 올릴 수 있다는 사실을 발표했을 때 터져나왔다. 때로는 연사가 발표를 하고 한 박자 있다가 조그맣게 박수가 나오는 모습을 보며 꽤 안타까웠다. 하지만 그만큼 새롭다고 할만한 것이 별로 없었다. 아니면 참석자들의 기대 수준이 너무 높았을지도.



이번에도 작년과 같은 카드보드를 참석자에게 줬다. 작년 버전에 비해 좋아진 점은 1. 6인치의 큰 폰을 사용할 수 있으며 2. 조립 단계가 3단계로 간략화된 것이었다. 작년 처음 카드보드를 봤을 때의 놀라움은 아직도 생생하게 기억하지만 새로 받은 카드보드는 아직 사용해보지 못했다. 못받은 사람도 있는 것으로 봐서는 누군가가 두 개씩 가져가기도 한듯.



행사장 1층에 마련된 I/O 2015 조형물.



작년에는 교실처럼 구획을 나눠놓았다고 하는데 올해는 넓은 공간에 위와 같이 거의 공개된 형태로 공간을 꾸며놨다. 이 외에도 반쯤 열린 공간과 강의실같은 - 일반적인 컨퍼런스에 가면 쉽게 접할 수 있는 - 공간으로 구성되어 있었다. 하지만 세션의 인기에 비해 공간이 너무 좁아 공간을 나누는 벽 뒤에서 들을 수 밖에 없는 경우도 매우 많았다. 뭔가 듣기에 좋은 형태는 아니었다. 실제로 공간에 비해 사람이 너무 많아 몇 개 세션은 듣기를 포기한 경우도 있었다.



행사장 전경. 



3층은 주로 데모를 볼 수 있는 곳으로 구성되어 있었다. 사진은 개인들이 꾸민 안드로보이를 등록하면 합창을 하도록 만들어둔 곳이다. 이 옆에는 스티커를 출력해주는 곳도 있었다. 두 번째 날, 안드로보이를 만들어 스티커를 요청하는 것까진 잘 했는데 결국 내 스티커를 받지는 못했다. 아마 전송이 성공하지 못했거나 누락되었거나 다른 사람이 가져간듯.



구글이 발표한 Expedition의 촬영장비. 16대의 고프로를 연동해서 촬영을 한다. 개인적으로는 안드로이드보다 Expedition과 같은 VR쪽에 더 관심이 갔다. 키노트에서도 보여줬듯 이미 파일럿으로 찍은 컨텐츠는 교육 현장에서 카드 보드를 사용하여 활용하고 있었다. 장비의 크기를 생각하면 카메라로 사진을 찍는 것만큼 촬영이 쉽지는 않겠지만 그 효과는 엄청날 것 같다.


구글이 키노트에서 발표한 Expedition 동영상.



Expedition과 함께 내 관심을 끈 기술. 저렇게 매달린 고정된 카메라를 사용하여 360도를 돌아가며 볼 수 있게 해준다. 백문이 불여일견. 동영상을 보면 쉽게 이해할 수 있을 것이다. 프로젝트의 정확한 이름이 기억나지는 않는다. 처음에는 카메라가 돌아가는 형태인 것으로 생각했는데 카메라가 고정되어 있어 이상하다는 생각을 했을 정도. 이 외에도 프로젝트 Tango라는 AR을 활용하는 데모가 전시되어 있었다. 국내 업체 중에는 SKT(P?)에서 데모를 제출했는지 관련자 분들이 몇 분 데모를 확인하고 있었다. 





강의실과 같은 곳으로 들어가면 이렇게 일반적인(?) 컨퍼런스의 모습을 만날 수도 있다. 재미있는 것은 들어갈 때 위 사진에 있는 태그를 찍는다. 스태프가 핸드폰으로 태그를 찍으면 행사 신청 후 별도로 등록했던 사진이 화면에 나타나면서 본인이 맞는지를 확인한다. 출첵이라도 하는 것은 아니겠지?



듣고 싶은 세션이 없을 때는 이렇게 마련된 공간에서 사람들과 이야기를 나누기도 하고 직접 컴퓨터를 가지고 데모를 만들어보기도 했다. 한쪽에는 직접 만들어볼 수 있는 환경이 만들어져 있기도 했다.



일층에 전시된 안드로보이.



행사장 이층에는 실제 구글의 개발자들과 질문하고 토론할 수 있는 공간이 있었는데 거기서 필기할 수 있도록 만들어 둔 종이 롤이다. 저렇게 해놓고 다 쓴 후에는 종이를 다시 꺼내어 새롭게 글을 쓸 수 있는 여백을 만든다. 각 세션의 시간표도 이와 비슷하게 종이를 가지고 만들었는데 재미있는 모습이었다.



행사장 외벽에 구글 IO 행사가 진행 중임을 알려주는 표시가 붙어 있다.



첫 날 일정이 모두 끝난 후에는 파티를 하기 위해 근처의 Yerba Buena Gardens로 향했다. 이곳에서 구글 IO 참석자들을 위한 파티가 열린다.



행사장은 넓었고 먹을 것과 마실 것이 무제한(?) 제공되고 있었다. 그런데 날이 추워서 반쯤은 추위에 떨었던 듯. 설마 하고 두꺼운 옷을 가져가지 않았는데 시간이 갈수록 너무 추웠다. 저녁 때의 샌프란시스코의 온도는 대략 12도 근처였던 것으로 기억한다. (한국에서 출국하던 날 한국의 기온은 30도였다.)



이 곳에서 노래를 부르기도 했다고. 너무 날이 추워져 행사가 마무리되는 것을 보지 않고 일행들과 함께 근처의 식당으로 향했다.


이렇게 첫 날 일정을 마무리했다.


nundefined ETC Android, expedition, Google, google io, 구글, 구글IO, 안드로이드

Google Hangouts manifest.json 정리

2013. 8. 6. 01:30

개인적으로 크롬 확장 프로그램(또는 크롬 익스텐션)에 관심이 있는 편이다. 그래서 이전에 간단한 확장 프로그램을 만들어보기도 했고. 크롬 확장 프로그램을 실행시키기 위해 필요한 파일 중에 하나가 manifest.json인데 Google Hangouts의 manifest.json을 예제로 삼아 간단히 정리해봤다. Hangouts가 manifest.json의  모든 항목을 사용하는 것은 아니므로 manifest.json의 전체 내용을 파악하긴 어렵지만 시작점으로는 충분히 의미있으리라 생각한다.


{

   // background 페이지는 익스텐션의 프로세스를 실행한다.

   // extensions의 기본 lifecycle에 대한 이해가 필요함

   // html이 필요 없는 경우 'scripts'를 name으로 하고 javascript 파일의 배열을 value로 설정 가능

   // 브라우저가 빨리 시작되어야 하는 경우에는 permission에 background를 설정한다.

   "background": {

      "page": "background.html"

      // 여기에 persistent를 설정할 수 있는데 특별한 설정이 없다면 true로 설정된 것

   },


   // 브라우저 액션을 위한 설정. 툴바 우측에 아이콘이 생긴다.

   "browser_action": {

      "default_icon": {

         "19": "images_2/presence/offline_19.png",

         "38": "images_2/presence/offline_38.png"

      },

      // 아이콘에 마우스를 올렸을 때 나타나는 툴팁

      "default_title": "__MSG_CHROME_EXT_SHORT_NAME__"

   },


   // 웹페이지의 컨텍스트에서 실행되는 자바스크립트 파일

   // DOM을 사용하여 브라우저의 내용에 접근, 변경이 가능

   "content_scripts": [ {

      // 아래 matches로 선택한 페이지에서 모든 프레임에 삽입할지, top 프레임에만 삽입할지 여부

      "all_frames": true,

      // 대상 페이지에 삽입할 javascript. 배열에 표시된 순서대로 삽입됨

      "js": [ "scripts/ace-contentscript.js" ],

      // 필수. js를 삽입할 대상 페이지를 결정하는 규칙

      "matches": [ "*://*.google.com/mail/*" ],

      // js가 삽입될 때를 지정.

      // document_start: css 다음에 삽입

      // document_end: DOM이 완료되면 삽입. (DomContentLoaded)

      // document_idle: 기본값. document_end와 window.onload 이벤트 사이에서 브라우저가 적절히 삽입

      "run_at": "document_start"

   }, {

      "all_frames": true,

      // 조건에 맞는 URL은 대상에서 제외.

      "exclude_globs": [ "*prop=docs*" ],

      "js": [ "scripts/ace-contentscript.js" ],

      "matches": [ "*://*.google.com/talkgadget/notifierclient*" ],

      "run_at": "document_end"

   }, {

      "all_frames": true,

      "exclude_globs": [ "*prop=docs*" ],

      "js": [ "scripts/ace-contentscript.js" ],

      "matches": [ "*://*.google.com/talkgadget/_/chat*" ],

      "run_at": "document_end"

   }, {

      "all_frames": true,

      "exclude_globs": [ "*prop=docs*" ],

      "js": [ "scripts/ace-contentscript.js" ],

      "matches": [ "*://*.google.com/u/*/talkgadget/_/chat*" ],

      "run_at": "document_end"

   } ],


   // 기본 보안 제약

   // 1. eval 및 동일한 기능을 사용하여 문자열로 된 스크립트 실행 불가

   // 2. inline 스크립트 실행 불가

   // 3. local script와 객체 리소스만 로드 가능

   //

   // inline script 보안 해제: unsafe-inline

   // remote script/object 보안 해제: 필요한 origin 등록

   // eval 보안 해제: unsafe-eval

   "content_security_policy": "script-src 'self' https://*.google.com https://feedback.googleusercontent.com ; object-src 'self'",


   // _locales의 서브디렉토리를 지정한다. _locales 디렉토리가 있는 경우에는 필수

   // _locales 디렉토리가 없다면 빠져야 한다.

   "default_locale": "en",


   // 132자 이내의 설명. management ui와 스토어에 모두 노출됨

   "description": "__MSG_CHROME_EXT_DESCRIPTION__",


   // 아이콘

   // extensions의 경우 128x128과 48x48이 필수

   // 16x16의 경우 favicon용

   "icons": {

      "128": "images_2/icon-128x128.png",

      "48": "images_2/icon-48x48.png"

   },


   // 개발 과정에서 extension의 유일한 Id를 만들기 위해 사용.

   // crx로 패키징한 후 manifest.json 파일을 보면 확인 가능

   "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsDApubb73tPfYlNIFxDu3K3/EHgV6/YOJXJkld1OZ20jW/cOht1j0NggnXhQYuu1mXFUufud4I2N7b5ydyg09gcM9Va3Zk17RhNV9smbPHOd4XlzJeXifX/9MgHPu4FzCen3CiSXsOeAELJIXEuT28xICriuUko/rNPwGeIB9VwIDAQAB",


   // 항상 2

   "manifest_version": 2,


   // 최소 실행 가능한 크롬 버전

   "minimum_chrome_version": "26.0.0.0",


   // extension 이름. 45자 이하. install dialog, management ui, store에 노출

   // i18n을 사용하기 위해 아래와 같이 설정하고 프로그램에서 변경 가능

   "name": "__MSG_CHROME_EXT_SHORT_NAME__",


   // extension의 동작을 결정하는 옵션을 수정할 수 있는 페이지

   "options_page": "settingsdialog.html",


   // extensions에서 사용할 권한, API, 접근할 도메인 등등

   // 패턴: 접근 가능한 호스트. cross-origin XHR, cookie, 프로그램적으로 삽입되는 컨텐트 스크립트 등

   // background: 크롬이 빨리 뜨고 늦게 종료되도록하여 extension이 더 오래 살아있도록 함 (크롬 실행되지 않아도 extension 실행)

   // cookies: chrome.cookie 모듈 사용시

   // idle: chrome.idle 모듈 사용시

   // notifications: 권한 확인(checkPermission()) 없이 notification API 사용

   // tabs: chrome.tabs 또는 chrome.windows 모듈 사용시

   "permissions": [ "*://*.google.com/*", "*://*.orkut.com/*", "background", "cookies", "idle", "notifications", "tabs" ],


   // NPAPI plugins 설정

   "plugins": [ {

      // plugin 위치. manifest 파일로부터의 상대적 경로

      "path": "plugin/ace.dll",

      // 웹 페이지에서 접근 가능 여부

      // true: 일반 웹 페이지에서 로드 가능

      // false: extensions에서만 로드 가능

      "public": false

   }, {

      "path": "plugin/ace.bundle",

      "public": false

   }, {

      "path": "plugin/libace.so",

      "public": false

   } ],

   "requirements": {

      "plugins": {

         "npapi": false

      }

   },


   // 자동 업데이트를 위한 경로 설정

   "update_url": "https://clients2.google.com/service/update2/crx",


   // .으로 구분하는 4개의 숫자. 0 ~ 65535에서 사용. 0으로 시작할 수 없음.

   // 자동 업데이트시 이 숫자를 기준으로 삼는다.

   // 앞 자리의 숫자가 크면 뒷 자리의 숫자와 관계 없이 새로운 버전 (ex. 1.2.0 > 1.1.9.999)

   "version": "2013.717.433.1",


   // 웹에서 직접 접근 가능한 extensions의 리소스

   "web_accessible_resources": [ "*" ]

}


manifest.json 파일의 전체 내용을 알고 싶다면 크롬 개발자 사이트의 manifest 파일에 대한 페이지를 방문해보기 바란다.




nundefined ETC Chrome, chrome extensions, extensions, Google, google hangouts, hangouts, manifest, manifest.json, 구글, 크롬, 크롬 익스텐션, 크롬 확장 프로그램

  1. Blog Icon

    비밀댓글입니다

일주일간 모은 링크 #6

2011. 4. 25. 11:43
Google URL Shortener gets an API
구글의 단축 URL서비스인 goo.gl의 API가 드디어 오픈되었습니다. 이미 bit.ly등 단축 URL 서비스를 제공하는 다른 곳에서도 제공하고 있기 때문에 빠른 시간 내에 오픈될 것으로 기대하던 참입니다. bit.ly같은 경우 이미 많은 서비스에서 사용하고 있기 때문에 굳이 구글을 기다릴 필요는 없었지만 구글이라면 뭔가 다르지 않을까 하는 기대가 있었나 봅니다. 아직 랩에 등록된 API이므로 예고 없이 변경될 수 있다는 부분이 아쉽다면 아쉬운 부분이네요. 

JavaScript에서 네임스페이스를 이용하여 구조적으로 JavaScript를 짤 수 있는 방법에 대해 설명하고 있습니다. 네임스페이스를 사용하면 코드를 다른 코드의 영향을 받지 않도록 작성할 수 있습니다. 또한 전역 변수를 사용할 경우 변수명을 모호하게 지정하거나 변수명이 충돌할 수도 있는데 이런 문제를 근본적으로 해결할 수 있습니다. (전역 변수를 사용할 경우 variable scope으로 인해 실행 속도에 영향을 주기도 합니다.) JavaScript로 복잡한 프로그램을 작성해야 한다면 이 글을 읽고 한 번 적용해보면 어떨까요?

오래된 스타일의 JavaScript에 대한 이야기입니다. 동작하는 데는 문제가 없지만 더이상 추천받지 못하는 코드를 소개하고 있습니다. 유지보수하기 어려운 코드라거나 성능상 문제가 있는 코드 등 몇 가지 피하면 좋을 코드 패턴을 정리해두고 있습니다. 복잡한 공부를 하지 않고도 이 글을 읽고 적용해보는 것만으로도 두고두고 도움이 될 코드를 만들 수 있을 것으로 생각합니다.

작년 Velocity 2010 워스샵에서 Maximiliano Firtman이 발표한 발표자료입니다. High performance라는 제목을 달고 있지만 앞부분에는 모바일 웹 환경에 대한 이야기를 포함하고 있으므로 모바일 웹 환경에 대한 기본적인 이해를 하기에도 적당한 자료입니다. 여기서 소개하고 있는 블로그의 경우 모바일 웹에 대한 좋은 자료가 많이 올라오고 있으므로 모바일 웹에 관심있는 분이라면 이 블로그를 관심있게 살펴보셔도 좋을 것으로 생각합니다.

자바스크립트 코드의 품질을 측정하는 툴로써 유명한 Douglas Crockford의 JSLint가 업데이트 되었습니다. 자바스크립트 코드의 품질을 측정하는 툴이 몇 가지가 더 있는 것으로 알고 있습니다만 JSLint 만한 것이 없죠. 여러분이 작성한 자바스크립트 코드가 얼마나 건강한지 궁금하다면 jslint.com을 방문하여 여러분의 코드를 확인해보기 바랍니다. 단, JSLint를 실행시키고 난 후에는 여러분의 기분이 상할 수 있으니 주의하기 바랍니다. 

정규 표현식을 편집할 수 있는 도구입니다. 정규 표현식과 테스트 대상 코드를 넣으면 실시간으로 선택결과를 표시해줍니다. 페이지에는 간단한 레퍼런스도 제공하고 있으니 정규 표현식에 익숙하지 않은 경우 이 페이지에서 표현식을 수정해가며 원하는 정규 표현식을 만들 수 있을 것입니다.

간단한 북마크 형태로 제공되는 JavaScript performance 도구입니다. 페이지의 DOM과 다른 부분들을 분석하여 어떤 부분을 개선하면 좋을지 안내해줍니다. 여기서 안내해주는 모든 가이드를 적용할 것인지는 각자의 몫이지만 한 번씩 검토해보면 좋을 내용들을 안내해주고 있습니다. 개인적으로는 엘리먼트의 갯수나 노드의 갯수를 알려주는 프로그램이 필요했는데 이 프로그램으로 간단하게 해결할 수 있게 되어 좋네요.

nundefined HTML5_JS_CSS API, bit.ly, dom monster, douglas crockford, goo.gl, Google, javascript, jslint, Mobile Web, Namespace, Performance, regex, Regular Expression, rejex, URL Shortener, variable scope, 자바스크립트