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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형


Posted on . Written by



수요일의 FAQ 시간입니다. 이번주는 정확하게 FAQ라고는 할 수 없는데요. Daily Builds 에 최근 적용된 맥 시뮬레이터와 관련된 업데이트들을 다루겠습니다.


1. Loading the last project on simulator startup


Daily Build #996에서 새로 Preferences menu에 새로운 preference 가 추가됐습니다. “Automatically open last project” "바로 전 project 자동적으로 open 하기" 입니다. 이 기능은 이전에 작업했던 프로젝트를 계속 작업해야 될 때 아주 유용하겠죠.




2. Reloading the last project


맥과 윈도우 시뮬레이터에서 Cmd R (Ctrl R on Windows) 를 사용해서 지난번 프로젝트를 Relaunch 할 수 있었습니다. 그런데 맥 시뮬레이터에서는 이 시뮬레이터가 처음 시작했을 경우는 이 기능을 사용할 수 없었는데요. build #1017 에서 이 기능이 가능하게 됐습니다. 그리고 위 1번에서 소개했던 relaunch 를 항상 실행되게 할 수도 있습니다.



3. Simulator now continues to run after a build


맥 시뮬레이터로 프로젝트를 빌드했다면 빌드가 진행될 때 디바이스 skin 윗부분에 giant “iOS spinner”가 나오는 것을 보셨을 겁니다. 이게 빌드가 다 끝나고 난 다음에도 계속 나타났었죠. 그리고 시뮬레이터가 suspend 됐었습니다. 이제는 suspend 되지 않고 시뮬레이터가 계속 실행됩니다. 여러분 스스로 시뮬레이터를 suspend 시키시려면 Hardware menu에서 Suspend 를 선택하거나 Cmd downarrow를 누르시면 됩니다.

4. Unicode characters in asset file names


build #1017에서 맥 시뮬레이터는 asset file들의 이름에서 unicode를 지원합니다. 이렇게 함으로서 이미지나 사운드 파일과 하위 디렉토리까지 사용할 수 있게 됐습니다. 윈도우에서는 아직 파일이름에 유니코드를 사용하는데 약간의 이슈가 있습니다.



5. Supporting iOS 6.1 builds


1월 28일 애플이 공식적으로 iOS 6.1을 release 했습니다. 저희 build server에는 최신버전으로 인스톨할 계획입니다. 그리고 며칠 후에 여러분들이 그 최신 버전을 사용하실 수 있을 겁니다. (check the Daily Build summary page) 이후에 나올 몇개의 Daily Builds 에서는 현재 버전인 iOS 6.0 SDK와 새 버전인 6.1 SDK를 모두 지원하게 될 겁니다. build window에서 pull-down menu 를 선택해서 원하시는 iOS SDK 버전을 선택하시면 됩니다.

시뮬레이터를 좀 더 개선하거나 추가했으면 하는 기능이 있으면 Corona Feedback page 에 올려 주세요.


오늘은 여기까지 입니다. 여러분에게 도움이 되었기를 바랍니다.






반응형


반응형

Study says Rhode Island is one of 10 states with highest taxes on poor


January 30, 2013 12:01 am
By Katherine Gregg



PROVIDENCE, R.I. -- As the tax debate begins anew at the State House, a new study has identified Rhode Island as one of ten states with the highest taxes on the poor.

The poorest Rhode Islanders paid 12.1 percent of their income in state and local income, sales and property taxes in 2010. The top 1 percent paid 6.4 percent, according to a newly-released study by the non-partisan, liberal Institute on Taxation & Economic Policy.

"Fairness is, of course, in the eye of the beholder,'' the study's authors acknowledged. "Yet almost anyone would agree that the best-off families should pay at a tax rate at least equal to what low- and middle-income families pay.''

Kate Brewster, executive director of The Economic Progress Institute in Rhode Island, viewed the report as ammunition for the campaign by labor and others to convince state lawmakers to ask the wealthy to "pay a little more.'' Advocates are drafting a bill that would raise the top rate from 5.99 percent to 7.9 percent on those whose household income tops $250,000.


PROVIDENCE, R.I. -- 주의회에서 세금관련 논쟁이 다시 불거졌다. 새로운 연구 보고서가 로드 아일랜드가 저소득층에게 높은 세금을 부과하는 상위 10개 주 중 하나라는 것을 발표했기 때문이다.

이 연구 보고서에 따르면 로드 아일랜드의 가장 저소득층들은 2010년 그들의 수입에서 중앙정부와 주정부 소득세와 부과세 그리고 재산세 등으로 12.1%를 세금으로 냈다. 상위 1%는 6.4%를 냈다. 

"어느 것이 올바른 것이냐는 판단은 보는 분들이 결정할 일이다" 라고 이 연구보고서의 저자는 언급하면서 "대부분의 사람들은 고소득자들이 적어도 저소득자와 중산층이 내는 세금과 같은 비율을 내야한다는 것에 동의한다." 라고 말했다.

