하이브리드앱, 웹앱, 네이티브앱 비교

하이브리드앱, 웹앱, 네이티브앱 비교


○ 네이티브 앱은 스마트폰에 설치해서 사용하는 앱을 말한다.
현재 스마트폰에서 다운로드 받아서 설치하는 앱이 대부분은 네이티브 앱이다.

-  모바일 기기에 최적화된 언어로 개발
-  앱스토어, 마켓에서 앱을 다운받아 스마트폰에 설치 및 실행하는 프로그램이다.
-  스마트폰에 있는 모든 기능을 활용(카메라, 후레시 등)할 수 있다.
-  스마트폰 운영체제에 있는 커널등이 제공하는 서비스를 직접 호출하여 실행하므로 실행속도가 매우 빠르고 안정적이다.
-  고성능의 그래픽 처리로 2D 및 3D 게임이나 증강현실과 같은 앱을 개발할 수 있다.
-  특정 플랫폼에서만 동작하여 앱스토어를 통해 업데이트가 가능하기 때문에 업데이트가 느린 단점있다.
-  해당 운영체체나 플랫폼이 다르면 많은 시간과 비용을 감수하여 새롭게 개발해야하는 단점이 있다.

 

 

○ 모바일앱(웹앱)은 모바일 웹사이트라고 보면 된다.

-  스마트폰 브라우저로 본다.
-  데스크 탑 브라우저에서 보는 웹 페이지를 스마트폰 화면 크기로 줄여 놓은 것이다.
-  HTML, CSS, Javascript, JSP, PHP, ASP, ASP NET등 일반적인 웹 기술로 개발한다. 표준화된 개발이라는 장점이 있다.
-  풀 브라우징 방식으로 페이지를 이동해 앱에 비해 접속속도가 느리다.
-  모바일 기기의 특성상 이동 중에 서버 접속 장애가 발생할 수 있어 끊어질 수 있다.
-  애플 앱스토어, 안드로이드 마켓에서 등록, 판매할 수 없다.
-  스마트폰의 고유정보 및 하드웨어를 제어할 수 없다.
 


 

○ 하이브리드 앱은 네이티브앱과 모바일앱의 장점을 결합한 것이다.

-  웹앱을 네이티브 앱으로 포장한 것이다.
-  웹 기술로 개발되었지만 모바일에 최적화된 언어로 만드는 네이티브 앱처럼 보이게 하는 것이다.
-  네이티브앱의 형태이므로 앱스토어나 마켓에 등록할 수 있다.
-  모바일의 고유정보를 이용하고 하드웨어 제어한다.
-  외부 형태는 네이티브 앱이지만 실제 내부는 모바일 웹앱으로 실행한다.
-  별도의 하이브리드 앱 프레임워크 필요하다. 폰갭(PhoneGap), 앱스프레소(Appspresso), 티타니움(Titanium) 

 

 

 

아래와 같이 몇개의 항목에 대해서 비교했다.






싸이월드 sns로 개편, 성공할 수 있을까?

싸이월드 sns로 개편, 성공할 수 있을까?



한시대를 풍미했던 싸이월드가 대대적인 개편을 맞이한다고 합니다.

한때 젊은이들 사이에서 폭발적인 인기를 끌면서, 대부분의 사람들이 했던
싸이월드...

트위터나 미투등의 sns서비스의 성장과, 블로그, 페이스북의 성장등에 맞물려
조금씩 조금씩 실이용자수가 줄어들고...

네이트와 합병으로 인해, 싸이월드 사용자들은 오히려 더 불편함을 느끼며
다른 서비스를 찾아 떠났습니다.


그렇게 점점 사라질것만 같아 보이던 싸이월드가 이번에 sns서비스로
새롭게 개편을 한다고 하네요.


sns서비스는 기존의 싸이월드 어플리케이션을 대대적으로 개편해서
ios와 안드로이드로 서비스를 시작한다고 합니다.

모바일의 특징을 살려, 다양한 기능을 넣어서 싸이월드만의 독특한 sns서비스를
개시한다는것이 sk컴즈의 목표인데..

과연 이러한 싸이월드의 개편이 성공을 맞이 할 수 있을지 의문입니다.


보통 한번 떠난 이용자들은....다시 돌아가기가 매우 힘듭니다.

이미 싸이에 대한 흥미를 잃은 사용자들을 다시 끌어들이기엔 메리트가 너무
부족한것이 아닐까요?

그리고 기존 사용자들의 경우 트위터나 미투, 페이스북등을 이미 활성화해서
잘 이용하고 있는데, 다시 싸이월드로 돌아갈만한 이유가 없는거 같습니다.

