Wednesday, March 31, 2010

UNIX Shell 에서 파일에 쓰기

http://www.computing.net/answers/unix/write-to-file/2878.html

echo `date` Success > logs.txt
echo `date` Success >> logs.txt

키워드 : Write to Text File

bash String Manipulations 및 Tuesday's Tips for shell scripting

bash String Manipulations

dirname $f
basename $f
basename $f .txt

/home/myplace/a.data.directory
a.filename.txt
a.filename

Tuesday's Tips for shell scripting

셸 스크립트에서 printf 도 가능.
printf "%s\n" $A

다만 다음과 같은 multiline variable은 쓸수 없는듯
MYVAR=`printf "%s\n%s" $A $B`

최근 버전의 bash 에서는 다음과 같이 쓸수 있음

$ echo {1..13}
1 2 3 4 5 6 7 8 9 10 11 12 13

$ echo {z..o}
z y x w v u t s r q p o

랜덤 변수
echo $RANDOM

UNIX Shell의 regular expression과 한글

안되는 경우 메모.

다음은 되는데
cat "A_a"[a-z] > "동영상.avi"

다음은 되지 않는다.
cat "한_a"[a-z] > "동영상.avi"

UNIX Shell의 echo command와 newline

newline 없이 echo 하려면
-n : no newline
echo -n text

newline 을 찍어주려면
-e : enable backslash escapes
echo -e "This is line1\nAnd this is line 2"

AppleScript에서 스트링에 return, space, quote 쉽게 넣는 법

말 그대로, return, quote, space 라고 쓰면 된다.

예)
display dialog quote & "Love" & quote & space & "ME" & return & "HATE" & space & "YOU"

UNIX Shell(bash) 에서 echo off 하는 방법

질문 : AppleScript에서 UNIX shell script 실행시 명령어를 표기하고 싶지 않을 경우, 어떻게 하나?

답 :
stty -echo
하면 된다.

다시 켜려면
stty echo
하면 된다.

Monday, March 29, 2010

'MAC OS X'가 우아한 이유

좋은 글이라 링크 걸어둠 :
'MAC OS X'가 우아한 이유
인용 : 고도로 추상화된 OS 프레임워크 위에 유저의 컴퓨팅 환경을 극대화 해주는것. 그 것이 바로 맥입니다... 만일에 설치 경로가 맘에 들지 않는다면, 그냥 옮겨 주면 됩니다. 그렇게 하더라도, 윈도우의 바로가기 같은 가상본이라는 숏컷이 있지만, 자동으로 경로를 알아서 찾아 가게 됩니다. 만일 프로그램이 지워진다면 가상본은 자동으로 폭파 되는거죠. 프로그램의 이름이 바뀌어도 가상본은 자동으로 업데이트 됩니다. 사용자가 건들일 것은 전혀 없습니다...

UNIX Shell 에서 현재 날짜 얻어내기

질문 : UNIX Shell에서 날짜를 얻어내려면 어떻게 하나?

답 :
date 명령을 쓴다. 그냥 date 만 실행하면
Mon Mar 29 07:14:23 KST 2010
와 같이 나오므로, AppleScript 등이 다루기 쉬운 포맷된 형태로 얻고 싶으면
date "+%Y%m%d"
와 같이 한다. 그러면
20100329
와 같은 결과를 얻을 수 있다.

레퍼런스 : http://en.wikipedia.org/wiki/Date_%28Unix%29

AppleScript에서 셸스크립트 실행할때, 리턴값을 받으려면 어떻게 하나?

질문 :
AppleScript에서 do shell script 수행할 때, 셸스크립트에서 리턴값 받으려면 어떻게 하나?

답 :
do shell script 명령의 리턴값은
셸스크립트에서 echo 명령으로 찍어준 것이 모두 모인 스트링을 받게 된다.
따라서 shell script 끝부분에서 리턴하고자 하는 값을 echo 해주고,
AppleScript 에서는 그 받은 값을 원하는 타입으로 casting 해서 써주면 된다.
(as integer 같은 식으로)

주의점 :
셸스크립트 여러 곳에서 echo 명령을 쓰면, 그들 스트링이 다 concatenate 되어버려서
정확한 리턴값을 받을 수 없다.

키워드 : myFileExists

Sunday, March 28, 2010

AppleScript로 새 text파일 생성하기/ Date/Time 찍기

Creating files and writing to them from AppleScript is a little complicated. It's easier to use AppleScript for what it's really intended for: automating existing applications.
tell application "TextEdit"
activate
make new document
set theDate to current date
set text of document 1 to theDate as text
save document 1 in "/Users/robbie/Desktop/LastUpdate.txt"
end tell
날짜 시간 찍는 방법에 대해 보충:
Or you could use the shell.
do shell script "date > $HOME/Desktop/LastUpdate.txt"
If you want a running record of when the updates were ran do this (double >> )
do shell script "date >> $HOME/Desktop/LastUpdate.txt"
레퍼런스 :
Simple Applescript: Create a .txt file

AppleScript에서 스크립트 짠것을 source 를 공개안하고 실행파일만 배포할수 있나?

질문 :
스크립트를 다른 사람이 못읽게 하려면?
즉 실행 기능만 배포하려면?

답 :
저장시에 Run Only 옵션에 체크하면 된다.
그러나 이렇게 하면 다시는 소스를 볼 수 없으므로 반드시 카피본을 저장해두기 바란다.

Protecting your scripts from being read or changed
To protect your scripts from being read or changed, you can save them as “run-only.” Run-only scripts do not contain the readable text used in editing scripts. This can be useful if you have a script that works well and you don’t want it to be changed.

IMPORTANT:You will not be able to edit this script again if you choose Run Only. If you want to be able to change the script, be sure to save the run-only version as a copy with a different name and retain the original in the standard editable format.

출처 : AppleScript Editor Help > encoding

Saturday, March 27, 2010

AppleScript로 스트링 다루기

