iOS2012. 9. 9. 19:24

- (NSString *)getFileName {

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyyMMdd_hhmmss_"];

NSDate *date = [[NSDate alloc] init];

NSString *fileName = [NSString stringWithFormat:@"%@%@",

  [dateFormatter stringFromDate:date],

  [[[NSString stringWithFormat:@"%f", [[NSDate date]timeIntervalSince1970]] componentsSeparatedByString:@"."] objectAtIndex:1]];

[date release];

[dateFormatter release];

return fileName;

}

Posted by 다오나무
우분투2012. 9. 7. 23:53

제가 블로그 운영 거의 초기에 하드디스크 파티션을 자동으로 마운트 시키는 방법에 대해 블로그에 짤막하게 글을 남긴 적이 있었습니다. (우분투 설치하고 셋팅할 것. 중 3번)
'/etc/fstab'란 파일을 'gedit'로 수정하는 방법이었는데, 저 혼자 나중에 포맷하고 참고하려고 작성한 포스팅이었죠. 이 방법을 사용하려면 디스크의 UUID를 확인하는 등 상당히 복잡한 절차를 거쳐야 했는데, 이 과정을 간단하게 도와주는 GUI 프로그램이 있어서 소개합니다!!


pysdm 설치하기

우분투(Ubuntu)에서는 아래의 명령어를 입력하면 됩니다.

$ sudo apt-get install pysdm


페도라(Fedora)에서는 아래의 명령어를 입력하면 됩니다.

$ sudo yum install pysdm



사용방법

Storage Device Manager(pysdm)를 사용하는 것은 '/etc/fstab'파일을 수정하게 되는데, 자칫 잘못되면 골치아프게 되는 수가 있습니다. 그러므로 아래의 명령어로 미리 백업 해둡니다.

$ sudo cp /etc/fstab /etc/fstab.old


위의 명령어는 '관리자의 권한으로(sudo)', '/etc/fstab'라는 파일을 '/etc/fstab.old'란 파일로 '복사해둔다(cp)'라는 뜻입니다.

이 과정이 다 끝나면 '대시홈(Dash)'에서 'storage device manager'를 검색하거나 '$ gksu pysdm'이란 명령어로 실행합니다.


'/etc/fstab'파일을 수정하는 것은 관리자 권한을 필요로 하기 때문에 한번 더 암호를 물어봅니다. 암호를 입력하면 'Storage Device Manager(pysdm)'이 실행됩니다.


간단하게 제 파티션을 설명하자면 'sda1'는 ext4형식으로 우분투가 설치되어있고, 'sda5'는 ext4인 임시저장용 파티션, 'sda6'는 스왑(swap)파티션입니다.

sdb는 모두 ntfs형식의 파티션으로 각각 분류된 파티션입니다.


우선 수정하기 위해서 원하는 파티션을 선택한 뒤 'Assistant'버튼을 클릭합니다.



ext4 형식의 파일시스템은 아래와 같이 표시됩니다.

부팅하자마자 마운트되도록 하기 위해선 'The file system is mounted at boot time'을 선택하면 됩니다.

또한 다른 사용자로도 마운트할 수 있고 마운트해제 할 수 있도록 'Allow any user to mount the file system', 'Allow a user to mount and unmount the file system' 을 선택합니다.



ntfs 형식의 파일시스템은 아래와 같이 표시됩니다.

기본적으로 'Mount file system in read-only mode(파일시스템을 읽기만 가능하도록 마운트)'가 선택되어 있는데 선택을 해제하고, 위와 같이 'Allow any user to mount the file system', 'The file system is mounted at boot time', 그리고 'Allow a user to mount and unmount the file system'을 선택합니다.



자!! 이제 재부팅을 하면 자동으로 마운트되는지 확인할 수 있습니다!!^^

혹시, 기존의 설정으로 복구하고 싶은 분은 아래의 명령어를 입력하게 아까 백업해둔 파일로 덮어쓸 수 있습니다.

$ sudo cp /etc/fstab.old /etc/fstab


 

Posted by 다오나무
우분투2012. 9. 7. 22:54

tar압축패키지로 전체 시스템 백업하기.. 