저같은 경우에도 싸이월드가 개편을 한다고 해서, 다시 싸이를 할 생각은 없거든요...


sk컴즈의 노력이 어떤 결과를 이루게 될지 모르지만.....
모쪼록 앞으로 싸이월드의 행보를 기대해 봅니다 


[정보] PDO MySQL 의 prepare emulate 여러분은 모두 속고 있었습니다.

[정보] PDO MySQL 의 prepare emulate 여러분은 모두 속고 있었습니다.



http://kr1.php.net/manual/en/pdo.setattribute.php 


PDO::ATTR_EMULATE_PREPARES Enables or disables emulation of prepared statements. Some drivers do not support native prepared statements or have limited support for them. Use this setting to force PDO to either always emulate prepared statements (if TRUE), or to try to use native prepared statements (if FALSE). It will always fall back to emulating the prepared statement if the driver cannot successfully prepare the current query. Requires bool. 


실제 바인딩이 되는 드라이버인지 구별하지 않고 에뮬레이트 되는 것이 기본 동작입니다. 

직접 false 값을 주기 전엔 속도상의 이득이 전혀 없습니다. 


에뮬레이트 되고 있는지 구별하는 방법 

SELECT * FROM table LIMIT :limit OFFSET :offset 

했을 때 값을 문자열 취급해서 오류납니다. 


License : null

[브라우저] 개발자용 파이어폭스 소개

[브라우저] 개발자용 파이어폭스 소개




파이어 폭스에서 개발자 전용 브라우저를 출시 했습니다. 디자인도 아주 멋집니다. 개발자라면 꼭 설치해보세요. 웹 프론트 엔드 개발에 필요한 많은 도구들이 기본적으로 탑재되어 있습니다. firebug로 인해서 웹개발의 명가였던 파이어폭스가 과연 크롬으로부터 웹개발의 주도권을 다시 가져올 수 있을지 기대되는 대목입니다. 


생활코딩에서 만든 소개 영상은 아래 URL을 참고해주세요. 

http://opentutorials.org/course/128/8589 


파이어폭스 개발자 버전은 아래 주소를 통해서 다운 받을 수 있습니다. 

https://www.mozilla.org/en-US/firefox/developer/

[지메일(Gmail)] 안읽은 메일을 읽은상태로 표시하기

[지메일(Gmail)] 안읽은 메일을 읽은상태로 표시하기






최근 지메일에 관심이 참 많아졌습니다. 수신확인도 안되고, 용량도 별루고, 한국인 입맛에 전혀 맞지 않는 기능들로 인해 그동안 사용을 안하고 있었는데....구글 캘린더,할일을 본격적으로 활용하고, 블로그랑 SNS도 점점 관심을 가지게 되었으며 특히 구글계정의 다른 서비스들을 너무 많이 이용하고 있기에 지메일 사용을 안할 수가 없더라구요. 그래서 나름대로 구글 지메일을 최대한 유용하게 사용할 수 있도록 세팅해놓고 현재는 만족하게 사용하고 있습니다.  



그래서 오늘부터 가볍게 구글 지메일과 관련된 팁과 노하우를 공유해드릴까 합니다. 


구글 지메일을 처음접했을때 가장 당황했던 것이 바로 읽은상태 표시입니다. 구글메일은 기본적으로 안읽은 메일을 읽은상태로 표시하는 기능이 없습니다. 하지만 아주 간단하게 해당 기능을 생성할 수 있습니다.


아래 보시는 것처럼 메일함 상단에 <읽은상태로표시>아이콘이 보이시나요? 이제 메일을 체크한 후 버튼한번만 누르면 자동으로 읽은상태로 표시가 됩니다.  





적용방법은 매우 쉽습니다.  지메일 환경설정 > 실험실 > "'읽은상태로표시'버튼에 사용체크만 클릭하시면 됩니다. 





어떤가요? 지메일 물론 처음에는 전혀 사용할 맛이 안나지만 이렇게 하나둘씩 내 입맛에 맛게 설정하다보면 충분히 효과적인 이메일로 활용할 수 있습니다. 쉽지만 꼭 필요한 기능들 하나둘씩 적용해보시기 바랍니다. 




[지메일(Gmail)] 안읽은 메일만 골라보기

[지메일(Gmail)] 안읽은 메일만 골라보기


[지메일(Gmail)] 안읽은 메일만 골라보기 


