참으로 오랜만에 글 남기네..ㅎㅎ

여튼...

이번엔 편의점 아르바이트^^ㅋ


시간 : 3교대..시간 협의가 가능한곳이 많다..(야간이 좀 더 하고 낮알바가 조금하는 뭐..)

시급 : 편의점 알바 시급은 장소와 시간에 차이가 있는 편이다..

내가 했을때 기준으로...

낮에는 최저 임금....-_-; 

야간(새벽) : 5000원(야간근무는 1.5배 더 쳐줘야 하지만..그리 주는데 없지 싶다..ㅋㅋ)


이 편의점 알바는 뭐랄까 상황에 따라 엄청 힘들기도 엄청 쉽기도 한 알바인데..

예를 들어...

명동, 종로 등 또는 고속버스터미널 같은 사람이 겁나게 많은곳은...

월급을 더 주는대신 무쟈게 바쁘다..

그래서 거진 2명 3명이서 일을 하는데..그래도 바쁘다..-_-;


그에 비해 예를 들어 주택가 골목에 있는 편의점은 정말 한산하다...ㅋㅋ

워낙 편의점이나 마트가 많다보니..


내가 봤을때 이 편의점 알바는 돈을 버는 목적보다는 잠시 용돈 벌기 식으로 좋은 알바인듯하다..아님 여성들이 하기 좋은..^^

우선 일도 어렵지 않고..시간을 다양하게 활용 가능하다..


나는 일부러 아파트 안이나 골목에 위치하며 야간시간대를 찾았었다..최대한 사람이 없을만한 곳^^ㅋ

그러다 아파트 안에 위치한 편의점에서 알바를 시작했는데..손님이라곤 아파트 주민이 다였다..ㅋㅋ

그리고 아파트 단지에서 새벽에 뭐 얼마나 손님이 오겠나...

학생들 하교시간 직장인 퇴근 시간 외엔 정말 한산하다..새벽 1시~5시 사이에 달랑 4명 온적도 있다..ㅋㅋ

내가 왜 이런곳을 찾았냐 하면..돈보다는 공부가 목적이었기 때문이다..

근무 시간 : 밤 10시 ~ 아침 8시

그런데...

한 11시 넘으면 그때부터 사람이 거진 없었다..

중간에 청소 한번 하고 물건 검수 하고 정리 하고 하는데 1시간 정도 남짓 걸리고..

아침 7시쯤부터 출근하는 직장인과 학생들이 있는 정도...

실질적으로 일하는 시간은 3시간~4시간정도고 나머지 6시간 이상을 개인시간으로 썼다.


이때 공부 한걸로 지금까지 밥벌어 먹으며 살고 있다..

사람 마다 하기 나름이지만..난 이때 절벽끝에 서있던 상황이라 가능했을지도 모른다..


뭐 여하튼 나 같은 절박한 사람이라면...야간 편의점 알바를 추천한다..

최대한 한적한곳으로..ㅎㅎ

그럼 시급도 쎄고...공부도 할 수 있는 일석이조의 상황을 만들 수 있다..^^


대신 새벽에 하는거라 몸이 안좋아질수 있다..

좋은 사장은 밥값도 챙겨주곤 하는데..나쁜 사장은 폐기물품 먹으라거나..아님 개인돈으로 사먹으라 하는곳도 있다..

우선 한적한곳이든 바쁜곳이든 알바는 주인이 좋아야 한다..-_-

밥값은 보통 3000원내에서 골라 먹으란곳이 많은데..

새벽에 몸리듬도 깨지고 먹는것도 부실해지다보면..오래 못버틸수가 있다..


그에 비해 낮에 하는 편의점 알바는 사장이랑 같이 하는 경우가 발생할 수도 있고..

아무리 한적한곳도 낮엔 손님이 제법 있는 경우가 많다보니..

공부, 돈보다는 그냥 경험으로 하기 바란다..


개인적인 생각으론 낮 편의점 알바는 여성분들이나 처음 알바하는 분들에게 추천하고 싶고..그 외 분들에게는 별로 비추인 아르바이트가 아닌가 싶다..

