2014의 게시물 표시

구글 캘린더로 스팸 광고오는 것 해결하기

이미지
얼마전에 구글 캘린더에 아래와 같은 스팸 광고가 초대 일정으로 와있더군요.


 저 혼자봤으면 상관 없겠지만 출근중에 와이프랑 같이 봐서 당황스런 상황이 연출이 되었던....


 정말 광고 수법도 다양해지고 있네요. 뭐 좀 기다리면 구글이 알아서 필터링 해주겠지만, 그전에 이게 지워도 지워도 금방 또 오고 그렇기 때문에 아예 차단을 해야합니다. 일단 PC버전 구글 캘린터에서 작업을 진행해야 합니다. 구글 캘린더 설정으로 갑니다.



 설정 내용 중 밑으로 가보면 아래와 같이 거절한 일정 표시에 '아니요', 내 캘린더에 초대장 자동 추가에 '아니요, 회신한 초대장만 표시합니다.'를 체크합니다. 그리고 저장을 누른 후 캘린더로 돌아갑니다.


 사실 위에만 해줘도 차단은 되는 것 같습니다. 아래는 더 확실히 하기 위한 추가 사항입니다. 다시 설정 버튼을 눌러 이번에는 실험실로 갑니다.


 다양한 기능들을 추가 사용할 수 있는데 아래와같이 자동으로 일정 거부를 사용에 체크 한 후 역시나 저장을 눌러 캘린터로 돌아갑니다.


 이것으로 스팸 광고 일정을 구글 캘린더에서 차단을 할 수 있습니다. 하지만 이렇게 하면 다른 사람들과의 일정공유를 더 이상 할 수 없게 되는 불편이 있기 때문에 이런걸 안해도 구글에서 메일 필터링 해주는 것 처럼 자동으로 필터링 해주는 그 날이 빨리 오면 좋겠네요.

Mac OSX 스크린샷 파일명을 영문으로, 저장위치 변경하기

이미지
맥에서 기본적으로 지원하는 스크린샷 기능으로 스샷을 찍어보면 아래 그림과 같이 스크린샷 날짜 시간 형식으로 저장이 됩니다. 위치는 데스크탑 위치라서 계속 찍다보면 바탕화면이 지저분해지죠. 일상적으로 사용하기에는 크게 문제는 없지만 저 처럼 개발 환경이라던지 할때는 파일명이 한글보다는 영문으로 파일이나 폴더를 다루는게 좋습니다.



 그래서 이번 포스팅에서는 스크린샷을 영문으로 자동으로 저장하는 법과 저장 위치를 수정하는 법을 정리해보겠습니다. 매버릭스 기준이긴 합니다만 터에서 입력하는 명령어는 같고 시스템 설정에서의 내용만 조금 다를 수 있습니다.


1. 스크린샷 파일명 한글 -> 영문으로

 먼저 터미널을 실행하고 아래와 같이 입력해줍니다. 붉은색으로 입력한 부분은 원하는대로 수정하시면 됩니다.


defaults write com.apple.screencapture name ScreenShot
 다음으로 아래와 같이 입력합니다.


killall SystemUIServer
 이제 스크린샷에서 지정한데로 ScreenShot으로 저장이 된 것을 확인할 수 있습니다. 하지만 아직 시간에서 오후라는 것이 보입니다. 이것을 수정해보겠습니다.



시스템 환경설정 -> 날짜와 시간의 오른쪽 밑에 있는 '언어 및 지역 열기...'를 클릭합니다.
 언어 및 지역에서 '고급'을 클릭합니다.   아래 그림과 같이 시간 탭에서 제일 밑에 있는 오전, 오후 부분에 있던 한글을 각각 AM, PM 등으로 변경하고 '승인'을 클릭해 저장합니다.

 이제 아래와 같이 스크린샷 파일명과 시간이 모두 영문으로 저장이 됩니다.



2. 스크린샷 저장 위치 변경하기

 바탕화면에 너무 많이 저장하면 지저분할테니 위에서 했던데로 터미널에서 아래의 명령어를 입력해줍니다. 붉은색 부분은 역시나 개인들마다 다를 폴더 위치가 되겠습니다.


defaults write com.apple.screencapture location /Volumes/MacData/ScreenShots/

Cocos2d-x Plugin-X 소개 및 Admob 연동하기

지난 3월 말에 Cocos2d-x 사용자 모임 네이버 카페에서 진행했던 Cocos2d-x Plugin-X 소개 및 애드몹 연동하기에 대한 발표 자료입니다. 사람들 앞에서 발표하는건 아직 울렁증이 심해서 참석했던 분들께는 죄송한 마음이 있네요. 아무튼 그리 대단한 것도 아니고 썩히기도 그래서 공유합니다. 참고로 톱니바퀴 모양의 설정 버튼을 누르면 제가 발표할려고 적어놓은 발표자 노트도 볼 수 있습니다.