AppleScript Essentials Working With Text
by Benjamin S. Waldie
http://www.mactech.com/articles/mactech/Vol.21/21.07/WorkingWithText/index.html
이것이 string 다루는데 관련된 가장 좋은 튜토리얼로 보임.

본문중에서 :
The offset command is included in the String Commands suite in the Standard Additions scripting addition that is installed with Mac OS X.
set theFileName to "filename.jpg"
offset of "." in theFileName
--> 9
레퍼런스 :
last offset of 함수 구현한 것
http://www.alecjacobson.com/weblog/?p=49

AppleScript 의 dialog 에서 여러줄의 메시지를 표시하는 법

다음과 같이 하면 된다.

display dialog "Line 1
Line 2
Line 3"

(Variable에도 이와 같이 개행문자 넣어줄 수 있다.)

또는,
display dialog "Line 1" & return & "Line 2" & return & "Line 3"
하면 된다.

후자의 방법이 코드를 관리하는 데는 더 깔끔하다.

참고할 것 :
AppleScript 에서 스트링에 return, space, quote 쉽게 넣는 법

레퍼런스 : AppleScript dialog - display multiline text in a dialog

키워드 : 개행문자, lines

검색어 : google > applescript dialog newline

AppleScript Drag and Drop Sample

애플스크립트에서 드래그 앤 드롭 하는 방법
Drag and drop AppleScript to convert video
on open these_items 이벤트를 사용

키워드 : drag-and-drop-apple-script-to-convert-video.html

Mac OS X에서 파일 아이콘 바꾸는 법

질문 : 개별 파일의 icon을 바꾸려면 어떻게 하는가?
답 :
Get info 창을 열면 왼쪽 위에 아이콘이 보이는데 그걸 선택하면 아이콘 이미지가 선택되는 것이다.
따라서 다른 파일의 Get info 창에서 이미지를 복사해서 다른 파일의 Get info 창의 이미지로
붙여넣기 할수도 있고 일반 이미지 파일에서 붙여넣기 할수도 있다.

ape, ogg, flac 등을 Mac에서 다루는 툴

사용법은 간단하다. 파일을 어플리케이션에 끌어 넣으면 변환이 된다.
flac 파일과 cue 파일이 있을 때는 cue 파일을 어플리케이션에 끌어 넣도록 한다 (flac 파일을 끌어넣으면 앨범 전체가 하나의 wav 파일이 되지만 cue 파일을 끌어넣으면 트랙별로 wav 파일이 만들어진다).

어플리케이션 설명:
X Lossless Decoder(XLD) is a tool for Mac OS X that is able to decode/convert/play various 'lossless' audio files. The supported audio files can be split into some tracks with cue sheet when decoding. It works on Mac OS X 10.3 and later.

XLD supports the following formats:
* (Ogg) FLAC (.flac/.ogg)
* Monkey's Audio (.ape)
* Wavpack (.wv)
* TTA (.tta)
* Apple Lossless (.m4a) [10.4 and later]
* AIFF, WAV, etc
다운로드 : X Lossless Decoder: Lossless audio decoder for Mac OS X

레퍼런스 :
FLAC (lossless) to iTunes Apple Lossless?
X Lossless Decoder: Lossless audio decoder for Mac OS X
SoundConverter도 좋아보이지만 유료임

UNIX Shell 에서 arguments 다루기