구글 지메일의 받은편지함은 기본적으로 날짜순서대로 메일이 정렬됩니다. 안읽은메일함이 없다고 당황하지 마세요. 원클릭으로 안읽은메일을 골라볼 수 있습니다.



받은편지함에 마우스를 올려두면 우측으로 설정 화살표가 보여집니다. 클릭하면 기본, 중요한 메일부터, 읽지않은 메일부터, 별표표시한 메일부터 등 여러가지 노출옵션이 존재합니다. 여기에서 "읽지않은메일부터보기"를 클릭하시면 됩니다. 




본인 역시 기본적으로 읽지않은 메일부터보기로 설정해두고 사용합니다. 그럼 아래와 같이 받은편지함을 클릭하면 상단으로 읽지않은메일이 먼저 노출됩니다. 물론, 이 기능은 실시간으로 본인의 입맛에 맞게 설정하여 사용하실 수 있습니다. 지메일 안읽은메일보기 참 간단하죠? 




# 참고로, 받은편지함을 설정하지 않더라도 안읽은 메일을 볼수 있는 기능은 또 있습니다. 지메일의 최대장점인 명령어 검색입니다. 검색창에서 label:unread 를 입력하시면 읽지않은메일만 즉시 검색하실 수 있습니다^^ 우리가 흔히 알고 있는 편지함 또는 카테고리라는 것은 지메일에서 '라벨'이라는 개념으로 생각해주시면 작업이 수월해질 것입니다. 많은 도움되시기 바랍니다. 



[최종신의 IT 단상] 아마존에 맞서는 국내 e북 산업

[최종신의 IT 단상] 아마존에 맞서는 국내 e북 산업



1

 

예스24가 250억원에 무려 70년 전통의 출판사 두산동아의 지분 100%를 인수하기로 했다.

두산동아는 동아전과와 백과사전으로 우리에게 익숙한 출판계의 거목으로 작년에도 매출 1630억원에 영업이익이 73억이나 나는 회사이다.

참고로 예스24는 1999년에 설립되어 올 해로 약 15년의 업력을 지닌 인터넷 서점 업체이다.

인수 금액이 매출이나 자산에 비해 턱없이 적은 이유에 대해서는 자세한 내용은 밝히지 않았으나 아마도 부채 승계를 전제로 했기 때문으로 추정된다. 그럼에도 250억이라는 인수 금액이 70년 세월의 무게에 비해서는 턱 없이 작게 느껴진다.

예스24는 두산동아 인수를 자사의 e북 사업과 연계한 전자 참고서 컨텐츠 확보에 비중을 두고 추진했다고 밝혔다. 즉 e북 사업의 경쟁력 확보를 위한 인수라고 볼 수 있다.

지금 국내의 e북 업계는 아마존의 진출 가능성이라는 최대 복병을 맞고 있다. 아마존이 진출할 경우 전용 단말기를 저가에 공급해서 단기에 시장을 석권할 수도 있다는 일종의 공포가 존재하는 것이다.

아마존이 2년 전 진출한 일본의 사례를 살펴보면 국내 업계가 가진 공포의 원인을 찾아볼 수 있다.

아마존 진출 전까지 일본의 e북 시장은 라쿠텐, 코보, 소니가 리딩하고 있었다. 하지만 아마존이 일본에 진출한 뒤 불과 1년 만에 e북 시장의 38%를 차지하게 된다.

가장 먼저 일본 e북 시장에 뛰어들었던 소니는 자국 내에서 점유율에 뒤지며 해당 사업이 힘을 얻지 못하자 해외로 넓혔던 관련 사업을 북미와 유럽 호주 등에서 철수하기에 이른다.

 

2

아마존은 과연 어떻게 일본에서 이런 성공을 거둘 수 있었을까?

바로 로컬 컨텐츠 확보에서 그 해답을 찾을 수 있다. 아마존은 일본을 공략하기 위해서 만화 1만5천 타이틀과 오리콘 100위권 책과 50위권에 드는 문고 등 일본어로 된 총 5만권의 현지 컨텐츠를 확보했다.

특히 최대 출판기업인 고단샤의 경우 그 동안 라쿠텐과 소니의 거듭되는 노력에도 불구하고 컨텐츠 제공 협상이 결렬되었었지만, 반면 아마존은 고단샤와의 협상을 성공으로 이끌며 초기 시장에서 큰 추진력을 얻게 된 것이다.

또 기존에 보유한 영어 등 다양한 외국어 책까지 포함하면 무려 100만권이 넘는 책을 킨들 단말기 등으로 공급하게 된다.

