Monday, April 30, 2012

Lua와 게임 프로그래밍

http://en.wikipedia.org/wiki/Lua_(programming_language)#Video_games
In video game development, Lua is widely used as a scripting language by game programmers, perhaps owing to how easy it is to embed, its fast execution, and its short learning curve.[12]

Saturday, April 28, 2012

텍스트 파일을 쾌적하게 볼 수 있는 뷰어

질문 : Text file 을 수정할 목적이 아니라 쾌적하게 보기 위한 Text Viwer 목적의 어플리케이션은 없는가?
답 : Tofu 가 좋음 (텍스트를 column 으로 나눠서 보는 기능 등)
다운로드 : Tofu 2.0.1 : Fast text reader
키워드 : eBook, Text Editor, edit, 텍스트 뷰어

Level Editor Corona SDK

Friday, April 27, 2012

LevelEditor for Corona SKD

Corona 용 Level Editor 의 종류
  • Corona Level Editor
  • LevelHelper
  • Lime
  • SpriteDeck
  • Lime
  • Gumbo
  • Corona SVG Level Builder
질문 : There are many Level Editor for Corona SKD, which one you recommend ?
답 : 현재는 LevelHelper가 잘 쓰이는 듯
공식 Corona Level Editor 가 release 되면 그걸 쓰는게 좋음
링크 : what Level editor you recommend

Corona SVG Level Builder

Plug-in: Drag-and-Drop Corona SDK Level Editor
Corona SVG Level Builder lets you create physics-based games, platform levels, and maps for your Corona games by simply drawing them in Inkscape, a free and open source vector-drawing program.

Corona SVG Level Builder
Corona SVG Level Builder is a set of libraries to be used in a Corona SDK game that allows you to create Corona SDK physics based games, levels and maps by just drawing in the free and open source vector drawing Inkscape.

Sprite Sheet 데이터를 로드하기 - 두가지 방법

1. Uniformly-sized frames
The following code creates a new sprite sheet from image containing uniformly-sized frames, but does not add anything to the display list.
 spriteSheet = sprite.newSpriteSheet("image.png", frameWidth, frameHeight)  

2. Zwoptex로 뽑은 frames
This second form takes as its second parameter a table that describes the frame sizes and positions in the source sprite sheet image.
 spriteSheet = sprite.newSpriteSheetFromData( "image.png", spriteData )  
관련링크 : Corona로 Sprite Sheet Animation 만들기

Sprite Sheet 데이터를 로드하는 코드

myTest.lua 에서 Sprite Sheet 데이터를 로드하는 코드
 local mySpriteSheet = sprite.newSpriteSheetFromData("myTest.png", require("myTest").getSpriteSheetData() )  