script의 argument 및 argument 수 등 얻어내기
echo "num args : $#"
if [ $# -eq 3 ]; then
echo "arg3:"$3
elif [ $# -eq 2 ]; then
echo "arg2:"$2
else
echo "exception"
fi
설명 :
arguments의 수 : $#
첫번째 argument : $1
argument 가 file path일때 quoted path : "$1"
레퍼런스 :
UNIX Shell 에서 if, elif(else if), else, fi 사용 및 condition 비교문
if...elif...fi condition in Unix

UNIX Shell 에서 if, elif(else if), else, fi 사용 및 condition 비교문

if문 사용법:
echo "num args : $#"
if [ $# -eq 3 ]; then
echo "arg3:"$3
elif [ $# -eq 2 ]; then
echo "arg2:"$2
else
echo "exception"
fi
비교문 :
is equal to: eq
is not equal to: ne
is greater than: gt
is less than: lt
is greater than or equal to: ge
is less than or equal to: le
레퍼런스 : if...elif...fi condition in Unix

TextWrangler 에서 block indentation

질문 : TextWrangler 에서 block indentation 하는 shortcut은?
답 : Command + [, ]
키워드 : hotkey, 핫키, 쇼트컷

UNIX Shell(bash) 에서 filepath 를 directory명과 파일명으로 나누기

filepath=$1

dir=`dirname "$filepath"`
filename=`basename "$filepath"`
filenameonly=${filename%\.*}
ext=${filename##*.}

echo $dir
echo $filename
echo $filenameonly
echo $ext

while loop 조건에 not 조건 넣는 법

while loop 조건에 not 조건 넣는 법
while !([ -f "$FILE" ]);
do
echo "inside loop"
break
done
-> 코드 자체는 별 의미 없음.
[ -f $FILE ] 는 argument 로 주어진 파일이 존재하는지 여부를 알려주고
while loop 은 그 파일이 존재하지 않는 동안 loop 함.

UNIX Shell Script에서 infinite loop

while :
do
# 작업
done
레퍼런스 : Running a script in INFINITE LOOP

UNIX Shell Script에서 여러줄 comment 하는 법

:<<COMMENT
a line in the script.
another line in the script
.
.
yet another line in script.
COMMENT

주의점:
:<<COMMENT와 COMMENT는 indent 하지 말 것.
indent 하면 comment 로 인식이 안되어 오동작한다.

키워드 : multiple lines, 주석

레퍼런스 : http://www.unix.com/shell-programming-scripting/33757-commenting-more-then-1-line.html

파일이 존재하는지 체크

Find out if file /etc/passwd file exists or not
Type the following commands:
$ [ -f /etc/passwd ] && echo "File exists" || echo "File does not exists"
$ [ -f /tmp/fileonetwo ] && echo "File exists" || echo "File does not exists"
Find out if directory /var/logs exists or not
Type the following commands:
$ [ -d /var/logs ] && echo "Directory exists" || echo "Directory does not exists"
$ [ -d /dumper/fack ] && echo "Directory exists" || echo "Directory does not exists"
다음과 같이 짤수 있음.
#!/bin/bash
FILE=$1

if [ -f $FILE ];
then
echo "File $FILE exists"
else
echo "File $FILE does not exists"
fi
키워드 : check, shell

레퍼런스 : Linux/UNIX: Find Out If File Exists With Conditional Expressions

MIME Type 이란 무엇인가?

MIME types

MIME types are widely used in many Internet-related applications, and increasingly elsewhere, although their usage for on-disc type information is rare. These consist of a standardised system of identifiers (managed by IANA) consisting of a type and a sub-type, separated by a slash — for instance, text/html or image/gif. These were originally intended as a way of identifying what type of file was attached to an e-mail, independent of the source and target operating systems. MIME types identify files on BeOS, AmigaOS 4.0 and MorphOS, as well as store unique application signatures for application launching. In AmigaOS and MorphOS the Mime type system works in parallel with Amiga specific Datatype system.

There are problems with the MIME types though; several organisations and people have created their own MIME types without registering them properly with IANA, which makes the use of this standard awkward in some cases.

Thursday, March 25, 2010

AppleScript에서 다른 스크립트를 로드하는 법

AppleScript에서 다른 스크립트를 로드해서 실행하는 법.
이렇게 하면 큰 프로그램을 여러 파일로 쪼개어 관리할 수 있다.
(*
--사용예. 다음과 같이 다른 스크립트를 로드해서
set myScript to myLoadOtherScript("myappCreateFileLib.scpt")
--다음과 같이 사용한다.
set filepath to myScript's myFileOpenDialog()
set newFilepath to myScript's myPrefixAddToFilename("my copy of ", filepath)
myScript's myFileCopy(filepath, newFilepath)
*)
on myLoadOtherScript(scriptLocalpath)
set thisscriptpath to POSIX path of (path to me)
set dirname to do shell script "dirname " & quoted form of thisscriptpath
display dialog dirname
set filepath to dirname & "/" & scriptLocalpath
display dialog filepath
set myScript to load script (filepath as POSIX file)
return myScript
end myLoadOtherScript
레퍼런스 : AppleScript 'path to me' function changed in 10.5 System 10.5
call another applescript
how to divide very large AppleScript?

AppleScript 에서 script 자신의 path 를 알아내는 법

path to me 함수를 쓰면 된다.

사용예 :
set thisscriptpath to POSIX path of (path to me)
set dirname to do shell script "dirname " & quoted form of thisscriptpath
display dialog dirname
좋은 응용예:
AppleScript 에서 다른 스크립트를 로드하는 법

레퍼런스 :
AppleScript 'path to me' function changed in 10.5 System 10.5

Wednesday, March 24, 2010

인터넷에서 받은 이미지 파일의 확장자가 잘못되었거나 없는 것을 correct해주는 AppleScript

다음은, 인터넷에서 받은 Image File이 Extension이 없거나, 잘못되어있는 것을 correct 해주는 script이다.
on adding folder items to myFolder after receiving myFiles
repeat with myFile in myFiles
set myPath to (POSIX path of myFile)
set myType to do shell script "file --mime -br " & (quoted form of myPath)

if myType is "image/jpeg" and myPath does not end with ".jpg" and myPath does not end with ".jpeg" then
set newExtension to ".jpg"
else if myType is "image/gif" and myPath does not end with ".gif" then
set newExtension to ".gif"
else if myType is "image/png" and myPath does not end with ".png" then
set newExtension to ".png"
else
set newExtension to null
end if
tell application "Finder"
if newExtension is not null then
set name of myFile to (name of myFile) & newExtension
end if
end tell
end repeat
end adding folder items to
버그 :
여기에는 버그가 있는데
set myType to mySubstringBetweenFirstDelimiters(myTypeString, "image/", ";")
와 같은 함수를 사용해서 image/jpeg;
와 같은 부분만 추출해야 할 필요가 있다.

레퍼런스 :
http://henrik.nyh.se/2008/11/extension-action -> 설명
http://gist.github.com/27558 -> 소스코드

AppleScript 이용, Photoshop 으로 이미지 파일 열기

Photoshop 으로 이미지 파일 열기
set theImage to choose file with prompt "Please select an image file:"
tell application "Adobe Photoshop CS4"
-- open theImage
open theImage showing dialogs never
end tell

AppleScript에서 Photoshop 이용해서 특정 해상도로 image resize 해주기

포토샵을 이용해, Resolution 을 직접 지정해서 resize 해주는 예:
myResizeImage(200, 100)
on myResizeImage(newWidth, newHeight)
tell application "Adobe Photoshop CS4"
set myDoc to current document
set oldUnits to ruler units of settings
set ruler units of settings to pixel units
tell myDoc
set {w, h} to {width, height}
end tell
resize image myDoc width newWidth height newHeight resample method bicubic sharper
set ruler units of settings to oldUnits
end tell
end myResizeImage

다음은 레퍼런스에 있던 원래 코드. 잘 안된다고 함.
-- ========================
-- Create and save the 20 Mb file
-- ========================
tell application "Adobe Photoshop CS2"
set doc20 to current document
-- Resize to 20 Mb
set oldUnits to ruler units of settings
set ruler units of settings to pixel units
tell doc20
set {w, h} to {width, height}
-- newWidth is calculated based on the following formulas
-- 20Mb = ( 3 * (prct*w) * (prct*h) ) / 1024^2
-- newWidth = prct * w
set newWidth to ((20971520 / (w * h * 3)) ^ 0.5) * w
end tell
resize image doc20 width newWidth resolution 300 resample method bicubic sharper -- Works up to here
set ruler units of settings to inch units
resize image doc20 width oldWidth resample method none -- Errors on this line
set ruler units of settings to oldUnits
end tell
레퍼런스 :
Resize Image in Photoshop

Mac OS X에서 Keyboard로 menu를 activate하는 방법은?



질문 : 마우스 배터리가 떨어져서 키보드로 메뉴를 액세스하려 한다.
윈도우에서는 windows 키를 누르면 되는데, 맥에서는 어떻게 하나?

답 : 맥에서는, Control + F2 를 하면 된다.
(Apple Wireless Keyboard 에서는 Control + Fn + F2 누르면 됨)

키워드 : shortcut, hotkey, 핫키, 쇼트컷, activation, mouse, battery

맥이 Shutdown 되지 않을 경우, 가장 안전하게 끄는 방법

질문 :
키보드도 반응이 없고 셧다운도 되지 않는데,
이럴때는 어떻게 하는 것이 가장 안전하게 끌 수 있는가?

답 :
파워 버튼을 누르면 sleep mode 가 되는데 그 상태에서는 하드가 파킹되므로
그때 전원 익스텐션을 끈다던가 해서 꺼주면 된다.

Tuesday, March 23, 2010

Mac OS X Terminal에서 외장하드 unmount 하는 방법

1. Terminal 에서 df 를 하면 마운트된 모든 disk들이 보인다.



2. 맨 왼쪽에 있는 것이 disk의 full unix name 인데,
3. hdiutil eject [디스크의 full unix name] 과 같이 하면 된다.

예:
hdiutil eject /dev/disk1s1

참고 : mount 명령
옵션 없이 mount 명령을 써도 현재 마운트된 하드들이 보이지만, 알아보기가 힘들다.

참고 : 터미널에서 외장하드 액세스하기
ls /Volumes
명령을 쓰면 현재 사용중인 드라이브 목록을
더 알아보기 쉽게 볼 수 있다.

cd /Volumes
로 들어가서 외장하드에 직접 액세스할 수 있다.

Copy Finder Path to Clipboard

다음과 같은 스크립트를


항상 실행하기 쉽도록 다음과 같이 파인더에 shortcut을 넣어두면 편하다.


레퍼런스 : Copy Finder Path to Clipboard – Tip 1

Mac terminal 또는 AppleScript에서 Screen Resolution 알아내는 방법

다음을 터미널에서 실행하면, width와 height를 각각 얻어낸다.
system_profiler SPDisplaysDataType | awk '/Resolution/{print $2}'
system_profiler SPDisplaysDataType | awk '/Resolution/{print $4}'
애플스크립트에서는 다음과 같이 하면 된다.
on myGetScreenResolutionW()
return (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution/{print $2}'") as integer
end myGetScreenResolutionW

on myGetScreenResolutionH()
return (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution/{print $4}'") as integer
end myGetScreenResolutionH

AppleScript로 Finder띄워 Folder 자동으로 여는 방법

다음과 같이 한다.
property monitor_width : 1680 --set to your display resolution width
property monitor_height : 1050 --set to your display resolution height

set p1 to "/Volumes/DOWNLOADING/_NEW/" --set folder for finder window 1, spaces are okay in folder path
set a to POSIX file p1
set p2 to "/Volumes/Drobo/TV/" --set folder for finder window 2, spaces are okay in folder path
set b to POSIX file p2

tell application "Finder"
activate
tell application "Finder" --remove this tell statement if you don't want all other open finder windows to close automatically
repeat while window 1 exists
close window 1
end repeat
end tell

set this_window to make new Finder window
set the target of this_window to the a
set the bounds of this_window to {100, 50, (monitor_width div 2), (monitor_height div 1)} --edit these setting to change the size of finder window 1
set the current view of this_window to column view --change if you don't want column view

set this_window to make new Finder window
set the target of this_window to the b
set the bounds of this_window to {850, 50, (monitor_width div 1.03), (monitor_height div 1)} --edit these setting to change the size of finder window 2
set the current view of this_window to column view --change if you don't want column view
end tell

여기서는 screen의 resolution을 predefined 값으로 입력했는데, 시스템에서 얻어내는 방법은 여기에 있다.
레퍼런스 :
Quickly and Neatly Open Two Pre-Specified Finder Windows Via Applescript

AppleScript로 Finder 컨트롤하기

AppleScript로 Finder 컨트롤하기
tell application "Finder"
close every window
open home
tell the front Finder window
set toolbar visible to true
set the sidebar width to 135
set the current view to column view
set the bounds to {36, 116, 511, 674}
end tell
open folder "Documents" of home
tell the front Finder window
set toolbar visible to false
set the current view to flow view
set the bounds to {528, 116, 1016, 674}
end tell
select the last finder window
end tell
레퍼런스 :
Using AppleScript to control the Finder, Five AppleScript Tips in Five Days

Monday, March 22, 2010

AppleScript Editor에서 간편하게 값을 찍어볼 수 있는 방법?

AppleScript Editor에서는 디버깅 기능이 없으므로 값을 찍어서
밑의 event log 창에서 보는 기능이 요긴하다.
log "I am a boy"
과 같이 쓰면 되고 밑의 Event Log 창에서 보면 된다.
(복잡한 메시지가 많으면 Events 또는 Result 라고 써진 버튼을 눌러볼 것.
그러면 단순하게 볼 수 있다.)

키워드 : debugging, debugger, log, events, 이벤트 로그
레퍼런스 : http://aurelio.net/doc/as4pp.html

AppleScript에서 message box로 input받기



주의 : text returned 가 없으면 제대로 동작하지 않는다.
레퍼런스 : AppleScript Tutorial: Display Dialog and Returning Values

AppleScript에서 string contatenation 하는 법

질문 : AppleScript에서 string contatenate 하려면?
답 :
set result to stringA & stringB
와 같이 한다.

레퍼런스 :
Concatenate two strings

AppleScript의 loop에서 break 하는 법?

질문 : AppleScript의 loop에서 break 하려면?
답 : repeat 문에서 빠져나오려면 exit repeat 하면 된다.

레퍼런스 :
Using Repeat Loops in AppleScript

Mac OS X에서 Option key 를 이용한 특수문자 입력

주의 :
이 포스트는 윈도우에서는 문자가 깨져나오거나 표기되지 않을 수 있으므로
반드시 맥에서 볼 것

Option + L : ¬
AppleScript 에서 line 을 잇는 역할을 하는 문자이다.

Option + \ : «
Shift 를 함께 누르면 » 가 입력된다.
역시 AppleScript 에서 사용되는 문자이다.

Option + = : ≠
AppleScript 에서 A != B 를 나타낼때 A ≠ B 와 같이 쓴다.
A is not equal B 로 써도 된다.

Option + s : ß
독일어의 ss 발음 나는 기호. 베타 기호같이 생겼다 (병용 가능?)

Option + z : Ω
오메가 기호.

(이 포스트는 아직 미완성.)

Add a 'Go to Parent Folder' button to the toolbar

AppleScript 를 이용한 재미있는 tip 이 있다.
Add a 'Go to Parent Folder' button to the toolbar

다음과 같이 parent directory 로 올라가는 버튼을 추가하는 것.


키워드 : 윈도우, Windows, Mac OS X, Finder, 파인더

맥과 PC를 한 컴퓨터처럼 사용하기

재미있는 제품이 있다.
맥과 PC를 한 컴퓨터처럼 사용하기
하나의 키보드와 마우스로 맥과 피씨를 동시에 제어할수 있는 제품이다.
놀라운 것은, 서로간에 copy and paste도 가능하다는 것이다.

인용 :
클릭손(http://www.clixon.co.kr) VCC(Virtual Console Connection)-400은 두 대의 윈도우, 맥OS 또는 리눅스 컴퓨터를 전용 고속 (100Mbps) 데이터 케이블로 연결하여,
1) 한쪽 컴퓨터에 연결된 키보드와 마우스로 듀얼 모니터 사용하듯이 편리하게 두 컴퓨터를 제어할 수 있게 하며,
2) 드래그-앤-드롭 (Drag-and-Drop) 기능을 이용하여 컴퓨터끼리 서로 쉽게 파일/폴더를 복사할 수 있습니다.(윈도우 컴퓨터끼리만 해당)
3) 또한, 두 컴퓨터의 클립보드 내용을 공유함으로써 파일, 글자, 이미지 등을 한쪽 컴퓨터에서 복사하여 다른 쪽 컴퓨터의 원하는 곳에 쉽게 붙여넣기를 할 수 있습니다.
4) 뿐만 아니라, 한쪽 컴퓨터에 연결된 인터넷 연결을 인터넷에 연결되지 않은 컴퓨터와 공유하여 사용할 수 있게 합니다.
따라서, 두 대의 서로 다른 컴퓨터를 마치 듀얼 모니터가 연결된 한 대의 컴퓨터처럼 두 컴퓨터를 사용할 수 있게 하여 두 대 컴퓨터 사용자의 작업 효율성을 극대화 해주는 제품입니다.

출처 :
http://www.clixon.co.kr
맥과 PC를 한 컴퓨터처럼 사용하기

Sunday, March 21, 2010

AppleScript 연습 : Substring 함수 구현/String을 character의 list로 만들기

다음과 같이 한다.
set the_string to "Megadeth rocks!"
set the_array to {}
repeat 32 times
set end of the_array to ""
end repeat
repeat with i from 1 to (length of the_string)
set item i of the_array to Substring(the_string, i, 1)
end repeat
the_array
----------
on Substring(the_string, start_point, the_length)
return (text start_point thru (start_point + the_length - 1) of the_string)
end Substring
결과 : {"M", "e", "g", "a", "d", "e", "t", "h", " ", "r", "o", "c", "k", "s", "!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""}

참고로, the_array 라고 단순히 쓴 것은 return the_array 와 동일하며
함수의 리턴값을 돌려주는 기능이다. 여기서는 실제로 함수로 쓰이지는 않았다.

인용 : You don't use arrays in AppleScript. The closest thing is list.

레퍼런스 :  Strings and Arrays - how do you fill a string to an array by each letter?

AppleScript의 property 변수

property 로 정의한 variable 은 그 값이 저장되어 있다.
따라서 AppleScript Editor 에서 Command + R 로 거듭 실행하면 그때마다 값이 올라간다.
substitute()
property var : 0
on substitute()
set var to var + 1
return var
end substitute
인용 :
Hi there, with applescript you can declare variables as properties. this means that the value of the variable is not reset every time you restart a script but every time you recompile it. this offers a convenient way to store data.

레퍼런스 :
applescript property declaration
Basic AppleScript information and syntax - built-in basic events

AppleScript에서 variable에 값 주기:set and copy

set 의 예
-- integer (integer numbers)
set x to 5

-- real (real numbers)
set x to 3.57

-- characters (single characters)
set x to "f"

-- strings
set x to "The Hitch-hicker's Guide To The Galaxy"

-- lists (array)
set x to {"foo",2,3.57}
set 와 copy
set 은 reference 를 생성하고 copy 는 값을 카피하는 것이다.
copy "Hello world" to x
간단한 값에서는 차이가 거의 없지만
복잡한 오브젝트에서는 큰 차이가 난다.

레퍼런스 : Basic AppleScript information and syntax

AppleScript에서 Search and Replace 하기

AppleScript에는 regular expression이 없지만, 다음과 같이 search and replace 할수 있다.
display dialog ( my searchAndReplace("my mommy", "my", "your") )

on searchAndReplace( txt, srch, rpl )
set oldtid to AppleScript's text item delimiters
set AppleScript's text item delimiters to {srch}
set temp to every text item of txt
set AppleScript's text item delimiters to {rpl}
set temp to (temp as string)
set AppleScript's text item delimiters to oldtid
return temp
end searchAndReplace

레퍼런스 :
Read and write text files with AppleScript

AppleScript의 Comment

한줄 코멘트
-- This is comment

여러줄 코멘트
(*
This is comment
*)

AppleScript에서의 for loop

for loop은 다음과 같이 사용한다.
set sum to 0
repeat with i from 1 to 5
set sum to sum + i
end repeat
display dialog "The sum of the first five number is " & sum & "." buttons {"OK"} default button 1

레퍼런스 :
repeat 문의 좋은 예는 여기 있다:
AppleScript 연습 : String의 character를 하나하나 list의 멤버로 분리하기

AppleScript에서 List 사용법

List를 만들고 element 를 access 하는 법은 다음과 같다.
AppleScript 의 List 는 0 base가 아니라 1  base 이다.
property theList : {"One", "two"}
showNthItem(1)
showNthItem(2)
on showNthItem(n)
set theItem to (item n of theList) as text
display dialog theItem
end showNthItem
참고로, 위에서 property 변수를 쓴 이유는 showNthItem(n) 이벤트를
사용하였기 때문이다. 예를 들어 property로 정의하지 않고 다음과 같이 하면,
set theList to {"One", "two"}
theList는 showNthItem() 내에서는 scope 때문에 보이지 않기 때문인지
다음과 같은 에러가 난다.
error "The variable theList is not defined."
다음과 같이 하면 property 를 쓰지 않고도 제대로 됨.
set x to {"foo", 2, 3.57}
set theList to {"One", "two"}
set theItem to (item 1 of theList) as text
display dialog theItem
다음은 List에 동적으로 값 넣는 법.
set yourList to {}
set the end of yourList to "111"
set the end of yourList to "2222"
showNthItem(yourList, 1)
showNthItem(yourList, 2)
레퍼런스 :
Getting the List of It

AppleScript에서 Text File Read/Write 하기

AppleScript에서 text File을 읽고 쓰려면 다음과 같이 한다.
on ~ end 는 event 이다. 사용자가 만든 event는 function을 이용한 모듈화와도 같다.
(on run ~ end 같은, built-in event 도 있다(출처))

Text File 읽어서 Dialog Box 에 보여주는 스크립트
set filename to chooseFile()
display dialog readFile(filename)

on chooseFile()
set filechosen to choose file
set filename_ to (filechosen as text)
set filename to POSIX path of filename_
return filename
end chooseFile

on readFile(unixPath)
set foo to (open for access (POSIX file unixPath))
set txt to (read foo for (get eof foo) as «class utf8»)
close access foo
return txt
end readFile
유니코드와 UTF-8
다음과 같이 as «class utf8» 옵션 없이 하면 "Mac OS Roman" encoded 파일밖에 못읽는다.
set txt to (read foo for (get eof foo))
다음과 같이 하면 Utf-16 포맷을 읽을 수 있다.
set txt to (read foo for (get eof foo) as Unicode text)
Text의 모든 paragraph를 list로 분리하여 얻어내기
즉 줄단위로 얻어내는 방법. 다음과 같이 하면 된다.
set filename to chooseFile()
set fileContent to readFile(filename)
set theList to every paragraph of fileContent
set firstItem to (item 1 of theList) as text
display dialog firstItem
UNIX 이용하기
다음과 같이 UNIX를 이용하여 파일을 읽는 방법도 있다.
on readFile( unixPath )
return (do shell script "cat '" & unixPath & "'")
end
레퍼런스 :
Read and write text files with AppleScript
Getting the List of It
Basic AppleScript information and syntax - built-in basic events

AppleScript에서 File Open Dialog Box 스타일로 파일명 얻어내기

choose file 을 사용하면 된다.
choose file AppleScript 로 이미지 리사이즈하는 코드 자동생성하기 에 처음 나왔다.

Prompt 를 함께 주려면 다음과 같이 한다.
set TheFile to (choose file with prompt "Choose a file for Conversion")
set the_posix_file to POSIX path of TheFile
display dialog the_posix_file
텍스트 파일만 얻어내려면
set TheFile to (choose file with prompt "Select the file:" of type {"TEXT"}) as string
display dialog TheFile

AppleScript에서 Desktop path 얻어내기

다음과 같이 하면 desktop 의 path 를 얻어낼 수 있다.
set out_path to path to desktop
set out_path_posix to (POSIX path of out_path & "test")
display dialog ("Desktop path is : " & out_path_posix)

Terminal 또는 AppleScript에서 Spotlight 기능 사용하기

터미널의 mdfind 명령으로 Spotlight 기능을 이용할 수 있다.
다음은 anatomy 라는 글이 들어간 파일을 검색해주는 스크립트.
set the_script to "mdfind 'anatomy'"
set the_text to (do shell script the_script)
set num_records to count of paragraphs in the_text
display dialog ("Number of found : " & num_records)
레퍼런스 :
Understanding mdfind
http://homepage.mac.com/swain/Macinchem/Applescript/AppScript_tut/AppScrip_tut_2/appscript_tut_2.htm

AppleScript에서 Clipboard 사용하기

클립보드 사용예 (한글 모아쓰기를 위해 clipboard 사용해본 예)
set the clipboard to txt -- 한글 모아주기를 위해 클립보드로 옮김
set txt to the clipboard as string -- 한글 모아주기가 완성.
-> 실제 사용할때는 원래 있던 클립보드의 내용을 피신시키는 걸 잊지 말것
http://pc-to-mac-changer.blogspot.com/2011/04/applescript.html 참조

사용예
AppleScript에서 클립보드에 원하는 텍스트를 다음과 같이 넣어줄 수 있다.
다음과 같이 한 후 텍스트 에디터에 paste하면 달력을 텍스트 형식으로 넣게 된다.
set the_text to (do shell script "cal")
set the clipboard to the_text
cal 은 UNIX 커맨드에서 달력을 표시해주는 명령인데,
이것을 이용한 것이다.

AppleScript로 이미지 리사이즈하는 코드 자동생성하기

image file을 resize하거나 rotate 하는 등의 코드는
자동 생성이 되므로 쉽게 짤 수 있다.
set filechosen to choose file
set filename_ to (filechosen as text)
set filename to POSIX path of filename_
까지 입력한 후,

filename 을 선택하고 오른클릭 해서
Image Manipulation > resize
를 선택하면 다음과 같이 코드가 자동 생성된다.
set filechosen to choose file
set filename_ to (filechosen as text)
set filename to POSIX path of filename_

tell application "Image Events"
    set this_image to open filename
    scale this_image to size 400
    save this_image in filename
    close this_image
end tell
다음과 같이 percentage 로 resize 할수도 있다.
scale this_image by factor 0.3

AppleScript에서 file path사용할 때 space 처리하는 법

일반 UNIX와 달리 맥에서는 space가 파일명에 들어가는데, 이를 처리하지 않으면 에러가 나게 된다.
예를 들어 다음과 같이 하면 스페이스가 있는 파일명에서는 에러가 난다.
set ls_result to (do shell script "ls -l " & filename)
display dialog ls_result
따라서 다음과 같이 quoted form 을 써줘야 한다.
set ls_result to (do shell script "ls -l " & quoted form of filename)
display dialog ls_result
예 : 다음을 실행해볼것
set filechosen to choose file
set filename_ to (filechosen as text)
set filename to POSIX path of filename_
display dialog filename
set ls_result to (do shell script "ls -l " & quoted form of filename)
display dialog ls_result

AppleScript에서 dialog box로 파일 선택하기

다음과 같이 하면 된다.
set filechosen to choose file
set filename_ to (filechosen as text)
set filename to POSIX path of filename_
display dialog filename

AppleScript에서 UNIX shell 명령 실행하기

다음과 같이 하면
do shell script "echo $PATH"
AppleScript Editor의 아래쪽에 결과가 나온다.

Terminal에 결과를 띄우려면 다음과 같이 한다.
set the_shell_script to "echo $PATH"
tell application "Terminal"
activate
do script the_shell_script
end tell
activate 는 명시적으로 안해줘도 Terminal이 뜬다.

다음은 ls한 것을 Grep을 사용해서 "Adobe"라는 이름이 들어간 어플리케이션들을
reverse alphabetical order 로 정렬해서 보여주는 스크립트이다.
set a to "Macintosh HD:Applications:"
set p to POSIX path of a
set the_text to (do shell script "ls " & p & "| grep Adobe | sort -r")
display dialog the_text
do shell script 에서는 다음과 같이 결과가 텍스트로 얻어진다.
set the_text to (do shell script "cal")
set the clipboard to the_text
레퍼런스 :
http://homepage.mac.com/swain/Macinchem/Applescript/AppScript_tut/AppScrip_tut_2/appscript_tut_2.htm

AppleScript 쉽게 짜는 법

AppleScript Editor에서 오른버튼 클릭하면 Popup menu 가 나오는데 이걸 선택하면
아래부분에 if.. else 문이라던가
파일들을 다 찾는 for loop 같은 것을 자동으로 생성할 수 있게 되어 있다.

Saturday, March 20, 2010

AppleScript의 File Path 포맷과 UNIX의 POSIX 포맷변환

애플스크립트에서 file path는 :로 구분하지만
유닉스에서는 /로 구분하므로(POSIX방식),
이를 변환해주는 것이 필요하다.

애플스크립트 포맷에서 UNIX포맷으로 변환하기
AppleScript Editor에서 다음 예제를 실행해보자.
set a to "Macintosh HD:Applications:Utilities:" -- Mac file path
set p to POSIX path of a -- Convert to POSIX path
set the_text to (do shell script "ls " & p)
display dialog the_text
기타:
set a to "Macintosh HD:Applications:Utilities:"
대신
set a to ":Applications:Utilities:"
로 해도 된다.
UNIX포맷에서 애플스크립트 포맷으로 변환하기
다음 example도 실행해보자.
set this_file to choose file
set this_file_text to (this_file as text)
display dialog this_file_text
set posix_this_file to POSIX path of this_file
display dialog posix_this_file
set this_file_back to (POSIX file posix_this_file) as string
display dialog this_file_back
보충:
set this_file_back to (POSIX file posix_this_file) as string
대신
set this_file_back to (posix_this_file as POSIX file) as string
로 해도 된다.
레퍼런스:
http://homepage.mac.com/swain/Macinchem/Applescript/page2.html
http://homepage.mac.com/swain/Macinchem/Applescript/AppScript_tut/AppScrip_tut_2/appscript_tut_2.htm

AppleScript 를 공부하고 싶은데, 어떤 tutorial을 보면 좋은가?

질문 : AppleScript 를 공부하고 싶은데, 어떤 자료를 보면 좋은가?
답 : 좋은 튜토리얼들은 다음과 같다.

다음은 화학 관련 분야의 사람이 쓴 튜토리얼인데 설명이 잘돼있다
(뒷부분은 화학 분야에 특화되어 있어서 비추).
Tutorial : AppleScript for Scientists
여기로 가서 맨 위의 Applescript for Scientists Tutorials 를 클릭하면 된다.

Tutorial : AppleScript for Scientists 의 Table of Contents
1 Getting Started
2 Path and Shell
3 Reading, Writing and using Lists
...

다음 튜토리얼도 알기 쉽다.
http://www.atpm.com/9.06/roll.shtml

그리고 다음 튜토리얼은 이미지 관련 스크립트 짜는 법을 설명하고 있는데, 이것도 좋다.
http://www.mactech.com/articles/mactech/Vol.21/21.03/BasicImageManipulation/index.html
AppleScript Essentials-Performing Basic Image Manipulation...Using Your Existing Software!

다음은 파일 읽고 쓰기 등 잘 설명된 튜토리얼
Read and write text files with AppleScript

기타 참고자료:
다음은 위키피디아의 애플스크립트의 개요.
http://en.wikipedia.org/wiki/AppleScript

AppleScript Tutorial: Display Dialog and Returning Values
http://applescripts.thompson-solutions.com/applescript_tutorials_Basic_Advanced.php

AppleScript Tutorial
http://www.tandb.com.au/applescript/tutorial/
http://www.tandb.com.au/applescript/tutorial/03/
Application 을 AppleScript 로 제어하는 것 관련해서 잘 나온것:
http://www.cvc.sunysb.edu/323/AppleScript/AppleScript.html
(즉 윈도우를 닫는다거나 등등)

기타 AppleScript 관련 블로그 및 자료 등
Alec's Web Log
AppleScript for Python Programmers
-> AppleScript 기본이 되면, 이것이 아마 가장 유용한 레퍼런스일 것이다.
http://devdaily.com/
REALbasic City - Introduction to AppleScript

각종 AppleScript 모음. 양은 방대하지만 search에 좀 어려움이 있음
http://macscripter.net/viewforum.php?id=2

AppleScript 관련 개발자 블로그.
hasseg.org

Commands Reference
This chapter describes the commands available to perform actions in AppleScript scripts. For information on how commands work, see “Commands Overview.”
The commands described in this chapter are available to any script—they are either built into the AppleScript language or added to it through the standard scripting additions (described in “Scripting Additions”).
-> display dialog 즉 messagebox 에 대한 내용이 잘 나와 있어서 매우 유용.

이미지를 리사이즈해주는 애플스크립트

일단 링크만 걸어둠 :
Drag-and-drop script to quickly resize any image System

애플스크립트 에디트하는 법 :
애플스크립트는 .scpt 확장자로 저장한 텍스트파일에 저장하면 되는데
.scpt 은 기본적으로 애플스크립트 에디터에서 에디트하게 된다.
이것을 에디터에서 어플리케이션 포맷(.app) 으로 저장해주면,
더블클릭이나 드래그앤 드롭으로 실행 가능한 스크립트가 된다.

레퍼런스 : http://capucapu-blog.blogspot.com/2010/03/blog-post_20.html

Wednesday, March 17, 2010

mpc 파일을 mp3 로 변환하기

질문:
맥에서 mpc 파일을 플레이하고 싶은데, 방법이 없는가?

답:
VLC에서 플레이가 되긴 하지만, 현재 버전에서는 한곡을 재생한후 다운되는 버그가 있다.
따라서 mpc 파일을 aiff 또는 wav 로 convert 하는 방법을 추천한다.
사용하기 좋은 유틸리티로는 mppdec 가 있다 (Terminal에서 실행)

굳이 mp3로 변환하려면 aiff 를 mp3 로 변환하면 되지만,
aiff 로 이미 변환이 되어 있다면 플레이가 잘 되므로 그럴 필요는 없을 것이다.

설명 : mppdec 사용법
mppdec과 mpc 파일들이 같은 폴더에 있다고 가정하고, 다음과 같이 실행하면 된다.
./mppdec --aiff *.mpc .
레퍼런스 :
https://wincent.com/wiki/Converting_MPC_audio_files_to_MP3
http://www.musepack.net/index.php?pg=osx

Sunday, March 14, 2010

Mac OS X에서 .7z 압축파일 풀기

질문 : Mac OS X에서 .7z 와 같이 자주 안쓰이는 압축파일을 풀려면 어떤 유틸리티가 좋은가?

답 : Stuffit Expander를 쓰면 된다.

다운로드 :
http://www.stuffit.com/mac/expander.html

Mac OS X에서 .bin/.cue 어떻게 쓰나

질문 : .bin/.cue 을 맥에서 쓸수 없는데 어떻게 하나?

답 : bchunker (BinChunker) 를 이용해서 .iso 로 변환한다.
다음 링크에서 다운받으면 된다.
Convert .bin + .cue -> .iso on Mac OSX

다음 링크에도 있긴 한데 왜인지 zip 이 안풀림
Convert .bin/.cue to .iso on Mac OSX
BinChunker for OS X

인스톨
다운받아서 압축을 풀면 bchunk 라는 실행파일이 나오는데 이것을 /usr/bin/ 에 넣어준다.

커맨드 라인에서 한다면
sudo cp bchunk /usr/bin/
와 같이 카피해주면 된다.

사용법
다음과 같이 하면 된다.
bchunk myinputfile.bin myinputfile.cue myoutputfile

Troubleshooting
혹시 executable 하지 않으면 다음과 같이 해준다.
sudo chmod a+x /usr/bin/bchunk

Mac 에서 Perl 쓰기

맥 OS X 에는 Perl 이 기본적으로 깔려 있다.
별도로 세팅해줄 것은 없다.

In Unix, how can I replace a single string in a large number of files?
http://kb.iu.edu/data/afrk.html

Introduction to Perl for Mac OS X
http://www.mactech.com/articles/mactech/Vol.18/18.09/PerlforMacOSX/index.html

Friday, March 5, 2010

The disk copy of " " was changed since you last opened or saved it. Do you want to save anyway?

질문 : 포토샵에서 작업중이던 파일을 저장하려고 하면 The disk copy of [파일명] was changed since you last opened or saved it. Do you want to save anyway? 라는 메시지가 자꾸 뜨는데 외부에서는 이 파일을 건드린 적이 없다. 왜 이런가?

답 : 간혹 특별한 이유 없이 이런 문제가 생기는데시스템의 하드가 거의 다 찼거나 시스템이 불안할 경우에 발생하는 것 같다. 이럴 경우 파일을 지워 하드를 비우고 시스템을 재시동해보면 증상이 사라질 것이다. (휴지통도 다 비워야 하는 것을 잊지 말자)