아~그리고 야간 편의점 알바로 여성분들은 절대 하지 말길 바란다..안좋은일이 생길수있는 가능성이 좀 높다..-_-;;

뭐 강도라던지..취객이라던지...


흠..그리고 편의점에서 하는 일들은...

첫번째 청소...이건 뭐 다 똑같고..

두번째 계산..pos기기로하는데 정말 바보가 아닌이상 한두번 해보면 감이 올정도로 쉽다..

세번째 물건 검수...이게 처음엔 뭐지 하다 나중엔 무지 귀찮은ㅎㅎ..물건 다 왔나 체크만 하는거다보니 나중에 갈 수록 속도가 무지 빨라짐..

아~담배..ㅋㅋ

담배 안피는 사람은 담배 이름 외우는데 좀 시간이 걸린다..

나도 비흡연자인데..뭔 넘의 담배 종류가 그리 많은지..ㅋㅋㅋ

외우기 전엔 손님이 답답했는지 같이 찾아주었던 기억이..ㅎㅎㅎ


그 외에 신경써야 할게....물건의 선입선출..특히 유제품이나 유통기한이 짧은 음식은 잘 확인해야 하며 새로 들어온건 뒤에 위치시켜야 되서 진열되있는걸 다 빼고 다시 채워야 하는 귀찮은 상황이 자주 생긴다...


편의점 알바가 할일은 이게 끝인것 같다..심심하면 물건 각 맞추기 정도..ㅎㅎ


마지막으로 편의점 알바할때 가장 짜증나는게 있었는데..

은근히 돈을 던지는 사람이 많다는것이다...그냥 별 의식 없이 던지는듯한데..

돈 받을려고 손 내밀었는데 테이블에 위에 던지면..기분 겁나 나쁘다..-_-++++

꼭 내가 거지가 된 기분,,,;;

그러니 이제까지 별 생각없이 그냥 던지던 분들 이제부턴 제발 그러지 마시길...^^

제발 한번만 더 생각해보시길 바랍니다..^^



두서 없는 글이지만..

뭐 편의점 알바 구하는 사람들에게 조금만한 정보라도 되길 바랍니다..ㅋ


      
Posted by k_ben


파일 메니져 가져오기 

NSFileManage * fileManager = [NSFileManager defaultManager];

 
현재 폴더 가져오기

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *currentPath = [fileManager currentDirectoryPath]; 




Documents 폴더 가져오기  

NSFileManager * fileManager = [NSFileManager defaultManager];
NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString documentPath = [dirPath objectAtIndex:0]; 

 
현재 폴더 이동

NSFileManage * fileManager = [NSFileManager defaultManager];
NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocument, NSUserDomainMask, YES);

NSString documentPath = [dirPath objectAtIndex:0]; 

if ([fileManager changeCurrentDirectoryPath:documentPath] == NO){
  // 폴더 이동 못함
} else {
 // 폴더 이동함 

 
폴더 생성 

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *newDir = @"/test";
if (fileManager 
createDirectoryAtPath:newDir withIntermediateDirectories:YES attributes:nil error:NULL] ==NO){
  //  newDir 폴더 생성 실패
} else {
  // newDir 폴더 생성 성공 


 폴더 삭제 

NSFileManage * fileManager = [NSFileManager defaultManager]
NSString *delDir = @"/test";
if (fileManager removeItem
AtPath:delDir error:NULL] == NO){
  //  delDir 폴더 삭제 실패
} else {
  // delDir 폴더 삭제 성공 

 
폴더 내의 목록 표시 

NSFileManage * fileManager = [NSFileManager defaultManager];
NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocument, NSUserDomainMask, YES);
NSString *documentPath = [dirPath objectAtIndex:0]; 

NSArray *filelist = [fileManager contentsOfDirectoryAtPath: documentPath error:NULL]; 

 
파일/폴더 속성 정보 확인 

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *attDir = @"/";
NSDictionary *attributes;
attributes = [fileManager attributesOfItemAtPath:attDir error:NULL];

NSLog(@"파일 정보 : %@", [attributes objectForKey:NSFileType]); 


