-- TO_DATE : 문자열을 받아서 날짜타입으로 변환
-- TO_CHAR : 날짜타입을 문자열로 변환

-- 1.  시스템시간을 이용해서 문자열을 반환한다.
SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHHmmss') as curDate FROM dual

-- 2. 문자열을 특정 포맷에 맞게 출력한다.
--    문자열을 DATE로 변환후에 다시 포맷에 맞게 문자열로 변환
SELECT TO_CHAR(TO_DATE('201111031452','YYYYMMDDHH24MISS'),'YYYY.MM.DD') FROM DUAL





'DB / NoSQL > Oracle / Toad' 카테고리의 다른 글

[Oracle] DECODE 함수  (0) 2011.11.01
[Oracle] CEIL, FLOOR 함수  (0) 2011.11.01
[Oracle] NVL 함수  (0) 2011.10.21
[Oracle] 테이블, 컬럼 조회  (0) 2011.10.10
[Oracle] oracle em emctl 기동안될때 조치  (0) 2011.04.26
posted by 뚱2

[Oracle] NVL 함수

DB / NoSQL/Oracle / Toad 2011. 10. 21. 13:46
출처 : http://pplane.net/ref/oracleREF/www.statwith.pe.kr/ORACLE/functions095.htm
-- expr1이 null이라면 expr2로 대치한다.
SELECT NVL([expr1],[expr2]) FROM dual



posted by 뚱2

Library와 Framework의 차이점

일반 2011. 10. 21. 10:48

출처 : 거꾸로 배우는 소프트웨어 개발

저는 처음 이부분이 매우 헷갈렸습니다. 지금은 어렴풋이 다른점을 느끼고 있었는데
'거꾸로 배우는 소프트웨어 개발'이라는 책을 읽으면서 정말 명확하게 이해되었습니다.

라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도성이 누구에게/어디에 있는가이다. 라이브러리는
라이브러리를 가져다가 사용하고 호출하는 측에 전적으로 주도성이 있다. 반면, 프레임워크는 그 틀안에 이미
제어 흐름에 대한 주도성이 내재한다. 프레임워크는 가져다가 사용한다기보다는 거기에 들어가서 사용한다는
느낌/관점이다.

개인적으로 더 이상 명확 할 수 없는 설명이라고 생각합니다.

posted by 뚱2

[jQuery] serialize()

JavaScript/jQuery 2011. 10. 17. 18:13
참고 : http://api.jquery.com/serialize/

폼객체의 엘리먼트들을 데이터 인코딩까지 해서 연결해주는 기능이다.
편한기능
posted by 뚱2
출처 : http://jqfundamentals.com/book/index.html#chapter-1
var myFunction = function() {
    console.log('hello');
};

var myObject = {
    foo : 'bar'
};

var myArray = [ 'a', 'b', 'c' ];

var myString = 'hello';

var myNumber = 3;

typeof myFunction;   // returns 'function'
typeof myObject;     // returns 'object'
typeof myArray;      // returns 'object' -- careful!
typeof myString;     // returns 'string';
typeof myNumber;     // returns 'number'

typeof null;         // returns 'object' -- careful!


if (myArray.push && myArray.slice && myArray.join) {
    // probably an array
    // (this is called "duck typing")
}

if (Object.prototype.toString.call(myArray) === '[object Array]') {
    // Definitely an array!
    // This is widely considered as the most robust way
    // to determine if a specific value is an Array.
}



posted by 뚱2

기존은 Ext.util.JSON이었는데 4.0으로 오면서 Ext.JSON으로 변경되었다.

이거때문에 한참을 삽질 했네 ㅡㅡ;

'JavaScript > ExtJS' 카테고리의 다른 글

[ExtJS] ExtJs Grid 즐겨찾기  (0) 2012.02.09
posted by 뚱2
iOS5 GM버전을 설치후 Personal Hotspot이 안나타나서 고생좀 했습니다.
재 설치를 해보기도 했는데 안되더군요.
구글링 해본 결과
네트워크 설정 재설정을 해주면 해결됩니다.

위치는 "설정 -> 일반 -> 재설정 -> 네트워크 설정 재설정" 입니다.
전 GM 버전인데요.

오늘 판올림한 일반 버전이랑 GM버전이랑 바이트 코드가 같다고 합니다.
그리니까 오늘 일반 버전에서도 동일한 문제가 발생할수 있습니다.


posted by 뚱2
-- 테이블명 조회
SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE'

-- 컬럼 조회
SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE
  FROM COLS
 WHERE TABLE_NAME = '테이블명'


-- 컬럼 찾기
SELECT * FROM COLS
WHERE 1=1
  AND TABLE_NAME  LIKE '%' || UPPER([테이블명]) || '%'
  AND COLUMN_NAME LIKE '%' || UPPER([컬럼명]) || '%';

