2008/09/05 02:30

구글 크롬(Chrome) 브라우저 문제

얼마전 구글에서 배포한 크롬 브라우저를 테스트 해보았습니다. 엘리먼트 드로잉 속도는 정말 쾌적하더군요. 하지만 매우 심각한 오류가 유발 될 소지가 있어 이를 해결하고자 제가 처한 환경에서 여러가지 삽질을 해봅니다. 우선 조취해야 한 것은, navigator.userAgent 정보가 AppleWebKit(사파리)과 거의 흡사하여 사파리에 대한 예외처리로 집입할 우려가 있어 아래와 같은 코드를 추가했습니다.

크롬 브라우저 및 사파리 브라우저 발견 스크립트 추가 및 오버라이딩 :
Prototype.Browser.Chrome = !!navigator.userAgent.match('Chrome');
Prototype.Browser.WebKit = !Prototype.Browser.Chrome && Prototype.Browser.WebKit;

위와 같은 조치만으로 다수의 오류를 잡을 수 있었습니다. 특히 LazyLoader와 같은 동적 자바스크립트 호출을 사용한다면 무한 루프로 진입하게 되는 현상을 방지할 수 있습니다. 두번째 문제로는 크롬 브라우저가 특정 사이트에 처음 액세스 하는 경우(케시되기 전)에는 정상적으로 작동합니다만, 케시되고 난 후에 Prorotype이 먹통이되는 사태가 발생합니다.

정상적인 초기화


초기화 오류



typeof Element.prototype.setStyle; // "undefined"
typeof HTMLElement.prototype.setStyle; // "undefined"
typeof HTMLDivElement.prototype.setStyle; // "undefined"
typeof document.createElement('div').setStyle; // "function"

한참동안 꼼수를 부려봤지만, 답은 안나오고 하는 수 없이 브라우저 이슈로 넘겼습니다.(콘솔창만 열면 오류가 발생하는 것으로 보입니다.) 구글이 자바스크립트가 통용되는 버전을 만들어 줄 것이라 믿어 의심치 않습니다.

파이어준 | 카테고리 : 자료 - 웹개발 | 조회(376) | 엮인글 | 댓글(4) |


2008/09/02 22:34

스토리엔(StoryN) 프로젝트 런칭

프로젝트 진행하느라 그동안 블로그에 너무 소홀했습니다. 스스로가 블로그를 낯설게 느끼고 있을 정도니 드릴 말씀이 없군요. 그저 죄송할 따름입니다. 어찌됐건 프로젝트는 성공적으로 오픈했습니다. 이번 프로젝트가 이직한 회사에서 첫 번 째 결과물이 되겠네요. 약 4개월 전부터 본격적으로 시작하여 이런저런 우여곡절 끝에 결국 세상으로 등을 떠 밀었습니다. 막판 스파트에서는 하루 21시간 코딩하기, 24시간동안 단식 코딩하기, 3일 연짱 철야하기, 주말 반납 등 식음을 전폐하며(거의 목숨 내놓고) 작업했습니다. 이자리를 빌어 생사를 같이한 직장 동료 여러분께 마음속 깊이 감사의 뜻을 전합니다. 저의 역활은 UI를 개발하는 주업무와 프로젝트를 총괄하는 것이었습니다. 팀장 해쳐먹기(?)가 쉽지만은 않더군요. 각설하고, 아래 보이는 화면이 바로 이번에 런칭한 스토리엔(StoryN) 프로젝트입니다.

달력과 일정 자세히 보기

약속에 기반을 둔 SNS(Social Networking Service)로써, 복잡-다양한 욕구(demerit wants)를 가진 사용자에게 그들만의 친숙한 환경(degree of freedom)에서 이익(benefit)을 챙길 수 있게하자는 철학이 담겨 있습니다. 홈, 할 일, 달력, 공책으로 이루어진 개인 페이지들은 목적을 가진 도구로 구분하였으며, 사용자의 컨텐츠 생산을 이롭게하기 위해 작은 단위의 편리성을 추구했습니다. 한 건의 아티클 생산하는 것으로 시작하여 광범위한 공유 세상을 누릴 수 있게 하는 컨셉입니다. 말은 그럴싸 합니다만, 현실은 너무나도 동떨어져 있더군요. 쉽게 말씀드리면, to do, calendar, document, gallery를 짬뽕해서 만들고 서로 소통, 공유, 협업할 수 있는 서비스로 보시면 되겠습니다. 아티클 공유는 물론, 그룹 공유, 범주공유 등 다양한 공유형태를 갖춰놓고 있습니다. 그리고 부분 브라우징 방식으로 비교적 생소한 UI를 가진 것이 특징인데, Ajax를 남발하여 제각각 다른 목적을 담은 여러 섹션들이 유기적으로 작동하거나 독립적으로 임무를 수행하며, 플러그인처럼 때어 내거나 붙여 넣을 수도 있습니다. 말로 설명하기 참 모호하군요. 직접 채험해 보시면 이해가 빠를 것입니다.

