Wednesday, January 30, 2013

Saturday, January 26, 2013

Keynote 의 drawing 및 image editing 기능

Keynote versus Photoshop? Not as crazy as its sounds

Many people who use Keynote as a presentation tool may not even be aware that it comes with its own Illustrator-like Pen tool that can draw freehand vector paths, and you can expand the program’s basic shape options to make them infinitely extensible.

Select a shape, choose Format > Shape > Make Editable to make them editable (선택된 상태에서 그냥 한번 더 클릭해도 됨). You can then hold down the Alt key and click on any part of the shape’s paths to add an anchor point there, and double-clicking this point switches it between sharp angle and smooth Bézier curve, which you can further adjust by dragging Bézier handles (option 키를 누르고 드래깅하면 양쪽 핸들이 같은 길이가 됨). The same technique also works with lines, which lets you create curved arrows easily.

Wednesday, January 23, 2013

"Wide character in print" warning

검색어 : "Wide character in print" perl
레퍼런스 : Unicode-processing issues in Perl and how to cope with it
키워드 : utf-8

주어진 filepath 가 존재할 경우 available 한 다른 파일명을 얻어내는 함수

 sub availableFilename  
 {  
      my $givenFilepath = shift;  
      if(-e $givenFilepath){  
           my ($dir, $filenameOnly, $ext) = filepathParse($givenFilepath);  
           my $virgin = 1;  
           my $otherFilepath = "";  
           for(my $i = 1; $i < 80; $i++){  
                $otherFilepath = $dir . $filenameOnly . $ext;  
                if(!(-e $otherFilepath)){  
                     $virgin = 0;  
                     last;  
                }  
                $filenameOnly .= "_";  
           }  
           if($virgin){return "";}  
           else{return $otherFilepath;}  
      }else{  
           return $givenFilepath;  
      }  
 }  

Perl의 File Write

Text File 에 쓰기
 sub WriteToTextFile  
 {  
      my $outfile = shift;  
      my $text = shift;  
        
      my $errmsg = "Couldn't write to $outfile";  
      open (OUTFILE, ">$outfile") or die "$errmsg : $!";  
   
      print OUTFILE $text;  
      close OUTFILE;  
        
      print("Write success.\n");  
 }  

Binary File 에 쓰기
 sub WriteToBinFile  
 {  
      my $pa = shift;  
      my $outfile = shift;  
        
      my $buffer = "";  
      my $errmsg = "Couldn't write to $outfile";  
      open (OUTFILE, ">$outfile") or die "$errmsg : $!";  
      binmode (OUTFILE);  
        
      foreach(@$pa){  
           $buffer .= pack('C1', $_);  
      }  
   
      print OUTFILE $buffer;  
      close OUTFILE;  
        
      print("Write success.\n");  
 }  

Perl 의 regular expression 에서 문자가 몇번 repeat 되었는가 검사하는 법

인용 : When it is necessary to specify the minimum and maximum number of repeats explicitly, the bounds operator {} may be used. Thus. a{2} is the letter ‘a’ repeated exactly twice, a{2,4} represents the letter ‘a’ repeated between 2 and 4 times, and a{2,} represents the letter ‘a’ repeated at least twice with no upper limit.
검색어 : perl regular expression number repeat
출처 : Regular Expression Reference

Perl의 regular expression 에서 개행문자 포함한 모든 문자 표현하는 법

다음과 같이 /s modifier 를 써준다.
([.|\n]+ 과 같이 쓰면 원하는 대로 동작 안함)
      $text = "The quick brown\nfox jumps over the lazy dog. Hahaha.";  
      if($text =~ /^(.+)jumps/s){  
           print "MATCH\n" . $text;  
      }else{  
           print "NOT match\n" . $text;  
      }  
키워드 : all characters including newlines
레퍼런스 : Regex to match any character including new lines

Perl 에서 directory 내의 모든 file 리스팅하는 법

 #!/usr/bin/perl -w  
   
 use strict;  
 use warnings;  
   
 my $dir = "/Users/username/documents folder";  
   
 opendir(DIR, $dir) or die $!;  
   
 while (my $file = readdir(DIR)) {  
      next if ($file =~ m/^\./); # ignore filenames starting with a dot.  
      print "$file\n";  
 }  
   
 closedir(DIR);  
 exit 0;  
키워드 : folder, listing, iterate
레퍼런스 : How do I list the files in a directory?

Perl regular expression 의 ^ operator