로드 아일랜드의 경제발전연구소에서 executive director로 있는 Kate Brewer는 이 보고서가 노동자들과 부자증세를 요구하는 의원들에게 유리하게 활용할 수 있는 자료가 될 것이라고 보았다. 이 부자증세를 공개적으로 지지하는 이들은 연소득 25만불(연봉 2억 7천만원) 이상인  층에는 세금을 현행 5.99%에서 7.9%로 인상해야 한다는 법안을 상정한 상태다.





오늘 이 기사를 통해서 좋은 공부를 하게 됐습니다.

국가에서 세금을 소득순위에 따라 부과하는 방법에는 세가지가 있는데요.

a progressive tax (누진세) : 소득이 높을 수록 세금 비율이 높음

a regressive tax (역진세) : 소득이 높을 수록 세금 비율이 낮음

a proportional tax (비례세) : 소득수준에 관계없이 세금 비율이 일정함


2차대전 이후 대부분 소득세에 대해서는 progressive tax를 적용하는 것으로 알고 있습니다.

그리고 생필품등에 대한 간접세는 일정한 금액이 세금으로 부과되기 때문에 결과적으로 regressive tax 적인 성격이 있는 것으로 알고 있구요.


이번에 발표된 이 연구 보고서는 소득세와 부과세 그리고 재산세를 모두 합해서 소득에 비해 세금을 얼마나 내는지에 대해 연구 보고한 내용인 것 같습니다.


결과는




이렇습니다.


미국 50개주 평균을 낸 것인데요.


하위 20%에 해당하는 저소득층은 11.1%의 세금을 낸 반면 상위 1%는 5.6%의 세금 밖에 안 냈습니다.


결과적으로 소득세만이 아니라 부가세 재산세 등을 모두 합쳤을 경우 미국은 regressive tax 적인 결과가 나왔습니다.

즉 소득이 낮은 사람들은 세금 비율이 더 많고 소득이 높은 사람들은 세금 비율이 훨씬 더 적게 나타난거죠.




가장 regressive state tax system을 가진 주는 미국 서북부에 있는 워싱턴주네요.

스타벅스의 고향인 시애틀이 있는 곳. (미국 수도인 워싱턴 D.C. 하고는 다릅니다.)




가구 소득별로 본 각종 세금 비율 입니다.

하위 20% 저소득층들은 부가세와 특별소비세 등 물건을 살 때 부과되는 세금의 비율이 월등히 높네요. 소득세는 누진세가 적용되기 때문에 아주 낮구요. 그리고 재산세의 비율이 높습니다.

반면에 상위 1% 소득 가구는 소득세의 비율이 아주 높지만 반면에 부가세/특별소비세나 재산세의 비중은 타 소득계층보다 월등히 낮습니다.


그러니까 이렇게 regressive tax 현상이 나타난 이유는 저소득층들은 없는돈에 먹고 살려고 사는 물건들에 붙는 세금이 소득과 비교할 때 부담이 되는 거죠. 없는 재산에 내는 재산세도 소득이 적으니까 부담이 될 수 밖에 없구요.


실질적으로 가난한사람이 세금을 내는 비율이 훨씬 더 많은 현상을 개선하려면 어떻게 해야 될까요?

물건 살 때 일일이 소득 확인하고 세금을 붙일 수도 없고...



미국 50개 주 들중에 가난한 사람들에게 실제 세금 비율을 가장 높게 적용하는 상위 10개 주 입니다.

이 중에 로드 아일랜드가 들어갔네요. 그래서 이게 지역신문에 기사화 된 거구요.


미국은 이렇다네요.


한국은 부자들의 세금 비율이 얼마나 될까요? 


이 연구 보고서 자료는 여기에 가면 보실 수 있습니다.






반응형

Pinch Zoom Rotate 구현하기 - 3/11 -

2013. 1. 29. 21:58 | Posted by 솔웅


반응형
Posted on . Written by



The Multitouch Problem


위 코드의 장점은 multiple touche들을 쉽게 구분할 수 있다는 겁니다. 그래서 각 object들은 자신들에 할당된 touch를 잃지 않고 계속 영향을 받을 수 있는거죠. 아주 큰 장점이지만 작은 문제점도 있습니다.

"
아주 큰 장점은 setFocus 로 유저가 어떤 object를 touch 헀으면 그 object 내에서 해당 touch는 계속 유효하게 되는 겁니다. 그 object 밖으로 나가버리면 더이상 유효하지 않게 되는거죠.

작은 문제점은 다른 touch 이벤트를 receive 하게 되면 이 setFocus 는 이 display object를 stop 시킨다는 겁니다.