myTest.lua 의 내용 (Zwoptex 에서 생성)
 module(...)  
 -- This file is for use with CoronaSDK™ and was generated by Zwoptex (http://zwoptexapp.com/)  
 --  
 -- For more details, see http://developer.anscamobile.com/reference/sprite-sheets  
 function getSpriteSheetData()  
      local sheet = {  
           frames = {  
                {  
                     name = "myTest-1.png",  
                     spriteColorRect = { x = 20, y = 38, width = 101, height = 157 },   
                     textureRect = { x = 165, y = 159, width = 101, height = 157 },   
                     spriteSourceSize = { width = 181, height = 209 },   
                     spriteTrimmed = true,  
                     textureRotated = false  
                },  
                {  
                     name = "myTest-2.png",  
                     spriteColorRect = { x = 16, y = 52, width = 79, height = 157 },   
                     textureRect = { x = 0, y = 187, width = 79, height = 157 },   
                     spriteSourceSize = { width = 181, height = 209 },   
                     spriteTrimmed = true,  
                     textureRotated = false  
                },  
                {  
                     name = "myTest-3.png",  
                     spriteColorRect = { x = 5, y = 52, width = 107, height = 157 },   
                     textureRect = { x = 165, y = 0, width = 107, height = 157 },   
                     spriteSourceSize = { width = 181, height = 209 },   
                     spriteTrimmed = true,  
                     textureRotated = false  
                },  
                {  
                     name = "myTest-4.png",  
                     spriteColorRect = { x = 18, y = 9, width = 163, height = 185 },   
                     textureRect = { x = 0, y = 0, width = 163, height = 185 },   
                     spriteSourceSize = { width = 181, height = 209 },   
                     spriteTrimmed = true,  
                     textureRotated = false  
                },  
           }  
      }  
      return sheet  
 end  
관련링크 : Corona로 Sprite Sheet Animation 만들기

Thursday, April 26, 2012

Corona로 Sprite Sheet Animation 만들기

1. 애니메이션 제작
  1. Photoshop 에서 레이어들로 애니메이션을 만든다.
  2. pivot(anchor)이 되는 위치는 일치하도록 만듬 (중요)
  3. Layer들, 즉 각 프레임을 png 파일들로 export 함
    (전체 네 프레임이고 파일명은 myTest-1.png ... myTest-4.png 라고 하자)
2. Sheet animation 용 data 제작
  1. Zwoptex 에 그들 png 파일들을 끌어넣음
  2. 각각을 배치함. 툴바의 Layout 버튼 누르면 자동으로 되고
    수동으로 배치할 수도 있음 (이때 빨간색 bounding box가 서로 겹쳐서는 안됨)
  3. Document의 width / height 를 적절히 조절해줌
  4. 툴바의 Publish 버튼 누름 (이때 Corona의 lua 포맷 선택)
  5. myTest_default.png 와 myTest_default.lua 라는 두개의 파일이 생성됨
    각각을 myTest.png 와 myTest.lua 라는 이름으로 변경
3. Corona
  1. New Project 함 (template = Blank, 방향은 landscape로)
    프로젝트명 MyAniTest (아무거나 무관)
  2. Zwoptex에서 나온 두 파일을 프로젝트 폴더에 넣음
  3. main.lua 를 다음과 같이 작성
 require "sprite"  
   
 display.setStatusBar(display.HiddenStatusBar)  
   
 local mySpriteSheet = sprite.newSpriteSheetFromData("myTest.png", require("myTest").getSpriteSheetData() )  
 local mySpriteSet = sprite.newSpriteSet(mySpriteSheet, 1, 4)  
 sprite.add(mySpriteSet,"myTest", 1, 4, 1000, 0)  
   
 local spriteInstance = sprite.newSprite(mySpriteSet)  
 spriteInstance:setReferencePoint(display.BottomRightReferencePoint)  
 spriteInstance.x = 400  
 spriteInstance.y = 280  
   
 spriteInstance:prepare("myTest")  
 spriteInstance:play()  
   
레퍼런스 :
Corona Sample에 들어 있는 HorseAnimation
Advanced Animation Using Sprites

TextWrangler 4 에서 각각의 파일들을 tab 이 아닌 Separate window 에서 여는 법?

질문 : 버전 4에서 도입된 currently open documents pane 없애는 법?
답 : Preferences > Application > Open documents into the front window when possible 에 체크한다.
디폴트 설정을 별도의 윈도우가 아닌 탭(좌측의 currently open documents pane)에서 열리게 한 것은 버전 4에서 도입된 최악의 업데이트.
검색어 : currently open documents separate window
키워드 : 복잡, 불편, annoying, left pane, 왼쪽, 좌측 창

TextWrangler 4 에서 document를 별개의 윈도우로 열려면?

TextWrangler 4 에서 도큐먼트가 왼쪽의 currently open documents pane 에 있는게 불편한데 별개의 윈도우로 열려면?
Option + Command + O 를 해도 되고
근본처방은 TextWrangler 4 에서 각각의 파일들을 tab 이 아닌 별도의 윈도우에서 여는 법 볼것

TextWrangler 4 에서 currently open documents pane을 hide하는 법

질문 : TextWrangler 4 에서 currently open documents pane을 hide하는 법
답 : 또는 Command + 0 하면 된다. 이 경우 pane 이 hide 되었다고 해서 Command + ` 로 documents 사이를 이동할 수 있는 건 아니다. Option + Command + [] 를 써야 한다. 도큐먼트를 별개의 윈도우로 열려면 Option + Command + O 를 하면 된다.
참고 : 가장 근본적인 해결책은 다음과 같다.
TextWrangler 에서 각각의 파일들을 탭이 아닌 별개의 윈도우에서 여는 법

TextWrangler 4 에서 currently open documents 사이를 이동하는 shortcut

질문 : TextWrangler 4 에서 좌측 pane의 currently open documents 사이를 이동하는 shortcut?
답 1 : Option + Command + [] (메뉴 > View > Previous Document / Next Document 에 대한 핫키)
답 2 : 더 근본적인 해결책으로는 다음과 같이 해주면 된다.
TextWrangler 에서 각각의 파일들을 탭이 아닌 별개의 윈도우에서 여는 법
링크 : keyboard shortcut for switching between open files?
키워드 : hotkey, switch between

Excel 에서 currency symbol 과 , 넣기

질문 : Excel 에서 currency symbol 과 , 넣는 방법
답 : View > Toolbars > Formatting 로 툴바 표시해놓고
적용할 셀이나 column 선택하고 거기서 currency 버튼 누르면 됨
설명 : Format Cells 해도 되지만 그렇게 하면 손이 더 가고
정체불명의 이유로 심볼이 $ (dollar sign) 으로 다 바뀌어 버리는 일이 발생하기도 함
링크 : Display numbers as currency

Mac OS X에서 CPU Usage 보는 법

질문 : Mac OS X에서 CPU Usage 보는 법
답 : Activity Monitor 를 실행하면 됨
설명 : 위치는 /Applications/Utilities/Activity Monitor.app
링크 : Mac OS X: Activity Monitor shows one CPU Usage graph on systems with more than four cores

Wednesday, April 25, 2012

block comment in lua

--[[
]]

Corona로 Hello World 만들기

보통, 튜토리얼에는 폴더 만들어서 main.lua 파일만 넣은 후 시뮬레이터로 돌리면 된다고 하는데
그렇게 하면 글자가 보이지 않는다. 폴더를 직접 만드는 게 아니라 Corona에서 New Project 로 시작해야 함
 local myText = display.newText( "Hello, World!", 0, 0, native.systemFont, 40 )  
 myText.x = display.contentWidth / 2  
 myText.y = display.contentHeight * 0.48  
 myText:setTextColor( 255,110,110 )  
키워드 : does not work, problem, 문제, 안되는 이유

~ is a web application downloaded from the internet. are you sure you want to open it?

질문 : "~.html" is a web application downloaded from the internet. are you sure you want to open it? 해결법
링크 : Changing the system's default settings for html files (safe)

Corona SDK

공식
Corona SDK Stable Release : January 2012
http://en.wikipedia.org/wiki/Corona_(software_development_kit)

기초
Docs - Learning Corona
Lua (programming language)
Advanced Animation Using Sprites (Sprite Sheets)

튜토리얼
How To Make a Game Like Doodle Jump with Corona Tutorial Part 1
Corona SDK: Build an Endless Runner Game From Scratch!

샘플
샘플 파일들... templates (http://developer.anscamobile.com/resources/)
Community - Code Exchange (shared code repository, 완성된 게임 샘플들 있음)

Tuesday, April 24, 2012

국내 애플 대리점의 교환・환불 정책

불량품 걸려도 오프라인에서는 교환없다?
불량품 걸리면 끝! 교환, 반품은 없다
뉴아이패드 팔고나면 나몰라라?…"교환 꿈 깨"(해럴드경제)
애플 제품 구매는 애플 온라인 스토어 이외의 곳에서 하지 않는 것이 좋음
애플 스토어 구매시에도 불량률은 높지만 최소한 교환은 잘 됨
키워드 : 맥, 오프라인 매장

cocos2d Layer 에 rubber band interaction 넣기

1. 클래스 구현
인터랙션을 위한 클래스를 구현한다. ccTouchEnded 에서 레이어가 원위치로 돌아오도록 runAction 으로 CCEaseIn 를 실행시키면 됨. 다음과 같이 세가지 멤버가 필요하다.
 @interface MyRubberPan : NSObject {  
      NSInteger ActionTagRubberBandMovement;  
      CGPoint gameLayerPosition;  
      CGPoint lastTouchLocation;  
} 

2. MyLayer.h
 @class MyRubberPan;  
 @interface MyLayer : CCLayer {  
      ...  
      MyRubberPan* myRubberPan;  
 }  

3. MyLayer.m
 #import "MyRubberPan.h"  
 @implementation MyLayer  
 -(id) init  
 {  
      if( (self=[super init])) {  
           ...  
           myRubberPan = [[MyRubberPan alloc] initWithRubberActionTag:50 onLayer:self];  
           ...  
      }  
      return self;  
 }  
 -(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent *)event   
 {   
      [myRubberPan ccTouchBegan:touch withEvent:event onLayer:self];  
      // Always swallow touches, MyLayer is the last layer to receive touches.   
      return YES;   
 }   
 -(void) ccTouchMoved:(UITouch*)touch withEvent:(UIEvent *)event   
 {  
      CGPoint moveTo = [myRubberPan ccTouchMoved:touch withEvent:event onLayer:self];  
      self.position = ccpAdd(self.position, moveTo);  
 }   
 -(void) ccTouchEnded:(UITouch*)touch withEvent:(UIEvent *)event   
 {  
      [myRubberPan ccTouchEnded:touch withEvent:event onLayer:self];  
 }  

ccTouchesMoved 에 넣는 방법도 있다.
  CGPoint moveTo = [myRubberPan ccTouchesMoved:touches withEvent:event onLayer:self];  
  self.position = ccpAdd(self.position, moveTo);  

cocos2d Layer 에 sprite animation 넣기

Sheet animation 을 다음과 같은 파일로 만들어 Resources 로 넣었다고 하자.
blob_idle.png
blob_idle.plist
MyLayer 에서 이 스프라이트 애니메이션을 보여주려면 다음과 같이 한다.

1. 스프라이트 애니메이션용 클래스 구현
MyCharWithAnimationLoop 라는 클래스를 구현한다.
 CCSprite *_character;  
 CCAction *_action;  
라는 두개의 멤버를 갖고, initFromFile() 에서 스프라이트를 씬그래프에 넣고 애니메이션 액션을 시작해주는 클래스.

2. MyLayer.h
 @class MyCharWithAnimationLoop;  
 @interface MyLayer : CCLayer {  
      MyCharWithAnimationLoop* myChar;  
 }  

3. MyLayer.m
 #import "MyCharWithAnimationLoop.h"  
 -(id) init  
 {  
      if( (self=[super init])) {  
           myChar = [[MyCharWithAnimationLoop alloc] initFromFile:@"blob_idle" numOfFrames:24 fps:30.0 onLayer:self];  
           ...  
      }  
      return self;  
 }  

cocos2d Layer 에 터치 입력받는 코드 넣기

MyLayer 라는 레이어 클래스에 touch input handler 를 추가한다고 하자.
그러면 MyLayer.m 에 다음 코드를 추가하면 된다.

방법 1
 -(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
 {  
 }  
 -(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event  
 {
 }  
 -(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event  
 {
 }  

방법 2
 -(void) registerWithTouchDispatcher  
 {  
      [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];  
 }  
 -(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent *)event  
 {  
      // Always swallow touches, MyLayer is the last layer to receive touches.  
      return YES;  
 }  
 -(void) ccTouchMoved:(UITouch*)touch withEvent:(UIEvent *)event  
 {  
 }  
 -(void) ccTouchEnded:(UITouch*)touch withEvent:(UIEvent *)event  
 {  
 }  

MyLayer.m 의 -(id) init 에서 touch 가 enable 되어 있어야 한다.
 self.isTouchEnabled = YES;  

XCode 에서 Indent 를 spaces 가 아닌 tab 으로 하는 방법

Preference (Command + ,) 로 가서 Text Editing > Indentation > tab width 에서
Prefer indent using > Tabs
키워드 : 탭, 스페이스

cocos2d Layer 만들기

MyLayer 라는 레이어 클래스를 만든다고 하자.

1. New File
(Template = CCNode class, Subclass of CCNode, Class name = MyLayer)

2. 기본 골격
MyLayer.m 에 기본 함수 넣음
 @implementation MyLayer  
 +(CCScene *) scene  
 {  
      CCScene* scene = [CCScene node];  
      MyLayer* layer = [MyLayer node];  
      [scene addChild:layer];  
      return scene;  
 }  
 -(id) init  
 {  
      if( (self=[super init])) {      
           self.isTouchEnabled = YES;  
           [self scheduleUpdate];  
      }  
      return self;  
 }  
 -(void) update:(ccTime)delta  
 {  
 }  
 - (void) dealloc  
 {  
      [super dealloc];    
 }  
 @end  

3. 실행
AppDelegate.m 에서 applicationDidFinishLaunching 의 맨 뒤에 다음 넣음
 [[CCDirector sharedDirector] runWithScene: [MyLayer scene]];  

Objective-C 클래스에 private method 넣는 법

질문 : Objective-C의 class에 private 메소드 넣는 법
답 :

헤더
 @interface MyLayer : CCLayer   
 {  
 }  

소스
 @interface MyLayer (PrivateMethods)  
      -(void) addRandomThings;  
 @end  
 -(void) addRandomThings  
 {  
      // Do Something  
 }  

Apple Mach-O Linker (Id) Error "[function_name]", referenced from:

질문 : XCode에서 컴파일 시 Apple Mach-O Linker (Id) Error "[function_name]", referenced from: 의 원인?
답 : 필요한 것을 #import 안했을 때 종종 발생하는 에러

Row major order 와 Column major order 의 차이

Row major
1 2 3
4 5 6
7 8 9
Column major
1 4 7
2 5 8
3 6 9

특수문자 모음 ↓↑←→

¯ (minus sign)
≈×÷±∠ ▱
○◎◉◍●
.·˙○◍●
◴◵◶◷

◁△▷▽◰◱◲◳

㎡   ‴ 
┌─┐ ┌┬┐
│ │ ├┼┤
└─┘ └┴┘
↓↑←→↔↕
⇧⌥↩⌃⌘
♡♥♢♦♧♣♤♠
▷▶◁◀▽▼△▲
☆★☞◎☐❖◇◆
®©™
℃§¶†
♙♟
♔♕♖♗♘
♚♛♜♝♞
遤馬象
⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳
➀➁➂➃➄➅➆➇➈➉
⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇
½⅓⅔¼¾⅕⅖⅗⅘⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ ⁰¹²³⁴⁵⁶⁷⁸⁹₀₁₂₃₄₅₆₇₈₉
← → ↑ ↓ ↔ ↕ ↖ ↗ ↘ ↙ ↚ ↛ ↜ ↝ ↞ ↟
↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿
⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟
⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪

˙ : upper dot (option + H)

ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
α в c ∂ ε f g н ι נ к ℓ м η σ ρ q я s т υ v ω x y z
άв ς đ έ f ģ ħ ί ј ķ Ļ м ή ό ρ q ŕ ş ţ ù ν ώ x ч ž
á ä ã æ ß b c © Ð d é ê f ƒ g h ï î j k £ m Ñ ñ η ô õ ø
þ p q ® § š t ú û µ v w x ý ÿ z ž...
♥ ♠ ♣ ♧ ♤ ♧ ♬ ♪ ♭ ♫ ♪ ♫ ♬ ♪ ♩ ♭ ♪ の ☆ ☆ ◆ ◇ ☀ ☂ ☁ ☮
☺ ☻ ♂ ♀ ◕‿◕ ❤ ツ ! " # $ % ↨ ↑ ↓ ø ¤ º ☆ ● ♫ ★ ☆ ♪ « † ✈ ㊛
☜ © ® ☎ ☑ εïз ☠ ✄ ☪ ☣ ☢ ☠ ☭ ♈ ➸ ✓ ✔ ✕ ✖ ㊚
❣ ✚ ✪ ✣ ✤ ✥ ✦ ❉ ❥ ❦ ❧ ❃ ❂ ❁ ❀
➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
Ƹ̵̡Ӝ̵̨̄Ʒ ξЖЗ εжз
█ ▌▐▐ ▐ █ r4wr▐ █ ▐▐ █ ▌
»–(¯’v’¯)–»℘riηcεss »–(¯’v’¯)–»
[size=24]added on page 20 by Hirhda
Some faces! ʕᴖᴥᴖʔ ಠ_ಠ ಥ~ಥ ಡ_ಡ ఠωఠ อ้_อ้ อ_อ ತ_ತ ರ_ರ ๏̯͡๏) రృరౕ の_の
and.. A BEAR! ʕᴖᴥᴖʔ
Oh, different types of letters - ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ᶤ ʲ ᵏ ˡ ᵐ ᶰ ᵒ ᵖ ᵠ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ A B CD E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h ij kl m no p q r s t u v w x y z
These below were added on page 4, from Child..ty <3 nbsp="" p="">♡ Д Ξ • ° o ● ஜ ღ ҉ Ħ Đ ற × Ч ઈ ㋡ 【 】☆ з Հ ΐ ร г๏ ย ђ . -
~ ' ˜ ¨ ¯ ` ¸ ۩ ★ ☳ ⓢ ₪ ɨ ζ ۞ ๑ Ѧ☂ ☁ ✄ ¬ © ™ ̯͡ ๏ ᶫᵒᵛᵉᵧₒᵤ
✖ ᴴ ᴼ ͋ ░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐└ ┴ ┬ ├ ─ ┼ ╞ ╟
╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ ╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ 乃 ฿ Ѡ Ҩ Ӈ
ʎ ʍ ʌ ʇ ɹ ɯ ן ʞ ſ ı ɥ ƃ ɟ ǝ ɔ ɐ
ค ๒ ς ๔ є Ŧ ɠ ђ เ ן к l ๓ ภ ๏ թ ợ г א t ย ש ฬ א ץ
α в c ם/∂/δ є ғ ɢ н ι נ к ℓ м и σ ρ q я s т υ v ω x ץ/ч z
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
Ȁ Ȃ Ȧ Ӓ Ӑ Ʌ Ⱥ Ά Α Λ Ѧ Д ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ᾎ ᾏ • ȁ ȃ ɑ ɒ ɐ ȧ α ά Δ д ӓ ӑ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾰ ᾱ ᾲ ᾳ ᾴ ᾶ ᾷɃ β Ѣ • Ђ Ъ Ь ъ ь Ϧ ɓ ʙ ϐ ѣ б в Ҍ ҍ
Ȼ ʗ Ͻ Ͼ Ͽ Ϲ Ѽ Ҁ Ҫ • ɔ ȼ ς ϲ ѽ ҁ ҫɖ ɗ ȡ ʠ δ
Ȅ Ȇ Ӗ Ɇ Ѐ Ȩ Ȝ Έ Ё Ε Ξ Σ ξ Є Э Ӭ З Ѯ Ҿ Ҽ Ӛ Ә Ӟ Ҙ ә • ə ε έ з є э е ϵ ϶ ȅ ɘ ȇ ɇ ȩ ѐ ё ѯ ҿ ҽ ӛ ӟ ҙ ӗ ӭϜ Ғ Ӻ • ϝ ɟ ʄ ӻ ғѠ Ѿ • ɠ ɡ ʛ ɢ ɞ ʚ ɕ
Ȟ Ή Η Ң Ҥ Һ Ӈ Ӊ Ҕ ᾘ ᾙ ᾚ ᾛ ᾜ ᾝ ᾞ ᾟ • ʜ ɦ ћ ʮ ʯ ɧ ȟ ɥ ђ Ћ н ӈ ӊ ң ҕ ҥ
Ȉ Ȋ Ί Ϊ Ῐ Ῑ Ὶ Ί • ȉ ɨ ɩ ɪ ȋ ϊ ΐ ῐ ῑ ῒ ΐ ῖ ῗɈ Ј • ɉ ȷ ʝ ϳЌ Қ Ҟ Ҝ Ҟ Ӄ • ʞ ɮ κ ќ қ ҝ ҟ ҡ ӄ
Ƚ ζ • ʟ ɫ ɬ ʅ ɭ ȴ ʃ ʄ ʆϺ Ӎ • ɯ ɰ ɱ ϻ ӎ
Ƞ Ν Π Ѝ Ҋ Ӣ Ӥ Ώ Ω Л Й • ȵ ɲ ɳ ɴ ή π η и й ѝ л ҋ ӣ ӥ ᾐ ᾑ ᾒ ᾓ ᾔ ᾕ ᾖ ᾗ ὴ ή ὴ ή
Ȍ Ӧ Ȏ Ȭ Ȫ Ȯ Ȱ ʘ Ό θ Ѻ ϴ Ӫ Θ Ѳ Ю ф Ὸ Ό • ȫ ȭ ȍ ȏ ȯ ȱ ɵ ɸ σ ϕ ό Φ ѻ ѳ ӧ ӫ
Ρ Ҏ Ῥ • ρ ϼ Ϸ ϸ φ ҏ ῤ Ɋ Ϙ • ϙ ɋ Ϥ ϥ ϱ
Ȑ Ȓ Ɍ Я Г Ѓ Ӷ Ґ • я ɹ ɺ ɻ ɼ ɽ ɾ ɿ ȑ ȓ ɍ ʀ ʁ г ѓ ґ ӷ
Ș Ϩ ϩ Ϛ • ϛ ɛ ɜ ɝ ʂ ȿ șȚ Ⱦ Ҭ • τ Ϯ ϯ ȶ ʇ ʈ ț т ҭ
Ʉ Ȗ Ώ Ω ц • ȕ ȗ ʮ ʯ ʉ ʊ υ μ ϑ ϋ ύ ΰɅ Ѵ Ѷ • ɣ ʋ ʌ ѵ ѷ ῠ ῡ ῢ ΰ ῦ ῧ
Ϣ Ш Щ • ϣ ш щ ѿ ѡ ʍ ώ ψ Ψ ω ϖ ᾠ ᾡ ᾢ ᾣ ᾤ ᾥ ᾦ ᾧ ῲ ῳ ῴ ῶ ῷ ὼ ώ
Ϫ Ж Җ χ Ӽ Ҳ Ӿ Ӂ Ӝ • ж ϰ ϗ ӽ ӿ ҳ ӂ ӝ җ
Ȳ Ɏ ϒ ϓ ϔ Ύ Ϋ Υ Ў У ц Ѱ Ӱ Ӯ Ӳ Ӵ Ҷ Ҹ Ӌ Ῠ Ῡ Ὺ Ύ • Ч џ ў ү ұ ɣ ɏ ȳ ʎ ʏ ɤ Ϟ λ ϫ ӯ ӱ ӳ ӵ ҷ ҹ ӌ
Ȥ • ɀ ʐ ʑ ȥ ʒ ʓ ȝ
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾
Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ
ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ
℀ ℁ ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ ℍ ℎ ℏ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟
℠ ℡ ™ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ ℰ ℱ Ⅎ ℳ ℴ ℵ ℶ ℷ ℸ ℻ ⅍ ⅎ ⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟

----------------------------------

㊊㊋㊌㊍㊎㊏
㊐㊑㊒㊓㊔㊕㊖㊗㊘㊜㊝㊞㊟㊠㊡㊢
㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰


☽☾✗✘✓ ✔ ☐ ☑ ☒ ✕ ✖✚✪✣✤✥
✱ ✲ ✳ ❃ ❂ ❁ ❀ ✿ ✾ ✽ ✼ ✻ ✺ ✹
✸ ✷ ✶ ✵ ✴ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❖
☀ ☂ ☁ ❣ ✚ ✪ ✣ ✤ ✥ ✦ ❉ ❥ ❦ ❧
❃ ❂ ❁ ❀ ✄ ☪ ➸ ♨ ☢ ☠ ☭ ♈ ☮ ☯
♋ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ ☩ ☪ ☫ ☬ ☭
♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟ ۩ ۞
♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ✦✧✩✫✬✭✮✯✰ ☼ ❣
♲ ♳ ♴ ♵ ♶ ♷ ♸ ♹ ♺ ♻ ♼ ♽♯♩♪♫♬♭
☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ☚ ☛ ☜ ☝ ☞ ☟
☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈ ♉ ♊ ♌ ♍
△ ▲ ☆ ★ ◇ ◆ ■ □ ▽ ▼ ❤❥♎ ♏ ✐✌
๑ # @ & * ¥ ☸ ☆ ★ ✪ ¤ ☼ ☀ ☽☾
♡ ღ☻ ☺ ❂ ◕ ⊕ ☉ Θ o O ♋ ☯ ㊝ ⊙ ◎
◑ ◐ ۰ • ● ▪ ▫ 。 ゚ ๑ ☜ ☞ ☂ ♨ ☎ ☏ ✍✡

----------------------------------

ಠ_ಠ ◕ ◡ ◕ °__° ಥ__ಥ
(-`ω´- ) (●ゝω)ノヽ(∀<●) >_<
⊙▂⊙ ⊙o⊙ ⊙︿⊙  ⊙ω⊙ ⊙△⊙  ⊙▽⊙
(◡_◡) (◕-◕) (◕o◕) (∩_∩)

----------------------------------

┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ⋮ ⋯ ⋰ ⋱
─ ━ │ ┃┌ ┐ ┍ ┑ ┎ ┒ ┏ ┓ └ ┘ ┕ ┙ ┖ ┚ ┗ ┛
┞ ┟ ┢ ┡ ┦ ┧ ┩ ┪
┣ ┫┝ ┥┠ ┨├ ┤
┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿
╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏
═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟
╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬
╭ ╮ ╯ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻
≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿
⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊊ ⊋ ⊏ ⊐ ⊑ ⊒
⊕ ⊖ ⊗ ⊘ ⊙ ⊚ ⊛ ⊜ ⊝ ⊞ ⊟
⊠ ⊡ ⊢ ⊣ ⊤ ⊥ ⊦ ⊧ ⊨ ⊩ ⊪ ⊫ ⊬ ⊭ ⊮ ⊯
⊰ ⊱ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⊸ ⊹ ⊺ ⊻ ⊼ ⊽ ⊾ ⊿
⋀ ⋁ ⋂ ⋃ ⋄ ⋅ ⋆ ⋇ ⋈ ⋉ ⋊ ⋋ ⋌ ⋍
⋎ ⋏ ⋐ ⋑ ⋒ ⋓ ⋔ ⋖ ⋗ ⋘ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟
⋠ ⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬ ⋭

----------------------------------

❛❜❝❞【】〖〗►◄﹃﹄『』◢ ◣◥ ◤
≎≎≎≎≎≎≎≎
==== ☠ ====
☆═━┈┈━═☆
± : . : ± : . : ± : . : ±
▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄
╔══════════════╗

╚══════════════╝
┏━━━━━━━━━┓

┗━━━━━━━━━┛
Oº°‘¨ ¨‘°ºO
•°o.O O.o°•
¨°o.O O.o°¨
—¤÷(`[¤* *¤]´)÷¤—
•·.·´¯`·.·• •·.·´¯`·.·•´
`·.(`·.¸ ¸.·´).·´
`·» »-(¯`v´¯)-»
`•.¸¸.•´¯`•.¸¸.•´
`•.¸¸.••´´¯``•• .¸¸.•´
`•.•●•۰• ••.•´
׺°”˜`”°º× ׺°”˜`”°º×