백업에 제외할 디렉토리를 정한다. 쓸모없는 디렉토리와, 백업파일 자신을 꼭 제외시켜주어야 한다. 또한 다른 파티션의 하드를 마운트한 /mnt 등의 디렉토리도 제외시켜야 불필요한 용량증가와 시간을 줄일 수 있다. . /media   /dev 등의 디렉토리도 빼주자. /sys, /dev 는 가상적인 디렉토리이다. 백업이 완료된 후 에러매세지를 볼수가 있는데 대부분의 경우 무시해도 된다.

 

백업 

1. 루트로 이동

#cd /

 

2.전체 시스템을 백업

#tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

 

복구

1. 루트로 이동

#cd /

 

2. 압축을 풀어 복구

#tar xvpfz backup.tgz -C /

마지막의 -C / 옵션때문에 백업파일이 루트가 아닌 다른 곳에 저장되어있는 상태라도 상관없다.

 

 백업에서 제외했던 디렉토리는 직접 만들어 주어라
#mkdir proc
#mkdir lost+found
#mkdir mnt
#mkdir sys

재부팅을 하면 백업전과 똑같은 상태로 돌아 갈 것이다.

 

--아래는 내가 백업하기전 Directory 구성



 

[
Posted by 다오나무
우분투2012. 9. 7. 22:36

저의 경우 리눅스파티션(ext4)을 3개쓰고 있습니다.

윈도우파티션(NTFS)까지 합치면 9개의 파티션을 쓰고있죠. ;;

NTFS파티션을 자동으로 마운트되게 하는건 'ntfs-config'이라는 유틸을 사용하면 쉽게 되지만 ext4파티션은 직접 작성을 해줘야 합니다.


먼저 파티션의 uuid를 알아야합니다.(UUID: 범용 고유 식별자 Universally Unique Identifier)

터미널에서 아래의 명령을 실행시킵니다.


ls -l /dev/disk/by-uuid/

그러면 아래와 비슷한 하드의 파티션 UUID 번호가 나옵니다.


lrwxrwxrwx 1 root root 10 2010-07-25 15:51 0440AAFD407AF498 -> ../../sda6
lrwxrwxrwx 1 root root 10 2010-07-25 15:51 049C80B292809FB2 -> ../../sda9
lrwxrwxrwx 1 root root 10 2010-07-25 15:52 1846215F46213EB7 -> ../../sda5
lrwxrwxrwx 1 root root 10 2010-07-25 15:52 32905ABC3403C014 -> ../../sda8
lrwxrwxrwx 1 root root 11 2010-07-25 15:52 4f9e4283-2f18-48ef-a881-056f1fb2a30d -> ../../sda10
lrwxrwxrwx 1 root root 11 2010-07-25 15:52 5a5f097d-8587-473e-bc65-4d175b7fa6a5 -> ../../sda12
lrwxrwxrwx 1 root root 10 2010-07-25 15:52 61ABCFF04CAD8CDB -> ../../sda1
lrwxrwxrwx 1 root root 10 2010-07-25 15:51 789FCA7F3C10E3D7 -> ../../sda7
lrwxrwxrwx 1 root root 11 2010-07-25 15:51 a710af3e-bffc-42ec-979d-918c42f65b52 -> ../../sda13
lrwxrwxrwx 1 root root 11 2010-07-25 15:52 ad7e627d-6d70-4dda-bb51-0a582c0afc87 -> ../../sda11


여기서 날짜와 시간 뒤에있는 복잡해보이는 일련번호가 바로 'UUID'입니다.

../../sda6와 같은 문자는 파티션 번호입니다.


위의 파티션정보를 보면 sda라는 1번째하드에 uuid가 짧은 /sda1,/sda5~9는 ntfs파일시스템으로 /sda1은 윈도우의 C드라이브이고, /sda5~9는 D~H드라이브 입니다.

uuid가 긴 /sda10~12는 리눅스파일시스템(ext4)이며, /sda13은 스왑 파티션입니다.


이제 uuid번호를 알았으니 부팅할때 자동으로 마운트되게 하면 됩니다.

터미널에서 아래의 명령을 실행시킵니다.


sudo gedit /etc/fstab

그러면 아래와 비슷한 형식의 글이 나옵니다.


# /etc/fstab: static file system information.
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc    /proc    proc    nodev,noexec,nosuid    0    0

UUID=4f9e4283-2f18-48ef-a881-056f1fb7a30d    /    ext4    errors=remount-ro    0    1  >> 현재 사용중인 우분투 파티션.
UUID=049C80B292809FB2    /media/data    ntfs-3g    defaults,locale=ko_KR.UTF-8    0    0  >>이하 윈도우파티션.
UUID=1846215F46213EB7    /media/drama    ntfs-3g    defaults,locale=ko_KR.UTF-8    0    0
UUID=789FCA7F3C10E3D7    /media/fors    ntfs-3g    defaults,locale=ko_KR.UTF-8    0    0
UUID=32905ABC3403C014    /media/game    ntfs-3g    defaults,locale=ko_KR.UTF-8    0    0
UUID=0440AAFD407AF498    /media/ubuntuk    ntfs-3g    defaults,locale=ko_KR.UTF-8    0    0
UUID=61ABCFF04CAD8CDB    /media/seven    ntfs-3g    defaults,locale=ko_KR.UTF-8    0    0


자동 마운트 되는 파티션을 보여주는 문서입니다.

원하는 리눅스 파티션을 자동 마운트 한다면 uuid번호를  적어주면 됩니다.

/sda12파티션을 넣어준다고 가정한다면...위의 uuid번호를 그대로 복사&붙여넣기 하면 됩니다.


UUID=5a5f097d-8587-473e-bc65-4d175b7fa6a5  /media/kubuntu    ext4    errors=remount-ro    0    1


유의 해야할것은 '/media/kubuntu'라는 폴더입니다. 사용자가 원하는 폴더명을 넣으면 됩니다.

보통 '/media/사용자폴더'로 위치를 정하면 되는데 다른 디렉토리로 해도 전혀 상관없습니다.


'사용자폴더'는 디렉토리(폴더)입니다. 꼭 디렉토리를 만들어야 합니다.


sudo mkdir /media/kubuntu


이제 재부팅해서 확인해 보세요. 자동으로 마운트되어 있을겁니다.


*****************************************************************************************************************8


저와 같이 리눅스파티션을 두개이상 쓰는분이 있는지 모르겠지만... 혹시 필요한 분이 있을듯하여 적어봤습니다.

쉬운건데 너무 복잡하게 설명한듯 합니다.;;

Posted by 다오나무
우분투2012. 9. 6. 16:57

: 안녕하세요~ .. 

: 하나의 하드디스크내용을 모조리 다른 하드디스크로 옮기고 싶습니다. 
: 백업이나 카피, 하드디스크의 업그레이드 수준이 아니라, 
: 완전히 똑같이 말이죠(임시로)... 
: 디스크카피를 수행한 후에 다른 PC에서 카피된 디스크를 이용해 
: 똑같은 서비스를 할 수 있도록 말이죠.. 

: 물론 작업을 위해 임시로 가능할 수 있도록 하면 됩니다. 

: 아~! 그리고 이런 일이 SCSI하드에서 IDE하드로도 가능한지 
: 모르겠습니다. 

: 가르쳐 주세요~~~ 

: 이질문을 2~3일전에 했는데, 워낙 순식간에 한참 지난 글이되어 버려서 다
: 시 했습니다.

가장 손쉬운 방법은 완전히 동일한 하드디스크를 하나 준비한 다음에 
dd 명령을 사용하는 거지요. 예를 들어 SCSI원본이 /dev/sda 에 달려있고
복사당할 똑같은 놈을 /dev/sdb에 단다음에

dd if=/dev/sda of=/dev/sdb

하면 됩니다. 이렇게 할 경우 sector단위로 복사가 되며 lilo등도 똑같이 설
정됩니다. 바꿔끼기만 하면 되는거죠.

그 다음으로 복사당할 하드가 원본이랑 사이즈나 제품이 다를 경우는 위의 
방법을 사용해서는 절대 안되고 원본에서

# tar cvflz /tmp/root.tar.gz / --exclude /tmp

와 같이 명령을 실행하면 /tmp아래 root.tar.gz 이 생성되지요.
그다음에 복사당할 ide를 달고서 포맷하고 파티션을 나눈다음에 (이때 위에
서 만든 root.tar.gz 를 풀수 있을만큼 충분히 사이즈가 커야됨) 이를 원본
의 적당한 곳에 마운트를 하고 위의 파일을 풀어냅니다.

# tar zxvf /tmp/root.tar.gz /mnt/second/
뭐 이런식으로 하면 되겠죠 ( /mnt/second 가 두번째 하드의 마운트 디렉토
리)...

그 다음에 복사된 하드를 첫번째 드라이브로 만든 다음에, 플로피로 부팅하
여 lilo를 설치한다음 떼내서 다른 하드로 달면 되지요.

세번째 방법으로 최소한의 시스템만을 설치한 다음에 네트웍을 구성하고 원
본시스템에서 복사될 시스템으로 rdist나 rsync를 사용하여 필요한 파일을 
복사하는 방법이 있읍니다.

세가지 방법중에서 권하고 싶은 것은 1번입니다.

[출처] Linux 하드카피 방법|작성자 예민

Posted by 다오나무
우분투2012. 9. 6. 16:45

하드카피 질문 드려요~
http://www.ubuntu.or.kr/viewtopic.php?f=22&t=11941
1 개 중 1 페이지

글쓴이: jcy8457 [ 2010/06/15 화 11:37 pm ]
글 제목: 하드카피 질문 드려요~

윈도우에서 고스트를 이용해서 리눅스 하드카피를 했는데....

오류가 나네요....

우분에서 dd를 이용해서 이용할수 있다고 하는데

자세한 방법쫌 부탁드립니다.

그리고

윈도우에서 하드카피 할 수 있는 방법은 없을까요?

글쓴이: 강분도 [ 2010/06/19 토 9:21 am ]
글 제목: Re: 하드카피 질문 드려요~

dd를 이용한 하드 카피는
dd if=/dev/XXX of=/dev/XXX
예) dd if=/dev/sda of=/dev/sdb
같이 합니다.

