보관물

Archive for the ‘Framework’ Category

java.sql.SQLException: Cannot convert value ‘0000-00-00 00:00:00’ from column X to TIMESTAMP

2월 25, 2016 댓글 남기기

Spring framework 환경에서 MySQL을 연동하여 개발 도중 다음과 같은 오류가 발생하였다.

java.sql.SQLException: Cannot convert value ‘0000-00-00 00:00:00’ from column X to TIMESTAMP

이는 MySQL의  column이 datetime인데 myBatis에서 mapping하려는 변수의 형태는 java.sql.Timestamp이기 때문에 발생하는 문제이다.
MySQL의 TIMESTAMP는 1970-01-01 00:00:01 부터가 시작인데 위의 경우 처럼 그 이전의 값을 넣으려 하기 때문에 위와 같은 Exception이 발생된 것이다.

이를 해결하기 위해서 가장 간단한 방법은 DB에 Zero Date(‘0000-00-00 00:00:00’)를 안쓰면 된다.
하지만 필요에 의해 Zero Date를 써야하는 경우가 발생하는데 이런 경우 다음과 같이 처리하면 해결 될 수 있다.

DB Connection URL에 다음 옵션을 추가한다.

jdbc:mysql://localhost/somedb?zeroDateTimeBehavior=convertToNull

카테고리:MySQL, Spring

Mac OS X에서 pip이용하여 Django 설치하기

1월 6, 2016 댓글 남기기

Django를 설치하는 방법은 크게 두 가지이다.

  • pip를 사용하는 방법
  • Git에서 내려받아 로컬에 복사하여 사용하는 방법

Django 설치는 이처럼 간단하다.

참고로 pip는 Python package의 설치를 도와주는 도구이다. 마치 node.js의 npm같은…

pip는 Python 2.7.9 이상 혹은 Python 3.4 이상의 version에서는 기본으로 포함되어있다.

만약 해당사항이 없는 버전인 경우 pip installing page를 참고하여 설치한다.

Django 설치와 관련된 자세한 내용은 Django download page를 참고한다.

카테고리:Django

[cocos2d] schedule사용시 일부 parameter의 out of scope현상

7월 21, 2011 댓글 남기기

Problem

schedule을 사용하여 일정간격으로 특정 fuction(testMethod)를 실행시키려는 도중
testMethod에서 일부 parameter를 정상적으로 참조하지 못하는 문제가 발생.

breakpoint를 찍어 보면 out of scope라고 알려줌.

관련 Source

Foo.h

@interface Foo : CCLayer {

 NSString *pBirdName;
XActionManager *pActionManager;

}
@end

Foo.m

#import “Foo.h”

@implementation Foo {

@synthesize pActionManager;

-(id) init {

…전략…
pBirdName = [NSString stringWithString:@”Peacock”];
pActionManager = [[XActionManager alloc] init];
…후략…

}

-(void) someFunction {

[self schedule:@selector(testMethod) interval:2.0f];

}

-(void) testMethod {

[self unschedule:_cmd];

…중략…
//pBirdName : out of scope
//pActionManager : 정상
[self anotherMethod:pBirdName actionManager:pActionManager];
…중략…

[self schedule:@selector(testMethod) interval:2.0f];

}

}

Cause

anotherMethod에서 pActionManager는 정상적으로 사용이 가능한데 pBirdName은 out of scope가 발생되고 있다.
그래서 의도한 결과가 나오질 않고 있는 상황.
이것은 autorelease와 관련이 있다.
-(id) init 의 실행이 끝나는 순간 pBirdName은 autorelease처리가 되기 때문에 out of scope가 발생된다.
이를 해결하기 위해서는 pBirdName의 retainCount를 증가(eg. [pBirdName retain])시키거나 property를 사용하는 방법이 필요하다.

Solution

pBirdName을 property를 선언하고 self.pBirdName으로 접근하니 정상적으로 동작한다.

Foo.h 에 추가

@property (nonatomic, retain) NSString *pBirdName;

Foo.m에 추가

@synthesize pBirdName;

-(id) init의 pBirdName부분을 수정

self.pBirdName = [NSString stringWithString:@”Peacock”];

-(void) testMethod에서 anotherMethod호출 부분을 수정

[self anotherMethod:self.pBirdName actionManager:pActionManager];

-(void) dealloc에 pBirdName추가

self.pBirdName = nil;

카테고리:cocos2d 태그:, ,