[] 안에 쓰면 뒤에 오는 문자들에 대해 not 연산을 수행. priority 는 가장 낮다.
[^a|b] 로 쓰면 a 와 b 를 제외한 모든 문자 즉 NOT('a' OR 'b') 를 의미.

그 외의 경우에는 string 의 처음을 나타냄.

Sunday, January 20, 2013

TextWrangler 의 Balance and Fold 기능

원하는 위치에 커서를 위치시키고 Command + Shift + B 한다.
이 기능을 쓰면 커서가 있는 곳을 둘러싼 bracket 이나 parenthesis 를 fold 해준다.

긴글 혹은 텍스트 내 출처 명기 등 추가 정보를 괄호 등으로 감싸서 깨끗하게 정리하기 좋다.

Saturday, January 19, 2013

Perl 에서 sort 하기

키와 몸무게 데이터가 있다고 할때 키로 sort 해보자.
 use strict;  
 use warnings;  
 my @a = (  
      [168, 62],  
      [170, 54],  
      [168, 60],  
      [180, 100],  
 );  
 my @b = sort byHeight(@a);  
 printDS(\@b);  
 sub byHeight  
 {  
      return ($a->[1] <=> $b->[1]);  
 }  
 sub printDS  
 {  
      my $ds = shift;  
      use Data::Dumper;   
      print Dumper @$ds;  
      print "\n";  
 }  
위의 byHeight() 는 다음과 같이 한 것과 동일하다.
 
 sub byHeight  
 {  
      if($a->[0] > $b->[0]){  
           return 1;  
      }elsif($a->[0] < $b->[0]){  
           return -1;  
      }else{  
           return 0;  
      }  
 } 
키가 같은 경우 몸무게로 sort 하게 하려면 다음과 같이 하면 된다.
 sub byHeight  
 {  
      if($a->[0] > $b->[0]){  
           return 1;  
      }elsif($a->[0] < $b->[0]){  
           return -1;  
      }else{  
           return ($a->[1] <=> $b->[1]);  
      }  
 }  
키워드 : weight

Friday, January 18, 2013

Perl 에서 hash 비우기

다음과 같이 하면 된다.
 %hash = ();  
 %$hash_ref = ();  
출처 : How to clear perl hash
키워드 : empty, reference, hash table

string 의 eq 를 case insensitive 하게 하는 방법

uc() 또는 lc() 를 사용한다.
uc 는 to uppercase, lc 는 to lowercase 해주는 함수.
 if(uc("PIzzA") eq uc("PizzA")){  
      print "MATCH\n";  
 }else{  
      print "Not match\n";  
 }  
검색어 : compare, comparison, 비교, 스트링, 문자열, 대소문자

Perl 에서 hash 를 iterate 하는 법

다음과 같이 하면 된다.
방법 1
 foreach my $key ( keys %hash )  
 {  
     print "key: $key, value: $hash{$key}\n";  
 }  
key 를 한번에 임시 list 에 받아오므로 key 로 정렬 가능하나 메모리 사용량 많음

방법 2
 while ( ($key, $value) = each %hash )  
 {  
     print "key: $key, value: $hash{$key}\n";  
 }  
key 로 정렬은 못하지만 메모리 사용량 적음 (한번에 key, value pair 만큼만 메모리 사용됨)

레퍼런스 : iterate through a hash
검색어 : hash perl enumerate

Thursday, January 17, 2013

Pause/Break key의 역할

[IT강의실] 키보드의 SysRq, Scroll Lock, Pause 키는 어디에 쓰지?
동아일보 2013-01-16 16:02 최종수정 2013-01-16 17:17
PC를 켰을 때 운영체제 부팅 직전에 표시되는 바이오스(BIOS) 화면에서 Pause/Break키를 누르면 동작을 멈추게 할 수도 있다. 또한, 윈도 환경에서 윈도키와 Pause/Break키를 함께 누르면 해당 PC의 시스템정보를 볼 수 있다. 제어판에 들어갈 필요 없이 시스템 정보를 확인하고자 할 때 나름 요긴하다.

Wednesday, January 16, 2013

Perl 에서 array 를 n개의 같은 값으로 초기화하는 방법

 my $s = 6 x 10;  
 my @a = (6) x 10;  
 print $s; print "\n";  
 printDS(\@a);  
   
 sub printDS  
 {  
      my $ds = shift;  
      use Data::Dumper;   
      print Dumper @$ds;  
      print "\n";   
 }   