Unable to execute dex: java.nio.BufferOverflowException.

이미지
Cocos2d-x-3.0beta2 안드로이드 프로젝트를 실행 중 아래와 같은 오류가 발생했습니다.

Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.MyGameUnknownAndroid Packaging Problem

 꼭 Cocos2d-x를 떠나서 일반적인 안드로이드 개발환경 오류인 듯 합니다. 구글링을 해보면 프로젝트 우클릭 - android tools - android supprot library를 설치하면 되거나 Android SDK Build-tools를 19.0.0 이라면 18.1.1로 다운그레이드 하면 된다고하네요.

 위 방식은 최신 빌드 툴이 나오기 전 방식이고 Android SDK Manager를 실행해서 아래와 같이 19.0.3으로 최신으로 업그레이드 해줬더니 해결이 되었습니다.

Cocos2d-x-3.0beta2 Plugin-X 적용시 안드로이드 프로젝트 로딩 에러

이미지
오랜만에 포스팅입니다. 기존에 Cocos2d-x Plugin-X 포스팅은 3.0alpha1으로 진행했던거고 이번에 3.0beta2로 진행을 해봤습니다(오늘 3.0rc0이 나왔네요 ㅎ). 그런데 alpha1에서는 없던 에러가 아래와 같이 발생했습니다.

Error processing changed links in project description file.
No file system is defined for scheme: c


 그냥 project-creator로 만든건 잘 되지만 Plugin-X에 있는 gameDevGuide.sh를 적용하고 나면 에러가 발생하네요. 아무튼 이 상태에서 OK를 누르면 아래와 같이 프로젝트가 제대로 로딩이 안 되더군요.



 역시 버전 올라갔다고 실망을 시키지 않는? Cocos2d-x입니다. 의외로 해결책은 간단한데요 그냥 F5 눌러서 갱신 시키면 잘 되더군요. 다른 프로젝트를 만들어서 또 Plugin-X 적용해봤는데도 같은 증상이 나왔고 역시나 F5로 해결했습니다.

UnityException: Failed assemblies stripper

이미지
유니티3D iOS 프로젝트를 빌드 중 아래와 같이 2개의 오류가 발생했습니다.


UnityException: Failed assemblies stripper: /Applications/Unity/Unity.app/Contents/Frameworks/Mono/bin/mono "/Applications/Unity/Unity.app/Contents/Frameworks/Tools/UnusedByteCodeStripper/UnusedBytecodeStripper.exe" -l none -c link -a "Assembly-CSharp-firstpass.dll" -a "Assembly-CSharp.dll" -out output -x "/Applications/Unity/Unity.app/Contents/Frameworks/Tools/UnusedByteCodeStripper/link.xml" -d "Temp/StagingArea/Data/Managed" -x "tmplink.xml" current dir : Temp/StagingArea/Data/Managed
 result file exists: False
