wget으로 cookie가 필요한 다운로드 콘솔에서 하기

쿠키가 필요한 다운로드 콘솔에서 하기

xcode 3.2.5를 다운로드 하려다가

거대한 용량 3.5G와… 지긋지긋한 속도때문에;; 당췌 다운로드가 되질 않았다.

속도가 나올때는 괜찮았는데 느려서 그런지 몇시간씩 다운로드 걸고 있으면 에러가 나있기도 하고

wget 을 쓸 순 없을까.. 하는 생각에 찾아보니

cookie를 이용한 방법을 찾았다. ( http://omegadelta.net/2010/11/24/downloading-ios-iphone-sdks-on-bad-connections/ )

firefox에서 Cookie Exporter라는 add-on을 설치하면 현재 브라우저의 쿠키를 파일로 저장해준다.

아래와 같이 하면 쿠키파일을 이용해서 로그인 상태로 받을 수 있다.

 wget --server-response --continue --no-check-certificate --load-cookies=cookies.txt [다운로드경로]

nohup등을 이용하면 더욱 편리하게 받을 수 있다.

이렇게 하면

[OAuthConsumer] OADataFetcher memory leak

OADataFetcher has memory leak.

it’s Issue 159 of OAuthConsumer project.

That, however, is not modified yet.

change code

- (void)fetchDataWithRequest:(OAMutableURLRequest *)aRequest 
					delegate:(id)aDelegate 
		   didFinishSelector:(SEL)finishSelector 
			 didFailSelector:(SEL)failSelector 
{
    request = aRequest;
    delegate = aDelegate;
    didFinishSelector = finishSelector;
    didFailSelector = failSelector;
    
    [request prepare];
    
    responseData = [NSURLConnection sendSynchronousRequest:request
                                         returningResponse:&response
                                                     error:&error];
	
    if (response == nil || responseData == nil || error != nil) {
        OAServiceTicket *ticket= [[[OAServiceTicket alloc] initWithRequest:request
                                                                 response:response
                                                               didSucceed:NO] autorelease]; // * add autorelease 
        [delegate performSelector:didFailSelector
                       withObject:ticket
                       withObject:error];
    } else {
        OAServiceTicket *ticket = [[[OAServiceTicket alloc] initWithRequest:request
                                                                  response:response
                                                                didSucceed:[(NSHTTPURLResponse *)response statusCode] < 400] autorelease]; // * add autorelease
        [delegate performSelector:didFinishSelector
                       withObject:ticket
                       withObject:responseData];
    }   
}

[UIImage+Rotation] Rotation UIImage with custom angle

어젯밤 UIImage Rotation 을 구글링하다
마땅히 찾지 못해서;;

일단 급하게 만들어봄..

Rotation하면 크기가 커지기 마련인데;;

그냥 UIImageView transform하듯이 하려면

중간에 주석을 제거하면 된다.

/**
 * UIImage + Rotation
 * angle in radian
 * @hytgbn
 */
- (UIImage *)rotateImage:(UIImage *)image angle:(CGFloat)rad{
	
	CGImageRef imageRef = [image CGImage];
	CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
	CGColorSpaceRef colorSpaceInfo = CGColorSpaceCreateDeviceRGB();
	
	if (alphaInfo == kCGImageAlphaNone)
		alphaInfo = kCGImageAlphaNoneSkipLast;
	
// original image size
	CGFloat width, height;
	
	width = [image size].width;
	height = [image size].height;
	
// this kind of a dull stuff, looking for better looking-good code..

	CGFloat newWidthMax = max( 0.f*cos(rad)+0.f*sin(rad) ,
							  max( width*cos(rad)+height*sin(rad) ,
								  max( 0.f*cos(rad)+height*sin(rad) ,
									  width*cos(rad)+0.f*sin(rad) )));
	CGFloat newWidthMin = min( 0.f*cos(rad)+0.f*sin(rad) ,
							  min( width*cos(rad)+height*sin(rad) ,
								  min( 0.f*cos(rad)+height*sin(rad) ,
									  width*cos(rad)+0.f*sin(rad) )));
	CGFloat newHeightMax = max( -0.f*sin(rad)+0.f*cos(rad) ,
							   max( -width*sin(rad)+height*cos(rad) ,
								   max( -0.f*sin(rad)+height*cos(rad) ,
									   -width*sin(rad)+0.f*cos(rad) )));
	CGFloat newHeightMin = min( -0.f*sin(rad)+0.f*cos(rad) ,
							   min( -width*sin(rad)+height*cos(rad) ,
								   min( -0.f*sin(rad)+height*cos(rad) ,
									   -width*sin(rad)+0.f*cos(rad) )));
	
	CGFloat newWidth = newWidthMax - newWidthMin;
	CGFloat newHeight = newHeightMax - newHeightMin;
// and if you want to rotate into same size, uncomment 2 lines
//    newWidth = width;
//    newHeight = height;
	
	DLog(@"original : %f, %f", width, height);
	DLog(@"new : %f, %f", newWidth, newHeight);
	
	CGContextRef bitmap;
	
	bitmap = CGBitmapContextCreate(NULL, (int)newWidth, (int)newHeight, 
								   CGImageGetBitsPerComponent(imageRef),0, colorSpaceInfo, alphaInfo);
	
	CGContextTranslateCTM (bitmap, newWidth/2.f,newHeight/2.f);
	CGContextRotateCTM (bitmap, rad);		
	CGContextTranslateCTM (bitmap, -width/2.f,-height/2.f);
	
	CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
	CGImageRef ref = CGBitmapContextCreateImage(bitmap);
	UIImage *result = [UIImage imageWithCGImage:ref];
	
	CGContextRelease(bitmap);
	CGImageRelease(ref);
	
	return result;
	
}

[iphone] 아이폰 어플 주유정보

appstore 에 두번째로 올라간 어플.

인근지역의 주유소 위치와 가격정보를 보여주는 앱이다.

주유소별, 휘발유,경유,LPG 가격별로 정렬이 가능하며

자주가는 지역 (회사, 집, 시집, 친정 등)을 등록해서 출발하기 전에 해당 지역의 주유소 가격을
미리 판단하고 다닐 수 있다.
결국 원하는 주유소에서 조금 저렴한 가격으로 주유가 가능하다.

 iphone frame으로 만든 첫 어플이어서 삽질도 많이 했다.
(첫 어플은 3d engine만들어서 작업한 것이라…)

주유소 정보와 구글맵과의 좌표계가 달라서 맞추는데 삽질..

역시 회사 다니면서 뭔가 만드는건 엄청난 시간과 정신의 피로가..!!

문의사항 및 요구사항
트위터의 @hytgbn 으로 연락해주세요

History

[Ver 1.01] – 2010.01.08
  – 등록시 reverse-geocoding 에 실패할 경우 발생하던 오류 수정 (@seaminds 님 제보)
  – bounce 기능 추가 (@8CK 요구)

[Ver 1.1] – 2010.01.09
  – TM128 좌표계에서 WGS84로 옮기는 과정에 좌표 오차 수정
  ( 릴리즈가 8시간도 안되서 통과.. 앱스토어의 직원이 대폭 늘었나? -_-)

[iphone] 아이폰 어플 주유정보

appstore 에 두번째로 올라간 어플.

인근지역의 주유소 위치와 가격정보를 보여주는 앱이다.

주유소별, 휘발유,경유,LPG 가격별로 정렬이 가능하며

자주가는 지역 (회사, 집, 시집, 친정 등)을 등록해서 출발하기 전에 해당 지역의 주유소 가격을
미리 판단하고 다닐 수 있다.
결국 원하는 주유소에서 조금 저렴한 가격으로 주유가 가능하다.

 iphone frame으로 만든 첫 어플이어서 삽질도 많이 했다.
(첫 어플은 3d engine만들어서 작업한 것이라…)

주유소 정보와 구글맵과의 좌표계가 달라서 맞추는데 삽질..

역시 회사 다니면서 뭔가 만드는건 엄청난 시간과 정신의 피로가..!!

문의사항 및 요구사항
트위터의 @hytgbn 으로 연락해주세요

History

[Ver 1.01] – 2010.01.08
  – 등록시 reverse-geocoding 에 실패할 경우 발생하던 오류 수정 (@seaminds 님 제보)
  – bounce 기능 추가 (@8CK 요구)

[Ver 1.1] – 2010.01.09
  – TM128 좌표계에서 WGS84로 옮기는 과정에 좌표 오차 수정
  ( 릴리즈가 8시간도 안되서 통과.. 앱스토어의 직원이 대폭 늘었나? -_-)

[SyntaxHighlighter] Syntax Highlighter 상세 설정

Syntax Highlighter 티스토리 설치 (호스팅모드) 에서 설치한 Syntax Highlighter를

더욱 잘 써보자 +_+
Configuration

Name Value Description
bloggerMode false blogger.com 에서 사용중이라면 
true로 설정할 것
clipboardSwf null clipboard로 사용할 url을 적는다. 호스팅 모드인 경우
http://alexgorbatchev.com/pub/sh/ current/scripts/clipboard.swf
를 입력.
해당 값이 없으면 clipboard 아이콘은 보이지 않음
strings Object 각종 메시지를 재정의할 수 있다.
자세한 설정을 참조 +_+
stripBrs false br 태그 무시 여부 결정
티스토리는 EDIT 모드에서 HTML로 넘어갈 때 <br />이 붙기 때문에 true로 설정해주는 것이 좋다.
toolbarItemWidth 16 툴바 아이템 가로 크기
toolbarItemHeight 16 툴바 아이템 세로 크기
tagName "pre" 다른 태그를 사용하고 싶다면 설정.

위의 설정을 Syntax highlighter 로드하는 js 안에 입력하여 사용한다.

SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'scripts/clipboard.swf';
...
SyntaxHighlighter.all();


Default
각종 기본 설정을 재정의할 수 있다.

Name Value Description
auto-links true url 등이 있을때 자동으로 링크 걸어주는지 여부
class-name '' custom class 사용시 설정
collapse false collapse로 사용할 것인가? 
view source등을 클릭해야 소스가 보이도록..
first-line 1 첫 라인의 라인넘버
gutter true 라인넘버 보이도록?
highlight null 라인별로 강조하고 싶은 경우
[1, 2, 3] 또는 해당 라인넘버
html-script false 스크립트(php, jsp 등)에 포함된 HTML/XML을 하이라이트 할 것인가 여부,
true로 설정하면 반드시 shBrushXml.js를 로드하여야 한다.
light false toolbar + gutter 를 한 옵션으로 처리할 때 사용.
smart-tabs true 스마트 탭 사용 여부
tab-size 4 탭 크기.
toolbar true 툴바 켜고 끄기
wrap-lines true 줄바꿈 할 것인지 설정

– 기본 설정은 default에 정의 하여 아래와 같이사용할 수 있으며

SyntaxHighlighter.defaults['gutter'] = false;
SyntaxHighlighter.defaults['smart-tabs'] = false;
...
SyntaxHighlighter.all();
– 해당 스크립트별로 설정은 아래와 같이 사용한다.





brush 종류

Brush name Brush aliases File name
ActionScript3 as3, actionscript3 shBrushAS3.js
Bash/shell bash, shell shBrushBash.js
C# c-sharp, csharp shBrushCSharp.js
C++ cpp, c shBrushCpp.js
CSS css shBrushCss.js
Delphi delphi, pas, pascal shBrushDelphi.js
Diff diff, patch shBrushDiff.js
Groovy groovy shBrushGroovy.js
JavaScript js, jscript, javascript shBrushJScript.js
Java java shBrushJava.js
JavaFX jfx, javafx shBrushJavaFX.js
Perl perl, pl shBrushPerl.js
PHP php shBrushPhp.js
Plain Text plain, text shBrushPlain.js
PowerShell ps, powershell shBrushPowerShell.js
Python py, python shBrushPython.js
Ruby rails, ror, ruby shBrushRuby.js
Scala scala shBrushScala.js
SQL sql shBrushSql.js
Visual Basic vb, vbnet shBrushVb.js
XML xml, xhtml, xslt, html, xhtml shBrushXml.js


[air] HTML-base air에서 drag drop event.

HTML-BASE air
(prototype / scriptaculous 사용)


air의 드래그&드롭은 아래와 같은 이벤트를 가진다.

드래그 대상 객체

Event

Description

dragstart

드래그가 시작될때 발생

drag

드래그중 마우스 위치가 이동할때마다 발생

dragend

드래그 끝날때 발생

드롭 대상 객체

Event

Description

dragenter

드래그 객체가 드롭 객체에 진입시 발생

dragover

드래그 객체가 드롭 객체 위에서 움직일때 발생

dragleave

드래그 객체가 드롭 객체를 벗어날 때 발생

drop

드롭시 발생

아래와 같은 두개의 객체가 있다고 해보자

<div id="draggable" style="-webkit-user-drag:element;">DRAGGABLE</div>
<br />
<div id="droppable">DROPPABLE</div>
<br />

위의 -webkit-user-drag:element;    을 적용함으로 이미 객체는 드래그가 되기 시작한다.

드래그&드롭 이벤트를 시작해보자

드래그 객체 이벤트 추가하기
1. dragstart
 – 드래그가 시작됨을 알리며, 드래그할 내용이 무엇인지 등을 결정한다.

$('draggable').addEventListener('dragstart', function(e) {
    air.trace("Drag Started");
    e.dataTransfer.effectAllowed = "copyMove";
    e.dataTransfer.setData("text/plain", "DragData");
});

effectAllowed 는 어떤 드롭 대상 객체에 갈 수 있는지를 결정한다.

[#M_effect 자세히 |접기|

String value

Description

“none”

No drag operations are allowed.

“copy”

The data will be copied to the destination,
leaving the original in place.

“link”

The data will be shared with the drop destination
using a link back to the original.

“move”

The data will be copied to the destination
and removed from the original location.

“copyLink”

The data can be copied or linked.

“copyMove”

The data can be copied or moved.

“linkMove”

The data can be linked or moved.

“all”

The data can be copied, moved, or linked. All is
the default effect when you prevent the default behavior.

_M#]
setData는 드래그 되는 데이터를 결정할 수 있다.
[#M_setData mime type|접기|

Data format

MIME type

Text

“text/plain”

HTML

“text/html”

URL

“text/uri-list”

Bitmap

“image/x-vnd.adobe.air.bitmap”

File list

“application/x-vnd.adobe.air.file-list”

위 5개의 타입별로 각각 다른 데이터를 동시에 저장해서 드래그 될 수 있다.
_M#]

drag / dragend 에서는 각각 필요한 작업을 수행한다.
보통 로직상 필요한 일만 수행하면 된다.

2. 드롭 대상 객체 이벤트 추가하기
 – dragenter
 – dragover
   enter / over 의 가장 중요한 역할은 드롭이 가능한지 여부를 알려주는 것

$('droppable').addEventListener('dragenter', function(e) {
    air.trace("Drag Enter");
    e.dataTransfer.dropEffect='copy'; // 이부분이 위의 effectAllowed 와 일치해야한다.
    e.preventDefault(); // 이벤트 진행을 막음으로 드롭이 가능한지를 결정
});
$('droppable').addEventListener('dragover', function(e) {
    air.trace("Drag Over");
    e.dataTransfer.dropEffect='copy'; // 이부분이 위의 effectAllowed 와 일치해야한다.
    e.preventDefault(); // 이벤트 진행을 막음으로 드롭이 가능한지를 결정
});

 – drop

$('droppable').addEventListener('drop', function(e) {
    air.trace("DROP :: " + e.dataTransfer.getData("text/plain");
});

 – dragleave
   주로 화면 상태 변경등의 로직만 수행하면 된다.

위와 같은 단계로 드래그&드롭을 구현

[air] html-base air 에서 윈도우 위치 정하기 / 화면이동하기

HTML-BASE air
(prototype / script.aculo.us 사용)

윈도우 위치 정하기

// 아래 샘플은 윈도우를 화면 한가운데 위치시키는 샘플
// window size , position
var winWidth = window.nativeWindow.width; // 현재 윈도우 크기 구하기
var winHeight = window.nativeWindow.height;
 
var systemWidth = air.Capabilities.screenResolutionX; // 화면 해상도
var systemHeight = air.Capabilities.screenResolutionY;

window.nativeWindow.x = (systemWidth - winWidth)/2; // 윈도우 x, y 지정하기
window.nativeWindow.y = (systemHeight - winHeight)/2;

div 드래그시 윈도우 위치 움직이기 이벤트 추가하기

// Window move
Event.observe('mainMenu', 'mousedown', function(event) {
    air.trace("start move window");
    window.nativeWindow.startMove();
});

[air] mxml 에서 로컬 html 파일 열기

Aptana 에서 html-base air 작업을 했는데,
같이 작업하는 분이 Flash Builder로 옮겨달라고 하셔서..

간단히 작업..

작업 후 파일 수정 하면 가끔 하얀화면이 뜨는 경우가 있었는데;

project – clean 후 작업하면 잘 됨.. ( 빌드과정의 문제인듯.. )

[SyntaxHighlighter] Syntax Highlighter 티스토리 설치 (호스팅모드)

Syntax Highlighter 2.0

블로그를 하는 큰 이유중에 하나는 개발관련 정리 및 기록이고,
그러다 보면 필수적으로 소스를 입력해야 한다.

소스라는 것의 특성상, (또는 적응한 나의 눈은..) highlight가 제대로 되지 않으면
필연적으로 가독성이 떨어지기 마련이고, 전달 또한 제대로 되지 않기 마련이다.

어찌할까.. 고민하던 중에 tistory에는 자바스크립트를 올리고 사용할 수 있는, 기능이 있다는..
것을 발견한지 몇일 -_-;;

그리고 찾은 것은 Syntax Highlighter 2.0

티스토리에 설치하는 방법이다.

해당 라이브러리는 hosting을 제공한다.
prototypejsscriptaculous, jquery 등 유명한 라이브러리는 구글에서도 버전별 호스팅
제공하고있는데 이런 점의 장점은
같은 js를 사용하는 사이트가 많으면 사용자는 A사이트 접속 후 B사이트에 방문해서도
같은 주소의 js를 보고 캐쉬된 js를 사용할 수 있으므로 대역폭도 절약되고
처음 방문하는 사이트의 로딩속도도 향상될 수 있는 그런 장점이 있다.

단점은, 호스팅 서버가 죽는 경우 제대로 표시되지 않을 수 있다는 점.

이하 설치방법.

1. 사용할 버전 및 테마를 결정한다.
   1. 쇼핑을 하는 즐거운 마음으로 theme를 구경하고 선택한다.
      (emac theme로 결정 😉 해당 테마 화면에 있는 css 주소를 확인.
      <link type=”text/css” rel=”Stylesheet” href=”/styles/shThemeEmacs.css”/>
   2. 사용할 버전을 리스트에서 선택한다.
       최신버전을 향하는 current 결정

2. 티스토리 스킨 편집
   1. 관리자 모드로 들어가서 스킨 -> HTML/CSS 편집으로 이동.
      – 스타일 시트 부분에 shCore.css 와 shThemeEmacs.css 추가


      – <title>과 </head> 사이에 아래 스크립트 포함 및 실행 구문을 넣어준다.

이것으로 완료!

글을 쓸때 EDIT 모드에서
<pre> 태그나 <script>를 이용해서 작성할 수 있다.

1. pre tag 사용

2. script tag 사용 (CDATA 사용에 주의)

– js를 사용할 수 있으니 상당히 많은 짓(?)을 할 수 있을듯.. 음하하;;