키워드 : same value
검색어 : perl initialize array with same number

Perl 에서 string 과 integer type conversion 하는 방법

Perl 에서는 스트링이나 숫자 타입이 별개가 아니라 Scalar 로 뭉뚱그려 사용된다. 변수 타입은 타입 정의에 의해 결정되는 것이 아니라 operand 에 의해 결정된다.
예)
 my @a = qw/100 200 300 400 500/;  # 스트링으로서 정의
 my $t = $a[2] + $a[3];   # 덧셈 operand 에 의해 숫자로 취급
 print "$a[2] + $a[3] = " . $t;   # . operand 에 의해 스트링으로 취급
 print "\n";  
   
 foreach(@a){ 
      if(/^3/){  # 스트링으로서 regular expression
           print "$_ starts with 3.\n";  
      }  
 }  
키워드 : type casting, 타입 변환, 문자열
레퍼런스 :
Automatic string to number conversion or casting in Perl
Perl: Convert from srting to number

Tuesday, January 15, 2013

Perl 에서 calculator 기능 사용하기

 my $v = eval("1+1");  
 print $v;  
실행하면 2가 찍힌다.
키워드 : evaluate, bc, 계산기

Monday, January 14, 2013

Perl 에서 sort 하기 / sort 된 array 에 새 item 삽입하기

 use strict;  
 use warnings;  
   
 test();  
   
 sub test  
 {  
        my @a = (  
               ["Hobbit", 168, 63],  
               ["Elf", 180, 54],  
               ["Dwarf", 159, 100],  
        );  
        my @b = sort byHeight(@a);  
        my @elmt = ("Human", 176, 70);  
        my @c = sort byHeight \@elmt, @b;  
          
        printDS(\@a);  
        printDS(\@b);  
        printDS(\@c);  
 }  
 sub byHeight{  
        $a->[1] <=> $b->[1];  
 }  
 sub printDS  
 {  
        my $ds = shift;  
        use Data::Dumper;   
        print Dumper @$ds;  
        print "~~~~~~~~~~~~~~~~~~~~~\n";  
 }  
레퍼런스 : Insert into a sorted array
키워드 : new element, elmt, binary search

Sunday, January 13, 2013

Saturday, January 12, 2013

Perl 에서 array of arrays 를 특정 field 로 sort 하는 법

다음 참조하기: Perl 에서 sort 하기 / sort 된 array 에 새 item 삽입하기
-------------
예를 들어 12번째 field 로 sort 한다면
@AoA = sort { $a->[12] <=> $b->[12] } @AoA
예 1:
 my @aofa = ();  
 my @a = ("Glen Benton", 92);  
 my @b = ("Jimi Hendrix", 27);  
 my @c = ("Oda Nobunaga", 47);  
 my @d = ("Christ", 33);  
 push(@aofa, \@a);  
 push(@aofa, \@b);  
 push(@aofa, \@c);  
 push(@aofa, \@d);  
   
 for (@aofa) {  
   print "@$_"; print "\n";  
 }  
 print "\n";  
   
 my @sorted = sort {$a->[1] cmp $b->[1]} @aofa;  
   
 for (@sorted) {  
   print "@$_"; print "\n";  
 }  
 print "\n";  
예 2:
 my @AoA = (  
   ['a', '2003-11-09', 'b'],  
   ['c', '2003-11-01', 'd'],  
   ['e', '2002-11-01', 'f'],  
   ['g', '2003-10-01', 'h'],  
   ['g', '2002-10-01', 'h'],  
 );  
   
 #my @new_arr = sort {$a->[0] cmp $b->[0]} @AoA;  
 my @new_arr = sort {$a->[1] cmp $b->[1]} @AoA;  
 #my @new_arr = sort {$a->[2] cmp $b->[2]} @AoA;  
   
 for (@new_arr) {  
   print "@$_"; print "\n";  
 }  
출처 : http://www.sitepoint.com/forums/showthread.php?659680-Perl-Sort-Array-of-Arrays
키워드 : 정렬

Perl에서 array 들로 이루어진 hash 의 pointer 다루기 예