jcy8457 님의 글:
그리고

윈도우에서 하드카피 할 수 있는 방법은 없을까요?

MS 에서 하드카피는 보통 xcopy 이용하지 않는지요 ?
예) c:\>xcopy c:\ d:\ /s /k /e /c /h /r /y

글쓴이: jcy8457 [ 2010/06/21 월 12:21 pm ]
글 제목: Re: 하드카피 질문 드려요~

도스모드에서...

xcopy 명령어를 써서 리눅스시스템의 하드를 카피 할 수 있을까요???

Posted by 다오나무
iOS2012. 9. 4. 22:27


UITextView: move view when keyboard appears
                                                                           For showing the textview fields without being hidden by the keyboard, the standard way is to move up/down the view having text fields whenever the keyboard is shown.

                
        
The following simple steps is used to move up/down the UITextField in your iPhone.

Step 1: Set the UITextViewDelegate, and tag the textViewFields (in your .hfile)

Step 2: Place "CGFloat animatedDistance;" in to inside the interface (in your .h file)

Step 3:  Define the following values in top of your .m file (after @implimentation)     

static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;

Step 4: And finally add the following code into your .m file          
 
-(void) textViewDidBeginEditing:(UITextView *)textView {
    
    CGRect textFieldRect = [self.view.window convertRect:textView.bounds fromView:textView];
    CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view];
    
    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
    CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
    CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height;
    CGFloat heightFraction = numerator / denominator;
    
    if(heightFraction < 0.0){
        
        heightFraction = 0.0;
        
    }else if(heightFraction > 1.0){
        
        heightFraction = 1.0;
    }
    
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    
    if(orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown){
        
        animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
        
    }else{
        
        animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
    }
    
    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y -= animatedDistance;
    
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
    
    [self.view setFrame:viewFrame];
    
    [UIView commitAnimations];
}