정의된 속성 정보

FOUNDATION_EXPORT NSString * const NSFileType;

FOUNDATION_EXPORT NSString * const NSFileTypeDirectory;

FOUNDATION_EXPORT NSString * const NSFileTypeRegular;

FOUNDATION_EXPORT NSString * const NSFileTypeSymbolicLink;

FOUNDATION_EXPORT NSString * const NSFileTypeSocket;

FOUNDATION_EXPORT NSString * const NSFileTypeCharacterSpecial;

FOUNDATION_EXPORT NSString * const NSFileTypeBlockSpecial;

FOUNDATION_EXPORT NSString * const NSFileTypeUnknown;

FOUNDATION_EXPORT NSString * const NSFileSize;

FOUNDATION_EXPORT NSString * const NSFileModificationDate;

FOUNDATION_EXPORT NSString * const NSFileReferenceCount;

FOUNDATION_EXPORT NSString * const NSFileDeviceIdentifier;

FOUNDATION_EXPORT NSString * const NSFileOwnerAccountName;

FOUNDATION_EXPORT NSString * const NSFileGroupOwnerAccountName;

FOUNDATION_EXPORT NSString * const NSFilePosixPermissions;

FOUNDATION_EXPORT NSString * const NSFileSystemNumber;

FOUNDATION_EXPORT NSString * const NSFileSystemFileNumber;

FOUNDATION_EXPORT NSString * const NSFileExtensionHidden;

FOUNDATION_EXPORT NSString * const NSFileHFSCreatorCode;

FOUNDATION_EXPORT NSString * const NSFileHFSTypeCode;

FOUNDATION_EXPORT NSString * const NSFileImmutable;

FOUNDATION_EXPORT NSString * const NSFileAppendOnly;

FOUNDATION_EXPORT NSString * const NSFileCreationDate;

FOUNDATION_EXPORT NSString * const NSFileOwnerAccountID;

FOUNDATION_EXPORT NSString * const NSFileGroupOwnerAccountID;


파일 존재 확인

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *extDir = @"/test.txt";
if (fileManager fileExistAtPath:extDir] == YES){
  // 파일 존재 
} else {
  // 파일 없음 


 파일 내용 비교

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *firstFile = @"/test.txt";
NSString *secondFile = "@"/my.txt";

if (fileManager contentEqualAtPath:firstFile andPath:secondFile] == YES){
  // 파일 내용 같음 
} else {
  // 파일 내용 다름 
}


파일 이동 또는 이름 변경

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *firstFile = @"/test.txt";
NSString *secondFile = "@"/my.txt";

if (fileManager moveItemAtPath:firstFile toPath:secondFile error:NULL] == YES){
  // 파일 이동/이름 변경 성공
} else {
  // 파일 이동/이름 변경 실패
}

 
파일 복사

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *firstFile = @"/test.txt";
NSString *secondFile = "@"/my.txt";

if (fileManager copyAtPath:firstFile toPath:secondFile error:NULL] == YES){
  // 파일 복사 성공
} else {
  // 파일 복사 실패
}


파일 읽기(NSData 타입)

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *firstFile = @"/test.txt";
NSData * dataBuffer = [fileManager contentsAtPath:firstFile]; 

 
파일 생성(NSData 타입 읽고 쓰기 -복사 기존 파일 존재시 overwrite 된다.)

NSFileManage * fileManager = [NSFileManager defaultManager];
NSString *firstFile = @"/test.txt";
NSData * dataBuffer = [fileManager contentsAtPath:firstFile]; 
NSString *secondFile = @"/my.txt"
[fileManager createFileAtPath:secondFile contents:dataBuffer attributes:NULL]; 


      
Posted by k_ben


http://hagulu.com/134?TSSESSIONhagulucom=61b070e13499ee1c53a5876e284219c8