----------------------------------

▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▐
░ ▒ ▓▕ ▖■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▪ ▫
▬ ▭ ▮ ▯ ▰ ▱ ▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿
◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊
○ ◌ ◍ ◎ ● ◐ ◑ ◒ ◓ ◔ ◕
◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟
◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯

----------------------------------


¡ † ‡ ↔ ↑ ↓ •«» ¤₯ ƒ ₴ ₥ ₦ № ₧ ₰ £ ៛ ₨ ₪ ৳ ₮ ₩ ¥

– — … ° ≈ ≠ ≤ ≥ ± − × ÷ ← → · §

๑☺ ☻ ☼♣ ♥ ♦·۰•●○●ஐﻬ↔ ↕ ▪ ▫ ▬♦ ◊ ◦♫ ♪ ღˇ √ « » ™ ♂♀ ©№® ◦º°×°º◦ ´¯`·»ºØ´ ׺°”˜`”°º×»- ஆ ௰ Þ ௫

๑•ิ.•ั๑ ๑۩۞۩๑ ✿.。.: ☂☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☑ ☒☢ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ♠   ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ✙✈ ✉ ✌ ✁ ✎ ✐ ❀ ✰ ❁ ❤ ❥ ❦❧ ➳ ➽ εїз℡❣·۰•●○●

ゃōゃ ♡๑۩ﺴ ☜ ☞ ☎ ☏♡ ⊙◎ ☺ ☻✖╄ஐﻬ ► ◄ ▧ ▨ ♨ ◐ ◑ ↔ ↕ ▪ ▫ ☼ ♦ ▀ ▄ █▌ ▐░ ▒ ▬♦ ◊ ◦ ☼ ♠♣ ▣ ▤ ▥ ▦ ▩ ◘ ◙ ◈ ♫ ♬ ♪ ♩ ♭ ♪ の ☆ → あ ぃ £ ❤ 。◕‿◕。