즉 질과 양 면에서 무엇 하나 빠지지 않는 컨텐츠를 초기에 확보한 것이 일본에서의 아마존 e북 사업의 성공 요인인 것이다.

최근 일본 시장에 안착하고 e북 시장의 선두업체로 장악력을 키워 온 아마존이 일본의 출판사에 등급제를 적용한다고 발표했다.

전자책을 취급하는 일본 출판사를 4등급으로 나눠 마케팅이나 온라인에서의 노출 등에서 차등 취급을 하겠다는 계획인데, 이미 올 초부터 단계적으로 실행에 옮기고 있는 것이다.

발표가 있자 대형 출판업체를 시작으로 아마존의 이러한 차등 시스템에 일본 업계는 반발하기 시작했다. 하지만 일부 업체가 이 시스템을 수용하면서 아마존의 정책에 결과적으로 전 출판계가 따를 수밖에 없지 않겠냐는 전망이 우세하다.

아마존의 진출 국가에서의 시장 장악 그 다음 단계가 어떻게 진행될 지를 잘 보여주는 사례이다.

앞서 예스24의 두산동아 인수 사례처럼 이제 국내 e북 업체가 할 수 있는 최선의 대응책은 로컬 컨텐츠 확보로 일종의 진입장벽을 가지는 것이다.

우리나라와 같은 교육 환경에서 학습 참고서는 가장 현지화된 컨텐츠라고 볼 수 있다. 일반적인 협상보다는 두산동아의 사례처럼 지분 100% 인수를 통해 확보를 공고히 하는 것이 필요한 시기인 듯하다.

그러한 자금력을 갖추지 못한 업체들은 고유한 비즈니스 모델로 저마다의 사업 영역 안에서 로컬 컨텐츠의 확보를 확고히 하는 노력이 필요하다고 보여진다.

신진 작가들의 등용문을 마련하거나 온라인으로 시, 소설 작가들과 그 컨텐츠를 일종의 큐레이션을 통해 서비스하고 있는 북팔이나, 국내 만화 창작자들과의 긴밀한 관계를 컨텐츠 확보의 핵심으로 삼아 발군의 성과를 보여주고 있는 레진코믹스는 좋은 사례라고 할 수 있겠다.

아마존이 대형 업체와의 계약으로 대량의 컨텐츠를 한 번에 확보해 나갈 수는 있어도, 이 두 업체의 예처럼 아마존의 접근성이 떨어지는 니치의 영역은 존재한다고 생각된다.

이미 국내에 e북 컨텐츠 마켓을 운영하고 있는 구글과, 향후 진출이 예고되어 있는 아마존에 맞서 국내 업체들의 전략적 대응이 빛을 발할 것인지의 여부는 결국 사업의 핵심을 이루는 로컬 컨텐츠의 확보에 달려있다고 보여진다.

[최종신 IT단상] 저커버그 삼성 방문 이유, 페북폰과 VR때문

[최종신 IT단상] 저커버그 삼성 방문 이유, 페북폰과 VR때문



1

 

페이스북의 창업자 마크 저커버그가 한국을 방문했다. 아니 한국을 방문했다기 보다 삼성을 방문했다고 하는 표현이 더 맞을 것이다. 14일 삼성전자 이재용 부회장 등과 미팅을 갖었다.

주커버그의 방한은 이미 올 해 6월에도 있었다. 그 때는 청와대를 방문해서 소위 창조경제에 대한 논의가 있었다고 하는데 이번 방문에는 삼성전자와 저커버그 사이에 논의가 밝히지는 않았지만 예상되는 메인 안건은 현재로 2가지 정도로 압축된다.

첫째는 연말 출시 예정인 페이스북 자회사 오큘러스와 삼성전자와의 합작품인 갤럭시 기어 VR에 대한 내용이고, 두번째는 페이스북 전용 스마트폰에 대한 것이다.

페이스북은 소프트웨어와 SNS 생태계에 대한 주력 기업이니만큼, 삼성전자 같은 하드웨어를 전문으로 담당해 줄 파트너가 필요할 것이다. 그 첫 단추로 오큘러스 인수 후 발 빠르게 삼성전자와의 합작품을 첫 VR 상용화 제품으로 시장에 선보이기로 한 것은, 페이스북의 그러한 바램을 현실화한 첫 사례라고 볼 수 있다.

 

3