- (void)textViewDidEndEditing:(UITextView *)textView{
    
    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y += animatedDistance;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
    
    [self.view setFrame:viewFrame];
    [UIView commitAnimations];
}

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
 if([text isEqualToString:@"\n"])
 {
  [textView resignFirstResponder];
  return NO;
 }
 return YES;
}

iphone - How to dismiss keyboard for UITextView with return key:
               Did you saw the last para of the above code snippets?, that is used to hide the iphone keypad when clicking return key.

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
 if([text isEqualToString:@"\n"])
 {
  [textView resignFirstResponder];
  return NO;
 }
 return YES;
}
Please share this post. If it's useful to you.

Posted by 다오나무
iOS2012. 9. 4. 16:25

iOS에서 네비게이션바에 이미지를 설정하는 함수가 생겼다.


setBackgroundImage:forBarMetrics:


이 함수로 이미지만 설정하면 간단하나, 문제는 iOS4이하에서의 설정방법


따라서 아래와 같이 설정하면 iOS 버전과 관련 없이 모두 적용할 수 있다.


viewDidLoad 같은 곳에서 설정하면 됨


 UIColor *color = [UIColor colorWithRed:0.94 green:0 blue:0.44 alpha:1.0];

    self.navigationController.navigationBar.tintColor = color;