# @ & * ¥☸ ❁ ❀ ✿ ✾ ❃ ✺ ❇ ❈ ❊ ❉ ✱ ✲ ✩ ✫ ✬ ✭ ✮ ✰ ☆ ★ ✪ ¤ ☼ ☀ ☽ ☾ ❤ ♡ ღ☻ ☺ ❂ ◕ ⊕ ☉ Θ o O ♋ ☯ ㊝ ⊙ ◎ ◑ ◐ ۰ • ● ▪ ▫ 。 ゚ ๑ ☜ ☞ ☂ ♨ ☎ ☏

︻ ︼ ︽ ︾ 〈 〉 ︿ ﹀ ∩ ∪ ﹁ ﹂ ﹃ ﹄﹝ ﹞ < > ≦ ≧ ﹤ ﹥ 「 」 ︵ ︶ ︷ ︸ ︹ ︺〔 〕 【 】《 》 ( ) { } ﹙ ﹚ 『 』 ﹛ ﹜╳ + - ﹢ × ÷ = ≠ ≒ ∞ ˇ ± √ ⊥ ∠ ∟ ⊿ ㏒

▶ ▷ ◀ ◁ ☀ ☁ ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☑ ☒☢ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ♠   ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ✙ ✈ ✉ ✌ ✁ ✎ ✐ ❀ ✰ ❁ ❤ ❥ ❦❧ ➳ ➽ 〠 〄 ㍿ ♝ ♞

♯♩♪♫♬♭♮ ☎ ☏ ☪ ♈ ♨ ºº ₪ ¤ 큐 « » ™ ♂✿ ♥ の ↑ ↓ ← → ↖ ↗ ↙ ↘ ㊣ ◎ ○ ● ⊕ ⊙ ○  △ ▲ ☆ ★ ◇ ◆ ■ □ ▽ ▼ § ¥ 〒 ¢ £ ※ ♀ ♂ © ® ⁂ ℡ ↂ░ ▣ ▤ ▥ ▦ ▧

✐✌✍✡✓✔✕✖ ♂ ♀ ♥ ♡ ☜ ☞ ☎ ☏ ⊙ ◎ ☺ ☻ ► ◄ ▧ ▨ ♨ ◐ ◑ ↔ ↕ ♥ ♡ ▪ ▫ ☼ ♦ ▀ ▄ █ ▌ ▐ ░ ▒ ▬ ♦ ◊ ◘ ◙ ◦ ☼ ♠ ♣ ▣ ▤ ▥ ▦ ▩ ◘ ◙ ◈ ♫ ♬ ♪ ♩ ♭ ♪ ✄☪☣☢☠

㊊㊋㊌㊍㊎㊏ ㊐㊑㊒㊓㊔㊕㊖㊗㊘㊜㊝㊞㊟㊠㊡㊢ ㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰

✗✘✚✪✣✤✥✦✧✩✫✬✭✮✯✰ ✱✲✳❃❂❁❀✿✾✽✼✻✺✹✸✷ ✶✵✴❄❅❆❇❈❉❊❋❖☀☂☁【】┱ ┲ ❣ ✚ ✪ ✣ ✤ ✥ ✦ ❉ ❥ ❦ ❧ ❃ ❂ ❁ ❀ ✄ ☪ ☣ ☢ ☠ ☭ ♈ ➸ ✓ ✔ ✕ ✖ *.:。✿*゚‘゚・✿.。.:

【】〖〗@﹕﹗/ " _ < > `,·。≈{}~ ~() _ -『』√ $ @ * & # ※ 々∞Ψ ∪∩∈∏ の ℡ ぁ §∮〝〞ミ灬ξ№∑⌒ξζω*ㄨ ≮≯ +-×÷﹢﹣±/=∫∮∝ ∞ ∧∨ ∑ ∏ ∥∠ ≌ ∽ ≦ ≧ ≒﹤﹥じ☆

■♀『』◆◣◥▲Ψ ※◤ ◥ →№←㊣∑⌒〖〗@ξζω□∮〓※∴ぷ▂▃▅▆█ ∏【】△√ ∩¤々♀♂∞①ㄨ≡↘↙▂▂ ▃ ▄ ▅ ▆ ▇ █┗┛╰☆╮ ≠ ▂ ▃ ▄ ▅┢┦aΡpy .......♧♧ ☜♥☞.︻︼─一 ▄︻┻┳═一