-- 테이블 찾기
SELECT *
  FROM USER_OBJECTS
 WHERE 1 = 1
   AND OBJECT_TYPE = 'TABLE'
   AND OBJECT_NAME LIKE '%' || UPPER([테이블명]) || '%';  



posted by 뚱2


출처 : http://ilovejsp.blog.me/100129601931 

[workspace 위치]\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp[X]\[project명]


posted by 뚱2
이번에 iOS5 GM Seed를 다운 받았는데 설치하는 방법을 또 잊어버렸다. ㅡㅡ;

* 맥에서 ipsw 파일로 업데이트 방법
1. 최신 펌웨어 파일을 받는다 (보통 .dmg 파일이다.)
2. 원하는 위치에 파일을 푼다.
3. 버전에 맞는 iTune를 설치한다.
4. 백업을 한다.
5. ALT + Restore 버튼을 클릭한다. (Windows는 Shift + Restore)
6. 저장된 ipsw 파일을 선택한다.
7. 그다음은 시키는데로 한다. 
posted by 뚱2
출처 : https://github.com/leah/PullToRefresh

소스 분석하면서 직접 구현해 본것.
나중에 사용하기 위해서 저장

// viewcontroller.h
@interface ViewController : UIViewController <UITableViewDatasource, UITableViewDelegate>
{
    NSMutableArray *data;
    BOOL           bLoading;
    BOOL           bDragging;
    
    UIView *headerView;
    UIActivityIndicatorView *activity;
    UILabel *label;
    UIImageView *imageView;
    NSString *strBeginDragging;
    NSString *strEndDragging;
    NSString *strLoading;
}

@property (nonatomic, retain) NSMutableArray *data;
@property (nonatomic, assign, getter = isLoading ) BOOL bLoading;
@property (nonatomic, assign, getter = isDraggin ) BOOL bDragging;
@property (nonatomic, retain) UIActivityIndicatorView *activity;
@property (nonatomic, retain) UIView *headerView;
@property (nonatomic, retain) UILabel *label;
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) NSString *strBeginDragging;
@property (nonatomic, retain) NSString *strEndDragging;
@property (nonatomic, retain) NSString *strLoading;

- (void)createHeader;

@end
 
// viewcontroller.m
#define REFRESH_HEADER_HEIGHT 60.0f

@implementation ViewController

@synthesize data;
@synthesize bLoading, bDragging;
@synthesize activity, headerView;
@synthesize label;
@synthesize imageView;
@synthesize strBeginDragging, strEndDragging, strLoading;

#pragma mark - animation
- (void)refresh {
    // This is just a demo. Override this method with your custom reload action.
    // Don't forget to call stopLoading at the end.
    [self performSelector:@selector(stopLoading) withObject:nil afterDelay:2.0];
}

- (void)startLoading {
    self.bLoading = true;
    
    // Show the header
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    UITableView *tableView = (UITableView *)self.view;
    tableView.contentInset = UIEdgeInsetsMake(REFRESH_HEADER_HEIGHT, 0, 0, 0);
    
    label.text = strLoading;
    [activity startAnimating];
    
    
    [UIView commitAnimations];  
    
    // Refresh action!
    [self refresh];
}

- (void)stopLoading {
    self.bLoading = false;
    
    // Hide the header
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDidStopSelector:@selector(stopLoadingComplete:finished:context:)];
    UITableView *tableView = (UITableView *)self.view;
    tableView.contentInset = UIEdgeInsetsZero;
    //[refreshArrow layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);

    
    [self.activity stopAnimating];
    
    [UIView commitAnimations];
    

}

- (void)stopLoadingComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    // Reset the header
    label.text = strBeginDragging;
    label.text = strBeginDragging;
    [imageView layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);
}


#pragma mark - scroll events
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{
    if ( self.isLoading ) return;
    
    self.bDragging = true;

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{
    if ( self.isLoading ) 
    {
        //NSLog(@"isLoading : %f", scrollView.contentOffset.y );        
    }
    else if ( self.isDraggin && scrollView.contentOffset.y < 0 ) 
    {
        //NSLog(@"self.isDragging ; %f", scrollView.contentOffset.y ); 
        [UIView beginAnimations:nil context:NULL];
        if (scrollView.contentOffset.y < -REFRESH_HEADER_HEIGHT) {
            // User is scrolling above the header
            label.text = strEndDragging;
            [imageView layer].transform = CATransform3DMakeRotation(M_PI, 0, 0, 1);
        } else { // User is scrolling somewhere within the header
            label.text = strBeginDragging;
            [imageView layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);
        }
        [UIView commitAnimations];        
    }
    
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{  
    if ( self.isLoading ) return;    
    self.bDragging = false;
    
    NSLog(@"scrollView.contentOffset.y: %f <= %f", scrollView.contentOffset.y, -REFRESH_HEADER_HEIGHT);
    if (scrollView.contentOffset.y <= -REFRESH_HEADER_HEIGHT) {
        // Released above the header
        [self startLoading];
    } 
}

#pragma mark - dealloc
- (void)createHeader
{
    strBeginDragging = [[NSString alloc] initWithString:@"새글을 불러오시겠습니까?"];
    strEndDragging   = [[NSString alloc] initWithString:@"놓으면 새글을 불러옵니다."];
    strLoading       = [[NSString alloc] initWithString:@"로딩중입니다..."];
    
    
    // view
    headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0-REFRESH_HEADER_HEIGHT, 320, REFRESH_HEADER_HEIGHT)];
    
    // activityindicator
    activity = [[UIActivityIndicatorView alloc] init];
    activity.center = CGPointMake(320.f/2, REFRESH_HEADER_HEIGHT/2);
    activity.hidesWhenStopped = true;
    activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
    
    // label
    label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, REFRESH_HEADER_HEIGHT)];
    label.text = strBeginDragging;
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:12.0];
    label.textAlignment = UITextAlignmentCenter;
    
    // imageView
    UIImage *image = [UIImage imageNamed:@"arrow.png"];
    imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0
                                 , (REFRESH_HEADER_HEIGHT-image.size.height) /2
                                 , image.size.width
                                 , image.size.height);
    imageView.backgroundColor = [UIColor clearColor];
    
    [headerView addSubview:activity];
    [headerView addSubview:label];
    [headerView addSubview:imageView];
    
    [self.view addSubview:headerView];
}