현재 키인증 방식의 클로즈 베타를 진행하고 있습니다. 아직 버그도 많고 미비된 부분도 있습니다만, 테스터로써의 참여의사가 있으신 분은 비밀글로 이메일 주소를 남겨주시면 키를 발송해 드리도록 하겠습니다. 많은 관심과 참여 부탁드립니다.


2008/06/15 12:49

RSS 구독 분석 위젯 - AjaxSubscription

'갑자기 내 블로그의 RSS는 몇명이나 구독하고 있을까?'하는 의문이 생겨 구글링하다가 재미있는 사실을 발견 했습니다. 구글은 RSS를 크롤링 할 때 UA(User-Agent)에 다음과 같은 정보를 던집니다.
User-Agent: Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 4 subscribers; feed-id=1794595805790851116)

크롤러의 이름과 URL, 구독자 수, 그리고 피드ID를 알려 주는 것이죠. 여기서 피드ID는 블로그 운영 중에 RSS URI를 변경한 경우에 여러개가 생겨날 수 있는데 이를 구분하기 위한 것입니다. 아무튼, 혹시나 다른 RSS 크롤러들도 위 룰을 따르고 있는지 살펴보니, 구독자 수를 남기고 퍼가는 크롤러들이 상당수 있었습니다. Feedfetcher-Google(구글 리더), HanRSS, Bloglines, Fastladder 등이 subscribers 정보를 가지고 있더군요. 그래서 자동으로 갱신되는 구독자 수 모니터링 위젯을 만들어 보기로 마음먹었습니다. 막상 저지르고 보니 대부분 서버단 작업이여서 상당히 곤욕스러웠어요. 작업 내용을 요약하면 다음과 같습니다.

1. 종전의 rss로 접근 URI를 모두 rss.php로 포워드한다. 주의, 리다이렉트한 경우 UA값을 손실 함.
2. UA 정보를 가져오기 위해 파싱된 rss.xml 파일을 rss.php 파일에서 불러온다.
3. rss.php에서 가로챈 UA를 DB에 로깅한다. 하루동안의 데이터만 쌓이도록 쿼리.
4. MySQL에 새 테이블을 추가한다.(index, useragent, regdate 로 구성된 간단한 테이블)
5. Ajax로 접근할 subscribe.php파일을 생성하고 필요한 파일들을 include한다.
6. DB에서 긁어온 UA정보를 토대로 다양한 필터링을 통해 여러가지 통계자료를 산출 한다.
7. 산출한 자료를 JSON으로 파싱한다.
8. JSON을 불러와 아래와 같은 출력 결과물을 만든다.

AjaxSubscription


위 결과물은 하루간 쌓인 실제 데이터(약 3-4000행)를 산출한 것입니다. Ajax를 통해 호출하고 30초마다 자동 갱신됩니다. subscribers 정보를 제공하는 크롤러는 10여종이며, 나머지는 "알 수 없는 구독기"로 분류했습니다. 로봇을 제외하고도 자그마치 50여종이나 되는군요. 어쨋거나 완벽한 RSS 구독자 수를 알아내는 것은 불가능 하겠지만 매우 신빙성 있는 일부분을 한눈에 알아볼 수 있게 되었습니다. UA에 subscribers를 정보를 작성하는 것은 RFC에서 권고하고 있는 내용이라고 하네요. 국내 RSS서비스 중에는 HanRSS밖에 없습니다. 앞으로 이 권고를 따르는 RSS 리더 웹 서비스가 더욱 많아졌으면 하는 바램입니다.

덧, 여기저기 퍼다 쓴 것이 너무 많아 php소스를 공개하지 못하는 점 양해 바랍니다.


▲ 이전 글 : 첫 페이지입니다.
▼ 다음 글 : 애플의 새 서비스 모바일미(MobileMe) 그리고 웹

authority