안드로이드와 호환이 되는 파일 전송을 구현하다 보니 동영상 전송에 문제가 발생했다.

 
일반적으로 아이폰 비디오 레코더를 이용을 하게되면,
mov라를 확장자의 quickTimeMovie라는 방식으로 저장이 되어 진다.
이 파일을 그대로 안드로이드에 전송을 했더니
안드로이드에서는 하드웨어 코덱을 통해서는 재생을 할수가 없었다.
quick time movie 와  mpeg-4는 외부 포멧만 다를뿐 내부의 영상과 음성 코덱은 유사하다.
따라서 빠르게 변환이 가능한 방법이 있지 않을까 하고 찾다가 방법을 찾게 되었다.
바로 iOS 4 부터 지원되는 AssetLibrary를 이용하는 방법이다
이를 통해서 아래와 같이 구현해 보았다.
변환을 원하는 파일의 NSURL 과 저장을 원하는 파일 path의 NSString 을 주면 해당 path에 저장이 되게 된다.
01+ (void) convertVideoQtimeToMpeg4:(NSURL *) videoURL withPath:(NSString*)videoPath {
02    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
03     
04    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];
05 
06    if ([compatiblePresets containsObject:AVAssetExportPresetLowQuality]) {
07        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:avAsset presetName:AVAssetExportPresetPassthrough];
08         
09        exportSession.outputURL = [NSURL fileURLWithPath:videoPath];
10         
11        exportSession.outputFileType = AVFileTypeMPEG4;
12         
13        CMTime start = CMTimeMakeWithSeconds(0.0, 600);
14         
15        CMTimeRange range = CMTimeRangeMake(start, [avAsset duration]);
16         
17        exportSession.timeRange = range;
18         
19        [exportSession exportAsynchronouslyWithCompletionHandler:^{
20             
21            switch ([exportSession status]) {
22                     
23                case AVAssetExportSessionStatusFailed:
24                    NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]);
25                    break;
26 
27               case AVAssetExportSessionStatusCompleted:
28                     NSLog(@"Export Success");
29                     break;
30                     
31                case AVAssetExportSessionStatusCancelled:
32                     
33                    NSLog(@"Export canceled");
34                     
35                    break;
36                     
37                default:
38                     
39                    break;
40                     
41            }
42             
43            [exportSession release];
44             
45        }];
46         
47    }
48}
이 중에서 초기화 부분이 중요한데 presetName 에
아래처럼 AVAssetExportPresetPassthrough 를 지정해 주어야 다른 포멧으로 변환이 가능하다
 
1[[AVAssetExportSession alloc]initWithAsset:avAsset presetName:AVAssetExportPresetPassthrough];
아래와 같이 AVAssetExportPresetMediumQuality 와 같은 파라미터를 주고 outputFileType를 AVFileTypeMPEG로 주게 되면 SIGNAL ABORT가 발생하고 죽게 된다.
 
1AVAssetExportSession *exportSession  = [[AVAssetExportSession alloc]initWithAsset:avAsset AVAssetExportPresetMediumQuality];
2 
3exportSession.outputFileType = AVFileTypeMPEG4;
해당 AVAssetExportSession 의 지원되는 output 포멧을 확인하고 싶을때는 AVAssetExportSession 의 supportedFileTypes propert를 통해서 확인해 볼 수가 있다.


추가로 유의 할 것은 이 방식은 asynchronous 이다.

그렇기 때문에 위와 같이 변환을 한 이후에 바로 이를 이용할수 있는것이 아니다
01[exportSession exportAsynchronouslyWithCompletionHandler:^{
02       
03      switch ([exportSession status]) {
04               
05          case AVAssetExportSessionStatusFailed:
06              NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]);
07              break;
08 
09         case AVAssetExportSessionStatusCompleted:
10               NSLog(@"Export Success");
11               break;
12               
13          case AVAssetExportSessionStatusCancelled:
14               
15              NSLog(@"Export canceled");
16               
17              break;
18               
19          default:
20               
21              break;
22               
23      }
24       
25      [exportSession release];
26       
27  }];
당황하지 않길 바란다 이 소스는 위에 있는 전체 소스의 일부분이다. 

따라서 위 소스와 같이 exportAsynchronouslyWithCompletionHandler 를 등록하여 "AVAssetExportSessionStatusCompleted"를 확인해야 한다.


      
Posted by k_ben