- (void)dealloc
{
    [strLoading release];
    [strBeginDragging release];
    [strEndDragging release];
    [imageView release];
    [label release];
    [activity release];
    [headerView release];
    [data release];
    
    [super dealloc];
}

#pragma mark - table datasource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }
    
    cell.textLabel.text = [data objectAtIndex:indexPath.row];
    
    return cell;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [data count];
}

#pragma mark - memorywarning


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    self.data = [NSMutableArray arrayWithObjects:
                 @"Pull down to refresh", nil];
    
    [self createHeader];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
	[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
	[super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end

 
posted by 뚱2

노래 듣는걸 좋아하긴 하는데 듣기만 하니 나중에 노래 찾을려면 제목도 모르고 음정이랑
특정 소절만 기억나는 기억나네 ....
좋아 하는 곡을 하나 둘씩 업데이트 해야겠다.

* keane : everybody's changing
 * queen : i want to break free
* stratovarius : Forever 
* The Corrs :  What con I do 
* 조덕배 : 나의 옛날 이야기
* John Lenon : Love
* 이정현 : 한여름의 크리스마스
* Coldplay : Viva la vida 

posted by 뚱2

[MSSQL] CONVERT TYPE 0~200

DB / NoSQL/MSSQL 2011. 9. 28. 15:38

'DB / NoSQL > MSSQL' 카테고리의 다른 글

[MSSQL] 언어 타입 변경하기  (0) 2012.04.20
[MSSQL] SQL Server Management Studio 단축키  (0) 2012.04.04
[MSSQL] 문자열 자르기  (0) 2011.09.15
[MSSQL] Oracle과 비슷한 RowNum  (0) 2011.09.06
[MSSQL] Alter Table  (0) 2011.09.02
posted by 뚱2
참고 : http://vimeo.com/8718829

혼자 구현해보다가 몇가지 문제를 해결하지 못하고 성질버려서 구굴링한  결과 동영상으로 튜토리얼까지
만든 사이트를 찾았습니다.

위 사이트는 오른쪽, 왼쪽 말풍선 두개를 사용하는데 전 왼쪽용 말풍선을 도저히 구하지 못해서 결국
이미지를 반전시켰습니다. 

나중에 사용할 요량으로 우선 저장

//MainViewController.h
@interface MainViewController : UITableViewController
{
    NSMutableArray *arrSms;
}

@property (nonatomic, retain) NSMutableArray *arrSms;

- (void)initResource;

@end


//MainViewController.m 
#import "MainViewController.h"

@implementation MainViewController

@synthesize arrSms;

#pragma mark-
#pragma mark resource

- (void)dealloc
{
    [arrSms release];
    
    
    [super dealloc];
}

- (void)initResource
{
    // Custom initialization
    self.tableView.frame = [[UIScreen mainScreen] applicationFrame];

    
    arrSms = [[NSMutableArray alloc] initWithObjects:@"안녕하세요"
              , @"네 안녕이요"
              , @"이건 조금 긴 글 입니다. ^^"
              , @"이건 더 긴글 입니다. 하하하하 "
              , @"아이폰도 UI를 이쁘게 만들려면 결국 노가다가 많군요."
              , @"디자인에 잼병인 저로서는 정말 좌절을 느끼는 중입니다. 이 쉬운 이미지를 찾기 위해서 하루종일 뒤졌어요"
              , @"결국 반대이미지를 찾지 못해서 결국 프로그램에서 이미지 뒤집는 일까지 있어요 그냥 반대 이미지 사용하면 쉬운데...."
              , nil];    
}

#pragma mark-

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if ( self ) {
        [self initResource];
    }
    
    return self;
}

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        [self initResource];
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
 
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
//    self.tableView.backgroundColor = [UIColor colorWithRed:219.0/255.0 green:226.0/255.0 blue:237.0/255.0 alpha:1.0];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.arrSms         = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [arrSms count];
}

