반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

구글에서 안경을 새로 발표 했지요?

쓰고 있으면 안경을 통해서 다양한 정보를 제공한다고 하던데...
날씨도 알 수 있고 교통편도 알 수 있고 또 지도도 볼 수 있고...

전화가 오면 전화건 사람이 누군지 볼 수 있고 또 그리고...

아.... 말을 하면 자동으로 문자로 바꿔서 친구한테 문자 메세지도 보낼 수 있다고 하던데..

진짜 그게 되는지는 모르겠어요.


구글에서 만든 홍보 동영상이 있던데 한번 보세요.


아주 죽이네요.

사진 찍으라고 말하면 사진도 찍고 말로 전화 걸고 받고 다하고 또 음악도 껐다 켜기도 하고 전화하는 사람이 내가 보고 있는 광경을 같이 볼 수도 있고...


패션은 어떤것 같으세요?

아직 생소해서 그런지 별로 그렇게 딱 와 닿지는 않네요.

그냥 이쁜 여자가 쓰고 있어서 좋게 보이긴 합니다.

만약 애플이 만들었다면 디자인이 좀 더 쌈박하지 않았을까 싶기도 하구요.


이대로 가다간 조만간에 안경 뿐만이 아니라 콘텍트렌즈까지 나올것 같은 분위기네요.
실제로 지금 연구중이래요.

유튜브에 이 구글안경 (Google Glasses) 와 관련해서 재밌는 패러디 하나가 올라왔어요.



패러디 실력이 아주 멋지죠?

어쨌든 구글 안경.... 안드로이드로 프로그래밍 할 수도 있을까요?

벌써 기대되는데요..... ^^


반응형


반응형

오랜만에 Sencha Touch를 들여다 보게 됐네요.
몇개의 튜토리얼을 정리했는데요. 아직 제대로 제가 감을 못 잡은 것 같아서요.

오늘은 샘플코드를 구해서 분석해 봤습니다.
Shopping List 를 Sencha Touch 로 구현한 샘플코드인데 독일의 Nils Dehl 이라는 개발자가  프랑크프루트 컨퍼런스에서 강의한 코드입니다.

일단 저도 Sencha Touch를 시작하는 사람으로서 이 소스코드를 자세하게 분석하지는 못합니다. 이 소스코드를 통해서 제가 공부할 목표는 아래 두가지 입니다.

1. MVC 모델 프로그래밍을 위한 디렉토리 및 파일 구조 파악
2. 실전에서 자주 쓰이는 API에 대한 감을 익혀서 튜토리얼 공부할 때 집중할 수 있도록 하기

이 이상은 지금 수준에서는 아직 할수가 없다고 봅니다.

일단 이 앱의 Storyboard 를 보죠.

1. 이 앱의 인트로 화면입니다. 실행하면 이 화면이 떴다가 잠시 후에 자동으로 다음 화면으로 넘어갑니다.



2. 앱의 첫 화면입니다. + 를 누르면 데이터를 입력할 수 있는 화면이 나옵니다.



3. 이름과 갯수 그리고 단위를 입력하고 Save를 누르면 2번화면으로 가고 입력한 데이터가 표시됩니다.



4. 3번화면을 통해서 여러 물품을 입력하면 아래와 같이 그 리스트가 뜹니다.
    오른쪽 마크 버튼을 누르면 색이 변합니다.


화면은 몇개 안 되지만 직접 만들려면 만만치 않을것 같네요.

그럴듯하게 쇼핑카트가 완성 됐죠?

이 앱에서는 MVC 모델과 list 그리고 localstorage, form 과 관련된 기술이 사용됐습니다.
그리고 CSS를 보다 간편하게 사용하기 위해서 SASS 를 사용했구요.

자세히는 아니지만 이 기술들도 간단히 살펴 보겠습니다.
아직 저는 센차터치의 MVC 구성과 실전에서 자주 사용되는 API와 그 사용법 파악이 주 목적이니까 그 부분에 집중해서 공부하겠습니다.

이 앱의 소스파일은 아래로 가시면 받아 보실 수 있습니다.

http://dl.dropbox.com/u/7549925/shoppinglist.zip

소스는 받아서 그냥 실행하시면 됩니다.
이 앱은 Sencha Touch 1.1.0을 사용했습니다.
그리고 Step1부터 Step 7 까지 단계별로도 소스를 따로 모았습니다.