1:  my %hash;  
2:    
3:  my @bee = ("Propolis", "Honey");  
4:  my @cow = ("Beef", "Milk");  
5:  my @hen = ("Chicken", "Egg");  
6:    
7:  $hash{"Bee"} = \@bee;  
8:  $hash{"Cow"} = \@cow;  
9:  $hash{"Hen"} = \@hen;  
10:    
11:  my $pHash = \%hash;  
12:    
13:  my $pa = $pHash->{"Cow"};   
14:  print(@$pa); print "\n";  
15:  print($pa->[0]); print "\t";  
16:  print($pa->[1]); print "\n";  

Friday, January 11, 2013

Perl 에서 Hash table sort 하기기

key 로 sort 하기
 sub sortByKeySample  
 {  
         # define a hash  
         my %v = (20 => "Bee", 30 => "Aeron", 10 => "Dog", 40 => "Cat");  
   
         # sort by value and put the keys in an array   
         my @keys = sort {$a <=> $b} keys %v;  
           
         # loop through array to print the hash pairs ordered  
         foreach my $key (@keys)  
         {  
          print "$key: $v{$key}\n";  
         }  
 }  
value 로 sort 하기 (ascending order)
 sub sortByValueSample  
 {  
         # define a hash  
         my %v = (v1 => 75, v2 => 251, v3 => 3, v4 => 12);  
   
         # sort by value and put the keys in an array   
         my @keys = sort {$v{$a} <=> $v{$b}} keys %v;  
           
         # loop through array to print the hash pairs ordered  
         foreach my $key (@keys)  
         {  
          print "$key: $v{$key}\n";  
         }  
 }  
value 로 sort 하기 (descending order)
 sub sortByValueDescendingSample  
 {  
         # define a hash  
         my %v = (v1 => 75, v2 => 251, v3 => 3, v4 => 12);  
   
         # sort by value and put the keys in an array   
         my @keys = sort {$v{$b} <=> $v{$a}} keys %v;  
           
         # loop through array to print the hash pairs ordered  
         foreach my $key (@keys)  
         {  
          print "$key: $v{$key}\n";  
         }  
 }  
레퍼런스 : Perl sort Function
키워드 : 해쉬, dictionary, 사전, 정렬

Wednesday, January 9, 2013

Perl script 자신의 이름 얻어내는 법

command line 에서 타이핑된 Perl command 의 이름을 얻으려면
$0 로 받으면 된다.
 print($0 . "\n");  

Perl 내부에서 bash script 호출하는 법

다음과 같이 하면 된다.
system('ls -l');
키워드 : call, 안쪽, 시스템, 유닉스 명령어, UNIX command

Saturday, January 5, 2013

Perl 의 array pointer 에서 array 멤버 개수 알아내기