기어 VR은 이미 알려진 사양대로 갤럭시 노트4와 연동해 가상현실을 360도로 체험할 수 있는 전형적인 웨어러블 VT 기기이다. 헤드마운트 디스플레이를 갤럭시 노트4를 사용해서 구현하며 그 시야각은 약 96도에 달한다. 여기에 오큘러스의 기술인 가속도 센서, 자이로 센서, 지자계 센서, 근접 센서 등이 함께 기능을 하며 다양한 가상현실을 체험할 수 있게 하는 제품이다.

현재 알려진 바대로라면 약 200불 내외의 가격으로 출시될 예정이다.

하지만 동일 콘셉트의 제품에 대한 다른 기업들의 도전도 거센 상황이다. 두드러지는 것은 중국 업체들의 유사 제품 출시 경쟁이다. 이미 다양한 업체들로부터 가상현실을 가능하게 하는 유사 기능의 제품들에 대한 출시 계획이 속속 발표되고 있기 때문이다.

최근에는 카메라용 광학 렌즈 업체로 유명한 칼 자이스도 헤드셋 VR One을 발표해서 화제가 되고 있다. 갤럭시 기어 VR이 삼성의 스마트폰 제품 전용인 반면에, 칼 자이스의 VR One은 아이폰6와 안드로이드 제품을 모두 지원한다고 한다.​

써드파티 개발사 지원 전략도 오큘러스와 유사하여, iOS와 안드로이드 개발 SDK를 지원하며 다양한 써드파티 제품의 출시를 유도하고 있다. 심지어 삼성제품인 갤럭시 S5도 완벽 지원을 한다고 하니, 출시를 앞 둔 갤럭시 기어 VR로서는 강력한 경쟁사를 만나게 된 셈이다. 거기다 출시 예정 가격도 99달러 정도로 저렴하다고 한다.

페이스북과 삼성전자 간에 기어 VR 제품 경쟁력에 대한 여러 가지 그림이 그려져야 할 시점이라고 보여진다.

 

2

두번째로 하드웨어 분야에서 페이스북과 삼성전자의 협력이 이뤄질 것으로 예상되는 분야는 페이스북 전용 스마트폰일 것이다.

이 분야에서 페이스북의 첫 파트너사는 대만의 스마트폰 개발사인 HTC이었으나, 기대를 안고 지난 해 4월 출시되었던 첫 페이스북 전용 폰인 HTC 퍼스트는 시장에서 참패를 기록 했다. 출시 한 달 만에 2년 약정 시 공짜폰으로 풀리는 수모를 겪기도 했다.

아마 페이스북으로서는 하드웨어 파트너사의 역량이 중요하다는 값비싼 교훈을 얻는 것으로 만족해야 했을 것이다.

삼성전자의 갤럭시 시리즈의 브랜치 모델로 페이스북 전용 폰이 출시된다면 시장에서의 파급력은 조금 다르지 않을까 하는 기대를 저커버그로서는 충분히 할 수 있다고 보여 진다.

이 외에 SNS인 페이스북과 삼성전자의 소프트웨어 서비스 분야에 대한 협력 확대는 당장 쉽게 접근할 수 있는 어젠다이다. 얼마 전 시작해서 소기의 성과를 올리고 있는 삼성전자의 음악 스트리밍 서비스인 밀크와 페이스븍의 연동 강화 같은 분야가 바로 그런 것이다.

저커버그는 이번 방한에 하루 앞선 13일에는 인도네시아의 수도 자카르타를 방문해서 조코 위도도 대통령 당선인과 만나기도 했다. 인도네시아의 방문 목적은 그가 지향하는 인터넷 접속의 음영지역 해소를 위한 공익사업에 대한 논의를 위한 것이었다.

저커버그는 이 프로젝트를 통해 아직도 인터넷의 혜택을 받지 못하고 있는 전 세계 50억 명에게도 인터넷을 이용할 수 있도록 하기 위한 목표를 세우고 있다. 그가 주창하는 인터넷 접속 환경 개선 프로젝트에는 페이스북 외에도 노키아, 에릭슨, 퀄컴, 미디어테크, 오페라 소프트웨어 등의 다양한 국가의 기업들이 참여하고 있다.

물론 삼성전자도 여기에 참여하고 있어서 이번 만남에서 가장 훈훈한 어젠다로 이 프로젝트에 대한 협력 방안이 논의될 것으로 예상된다.

페이스북이나 구글, 심지어 소송 전으로 적대시 했던 애플로부터도 협력 관계를 요청 받고 있는 삼성전자의 위상은 세계 ICT 업계에 이미 든든한 자리매김을 했다는 점에서 자랑스럽기도 하다.