#define TAG_IMAGEVIEW   1
#define TAG_LABEL       2
#define TAG_MESSAGE     3

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    
    UIImageView *imageView = nil;
    UILabel *label = nil;
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        
        imageView = [[UIImageView alloc] init ];
        imageView.tag = TAG_IMAGEVIEW;
        label = [[UILabel alloc] init];
        label.tag = TAG_LABEL;
        label.backgroundColor = [UIColor clearColor];
        label.numberOfLines = 0;
        label.lineBreakMode = UILineBreakModeWordWrap;
        label.font = [UIFont systemFontOfSize:14.0];
        
        UIView *message = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height) ];
        message.tag = TAG_MESSAGE;
        
     
        [message addSubview:imageView];
        [message addSubview:label];
        
        message.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        
        
        [cell.contentView addSubview:message];
        
        
        [imageView release];
        [label release];
        [message release];
    }
    else 
    {
        imageView = (UIImageView *)[[cell.contentView viewWithTag:TAG_MESSAGE] viewWithTag:TAG_IMAGEVIEW];
        label     = (UILabel *)[[cell.contentView viewWithTag:TAG_MESSAGE] viewWithTag:TAG_LABEL];
    }
    
    // Configure the cell...
    
    NSString* text = [arrSms objectAtIndex:indexPath.row];
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:14.0] 
                   constrainedToSize:CGSizeMake(220.0f, 480.0f) 
                       lineBreakMode:UILineBreakModeWordWrap];
    
    UIImage *image = nil;
    if ( indexPath.row%2 == 0 ) {
        imageView.frame = CGRectMake(320.0f-(size.width+35.0f), 2.0f, size.width+35.0f, size.height+24.0f);
        imageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
        image = [[UIImage imageNamed:@"Balloon_1@2x.png"] stretchableImageWithLeftCapWidth:28.0f 
                                                                              topCapHeight:24.0f];
        
        label.frame = CGRectMake(307.0f-(size.width+5.0f), 10.0f, size.width+8.0f, size.height+5.0f);
        label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
    }
    else {
        imageView.frame = CGRectMake(0, 2.0f, size.width+35.0f, size.height+24.0f);
        imageView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
        UIImage *tempImage = [UIImage imageNamed:@"Balloon_2@2x.png"];
        UIImage *covertImage = [UIImage imageWithCGImage:(CGImageRef)tempImage.CGImage 
                                                   scale:1.0f 
                                             orientation:UIImageOrientationUpMirrored];
        image = [covertImage stretchableImageWithLeftCapWidth:28.0f 
                                                 topCapHeight:24.0f];
        
        label.frame = CGRectMake(25.0f,10.0f, size.width+5.0f, size.height);
        label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
    }
    imageView.image = image;
    label.text = text;
    
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* text = [arrSms objectAtIndex:indexPath.row];
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:14.0] 
                   constrainedToSize:CGSizeMake(220.0f, 480.0f) 
                       lineBreakMode:UILineBreakModeWordWrap];
    return size.height+28.0f;
}


#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
     */
}

@end


posted by 뚱2

hosts 파일 수정

Network 2011. 9. 22. 10:04
hosts 파일은 로컬 DNS라고 생각하시면 됩니다. DNS 서버가 활성화되기 이전에 사용하던 방식입니다.
hosts 파일에 아이피와 도메인네임을 등록해 놓으면 해당 도메인으로 접속이 가능해 집니다.
DNS는 반영시간이 약 하루정도 걸리며 테스트 용도로 사용하기에는 불편한 점이 있어
테스트 용도나 프로젝트시에 간편하게 사용할 수 있습니다.



* Windows 7 기준으로 입니다.

파일을 열때 권한이 없다고 할 때가 있습니다. Windows Vista 부터 보안이 강화되어서 그런것 같습니다.

그럴때는

속성창을 열고

해당유저에게 쓰기 권한을 주시면 됩니다.

 '#'은 주석입니다.

'Network' 카테고리의 다른 글

[KT EGG] 스트롱에그 KWD-B2600  (0) 2012.09.20
[Ping] KT 핑 테스트  (0) 2012.06.30
[Util] Ping Test Easy  (0) 2012.04.06
아이피 위치 확인 하는 방법  (0) 2012.02.07
유용한 NETSTAT 명령어  (0) 2008.07.14
posted by 뚱2
하나의 App은 Xcode의 하나의 프로젝트에 맵핑이 된다고 할 수 있습니다.
그런데 보통 프로그램을 만드는 프로젝트(*1)는 하나의 프로그램으로 끝날수도 있지만 규모가 커지면 여러가지 프로그램이
묶여서 하나의 프로젝트로 됩니다.
이럴때 관리를 위해서 논리적으로 묶어줄 필요가 있는데 
XCode에서는 Workspace, Visual Studio에서는 solution, Eclipse에서는 Workspace로 묶어 줄수 있습니다.