stdout:
stderr: Unhandled Exception: Mono.Linker.ResolutionException: Can not resolve reference: System.Void System.Security.SecurityException::.ctor(System.String)  at Mono.Linker.Steps.MarkStep.MarkMethod (Mono.Cecil.MethodReference reference, System.Object markedby) [0x00000] in <filename unknown>:0   at Mono.Linker.Steps.MarkStep.MarkInstruction (Mono.Cecil.Cil.…

NGUI 3.x Tutorial Step11 - Popup List

이미지
NGUI로 간단히 3D UI를 해봤습니다. 이번에는 마지막으로 팝업 리스트 박스를 정리해보겠습니다.

 먼저 빈 게임 객체를 만든 후 라벨Sliced스프라이트를 적당히 만들고 이것들을 게임 객체의 자식으로 넣어줍니다. 아래 그림과 같이 NGUI - Attach - Popup List Script를 추가하고 Options에 적당한 값을 입력합니다. On Value Change에서 라벨의 값을 변경하기 위해 자식 Label을 바인딩 시키고 UILabel.SetCurrentSelection을 메소드로 선택합니다.


public UIPopupList testPopupList;

public void OnPopupListTest()
{
Debug.Log("OnPopupListTest " + testPopupList.value);
}

 마지막으로 UITest에 위와 같이 이벤트 핸들링을 위한 작업을 해준 후 아래 그림과 같이 UITest를 Popup List 객체에 추가 후 Test Popup List에 PopupList 객체를 바인드 합니다. On Value Change에도 바인드 시켜줍니다.



 실행하면 아래와 같이 팝업 리스트를 변경해보면 라벨과 로그가 같이 변경 출력되는 것을 확인할 수 있습니다.



 이것으로 긴? NGUI 3.x 튜토리얼을 마칠까 합니다.

NGUI 3.x Tutorial Step10 - 3D

이미지
NGUI 키보드 입력 처리를 위한 UIInput을 추가하고 이벤트 핸들링을 해봤습니다. 이번에는 3DUI를 정리해보겠습니다.

 애초에 NGUI 3D UI를 만들었으면 바로 확인이 가능한데 사실 지금껏 작업했던 2D 베이트 UI에서 카메라의 인스펙터 설정 몇개만 수정하면 3D UI로 변경할 수 있습니다.

 먼저 NGUI - Create - Panel 을 선택해 패널 객체를 하나 만들고 아래와 같이 기존에 작업했던 객체들을 자식으로 붙여줍니다.



 다음으로 카메라 객체의 인스펙터 중 Projection을 Perspective로 바꿔서 3D 뷰로 설정해주고 Z 좌표와 Clipping Planes를 적절히 수정합니다.



 NGUI에 이미 포함된 샘플에는 PanWithMouse라는 컴포넌트를 추가하던데 이건 샘플 폴더에 추가되어 있는 컴포넌트라 일단 제외 했습니다. 추가하면 마우스 움직임에 따라 Panel 객체가 움직이긴 하네요. 결과는 아래와 같습니다.



 다음에는 마지막 튜토리얼로 NGUI 팝업 리스트 처리를 정리해보겠습니다.

참고

NGUI Tutorial Step 10: 3D

NGUI 3.x Tutorial Step9 - Input

이미지
NGUI 체크박스 처리 컴포넌트인 Toggle을 추가하고 이벤트 핸들링을 해봤습니다. 이번에는 키보드 입력을 받는 Input 처리를 정리해보겠습니다.

 Input이라고 빈 게임 객체를 만들고 하위 자식으로 라벨스프라이트를 만들어 적당히 설정합니다. 그리고 UITest 컴포넌트에는 아래와 같이 UIInput 변수와 이벤트 핸들링시 로그를 출력하는 함수를 추가합니다.


public class UITest : MonoBehaviour {
...
public UIInput inputTest;

        public void OnInputTest()
{
Debug.Log("OnInputTest " + inputTest.value);
}
}


 Input 게임 객체에 입력 처리를 위해 NGUI - Attach - Input Field Script를 추가합니다. 역시나 터치 이벤트 반응을 위해 Box Collider을 추가하고 UITest 컴포넌트도 추가합니다. 아래 그림과 같이 On Submit에 UITest를 바인드하고 Method로 OnInputTest를 선택합니다. UITest의 Input Test 에는 Input 객체를 바인드 시킵니다.



 이제 실행하면 인풋 필드에 아래와 같이 입력할 수 있습니다. 한글 입력을 하려면 라벨 튜토리얼에서 처리했던 것처럼 한글 폰트를 사용해서 Dynamic으로 해주면 됩니다.



 다음에는 NGUI 3D UI에 대해 정리해보겠습니다.

참고

NGUI Tutorial Step 9: Input

NGUI 3.x Tutorial Step8 - Toggle

이미지
NGUI 슬라이더를 추가하고 이벤트 핸들링을 해봤습니다. 이번에는 체크박스인 Toggle 처리를 해보겠습니다. 역시나 기존에 작업된 슬라이더는 삭제하고 기타 타이틀바등의 라벨도 튜토리얼8에 맞게 변경 후 진행합니다.

 먼저 Sprites라는 빈 게임 오브젝트를 만들고 지금까지 만들었던 각 R, G, B 스프라이트들을 Sprites에 드래그&드롭해서 자식으로 만듭니다. 역시나 Sprites 오브젝트를 토글하기 위한 Checkbox - RGB Sprites라는 빈 오브젝트를 만들고 자식들로 라벨과, Sliced스프라이트, 스프라이트를 적당히 만들어줍니다. 그러면 계층창은 아래와 같습니다.



 이전 튜토리얼에서 만들었던 UITest 컴포넌트에 아래와 같이 Checkbox - RGB Sprites에 반인드 될 UIToggle 변수를 추가하고 이벤트 핸들링 처리를 위해 함수를 하나 추가합니다.


public class UITest : MonoBehaviour {

public UIToggle testRGBSpritesToggle;

        public void OnRGBSpritesToglle()
{
Debug.Log("OnRGBSpritesToglle " + testRGBSpritesToggle.value);
}
}


 마지막으로 Cechkbox - RGB Sprites에 터치 충돌 처리를 위해 NGUI - Attach - Collider를 추가하고 마찬가지로 체크박스 처리를 위해 Toggle Script와 Toggled Objects, UITest를 추가해줍니다. Toggle Objects는 Add Component - NGUI - Interaction에 있습니다.

 UIToggled Objects의 Activate Size를 1로 하고 Element에 체크박스가 토글될 때 연동될 게임 오브젝트를 바인딩 해줍니다. 여기서는 제일 처음에 스프라이트 3개를 합친 Sprites 오브젝트를 드래그&드롭 해줬습니다.

 토글 이벤트 핸들링을 위해 UI…

NGUI 3.x Tutorial Step7 - Slider

이미지
NGUI 버튼을 추가하고 클릭 이벤트 핸들링을 해봤습니다. 이번에는 슬라이더 컨트롤을 추가해보겠습니다. 이전 버튼 튜토리얼에서 만들었던 버튼은 삭제하고 시작합니다.

 빈 게임오브젝트를 만들고 Slider - Horizontal이라고 이름을 지어줍니다. 그리고 이하 나오는 것들을 모두 자식으로 해줍니다.

 아래와 같이 슬라이더 컨트롤의 백그라운드로 사용할 UISlicedSprite - BG라는 NGUI SlicedSprite를 만듭니다.



 방금 만든 백그라운드 스프라이트를 복제해서 아래와 같이 포그라운드용으로 설정합니다.



 다음으로 슬라이더 컨트롤에 보여질 NGUI 라벨을 아래와 같이 만들어줍니다.



 슬라이드 컨트롤의 버튼을 만들기 위해 역시나 만들었던 SlicedSprite를 하나 복제해서 아래와 같이 작업해줍니다. 이때 버튼의 이벤트 처리를 위해 NGUI - Attach - Collider와 버튼의 색상 변경을 위해 Button Color 컴포넌트를 더 추가해줬습니다. Collider과 Button Color은 추가 안해줘도 슬라이더 작동에는 문제가 없습니다.



 마지막으로 슬라이더 오브젝트입니다. NGUI - Attach - Slider Script를 추가해주고 이벤트 처리를 위해 Box Collider를 추가해줍니다. Appearance부분에 위에서 만들었던 하위 자식 오브젝트를 각각 바인드 시켜줍니다.



 슬라이드 컨트롤의 Thumb값이 변경되는 콜백을 받기위해 UITest라는 C# 스크립트를 만들고 아래와 같이 OnValueChange 함수를 만들어줍니다.

public class UITest : MonoBehaviour {

UISlider testSlider;

public void OnValueChange()
{
Debug.Log("OnValueChange " + testSlider.value);
}

// Use this for initialization
void Start () {
testSlider = GetComponent<UISlider…

NGUI 3.x Tutorial Step6 - Button

이미지
NGUI 라벨과 다이나믹 폰트로 한글 출력까지 해봤습니다. 이번에는 버튼 추가를 해보겠습니다.

 빈 게임 오브젝트를 만들고 Button으로 이름을 지정합니다. 그리고 아래와 같이 Button 하위로 NGUI 라벨Sliced 스프라이트를 만들어줍니다.





 이제 버튼에 마우스를 가져갔을 때 색상등을 변경하기 위한 UIButton과 클릭 이벤트를 처리하는데 필요한 박스 충돌체를 추가해줘야합니다. 각각 NGUI - Attach - Collider과 Button Script를 추가하면 아래와 같습니다.



 이제 실행해서 마우스를 가져가면 버튼의 색이 변하고 클릭이 잘 됩니다. 그런데 저는 안되더군요. UI Root부터 그 하위 모든 UI 객체의 Layer가 모두 빈 이름의 레이어인데 반해 Button은 Default라서 문제였네요. 빈레이어를 선택할 수 없기 때문에 임시 방편으로 UI Root를 Default로 해준 후 Ctrl + Z를 눌러 Undo하시면 Button 오브젝트의 Layer도 빈 이름의 레이어로 됩니다.

 정식으로 한다면 아래와 같이 Layer - Add Layer해서 User Layer에 UI 등으로 일단 레이어를 하나 추가합니다.



 UI Root의 Layer를 방금 만든 레이어로 선택 후 Yes, change children을 선택 해 모두 적용합니다.



 마지막으로 UI 카메라의 Unnamed 로 되어있는 Culling Mask와 Event Mask를 역시나 방금 만든 UI 레이어로 설정해줍니다.



 이제 실행 후 버튼에 마우스를 가져가면 색상이 변하는 것을 확인 할 수 있습니다. 레이어라는게 있다는건 알고 있었는데 그냥 막 진행하다보니 이런 이슈가 나왔네요.



 이제 버튼이 클릭되었을 때 이벤트 핸들링 처리하는것을 정리해보겠습니다. 먼저 간단히 아래와 같이 ButtonTest라는 C# 스크립트를 만들어 OnClick 함수를 만듭니다.



 버튼 오브젝트에 ButtonTest 컴포넌트를 추가합니다.



 인스펙터에서 추가한 ButtonTest 컴포넌트를 UI…