﹏◢ ◣ ◥ ◤ ▽ ▧ ▨ ▣ ▤ ▥ ▦ ▩ ◘ ◙ ▓ ▒ ░ Café № @ ㊣ ™ ℡ 凸 の ๑۞๑ ๑۩ﺴ ﺴ۩๑ o(‧'''‧)o ❆ べò⊹⊱⋛⋋ ⋌⋚⊰⊹ ⓛⓞⓥⓔ べ ☀ ☼ ☜ ☞ ⊙® ◈ ♦ ◊ ◦ ◇ ◆ εїз

☆·.¸¸.·´¯`·.¸¸.¤ ~♡のⓛⓞⓥⓔ♡~☃⊹⊱⋛⋌⋚⊰⊹✗/(*w*) ≡[。。]≡※◦º°×°º◦εїз´¯`·»。。♀♡╭☆╯ºØغøº¤ø,¸¸,ºº¤øøºﷲﷲ°º¤ø,¸¸,

げこごさざしじすぜそぞただちぢっつづてでとどなにぬねのはば ♪♫╭♥ ๑•ิ.•ัﻬஐ ✎ぱひびぴふぶぷへべぺほぼぽまみむめも

❃❂❁❀✿✾✽✼✻✺✹✸✷ ✶✵✴❄❅❆❇❈❉❊❋❖❤❥❦❧ ☀ o O #♡ ┽┊﹎.εїз︷✿‧:﹎。❤‧:❉:‧ .。.:*・❀●•♪.。‧:❉:‧ °º¤ø,¸¸,ø¤º°`°º¤ø*.:。✿*゚‘゚・✿.。.:*.:。✿*゚’゚・✿.。✎*εїз

↔ ↕ ▪ → ︷╅╊✿ ❤`•.¸¸.•´´¯`•• .¸¸.•´¯`•.•●•۰• ••.•´¯`•.•• ••.•´¯`•.••—¤÷(`[¤* *¤]´)÷¤——(•·÷[ ]÷·•)—

〓 ☆ ★┣┓┏┫×╰ノ◢ ◣ ◥ ◤ Ω ж ф юЮ ━╃ ╄━ ┛┗ ┓┏ ◇ ◆ ※ .'. ☂.'.❤ ♥ 『』 〖〗▓ ► ◄ ▒ ░ ▓ ╮╭ ╯╰ ァ ┱ ┲☃ ☎ ☏ ☺ ☻ ▧ ▨ ♨ ◘ ◙ ♠ ♧ ♣ ▣▤ ▥ ▦ ▩ ⊕

׺°”˜`”°º× ׺°”˜`”°º×»-(¯`v´¯)-» ×÷·.·´¯`·)» «(·´¯`·.·÷×*∩_∩* ⓛⓞⓥⓔ ╬ ╠ ╣∷ ღ ☃ ❆ £ ∆ ? Õ Ő ő ∞ © ‡ † ? ஜ ஒ ண இ ஆ ௰

♪♪♫▫—(•·÷[ ]÷·•)— ·÷±‡±±‡±÷· Oº°‘¨ ¨‘°ºO •°o.O O.o°• ¨°o.O O.o°¨—¤÷(`[¤* *¤]´)÷¤—•·.·´¯`·.·• •·.·´¯`·.·•´`·.(`·.¸ ¸.·´).·´`·»

»-(¯`v´¯)-»█┗┛↘↙╰☆╮ ≠ ☜♥☞ ︻︼─一 ▄︻┻┳═一 -─═┳︻ ∝╬══→ ::======>> ☆═━┈ ┣▇▇▇═─ ■◆◣◥▲◤ ◥〓∴ぷ▂▃▅▆█ 【】

๑۞๑ ๑۩ﺴ ﺴ۩๑๑۩۞۩...¤¸¸.·´¯`·.¸·..>>--» «--<<..·.¸¸·´¯`·.¸¸¤... .•:´¨•☆ •.¸¸.•´´¯`•´❤

℠ ℡ ™ ¶ ₧ № ™ ℅ µ Æ æ Ǽ ǽ IJ ij Œ œ

¼ ½ ¾

✠❖☸☠ ✠

Δ - ▹ - ◆ - ◇ - ◈ - ◉ - ◊ - ○ - ◌ - ◍ - ◎ - ● - ◐ - ◑ - ◒ -◓ - ◔ - ◕ - ☮ - ☯
✓ - ✔ - √
✕ - ✖ - ✗ - ✘
✙ - ✚ - ✛ - ✜
✩ - ✿ - ❀ - ❁ - ❄ - ❅ - ❆ - ❇ - ❤
♪ - ♫ - ♬ - ♭ - ♮ - ♯
✫ - ✬ - ✭ - ✮ - ✯ - ✰ - ✱ - ✲ - ✳ - ✴ - ✵ - ⋆
✈ - ✁ - ✂
♀ - ♂
↖ - ↗ - ↘ - ↙- ↚ - ↛ - ↜ - ↝ - ↩ - ↪ - ↫ - ↬ - ⇒ - ⇦- - ⇧- ⇨ - ⇩ - ➔
↭ - ↮ - ∿
∮ - ∭ - ∯ - ∰ - ∱ - ∲ - ∳
∴ - ∵ - ⋮ - ⋯ - ⋰ - ⋱
⊕ - ⊖ - ⊗ - ⊘ - ⊙ - ⊚ - ⊜ - ⊛ - ⊝ - ○ - ☼
⊞ - ⊟ - ⊠ - ⊡
⋎ - ⋏
⋐ - ⋑ - ⋒ - ⋓
⌘ - ⌠ - ⌡
℥ - Ω - ℧ - ℨ - ℩

¦ º · • ← ↑ → ↓ ↔ ↕

× ÷ − ± π ⁄ ∆ ∏ ∕ ∙ √ ∞ ≈ ≠ ≡ ≤ ≥
☺ ☻ ☼ ♀ ♂ ♠ ♣ ♥ ♦ ♪ ♫
▀ ▄ █ ▌ ▐ ░ ▒ ▓ ■ □ ▪ ▫ ▬ ▲ ► ▼ ◄ ◊ ○ ● ◘ ◙ ◦ Ξ ◕
§ ¬ ⌐ ‰ ′ ″ Ω ⌂
¤ ₪
¨ ¯ ´ ¸ ˆ ˇ ˉ ˘ ˙ ˚ ˛ ˜ ˝ ̀ ́ ̃ ̉ ̣
‼ ¡ ¿ ‽ “ ” „ ‘ ’ ‚ ‛ « » ‹ › … – — ― ‗ ‾ ‌ ‍


☼☽

ღ ♪ ♫ ♥ ♣ ♠ ♦ ● → ⇒ ► ◄ « » ☼ ☆ ☽ ☾ □ ▽ ↘↙╰╮ ¤ ю ◡

`•.¸¸.•´´¯`••.¸¸.•´´¯`•´

ツマシンなバスタドのメデるれはしないだろうりてたもですフクスイワダラテグー。

ィォッァ じ


Г г Ґ ґ Ѓ ѓ ─ ╫╓ ╗ ╚ ╩ ╔ ╬ ╟ ╣ ├ ┤ ╘ ┴ ↔ ↓ ↑ ± Θ

①②③④⑤⑥⑦⑧⑨⑩ ⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ ⒶⒷⒸⒹⒺⒻ ⒼⒽⒾⒿⓀⓁ ⓂⓃⓄⓅⓆⓇ ⓈⓉⓊⓋⓌⓍ ⓎⓏ ⓐⓑⓒⓓⓔⓕ ⓖⓗⓘⓙⓚⓛ ⓜⓝⓞⓟⓠⓡ ⓢⓣⓤⓥⓦⓧ ⓨⓩ

﹤ - ﹥ - ∝ - ∧ - ∨ - ∥ - ∠ - ≌ - ∽ - ≦ - ≧ - ≒ - ~ - ~ - ※ - * -  - ≮ - ≯ - + - - - × - ÷ - ﹢ - ± - / - = - ⊹ - ⊱ - ⋛ - ⋋ - ⋌ - ⋚ - ⊰ - ⊹ - 彡 - ❝ - ❞ - ° - ﹌ - ﹎ - ╱ - ╲ - ☁ - Þ - ௫ - べ - ☪ - ∷ - ≈


ა ბ გ დ ე ვ ზ ჱ თ ი კ ლ მ ნ ჲ ო პ ჟ რ ს ტ ჳ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჴ ჯ ჰ ჵ ჶ
<3 nbsp="" p="">
LEFT PARENTHESIS (U+0028, Ps): (
RIGHT PARENTHESIS (U+0029, Pe): )
LEFT SQUARE BRACKET (U+005B, Ps): [
RIGHT SQUARE BRACKET (U+005D, Pe): ]
LEFT CURLY BRACKET (U+007B, Ps): {
RIGHT CURLY BRACKET (U+007D, Pe): }
LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00AB, Pi): ?
RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00BB, Pf): ?
TIBETAN MARK GUG RTAGS GYON (U+0F3A, Ps): ༺
TIBETAN MARK GUG RTAGS GYAS (U+0F3B, Pe): ༻
TIBETAN MARK ANG KHANG GYON (U+0F3C, Ps): ༼
TIBETAN MARK ANG KHANG GYAS (U+0F3D, Pe): ༽
OGHAM FEATHER MARK (U+169B, Ps): ᚛
OGHAM REVERSED FEATHER MARK (U+169C, Pe): ᚜
LEFT SINGLE QUOTATION MARK (U+2018, Pi): ‘
RIGHT SINGLE QUOTATION MARK (U+2019, Pf): ’
SINGLE LOW-9 QUOTATION MARK (U+201A, Ps): ‚
SINGLE HIGH-REVERSED-9 QUOTATION MARK (U+201B, Pi): ‛
LEFT DOUBLE QUOTATION MARK (U+201C, Pi): “
RIGHT DOUBLE QUOTATION MARK (U+201D, Pf): ”
DOUBLE LOW-9 QUOTATION MARK (U+201E, Ps): „
DOUBLE HIGH-REVERSED-9 QUOTATION MARK (U+201F, Pi): ‟
SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039, Pi): ‹
SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A, Pf): ›
LEFT SQUARE BRACKET WITH QUILL (U+2045, Ps): ⁅
RIGHT SQUARE BRACKET WITH QUILL (U+2046, Pe): ⁆
SUPERSCRIPT LEFT PARENTHESIS (U+207D, Ps): ⁽
SUPERSCRIPT RIGHT PARENTHESIS (U+207E, Pe): ⁾
SUBSCRIPT LEFT PARENTHESIS (U+208D, Ps): ₍
SUBSCRIPT RIGHT PARENTHESIS (U+208E, Pe): ₎
LEFT-POINTING ANGLE BRACKET (U+2329, Ps): 〈
RIGHT-POINTING ANGLE BRACKET (U+232A, Pe): 〉
MEDIUM LEFT PARENTHESIS ORNAMENT (U+2768, Ps): ❨
MEDIUM RIGHT PARENTHESIS ORNAMENT (U+2769, Pe): ❩
MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT (U+276A, Ps): ❪
MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT (U+276B, Pe): ❫
MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT (U+276C, Ps): ❬
MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT (U+276D, Pe): ❭
HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT (U+276E, Ps): ❮
HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT (U+276F, Pe): ❯
HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT (U+2770, Ps): ❰
HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT (U+2771, Pe): ❱
LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT (U+2772, Ps): ❲
LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT (U+2773, Pe): ❳
MEDIUM LEFT CURLY BRACKET ORNAMENT (U+2774, Ps): ❴
MEDIUM RIGHT CURLY BRACKET ORNAMENT (U+2775, Pe): ❵
LEFT S-SHAPED BAG DELIMITER (U+27C5, Ps): ⟅
RIGHT S-SHAPED BAG DELIMITER (U+27C6, Pe): ⟆
MATHEMATICAL LEFT WHITE SQUARE BRACKET (U+27E6, Ps): ⟦
MATHEMATICAL RIGHT WHITE SQUARE BRACKET (U+27E7, Pe): ⟧
MATHEMATICAL LEFT ANGLE BRACKET (U+27E8, Ps): ⟨
MATHEMATICAL RIGHT ANGLE BRACKET (U+27E9, Pe): ⟩
MATHEMATICAL LEFT DOUBLE ANGLE BRACKET (U+27EA, Ps): ⟪
MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET (U+27EB, Pe): ⟫
MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET (U+27EC, Ps): ⟬
MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET (U+27ED, Pe): ⟭
MATHEMATICAL LEFT FLATTENED PARENTHESIS (U+27EE, Ps): ⟮
MATHEMATICAL RIGHT FLATTENED PARENTHESIS (U+27EF, Pe): ⟯
LEFT WHITE CURLY BRACKET (U+2983, Ps): ⦃
RIGHT WHITE CURLY BRACKET (U+2984, Pe): ⦄
LEFT WHITE PARENTHESIS (U+2985, Ps): ⦅
RIGHT WHITE PARENTHESIS (U+2986, Pe): ⦆
Z NOTATION LEFT IMAGE BRACKET (U+2987, Ps): ⦇
Z NOTATION RIGHT IMAGE BRACKET (U+2988, Pe): ⦈
Z NOTATION LEFT BINDING BRACKET (U+2989, Ps): ⦉
Z NOTATION RIGHT BINDING BRACKET (U+298A, Pe): ⦊
LEFT SQUARE BRACKET WITH UNDERBAR (U+298B, Ps): ⦋
RIGHT SQUARE BRACKET WITH UNDERBAR (U+298C, Pe): ⦌
LEFT SQUARE BRACKET WITH TICK IN TOP CORNER (U+298D, Ps): ⦍
RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER (U+298E, Pe): ⦎
LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER (U+298F, Ps): ⦏
RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER (U+2990, Pe): ⦐
LEFT ANGLE BRACKET WITH DOT (U+2991, Ps): ⦑
RIGHT ANGLE BRACKET WITH DOT (U+2992, Pe): ⦒
LEFT ARC LESS-THAN BRACKET (U+2993, Ps): ⦓
RIGHT ARC GREATER-THAN BRACKET (U+2994, Pe): ⦔
DOUBLE LEFT ARC GREATER-THAN BRACKET (U+2995, Ps): ⦕
DOUBLE RIGHT ARC LESS-THAN BRACKET (U+2996, Pe): ⦖
LEFT BLACK TORTOISE SHELL BRACKET (U+2997, Ps): ⦗
RIGHT BLACK TORTOISE SHELL BRACKET (U+2998, Pe): ⦘
LEFT WIGGLY FENCE (U+29D8, Ps): ⧘
RIGHT WIGGLY FENCE (U+29D9, Pe): ⧙
LEFT DOUBLE WIGGLY FENCE (U+29DA, Ps): ⧚
RIGHT DOUBLE WIGGLY FENCE (U+29DB, Pe): ⧛
LEFT-POINTING CURVED ANGLE BRACKET (U+29FC, Ps): ⧼
RIGHT-POINTING CURVED ANGLE BRACKET (U+29FD, Pe): ⧽
LEFT SUBSTITUTION BRACKET (U+2E02, Pi): ⸂
RIGHT SUBSTITUTION BRACKET (U+2E03, Pf): ⸃
LEFT DOTTED SUBSTITUTION BRACKET (U+2E04, Pi): ⸄
RIGHT DOTTED SUBSTITUTION BRACKET (U+2E05, Pf): ⸅
LEFT TRANSPOSITION BRACKET (U+2E09, Pi): ⸉
RIGHT TRANSPOSITION BRACKET (U+2E0A, Pf): ⸊
LEFT RAISED OMISSION BRACKET (U+2E0C, Pi): ⸌
RIGHT RAISED OMISSION BRACKET (U+2E0D, Pf): ⸍
LEFT LOW PARAPHRASE BRACKET (U+2E1C, Pi): ⸜
RIGHT LOW PARAPHRASE BRACKET (U+2E1D, Pf): ⸝
LEFT VERTICAL BAR WITH QUILL (U+2E20, Pi): ⸠
RIGHT VERTICAL BAR WITH QUILL (U+2E21, Pf): ⸡
TOP LEFT HALF BRACKET (U+2E22, Ps): ⸢
TOP RIGHT HALF BRACKET (U+2E23, Pe): ⸣
BOTTOM LEFT HALF BRACKET (U+2E24, Ps): ⸤
BOTTOM RIGHT HALF BRACKET (U+2E25, Pe): ⸥
LEFT SIDEWAYS U BRACKET (U+2E26, Ps): ⸦
RIGHT SIDEWAYS U BRACKET (U+2E27, Pe): ⸧
LEFT DOUBLE PARENTHESIS (U+2E28, Ps): ⸨
RIGHT DOUBLE PARENTHESIS (U+2E29, Pe): ⸩
LEFT ANGLE BRACKET (U+3008, Ps): 〈
RIGHT ANGLE BRACKET (U+3009, Pe): 〉
LEFT DOUBLE ANGLE BRACKET (U+300A, Ps): 《
RIGHT DOUBLE ANGLE BRACKET (U+300B, Pe): 》
LEFT CORNER BRACKET (U+300C, Ps): 「
RIGHT CORNER BRACKET (U+300D, Pe): 」
LEFT WHITE CORNER BRACKET (U+300E, Ps): 『
RIGHT WHITE CORNER BRACKET (U+300F, Pe): 』
LEFT BLACK LENTICULAR BRACKET (U+3010, Ps): 【
RIGHT BLACK LENTICULAR BRACKET (U+3011, Pe): 】
LEFT TORTOISE SHELL BRACKET (U+3014, Ps): 〔
RIGHT TORTOISE SHELL BRACKET (U+3015, Pe): 〕
LEFT WHITE LENTICULAR BRACKET (U+3016, Ps): 〖
RIGHT WHITE LENTICULAR BRACKET (U+3017, Pe): 〗
LEFT WHITE TORTOISE SHELL BRACKET (U+3018, Ps): 〘
RIGHT WHITE TORTOISE SHELL BRACKET (U+3019, Pe): 〙
LEFT WHITE SQUARE BRACKET (U+301A, Ps): 〚
RIGHT WHITE SQUARE BRACKET (U+301B, Pe): 〛
REVERSED DOUBLE PRIME QUOTATION MARK (U+301D, Ps): 〝
DOUBLE PRIME QUOTATION MARK (U+301E, Pe): 〞
LOW DOUBLE PRIME QUOTATION MARK (U+301F, Pe): 〟
ORNATE LEFT PARENTHESIS (U+FD3E, Ps): ﴾
ORNATE RIGHT PARENTHESIS (U+FD3F, Pe): ﴿
PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET (U+FE17, Ps): ︗
PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET (U+FE18, Pe): ︘
PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS (U+FE35, Ps): ︵
PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS (U+FE36, Pe): ︶
PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET (U+FE37, Ps): ︷
PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET (U+FE38, Pe): ︸
PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET (U+FE39, Ps): ︹
PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET (U+FE3A, Pe): ︺
PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET (U+FE3B, Ps): ︻
PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET (U+FE3C, Pe): ︼
PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET (U+FE3D, Ps): ︽
PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET (U+FE3E, Pe): ︾
PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET (U+FE3F, Ps): ︿
PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET (U+FE40, Pe): ﹀
PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET (U+FE41, Ps): ﹁
PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET (U+FE42, Pe): ﹂
PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET (U+FE43, Ps): ﹃
PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET (U+FE44, Pe): ﹄
PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET (U+FE47, Ps): ﹇
PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET (U+FE48, Pe): ﹈
SMALL LEFT PARENTHESIS (U+FE59, Ps): ﹙
SMALL RIGHT PARENTHESIS (U+FE5A, Pe): ﹚
SMALL LEFT CURLY BRACKET (U+FE5B, Ps): ﹛
SMALL RIGHT CURLY BRACKET (U+FE5C, Pe): ﹜
SMALL LEFT TORTOISE SHELL BRACKET (U+FE5D, Ps): ﹝
SMALL RIGHT TORTOISE SHELL BRACKET (U+FE5E, Pe): ﹞
FULLWIDTH LEFT PARENTHESIS (U+FF08, Ps): (
FULLWIDTH RIGHT PARENTHESIS (U+FF09, Pe): )
FULLWIDTH LEFT SQUARE BRACKET (U+FF3B, Ps): [
FULLWIDTH RIGHT SQUARE BRACKET (U+FF3D, Pe): ]
FULLWIDTH LEFT CURLY BRACKET (U+FF5B, Ps): {
FULLWIDTH RIGHT CURLY BRACKET (U+FF5D, Pe): }
FULLWIDTH LEFT WHITE PARENTHESIS (U+FF5F, Ps): ⦅
FULLWIDTH RIGHT WHITE PARENTHESIS (U+FF60, Pe): ⦆
HALFWIDTH LEFT CORNER BRACKET (U+FF62, Ps): 「
HALFWIDTH RIGHT CORNER BRACKET (U+FF63, Pe): 」
<3 nbsp="" p="">
특수문자 모음
특수 문자 입력하는 shortcuts
키워드 : Symbols, Special Characters, Arrows, Apple Command, Clover

Monday, April 23, 2012

cocos2d 사용하는 프로젝트에서 클래스 간편히 만드는 법

  1. Command + N (또는 왼쪽 Navigator에 오른클릭 > New File..)
  2. Choose a template for your new file... 에서 CCNode class 선택 (디폴트 그대로)
  3. Subclass of CCNode (디폴트 그대로)
  4. Save As.. 에서 원하는 클래스 이름 넣음
  5. @interface MyClass : CCNode {

    @interface MyClass : NSObject {
    로 고침

cocos2d 에서 ccTouchBegan 으로 들어가지 않을 때 해결법

질문 : ccTouchesBegan 은 되는데 ccTouchBegan 으로는 들어가지 않을 때 해결법?
답 : 메인 layer의 멤버 함수로 다음을 넣어준다.
-(void) registerWithTouchDispatcher
{
      [[CCTouchDispatcher  sharedDispatcher]  addTargetedDelegate:self  priority:0  swallowsTouches:YES];
}

ccTouchesBegan 도 안된다면 메인 layer의 -(id) init 함수 내에 self.isTouchEnabled = YES; 를 넣어주는 것을 잊었을 것임

Sunday, April 22, 2012

XCode에서 현재 소스코드를 Project Navigator에서 표시하는 법

질문 : 현재 에디터에 열려 있는 소스 파일을 왼쪽의 프로젝트 내비게이터에 나타나게 하는 법?
답 : 핫키 Shift + Command + J 또는
메뉴 > Navigate > Reveal in Project Navigator 또는
Right click > Reveal in Project Navigator
키워드 : editor, editing, 에디터, hotkey, shortcut

Cocos2d의 coordinate system

Objective-C의 switch 사용시 각 case 를 {} 블록으로 묶기

Objective-C 의 switch 문 사용시 각 case 를 {} 블록으로 묶는 습관 들이기
안묶으면 에러가 나는 경우가 빈발
키워드 : block, error

Cocos2d 클래스 이름 바뀐 것들

CCSlideInBTransition → CCTransitionSlideInB
CCLabel → CCLabelTTF
키워드 : 에러, class, error

Error "Sending 'ccColor4B' (aka 'struct_ccColor4B') to parameter of incompatible type 'CIColor *'"

질문 : 해결법?
답 : 기존 코드를 다음과 같이 고쳐준다.
// 에러 나서 고친 것
//+ (id) layerWithColor:(ccColor4B)color
//{
// return [[[self alloc] initWithColor:color] autorelease];
//}
+ (id) layerWithColor:(ccColor4B)color
{
      return [[(CCColorLayer*)[self alloc] initWithColor:color] autorelease];
}
출처 : Error "Sending 'ccColor4B' (aka 'struct_ccColor4B') to parameter of incompatible type 'CIColor *'"
키워드 : cocos2d

Saturday, April 21, 2012

블로그 백업됨

PC to Mac blog-04-21-2012.xml

실전에서의 Code reuse 방법

1. 일반적 용도를 가진 함수 단위로 모듈화
되도록 많은 부분을 General한 용도를 가진 단순 기능의 함수 단위로 모듈화한다.
Custom하게 만든 클래스를 다른 프로젝트에서 재사용 가능한 경우는 실전에서는 거의 없지만
함수는 잘만 하면 많은 부분을 재사용할 수 있다.

2. 클래스는 되도록 단일기능의 단순한 것으로 모듈화
클래스의 기능이 복합적이 되거나 커질수록 재사용 가능성은 점점 사라진다.
되도록 단순한 단일 기능을 가진 클래스들로 코드를 구성한다.

3. 코드 조각은 재사용하기 쉽게 만듬
함수/클래스 단위 재사용보다 Code snippet의 재사용이 더 적합한 경우가 종종 있다.
이 경우, 해당 Code snippet에서 parameter에 해당하는 변수를 assign 하는 작업을
Code snippet의 제일 앞부분에 몰아 둔다. 그러면 코드를 copy & paste 하여
다른 프로젝트에 갖다 쓸 때 앞부분의 변수값만 고쳐주면 된다.

(예) Pseudo code 로 써보면

(A)
loadCharacterData("characterData.txt");
loadCharacterSprite("characterData.png");

(B)
string filename = "characterData";
loadCharacterData(filename.append(".txt"));
loadCharacterSprite(filename.append(".png"));

이 code snippet을 다른 프로젝트에 가져다 쓸 경우,
(A)는 파일명을 다 고쳐야 하는 반면
(B)는 맨 위 한줄만 고치면 된다.
코드가 길어지면 (A) 같은 방식보다 (B) 같은 방식이 좋다는 것이다.

되도록 code snippet 대신 함수나 클래스로 만들고, code snippet 을 사용할 경우에는 동작하는 샘플 코드를 남겨둔다.

Objective C 에서 멤버값 세팅할때 주의점

다음과 같이 정의되었다고 하자.
// 헤더
aClass
{
    anotherClass  _aMember;
}
@property (nonatomic, retain) * aMember;
// 소스
@synthesize aMember = _aMember;
------------------------------
이 경우
self.aMember = val; 와
_aMember = val; 는 다르다.
전자는 레퍼런스 카운터를 하나 올려주는 반면
후자는 단지 값만 세팅해주기 때문.

Monday, April 16, 2012

cocos2d에서 sprite sheet animation 사용하는 법

질문 : cocos2d에서 스프라이트 애니메이션 하는 법
레퍼런스 : How To Use Animations and Sprite Sheets in Cocos2D

Sunday, April 15, 2012

Objective-C 의 @property 에서 atomic 과 nonatomic

설명 :
어떤 클래스의 멤버로 addressBook 이라는 것이 있을 때 이를 nonatomic 으로 한다고 하자.
쓰레드 A 가 addressBook 를 읽고 그와 동시에
쓰레드 B 가 addressBook 에 쓴다고 할때
atomic 이 아니라면 A 가 얻어내는 정보는 제대로 된 것이 아닐 수 있다.

이를테면 addressBook 가 멤버로 name, address, phoneNumber 를 가질 경우
각각이 어긋난 정보가 될 수 있다는 것. 따라서 atomic 으로 하면 이를 막을 수 있게 된다.

주의점 :
atomic 는 thread safe 를 보장해주지는 않는다고 말하는데 그 의미를 설명해보자.
클래스 멤버가 firstName, lastName 이라는 스트링 멤버가 있을 때 각각이 atomic 이라고 하자.
쓰레드 A 가 firstName 과 lastName 을 get 하고 그와 동시에
쓰레드 B 가 firstName 과 lastName 을 set 할 때
쓰레드 A 가 얻어내는 것은 성과 이름이 어긋난 잘못된 정보가 될 수 있다. 즉
thread safe 하게 짜려면 firstName 과 lastName 각각을 atomic 으로 만드는 것은 물론이고
추가로 firstName 과 lastName 을 함께 set / get 하는 것을 atomic 하게 하는 방법을
사용해야 한다는 것이다.

레퍼런스 : Atomic vs nonatomic properties
키워드 : @synthesize, string

Objective-C 의 @property 에서 assign, retain, copy 의 차이

질문 : @property 에서 assign, retain, copy 의 차이
답 :
  1. assign 은 그냥 값만 set / get 하는 것
  2. retain 은 set / get 할때 retain count 를 올려주고 내려주는 것
  3. copy 는 set / get 할때 pointer 가 아닌 value 를 주고받는 것
    (단, 변하지 않는 값의 경우 copy 가 아닌 원래 값을 돌려줌)
쉽게 말해 int나 float같은 그냥 value의 경우는 assign이 적합하고
일반적인 클래스의 경우 retain 이 적합
값의 copy가 필요한 특수한 경우에 한해서는 copy 사용(예: NSMutableString 변수를 변화시켜가다가 그걸로 NSString 인 멤버를 set 하는 경우 등)

레퍼런스 : Assign, retain, copy: pitfalls in Obj-C property accessors
키워드 : @synthesize

How to Change Desktop Icon Size and Arrangement

질문 : 데스크탑 아이콘 크기 및 파일이름 위치(아래쪽, 오른쪽) 바꿔주는 옵션은 어디 있나
답 : 파인더에서 메뉴 > View > Show View Options (Command + J) 에서 조절 가능
레퍼런스 : How to Change Desktop Icon Size and Arrangement
키워드 : file name, right side

옛 기기와의 호환을 위한 텍스처 해상도

CAUTION: Unless you develop your game exclusively for iPhone 3GS, iPad, or iPhone 4 and
future devices, you should not use a canvas width or height of 2048. Older devices only support
texture dimensions up to a maximum of 1024×1024 pixels.
출처 : Learn iPhone and iPad Cocos2D Game Development 132 페이지
키워드 : resolution, texture atlas

Saturday, April 14, 2012

cocos2d에서 iPhone4 이상(retina display)을 위해 해줘야 할 것

cocos2d에서 retina display 쓸 수 있게 하는 법
디폴트로는 오리지널 아이폰 해상도인 320 x 480 으로 동작한다.
iPhone 4의 640 x 960 에서 그에 걸맞는 해상도로 동작하게 하려면 다음과 같이 해줘야 한다.

1. 레티나 디스플레이를 enable 해준다
우선 AppDelegate.m 에서 다음 부분을 uncomment 해준다.
// Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
// if( ! [director enableRetinaDisplay:YES] )
// CCLOG(@"Retina Display Not supported");

2. 기존의 이미지의 hd 버전을 만들어 준다
예를 들어 게임 상에서 hero.png 라는 100 x 100 이미지를 사용하고 있다면
hero-hd.png 라는 200 x 200 이미지를 만들어 넣어준다.

출처 :
HowTo: Cocos2d – Enable Retina Display. Part One
HowTo:Cocos2d – Enable Retina Display. Part Two – The Graphics

NSString의 실제 픽셀 사이즈 알아내는 법

주어진 NSString을 특정 font로 일정 영역 안에 그려주는 멤버 함수로는 drawInRect:withFont: 등이 유용
출처 : NSString UIKit Additions Reference
질문과 답 링크 : Font size in pixels
키워드 : 포인트, point, pt, string

3인치대 스마트폰 종말론…“애플도 변심”

3인치대 스마트폰 종말론…“애플도 변심”
‘최소 4인치’가 스마트폰 시장 트렌드로 자리 잡은 가운데 3.5인치 아이폰을 고집해 온 애플도 전략 수정이 불가피한 상황이다... 잡스와 달리 현 최고경영자(CEO) 팀 쿡은 4인치대 화면에 관심이 크다는 게 외신들의 설명이다. 로이터와 씨넷 등은 쿡이 4.6~4.8인치 레티나 디스플레이를 아이폰5에 탑재했을 가능성이 크다고 보도했다.

파인더에서 다운로드 폴더로 가는 핫키는 없는가?

질문 : Keyboard shortcut to Downloads folder?
답 : Command + Option + L (OS X Lion 에서 새로 들어간 hotkey)
레퍼런스 : 80 handy OS X Lion tips and tricks

XCode4 hotkeys

Edit
Expand/Collapse : Option + Command + Arrow Left/Right
Block Comment : Command + /

Build
Run : Command + R
Clean : Shift + Command + K

Debug
Step Over : F6
Step Into : F7
Step Out : F8
Stop : Command + .
Pause : Control + Command + Y
Continue Command Execution : Control + Command + Y
Add Breakpoint : Command + \

Window
Show Debug Area (아래쪽 창 열기/닫기) : Command + Shift + Y
Activate Console : Command + Shift + C (View > Debug Area > Activate Console)
Shift + Command + J : Reveal in Project Navigator
Command + 0 : Show/Hide Project Navigator
Command + 1~7 : Project Navigator 의 tab 변경
Command + T : New Tab

레퍼런스 : “Continue program execution” keyboard shortcut – Xcode 4

Xcode 4 User Guide

About XCode4
Orientation to Xcode

XCode4 에서 도큐먼트 간 전환 방법

질문 : XCode4 에서 도큐먼트 간 전환을 간편히 하려면?
답 : 마우스에 one finger swipe

XCode4 에서 도큐먼트 윈도우를 닫는 hotkey?

질문 : XCode4 에서 도큐먼트 윈도우를 닫는 핫키?
답 : Command + Control + w
키워드 : xcode 4 close window document

Friday, April 13, 2012

아이락스 키보드

아이락스 키보드
PC에서 애플 키보드와 똑같은 키보드를 쓰고 싶다면 이걸 쓰면 좋을듯함
애플 키보드를 쏙 닮은 아이락스 (i-Rocks) KR-6402
아이락스 KR 6402 모델

Friday, April 6, 2012

gmail 에서 스팸 차단하는 법

다음과 같이 Filter 를 사용하여 차단하면 된다.
1. 스팸메일을 받음
2. 메일 화면 상단의 More > Filter messages like this 를 실행
3. 누구에게서 온 것인가(From), 특정 단어를 사용했는가(Has the words) 등을 입력
4. >> Create filter with this search 클릭
5. 그런 메일을 어떻게 처리할 지 체크하는 곳이 나옴. Skip the inbox 등에 체크.
6. Create filter 버튼 눌러 필터 생성 완료.

생성된 필터를 나중에 edit 하고자 한다면
1. 오른쪽 위의 톱니바퀴 모양 아이콘 클릭 > Settings
2. Filters 탭 클릭하면 여기서 기존에 만들어진 필터들이 나타남. 여기서 edit 할 수 있다.

링크 : Using Filters

Sunday, April 1, 2012

Blogger 블로그 백업하는 법

질문 : Blogger 블로그 백업하는 법
답 : Design > Settings > Other > Export blog 하면 됨
키워드 : blogspot