하지만 모든 업체로부터 오직 하드웨어에 대한 강점만으로 구애가 집중되고 있고, 소프트웨어에 대한 사업 역량이 상대적으로 매우 약한 점은 삼성전자가 반드시 극복해야 할 맹점이다.

일예로 삼성전자가 최근 그나마 의욕을 가지고 시도해서 반향을 일으켰던 음악 스트리밍 ‘밀크’ 서비스도 저작권 관련 이슈로 서비스 본질에 대한 차질이 불가피해 지는 등 난항이 예상되고 있다.

"지금의 하드웨어 중심 사업에 안주하지 않고, 소프트웨어에 대한 긴 호흡의 투자와 관련 업체들의 M&A 등을 통한 사업 재편, 그리고 자체 OS를 비롯한 주도적인 소프트웨어 생태계 조성에 대한 사업 전략이 반드시 추구해야 할 삼성전자의 과제라는 인식이 지속되어야 하겠다.

[인간과 컴퓨터] 인간 ↔ 컴퓨터 ↔ 인간/동물 #9

[인간과 컴퓨터] 인간 ↔ 컴퓨터 ↔ 인간/동물 #9


사람이 디바이스를 조작하는 HDI(BCI) 단계를 거처, 컴퓨터가 사람을 지원하는 DHI(CBI)를 거치면, 최종적으로 사람의 두뇌와 사람의 두뇌, 사람의 두뇌와 동물의 두뇌를 연결하는 HHI(BBI) 단계에 이르게 된다.

두뇌와 두뇌로 마음과 생각과 지식을 전달할 수 있고, 동물을 생각으로 조정할 수 있다. 성경에 까마귀(raven)가 사람에게 밥을 날라주는 것이 현실로 등장한다. 텔리파시, 초음파 두뇌 빔, 텔리키네시스, 동물전파유도기술이 이에 해당한다.

 

111

 