이 단계는 컨퍼런스 때 강의를 하기 위해 나눈것인데요.
동영상으로도 있습니다.


Creating a sample Touch app from Grgur Grisogono on Vimeo.

오늘은 위에 동영상까지 올리겠습니다.

소스 받아서 보시고 동영상도 보시면 많은 공부가 될 겁니다.

저도 공부해서 나름대로 정리할 내용을 정리할 계획입니다.

지난주에는 Corona SDK + JQuery Mobile + HTML5 + CSS3 기술을 이용한 앱을 하나 만들었습니다.
Corona SDK를 이용한 Hybrid App 을 만들 목적이었는데요.
좋은 조합일 수도 있고 또 제한 사항들이 있어서 컨트롤하기 힘든 부분도 있더라구요.
원래 standard 조합인 Phonegap + JQuery Mobile 을 이용해서 Hybrid App을 만들어 보아야 겠어요.
그래야지 비교할 수 있고 서로간의 장 단점을 알 수가 있을 것 같아서요.

일단 오늘은 이 쇼핑카트 앱 소스를 공부해서 필요한 부분을 정리해야겠습니다.

다음 글에 제가 공부한 내용을 올릴께요. 그럼......


P.S. 이 소스는 저의 경우 크롬과 사파리 브라우저에서만 동작하고 오페라,익스플로러,파이어폭스에서는 작동 안하더라구요.

반응형


반응형

오늘도 어제에 이어서 코로나에서 SQLite 다루는 방법에 대한 튜토리얼을 정리하겠습니다.

===== o ===== o ==== o ====


Inserting new rows into a table

새로운 row를 만드는 것은 INSERT 문을 통해서 할 수 있습니다. 우선 아주 기초적인 사용법을 보여 드리겠습니다. 그리고 나서 좀 더 다이나믹한 예제를 보여 드릴께요.

local insertQuery = [[INSERT INTO test VALUES (NULL, 'John Doe','This is an unknown person.', 'http://www.example.com/'); ]]
db:exec( insertQuery )


그냥 딱 봐도 알겠죠? 그래도 설명을 드리자면, 이전 에제에서 test라는 테이블을 생성했습니다. 그리고 이 예제에서는 그 test라는 테이블에 row를 생성한 겁니다.

주의하셔야 할 것은 컬럼의 순서에 맞춰서 value를 넣어 주셔야 합니다. 그 컬럼 순서는 테이블을 만들 때 사용했던 순서 입니다.

    id → NULL
    name → John Doe
    description → This is an unknown person.
    website → http://www.example.com/


이전 예제에서 테이블을 만들 때 id는 auto-increment로 설정 했습니다. 자동적으로 row 번호를 매기도록 하기 위해서 입니다. 그래서 id 값은 NULL 로 넣었습니다. 그러면 NULL이 들어가는 것이 아니라 자동적으로 숫자가 들어갈 겁니다. SQLite가 알아서 하는 부분이니까 별로 신경 안 쓰셔도 됩니다.

이제 좀 더 다이나믹한 예제를 볼까요? 좀 더 창의력을 발휘해 보겠습니다. 아래 예제는 루아 테이블로부터 value들을 가져와서 SQL 테이블에 row들을 insert 합니다.

local people =
{
    {
        name = "John Doe",
        description = "This is an unknown person.",
        website = "http://www.example.com/"
    },
    {
        name = "Jane Doe",
        description = "The wife of an unknown person.",
        website = "http://www.example2.com/"
    },
    {
        name = "Oscar",
        description = "Green guy lives in trash can.",
        website = "http://www.example3.com/"
    }
}

for i=1,#people do
    local q = [[INSERT INTO test VALUES (NULL, ']] .. people[i].name .. [[',']] .. people[i].description .. [[', ']] .. people[i].website .. [['); ]]
    db:exec( q )
end


NOTE : 여러분들이 입력하고자 하는 값에 따옴표가 있으면 그 따옴표 옆에 역슬래시를 넣어 주어야 합니다. 그렇지 않으면 에러가 발생할 겁니다.


 Updating existing rows

항상 새 row를 만드는 일만 하는 것은 아니죠? 사실 실전에서는 기존에 있던 row의 데이터를 업데이트 하는 일이 더 자주 있습니다. 아래 예제는 테이블에 이미 3개의 row들이 있다고 가정하고 만든 예제입니다. (위의 예제에서 만들었던 3개의 row들이라고 가정합시다.)