새로운 워크스페이스를 생성합니다.

워크스페이스 이름과 저장할 위치를 지정합니다.


워크스페이스를 생성하면 프로젝트가 없는 빈 워크스페이스가 생성됩니다.


워크스페이스에 새로운 프로젝트를 생성 할 수도 있고 기존 프로젝트를 추가 할 수도 있습니다.


기존 프로젝트를 추가한 모습니다.


결국 워크스페이스는 여러개의 단위프로젝트를 논리적으로 묶어주는 역활을 합니다.
빈 워크스페이스를 만들면 


XXX.xcworkspace가 만들어 지는데 이 파일을 열어보면 아래와 같이 폴더안에 파일이 있고 XML로 정보를 가지고 있는걸
알수 있습니다.


개발에 필요한 자체 라이브러리나 유틸등을 워크스페이스로 묶어주면 좀더 편하고 쉽게 개발 할 수 있습니다.



*1) 여기서 말하는 프로젝트는 업무 즉 개발 프로젝트를 말합니다.

 
posted by 뚱2
제가 정리 해볼까 하다가 너무 정리가 잘된 외국 블로그가 있어서 링크합니다.

출처 : http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/ 
posted by 뚱2

[MSSQL] 문자열 자르기

DB / NoSQL/MSSQL 2011. 9. 15. 09:43
MS의 문자열 함수명은 비주얼베이직의 이름과 비슷한것 같다.

-- 문자열 자르기 함수
-- 문자열 인덱스는 1부터 시작이다.
-- 예 : ABCDEF 에서 AB를 추출할려면 SUBSTRING('ABCDEF', 1, 2)
SUBSTRING(문자열, 시작인덱스, 자를문자열개수)
 

'DB / NoSQL > MSSQL' 카테고리의 다른 글

[MSSQL] 언어 타입 변경하기  (0) 2012.04.20
[MSSQL] SQL Server Management Studio 단축키  (0) 2012.04.04
[MSSQL] CONVERT TYPE 0~200  (0) 2011.09.28
[MSSQL] Oracle과 비슷한 RowNum  (0) 2011.09.06
[MSSQL] Alter Table  (0) 2011.09.02
posted by 뚱2

Context Switching (문맥전환)

일반 2011. 9. 14. 13:26
사전의 뜻은 아래와 같다.

 
문맥전환이라...

이 말을 들어본건 학교 수업시간의 운영체제론을 배울때 였다.
영어 발음 그대로 사용하는데 도통이해가 가지 않았다.
요즘 컴퓨터(Intel 계열)는 멀티프로세싱과 멀티스레딩을 동시에 지원한다.
어떻게 CPU는 하나 밖에 없는데(물론 요즘은 멀티코어이지만 설명을 위해서 1개라고 가정하자) 동시에 여러프로그램을
사용 할 수 있을까
결론 부터 이야기 하자면 동시에 여러프로그램이 돌아가는것이 아니라 가는것처럼 보이는 것이다.
CPU의 타임슬라이스를 통해서 프로그램을 짧게 짧게 돌려가며 실행하는것이다.
그럼 1개의 프로그램을 주주창잘 돌리고 다음 프로그램을 돌리는게 프로그램 전환시간도 줄고 더 낫지 않을까?
물론 단순하게 생각하면 그 말이 맞다.
그리나 여러사람들이 관찰한 결과 컴퓨터의 대부분은 io(Input, Output)으로 시간을 보낸다고 한다. 결국 놀면서 보낸다.
실제로 CPU 작업관리자를 띄워도 대부분 시간 idle상태로 있는것을 알수 있다.
결국 이 노는 시간을 이용해서 여러프로그램을 돌리는게 더 낫다는 것이다
말이 이상하게 돌아갔는데 결국  Context Switching은 프로세싱에서 프로세싱으로 스레드에서 스레드로 전환할때
기존의 작업상태를 저장하고 새로운 작업상태를 읽는 작업을 말한다.
그런데 이 작업이 CPU부하가 꽤 걸리는 작업이라 이것도 많이 실행하면 배보다 배꼽이 큰상황(노는 IO작업을 이용하는
비용보다 문맥전환 비용이 더큰상황)이 발생해서 멀티프로세싱이나 멀티스레드를 적게하는 방향으로 발전하고 있다.
 

ps. 제가 아는 짧은 지식을 올린것으로 정확하지 않을 수 있습니다. 혹 정정해야 할 내용이 있다면 리플 부탁드립니다. 
posted by 뚱2
아이폰 Static Library를 사용하려고 찾다가 읽어보니 프로젝트 개발시

도움이 될것 같아 링크 걸어둡니다.

출처 : http://blog.jidolstar.com/749 
posted by 뚱2