한국의 과학자들이 세계 최초로 BBI(Brain-Brain Interface, 뇌-뇌 인터페이스) 개발했다. 미국 하버드 의대 유승식 교수와 김형민 박사, 고려대 박신석 교수 연구팀이 사람의 뇌파(腦波)를 무선으로 컴퓨터에 보내고, 컴퓨터는 뇌파를 초음파로 바꾸고, 컴퓨터 화면에 '쥐의 꼬리를 움직일 명령을 깜빡이는 점'으로 표시한 후, 그 다음 사람이 그 점을 응시하면, 컴퓨터가 초음파를 쥐의 운동중추로 보내서, 쥐의 꼬리를 움직이는데 성공했다. 연구 결과는 국제적 권위의 온라인 학술지인 `플로스 원(PLoS One)'에 실렸다.

결국 사람의 뇌에서 쥐의 뇌로 사람의 생각을 보낸 것이다(You et al., 2013). 특히 이 기술은 기존의 브라운 대학이나 피츠버그대학의 이식(두뇌에 칩을 이식) 기술이 아니라 비이식 기술이다.

 

112

 

아쉬운 점은 아직은 '꼬리를 움직인다'는 생각 자체를 쥐의 뇌에 전달하지는 못했다. 단지 컴퓨터 화면에 깜빡이는 점을 볼 때 나오는 뇌파를 쥐가 꼬리를 움직이게 하는 스위치처럼 이용했을 뿐이다.

그러나 영화 '아바타'에서 주인공의 생각은 분신(分身)인 나비족(族) 전사의 몸을 통해 행동으로 옮겨지는 것처럼 사람의 뇌파로 다른 동물을 움직이는 데 성공한 것이다. 생각으로 로봇 팔이나 휠체어를 움직인 연구는 이전에도 있었지만 살아있는 동물을 움직인 것은 처음이다.

과학계에서는 연구가 발전하면 화성 탐사에 나선 침팬지에게 무선으로 사람의 의도를 전달하는 일이 가능할 것으로 기대하고 있다. 또는 타이거 우즈의 뇌에 저장된 스윙 노하우를 초보 골퍼들의 뇌에 전달하는 상상도 해볼 수 있고, 고수의 지식을 하수의 두뇌에 전달 할 수도 있다.

구글 블로그(Blogger) 상단에 글 목록(Post List) 만들기

구글 블로그(Blogger) 상단에 글 목록(Post List) 만들기


구글 블로그(Blogger) 상단에 글 목록(Post List) 만들기

 

블로그를 보다보면 포스팅 목록들 위쪽에 글 목록이 페이징 처리되어 보여주는 기능이 있습니다.

 

 

1. 가젯 추가하기

내 블로그 관리화면에서 [레이아웃] 을 클릭하면 레이아웃 관련화면이 나옵니다.

여기서 [가젯 추가]를 선택합니다.

 

 

 

가젯 추가 윈도우가 나타나면 여러가지 가젯 목록이 보이는데 아래쪽으로 내려가다보면 [HTML/JavaScript] 항목이 보입니다.

 

 버튼을 클릭합니다.

 

 

아래의 그림처럼 HTML/JavaScript 구성 윈도우가 나타나면 제목을 입력하고,

그림 아래에 [붙여넣을 소스코드]를 복사하여 내용 부분에 붙여넣습니다.

 

 

 

※ 붙여넣을 소스코드 (소스코드 다운로드)   소스코드 다운로드.txt

 

  1. <div>  
  2. <div id="posts" style="padding: 10px;">  
  3. </div>  
  4. <div align="center" id="posts-pgno" style="cursor: pointer;">  
  5. </div>  
  6. </div>  
  7. <script language="Javascript" type="text/javascript">  
  8.  /** url의 Parameter를 얻는 Class. **/  
  9.     var request = {   
  10.   parameter: function(name) {  
  11.    return this.parameters()[name];  
  12.   },  
  13.     
  14.   parameters: function() {  
  15.    var result = {};  
  16.    var url = window.location.href;  
  17.    var parameters = url.slice(url.indexOf('?') + 1).split('&');  
  18.       
  19.    for(var i = 0;  i < parameters.length; i++) {  
  20.     var parameter = parameters[i].split('=');  
  21.     result[parameter[0]] = parameter[1];  
  22.    }  
  23.    return result;  
  24.   }  
  25.  }  
  26.    
  27.  /** Page의 정보를 저장. **/  
  28.  var page = {  
  29.   //초기화.  
  30.   init: function(home,max){  
  31.    page.home = home;  
  32.    page.max = max;  
  33.    page.label = '';  
  34.    page.no = 1;  
  35.   },     
  36.      
  37.   //url의 parameter에서 pgno 값을 읽어 옮.  
  38.   setPage: function(){  
  39.    var url = window.location.href;  
  40.    
  41.    var pl = url.lastIndexOf("/label/");  
  42.    var pq = url.lastIndexOf("?");  
  43.      
  44.    if(pl != -1)  
  45.     page.label = url.substr(pl+7,((pq!=-1)?pq:url.length)-(pl+7));  
  46.      
  47.    if(url.indexOf("pgno") != -1)  
  48.     page.no = request.parameter("pgno");  
  49.       
  50.   }  
  51.     
  52.  }  
  53.  /** feed를 parsing 하여 결과 뿌려 줌. **/  
  54.  var obj = {  
  55.   init: function () {  
  56.    obj.obj = document.getElementById('posts');  
  57.    obj.pgno = document.getElementById('posts-pgno');  
  58.   },  
  59.     
  60.   // 검색을 요청하는 함수   
  61.   pingSearch: function () {  
  62.    //변수 선언.  
  63.    obj.s = document.createElement('script');  
  64.    obj.s.type = 'text/javascript';  
  65.    obj.s.charset = 'utf-8';  
  66.      
  67.    //feed callback 함수를 이용 json 객체 구한 후 pongSearch 함수호출.   
  68.    if(page.label == '')  
  69.     obj.s.src = '' + page.home +   
  70.      '/feeds/posts/summary/?max-results='+(page.no*page.max)  
  71.      +'&alt=json-in-script&callback=obj.pongSearch';  
  72.    else  
  73.     obj.s.src = '' + page.home + '/feeds/posts/summary/-/'  
  74.      +page.label+'?max-results='+(page.no*page.max)  
  75.      +'&alt=json-in-script&callback=obj.pongSearch';  
  76.       
  77.    //append.  
  78.    document.getElementsByTagName('head')[0].appendChild(obj.s);  
  79.   },  
  80.      
  81.   // 검색 결과를 뿌리는 함수   
  82.   pongSearch: function (z) {  
  83.    obj.obj.innerHTML = '';  
  84.      
  85.    /* 글 목록을 뿌려 줌. */  
  86.    for (var i = (page.no-1)*page.max; i < page.no*page.max; i++) {  
  87.     //예외처리.  
  88.     if(i >= z.feed.openSearch$totalResults.$t)  
  89.      break;  
  90.       
  91.     //변수선언.  
  92.     var li = document.createElement("li");  
  93.     var a = document.createElement('a');  
  94.       
  95.     //link로 사용할 base url.  
  96.     var url = page.home + '/search';  
  97.     if(page.label != '')  
  98.      url += '/label/' + page.label;  
  99.       
  100.     //최종 link를 url 입력.  
  101.     if (i == 0)   
  102.      a.href = url + '?max-results=1';  
  103.     else {  
  104.      var pub=obj.changeTime(z.feed.entry[i-1].published.$t);  
  105.      a.href = url + '?updated-max=' + pub   
  106.      + '&max-results=1&pgno='+page.no;  
  107.     }  
  108.     a.innerHTML = obj.escapeHtml(z.feed.entry[i].title.$t);  
  109.        
  110.     //append  
  111.     li.appendChild(a);  
  112.     obj.obj.appendChild(li);  
  113.    }  
  114.       
  115.    /* page 뿌려줌. */  
  116.    obj.pongPgno(z);  
  117.   },  
  118.     
  119.   // page를 뿌려주는 함수.  
  120.   pongPgno: function(z){  
  121.    obj.pgno.innerHTML = '';  
  122.    var before = document.createElement('a');  
  123.    var next = document.createElement('a');  
  124.      
  125.    var ten = parseInt((page.no-1)/10);  
  126.    var total = z.feed.openSearch$totalResults.$t;  
  127.   
  128.    /* before page */  
  129.    before.innerHTML = ' << ';     
  130.    if(ten>0)  
  131.     obj.onMouseDown(before, ten*10);  
  132.    obj.pgno.appendChild(before);  
  133.      
  134.    /* page number */  
  135.    for(var i=ten*10; i< (ten+1)*10; i++){  
  136.     if(i >= total/page.max)  
  137.      break;  
  138.     var a = document.createElement('a');  
  139.     obj.onMouseDown(a,i+1);  
  140.       
  141.     a.innerHTML = ' ' + (i+1) + ' ';  
  142.       
  143.     if(i+1 == page.no)  
  144.      a.style.color = 'yellow';       
  145.     obj.pgno.appendChild(a);  
  146.    }  
  147.       
  148.    /* next page */  
  149.    next.innerHTML = ' >> ';  
  150.    if(ten< parseInt(total/page.max/10))  
  151.     obj.onMouseDown(next, (ten+1)*10+1);  
  152.    obj.pgno.appendChild(next);  
  153.   },  
  154.      
  155.   //mouse click event.  
  156.   onMouseDown: function(a, i){  
  157.    a.onmousedown = function(){  
  158.     page.no = i;  
  159.     obj.pingSearch();  
  160.    }  
  161.   },  
  162.   
  163.   //Time 에러 수정.  
  164.   changeTime: function(str){  
  165.    var s = str.lastIndexOf('.')-1;  
  166.    var e = str.lastIndexOf('+')+1;  
  167.      
  168.    var str2 = str.substr(0,s) + '%2B' + str.substr(e,100);  
  169.      
  170.    return str2;  
  171.   },  
  172.     
  173.   // HTML태그 안 먹게 하는 함수  
  174.   escapeHtml: function (str) {  
  175.    str = str.replace(/&/g, "&");  
  176.    str = str.replace(/</g, "<");  
  177.    str = str.replace(/>/g, ">");  
  178.    return str;  
  179.   }  
  180.  };  
  181.   
  182.  page.init('http://creatorhong.blogspot.com', 5);  
  183.  page.setPage();  
  184.  obj.init();   
  185.  obj.pingSearch();  
  186. </script>  

 

 

 

 

많이 길죠?

소스코드 다운을 하시기 바랍니다.

소스코드 다운로드

여기서 주의사항은 소스코드 아래쪽에 
page.init('http://블로그아이디.blogspot.com', 5);

각각 블로그의 url 주소와 한 list안에 보여지는 최대 post 수를 입력하면 됩니다. 이 때 url 주소 끝에 '/' 가 들어가면 안됩니다.

소스코드를 수정하고 [저장] 버튼을 누르면 가젯이 추가됩니다.

 

 

2. 가젯 배치하기

  레이아웃 화면에서 추가된 가젯을 블로그 게시물 위쪽으로 마우스로 끌어서 배치시킵니다. (소스코드 다운로드)



 

3. 저장하기

  다시 레이아웃 화면으로 돌아와서 오른쪽 상단에 보이는 [배치 저장] 버튼을 클릭하여 블로그에 적용합니다.

 

 

 

블로그를 보시면 아래의 그림과 같이 Post List라는 글목록이 페이징 처리되어 나타나게 됩니다.

 

 

위와 같이 하시면 됩니다.

엄청 어렵네요..

우리나라랑은 조금 틀린듯..

 

즐프하세요~