‘구글 안경’이 찍은 사진…“어, 양손없이도?"
ZDNet Korea 원문 기사전송 2012-05-28 18:21 최종수정 2012-05-28 18:21
구글이 준비 중인 안경형 헤드업 디스플레이(HUD, head-up displays), 일명 ‘구글 안경’으로 찍은 사진과 동영상이 대거 공개됐다. 구글은 안경형 디스플레이 관련 특허를 확보하는 등 제품 상용화에 박차를 가하고 있다... 현재까지 알려진 정보에 따르면 구글 안경은 안드로이드 운영체제(OS) 기반으로 연말께 출시될 예정이며 가격은 현재 출시된 스마트폰과 비슷한 선이 될 것으로 보인다.
Tuesday, May 29, 2012
Saturday, May 26, 2012
OS X Lion 에서 항상 스크롤바를 보이게 하는 방법
System Preferences > General > Show scroll bars 를 always 로 해줌
Always Show Scroll Bars in Mac OS X Lion
Always Show Scroll Bars in Mac OS X Lion
Labels:
Finder
Thursday, May 24, 2012
Tip: Say Goodbye to Blurry Text for Good!
Tip: Say Goodbye to Blurry Text for Good!
Want a quick fix that will prevent text from being blurry on “retina” displays of any kind? Simply paste the following code at the top of your main.lua file (or put it in an external file and require-it in):
Want a quick fix that will prevent text from being blurry on “retina” displays of any kind? Simply paste the following code at the top of your main.lua file (or put it in an external file and require-it in):
Labels:
Corona
Wednesday, May 23, 2012
Corona에서 retina display 사용하는 법
config.lua 에 다음과 같이 넣는다.
레퍼런스 :
Corona SDK: 03 Retina Images
Dynamic Image Resolution Made Easy
Content Scaling Made Easy
enabling retina display mode in corona sdk
Sprite Sheet의 경우
Sprite Sheet의 경우 위의 방식이 안되는데 다음과 같이 해결하는 방법이 있다.
Dynamic Retina SpriteSheets? Here's how!
I have to say I'm extremely pleased with the update if just because I can now finally add retina spritesheets to my game and thus having complete support for highres displays! Since I'm using even spaced SpriteSheets it was easy to do. If you're using custom sizes it should still be possible, but you're on your own.
application = {
content = {
width = 320,
height = 480,
scale = "letterBox",
fps = 60,
imageSuffix = {
["@1-5"] = 1.5, -- for Droid, Nexus One, etc.
["@2x"] = 2, -- for iPhone, iPod touch, iPad1, and iPad2
["@3x"] = 3, -- for various mid-size Android tablets
["@4x"] = 4, -- for iPad 3
}
}
}
main.lua 에 다음과 같이 써준다. local red = display.newImageRect("red.png", 57, 63) --> 57 x 63 은 이미지 사이즈
red:setReferencePoint(display.TopLeftReferencePoint); --> pivot을 중앙이 아닌 좌상단으로(안해줘도 무관)
red.x = 0
red.y = 0
코드에는 image.png 를 로딩하는 걸로 했지만 시뮬레이터를 iPhone 4 로 돌리면 알아서 image@2x.png 가 로딩된다.레퍼런스 :
Corona SDK: 03 Retina Images
Dynamic Image Resolution Made Easy
Content Scaling Made Easy
enabling retina display mode in corona sdk
Sprite Sheet의 경우
Sprite Sheet의 경우 위의 방식이 안되는데 다음과 같이 해결하는 방법이 있다.
Dynamic Retina SpriteSheets? Here's how!
I have to say I'm extremely pleased with the update if just because I can now finally add retina spritesheets to my game and thus having complete support for highres displays! Since I'm using even spaced SpriteSheets it was easy to do. If you're using custom sizes it should still be possible, but you're on your own.
Labels:
Corona
Corona SDK: Creating a Scrolling Background
Corona SDK: Creating a Scrolling Background
Daniel Williams on Jul 7th 2011 with 4 comments
The Corona SDK makes it very easy to create dynamic effects with very few lines of code. Using the Corona SDK, we will create a scrolling 2D background with graphics that we create in Photoshop.
Daniel Williams on Jul 7th 2011 with 4 comments
The Corona SDK makes it very easy to create dynamic effects with very few lines of code. Using the Corona SDK, we will create a scrolling 2D background with graphics that we create in Photoshop.
Labels:
Corona
Tuesday, May 22, 2012
다른 module의 함수를 부르는 예
iTestUtil.lua
main.lua
module(..., package.seeall)
hello = function()
print("hello!!!!")
end
main.lua
local TestUtil = require("iTestUtil")
TestUtil.hello() -- 느린 방법
local hello = TestUtil.hello -- 함수를 cache해서 빠르게 함
hello() -- 이제부터는 부를 때마다 빠르게 호출할 수 있음
Labels:
Lua
Error: iTunes Cannot Connect to this iPhone
질문 : Error: iTunes Cannot Connect to this iPhone
답 : http://www.hackint0sh.org/iphone-3g-148/error-itunes-cannot-connect-iphone-77509.htm
보충 : USB cable 을 다른 곳에 끼워보면 해결되는 경우도 있음
답 : http://www.hackint0sh.org/iphone-3g-148/error-itunes-cannot-connect-iphone-77509.htm
보충 : USB cable 을 다른 곳에 끼워보면 해결되는 경우도 있음
Labels:
아이폰
Monday, May 21, 2012
Corona Debugger
Using the Corona Debugger
I do not write bug-free Lua code (I know, shocking). Much of the time, judicious use of print() statements will be enough to help me figure out just where things have gone off the rails. But every so often, that’s not enough...
I do not write bug-free Lua code (I know, shocking). Much of the time, judicious use of print() statements will be enough to help me figure out just where things have gone off the rails. But every so often, that’s not enough...
Labels:
Corona
Sunday, May 20, 2012
Lua에서 module 사용하는 법
main.lua
testlib.lua
레퍼런스 : Modules and Packages
주의 : testlib.lua 저장시 with BOM 으로 저장하면 안된다 (line 1에서 에러가 남)
키워드 : error, separate, multiple, 별도 파일, 소스
local testlib = require("testlib")
testlib.myPrint() -- 느린 방법
local myPrint = testlib.myPrint -- 함수를 cache해서 빠르게 함
myPrint() -- 이제부터는 부를 때마다 빠르게 호출할 수 있음
testlib.lua
module(..., package.seeall)
function myPrint()
print("Hi!")
end
레퍼런스 : Modules and Packages
주의 : testlib.lua 저장시 with BOM 으로 저장하면 안된다 (line 1에서 에러가 남)
키워드 : error, separate, multiple, 별도 파일, 소스
Labels:
Lua
카카오톡 무료통화 "카운트다운"
카카오톡 무료통화 "카운트다운"
ZDNet Korea 2012-05-19 21:08
카카오톡이 글로벌 모바일인터넷전화(m-VoIP) 서비스를 위한 카운트다운에 들어갔다. 19일 업계에 따르면 모바일 메신저 카카오톡을 운영하는 카카오(대표 이제범, 이석우)는 무료 음성통화 서비스인 ‘보이스톡’ 서비스 채비를 완료하고 글로벌 출시시기를 조율중이다.
ZDNet Korea 2012-05-19 21:08
카카오톡이 글로벌 모바일인터넷전화(m-VoIP) 서비스를 위한 카운트다운에 들어갔다. 19일 업계에 따르면 모바일 메신저 카카오톡을 운영하는 카카오(대표 이제범, 이석우)는 무료 음성통화 서비스인 ‘보이스톡’ 서비스 채비를 완료하고 글로벌 출시시기를 조율중이다.
Labels:
아이폰
Saturday, May 19, 2012
table의 assignment
그냥 assign 될때는 value가 카피되고
함수에 argument로 pass 될때는 call by reference 로 넘겨진다.
함수에서 return 되는 것도 당연히 포인터가 리턴됨.
함수에 argument로 pass 될때는 call by reference 로 넘겨진다.
함수에서 return 되는 것도 당연히 포인터가 리턴됨.
function printTable(table)
print("------------")
if(table == nil) then
print("this table is nil!")
else
for k, v in pairs(table) do
print(k, v)
end
end
end
function getAnotherRefOfTable(table)
local anotherTableRef = table
anotherTableRef["job"] = "Magician"
return anotherTableRef
end
local a = {name="Kiki", job="Witch"}
local b = a -- Values are copied
printTable(a)
a = nil
printTable(a)
printTable(b)
local c = getAnotherRefOfTable(b) -- Called by reference
printTable(c)
Labels:
Lua
Friday, May 18, 2012
Corona의 Balloon Pop Sample 분석
init() 에서는 스프라이트를 만들고 타이머 이벤트를 등록한다.
타이머 이벤트에서는 풍선을 생성시켜준다.
풍선에는 터치할 때 반응하기 위한 이벤트가 붙는다.
풍선이 터치되었을 때 터지는 효과를 위한 스프라이트 생성
오류
사실 샘플 코드에는 오류가 있는데 그것은 onBoomEnd()가 절대로 불리지 않는다는 점이다.
다음과 같이 고쳐주면 된다. (참고문헌 : spriteInstance:addEventListener())
함수별
init()
sprite.newSpriteSheet()
sprite.newSpriteSet()
sprite.add()
startBalloons()
Runtime
Runtime:addEventListener()
The Corona Event Model explained
newExplosionSprite()
sprite.newSprite()
spriteInstance:prepare()
getNewBalloon()
display.newImage()
addBalloon()
object:addEventListener()
onTouch(event)
spriteInstance:addEventListener()
removeBalloon(balloon)
transition.cancel()
object:removeEventListener()
--------------------------------------------------------------------------
스프라이트 애니메이션
Advanced Animation Using Sprites
참고 : Corona의 event (중요!)
local function init()
...
explosionSpriteSheet = sprite.newSpriteSheet("BigExplosion.png", 82, 117)
explosionSet = sprite.newSpriteSet(explosionSpriteSheet, 1, 18)
sprite.add(explosionSet, "default", 1, 18, 200, 1)
popSound = audio.loadStream("pop.wav")
Runtime:addEventListener("enterFrame", onTick) -- startBalloons()
end
타이머 이벤트에서는 풍선을 생성시켜준다.
function onTick()
if(balloonsPerLevel > 0) then
if(currentBalloonsShown < balloonsShownPerLevel) then
addBalloon()
end
end
end
풍선에는 터치할 때 반응하기 위한 이벤트가 붙는다.
function addBalloon()
currentBalloonsShown = currentBalloonsShown + 1
balloonsPerLevel = balloonsPerLevel - 1
local balloon = getNewBalloon()
balloon:addEventListener("touch", onTouch)
balloon.y = display.contentHeight + balloon.contentHeight
balloon.x = math.random(display.contentWidth)
local tween = transition.to(balloon, {time=5000, y=-100, onComplete=onBalloonEscaped})
currentBalloons[balloon] = {balloon=balloon, tween=tween}
return balloon
end
function onTouch(event)
local balloon = event.target
balloon.isVisible = false
local explosion = newExplosionSprite()
explosion.x = balloon.x
explosion.y = balloon.y
explosion:addEventListener("end", onBoomEnd)
explosion:play()
removeBalloon(balloon)
audio.play(popSound)
end
풍선이 터치되었을 때 터지는 효과를 위한 스프라이트 생성
function newExplosionSprite()
local explosion = sprite.newSprite(explosionSet)
explosion:prepare("default")
explosion.isHitTestable = false
return explosion
end
오류
사실 샘플 코드에는 오류가 있는데 그것은 onBoomEnd()가 절대로 불리지 않는다는 점이다.
다음과 같이 고쳐주면 된다. (참고문헌 : spriteInstance:addEventListener())
local function onBoomEnd(event)
if(event.phase == "end") then
print("onBoomEnd")
event.target:removeSelf()
end
end
function onTouch(event)
local balloon = event.target
balloon.isVisible = false
local explosion = newExplosionSprite()
explosion.x = balloon.x
explosion.y = balloon.y
print('explosion:addEventListener("~", onBoomEnd)')
explosion:addEventListener("sprite", onBoomEnd)
explosion:play()
removeBalloon(balloon)
audio.play(popSound)
end
--------------------------------------------------------------------------함수별
init()
sprite.newSpriteSheet()
sprite.newSpriteSet()
sprite.add()
startBalloons()
Runtime
Runtime:addEventListener()
The Corona Event Model explained
newExplosionSprite()
sprite.newSprite()
spriteInstance:prepare()
getNewBalloon()
display.newImage()
addBalloon()
object:addEventListener()
onTouch(event)
spriteInstance:addEventListener()
removeBalloon(balloon)
transition.cancel()
object:removeEventListener()
--------------------------------------------------------------------------
스프라이트 애니메이션
Advanced Animation Using Sprites
참고 : Corona의 event (중요!)
Labels:
Corona
Thursday, May 17, 2012
파일 복사 도중 Error -8060 발생 원인 (OS X)
질문 : 파일 카피시 Error -8060 이 발생하는데 어떻게 해야 하나?
답 : 파일 전체 패스가 너무 긴 것은 없는지 체크해본다.
설명 : 오리지널 파일이 없는 Alias file 에 대해 생기는 에러라는 이야기가 많은데
그게 file copy가 중단될 정도의 심각한 오류라는 것은 좀 이상하다.
실제로 생긴 사례를 보면 파일 전체 패스가 너무 긴 경우에 생기는 것 같다.
예를 들어 컴 자체에서는 문제가 없더라도 외장하드로 옮기게 되면 전체 패스는 더 길어질 수 있으므로
카피 도중에 이 에러가 뜨게 된다.
레퍼런스 : what is error code -8060
답 : 파일 전체 패스가 너무 긴 것은 없는지 체크해본다.
설명 : 오리지널 파일이 없는 Alias file 에 대해 생기는 에러라는 이야기가 많은데
그게 file copy가 중단될 정도의 심각한 오류라는 것은 좀 이상하다.
실제로 생긴 사례를 보면 파일 전체 패스가 너무 긴 경우에 생기는 것 같다.
예를 들어 컴 자체에서는 문제가 없더라도 외장하드로 옮기게 되면 전체 패스는 더 길어질 수 있으므로
카피 도중에 이 에러가 뜨게 된다.
레퍼런스 : what is error code -8060
Labels:
Finder
Wednesday, May 16, 2012
String 예제
y = 2012; m = 3; d = 1
s = string.format("%04d-%02d-%02d", y, m, d)
print(s)
s = string.format("%.4f", math.pi)
print(s)
s = "This is for you. I love you."
i = string.find(s, "you")
print(i)
i = string.find(s, "you", i+1)
print(i)
s = string.gsub(s, "you", "Jenny")
print(s)
s = "My girlfriend(Jenny) is lovely(cute(pretty))"
s = string.gsub(s, "%b()", "(---)")
print(s)
레퍼런스 : Programming in Lua / Chapter 20. The String Library
Labels:
Lua
table.insert(), table.remove()
local a = {"Ariel", "Barbie", "Clara"}
table.insert(a, 3, "Zelda")
print("-----------------")
for k, v in pairs(a) do
print(k, v)
end
table.remove(a, 2)
print("-----------------")
for k, v in pairs(a) do
print(k, v)
end
table.remove(a, 1)
print("-----------------")
for k, v in pairs(a) do
print(k, v)
end
Labels:
Lua
__index, __newindex Metamethod
MyArr = {}
MyArr.Meta = {}
MyArr.Meta.__tostring = function(a)
result = ""
for k, v in pairs(a.arr) do
result = result .. "[" .. k .. "]" .. " " .. v .. "\t"
end
return result
end
MyArr.Meta.__index = function(a, key)
return (a.arr[key])
end
MyArr.Meta.__newindex = function(a, key, value)
a.arr[key] = value
end
function MyArr.new(a)
local instance = {}
instance.arr = {}
for k, v in pairs(a) do
instance.arr[k] = v
end
function instance:printMe()
print("----------------------")
for k, v in pairs(self.arr) do
print(k, v)
end
end
setmetatable(instance, MyArr.Meta)
return instance
end
do
local a = MyArr.new{"Mimi", "Ki", "Jacky"}
a[5] = "Tom"
print(tostring(a))
a:printMe()
end
Programming in Lua / Chapter 13. Metatables and Metamethods / 레퍼런스 : 13.4.1 – The __index Metamethod
Labels:
Lua
아이폰과 아이패드에서 블루투스 키보드 쓰기
Review: Apple Wireless Bluetooth Keyboard with iPad and iPhone
Posted by Alan. Last updated: December 15, 2011.
인용 : One of the benefits of using the iPad or iPhone for writing is that, because it’s more difficult to switch tasks, it increases your concentration and productivity when writing...
Posted by Alan. Last updated: December 15, 2011.
인용 : One of the benefits of using the iPad or iPhone for writing is that, because it’s more difficult to switch tasks, it increases your concentration and productivity when writing...
아이폰에서 bluetooth keyboard로 타이핑할 때 한글/영문 모드 전환 안하고 하는 법
한글 모드에서 Option 누르고 타이핑하면 영문이 찍힌다 (이건 Mac OS X에서도 동일하지만 아이폰에서 더 편한 feature)
아이폰에서 bluetooth keyboard 연결해서 쓸 때 아이폰 자체 키보드 나타나게 하는 방법
질문 : 아이폰에서 bluetooth keyboard 연결해서 쓰면 아이폰 자체 키보드는 안나타나게 되는데 아이폰 키보드를 나타나게 하는 방법?
답 : eject 버튼을 누르면 bluetooth keyboard 가 연결된 상태로 아이폰 자체 키보드를 show/hide 할 수 있다(toggle).
보충 : 이 방법을 알면, 폰을 키보드 없는 곳으로 가져갈 때 일일이 Settings > General > Bluetooth 로 들어가서 ON/OFF 를 해줄 필요가 없다.
인용 : Eject button: Show or hide onscreen keyboard
레퍼런스 :
Bluetooth Keyboard Shortcuts That Work with iPad/iPhone Devices
Use Keyboard Shortcuts with Bluetooth Keyboard
검색어 : iphone bluetooth keyboard shortcuts
답 : eject 버튼을 누르면 bluetooth keyboard 가 연결된 상태로 아이폰 자체 키보드를 show/hide 할 수 있다(toggle).
보충 : 이 방법을 알면, 폰을 키보드 없는 곳으로 가져갈 때 일일이 Settings > General > Bluetooth 로 들어가서 ON/OFF 를 해줄 필요가 없다.
인용 : Eject button: Show or hide onscreen keyboard
레퍼런스 :
Bluetooth Keyboard Shortcuts That Work with iPad/iPhone Devices
Use Keyboard Shortcuts with Bluetooth Keyboard
검색어 : iphone bluetooth keyboard shortcuts
array의 멤버에 nil이 assign되는 경우
array의 멤버에 nil이 assign되는 경우, 아무것도 안해주는 것과 동일하다. 예를 들어 다음과 같이 해주면
local x = {[10] = "A", [20] = "B", [30] = nil, [40] = false}
for k, v in pairs(x) do
print(k, v)
end
결과 : 40 false
10 A
20 B
[30]에는 아무것도 존재하지 않음을 알 수 있다.
Labels:
Lua
Metatable 을 이용해 만든 집합연산
다음은 Chapter 13. Metatables and Metamethods / 13.1 – Arithmetic Metamethods 에 나온 Set 클래스를 다시 써 본 것.
-- Metatable -------------------------------
SetMeta = {}
SetMeta.__tostring = function(a)
result = ""
for k in pairs(a) do
if(type(k) == "number") then -- 이것을 체크 안하면 함수까지 나열함
result = result .. k .. " "
end
end
return result
end
SetMeta.__add = function(a, b)
local result = Set.new{}
for k, v in pairs(a) do
if(v == true) then result[k] = true end
end
for k, v in pairs(b) do
if(v == true) then result[k] = true end
end
return result
end
SetMeta.__mul = function(a, b)
local result = Set.new{}
for k, v in pairs(a) do
if(type(k) == "number") then
if(v == true) then
result[k] = b[k] -- nil 이 assign 되는 경우, 아무것도 안해주는 것과 동일.
end
end
end
return result
end
-- Set Class -------------------------------
Set = {}
function Set.new (a)
local instance = {}
for k, v in ipairs(a) do instance[v] = true end
function instance:printMe()
for k, v in pairs(self) do
if(type(k) == "number") then
print(k, v)
end
end
end
setmetatable(instance, SetMeta)
return instance
end
-- Main -------------------------------
do
local a = Set.new{10, 20, 30}
local b = Set.new{20, 30, 40}
local c = a + b
local d = a * b
print("--------")
print(tostring(c))
print(tostring(d))
print("--------")
c:printMe()
print("--------")
d:printMe()
end
키워드 : 집합 연산, union, intersection
Labels:
Lua
Tuesday, May 15, 2012
Metatables and Metamethods
Metatable이란 Metamethod라는 함수들을 담고 있는 테이블을 말한다. Metatable이 table에 붙으면 그 테이블의 행동양식이 바뀐다. 예를 들어 보통의 테이블은 + 로 더하는 operation을 할 수 없지만, + 연산의 정의를 갖고 있는 메타테이블을 추가해줌으로써 + 연산을 가능하게 할 수 있다. 다음의 __add나 __tostring이 metamethod 인데 __add 라는 이름은 + operator 를 사용할 수 있는 특별한 키워드이고, __tostring 은 tostring(obj)의 형태로 쓸 수 있게 하는 특별한 키워드이다. 그러한 키워드들은 Metatable Events 에 정리되어 있다.
CharacterMeta = {}
CharacterMeta.__add = function(a, b)
return Character.new(a.name .. " " .. b.name, a.HP + b.HP)
end
CharacterMeta.__tostring = function(a)
return (a.name .. "\t" .. a.HP)
end
Character = {}
Character.new = function(name, HP)
local instance = {}
instance.name = name
instance.HP = HP
setmetatable(instance, CharacterMeta)
return instance
end
do
local heroine = Character.new("Marilyn", 10)
local hero = Character.new("Manson", 20)
print(tostring(heroine))
print(tostring(hero))
local hybrid = heroine + hero
print(tostring(hybrid))
end
Labels:
Lua
아이북스發 1인 전자책 출판시대 열렸다
아이북스發 1인 전자책 출판시대 열렸다
아이패드 정식 출시안된 국내서도 ISBN·'세금ID' EIN 발급 받은뒤
美 아이튠즈 커넥터 활용하면 등재 가능
애플은 아이패드의 출시와 함께 전자책 스토어 '아이북스(iBooks)'를 운용하고 있다. 이를 활용하면 누구나 자유롭게 자신의 콘텐츠를 전자책으로 출간할 수 있다...
아이패드 정식 출시안된 국내서도 ISBN·'세금ID' EIN 발급 받은뒤
美 아이튠즈 커넥터 활용하면 등재 가능
애플은 아이패드의 출시와 함께 전자책 스토어 '아이북스(iBooks)'를 운용하고 있다. 이를 활용하면 누구나 자유롭게 자신의 콘텐츠를 전자책으로 출간할 수 있다...
Monday, May 14, 2012
개별 instance에 특화된 member function 넣기
Character = {}
Character.new = function(name, HP)
local instance = {}
instance.name = name
instance.HP = HP
function instance:decreaseHP(delta)
self.HP = self.HP - delta
end
function instance:printMe()
print(self.name, self.HP)
end
return instance
end
local hero = Character.new("Luke", 10)
local vader = Character.new("Vader", 20)
local soldier = Character.new("Soldier", 5)
hero:printMe()
vader:printMe()
soldier:printMe()
function vader:talk()
print("I am your father")
end
function soldier:printMe()
print(self.name, self.HP, "March!")
end
hero:decreaseHP(1)
vader:decreaseHP(2)
soldier:decreaseHP(4)
vader:talk()
hero:printMe()
vader:printMe()
soldier:printMe()
Lua에서는 이처럼 특정 오브젝트만이 가지는 함수를 넣을 수도 있고, 같은 클래스라도 오브젝트 별로 다른 함수를 넣어줄 수도 있다.
(애초에 language 안에 클래스라는 개념이 없기 때문에 가능한 일)
Labels:
Lua
Lua에서 클래스 정의하는 법 (3) Closure 방식
다음은 lua-users.org/wiki 의 Object Orientation Closure Approach 에 나오는 스타일을 따라한 것. (2) Table 방식과의 performance 비교도 되어 있음. 결론은, 성능상으로는 둘 다 비슷하므로 코딩 스타일에 따라 선택하는 게 좋다는 것.
Hero = {}
Hero.new = function(name, HP)
local instance = {}
local maxHP = 100
local name_ = name or "anonymous"
local HP_ = HP or maxHP
instance.setHP = function(hp)
HP_ = hp
end
instance.printMe = function()
print("Hero : " .. name_ , "HP=" .. HP_)
end
return instance
end
hero1 = Hero.new(nil, nil)
hero2 = Hero.new("Mika", 80)
hero1.printMe()
hero2.printMe()
hero2.setHP(70)
hero1.printMe()
hero2.printMe()
키워드 : OOP
Labels:
Lua
Lua에서 클래스 정의하는 법 (2) Table 방식
다음은 lua-users.org/wiki 의 Object Orientation Closure Approach 에 나오는 스타일을 따라 정의한 것. 대체로 이 방법이 쓰임
사실 Hero = {} 하고 나서 Hero.new() 를 정의하는 것은 constructor 를 Hero.new 같은 형식으로 쓸 수 있게 하기 위한 것 뿐이다. 사실 Hero = {} 를 정의하지 않고 HeroNew() 라는 이름으로 function 정의를 해버려도 된다.
local instance = {} 로 안하고
instance = {} 로 해버리면
instance 가 global 이 되어 버려서 hero1 과 hero2 가 항상 똑같은 global object 를 가리키게 된다.
local 선언을 절대 잊어서는 안된다.
instance.setHP = function(self, hp) 는
function instance.setHP(self, hp) 또는
function instance:setHP(hp) 로 써줄 수 있다.
실전에서는 "보다 간결한 방식이 있을 때는 그 방식을 채택한다"는 원칙을 갖고 코딩하는 것이 좋을 것이다.
키워드 : OOP
Hero = {}
Hero.new = function(name, HP)
local instance = {}
local maxHP = 100
instance.name = name or "anonymous"
instance.HP = HP or maxHP
instance.setHP = function(self, hp)
self.HP = hp
end
instance.printMe = function(self)
print("Hero : " .. self.name , "HP=" .. self.HP)
end
return instance
end
hero1 = Hero.new(nil, nil)
hero2 = Hero.new("Mika", 80)
hero1:printMe()
hero2:printMe()
hero2:setHP(70)
hero1:printMe()
hero2:printMe()
hero1:setHP(90)
hero1:printMe()
hero2:printMe()
보충 : 사실 Hero = {} 하고 나서 Hero.new() 를 정의하는 것은 constructor 를 Hero.new 같은 형식으로 쓸 수 있게 하기 위한 것 뿐이다. 사실 Hero = {} 를 정의하지 않고 HeroNew() 라는 이름으로 function 정의를 해버려도 된다.
local instance = {} 로 안하고
instance = {} 로 해버리면
instance 가 global 이 되어 버려서 hero1 과 hero2 가 항상 똑같은 global object 를 가리키게 된다.
local 선언을 절대 잊어서는 안된다.
instance.setHP = function(self, hp) 는
function instance.setHP(self, hp) 또는
function instance:setHP(hp) 로 써줄 수 있다.
실전에서는 "보다 간결한 방식이 있을 때는 그 방식을 채택한다"는 원칙을 갖고 코딩하는 것이 좋을 것이다.
키워드 : OOP
Labels:
Lua
Lua에서 클래스 정의하는 법 (1)
다음은 Programming in Lua 의 Chapter 16. Object-Oriented Programming 에 나오는 스타일을 따라 정의한 것. 설명을 위해 책에 등장하긴 했지만 실전에선 잘 안쓰이는 방식.
Hero = {
name = "anonymous",
HP = 100,
}
Hero.init = function(self, name, hp)
self.name = name
self.HP = hp
end
Hero.printMe = function(self)
print("Hero : " .. self.name , "HP=" .. self.HP)
end
hero1 = {init = Hero.init, printMe = Hero.printMe}
hero1:init("Jack", 70)
hero1:printMe() -- Hero : Jack HP=70
hero2 = {init = Hero.init, printMe = Hero.printMe}
hero2:init("Mimi", 50)
hero2:printMe() -- Hero : Mimi HP=50
hero1:printMe() -- Hero : Jack HP=70
키워드 : OOP
Labels:
Lua
애플 “전자책 구매는 앱 내부 결제만”
애플 “전자책 구매는 앱 내부 결제만”
bloter.net by 정보라 | 2011. 07. 26
애플은 잡지, 신문, 음악, 비디오 등 콘텐츠 기반의 발행인들이 iOS 앱에 결제 기능을 넣으려면 “애플의 앱 내부 결제 시스템은 반드시 도입해야 하며, 결제액의 30%는 애플이 가져가겠다”라고 했다.
bloter.net by 정보라 | 2011. 07. 26
애플은 잡지, 신문, 음악, 비디오 등 콘텐츠 기반의 발행인들이 iOS 앱에 결제 기능을 넣으려면 “애플의 앱 내부 결제 시스템은 반드시 도입해야 하며, 결제액의 30%는 애플이 가져가겠다”라고 했다.
Labels:
Business
앱 승인 거절되면 어쩌지…’웹앱’이 있잖아
앱 승인 거절되면 어쩌지…’웹앱’이 있잖아
bloter.net by 정보라 | 2011. 03. 10
앱 내부 결제 방식을 쓰지 않는다는 이유로 애플에서 앱 승인을 거절 당한 Arc90이 새로운 돌파구를 찾았다. 이 회사는 9일 자사의 웹사이트를 HTML5로 개선했다. 이른바 웹앱을 만든 셈이다...
bloter.net by 정보라 | 2011. 03. 10
앱 내부 결제 방식을 쓰지 않는다는 이유로 애플에서 앱 승인을 거절 당한 Arc90이 새로운 돌파구를 찾았다. 이 회사는 9일 자사의 웹사이트를 HTML5로 개선했다. 이른바 웹앱을 만든 셈이다...
Labels:
Business
OOP in Lua
가장 알기 쉬운 설명 링크 :
[1] Object Orientation Closure Approach
[2] Lua OOP (Litt's Lua Laboratory)
[3] Programming in Lua - Chapter 16. Object-Oriented Programming
[3]은 [1], [2]를 다 이해한 후에 보는 것이 알기 쉬움
보충 :
[2] 에서 좀 잘못된 부분이 있는데
local x, local y 로 해주어야 함.
미러 :
Lua로 Object Oriented Programming 하기 - class 정의하기/Lua OOP.html
Lua로 Object Oriented Programming 하기 - class 정의하기/lua-users wiki - Object Orientation Closure Approach.html
참고자료 모음 :
Object Orientation Closure Approach
Object Orientation Tutorial - Representation of classes in Lua
Object Oriented Programming in Lua
Inheritance Tutorial
Metamethods Tutorial
Inspired Lua - Object Classes
인용 : Lua wasn't built with OOP in mind, it was built with atomic computer programming features such as closures, iterators, tables, metatables, tail recursion.
출처 : Discussion: Many Ways to Do OOP
키워드 : Object Oriented, class definition
[1] Object Orientation Closure Approach
[2] Lua OOP (Litt's Lua Laboratory)
[3] Programming in Lua - Chapter 16. Object-Oriented Programming
[3]은 [1], [2]를 다 이해한 후에 보는 것이 알기 쉬움
보충 :
[2] 에서 좀 잘못된 부분이 있는데
Point.new = function(x, y)
-- #PRIVATE VARIABLES
local self = {} -- Object to return
x = x or 0 -- Default if nil
y = y or 0 -- Default if nil
와 같은 코드가 있는데 이렇게 하면 x와 y는 global variable이 되어 버린다.local x, local y 로 해주어야 함.
미러 :
Lua로 Object Oriented Programming 하기 - class 정의하기/Lua OOP.html
Lua로 Object Oriented Programming 하기 - class 정의하기/lua-users wiki - Object Orientation Closure Approach.html
참고자료 모음 :
Object Orientation Closure Approach
Object Orientation Tutorial - Representation of classes in Lua
Object Oriented Programming in Lua
Inheritance Tutorial
Metamethods Tutorial
Inspired Lua - Object Classes
인용 : Lua wasn't built with OOP in mind, it was built with atomic computer programming features such as closures, iterators, tables, metatables, tail recursion.
출처 : Discussion: Many Ways to Do OOP
키워드 : Object Oriented, class definition
Labels:
Lua
Sunday, May 13, 2012
3D Engines for the iPhone
Unity 3D Engine
ShiVa3D
SIO2 Interactive, SIO2
링크 :
Review of 3D Engines for the iPhone (2009년 자료)
검색어 : 3D game engine cross platform iphone 2012
ShiVa3D
SIO2 Interactive, SIO2
링크 :
Review of 3D Engines for the iPhone (2009년 자료)
검색어 : 3D game engine cross platform iphone 2012
Labels:
game development
Unity3D
Create Games With Unity
Unity is a feature rich, fully integrated development engine for the creation of interactive 3D content. It provides complete, out-of-the-box functionality to assemble high-quality, high-performing content and publish to multiple platforms. Unity helps indie developers and designers, small and major studios, multinational corporations, students and hobbyists to drastically reduce the time, effort and cost of making games.
링크 : http://unity3d.com/
키워드 : iphone game 3D engine
참고 : Digital Tutors 에서도 Unity 강좌 코너가 있음
Unity is a feature rich, fully integrated development engine for the creation of interactive 3D content. It provides complete, out-of-the-box functionality to assemble high-quality, high-performing content and publish to multiple platforms. Unity helps indie developers and designers, small and major studios, multinational corporations, students and hobbyists to drastically reduce the time, effort and cost of making games.
링크 : http://unity3d.com/
키워드 : iphone game 3D engine
참고 : Digital Tutors 에서도 Unity 강좌 코너가 있음
Labels:
game development
Nested function
function printReverse(str)
function reverseString(s)
return string.reverse(s)
end
print(reverseString(str))
end
printReverse("ANONYMOUS")
Labels:
Lua
Variable Arguments
function printAll(...)
for i=1, #arg do
print(i, arg[i])
end
end
printAll("Megadeth", "Metallica", "Slayer", "Anthrax")
Labels:
Lua
Looping
local a = {Mustaine = "Megadeth", Hetfield = "Metallica", King = "Slayer", Yngwie = "Rising Force"}
print ("--next--------------------------------------")
do
local k, v
k, v = next(a, nil)
while k do
print(k, v)
k, v = next(a, k)
end
end
print ("--pairs--------------------------------------")
do
for i, v in pairs(a) do
print(i, v)
end
end
Labels:
Lua
Lua의 closure 이용해 array iterator 만든 예
function array_iterator(a, startIndex, endIndex)
local i = startIndex - 1
return function()
i = i + 1
if (i > endIndex) then
return nil
else
if (i <= #a) then
return i, a[i]
end
end
end
end
local a = {"Ariel", "Betty", "Clara"}
for i, v in array_iterator(a, 1, 3) do
print(i, v)
end
Labels:
Lua
Lua의 closure에서 두개 이상의 함수를 리턴하는 예
function stateChanger()
local n = 9
function inc()
n = n + 1; return n
end
function dec()
n = n - 1; return n
end
return inc, dec
end
local add, sub = stateChanger()
print(add()) -- 10
print(add()) -- 11
print(add()) -- 12
print(sub()) -- 11
print(sub()) -- 10
print(add()) -- 11
print(add()) -- 12
print(sub()) -- 11
Labels:
Lua
Lua의 closure를 이용한 iterator 구현 예
function integer_iterator(a, b)
local n = a - 1
return function()
n = n + 1
if (n > b) then return nil
else return n
end
end
end
for n in integer_iterator(10, 15) do
print(n)
end
Labels:
Lua
Lua의 closure를 이용한 코드
maker()는 일종의 factory. maker()가 는 iter()라는 함수를 리턴한다.
function maker()
local n = 0
function iter()
n = n + 1
return n
end
return iter
end
위와 아래의 코드는 동일하다. function에 이름을 붙였는지 안붙였는지의 차이. function maker()
local n = 0
return function()
n = n + 1
return n
end
end
출처 : Litt's Lua Laboratory: Lua Closures and Iterators (With Snippets)
Labels:
Lua
Lua 의 closure 란 무엇인가?
질문 : Lua 의 closure 란 무엇인가?
답 : In computer science, a closure (also lexical closure or function closure) is a function together with a referencing environment for the non-local variables of that function.
레퍼런스 : http://en.wikipedia.org/wiki/Closure_(computer_science)
인용 : Lua uses the concept of a closure - in Lua, variables that are local to a function are also available in functions that are defined within that function i.e. within nested definitions, or 'within the outer closure'.
레퍼런스 : What are closures in Lua?
답 : In computer science, a closure (also lexical closure or function closure) is a function together with a referencing environment for the non-local variables of that function.
레퍼런스 : http://en.wikipedia.org/wiki/Closure_(computer_science)
인용 : Lua uses the concept of a closure - in Lua, variables that are local to a function are also available in functions that are defined within that function i.e. within nested definitions, or 'within the outer closure'.
레퍼런스 : What are closures in Lua?
Labels:
Lua
17개월 된 아이에게 '뉴 아이패드' 줬더니…
17개월 된 아이에게 '뉴 아이패드' 줬더니…
[이과 출신 기자의 IT 다시 배우기]④뉴 아이패드 써보니
...일부에서 제기하는 발열 문제는 심각한 수준은 아니었다. 많은 LTE(롱텀에볼루션)폰은 이보다 더 많은 열을 내기 때문이다.
키워드 : iPad
[이과 출신 기자의 IT 다시 배우기]④뉴 아이패드 써보니
...일부에서 제기하는 발열 문제는 심각한 수준은 아니었다. 많은 LTE(롱텀에볼루션)폰은 이보다 더 많은 열을 내기 때문이다.
키워드 : iPad
Labels:
아이패드
Lua의 tail call
Tail call 이란 함수 내에서 다른 함수를 call 할때 기존의 방식처럼 stack 에 쌓이는 게 아니라
goto 방식으로 이동하는 방식. 따라서 아무리 많이 recursive call 을 하더라도 stack overflow 가
생기지 않는다. Lua에서는 return func(args) 의 형태만이 tail call 이다.
goto 방식으로 이동하는 방식. 따라서 아무리 많이 recursive call 을 하더라도 stack overflow 가
생기지 않는다. Lua에서는 return func(args) 의 형태만이 tail call 이다.
Labels:
Lua
recursive function 예 (forward declaration 사용)
local factorial
function factorial(n)
if (n == 1) then return 1
else
return factorial(n - 1) * n
end
end
print(factorial(5))
Labels:
Lua
function을 redefine하는 예
do
local oldSin = math.sin
local degToRad = math.pi / 180
math.sin = function (x)
return oldSin(x * degToRad)
end
end
print("sin 30 = " .. math.sin(30))
Labels:
Lua
Saturday, May 12, 2012
table.sort 를 이용한 reverse sort
nicknames = {
"Mike",
"John",
"Lenny",
"Ariel",
"Yngwie",
}
function sortByNameReverse(tableToSort)
table.sort(tableToSort, function(a, b) return a > b end)
end
sortByNameReverse(nicknames)
for i, v in pairs(nicknames) do
print(i, v)
end
Labels:
Lua
table.sort 간단 예제
nicknames = {
"Mike",
"John",
"Lenny",
"Ariel",
"Yngwie",
}
function sortByName(tableToSort)
table.sort(tableToSort)
end
sortByName(nicknames)
for i, v in pairs(nicknames) do
print(i, v)
end
table.sort 의 comparision 함수의 기본값은 a < b
Labels:
Lua
Anonymous Function 을 이용한 table.sort
nicknames = {
{name = "Mike", nick="Kokoa"},
{name = "John", nick="Berserker"},
{name = "Lenny", nick="Angelina"},
{name = "Ariel", nick="Zelda"},
{name = "Yngwie", nick="Rising Force"},
}
function sortByNameReverse(tableToSort)
table.sort(tableToSort, function (a,b) return (a.name > b.name) end)
end
sortByNameReverse(nicknames)
for i, v in pairs(nicknames) do
print(v.name, v.nick)
end
table.sort 의 default 비교 함수는 < 이다.참고링크 : Table Library Tutorial
Labels:
Lua
Lua의 function 은 anonymous
Lua의 function 은 사실은 anonymous 하다.
우리가 function name 이라고 생각하는 것은 사실 그 function 을 가리키는 pointer 일 뿐이다.
Lua 에서 다음 코드는
function foo (x) return x + 100 end
다음 코드의 syntactic sugar에 불과하다
foo = function (x) return x + 100 end
우리가 function name 이라고 생각하는 것은 사실 그 function 을 가리키는 pointer 일 뿐이다.
Lua 에서 다음 코드는
function foo (x) return x + 100 end
다음 코드의 syntactic sugar에 불과하다
foo = function (x) return x + 100 end
Labels:
Lua
Lua의 function는 pointer 값처럼 사용 가능
function myAdd(x, y)
return x + y
end
function myMul(x, y)
return x * y
end
local x, y = 20, 10
func = myAdd; local a = func(x, y)
func = myMul; local b = func(x, y)
print("myAdd : " .. a)
print("myMul : " .. b)
키워드 : anonymous function
Labels:
Lua
애플 아이튠즈(iTunes)의 동기화 개념 깔끔 정리
기본 개념 : 아이튠즈를 실행하여 PC와 아이폰을 동기화 시키는 경우, 다음 세가지 경우가 있다.
예외 : 사진 파일 등에는 이런 개념이 적용되지 않게 되어 있다. 예를 들어 아이튠즈에서
Sync photos from iPhoto 를 해주더라도 아이폰에서 찍은 사진이 없어지거나 하지 않고, 단지
아이튠즈의 사진 데이터가 아이폰으로 옮겨올 뿐이다 (아이폰에서 삭제하지도 못한다)
사진 파일은 아이폰과 PC에서 동시에 변경될 가능성이 높은 데이터이기 때문에 예외를 둔 것.
- 아이폰 쪽에서만 변경되었을 때 : 아이폰 → 아이튠즈
(아이튠즈의 데이터를 아이폰의 데이터에 일치시켜준다) - 아이튠즈 쪽에서만 변경되었을 때 : 아이폰 ← 아이튠즈
(아이폰의 데이터를 아이튠즈의 데이터와 같도록 일치시켜준다) - 아이폰과 아이튠즈 둘 다 변경되었을 때 : 아이폰 ← 아이튠즈 (2와 동일)
(아이폰의 변경사항은 무시되고 아이튠즈의 데이터로 덮어써진다)
(A) 아이폰을 컴퓨터에 꽂을 때는 아무것도 건드리지 말고 그냥 동기화만 해준다이렇게만 하면 데이터가 유실될 염려가 없다.
(B) 아이튠즈에서 뭔가 변경하고 싶다면 먼저 (A), 즉 아이폰과의 동기화를 하고 나서 한다
예외 : 사진 파일 등에는 이런 개념이 적용되지 않게 되어 있다. 예를 들어 아이튠즈에서
Sync photos from iPhoto 를 해주더라도 아이폰에서 찍은 사진이 없어지거나 하지 않고, 단지
아이튠즈의 사진 데이터가 아이폰으로 옮겨올 뿐이다 (아이폰에서 삭제하지도 못한다)
사진 파일은 아이폰과 PC에서 동시에 변경될 가능성이 높은 데이터이기 때문에 예외를 둔 것.
Labels:
아이폰
Friday, May 11, 2012
Calibre - txt to epub converter (free)
소개 : Calibre is an open source e-book management tool. Simply put, calibre allows you to organize your e-book collection, convert e-books to various formats, and interact with your e-book reader, all in an intuitive and friendly manner. It is compatible with Microsoft Windows – XP, Vista, and 7 – as well as Apple's OS X (and various flavors of Linux).
간단 사용법 :
1. 가운데의 빈 창으로 txt 파일을 끌어넣는다.
2. 책 커버로 하고 싶은 이미지를 우측의 책 모양 그림으로 끌어넣는다.
3. 위쪽의 Convert books 버튼을 누른다.
4. 변환 창이 뜨면 Output format이 EPUB로 된것을 확인한다.
Title, Author 를 입력하고 OK 를 누르면 epub 로의 변환이 시작된다.
5. 변환이 완료되면 우측에 Formats : 에 EPUB 가 표시된다.
6. 아래쪽의 Path : Click to open 을 누르면 epub 파일이 생성된 폴더가 열린다.
epub 보는 법 :
아이폰에서 ebook viewer 로 stanza 를 사용하는 경우
1. iTunes의 응용프로그램 탭으로 가서
2. stanza의 도큐먼트에 epub 파일을 끌어넣으면 된다.
참고 :
참고로 다음과 같이 되어 있는 라인은 챕터명으로 인식되어 크게 표시된다. 단 [제목] 부분은 영문이어야 함.
Part 1 [제목], Part 2 [제목]...
Chapter 1 [제목], Chapter 2 [제목]...
#1 [제목], #2 [제목]...
다음과 같이 [제목] 부분이 아예 없어도 챕터명으로 크게 표시된다.
Part 1, Part 2...
------------- 는 긴 가로줄로 표시된다.
이런 기능의 세부적인 것은 옵션으로 직접 지정할 수도 있는 것으로 보이지만 그 방법이 너무 복잡하므로
그냥 디폴트 세팅으로 사용하는 것을 권장.
다운로드 : calibre-ebook.com
참고 : Convert any text to epub for Apples iBooks app!
간단 사용법 :
1. 가운데의 빈 창으로 txt 파일을 끌어넣는다.
2. 책 커버로 하고 싶은 이미지를 우측의 책 모양 그림으로 끌어넣는다.
3. 위쪽의 Convert books 버튼을 누른다.
4. 변환 창이 뜨면 Output format이 EPUB로 된것을 확인한다.
Title, Author 를 입력하고 OK 를 누르면 epub 로의 변환이 시작된다.
5. 변환이 완료되면 우측에 Formats : 에 EPUB 가 표시된다.
6. 아래쪽의 Path : Click to open 을 누르면 epub 파일이 생성된 폴더가 열린다.
epub 보는 법 :
아이폰에서 ebook viewer 로 stanza 를 사용하는 경우
1. iTunes의 응용프로그램 탭으로 가서
2. stanza의 도큐먼트에 epub 파일을 끌어넣으면 된다.
참고 :
참고로 다음과 같이 되어 있는 라인은 챕터명으로 인식되어 크게 표시된다. 단 [제목] 부분은 영문이어야 함.
Part 1 [제목], Part 2 [제목]...
Chapter 1 [제목], Chapter 2 [제목]...
#1 [제목], #2 [제목]...
다음과 같이 [제목] 부분이 아예 없어도 챕터명으로 크게 표시된다.
Part 1, Part 2...
------------- 는 긴 가로줄로 표시된다.
이런 기능의 세부적인 것은 옵션으로 직접 지정할 수도 있는 것으로 보이지만 그 방법이 너무 복잡하므로
그냥 디폴트 세팅으로 사용하는 것을 권장.
다운로드 : calibre-ebook.com
참고 : Convert any text to epub for Apples iBooks app!
Labels:
eBook
iphone 용 offline eBook reader 중 가장 쓸만한 것
질문 : iphone 용 offline eBook reader 중 가장 쓸만한 것
답 : Stanza
설명 : epub 파일을 읽을 수 있음. mobi file 은 안됨
주의점 : 사용하다가 화면이 어두워져서 당황하는 경우가 있는데
그것은 손가락으로 올리고 내리면 화면 밝기가 조절되는 stanza의 기능 때문에 그런 것임
(출처 : Stanza e-book app – how to fix the screen brightness)
(검색어 : stanza dark screen)
다운로드 : AppStore > Stanza
os x 용도 있음 http://stanza.en.softonic.com/mac
레퍼런스 : http://www.readwriteweb.com/archives/seven_must-have_offline_apps_for_iphone_and_ipod_touch.php
검색어 : google > iphone offline ebook reader
답 : Stanza
설명 : epub 파일을 읽을 수 있음. mobi file 은 안됨
주의점 : 사용하다가 화면이 어두워져서 당황하는 경우가 있는데
그것은 손가락으로 올리고 내리면 화면 밝기가 조절되는 stanza의 기능 때문에 그런 것임
(출처 : Stanza e-book app – how to fix the screen brightness)
(검색어 : stanza dark screen)
다운로드 : AppStore > Stanza
os x 용도 있음 http://stanza.en.softonic.com/mac
레퍼런스 : http://www.readwriteweb.com/archives/seven_must-have_offline_apps_for_iphone_and_ipod_touch.php
검색어 : google > iphone offline ebook reader
Labels:
eBook
iPhone 용 txt viewer 중에서 가장 쓸만한 것
질문 : iPhone 용 txt viewer 중에서 가장 쓸만한 앱
답 : PowerReader
라이트 버전은 free 인데다가 광고도 없어서 좋다.
Description :
PowerReader is a simple but powerful reading tool.
Features:
- It is available to view the files with various formats as below:
txt, pdf, png, jpg, tiff, gif, bmp, htm, html, doc, xls, ppt, docx, xlsx, pptx.
- It is also available to play mp3 & mp4 files.
- Supports Google docs downloading.
- Supports "Open-in" feature, you can open the supported data from mail, safari or some other APPs that supported open-in feature.
- Supports landscape view mode.
- Turning pages forward or backward quickly.
- Various types of font for txt reading.
- Diverse kinds of encoding for txt reading.
- Uploading files through iTunes.
- Automatic line breaks.
- Full text search, you can easily search the entire text.
- Online Translation engine.
- Automatically save the last reading point.
- Text color and background color setting.
- Automatically separate the big txt file to accelerate the access speed
- Single/multi page display for PDF viewer.
- Bookmark feature.
참고 : 그림 파일을 볼 수도 있긴 하지만 인터페이스가 불편하게 되어 있음
검색어 : AppStore > txt viewer
키워드 : eBook
답 : PowerReader
라이트 버전은 free 인데다가 광고도 없어서 좋다.
Description :
PowerReader is a simple but powerful reading tool.
Features:
- It is available to view the files with various formats as below:
txt, pdf, png, jpg, tiff, gif, bmp, htm, html, doc, xls, ppt, docx, xlsx, pptx.
- It is also available to play mp3 & mp4 files.
- Supports Google docs downloading.
- Supports "Open-in" feature, you can open the supported data from mail, safari or some other APPs that supported open-in feature.
- Supports landscape view mode.
- Turning pages forward or backward quickly.
- Various types of font for txt reading.
- Diverse kinds of encoding for txt reading.
- Uploading files through iTunes.
- Automatic line breaks.
- Full text search, you can easily search the entire text.
- Online Translation engine.
- Automatically save the last reading point.
- Text color and background color setting.
- Automatically separate the big txt file to accelerate the access speed
- Single/multi page display for PDF viewer.
- Bookmark feature.
참고 : 그림 파일을 볼 수도 있긴 하지만 인터페이스가 불편하게 되어 있음
검색어 : AppStore > txt viewer
키워드 : eBook
Labels:
eBook
Thursday, May 10, 2012
PlainText 사용법
다음은 PlainText 깔면 생기는 간단 help
Hello.txt
Thanks for trying PlainText! My intention is to keep PlainText free and minimal. If you need more settings please take a look at WriteRoom 3.0 for iOS.
Thanks,
Hog Bay Software
Tips & Tricks.txt
최적화된 사용을 원하면 Settings > Dropbox 로 들어가서
Sync Automatically 를 OFF 로 해주고
변경 사항이 있을 때 Sync All Now 를 해주는 것이 좋음
Hello.txt
Thanks for trying PlainText! My intention is to keep PlainText free and minimal. If you need more settings please take a look at WriteRoom 3.0 for iOS.
Thanks,
Hog Bay Software
Tips & Tricks.txt
- To delete a file or folder, swipe its name in the item list view and then tap the 'Delete' button.
- To count words in your document, tap its title and select 'Word Count.' You can also tap in the document text to show the Cut, Copy, Paste, and Word Count menu.
- To scroll through long documents & lists, tap and hold on the right side of the view where scroll indicator shows. Then drag to quickly scroll through your document.
- To email, print, rename or count the words in a document: Tap its name in the document title bar, and choose from the popup menu.
- To focus on your document (iPad only) tap the two-arrow icon in the lower right-hand of the screen. Exit by tapping it again.
- To move the cursor in full-screen mode (iPad only) tap the page margins to move left or right by 1 letter (1 finger tap) or 1 word (2 finger tap).
최적화된 사용을 원하면 Settings > Dropbox 로 들어가서
Sync Automatically 를 OFF 로 해주고
변경 사항이 있을 때 Sync All Now 를 해주는 것이 좋음
Labels:
텍스트에디터
퓨전 FNC FS-94KBT 블루투스 미니 키보드의 장단점
장점 :
1. 가격이 저렴함
2. 눈으로 보기에 디자인이 좋은 편
단점 :
1. 전체적으로 키가 너무 뻑뻑해서 타이핑하기가 대단히 어렵다
2. 좌측의 Shift 키가 너무 작고 그 자리를 Fn 키가 차지하고 있어 오타가 무척 많이 발생
3. 가로 세로 크기는 Apple Wireless Keyboard 와 거의 동일하나 두께가 너무 두껍고 무게가 무겁다
광고 사진만 보면 그렇게 두껍다는 것을 알기가 어려운 것이 문제.
4. 생산공정에서 발생한 플라스틱 조각이 떨어져 나온 것들이 눈에 띄기도 한다 (마감이 안좋은 듯)
1. 가격이 저렴함
2. 눈으로 보기에 디자인이 좋은 편
단점 :
1. 전체적으로 키가 너무 뻑뻑해서 타이핑하기가 대단히 어렵다
2. 좌측의 Shift 키가 너무 작고 그 자리를 Fn 키가 차지하고 있어 오타가 무척 많이 발생
3. 가로 세로 크기는 Apple Wireless Keyboard 와 거의 동일하나 두께가 너무 두껍고 무게가 무겁다
광고 사진만 보면 그렇게 두껍다는 것을 알기가 어려운 것이 문제.
4. 생산공정에서 발생한 플라스틱 조각이 떨어져 나온 것들이 눈에 띄기도 한다 (마감이 안좋은 듯)
Labels:
키보드
Wednesday, May 9, 2012
Dropbox-Powered iPhone Text Editors
질문 : 드롭박스를 지원하는 아이폰용 텍스트에디터 중 가장 쓸만한 것?
답 : 가장 심플하고 좋은 건 PlainText
참고 : free version 을 받으면 아래쪽에 광고 배너가 뜨며 광고 없는 버전을 사려면 in-app purchase 로밖에는 안됨 (1.99달러로 사면 됨)
키워드 : 드롭박스
답 : 가장 심플하고 좋은 건 PlainText
참고 : free version 을 받으면 아래쪽에 광고 배너가 뜨며 광고 없는 버전을 사려면 in-app purchase 로밖에는 안됨 (1.99달러로 사면 됨)
키워드 : 드롭박스
Mac용 Excel에서 edit mode로 들어가는 shortcut?
질문 : 윈도우용 엑셀에서 F2로 에디트 모드로 들어가듯 Mac용 Excel에서 하는 hotkey?
답 : Ctrl + U (Toggle Edit / Navigation Mode)
키워드 : excel cell edit mode shortcut mac, Edit Mode Shortcut Like F2 in Excel, 핫키
미러 : Excel Shortcuts Mac.pdf
답 : Ctrl + U (Toggle Edit / Navigation Mode)
키워드 : excel cell edit mode shortcut mac, Edit Mode Shortcut Like F2 in Excel, 핫키
미러 : Excel Shortcuts Mac.pdf
Labels:
오피스
Shortcut for clear contents? (Microsoft Excel)
질문 : Shortcut for clear contents? (Microsoft Excel)
답 : Del 키 (Apple wireless keyboard 나 랩탑에서는 Fn + Delete)
또는 Ctrl + B
설명 : 그냥 Delete 키를 누르면 cell의 내용이 지워지고 edit mode 로 들어간다.
인용 : "forward delete" key (often marked "del") on extended keyboards
레퍼런스 : Re: Shortcut for clear contents?
키워드 : 핫키, hotkey
미러 : Excel Shortcuts Mac.pdf
답 : Del 키 (Apple wireless keyboard 나 랩탑에서는 Fn + Delete)
또는 Ctrl + B
설명 : 그냥 Delete 키를 누르면 cell의 내용이 지워지고 edit mode 로 들어간다.
인용 : "forward delete" key (often marked "del") on extended keyboards
레퍼런스 : Re: Shortcut for clear contents?
키워드 : 핫키, hotkey
미러 : Excel Shortcuts Mac.pdf
Labels:
오피스
Tuesday, May 8, 2012
애플의 가격 공개 정책
[이균성]아이폰에는 있지만 갤럭시에는 없는 것
애플, 투명한 가격정책 '감동'…삼성, 불투명한 가격구조에서 못벗어나
2012.05.08. 화 09:43 입력
애플은 제품을 발표할 때 대부분 가격을 공개한다. 아이폰과 아이패드 같은 전략 제품일 경우 거의 예외가 없다.
애플, 투명한 가격정책 '감동'…삼성, 불투명한 가격구조에서 못벗어나
2012.05.08. 화 09:43 입력
애플은 제품을 발표할 때 대부분 가격을 공개한다. 아이폰과 아이패드 같은 전략 제품일 경우 거의 예외가 없다.
게임으로 돈 벌려면 iOS로…안드로이드의 5배
게임으로 돈 벌려면 iOS로…안드로이드의 5배
Bloter.net 2012. 05. 07
2012년 3월 기준으로 iOS 모바일게임 매출이 전체 모바일게임 매출의 84%를 차지하는 것으로 드러났다... 앱내부결제를 통한 수익이 나날이 증가하고 있다는 점도 이번 조사에서 눈길을 끄는 대목이다. iOS와 안드로이드용 모바일게임 모두 91%의 매출이 앱내부결제를 통해 발생하는 것으로 조사됐다.
Bloter.net 2012. 05. 07
2012년 3월 기준으로 iOS 모바일게임 매출이 전체 모바일게임 매출의 84%를 차지하는 것으로 드러났다... 앱내부결제를 통한 수익이 나날이 증가하고 있다는 점도 이번 조사에서 눈길을 끄는 대목이다. iOS와 안드로이드용 모바일게임 모두 91%의 매출이 앱내부결제를 통해 발생하는 것으로 조사됐다.
Labels:
Business
Monday, May 7, 2012
HOW TO CREATE IPHONE SETTING HOME SCREEN SHORTCUTS (HOW TO)
HOW TO CREATE IPHONE SETTING HOME SCREEN SHORTCUTS (HOW TO)
키워드 : bluetooth onoff, toggle, toggling, one touch
키워드 : bluetooth onoff, toggle, toggling, one touch
Labels:
스마트폰
Sunday, May 6, 2012
Friday, May 4, 2012
teleport : 하나의 키보드/마우스로 여러 맥 사용하게 해주는 유틸
설명 : teleport lets you use a single mouse and keyboard to control several Macs. Simply reach an edge of your screen, and your mouse teleports to your nearby Mac, which also becomes controlled by your keyboard. The pasteboard can be synchronized, and you can even drag & drop files between your Macs.
다운로드 : teleport
키워드 : bluetooth
다운로드 : teleport
키워드 : bluetooth
Labels:
키보드
스마트폰 액세서리
스마트폰 액세서리 인기에 IT 업계 ‘초긴장’
스마트폰 + 키보드 = 노트북
스마트폰 + 액정필름 = 휴대용 게임기
스마트폰 + 렌즈 = DSLR
스마트폰 + 프로젝터 = 개인영화관
[뉴 트렌드] "스마트폰 액세서리, 2년 뒤엔 1兆 패션 시장"
조선경제 2010.10.22 03:03
스마트폰 액세서리 판매가 '돈이 된다'는 사실이 알려지자 대기업은 물론이고 중견기업·개인사업자까지 경쟁적으로 시장에 뛰어들고 있다.
삼성 : 삼성모바일샵 (전국 9곳에 매장을 운영 중)
팬텍 : IT제품·액세서리 매장 '라츠'
금강제화 : 프리스비
검색어 : 스마트폰 액세서리 시장규모
스마트폰 + 키보드 = 노트북
스마트폰 + 액정필름 = 휴대용 게임기
스마트폰 + 렌즈 = DSLR
스마트폰 + 프로젝터 = 개인영화관
[뉴 트렌드] "스마트폰 액세서리, 2년 뒤엔 1兆 패션 시장"
조선경제 2010.10.22 03:03
스마트폰 액세서리 판매가 '돈이 된다'는 사실이 알려지자 대기업은 물론이고 중견기업·개인사업자까지 경쟁적으로 시장에 뛰어들고 있다.
삼성 : 삼성모바일샵 (전국 9곳에 매장을 운영 중)
팬텍 : IT제품·액세서리 매장 '라츠'
금강제화 : 프리스비
검색어 : 스마트폰 액세서리 시장규모
Labels:
스마트폰
math.random 사용예
do
print(); print("***** RANDOM *****")
local a, b, c, d
a = math.random()
print("random() = " .. a)
a = math.random()
print("random() = " .. a)
a = math.random()
print("random() = " .. a)
b = math.random(10)
print("random(10) = " .. b)
b = math.random(10)
print("random(10) = " .. b)
b = math.random(10)
print("random(10) = " .. b)
b = math.random(10)
print("random(10) = " .. b)
b = math.random(10)
print("random(10) = " .. b)
b = math.random(10)
print("random(10) = " .. b)
b = math.random(10)
print("random(10) = " .. b)
c = math.random(10, 20)
print("random(10, 20) = " .. c)
c = math.random(10, 20)
print("random(10, 20) = " .. c)
c = math.random(10, 20)
print("random(10, 20) = " .. c)
c = math.random(10, 20)
print("random(10, 20) = " .. c)
c = math.random(10, 20)
print("random(10, 20) = " .. c)
c = math.random(10, 20)
print("random(10, 20) = " .. c)
c = math.random(10, 20)
print("random(10, 20) = " .. c)
math.randomseed(1234)
print("randomseed(1234)")
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
math.randomseed(1234)
print("randomseed(1234)")
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
math.randomseed(100)
print("randomseed(100)")
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
math.randomseed( os.time() )
print("randomseed(os.time())")
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
d = math.random(10)
print("random(10) = " .. d)
end
Labels:
Lua
Thursday, May 3, 2012
math library 사용예
do
print(); print("***** MIN *****")
require("math")
local minVal = math.min(30, 20, 50, 40, 10)
print(minVal)
local maxVal = math.max(30, 20, 50, 40, 10)
print(maxVal)
end
do
print(); print("***** floor, ceil, sin, cos, pow *****")
local a = 10.8
local a_floor = math.floor(a)
local a_ceil = math.ceil(a)
local sin30 = math.sin(math.pi / 6)
local cos30 = math.cos(math.pi / 6)
print("floor 10.8 = " .. a_floor)
print("ceil 10.8 = " .. a_ceil)
print("sin 30 = " .. sin30)
print("cos 30 = " .. cos30)
local c = sin30^2 + cos30^2
print("sin30^2 + cos30^2 = " .. c)
local x = math.pow(2, 10)
print("2^10 = " .. x)
end
do
print(); print("***** modf, sqrt *****")
local x, y, z;
x, y = math.modf(3.14)
print("3.14 -> " .. x .. " & " .. y)
x, y = math.modf(-3.14)
print("3.14 -> " .. x .. " & " .. y)
x, y = math.modf(3)
print("3.14 -> " .. x .. " & " .. y)
z = math.sqrt(3)
print("sqrt(" .. 3 .. ") = " .. z)
end
do
print(); print("***** MATH.HUGE *****")
print("math.huge = " .. math.huge)
print("-math.huge = " .. -math.huge)
print("math.huge / 2 = " .. math.huge / 2)
print("math.huge / math.huge = " .. math.huge / math.huge)
print("math.huge * 0 = " .. math.huge * 0)
print("1 / 0 = " .. 1 / 0)
print(math.huge == math.huge)
print(1 / 0 == math.huge)
end
Labels:
Lua
Lua의 math library
math.abs math.acos math.asin math.atan math.atan2 math.ceil
math.cos math.cosh math.deg math.exp math.floor math.fmod
math.frexp math.huge math.ldexp math.log math.log10 math.max
math.min math.modf math.pi math.pow math.rad math.random
math.randomseed math.sin math.sinh math.sqrt math.tanh
math.tan
링크 : Math Library Tutorial
Labels:
Lua
Multiple Assignment 를 이용한 간결한 구현 예
function getMinAndMax(a)
local min_i, max_i = -1, -1
local min, max = math.huge, -math.huge
for i, v in pairs(a) do
if (v < min) then min, min_i = v, i end
if (v > max) then max, max_i = v, i end
end
return min_i, max_i, min, max
end
local a = {10, 60, 5, 3, 4, 30, 40, 20}
local min_i, max_i, min, max = getMinAndMax(a)
print("min = a[" .. min_i .. "] = " .. min)
print("max = a[" .. max_i .. "] = " .. max)
Labels:
Lua
Multiple assignment 에 local 쓰는 법
local a, b = 10, 20
와 같이 앞에 한번만 써주면 a, b 가 모두 local 로 정의됨
코드
결과
a = 666
b = 999
a = 10
b = 20
와 같이 앞에 한번만 써주면 a, b 가 모두 local 로 정의됨
코드
a = 666
b = 999
function foo_local()
local a, b = 10, 20
end
function foo_global()
a, b = 10, 20
end
foo_local()
print ("a = " .. a)
print ("b = " .. b)
foo_global()
print ("a = " .. a)
print ("b = " .. b)
결과
a = 666
b = 999
a = 10
b = 20
Labels:
Lua
Multiple results 를 return 하는 함수 구현
function getMin(a)
local min_i = -1
local min_v = math.huge
for i, v in pairs(a) do
if min_v > v then
min_v = v
min_i = i
end
end
return min_i, min_v
end
local heights = {167, 195, 180, 153, 155}
local minHeight_i, minHeight = getMin(heights)
print("a[" .. minHeight_i .. "] = " .. minHeight)
키워드 : function
Labels:
Lua
Multiple results 를 return 하는 함수
local s, e = string.find("My name is Roger", "name")
print(s, e) --> 4 7
Labels:
Lua
function에서 argument의 default value 사용예
코드
결과
10
11
12
13
14
20
설명
delta = delta or 1
여기서 delta 값을 지정하면 그 값을 사용하되
delta 값이 주어지지 않으면 기본값으로 1을 사용함
function incCount (num, delta)
delta = delta or 1
num = num + delta
return num
end
local num = 10; print(num)
num = incCount(num); print(num)
num = incCount(num); print(num)
num = incCount(num); print(num)
num = incCount(num); print(num)
num = incCount(num, 6); print(num)
결과
10
11
12
13
14
20
설명
delta = delta or 1
여기서 delta 값을 지정하면 그 값을 사용하되
delta 값이 주어지지 않으면 기본값으로 1을 사용함
function 사용 예
function sum(a)
local sum = 0
for i, v in pairs(a) do
sum = sum + v
end
return sum
end
local a = {10, 20, 30, 40}
print(sum(a))
키워드 : 함수
Labels:
Lua
loop 내의 break 문
local a = {"Red", "Green", "Blue", "Yellow", "Purple"}
for i, color in pairs(a) do
print(color)
if color == "Yellow" then break end
end
Labels:
Lua
pairs vs ipairs
질문 : pairs 와 ipairs 의 차이?
설명
pairs는 내부의 hash 를 iterate 하고
ipairs는 1부터 시작하는 integer key를 iterate 한다.
(ipairs는 key 가 integer가 아닌 경우는 iterate 하지 못함)
다음 코드를 돌려보면 명확해짐
결과
=================
10
20
30
~~~~~~~~~~~~~~~~~~~~~~
10
20
30
=================
20
30
~~~~~~~~~~~~~~~~~~~~~~
20
30
10
==================
코드
결과
--pairs(numArray)----------------------------
1 : One
2 : Two
3 : Three
--pairs(revNumArray)----------------------------
One : 1
Three : 3
Two : 2
~~ipairs(numArray)~~~~~~~~~~~~~~~~~~~~~~~~~~
1 : One
2 : Two
3 : Three
~~ipairs(revNumArray)~~~~~~~~~~~~~~~~~~~~~~~~~~
기타 :
실제 benchmark 해본 결과 ipairs보다 pairs가 더 빨랐다는 실험결과도 있음
I'm surprised that (as my colleague pointed out to me), in plain Lua, pairs is faster than ipairs.
http://lua-users.org/lists/lua-l/2009-11/msg01018.html
설명
pairs는 내부의 hash 를 iterate 하고
ipairs는 1부터 시작하는 integer key를 iterate 한다.
(ipairs는 key 가 integer가 아닌 경우는 iterate 하지 못함)
다음 코드를 돌려보면 명확해짐
print("=================")
local a = {10, 20, 30}
for i,v in ipairs(a) do print(v) end
print("~~~~~~~~~~~~~~~~~~~~~~")
for i,v in pairs(a) do print(v) end
print("=================")
local b = {[0]=10, 20, 30}
for i,v in ipairs(b) do print(v) end
print("~~~~~~~~~~~~~~~~~~~~~~")
for i,v in pairs(b) do print(v) end
print("==================")
결과
=================
10
20
30
~~~~~~~~~~~~~~~~~~~~~~
10
20
30
=================
20
30
~~~~~~~~~~~~~~~~~~~~~~
20
30
10
==================
코드
numArray = {"One", "Two", "Three"}
revNumArray = {}
for k, v in pairs(numArray) do
revNumArray[v] = k
end
print("--pairs(numArray)----------------------------")
for k, v in pairs(numArray) do
print(k .. " : " .. v)
end
print("--pairs(revNumArray)----------------------------")
for k, v in pairs(revNumArray) do
print(k .. " : " .. v)
end
print("~~ipairs(numArray)~~~~~~~~~~~~~~~~~~~~~~~~~~")
for k, v in ipairs(numArray) do
print(k .. " : " .. v)
end
print("~~ipairs(revNumArray)~~~~~~~~~~~~~~~~~~~~~~~~~~")
for k, v in ipairs(revNumArray) do
print(k .. " : " .. v)
end
결과
--pairs(numArray)----------------------------
1 : One
2 : Two
3 : Three
--pairs(revNumArray)----------------------------
One : 1
Three : 3
Two : 2
~~ipairs(numArray)~~~~~~~~~~~~~~~~~~~~~~~~~~
1 : One
2 : Two
3 : Three
~~ipairs(revNumArray)~~~~~~~~~~~~~~~~~~~~~~~~~~
기타 :
실제 benchmark 해본 결과 ipairs보다 pairs가 더 빨랐다는 실험결과도 있음
I'm surprised that (as my colleague pointed out to me), in plain Lua, pairs is faster than ipairs.
http://lua-users.org/lists/lua-l/2009-11/msg01018.html
Labels:
Lua
while 문 써서 array 내용 프린트하기
local a = {10, 20, 30, 40, 50}
local i = 1
while a[i] do
print(a[i])
i = i + 1
end
Labels:
Lua
여러 줄의 String 정의 쉽게 하는 법
local str = [[
My name is
Mimi
How are you?]]
print(str)
키워드 : string definition
Labels:
Lua
Lua의 Logical Operators
Lua에서는 false 와 nil 을 false 로 간주하고
그 외의 것은 모두 true 로 간주한다.
다음 두 코드는 동일
and는 true의 조건을 만드는 마지막 argument 를 리턴
그 외의 것은 모두 true 로 간주한다.
다음 두 코드는 동일
x=x or v
if not x then x = v end
or는 true의 조건에 걸리는 첫 argument 를 리턴and는 true의 조건을 만드는 마지막 argument 를 리턴
print(nil and 10) --> nil
print(3 and 4) --> 4
print(nil or 7) --> 7
print(6 or 7) --> 6
Labels:
Lua
Wednesday, May 2, 2012
ipairs
ipairs 는 basic Lua library 가 제공하는 iterator
local a = {10, 20, 30, 40, 50, 60, 70, 80, 90}
-- print all values of array 'a'
for i,v in ipairs(a) do print(v) end
자매품으로 pairs 가 있음 : pairs vs ipairs
Labels:
Lua
Loop 사용시 주의점
You should never change the value of the control variable: the effect of such changes is unpredictable.
(Programming in Lua, Second Edition - 2006 - by Roberto Ierusalimschy, p32)
(Programming in Lua, Second Edition - 2006 - by Roberto Ierusalimschy, p32)
Labels:
Lua
Loop example : find a value in a list
local a = {10, 20, 30, 40, 50, 60, 70}
local found = nil
for i=1,#a do
if a[i] == 30 then
found = i
break
end
end
print(found)
Labels:
Lua
Tuesday, May 1, 2012
global variable 과 local variable
global variable 과 local variable 은 각각 다음과 같이 정의한다.
do ... end 블록을 쓰면 local variable 의 범위를 직접 컨트롤 할 수 있음
a = 10 -- global variable
local b = 20 -- local variable
Lua 에 많이 쓰이는 syntax local foo = foo
이 코드는 global variable 인 foo 의 값을 local variable 인 foo 에 넣는다.do ... end 블록을 쓰면 local variable 의 범위를 직접 컨트롤 할 수 있음
Labels:
Lua
Lua 의 Multiple assignment 를 이용한 swap
local x = 10
local y = 20
x, y = y, x
print("x=" .. x)
print("y=" .. y)
Labels:
Lua
multiple assignment
a, b, c = 1, 2
print(a, b, c) --> 1 2 nil
a, b = a+1, b+1, b+2 -- value of b+2 is ignored
print(a, b) --> 1 2
a, b, c = 100
print(a, b, c) --> 100 nil nil
Labels:
Lua
Record 정의하는 general 한 방법
사실 모든 record 는 다음 syntax 의 syntactic sugar에 불과하다
{[멤버명]=값, [멤버명]=값, ...}
{"r","g","b"} 는 {[1]="r",[2]="g",[3]="b"} 와 동일하다.
키워드 : Constructor
{[멤버명]=값, [멤버명]=값, ...}
days = { [0]="Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"}
print(days[0])
print(days[1])
{x=0,y=0} 는 {["x"]=0,["y"]=0} 와 동일하다.{"r","g","b"} 는 {[1]="r",[2]="g",[3]="b"} 와 동일하다.
키워드 : Constructor
Labels:
Lua
Record 정의하는 좀더 general 한 format
colors = {
["Red"] = "FF0000",
["Green"] = "00FF00",
["Blue"] = "0000FF"
}
print(colors.Red)
키워드 : Constructor
Labels:
Lua
complex data structure 만들기 예
polyline = {color="blue", thickness=2, npoints=4,
{x=10, y=0},
{x=20, y=1},
{x=-30, y=2},
{x=-40, y=3}
}
print(polyline[2].x) --> 20
print(polyline[4].y) --> 3
print(polyline.color) --> blue
키워드 : Constructor
Labels:
Lua
string concatenation in Lua
a = "Hello"
print(a .. " World") --> Hello World
operand 가 수이면 자동으로 그것을 스트링으로 convert 한다.
print(3 .. 4) --> 34
print(a .. " World") --> Hello World
operand 가 수이면 자동으로 그것을 스트링으로 convert 한다.
print(3 .. 4) --> 34
Labels:
Lua
# operator (length of a string 을 얻어냄)
a = "hello"
print(#a) --> 5
print(#"good\0bye") --> 8
키워드 : length operator
Labels:
Lua
Assert 사용하기
n = assert(io.read("*number"), "invalid input")
n = io.read()
assert(tonumber(n), "invalid input: " .. n .. " is not a number")
Labels:
Lua
나쁜 코드: 스트링 관련
-- WARNING: bad code ahead!!
local buff = ""
for line in io.lines() do
buff = buff .. line .. "\n"
end
Despite its innocent look, that code in Lua can cause a huge performance penalty for large files...This problem is not peculiar to Lua: Other languages with true garbage collection, and where strings are immutable objects, present a similar behavior, Java being the most famous example. (Java offers the structure StringBuffer to ameliorate the problem.)
출처 : 11.6 – String Buffers
Labels:
Lua
스트링 입력 받아 수로 바꾸기
line = io.read() -- read a line
n = tonumber(line) -- try to convert it to a number
if n == nil then
error(line .. " is not a valid number")
else
print(n*2)
end
키워드 : input, string, number, 숫자출처 : Programming in Lua, Second Edition - 2006 - by Roberto Ierusalimschy
Labels:
Lua
Factorial Sample : input 얻어내기, function 호출, recursion
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print("enter a number:")
a = io.read("*number")
print(fact(a))
키워드 : 입력, 함수, 재귀, recursive call출처 : Programming in Lua, Second Edition - 2006 - by Roberto Ierusalimschy
Labels:
Lua
Subscribe to:
Posts (Atom)