Product -> Edit scheme  에서 info의 Build Configuration에서 변경해 주면된다.

단축키는 "Command+<" 이다. 
posted by 뚱2
프로그램을 개발하다보면은 중복되는 코드들이 생기게 됩니다.
그럴때 가장 쉽게 하는 방법은 기존 파일을 복사하는 방법입니다.
거기에 한단계 나아가면 자신만의 라이브러리를 만들게 됩니다.
iOS상에서 static library는 만들어 지는데 dynamic library를 어떻게 만들지 몰라서
찾아보니 보안상의 이유로 안된다는 군요.

출처 :http://stackoverflow.com/questions/4733847/can-create-dynamic-library-for-ios 
 
posted by 뚱2
출처 : ㅠㅠ 잊어버렸습니다.


인터넷에서 유니코드 한글 위치와 초성 중성 종성을 찾는 알고리즘을 찾았는데 브라우져를 꺼버렸네요 ㅠㅠ
암튼 위의 이미지를 참조해서 아이폰에서 사용할 요량으로 만들어 봤습니다.
알고리즘에 오타 문제가 있습니다.
초성부분에 int((strCode - 0xAC00) / 28 * 21) 이라고 했는데 "28*21" 부분을 "(28*21)" 괄호로 묶어줘야 합니다.
//ChosungUtil.h
#define HANGUL_START_CODE   0xAC00
#define HANGUL_END_CODE     0xD79F

@interface ChosungUtil : NSObject
{
    NSArray *chosung;
    NSArray *jungsung;
    NSArray *jongsung;
}

@property (nonatomic, retain) NSArray *chosung;
@property (nonatomic, retain) NSArray *jungsung;
@property (nonatomic, retain) NSArray *jongsung;

// 입력문자열를 초성과 비교해서 NSComparisonResult를 반환한다.
- (NSComparisonResult) compare:(NSString *)source withChoungString:(NSString *)search;
// 입력문자열을 초성으로 변환시킨다.
- (NSString*) stringChosung:(NSString *) source; 

@end

//ChosungUtil.m
#import "ChosungUtil.h"

@implementation ChosungUtil

@synthesize chosung, jungsung, jongsung;


- (NSComparisonResult) compare:(NSString *)source withChoungString:(NSString *)search
{
    return [[self stringChosung:source] compare:search];
}

- (NSString*) stringChosung:(NSString *) source
{
    NSMutableString *result = [NSMutableString string];
    
    for (NSUInteger i = 0; i < [source length]; i++) {
        NSInteger unicodeChar = [source characterAtIndex:i];
        
        // 한글인지 검색
        if ( HANGUL_START_CODE <= unicodeChar && unicodeChar <= HANGUL_END_CODE )
        {
            NSInteger chosungIndex  = (NSInteger)((unicodeChar - HANGUL_START_CODE) / (28*21));
            // 중성, 종성은 현재 필요없다.
            //            NSInteger jungsungIndex = (NSInteger)((unicodeChar - HANGUL_START_CODE) % (28*21) / 28);
            //            NSInteger jongsungIndex = (NSInteger)((unicodeChar - HANGUL_START_CODE) % 28);
            
            [result appendFormat:@"%@", [chosung objectAtIndex:chosungIndex]];
        }
        
    }
    
    return result;
}


-(id)init
{
    self = [super init];
    if ( self != nil )
    {
        // 초기화 
        chosung = [[NSArray arrayWithObjects:
                   @"ㄱ",@"ㄲ",@"ㄴ",@"ㄷ",@"ㄸ",@"ㄹ",@"ㅁ",
                   @"ㅂ",@"ㅃ",@"ㅅ",@"ㅆ",@"ㅇ",@"ㅈ",@"ㅉ",
                   @"ㅊ",@"ㅋ",@"ㅌ",@"ㅍ",@"ㅎ",nil] retain];

        jungsung = [[NSArray arrayWithObjects:
                     @"ㅏ",@"ㅐ",@"ㅑ",@"ㅒ",@"ㅓ",@"ㅔ",
                     @"ㅕ",@"ㅖ",@"ㅗ",@"ㅘ",@"ㅙ",@"ㅚ",
                     @"ㅛ",@"ㅜ",@"ㅝ",@"ㅞ",@"ㅟ",@"ㅠ",
                     @"ㅡ",@"ㅢ",@"ㅣ",nil] retain];
        jongsung = [[NSArray arrayWithObjects:
                     @"",@"ㄱ",@"ㄲ",@"ㄳ",@"ㄴ",@"ㄵ",@"ㄶ",
                     @"ㄷ",@"ㄹ",@"ㄺ",@"ㄻ",@"ㄼ",@"ㄽ",@"ㄾ",
                     @"ㄿ",@"ㅀ",@"ㅁ",@"ㅂ",@"ㅄ",@"ㅅ",@"ㅆ",
                     @"ㅇ",@"ㅈ",@"ㅊ",@"ㅋ",@" ㅌ",@"ㅍ",@"ㅎ",nil] retain];     
    }
    
    return self;
}