Sprite artifacts problem

2월 26, 2011 댓글 남기기

Problem

CCSprite 등의 class로 이미지를 사용할때 artifacts가 발생하는 현상
이미지를 자세히 살펴보면 대략 가로,세로 1px정도가 늘어나 보인다.

Cause

cocos2d에서 이미지를 사용시 이미지 크기의 99%만큼의 texture를 로딩하고
이를 사용시에 이미지 크기 100%에 맞춰 보여주게되므로 대략 1%정도 늘어나 보여지게 된다.
예를 들어 가로,세로 100px의 이미지가 있다면 실제로는 가로,세로 99px만 로딩하고
이를 화면에 보여줄때는 99px의 이미지를 100px크기로 보여주려하기때문에 이미지가 가로,세로 1px씩 늘어나게되어 artifact가 발생하게 된다.

Solution

CCDirector의 Projection을 2D로 설정하여 해결

[[CCDirector sharedDirector] setProjection:CCDirectorProjection2D];

단, 3D 효과를 사용하는 경우 director의 설정을 3D로 바꾸고 원하는 3D효과를 사용한 후 다시 2D로 설정해야하는 방안을 고려해야한다.

Other Suggestion

# 99%만 사용하는 문제가 있었으니 이를 보정하는 방안을 사용 [1]

원인이 100%에서 99%만 로딩하여 100%크기로 늘리기때문에 발생하는 것이었으므로
이를 보정하기 위해 1%를 줄인다.
(1%라는 표현을 사용했지만 사실 약 1px정도가 늘어난 것임 그러므로 이를 보정하기 위해 1px만큼을 줄여서 사용하는 방안으로 해결)

someSprite.scaleX = (someSprite.contentSize.width -1) / (someSprite.contentSize.width);

someSprite.scaleY = (someSprite.contentSize.height -1) / (someSprite.contentSize.height);

but 이미지는 깨지지 않고 정상적으로 보이지만 이미지 크기가 전체적으로 약간 줄어들었으므로 디자이너가 의도한 이미지 배치가 나오지 않게된다.
또한 원래부터 99%의 texture만 로딩하므로 1%에 해당하는 이미지가 잘려보이게 된다.

# 99%만 사용하는 문제가 있었으니 이를 보정하는 방안을 사용 [2]

cocos2d forum에서 같은 issue가 제기되었다가 일명 CJ’s patch로 불리는 보정방안이 0.99.5 버젼에 적용되었는데 다음과 같이 설정을 변경하면 된다.

ccConfig.h

#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1

해당 부분의 주석에 원인에 해당하는 내용도 언급이 되어있다.

/** @def CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL

If enabled, the texture coordinates will be calculated by using this formula:

– texCoord.left = (rect.origin.x*2+1) / (texture.wide*2);
– texCoord.right = texCoord.left + (rect.size.width*2-2)/(texture.wide*2);

The same for bottom and top.

This formula prevents artifacts by using 99% of the texture.
The “correct” way to prevent artifacts is by using the spritesheet-artifact-fixer.py or a similar tool.

Affected nodes:

– CCSprite / CCSpriteBatchNode and subclasses: CCBitmapFontAtlas, CCTMXTiledMap
– CCLabelAtlas
– CCQuadParticleSystem
– CCTileMap

To enabled set it to 1. Disabled by default.

@since v0.99.5

*/

forum이나 blog등에는 이 방법으로 해결되었다는 사람이 많았는데 이상하게도 난 해결이 되지 않았다.
disabled하나 enabled하나 sprite artifacts는 해결되지 않았다.

# SpriteSheet생성시 Border, Spacing, Extude 설정을 사용

TexturePacker나 Zwoptex와 같은 tool을 사용하여 SpriteSheet를 생성할 때 Border, Spacing, Extude 등의 설정을 사용해 봤으나 해결되지 않았다.

# Anti-Aliasing 사용

[someSprite.texture setAliasTexParameters];

but 안티알리아싱을 사용하게되면 문제가 해결되는 것 처럼 보여지게 되지만 이미지가 뿌옇게보이는 현상이 있어 선명한 화면이 구성되지 않는다.

관련 자료

http://www.cocos2d-iphone.org/forum/topic/8267
http://www.cocos2d-iphone.org/forum/topic/5760
http://www.cocos2d-iphone.org/forum/topic/12542
http://www.cocos2d-iphone.org/forum/topic/10654