last index 는 $#$pa 이므로 여기에 하나 더하면 멤버 개수가 되고
print($#$pa + 1);

scalar 값으로 받아도 된다.
print(scalar(@$pa));

키워드 : element, elmt, number of, count, pointers, list

Perl 에서 array pointer 와 복사

my @a = @$pa;
위와 같이 하면 $pa 가 가리키는 내용물이 모두 @a 로 카피된다.
reference 만 얻어지는 것이 아님.
키워드 : copy

Perl 에서 주어진 path 를 parsing 해서 directory, extension, filename 을 알아내는 방법

다음과 같이 한다.
         use File::Basename;
         my @a = fileparse("/foo/bar/baz.txt", qr/\.[^.]*/);  
         print "dir : $a[1]\n";  
         print "file : $a[0]\n";  
         print "ext : $a[2]\n";  
다음과 같은 함수를 만들어두면 좀더 직관적으로 쓸 수 있다.
 use File::Basename;
 sub filepathParse  
 {  
      my @a = fileparse(shift, qr/\.[^.]*/);  
      return ($a[1], $a[0], $a[2]);  
 }  
검색어 : perl path manipulation, filename
키워드 : pathname, basename, string, filenameOnly
레퍼런스 : http://perldoc.perl.org/File/Basename.html

Perl 의 file test 문

-r File is readable by effective uid/gid.
-w File is writable by effective uid/gid.
-x File is executable by effective uid/gid.
-o File is owned by effective uid.

-R File is readable by real uid/gid.
-W File is writable by real uid/gid.
-X File is executable by real uid/gid.
-O File is owned by real uid.

-e File exists.
-z File has zero size (is empty).
-s File has nonzero size (returns size in bytes).

-f File is a plain file.
-d File is a directory.
-l File is a symbolic link.
-p File is a named pipe (FIFO), or Filehandle is a pipe.
-S File is a socket.
-b File is a block special file.
-c File is a character special file.
-t Filehandle is opened to a tty.

키워드 : flags
How can I check if a file exists in Perl?

UNIX pipes and redirects

The Unix Command Line: Pipes and Redirects ... tr, sort, uniq, comm 으로 사용한 예
 tr 'A-Z' 'a-z' <fnord.txt | tr -cs 'a-z' '\n' | sort | uniq | comm -23 - /usr/share/dict/words  

Pipes and Filters ... cat, wc, sed, awk, grep 으로 사용한 예
 $ cat apple.txt  
 core  
 worm seed  
 jewel  
 $ cat apple.txt | sed -e "s/e/WWW/"  
 corWWW  
 worm sWWWed  
 jWWWwel  
 $ cat apple.txt | sed -e "s/e/J/g"  
 corJ  
 worm sJJd  
 jJwJl  
 $ cat basket.txt  
 Layer1 = cloth  
 Layer2 = strawberries  
 Layer3 = fish  
 Layer4 = chocolate  
 Layer5 = punch cards  
 $ cat basket.txt | awk -F= '{print $1}'  
 Layer1  
 Layer2  
 Layer3  
 Layer4  
 Layer5            
 $ cat basket.txt | awk -F= '{print "HAS: " $2}'  
 HAS: cloth  
 HAS: strawberries  
 HAS: fish  
 HAS: chocolate  
 HAS: punch cards      

Unix - Pipes and Filters ... ls, grep, sort 로 사용한 예
 $ls -l | grep "Aug"  
 -rw-rw-rw-  1 john doc   11008 Aug 6 14:10 ch02  
 -rw-rw-rw-  1 john doc   8515 Aug 6 15:30 ch07  
 -rw-rw-r--  1 john doc   2488 Aug 15 10:51 intro  
 -rw-rw-r--  1 carol doc   1605 Aug 23 07:35 macros  
 $ls -l | grep "Aug" | sort +4n  
 -rw-rw-r-- 1 carol doc   1605 Aug 23 07:35 macros  
 -rw-rw-r-- 1 john doc   2488 Aug 15 10:51 intro  
 -rw-rw-rw- 1 john doc   8515 Aug 6 15:30 ch07  
 -rw-rw-rw- 1 john doc   11008 Aug 6 14:10 ch02  

Bash Reference Manual

Bash Reference Manual

which, whereis

Linux / UNIX: Command Not Found Error and Solution

bash 에서 while 문으로 command line argument 를 loop 하는 법

 for num  
 do  
   echo $num  
 done  
for num; do ...
for num in "$@"; do ... 는 동일.
How to loop through arguments in Bash ($1 $2 $3 and so forth)?

echo 를 newline 안하고 하는 방법

how do I echo $something >> file.txt without carriage return?
Bash Script, no new line for echo command
검색어 : bash echo without newline

bash script 의 while loop

Bash Guide for Beginners - Chapter 9. Repetitive tasks - The while loop
Bash Guide for Beginners - Chapter 9. Repetitive tasks - The for loop

Thursday, January 3, 2013

bash shell 의 if statement

 if [ $# -eq 0 ]  
 then  
      echo " is Zero"  
 else  
      echo " NOT Zero."  
      echo $#  
 fi  
두줄을 한줄에 쓰려면 다음과 같이 한다.
 if [ $# -eq 0 ]; then  
      echo " is Zero"  
 else  
      echo " NOT Zero."  
      echo $#  
 fi  
if [ $# -eq 0 ] 를 if [ $# -eq 0] 와 같이 쓰면 에러가 난다.

Perl 의 substring 함수

 my $a = "ABCDEFG";  
 my $b = substr($a, 2, 4);  
 print "$b\n";  
결과값은 CDEF 와 같이 나온다.
레퍼런스 : Chop, Chomp, Length, and Substring

Tuesday, January 1, 2013

TextWrangler 에서 특정 라인 넘버로 Go to Line 하는 방법

메뉴 : Search > Go to Line
핫키 : Command + J
Preference 세팅 : Editing > Use ‘Hard’ Line Numbering in Soft-Wrapped Text Views 에 체크.
인용 : The Go To Line command honors the “Use ‘Hard’ Line Numbering in Soft-Wrapped Text Views” option in the Editing preference panel.
레퍼런스 : TextWrangler 4.0 User Manual - Bare Bones Software

대소문자 변환

Converting Between Upper and Lower Case
http://perl.about.com/od/perltutorials/a/Perl-String-Manipulation.htm