-(void)dealloc
{
    [chosung release];
    [jungsung release];
    [jongsung release];
    
    [super dealloc];
}

@end



//사용방법
-(IBAction)clickedButton:(id)sender 
{
    NSLog(@"%@", hangulField.text);
    
    ChosungUtil *util = [[[ChosungUtil alloc] init] autorelease];
    
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"변환결과" 
                                                    message:[util stringChosung:hangulField.text] 
                                                   delegate:self
                                           cancelButtonTitle:nil 
                                          otherButtonTitles:@"닫기", nil];
    [alert show];
    [alert release];
}




 
posted by 뚱2
CTRL+SHIFT+C

* eclipse indigo 기준 입니다. 
posted by 뚱2
-- 예제
-- MSSQL 2000이하에서는 안된다네요.
SELECT ROW_NUMBER() OVER( ORDER BY columnname ) AS ROWNUM
  FROM tablename

성능상의 문제가 있다고 하는데 우선 급한데로 유용하게 써먹을 수 있을 것 같다.

'DB / NoSQL > MSSQL' 카테고리의 다른 글

[MSSQL] 언어 타입 변경하기  (0) 2012.04.20
[MSSQL] SQL Server Management Studio 단축키  (0) 2012.04.04
[MSSQL] CONVERT TYPE 0~200  (0) 2011.09.28
[MSSQL] 문자열 자르기  (0) 2011.09.15
[MSSQL] Alter Table  (0) 2011.09.02
posted by 뚱2
// AddressBookModel.h
@interface AddressBookModel : NSObject
{
    NSMutableArray *aData;
}

@property (nonatomic, retain) NSMutableArray *aData;

+(AddressBookModel *)sharedInstance;
+(void)killInstance;
-(NSString*)print;
@end

// AddressBookModel.m
static AddressBookModel *_addressBookModelSingleInstance = nil;

@implementation AddressBookModel : NSObject

@synthesize aData;

-(NSString*)print
{
    NSMutableString *str = [NSMutableString string];
    for (int i = 0; i < [aData count]; i++ )
    {
        [str appendFormat:@"%@ ", [aData objectAtIndex:i]];
    }
    
    return str;
}

-(id)init
{
    self = [super init];
    
    if ( self != nil ) 
    {
        // 데이터 초기화 장소
        self.aData = [NSMutableArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
    }
    
    return self;
}

-(void)dealloc
{
    NSLog(@"AddressBookModel dealloc=>Ref Count=%d", [self retainCount]);
    
    [aData release];
    [super dealloc];
}

+(AddressBookModel *)sharedInstance
{    
    @synchronized(self) 
    {
        if ( _addressBookModelSingleInstance == nil ) 
        {
            _addressBookModelSingleInstance = [[AddressBookModel alloc] init];
            NSLog(@"AddressBookModel sharedInstance=>Ref Count=%d", [_addressBookModelSingleInstance retainCount]);
        }
    }
    
    return _addressBookModelSingleInstance;
}

+(void)killInstance
{
    @synchronized(self)
    {
       if (_addressBookModelSingleInstance != nil )
       {
            [_addressBookModelSingleInstance dealloc];
            _addressBookModelSingleInstance = nil;
       }     
    }
}

+(id)allocWithZone:(NSZone *)zone {
    @synchronized(self) 
    {
        if (_addressBookModelSingleInstance == nil) 
        {
            _addressBookModelSingleInstance = [super allocWithZone:zone];
            return _addressBookModelSingleInstance;
        }
    }
    return nil;
}

-(id)copyWithZone:(NSZone *)zone {
    return self;
}

-(id)retain {
    return self;
}

-(unsigned)retainCount {
    return UINT_MAX;
}

-(oneway void)release {
}

-(id)autorelease {
    return self;
}

@end

인터넷을 뒤지니까 대략 비슷한 소스코드가 쏟아집니다.
다른 문제는 다 해결됐는데 아무리 디버깅을 해봐도 dealloc 메소드가 호출되지 않네요.
결국 'killInstance'라는 클래스 메소드를 만들어서
내부에서 강제로 dealloc를 호출해주고 있습니다.
결국 문제는 싱글턴 만드는 것 까지는 좋은데 dealloc같이 메모리가 정확하게 해제되는 시점이 필요하다는 것입니다.
그렇지 않다면 메모리 해제시에 특정 작업을 처리 할 수가 없는 일이 발생하기 때문에 특정상황에서 애매해지는 일이 발생합니다.
전 억지로 killInstance라는 클래스 메소드를 만들었는데
혹 다른 방법을 알고있으시다면 알려주세요 ㅠㅠ 

posted by 뚱2
이번에 릴리즈된 iOS 5 Beta 7에서 테스트 어플을 하나 만들어보려고 오랜만에 XCode를 열었습니다.

그런데 우잉???


Windows-Based Application이 없어졌네요.
그래서 할 수 없이 Empty Application을 선택했습니다.


그리고 새로운 Use Automatic Reference Counting이라는 항목이 생겼군요. 레퍼런스 카운팅을 자동으로 해주는 것 같은데
우선 테스트 어플이 급하기에 체크 해제하고 생성합니다.


TestApp이라는 이름으로 어플을 생성했습니다.
Empty Application이라더니 기존에 있던 MainWindow.xib 파일이 보이지 않습니다.
그럴때는 할 수 없이 수동으로 연결을 해야 하는 군요.


새로운 UIViewController를 하나 만들었습니다.
xib파일을 포함해서 만들었는데요. 이제 코드로 연결을 해줘야 합니다.

Empty Application 으로 만들면 'AppDelegate.h, AppDelegate.m'파일이 생성됩니다.

// AppDelegate.h
//

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, retain) MainViewController *mainView;