UIImage *imageNavCon = [UIImage imageNamed:@"background.png"];

if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])

    {

        [self.navigationController.navigationBar setBackgroundImage:imageNavConforBarMetrics:UIBarMetricsDefault];

    }

else {

[self.navigationController.navigationBar insertSubview:[[[UIImageView allocinitWithImage:imageNavCon]autoreleaseatIndex:0]; 

}

Posted by 다오나무
iOS2012. 9. 4. 15:45

*1번째 간단한 방법(Action 버튼 생성)*
장점 : 상당히 쉽게 만들수 있음.
단점 : 버튼이 터치되는 영역이 실제 버튼보다 훨 씬 넓음.

UIBarButtonItem *composerBtn =[[UIBarButtonItem allocinitWithBarButtonSystemItem:UIBarButtonSystemItemAction target:selfaction:@selector(composerMethode)];


*2번째 방법 : 시스템아이템 버튼이 아닌 임의의 이미지를 이용하여 버튼 구성 방법*

장점 : 버튼의 외각 이미지 + 내부 추가한 이미지(i.png)표현 가능.
단점 : 버튼이 터치되는 영역이 실제 버튼보다 훨 씬 넓음.


UIImage *image = [UIImage imageNamed:@"i.png"];

image = [UIImage imageWithCGImage:[image CGImagescale:2.0 orientation:UIImageOrientationUp];

UIBarButtonItem *editButton = [[UIBarButtonItem alloc

                                       initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(editDB)];

        

self.navigationItem.leftBarButtonItem = editButton;


*3.번째 방법 : 임의의 뷰에 UIButton을 추가하여 구성하는 방법*
목적 : 1번째,2번째 방법의 단점을 해결하고자 함.
장점 : 정확히 버튼의 크기만큼만 터치가 됨.
단점 : 시스템에 있는 버튼아이템이미지 사용 불가. , 버튼의 외각 이미지 표현 불가.

            UIView *rightview = [[UIView allocinitWithFrame:CGRectMake(0,0,25,20)];

            

            UIButton *searchbutton = [[UIButton allocinitWithFrame:CGRectMake(0,0,2520)];


            UIImage *image = [UIImage imageNamed:@"action.png"];

            image = [UIImage imageWithCGImage:[image CGImagescale:1.0 orientation:UIImageOrientationUp];

            

            [searchbutton setImage:image forStateUIControlStateNormal];


            [searchbutton addTarget:self action:@selector(composerMethode) forControlEvents:UIControlEventTouchUpInside];

            [rightview addSubview:searchbutton];

            [searchbutton release];

            

            UIBarButtonItem *composerBtn = [[UIBarButtonItem allocinitWithCustomView:rightview];

            [rightview release];

Posted by 다오나무
iOS2012. 9. 4. 11:31

UIColor에 카테고리로 추가해서 사용합니다.


- 파일명 : UIColor+FWExtension.h

@interface UIColor (FWExtension)

+(UIColor *)colorWithRGB:(NSInteger)rgbValue;

@end


- 파일명 : UIColor+FWExtension.m

@implementation UIColor (FWExtension)

+(UIColor *)colorWithRGB:(NSInteger)rgbValue {

float redValue   = ((float)((rgbValue & 0xFF0000) >> 16)) / 255.0;

float greenValue = ((float)((rgbValue &   0xFF00) >>  8)) / 255.0;

float blueValue  = ((float)((rgbValue &     0xFF) >>  0)) / 255.0;

return [UIColor colorWithRed:redValue green:greenValue blue:blueValue alpha:1.0];

}

@end

Posted by 다오나무