local q = [[UPDATE test SET name='Big Bird' WHERE id=3;]]
db:exec( q )


위 예제의 쿼리가 하는 일은 id가 3인 row를 찾아서 그 중의 name 컬럼의 값을 Big Bird 로 바꾸는 일을 합니다. 이전 예제에서 만들었던 세번째 row의 name인 Oscar 가 Big Bird가 되겠죠. 꼭 id로 특정 row를 찾아야 되는 것은 아니지만 대개 이렇게 하는게 간편합니다. (그 값은 unique 해서 항상 딱 1개의 row만 해당 되거든요.)

Deleting a row from an SQL table

delete는 update와 비슷합니다. 다른점은 UPDATE 대신 DELETE를 사용한다는 것이죠. 아래 예제에서는 id가 1인 row를 delete 합니다. John Doe가 있는 row가 delete 되겠네요.

local q = [[DELETE FROM test WHERE id=1;]]
db:exec( q )


Retrieving data with “SELECT”

SQL 데이터베이스에서 데이터를 검색할 때 다양한 필요에 의해 행해지게 됩니다. 어떤 때는 단 1줄만 필요할 때도 있고 특정 값을 가진 (예를 들어 서울에 사는 사람들 등) row들을 모두 검색해야 할 때도 있습니다.

이 모든 경우를 다루지는 않겠습니다. 다만 아래 예제를 통해 기존에 있던 데이터베이스에서 SELECT 쿼리를 통해 얻은 값을 루아 배열에 담는 과정을 보여드리겠습니다.

require "sqlite3"

local path = system.pathForFile( "data.db", system.DocumentsDirectory )
local db = sqlite3.open( path )

local people = {}  -- starts off emtpy

for row in db:nrows("SELECT * FROM test") do
    print( "Row " .. row.id )

    -- create table at next available array index
    people[#people+1] =
    {
        name = row.name,
        description = row.description,
        website = row.website
    }
end


여기서 가장 중요한 부분은 8번째 줄인 SELECT 구문이 있는 곳입니다. nrows() 함수를 이용해서 for 루프를 돌리도록 합니다. 이렇게 해서 루아 배열에 값을 넣고 그 값을 가지고 앱 내에서 이런 저런 프로그래밍을 할 수 있습니다.

SELECT 와 관련되서 좀 더 자세히 알고 싶으시면 이 글을 읽어 보세요.

Closing the database

데이터베이스와 관련된 작업이 끝났다면 데이터베이스와의 연결을 끊어 줘야 합니다. 이것은 굉장히 중요한 부분 입니다. close() 메소드를 사용해서 연결을 끊는데요. 필요할 때는 언제든지 사용하실 수 있습니다. 하지만 되도록이면 applicationExit 시스템 이벤트가 발생할 때 사용할 것을 권장 합니다. 이렇게 되면 앱이 종료할 때 데이터베이스 연결이 끊어지게 됩니다.

local function onSystemEvent( event )
    if event.type == "applicationExit" then
        if db and db:isopen() then
            db:close()
        end
    end
end
Runtime:addEventListener( "system", onSystemEvent )


위 코드는 여러분의 앱내 어느 부분에 있어도 됩니다. 단지 데이터베이스를 오픈한 이후가 되도록 하는게 좋겠죠. 위의 경우는 db 객체가 생성된 이후가 좋겠죠. 그리고 데이터베이스를 닫아야 하는 시점과 관련된 위치가 좋겠구요.

Further Reading

이것이 코로나에서 데이터베이스를 이용하는 대략적인 Tutorial 입니다. 코로나에서 SQLite으로 어떤 일을 할 수 있는지 살짝 맛만 보인겁니다. 더 많은 정보들은 여러분 스스로 찾으셔야 합니다. 인터넷에는 수 많은 SQLite + Lua 관련된 자료들이 있습니다. 그러니까 앱을 만들 때 데이터베이스를 좀 더 효과적으로 이용하시려면 더 많은 공부가 필요할 겁니다.

우선 SQL의 다양한 쿼리 사용법에 익숙해 지는것이 좋습니다. 이것만 해도 수 많은 Tutorial들을 만들 수 있습니다. 이 글에서 다룬 내용은 단지 처음 시작할 수 있도록 기본적인 내용만 다룬겁니다.

SQLite에 대해 좀 더 깊은 정보를 원하신다면 zetcode.com 의 SQLite tutorial을 보실것을 권장합니다.

반응형