@end
//]]>



//AppDelegate.m
#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize mainView;

- (void)dealloc
{
    [mainView release];
    [_window release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    mainView = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    
    if ( mainView != nil ) 
    {
        [self.window addSubview:mainView.view];
    }
    
    [self.window makeKeyAndVisible];
    return YES;
}

// 이하 코드 ...




  이렇게 연결을 했더니 전과 같이 화면이 밀리는 경향이 있습니다.
그래서 MainViewController.m 파일을 수정했습니다.
// MainViewController.m  
#import "MainViewController.h"

@implementation MainViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        [self.view setFrame:[[UIScreen mainScreen] applicationFrame]];
    }
    return self;
}

// 이하 코드 ...
 
posted by 뚱2

[MSSQL] Alter Table

DB / NoSQL/MSSQL 2011. 9. 2. 13:58
툴로만 수정하다가 코드로 할려니 헷갈려서

-- 컬럼수정
ALTER TABLE TZ_FRIENDS  
  ALTER COLUMN FRIENDID VARCHAR(20) NOT NULL;
  
-- 외래키는 바로 변경 안되고 Drop후 다시 생성
-- 삭제
ALTER TABLE TZ_FRIENDS
  DROP XPK_FRIEND

-- 생성
ALTER TABLE TZ_FRIENDS
  ADD CONSTRAINT XPK_FRIEND
  FOREIGN KEY(...) REFERENCES(...)

 


'DB / NoSQL > MSSQL' 카테고리의 다른 글

[MSSQL] 언어 타입 변경하기  (0) 2012.04.20
[MSSQL] SQL Server Management Studio 단축키  (0) 2012.04.04
[MSSQL] CONVERT TYPE 0~200  (0) 2011.09.28
[MSSQL] 문자열 자르기  (0) 2011.09.15
[MSSQL] Oracle과 비슷한 RowNum  (0) 2011.09.06
posted by 뚱2


1. 제   목 : Java 언어로 배우는 디자인 패턴 입문 
2. 출판사 : 영진닷컴
3. 저   자 : 
유키 히로시 저
4. 가   격 : 25,000원 
5. 난이도 : 초중급 (★★
☆☆)
6. 판   매 : 판매중
7. 평   가 : 


몇 권 보지 않은 디자인패턴 책이지만 디자인패턴이라고 본책중에 개인적으로 제일 이해하기 쉬운 책입니다. 
이 책은 총 10부로 구성되어 있는데 저는 천천해 보려고 하루에 한부씩 읽었습니다.
디자인 패턴 책을 보다 보면은 제일 어려운게 그 패턴이 그 패턴 같으면서 도대체 언제 어떤 패턴을 적용할지
감이 안온다는 것 입니다.
그건 책으로 해결될 문제는 아니라고 봅니다.
이론과 실전은 다르기에 결국 경험에 의해서 필요성이 생기는 것 같습니다.
그렇지만 그런 부분을 뒤로하고서라도 이책은 충분히 가치가 있습니다.
책을 읽다보면은 디자인패턴을 통해서 객체지향의 묘미에 대해서 충분히 느낄수 있고 객체지향적으로
잘 구조화 해서 개발을 해보고 싶다는 욕구가 충만해 집니다.
이 책을 읽고 꼭 패턴이 뭐다라기 보다 왜 객체지향으로 해야 하는가
결국 현대에 와서 개발보다는 유지보수의 비용 더 크다는걸 깨닿고 유지보수를 쉽게 하는 방법으로 발전하게되면서
객체지향이라는게 각광받고 있는 거라고 생각합니다.
이 책도 인터페이스를 통한 느슨한 결합으로 유지보수와 확장에 자유로는 코드를 만들려고 하는게
모든 패턴에 깔려있다는걸 알려줍니다.
자바 언어를 바탕으로 디자인 패턴을 설명하고 있지만 C, C++ 개발자가 보아도 크게 문제 없습니다.
기존 GoF책이 어려우신 분은 이 책을 시작으로 다른 책을 접근해 보시는 것도 한가지 방법이라고 생각합니다. 
posted by 뚱2