만약 아직 setFocus를 call 하지 않았다면 hasFocus 를 사용하는 것이 해당 object 가 그 object에서 시작하지 않은 이벤트들을 무시하도록 하는 편리한 방법입니다. 이 방법은 자주 필요한데요. 왜냐하면 유저들은 그 객체가 아니라 배경화면이나 그 객체 밖에서 시작하는 swiping 이벤트를 자주 발생시키거든요. 그 swiping 이벤트는 이 객체를 지나가게 되죠. 그래서 이 객체에서 시작되지 않은 이벤트를 무시하도록 하려고 하는 겁니다. 그리고 그 다음 드는 의문은 코로나가 어떻게 여러 객체들이 multiple touch들을 받아서 작동하도록 만드는가 입니다. 그 방법은 바로 began phase안에 tracking object를 생성하는 것입니다.


The Concept

이전에 다뤘던 코드에 약간의 변화를 주겠습니다. 우리는 began phase안에서 여러 객체들을 생성하는 하나의 object를 생성할 겁니다. 이 객체들은 각각의 touch들을 track 할 겁니다. 그리고 그 touch 가 끝나면 해당 객체를 없애도록 코딩할 겁니다. 이를 구현하기 위해 touch event의 began phse를 listen 하는 함수를 하나 만들겁니다. 그리고 moved 를 listen 하는 함수도 하나 만들거구요. 이 두개의 함수들은 target listening object와 tracking dot object들에 add 될 겁니다.


Spawning Tracking Dots




첫번째로 처음에 began phase를 handle 하게 될 객체를 생성해야 합니다. began phase에서 이 객체는 tracking dot을 생성하기 위해 function을 call 할 겁니다.



sample3.lua


system.activate("multitouch") -- turn on multitouch

 
-- create object to listen for new touches
local rect = display.newRect( 200, 200, 200, 100 )
rect:setFillColor( 0, 0, 255 )
 
-- standard multi-touch event listener
function rect:touch(e)
 
local target = e.target -- get the object which received the touch event
-- handle began phase of the touch event life cycle...
if (e.phase == "began") then
 
local dot = newTrackDot(e) -- create a tracking dot
return true -- we handled the began phase
end
 
return false -- if target is not responsible for this touch event return false
end
 
rect:addEventListener("touch") -- listen for touches starting on the touch object

간단해서 딱 보면 코드를 이해하실 수 있을 겁니다. 어떤 touch 이벤트가 일어나던지 그 began phase를 listen 할 display 객체를 생성합니다. 이 객체가 touch 이벤트의 began phase를 receive하면 새로운 display object를 생성할 함수를 call 하게 됩니다. 이 새 object는 그 객체를 생성시킨 touch를 track 하게 될 겁니다. 그 작업은 setFocus 를 call 함으로서 가능해 지죠. hasFocus 값을 세팅하지 않은 점을 잘 보세요. 왜냐하면 이 multitouch 객체들은 began phase에서만 처리되고 있거든요.



다음으로 tracking dot을 생성해야 합니다. 이 코드는 이전의 multitouch function과 거의 유사합니다.


-- creates an object to be moved
local function newTrackDot(e)
 
local circle = display.newCircle( e.x, e.y, 50 ) -- create a user interface object
circle.alpha = 0.5 -- make it less imposing
-- standard multi-touch event listener
function circle:touch(e)
 
local target = circle -- get the object which received the touch event
-- handle each phase of the touch event life cycle...
if (e.phase == "began") then
 
display.getCurrentStage():setFocus(target, e.id) -- set touch focus on this object
target.hasFocus = true -- remember that this object has the focus
return true -- indicate the event was handled
 
elseif (target.hasFocus) then -- this object is handling touches
if (e.phase == "moved") then -- move the display object with the touch
target.x, target.y = e.x, e.y
else -- "ended" and "cancelled" phases
display.getCurrentStage():setFocus(target, nil) -- remove touch focus
target.hasFocus = false -- this object no longer has the focus
end
return true -- indicate that we handled the touch and not to propagate it
end
return false -- if target is not responsible for this touch event return false
end
circle:addEventListener("touch") -- listen for touches starting on the touch layer
circle:touch(e) -- pass the began phase to the tracking dot
return circle -- return the object for use
end




이 함수에서는 단 두가지 변화만 주었습니다.

  • circle:touch(e)를 call 했습니다. 왜냐하면 이 circle 이 바로 그 생성된 객체이기 때문이죠. 그리고 touch 이벤트의 began phase를 실제로recieve 하지 않은 객체이구요. 이렇게 call 함으로서 이 circle 객체가 그 touch 이벤트의 control 을 받도록 합니다.
  • :touch() function의 시작부분에 그 circletarget 으로 사용하기 위해 수정했습니다. 왜냐하면 그 e.target property는 실제 touch began이 시작한 그 "rect" 객체이기 때문입니다.


이 코드가 실행되면 작은 파란 사각형을 볼 수 있습니다. 이 사각형은 여러개의 하얀 원들을 생성해 낼 수 있습니다. 각각의 원은 가각의 touch 에 의해 움직입니다. 이 매커니즘은 모든 touch 정보를 파란 사각형에 직접 사용하면서 실제로는 multitouch input 이 일어나는 것처럼 구현할 수 있는 방법입니다.





반응형