2009년 3월 5일 목요일
2008년 8월 1일 금요일
Unix Domain Socket
port 기반의 Inernet Domain Socket에 비해서 로컬 시스템의 파일시스템을
이용해서 내부프로세스간의 통신을 위해 사용한다는 점이 다르다고 할수 있다.
ls 를 이용해서 통신을 위해서 만들어진 파일을 보면 다음과 같은 모습을
보인다.
[yundream@localhost tmp]$ ls -al
srwx------ 1 root nobody 0 12월 14 21:16 .fam_socket
보면 파일타입에 "s" 가 붙어 있는걸 알수 있으며, 파일사이즈가 0으로 되어 있는
걸 알수 있다. 왜냐하면 FIFO와 마찬가지로 메시지가 파일로 쌓이지 않고
커널로 전달되어서 커널에서 처리하기 때문이다.
파일을 통해서 통신을 하며, 커널내부에서 메시지를 관리한다는 점에서
FIFO와 매우 유사한면을 보여주지만, FIFO와는 달리 양방향 통신이 가능하다는
특징을 가지고 있다. 그러므로 다중의 클라이언트를 받아들이는 서버/클라이언트
모델을 만들기가 매우 쉽다.
또한 Inet 소켓을 통한 외부통신에 비해서 2배 이상의 효율을 보여준다라는
장점을 가지고 있다.
많은 경우 약간 복잡한 내부프로세스간 통신을 해야된다고 했을때 UDS을 많이
사용한다. INET 계층에서의 통신이 TCP/IP 4계층을 모두 거치는것과는
다르게, UDS 은 어플리케이션 계층에서 TCP 계층까지만 메시지가 전달되고,
다시 곧바로 어플리케이션 계층으로 메시지가 올라가게 된다. TCP/IP 계층에 대한
자세한 내용은 TCP/IP 개요(2)를 참고 하기 바란다.
위에서 INET 소켓보다 2배이상의 효율을 가진다고 했는데,
4계층의 레이어를 모두 거쳐야하는 INET 소켓에 비해서 단지 2개의 레이어만
사용한다는 점도 그 이유중 하나로 작용한다.
쏘쓰 코드는 다중연결서버 만들기(1)의 zipcode_multi.c 와
셈플로 알아보는 소켓프로그래밍(1)의 zipcode_cli.c 를 사용하도록할것이다.
예제: zipcode_local.c
1.
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int server_sockfd, client_sockfd;
int state, client_len;
pid_t pid;
FILE *fp;
struct sockaddr_un clientaddr, serveraddr;
char buf[255];
char line[255];
if (argc != 2)
{
printf("Usage : ./zipcode [file_name]\n");
printf("예 : ./zipcode /tmp/mysocket\n");
exit(0);
}
memset(line, '0', 255);
state = 0;
if (access(argv[1], F_OK) == 0)
{
unlink(argv[1]);
}
// 주소 파일을 읽어들인다.
client_len = sizeof(clientaddr);
if((fp = fopen("zipcode.txt", "r")) == NULL)
{
perror("file open error : ");
exit(0);
}
// internet 기반의 스트림 소켓을 만들도록 한다.
if ((server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
{
perror("socket error : ");
exit(0);
}
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, argv[1]);
state = bind(server_sockfd , (struct sockaddr *)&serveraddr,
sizeof(serveraddr));
if (state == -1)
{
perror("bind error : ");
exit(0);
}
state = listen(server_sockfd, 5);
if (state == -1)
{
perror("listen error : ");
exit(0);
}
printf("accept : \n");
while(1)
{
client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,
&client_len);
printf("test test\n");
pid = fork();
if (pid == 0)
{
if (client_sockfd == -1)
{
perror("Accept error : ");
exit(0);
}
while(1)
{
memset(buf, '0', 255);
if (read(client_sockfd, buf, 255) <= 0)
{
close(client_sockfd);
fclose(fp);
exit(0);
}
if (strncmp(buf, "quit",4) == 0)
{
write(client_sockfd, "bye bye\n", 8);
close(client_sockfd);
fclose(fp);
break;
}
while(fgets(line,255,fp) != NULL)
{
if (strstr(line, buf) != NULL)
write(client_sockfd, line, 255);
memset(line, '0', 255);
}
write(client_sockfd, "end", 255);
printf("send end\n");
rewind(fp);
}
}
}
close(client_sockfd);
}
}
다음은 클라이언트 프로그램이다.
예제: zipcode_cli_local.c
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int client_len;
int client_sockfd;
FILE *fp_in;
char buf_in[255];
char buf_get[255];
struct sockaddr_un clientaddr;
if (argc != 2)
{
printf("Usage : ./zipcode_cl [file_name]\n");
printf("예 : ./zipcode_cl /tmp/mysocket\n");
exit(0);
}
client_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (client_sockfd == -1)
{
perror("error : ");
exit(0);
}
bzero(&clientaddr, sizeof(clientaddr));
clientaddr.sun_family = AF_UNIX;
strcpy(clientaddr.sun_path, argv[1]);
client_len = sizeof(clientaddr);
if (connect(client_sockfd, (struct sockaddr *)&clientaddr, client_len) < 0)
{
perror("Connect error: ");
exit(0);
}
while(1)
{
printf("지역이름 입력 : ");
fgets(buf_in, 255,stdin);
buf_in[strlen(buf_in) - 1] = '0';
write(client_sockfd, buf_in, 255);
if (strncmp(buf_in, "quit", 4) == 0)
{
close(client_sockfd);
exit(0);
}
while(1)
{
read(client_sockfd, buf_get, 255);
if (strncmp(buf_get, "end", 3) == 0)
break;
printf("%s", buf_get);
}
}
close(client_sockfd);
exit(0);
}
기존의 INET 버젼의 프로그램과 비교해 보면 고작 3줄 정도만 수정되었음을
알수 있을것이다. 단지 소켓 구조체가 sockaddr_un 으로 바뀌고,
AF_INET 대신 AF_UNIX 를 그리고 port 번호대신에 파일명을 사용했음을
알수 있다.
나머지의 모든 코드는 INET 코드와 완전히 같다. 그러므로
Unix Domain Socket 를 사용하면 Inet Domain Socket 와 코드 일관성을
유지할수 있으며, 동일한 기술을 사용해서 프로그래밍을 할수 있다.
또한 다른 대부분의 IPC 설비들이, 범용적으로 사용하기에는 부족한 여러가지
단점들을 가진반면(단방향 이거나, 읽기만 가능하다거나, 제어하기가 어려운)
UDS는 매우 범용적인 IPC 로써 사용가능하다라는 장점을 가지고 있다.
실제로 X 서버 같은경우에 외부에서의 접근시에는 INET 연결을 내부에서의
연결을 위해서는 UDS 를 사용한다. 이밖에도 mysql, pgsql, KDE, Gnome 과 같은
대부분의 서버프로그램이 내부통신을 위해서 UDS 를 사용한다.
2008년 5월 18일 일요일
[스크랩] VNC Server 설정 방법
우선 vnc를 구성하기 위한 rpm 두개가 필요하다
하나는 서버, 하나는 클라이언트.
vnc-server.rpm
vnc.rpm
rpm명령을 이용하여 위 두개의 파일을 설치하고 vnc서버를 시작하자
#service vncserver restart
서버 상태를 확인하자
#service vncserver status
vnc설정 파일
/etc/sysconfig/vncservers
VNCSERVERS="1:root"
VNCSERVERS[1]="-geometry 800x600"
설정파일 내용
위의 1:root 부분에서 1은 디스플레이 번호를 의미하며 root는 계정명을 나타낸다.
VNCSERVERS[1]="-geometry 800x600"은 1번 디스플레이 번호에 대한 해상도를 설정하는 것이다. 사용자가 많아서 디스플레이 번호가 2, 3, 4식으로 증가하면 ‘[‘와 ‘]‘사이의 숫자를 변경하여 설정하면 된다.
처음에 vnc서버를 시작하면 서버가 작동이 안되는데 그 이유는 vnc서버 사용자 root가 암호를 필요로 하기 때문이다.
암호를 만들기 위해서 다음의 과정을 따라하자
#cd ~
#mkdir .vnc
#cd .vnc
#vncpasswd ‘패스워드입력’
이제 다시 vnc서비스를 재시작하자
그러면 /root/.vnc 디렉토리 밑에 xstartup파일이 생성될 것이다
[tip1] 이제 밑의 vnc 클라이언트를 이용하여 vnc서버에 접속을 하면은 xwindow를 사용하여 자신만의 윈도우 매니저를 사용한다면 해당하는 윈도우 매니저가 안나오고 기본적인 twm이 시작할 것이다. 자신이 사용하고자 하는 윈도우 매니저가 나타나기를 원할 경우에는 $HOME/.vnc/xstartup 파일에서
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc
부분의 ‘#’을 지워서 주석을 제거해준다.
[tip2] 루트는 vnc사용자에게 사용할 수 있도록 /etc/sysconfig/vncserver 파일을 설정하고 사용자는 자신의 홈디렉토리에 .vnc디렉토리를 만들고 vncpasswd 명령으로 passwd파일을 만들어야 한다.
ex) /etc/sysconfig/vncserver
VNCSERVERS="1:root 2:test 3:test2"
VNCSERVERS[1]="-geometry 800x600"
VNCSERVERS[2]="-geometry 800x600"
VNCSERVERS[3]="-geometry 800x600"
ex)일반 사용자들의 홈디렉토리에서 패스워드 설정하는 방법
$cd ~
$mkdir .vnc
$cd .vnc
$vncpasswd
Password: 패스워드 입력(6자 이상)
Verify: 패스워드 입력 확인
위의 과정에서 $HOME/.vnc 디렉토리에 passwd파일이 만들어진다.
$ls $HOME/.vnc/
passwd
2. VNC 클라이언트 사용하기
#vncviewer ip-address:디스플레이번호
#vncviewer 211.250.1.2:1
윈도우용 vnc서버, 클라이언트는 www.tightvnc.com에 가면 다운로드 메뉴에서 찾을 수 있다.
윈도우 explorer에서 vncserver에 접속하는 방법
http://ip-address:5800+display-number
ex)http://191.111.1.1:5801 <-1번 디스플레이번호를 쓰는 루트의 접속
※ 출처 : written by o-gyun jeong 595912@hanmail.net
2008년 5월 13일 화요일
[스크랩] VirtualBox에서 Guest Windows XP USB 인식 문제 해결 방법
virtualbox 설치시 주의해야 할 것
1. 설치 후 <시스템 - 사용자와 그룹>에서 자신의 계정 그룹관리에 들어가면 제일 밑에 vboxusers라는 그룹이있다. 속성에서 자신의 계정을 추가 시켜준다.
2. vbox 모듈 setup
/etc/init.d/vboxdrv setup
3. usb 인식 문제 해결법
sudo gedit /etc/init.d/mountdevsubfs.sh
다음 4개부분의 주석을 지워줍니다... # 이걸 삭제
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#n -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb
다음으로 터미널 창에
sudo gedit /etc/udev/rules.d/40-permissions.rules
입력 후
# USB devices (usbfs replacement)
SUBSYSTEM=="usb_device", MODE="0664"
위의 부분을 밑에 처럼 바꿔 주면된다.. 664를 665로
# USB devices (usbfs replacement)
SUBSYSTEM=="usb_device", MODE="0666"
아래는 -------------------------------------- http://kldp.org/node/87542 발췌
이런 메세지가 뜨면
1. 터미널 창을 열어 아래 명령어를 친다
2. 편집창이 열리면 글 제일 아래에 다음의 글귀를 추가합니다.
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0
3. 재부팅 하고 VirtualBox를 실행 시킨 후 자신이 원하는 USB를 선택하면 인식이 올바르게 됩니다
재부팅까지 했으면 virtualbox에서 usb장치를 설정할 수 있다. 이때 usb키보드는 연결안하는 것이 좋다. 자동으로 인식
가상머신 설정에 가면 usb장치메뉴가 있는데 거기서 사용하려는 장치를 추가시킨 후에
가상머신을 시작하면된다.
iPhone을 기다려야 할지 아니면 Windows Mobile 기반 스마트폰으로 가야할지..
마음같아서는 iPhone을 그냥 기다려 보고 싶지만.
국내 이동통신사를 도저히 믿을 수가 없다.
LGT Oz 정도의 요금제라면 써보고 싶지만
그렇지 않다면...... 생각하기도 싫다.. ㅠ.ㅠ
우선은 가지고 있는 PDA로 일반적인 메일보기,
웹서핑, 일정관리에 어느정도의 Traffic이 발생하는지..
WM에서 iPhone 대비 얼마나 편리한지
시험해 봐야 할 것 같다.
2008년 5월 7일 수요일
[스크랩] Structure packing with the GNU C Compiler
The GNU C compiler does not support the #pragma directives. In particular it does not support the "#pragma pack" directive. So when using the GNU C compiler, you can ensure structure packing in one of two ways
- Define the structure appropriately so that it is intrinsically packed. This is hard to do and requires an understanding of how the compiler behaves with respect to alignment on the target machine. Also it is hard to maintain.
- Use the "packed" attribute against the members of a structure. This attribute mechanism is an extension to the GNU C compiler. An example of how you would do this is below.
struct test
{
unsigned char field1 __attribute__((__packed__));
unsigned short field2 __attribute__((__packed__));
unsigned long field3 __attribute__((__packed__));
} var1, var2;
Note the use of the keyword "__attribute__" with the attribute "__packed__" within the double brackets (before the terminating semicolon of each member variable declaration).
An alternate way of doing the above is as below.
struct test
{
unsigned char field1;
unsigned short field2;
unsigned long field3;
} __attribute__((__packed__));
typedef struct test test_t;
test_t var1, var2;
This will ensure that all members of the structure are packed. Note that this doesn't seem to work right if you try to combine the typedef and the struct definition or if you combine variable declarations with the structure definition.
2008년 5월 2일 금요일
[스크랩] Linux에서 ISO Image Mount하는 방법
You can mount ISO images via the loop device. It is possible to specify transfer functions (for encryption/decryption or other purposes) using loop device.
But how to mount ISO image under Linux? You need to use mount command as follows:
Procedure to mount ISO images under Linux
1) You must login as a root user, if not root user then switch to root user using following command:
$ su -
2) Create the directory aka mount point:
# mkdir -p /mnt/disk
3) Use mount command as follows (assumes that your ISO file name is disk1.iso):
# mount -o loop disk1.iso /mnt/disk
4) Change directory to list it:
# cd /mnt/disk
# ls -l
See also:
* Allow normal user to mount linux partitions, usb stick/pen device
* Allow non-root user to write CDs
Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or full RSS feed to get all updates. You can Email this page to a friend.
2008년 5월 1일 목요일
[스크랩] Run Windows Apps Seamlessly Inside Linux
원본 URL:
Run Windows Apps Seamlessly Inside Linux
You love working inside your Linux desktop, but at the most inconvenient times you've got to reboot into Windows—whether to open a tricky Office file, try out a Windows application, or even just play a quick game. However, with some free tools and a Windows installation disk, you can have Windows apps running right on your Linux desktop and sharing the same desktop files. It's relatively painless, it takes only a little bit longer than a Windows XP install, and it works just like virtualizing Windows on a Mac with Parallels Coherence—except it's free. Here's how to set up Windows inside VirtualBox, and then get Windows apps running seamlessly inside your desktop.
Before getting started, make sure you have enough space on a hard drive for a Windows XP installation (meaning at least 5 GB) and enough memory to make two systems worthwhile.You can follow most of these steps if you want to try running Vista inside Linux, but your mileage might vary, of course (and check out this tip on making Vista's networking work).
If you're curious what the end result might look like, here's a screenshot from my quick installation. I would've loved to have gotten iTunes running, but I didn't have time to wait for all the post-XP-installation patches/upgrades to install to show you. (Click for larger image)
First off, we'll install VirtualBox. For most, that just involves heading to their package manager and installing all the virtualbox pacakges from the repositories; in Ubuntu 7.10 ("Gutsy Gibbon"), for example, you can use this terminal command
sudo aptitude install virtualbox-ose virtualbox-ose-modules-generic
If you don't see VirtualBox in your installation program, the app's downloads page has packages for just about every major distribution. After installing, give your username permissions to run VirtualBox (substituting "su" on some systems):
sudo usermod -G vboxusers -a [your username]
Restart your system for good measure, and now you should see "InnoTek VirtualBox" in your application menu—it was in "System Tools' in Gutsy. Get your XP CD ready and fire up VirtualBox. Choose "New" from the button menu, and then give your virtual system a name (WIndows XP usually works for me) and choose "Windows XP" from the bottom menu, then hit "Next." Decide how much RAM you'll dedicate to it in the next window, hit "Next," then, assuming you haven't done this before, hit "New" and follow the prompts to set up hard drive space for your virtual XP system. Make sure that partition is selected, hit "Next," then hit "Finish" to set up your new XP space.
Back at VirtualBox's main screen, see if the "CD/DVD-ROM" menu is highlighted. If not, click it, and then check "Mount CD/DVD Drive," "Host CD/DVD Drive" (and make sure it points to your system's CD drive), and check yes for "Enable Passthrough." Hit OK, select your XP image from the left-hand column and hit "Start." You'll launch into the hopefully familiar XP installation routine; follow it through until you're at your Windows desktop.
Now you've got a working Windows inside a resizable box, but let's take this further. Remove your XP CD from the drive, head up to the "Devices" menu and choose "Unmount CD/DVD-ROM." In the same menu, choose "Install Guest Additions." VirtualBox should prompt you to download the Guest Additions ISO file, then select it to be mounted. This creates a virtual CD drive in XP, which you can get to through Start Menu->My Computer (it might take a moment to show up). Double-click the "CD drive" and follow the prompts to install the extra tools. Reboot once you're done for good measure, and restart the XP machine.
Once that's finished, you've got a "Seamless" option available in the "Machine" menu, or by holding down the "Host" key (Right Control by default) and hitting "L." Either way you run it, it drops the big window and deposits Windows' bottom taskbar on your Linux desktop. You can also ditch the main VirtualBox window at this point, if you'd prefer.
The Start panel's default bottom position can be a problem for GNOME-based systems, since you've already got an app-switching bar there. I recommend either moving your Start or GNOME menus to the left or right-hand sides, or setting your Start menu to double-height, which puts the Start button just above the GNOME bar. Either way, make sure you un-check the "Keep the taskbar on top of other windows" option on the Windows toolbar, or you might see a few graphical glitches. Otherwise, pretty neat, huh?
Now for the final piece: Synchronizing your Windows and Linux desktops. If you're running in Seamless mode, hold down the "Host" key and hit "Home" to bring back the virtual XP desktop. Select the "Device" menu and choose "Shared Folders." You'll be prompted to choose a folder from your Linux system; select your Desktop folder (usually found at /home/your username/Desktop). Head back to Windows, launch a command prompt (enter "cmd" into the "Run" dialog), and enter the following:
-
net use x: \\vboxsvr\Desktop
If it worked, you should see an X: network drive mounted in your "My Computer" window.
Now for the final touch: Synchronizing the two desktops. In XP, hit the "Run" dialog and type in "regedit." Make a backup first (File->Export), and then navigate to HKEY_CURRENT_USER -> Software -> Microsoft -> Windows -> CurrentVersion -> Explorer -> User Shell Folders. Double-click to open the properties on the "Desktop" key you'll find there, and enter a new value of (without the quotes) "x:". You should see the change immediately—everything you put on your Linux desktop is shown in Windows and vice versa—handy for storing downloads grabbed in Windows.
If you'd rather do without the Start menu/panel integration and just want a few custom apps to open in their own windows, check out a helpful guide at Linux.com to getting this set up with some free tools and VMWare Server, which, while not quite as user-friendly as VirtualBox, is still a pretty nice package.
Got your own Windows-inside-Linux set-ups (besides Wine, which is another thing entirely) you feel like sharing? Have any suggestions/tweaks to this step-by-step? Share it in the comments and help two disparate operating systems find some harmony.
Kevin Purdy, associate editor at Lifehacker.com, is looking for ways to spend the precious minutes he'll save every day by sticking (mostly) to one OS. His weekly feature, Open Sourcery, appears every Friday on Lifehacker.
2008년 4월 30일 수요일
[스크랩] Gmail Tips
원본 URL: http://www.work.caltech.edu/ling/tips/gmail.html
Gmail Tips
- Secure Gmail
- Gmail Loader Enhanced
- Logical Operations in Gmail Search
- Periods and Pluses in Usernames
Secure Gmail
Gmail offers an SSL-encrypted login (https) by default. After login, it switches back to the insecure http. Users of Mozilla Firefox can install the Secure Gmail script * to ensure Gmail uses the secure connection. Alternatively, try the CustomizeGoogle extension.
* You need the wonderful Greasemonkey extension for Firefox. See also Firefox tips.
Gmail Loader Enhanced
GMail Loader (GML)
is a utility designed by Mark Lyon that can upload your (old) emails into Google's Gmail. As wonderful as it is, it suffers from two main problems.
- If during the uploading process Google resets the SMTP connection for some reason, GML doesn't resend the interrupted emails. You have to pick them out later, manually, and resend them, which is annoying.
- Gmail is famous for organizing emails into tidy conversations. The emails in a conversation are usually sorted by their received time. For instance, if both you and your friend reply to a conversation and Google gets your email first, your email will be listed earlier than your friend's, even if your friend might have sent the email earlier than you. This ordering rule is also in effect when uploading old emails. If emails are stored in a random order in your mailbox, they also appear
randomly
in the Gmail conversation.
To fix these two problems as well as some minor ones, I modified the source code provided by Mark. The modified source code can be found here: Please don't ask me for a Windows EXE version -- I don't know how to compile Python codes on Windows.
I have already sent patches to Mark. Before he releases his next version, I will host my version in case others need it.
Here are explanations to my modifications: [showhide]
- Sort emails according to the
Date
field.
Emails in a gmail conversation are usually sorted by their received time. If emails are stored unsorted in the mailbox (which might happen when you move emails around different folders, say, in Mozilla), they will not appear chronologically within a conversation. This is not nice. So I added a step to sort emails before sending them. The time, including the time zone information, is converted usinggetdate_tzandmktime_tz, the latter was copied from Python's rfc822 package. - Resend emails if a failure happens.
Gmail server is busy. Sometimes it resets the connections just because its load is too high. If this happens, we have to pick out failed emails and resend them later, which is annoying. So I modified the code to let GML automatically resend the email if a failure happens. However, I was lazy to check the failure type---if the failure is unrecoverable, say, wrong attachment type, the resend will give up after 9 times. - Give
Date
information when failure.
I found that when I had many emails in a mailbox, it is very difficult to locate the erroneous emails when I only know the senders. So I put theDate
also in the error output.
Logical Operations in Gmail Search
When searching in Gmail, you can use logical operations like AND
, OR
, and/or NOT
to make your search more accurate.
- AND: Use nothing or capitalized "AND".
-
To search emails containing terrorist and Bush, use terrorist Bush or terrorist and Bush.
- OR: Use braces (
{
and}
) or capitalized "OR". -
To search emails from Bush or Chimp, use From: {Bush Chimp} or From: (Bush OR Chimp).
- NOT: Use hyphen (
-
) before the excluded string. -
Say you have created the labels
Smart
,Good
, andBush
. To search emails with labelsSmart
andGood
but notBush
, use label:smart label:good -label:bush. - Grouping: Use parentheses (
(
and)
). -
To search emails having
party
, or bothhiking
andSunday
, use {party (hiking Sunday)} or party OR (hiking Sunday).
Periods and Pluses in Usernames
Periods (.) in Gmail usernames are not important. For example, first.last@gmail.com or firstlast@gmail.com are actually the same. Try to send emails to your own Gmail address with and without periods and you will get all of them.
The +detail suffix can also be used with your Gmail username. For example, if your gmail username is yourname, you can use yourname+someweb@gmail.com with some web registration. When you see spam emails through this address, you will know that it was someweb
that discloses your contact information.
[스크랩] Jajah 버튼으로 블로그에 전화를 달자
원본 URL: Jajah 버튼으로 블로그에 전화를 달자
Web-Activated Telephony를 표방하는 Jajah에서도 드디어 블로그를 비롯한 소셜네트워킹 서비스에 바로 전화를 걸 수 있는 jajah Button 서비스를 오픈했다. 이 서비스가 오픈되기 전에는 jajah 서비스를 이용하기 위해서는 홈페이지를 방문해야 했는데, Jajah Button 서비스를 통해 자신의 블로그 또는 웹페이지에 방문자가 자신에게 바로 전화를 걸 수 있는 버튼을 만들 수 있는 방법이 생긴 것이다.
이 것은 지난 번에 본 VoIP on Web2.0에서 소셜네트워킹서비스(SNS: Social Networking Service)에 자신의 번호를 공개하지 않고 방문자로부터 실시간 음성으로 통신할 수 있는 방법에 대한 것과 일맥상통하는데, Jajah에서도 본격적으로 SNS VoIP 시장에 뛰어들었다고 보는 것이 맞는 듯 하다.
필자도 아래와 같이 직접 버튼을 만들어봤는데, 지금까지 본 블로그에서 이야기했던 Availability(통화가능시간)이 적용된 첫 서비스로 보인다.
이건 플래쉬로 만든 것으로 이 버튼 내에서 모든 서비스를 해결할 수 있다.
이것은 이미지인데, 해당 버튼을 클릭하면 아래 링크의 웹페이지로 이동해서 서비스를 이용할 수 있다.
위 링크는 HTML 코드를 삽입할 수 없는 곳에 이용할 수 있는데, 웹페이지로 이동해서 바로 전화를 할 수 있다.
위 의 링크를 자신의 블로그/웹페이지에 달기 위해서는 Jajah에 회원가입을 해야 한다. 회원가입 후 로그인을 하면 아래와 같이 나오는데, My Jajah Button 탭을 선택한 후 Create a new Jajah Button을 누른다.
아 래는 버튼의 형식 및 크기/언어 등을 선택할 수 있는 옵션이다. 위에서 살펴본대로 Flash/Image/Link의 형식을 선택할 수 있으며, Flash의 경우 크기를 지정할 수 있다. 마지막으로 언어를 선택하는데 현재 한국어도 지원하고 있다.
아 래는 웹버튼을 게시하는 사람의 전화번호 및 통화가능시간을 설정하는 화면이다. Jajah에 회원가입할 때 자신의 번호를 집/회사/이동전화 등 세가지를 입력할 수 있는데 여기서 그 중 하나를 정한다. 통화 가능 시간 및 통화가능 요일까지 정할 수가 있어서 낯선 방문자로부터 오는 통화를 게시자가 나름대로 제어가 가능하다. 이 기능은 지난 번에 살펴봤던 Skype Me 버튼이나 Jaxtr 등에서는 아직 제공하지 않는 것으로, 게시자의 Privacy를 최대한 보장해주는 장점이 있다.
아래 옵션은 전화를 거는 사람에 대한 제한 정책인데, Jajah의 과금정책과 관련이 깊다. Jajah의 경우 다소 복잡한 요금 구조를 가지고 있고 전화를 거는 사람이 돈을 내는 구조이다. 즉, Jajah버튼을 다는 사람은 전화를 받는 입장이기 때문에 거는 사람의 입장을 고려해서 셋팅을 할 수 있도록 되어 있는 것이다. 예를 들어 한국유선에서 한국 무선(필자는 현재 모바일로 해 둔 상태이다)으로 전화를 거는 경우에는 24.9센트가 과금된다. 한국유선에서 유선으로 전화를 걸고 모두가 Jajah유저라면 공짜 통화를 할 수 있다. 블로그를 방문해서 전화를 거는 사람에게 게시자의 전화번호(유무선유무, 국가 등)가 공개되지 않기 때문에 발신자를 배려하는 차원에서 착신자가 이런 옵션을 설정할 수 있도록 해 둔 것으로 보인다.
위 글이 잘못 되었군요..Jajah의 일반 서비스는 거는 쪽(발신자)가 돈을 내는데, 이번에 론칭한 Jajah Button의 경우 착신자(게시자)가 돈을 내는 구조이다. 위 설명 내용 중 요금과 관련된 부분은 맞는데.. 돈을 내는 주체가 게시자이기 때문에 아래와 같은 옵션을 통해 통제를 하는 것으로 보인다. 돈을 내는 주체 부분에 대한 명확한 설명이 없어서 잘못 설명되었다. 다른 분이 제 블로그에 달린 버튼을 통해 전화를 주신 덕에 빨리 발견하게 되었군요..
위 과정이 모두 끝나면 블로그에 삽입할 수 있는 HTML 코드를 얻을 수가 있고, 원하는 곳에 버튼을 게시해두면 블로그 방문자로부터 전화를 받을 수 있게 되는 것이다. 일단 필자도 이 글 외에 본 블로그 우측 사이드바 상단에 버튼을 게시해뒀는데, 혹시 궁금한 점이 있으면 전화 걸어 주시기 바란다.
Jaxtr가 Facebook에 서비스를 오픈한지 꽤 된걸 감안한다면 jajah button 서비스 출시는 늦은 감이 없지 않지만, 이전에 나온 SNS를 겨냥한 VoIP 서비스에 비해 진일보한 것으로 평가된다. 특히 발신자의 요금 부담을 고려하고, 버튼 게시자의 프라이버시를 보호하려는 노력은 향후 모든 사업자의 귀감이 될 것으로 예상된다.
본 블로그내의 VoIP to SNS와 관련된 글은 아래를 참고하시기 바란다.
Technorati 태그: VoIP , SNS , Jajah , Jajah button , blog , Skype , Jaxtr , jangl
2008년 4월 28일 월요일
[스크랩] Outlook에 저장된 메일을 gmail로 Import 하는 방법
How to Import Archived Outlook Email Into GMail Using GML
You want to switch completely to Gmail, but you want all your email in one place? Gmail's robust searching functionality is a great feature, but only if you can search through all your email in one place and not just the email you have received since you switched. Follow these instructions to import your archived or saved email from Outlook into your Gmail account.
Note: This method is now no longer necessary since GMail has an IMAP interface. Here is a good guide for importing all mail from Lotus notes, Outlook, Pine, Thunderbird, and Outlook Express into Gmail.
Simplest method IMO I think I've found an even simpler way to get my old email into Gmail that does NOT entail installing all kinds of apps and servers to move mail around and jump through multiple steps. All it entails is having an IMAP capable email client. Try this method instead.
[edit] Steps
- Import your Outlook mailbox into Microsoft Outlook Express. Open Outlook, then open Outlook Express. In Outlook Express, select Tools > Import, and instruct it to import Mail from Outlook.
- Download and install Mozilla Thunderbird, an open source replacement for Outlook from the people who make Firefox. Be sure during the installation process to have Thunderbird import your mail from Outlook Express. Installing Thunderbird allows extraction of your old mail from Microsoft's proprietary (and difficult) PST file format into a more open mBox file. While Thunderbird offers the option to import mail directly from Microsoft Outlook, the data is less likely to get corrupted if you add the intermediate step of importing to Outlook Express.
- Download and install the free, open source program Google GMail Loader (GML) by Mark Lyon. (please note Google does not like it when people run scripts on their accounts - so be careful)- here is an alternative method.
-
- Open GML loader.
- Select the find button under Configure Your Email File, and browse your hard drive to locate the mail file for Thunderbird. To locate your Profile folder, follow these instructions from Mozilla. Note if the Application Data file does not appear where it is supposed to, open the folder it should be located in and instruct Windows to display hidden files. It should now appear.
- Select and highlight the individual folder of mail you wish to import into GMail. Note: each mail folder appears twice - once with extension .msf and once without an extension. Select the item without an extension.
- Open your GMail account and, if possible, clean out your inbox. All the archived mail you import will come into your inbox. Once it does, you will want to select it all and archive it. It will be much simpler to do this without archiving emails you don't want archived if you clean out your email box. Alternatively, you can tag all current emails with a tag, so they can be easily located in the archives and returned to the inbox later.
- Choose the File Type in GML. There are two options for mBox files. If you try with the more strict option and GML finds 0 messages in your file, change to the Less Strict mBox option on File Type and try again.
- Choose the message type. Messages imported from your Sent Items folder can be sent to the Sent Items folder in GMail. However, they will also appear in your inbox, where you will then want to delete them. All other messages will be sent to the inbox, and from there you can select them and archive them.
- Enter your GMail address.
- Fill in the correct SMTP server name: the program defaults with a google SMTP server, but according to the software developer this default name does not work. See instructions on the Google Gmail Loader site.
- Click the Send to GMail button in GML and monitor the send process. If you have thousands of emails, it could take hours to import.
- Open your GMail account and review the progress as GML imports your messages.
- As your messages are being imported, they can be archived from the inbox (or deleted from the inbox for Sent Mail only). To archive, click the All link in Gmail to select all, then press Y to Archive. (Keyboard shortcuts must be turned on from your Settings menu). This will archive the 50 most recent messages. Repeat until all messages have been archived. If you are processing sent mail, a copy has been placed directly into your Sent Mail folder, so you can select All and then click the Delete button to delete the most recent 50.
[edit] Tips
- Instead of cleaning out all current emails before the import, set a new filter to tag all new incoming mails from the SMTP mail address.
- Break your Outlook email folders into ones with approximately 1,000 messages each. Occasionally GML Loader hangs in the middle of a folder, if it's a smaller folder it's much faster to reload it.
- If you load the same message twice, GMail only stores it once. So if you restart GML Loader with a file you have sent before because it got interrupted, GMail will only store the new mail you upload.
[edit] Warnings
- Unfortunately, this process changes the time information. The timestamp in the inbox will be the time the message was received by Google. Inside the message, the original date will be displayed. You can search for parts of dates to retrieve matching messages. "Aug 94", for instance, will show you all messages from August of 1994.
- A method that lets you keep your time stamps documented on Ben Shoemate's website. link
- If the displayed times are important, you could (1) temporarily set up a mail server with POP3 and IMAP protocols (such as Macallan Mail Solution Mail Server) on your computer, (2) drag and drop mails from archive folders into the mailbox using any mail client that supports IMAP, and (3) connect to the mailbox from GMail using the POP3 protocol to download the mails. This will retain the date stamps, although it needs you to be a bit more tech savvy and have an ISP that will allow the traffic.
- GMail Loader is not sanctioned by Google and in theory may result in the suspension of your Gmail account. However, there have been no actual reports of suspensions.
[edit] Things You'll Need
- GMail account
- Mozilla Thunderbird
- Google GMail Loader
[edit] Related wikiHows
- How to Configure Web Clips for a Gmail Account
- How to Switch from Yahoo Mail to Gmail
- How to Switch from Hotmail to Gmail
[edit] Sources and Citations
2008년 4월 25일 금요일
Open Office를 사용하다
예전에 Free Office 프로그램으로 처음 나온 Start Office를 사용해 본 적이 있었다. Microsoft Office가 거의 독점하고 있던 시장상황도 그렇지만 공개 소프트웨어가 따라가기 정말 힘든 MS Office의 방대한 기능에 크게 기대하지 않고 프로그램을 설치했고 결과는 역시나 단 하루도 내 하드디스크를 차지하지 못하고 삭제되고 말았다.
그로부터 꽤 오랜 시간이 지난 것 같다. 구글을 사용하기 시작하면서 구글 오피스를 접하게 되었다. 기능상으로는 제법 기본적인 기능들을 잘 구현하고 있었고 화려한 기능을 제외한 기본적인 데이터를 보는데는 무리가 없었다. 오히려 MS Office를 만든 Microsoft가 직접 만든 Windows Mobile용 Office보다는 안정성이나 기능면에서 나아 보였다. 하지만 역시나 웹 응용의 제약이랄까 조금만 큰 문서를 열어도 브라우저가 버벅거리면서 스크립트를 중지하겠냐는 메시지가 뜬다. 어땠건 Free Office 프로그램에 대한 관심을 다시 가지게 되었고 Open Office를 다운로드하여 설치하게 되었다.
첫 느낌은 역시 화려한 MS Office에 비하면 약간은 초라한 조금은 투박해 보이는 느낌이 든다. 하지만 예전의 Star Office에 비해서는 장족의 발전이라 할까. 공개소프트웨어로는 보이지 않는다. 아래아 한글이나 훈민정음같은 토종 Office 프로그램에 비해서는 오히려 세련되어 보인다. 상세한 기능이나 성능에 대해서는 아직 잘 모르겠지만 개인적인 UI의 선호도 측면에서는 국산 Office 프로그램에 비해서는 낫게 느껴졌다.
대충의 UI를 살펴 본 후에는 실제 업무에서 사용하던 Word, Excel, Power Point 문서를 열어보았다. 아무런 문제없이 열 수 있고 실제 업무에서 MS 제품을 대체해 사용하는데 지장이 없어 보인다. 이는 내가 근무하는 사무실에서는 MS Office의 Visual Basic for Application 기능을 전혀 사용하지 않고 완벽한 변환 플러그인과기본적인 Drawing, 수식 객체들과 OLE 지원만 있으면 문서를 열고 출력하는데 문제가 없는 기본적인 문서만을 사용하기 때문일 것이다.
MS Office가 오랜 시간동안 왕좌를 차지하고 있는 배경에는 VB for App를 이용한 강력한 프로그래밍 기능이 있기 때문이다. 공개 소프트웨어로서 MS Office를 압도하기란 무리일지 모르지만 적어도 어느정도 대체할 수 있기 위해서는 VB에 상응하는 프로그래밍 기능이 보강되야 할 것 같다.
하지만 프로그래밍 기능이 필요한 고급 사용자가 아닌 이상 안정성이나 기본 기능에 있어서는 MS Office에 뒤질 것 없이 MS Office를 대체할 수 있을 듯 보인다.
MS가 개인용 OS 분야에서 압도적인 점유율을 유지하는 것은 MS Office 특히 Excel의 힘이 가장 큰 것으로 안다. Open Office가 상당 부분 MS Office를 대체하면서 시장에서의 Linux나 Mac의 점유율이 높아져 Windows가 아닌 다른 OS를 사용하면서도 불편함 없는 그런 세상을 기대해 본다.
2008년 4월 23일 수요일
[스크랩] 강력한 키보드 마우스 공유프로그램 Input Director
원본 URL: 강력한 키보드 마우스 공유프로그램 Input Director
업무상 여러 대의 PC를 다뤄야 하는 사람들은 반듯이 개발자가 아니라도 주위에 상당히 많습니다.
하나 이상의 데스크톱이나 노트북을 사용해야 할 경우, 일반적인 사용자라면 PC 대수만큼의 입력장치 – 키보드와 마우스 – 가 어지럽게 책상에 놓여져 있어 작업 공간의 상당 부분을 차지하는데요.
오늘 소개할 프로그램은 하나의 키보드와 하나의 마우스만으로 책상 위에 있는 모든 PC를 다룰 수 있도록 도와 주는 프로그램입니다.
하나가 여럿보다 낫다
하나의 입력 장치로 여러 대의 PC를 다루는 것은 엄청난 작업 효율 상승 효과가 있습니다.
사람마다 다르겠지만 저의 경우에는 책상 위에 3대의 PC를 놓고 작업하고 있습니다.
3대의 PC 는 각기 다른 운영체제(윈도우 2000, XP, 그리고 비스타)로 제가 만드는 프로그램의 운영체제 호환성 테스트 용도로도 사용하고 있는데 구체적으로는 아래와 같은 용도로 활용하고 있습니다.
우선 메인 PC에는 항상 사용하는 프로그램들, 개발 툴이나 회사 내 메신저, 워드나 엑셀을 실행합니다.
Second PC 에는 무겁지만 꼭 써야 하는 Outlook 이나, 모니터링을 위한 업무용 프로그램들을 실행합니다.
Third PC(노트북) 에는 Nate On 같은 외부와 연락을 위한 메신저와 웹 브라우저, 기타 업무용 마이너 한 프로그램들을 실행해 놓고 있습니다.
이렇게 여러 대의 PC 에 프로그램을 분산시켜 실행하는 것은 당연히 메인 PC 의 성능 부하를 줄여 보다 빠르게 원하는 작업을 할 수 있게 하기 위함입니다.
하지만 이와 같이 업무용 프로그램들을 분산시켜 실행할 경우 PC 간 정보 공유가 문제가 됩니다.
메신저로 전달받은 URL 을 다른 PC 의 브라우저 창에서 실행해야 한다면 어떻게 해야 할까요?
메일로 전달받은 내용을 긁어와 역시 다른 PC에 실행 중인 워드에 붙여 넣기를 해야 한다면,
복잡한 네트워크 주소를 전달받아 다른 PC 에서 해당 폴더를 열어야 한다면 또 어떻게 하면 좋을까요?
하나의 PC 라면 당연히 복사 & 붙여 넣기(Copy & Paste) 신공으로 문제가 될 거리도 안되지만 여러 대의 PC 라면 이 간단한 일이 복잡해 집니다.
물리적으로 키보드와 마우스가 여럿이더라도 위에서 언급한 PC 간 협업은 불가능합니다.
하지만 Input Director나 Synergy 와 같은 키보드/마우스 공유 프로그램은 복수개의 PC에서 키보드와 마우스의 공유뿐만 아니라 서로 다른 PC의 클립보드를 마치 하나의 PC 인 것처럼 자연스럽게 사용할 수 있도록 해 줍니다.
여러 대의 PC를 사용하시면서 아직도 이러한 프로그램을 이용하고 계시지 않다면 오늘 소개할 프로그램에 관심을 가지고 봐 주세요.
Input Director 의 주요 설정방법
키보드와 마우스 공유 프로그램들의 한가지 큰 단점은 설정이 꽤 복잡하다는 점입니다. (그나마 Input Director 의 경우엔 좀 더 직관적으로 되어 있습니다.)
처음 접근할 때 다소 어려움이 따르겠지만 한번만 고생하면 두고 두고 편하기 때문에 잘 참아 내고 끝까지 읽어봐 주세요.
우선 프로그램을 설치합니다.
Input Director 는 다음 주소에서 내려 받을 수 있습니다.
공유하고자 하는 모든 PC 에 이 프로그램을 설치합니다.
설치가 끝난 후, 메인(마스터)이 될 PC 를 선택합니다. 일반적으로 책상에서 가운데 위치하고, 하루 중 가장 많은 시간을 같이 보내는 PC 가 메인(마스터)이 되어야 합니다.
메인 PC 에게는 아래와 같이 “Enable as Master “ 를 선택하여 Master 의 권한을 부여합니다. 이 PC를 중심으로 나머지 PC 의 키보드/마우스 제어권을 가져와 사용하겠다는 의미입니다.
그런 다음 탭을 바꿔 Master Configuration 을 설정합니다.
그림만 덩그러니 있으니 좀 삭막한데요. [Add] 버튼을 클릭해서 추가하고자 하는 PC 의 이름(Host Name)을 입력하면 됩니다. (PC 의 이름은 내 컴퓨터 등록정보에 있는 “전체컴퓨터 이름” 또는 “컴퓨터 이름” 부분을 적어 주시면 됩니다)
추가하고자 하는 PC 대수만큼 위 과정을 반복합니다. 그런 다음 가운데 부분에 메인(Master) 를 기준으로 각 PC 의 물리적인 위치에 따라 메인(마스터)의 왼쪽이나, 오른쪽으로 위치 조정을 해 줍니다. 위치 조정은 마우스를 이용하여 PC 모양 아이콘을 끌어다 놓으면(Drag & Drop) 됩니다.
만일 SUB2 PC가 메인 PC 의 우측에 있다면 설정도 그와 같은 위치에 있도록 해 주어야 합니다.
아래 그림은 SUB1 PC 가 메인 PC 좌측에 위치하고, SUB2 PC 가 메인의 우측에 위치할 경우를 가정한 모습입니다. 사용자의 환경에 맞춰 위치를 조정해 주시면 됩니다.
이제 Main 의 마지막 설정인 Global Preference 설정을 해 줍니다.
아래와 같이 PC 가 부팅될 때 실행 여부를 선택하고, 시작 시 Master 로 실행된다고 꼭 체크해야 합니다.
여기까지가 Master 에 대한 설정이었습니다.
이제 Sub가 될 나머지 PC들의 설정으로 가 보겠습니다. Sub(Slave)는 비교적 간단합니다.
Main 탭에서 아래와 같이 “Enable as Slave” 로 설정합니다.
Global Preference 설정에서는 마찬가지로 윈도우 시작 시점에 Input Director를 사용하겠다고 설정하고, 시작 시 Slave 모드로 시작한다고 선택하면 됩니다.
이상의 과정을 정상적으로 마쳤다면 이제 여러 대의 PC를 하나의 키보드와 마우스로 공유하실 수 있습니다. 뿐만 아니라 PC 간 텍스트 및 그림까지 자유롭게 공유하실 수 있습니다.
Input Director VS. Synergy
사실 Input Director 를 얼마 전 회사 동료 분으로부터 소개 받기 전에는 Synergy 라는 훌륭한 프로그램을 사용했습니다. 처음 Synergy 를 사용하게 되었을 때 참 많이도 놀랐습니다. 서로 다른 PC간 키보드/마우스 공유는 이전에는 하드웨어적인 장비를 통해서만 가능할 거라고 생각했었거든요. 하지만, 이는 제 상상력의 부족이었습니다. 네트워크를 통해 각 PC 의 마우스와 키보드 정보를 모두 메인으로 전달하게 되면 메인 PC 만으로도 자연스럽게 SUB PC를 조정할 수 있는 건데 말입니다. Synergy 는 이러한 저의 고정관념을 깼을 뿐만 아니라 여러 대의 PC 에서 작업해야 하는 저의 작업 효율성을 상당히 끌어 올려주었습니다. Synergy 마니아인 제가 다른 프로그램을 소개하게 될 줄이야 ^^;
혹시 Synergy에 대해서 모르신 다음 아래 좋은 글이 있으니 먼저 읽어 보시길 권해 드립니다. (Input Director 가 마음에 안 드시는 경우에 참고하셔도 될 거 같네요)
2대 이상의 PC 에서 마우스 키보드는 1개로 제어해보자 Synergy
Synergy 보다 Input Director 가 좋은 점은 다음과 같습니다.
- Visual Indication 기능 – 마우스가 PC를 건너 다닐 때 마다 마우스 포인터를 그림과 같이 표시해 줍니다. 마우스를 잃어버리지 않도록 해 줄 뿐만 아니라 애니메이션으로 물결치듯이 멋지게 마우스를 표시해 주어 시각적인 즐거움도 더 해 줍니다. (보고 있으면 어느새 중독됩니다)
- 그림 복사가 가능합니다. – Synergy 의 복사 기능은 단순 Text로 국한 되었습니다. 하지만 Input Director 에서는 그림판이나 아웃룩으로 받은 메일의 그림까지 Copy & Paste로 복사가 가능합니다. 이전에는 A PC 에서 화면을 캡쳐한 다음 B PC로 옮기려면 이미지로 저장한 다음 옮겨갔어야 했지만 이제는 Copy & Paste만으로 가능해 졌습니다.
- 워드나 엑셀 문서의 내용 복사도 쉽게 됩니다. – 그림과 마찬가지로 클립보드의 내용을 텍스트에 국한되지 않고 원문 그대로 전달하기 때문에 A PC에서 작성중인 워드나 엑셀 문서를 긁어와 B PC 에 붙여 넣을 수 있게 되었습니다. (시너지에서는 문서의 텍스트 부분만 복사가 되었습니다. 문서의 서식이나 그림은 전달이 되지 않았습니다)
- 한글관련 버그가 없습니다 – Synergy 의 경우 한/영 전환을 위해서는 별도 Patch 를 설치해야 하고, 대문자가 눌려진 경우 한글이 제대로 입력되지 않는 문제가 있었습니다. Input Director 에서는 그러한 문제가 없습니다.
- 한영 전환이 메인 PC의 설정을 따라 작동합니다. – 저는 한/영 전환으로 Shift-Space를 주력으로 사용합니다. 예전 아래아 한글을 사용하면서부터 익숙해 진데다 오른쪽 Alt키에 의한 한/영전환은 이상하게 오타가 많이 나서 늘 이 방식을 선호합니다. 그런데 비스타가 설치된 노트북에서는 OS 설치 시 Shift-Space로 설정할 수 있는 키보드 입력방식 설정이 없어서 여태 우측 ALT 키를 눌러 한/영 키를 전환하고 있습니다. 그런데 Input Director를 사용하면 노트북에서 한/영 전환방식을 메인 PC 의 한/영 전환을 따르게 되어 있습니다. 노트북의 한/영 전환이 비록 우측 Alt 키이더라도 Input Director 를 사용 할 경우에는 평소대로 Shift-Space를 이용할 수 있어 편리합니다.
- 마우스와 키보드 응급 환수 기능 – Synergy를 사용하다 보면 가끔씩 키보드나 마우스의 제어권을 특정 PC 에 뺏기게 되어 그야말로 먹통 상태가 되는 경우가 있습니다.(주로 메인 PC 에서 디버깅 시 이러한 경우를 자주 접합니다.) 마우스를 어느 PC 가 가지고 있는지 몰라서 마구 마우스를 움직여 보지만 마우스가 보이지도 않고 키도 입력이 안 되곤 합니다. 이럴 땐 계속 기다리던가, PC 를 완전히 껐다 켜야 합니다.(Control+Alt+Del 을 눌러도 반응조차 없어서 하드 리셋해야 하는 경우도 있습니다) Input Director 에는 “Control-break + Left CONTROL + Left ALT” 과 같은 다소 복잡한 키 조합으로 키보드와 마우스의 제어권을 메인 PC로 긴급 소환할 수 있도록 하고 있습니다.. 이제 마우스 잃어 버릴 일 없어진 거예요~
Input Director 기타 사항
여러 운영체제에서 작동하는 Synergy와는 달리 Input Director 는 다음의 운영체제에서만 작동합니다.
Windows 2000 (Service Pack 4)
Windows XP (Service Pack 2)
Windows Vista
운영체제가 윈도우 계열 특정 OS 에만 국한된다는 점은 Synergy 에 비해 아쉬운 점이기도 하지만, 운영체제를 제한하는 대신 윈도우에 최적화된 기능(윈도우 클립보드에 저장되는 포맷 그대로 전송과 같은)을 제공하는 것으로 보입니다.
비 윈도우 계열을 사용하시는 분이라면 Input Director 는 고려대상이 안되겠지만, 윈도우 계열 사용자라면 Input Director 사용을 적극적으로 권해 드리겠습니다.
이상으로 Input Director 에 대해 소개 드렸습니다.
정말 멋진 프로그램인데 많은 분들이 잘 사용했으면 하는 바램입니다.
2008년 4월 22일 화요일
[스크랩] 센세이션을 일으킬 HTLM 편집기
Scrapped from ㅍㅖ동's 낙시터
원본 URL: http://www.findingmyself.net/blogs/fish/45
솔직히 제목 자체가 상당히 낚시질에 가까운 문구입니다만, 방금 Digg.com에 올라온 글을 보고 내용을 살펴봤더니 위와 같은 제목을 사용하기에 아깝지 않은 HTML 편집기라고 생각됩니다.
Dream Weaver와 같은 좋은 HTML 편집기가 이미 많이 나와 있지만, 이는 대부분의 자바 스크립트 지원 부분에서 한계를 가지고 있고, 특히 요즘 Ajax를 이용한 작업에서 자바 스크립트 지원 부분이 강조됨에 따라 새로운 HTML 편집기에 대한 요구가 계속 늘고 있습니다.
DHTML 객체에 대해서만 메써드와 프로퍼티를 보여주는 VS.Net도 작업시 상당히 큰 도움이 되는데, 해당 객체 내에 존재하는 메써드와 프로퍼티까지 보여주는 기능은 점점 자바 스크립트의 의존도가 높아지는 코딩 스타일에 엄청난 도움이 될 것으로 확신합니다.
어느 정도 웹 표준 작업을 했던 사람들에게는 큰 필요가 없는 작업일지 모르겠지만, 처음 웹 표준 작업을 시도하는 사람과, 자바 스크립트를 처음 접하는 사람에게는 충분히 강력한 기능입니다.
이렇게 설명한 기능 외에도 여러가지 장점들을 가지고 있는데 인상적인 부분만 나열을 해봤습니다. 이렇게 늦은 시간에 자려다가 우연히 발견하게 된 것이지만 너무나 맘에 들어서 굳이 자기 전에 포스팅을 해야겠다는 생각에 두서 없이 한 번 적어봤습니다.
이걸 보면서 현재 사용하고 있는 VS.Net과 어떻게 병행해서 쓸지 걱정이 앞서네요. 이렇게 좋은 툴을 봐버렸으니 안 쓸 수는 없고, 문서 안에 묻어 있는 ASP.Net 코드는 처리를 못해주는 것 같고... 좋은 걸 줘도 고민입니다... ㅎㅎ
[스크랩] Google 자동 번역 Add-On for Firefox
예전에 gTranslate Addon은 단어만 번역이 되었던 것 같은데
이제는 문장까지도 번역해주고 있다.
기특한것...ㅋ
= Firefox에서 구글 자동 번역 Add-on 설치하기 =
1. 일단 Firefox를 다운로드 하여 설치한다.
한글판 : http://www.mozilla.com/en-US/products/download.html?product=firefox-2.0.0.1&os=win&lang=ko
영문판 : http://www.mozilla.com/en-US/firefox/
2. Firefox 설치가 끝나면 이젠 gTranslate Addon을 설치한다. Firefox의 주소창에 아래 URL을 입력한다.
https://addons.mozilla.org/firefox/918/
나타난 화면에서 "Install Now"를 선택하면 Addon을 설치하기 시작한다.
3. 설치가 완료되면 Firefox를 재시작 하고 Tools 메뉴의 Add-ons 메뉴를 선택한다.
4. 여러 Add-ons 항목 중 gTranslate Add-on의 Option을 선택한다.
5. 나타난 옵션 선택 화면에서 Translate text from... 콤보 박스에서 적절한 번역 옵션을 선택한다. 영문을 한글로 번역한다고 하면 English to Korean BETA를 선택하면 된다.
6. 모든 설정이 끝난다면 이제 Firefox에서 표시되는 웹페이지에서 번역하고자 하는 문장이나 단어를 드래그 하여 선택하고 마우스 오른쪽클릭으로 팝업메뉴를 나타나게 한다.
그러면 팝업 메뉴 하단에 Translate 선택한 문장 인 메뉴가 있는데 그 메뉴로 마우스롤 올려놓으면 위 화면처럼 번역 결과가 나타난다.
[스크랩] 무료 음원 사이트
원본 URL:http://betterface.tistory.com/68
저작권이 강화되면서 특히 음악쪽은 많은 논란과 파장이 있었습니다.
불법인줄은 알지만 시대적 흐름에 뒤쳐진 공급자의 서비스와 맞물려 사회적인 이슈가 되기도 했습니다.
외국의 사례를 보면 CCL이라는 제도로 많은부분 보완을 시도했고 나름대로 성과들도 보입니다.
제가 알고있는 무료 음원은 몇가지 주의사항만 지키면 제작하시는 분이나 이용을 원하시는 분들에게 조금은 도움이 될듯싶어 간단하게 정리해 보았습니다.
주의사항은 상업적으로 이용이 가능한지 불가능한지 정의를 내리셔야합니다.
사적으로 이용하는것은 크게 무리가 없지만 웹사이트에 게시한다던가 소스로 이용하실때는 라이센스를 살펴보시길 바랍니다.
CCL마크가 표기된 것은 해당 라이센스를 참고하시면 됩니다.
대부분이 저작물에 원저작자과 곡명을 표기하도록 되어있고
원저작물의 변형이나 개작등은 모두 다르게 설정되어 있습니다.
CCL마크를 클릭하면 대부분이 크리에이티브 커먼 사이트로 연결되어 각국의 언어로 사용범위를 알수 있습니다.
CCL에 대한 자세한 사항은 하단의 웹사이트를 참조하십시오.
크리에이티브 커먼 라이센스 코리아
크리에이티브 커먼 라이센스
크리에이티브 커먼 서치 - 라이센스 유형별로 검색이 가능합니다
정보공유라이센스 - 공공기관, 라이센스 유형 정의 및 자료(아직 소량입니다)
참고사이트 - 정보공유연대 - 한번쯤 읽어볼만한 내용들이 있습니다.
국내사이트
프리BGM(상업적인 사용 불가, CCL표기 없습니다) - 많이 아실겁니다.
http://www.ccmixter.or.kr/ - CCMixter의 한국사이트입니다. 아직 내용은 없습니다.
점점 활성화되길 기원합니다.
일본 사이트
http://www.tam-music.com - 상용 이용도 가능, 저작권규정(인조이재팬번역)
http://sound.jp/piano1001/audioframe.htm - 저작권소멸된곡 연주, 상업적이용금지
미국 및 유럽
http://www.jamendo.com - 각각 CCL이 표기 되어있습니다. 추천
라이센스별 카테고리도 운영합니다.
다운로드는 P2P방식입니다.
토렌트나 이뮬을 사용합니다.
http://www.ccmixter.org/ - 역시 방대한 양이 있습니다. 샘플링 및 리믹스가 많습니다.
http://www.opsound.org - 마음대로 쓸수 있다고 합니다. 라이센스
http://www.owlmm.com/index.html - 원하는 라이센스나 유형별로 검색합니다.
원래는 자신의 음원을 올리고 비슷한것을 검색하는 것인데
사용법이 좀 난해합니다.
왼쪽에 있는 Try a random search 누르면 서치창이 열립니다.
http://en.wikipedia.org/wiki/Wikipedia:Sound/list - 클래식 ogg포맷
http://www.comfortstand.com/ - 상업적 사용 불가, 라이센스
http://music.download.com/ - 방대한양의 mp3를 다운받을수 있습니다.
라이센스 규정은 명확하게 명기하지 않았습니다.
아마존의 구입처를 링크시킨걸 보면 상업적인 사용은 불가한듯. - 독일쪽인듯. 이곳은 데이터보다는 서비스용 솔루션을 제공하는곳입니다.
여러곳이 링크되어 있습니다. 라이센스는 모호합니다. 다운로드 가능
http://www.soundlift.com/ - 상단 OMS에 링크된 곳중에 제일 정리가 잘된 곳입니다. 라이센스 모호
상기 정보들은 개인적인 검색과 FREEBGM사이트의 게시판을 참고 했습니다.
FREEBGM 게시판은 오래전에 작성된것은 링크가 죽은것도 있고 라이센스는 별도로 보시길 바랍니다.
기타 애매모호하고 소개하기에 데이터량이 적은곳은,
어설픈 실력이지만 시간이 허락하는데로 정리되면 내용을 계속 추가하겠습니다.
국내에도 이런사이트들이 나오면 좋겠습니다.
개인생각으로는 전반적인 저변이 있어야 수익성도 나오는 것입니다.
물론 경제전문가들이 이야기하듯 우리나라 내수시장이 적은것도 문제이기는 합니다.
이상 간단하게 정리해봤습니다.
잘못알고 있는 부분이나 다른곳을 아시는 분은 알려주세요...
2008년 4월 16일 수요일
[스크랩] Mashup
번역문:
Mashup 소개
출처 : IBM 한국 DeveloperWorks (Link)
난이도 : 초급
Duane Merrill, Writer, Freelance
2006 년 10 월 31 일
mashup 은 대화형 웹 애플리케이션의 한 장르로서, 외부 데이터 소스에서 가져온 콘텐트를 사용하여 완전히 새롭고 혁신적인 서비스를 만듭니다. 비공식적으로 Web 2.0이라고 알려진 2 세대 웹 애플리케이션을 의미하기도 합니다. 이 글에서는 mashup의 의미, 오늘날 구현되는 대중적인 mashup들, mashup 개발자들이 애플리케이션을 구현할 때 활용하는 기술들을 소개합니다. 또한, mashup 개발자들이 직면한 기술적, 사회적인 많은 문제점들도 있습니다.
신종 웹 기반 데이터 통합 애플리케이션이 인터넷을 통해 자라나고 있다. 비공식적으로 mashups이 라고 불리는 이 애플리케이션은 대화형 사용자 참여를 강조하고, 자기 파괴적인 방식으로 서드 파티 데이터를 한데 모은다. mashup에 대한 정의는 다음과 같다; mashup 웹 사이트는 웹에 기반하여, 외부의 데이터 소스에서 가져온 콘텐트와 기능을 사용한다.
mashup의 모호한 데이터 통합에 대한 정의는 정확한 것은 아니다. mashup을 생각하는 가장 좋은 방법은 이 용어의 어원을 생각해 보는 것이다. 대중 음악에서 차용된 것으로, mashup은 (보통 다른 장르에 속한) 두 개의 다른 노래들에서 보컬과 악기 트랙을 혼합한 새로운 노래이다. “잡종 팝송(bastard pop)” 과 마찬가지로, mashup은 콘텐트를 비정상적이고 혁신적으로 혼합한다. (종종 관련성이 없는 데이터 소스에서도 가져온다.) 전산 소비가 아닌 인간이 소비할 수 있도록 만들어진다.
그렇다면, mashup은 과연 어떤 모습일까? ChicagoCrime.org 웹 사이트는 매핑 mashup의 좋은 예제이다. 언론에서 광범위한 대중성을 확보한 첫 번째 mashup 중 하나인 이 웹 사이트는 Chicago Police Department의 온라인 데이터베이스에서 얻은 범죄 데이터를 Google Maps의 지도 제작법과 혼합한다. 사용자들은 이 mashup 사이트와 인터랙팅 할 수 있다. 이를 테면, South Chicago의 최근 모든 강도 사건의 상세를 나타내는 푸쉬업(pushup)을 포함한 지도를 지리적으로 디스플레이 할 수 있다. 개념과 표현은 단순하고, 범죄와 지도 데이터의 합성은 시각적으로 강력한 힘을 발휘한다.
In mashup 장르에서는, 매핑 mashup을 포함한 대중적인 mashup 장르를 연구할 것이다. 관련 기술에서는 mashup의 구현과 작동과 관련된 기술을 검토할 것이다. 기술적 문제와 사회적 문제 섹션에서는 시급한 기술적, 사회적인 도전 과제들을 규명할 것이다.
이 섹션에서는, 대표적인 mashup 장르를 간단히 설명할 것이다.
정 보 기술 세대에서, 사람들은 물건과 행위에 대한 상당한 데이터를 모으게 된다. 두 가지 모두 위치에 대한 주석이 달린다. 위치 데이터를 포함하고 있는 이 모든 데이터들은 지도를 사용하여 지리적으로 표현되고 있다. mashup이 등장하기 까지 가장 큰 촉매제가 된 것 중 하나가 Google의 Google Maps API이다. 이것은 웹 개발자들(취미 활동가, 사상가, 기타)이 모든 데이터들(핵 재앙에서부터 보스턴의 CowParade까지) 지도로 가져왔다. Microsoft (Virtual Earth), Yahoo (Yahoo Maps), AOL (MapQuest)의 API들이 바로 뒤를 이었다.
사 진 호스팅과 Flickr 같은 소셜 네트워킹 사이트와 사진 공유를 표방하는 API들이 등장하면서 다양한 mashup들이 생겨나고 있다. 이러한 콘텐트 프로바이더들은 그들이 호스팅 하고 있는 이미지와 관련된 메타데이터(누가 사진을 찍었는지, 어떤 사진인지, 어디서 언제 찍었는지 등)를 갖고 있기 때문에, mashup 디자이너들은 사진을 이 메타데이터와 제휴될 수 있는 다른 정보들과 혼합한다. 예를 들어, 하나의 mashup이 노래 가사나 시를 분석하고 관련 사진들의 모자이크나 콜라주를 만들 수 있고, 또는 공통적인 사진 메타데이터(제목, 타임스탬프, 기타 메타데이터)에 기반하여 소셜 네트워킹 그래프를 디스플레이 한다. (CNN 뉴스 사이트 같은) 웹 사이트에서 뉴스의 단어들을 사진들과 매칭시키는 방식으로 텍스트를 렌더링 할 수 있다.
검 색과 쇼핑 mashup은 mashup이라는 용어가 생겨나기 전부터 존재했다. 웹 API 전에, BizRate, PriceGrabber, MySimon, Google Froogle 같은 비교 쇼핑 톨들은 b2b 기술이나 screen-scraping의 결합을 사용하여 가격 비교 데이터들을 모았다. mashup과 기타 웹 애플리케이션들을 활용하기 위해, eBay와 Amazon 같은 사용자 마켓플레이스는 이들의 콘텐트에 프로그래밍 방식으로 액세스 할 수 있는 API를 만들었다.
뉴 스 소스(New York Times, BBC, Reuters)는 2002년부터 RSS와 Atom 같은 신디케이션 기술을 사용하여 다양한 토픽과 관련된 뉴스 피드를 보급했다. 신디케이션 피드 mashup은 사용자의 피드를 모아서 웹에 나타낸다. 독자의 특수한 취향에 맞게 제공되는 개인적인 신문을 만든 것이다. Diggdot.us가 한 예인데, 이는 기술 관련 뉴스 소스인 Digg.com, Slashdot.org, Del.icio.us 등에서 피드를 결합한다.
이 섹션에서는 mashup의 개발에 활용할 수 있는 기술들을 살펴보도록 하겠다. 기술에 대한 자세한 내용은 참고자료 섹션을 참조하기 바란다.
mashup 애플리케이션은 논리적으로나 물리적으로 떨어진(네트워크와 구성 영역에 의해 분리된 것 같다.) 세 개의 다른 참여자들로 구성된다: API/콘텐트 프로바이더, mashup 사이트, 클라이언트의 웹 브라우저.
- API/ 콘텐트 프로바이더. 이들은 혼합되는 콘텐트의 공급자들이다. ChicagoCrime.org mashup 예제에서, 공급자는 Google과 Chicago Police Department가 된다. 데이터를 가져올 수 있도록 하기 위해, 공급자는 REST, 웹 서비스, RSS/Atom 같은 웹 프로토콜을 통해서 웹 콘텐트를 노출한다. 하지만 많은 잠재적인 데이터 소스는 아직까지는 편리한 방법으로 API를 노출하지 않는다. Wikipedia, TV Guide, 그리고 가상의 모든 정부 및 공공 도메인 웹 사이트에서 콘텐트를 추출하는 mashup은 스크린 스크래핑 기술을 사용하여 이를 사용한다. 이러한 상황에서, 스크린 스크래핑이 의미하는 것은, 원래 인간이 소비하기로 되어있는 공급자의 웹 페이지를 파싱하여, 콘텐트 프로바이더에서 정보를 추출하는 과정을 의미한다.
-
mashup 사이트. 이곳은 mashup이 호스팅 되는 장소이다. 여기에 mashup 로직이 있다는 이유 때문에 여기에서는 반드시 실행될 필요가 없다. 반면, mashup은 자바 서블릿, CGI, PHP, ASP 같은 서버 측 동적 콘텐트 생성 기술을 사용하는 전통적인 웹 애플리케이션과 비슷하게 구현될 수 있다.
또는, mashup 콘텐트는 클라이언트 측 스크립팅(JavaScript)이나 애플릿을 통해 클라이언트의 브라우저에서 직접 생성될 수도 있다. 이러한 클라이언트 측 로직은 mashup의 웹 페이지에 직접 삽입된 코드와 스크립팅 API 라이브러리나, 이러한 웹 페이지들이 참조하는 애플릿들의 결합이다. 이 방식을 사용하는 mashup을 rich internet applications (RIA)이라고 하는데, 대화형 사용자 경험을 강조한다는 뜻을 내포하고 있다. (리치 인터넷 애플리케이션은 "Web 2.0"이 표방하고 있는 것이다.) 클라이언트 측에서 혼합할 때의 이점은 mashup 서버를 대신하기 때문에 오버헤드가 적고(데이터는 콘텐트 프로바이더에서 직접 가져올 수 있다.), 보다 완벽한 사용자 경험이 가능하다는 점이다. (페이지들은 전체 페이지를 리프레쉬 하지 않고도 콘텐트의 일부만 업데이트할 것을 요청할 수 있다.) Google Maps API는 브라우저 측 JavaScript를 통한 액세스를 위한 것이고, 클라이언트 측 기술의 한 예가 된다.
종종 mashup은 서버 측 로직과 클라이언트 측 로직의 결합을 사용하여 데이터를 모은다. 많은 mashup 애플리케이션들은 자신들에게 직접 제공된 데이터를 사용하여, (적어도) 한 개의 데이터 세트는 로컬로 만든다. 게다가, 다중 소스 데이터("Kevin Bacon과 공동 주연을 했던 영화 배우가 사들인 평균 부동산 가격")에 대한 복잡한 쿼리는 클라이언트의 웹 브라우저 내에서 많은 일을 수행해야 한다.
- 클라이언트의 웹 브라우저. 이곳에서 애플리케이션은 그래픽으로 실행되고, 사용자 인터랙션이 발생한다. 앞서 설명한 것처럼, mashup은 종종 클라이언트 측 로직을 사용하여 혼합 콘텐트를 조합 및 합성한다.
Ajax 가 약어(어떤 사람은 "Asynchronous JavaScript + XML"의 합성으로 본다.)인지 아닌지에 대한 논의가 있다. Ajax는 특정 기술이기 보다는 웹 애플리케이션 모델이라고 할 수 있다. 비동기식 로딩과 콘텐트의 표현에 초점을 맞춘 여러 기술들을 구성하고 있다.:
- 스타일 표현을 위한 XHTML과 CSS
- 동적 디스플레이이와 인터랙션에 의해 노출된 Document Object Model (DOM) API
- 비동기식 데이터 교환, 일반적으로 XML 데이터
- 브라우저-측 스크립팅, 주로 JavaScript
이 러한 기술들이 함께 사용될 때, 그 목적은 사용자 액션 후에 전체 페이지를 재 로딩 및 재 실행 하기 보다는, 소량의 데이터를 콘텐트 서버와 교환하여 보다 원활한 사용자 경험을 만들어 내는 것이다. JavaScript에서 구현된 다양한 Ajax 툴킷과 라이브러리(Sajax 또는 Zimbra)에서 mashup용 Ajax 엔진들을 구현할 수 있다. Google Maps API에는 상용 Ajax 엔진이 포함되어 있고, 사용자 경험 역시 강력하다. 페이지 재 로드를 실행하는 조작 화살표나 트랜슬레이션 화살표에 대한 스크롤바가 없다는 점에서 진정한 로컬 애플리케이션처럼 작동한다.
SOAP 과 REST는 원격 서비스들과 통신하는 플랫폼 중립적인 프로토콜이다. 서비스 지향 아키텍처 패러다임의 일부로서, 클라이언트는 SOAP과 REST를 사용하여 기반 플랫폼에 대한 지식 없이도 원격 서비스들과 인터랙팅 할 수 있다. 서비스의 기능은 요청 및 응답 받은 메시지의 디스크립션에 의해 전달된다.
SOAP은 웹 서비스 패러다임의 기본 기술이다. 원래, Simple Object Access Protocol의 약어였던 SOAP은 Services-Oriented Access Protocol (또는 그냥 SOAP)으로 개명되었다. 초점이 객체 지향 시스템에서 메시지 교환의 상호 운용성으로 이동했기 때문이다. SOAP 스팩에는 두 개의 핵심 요소가 있다. 첫 번째는 플랫폼 중립적인 인코딩을 위한 XML 메시지 포맷이고, 두 번째는 헤더와 바디로 구성된 메시지 구조이다. 헤더는 애플리케이션 페이로드(바디), 이를 테면, 인증 정보에 국한되지 않는 콘텍스트 정보를 교환한다. SOAP 메시지 바디는 애플리케이션 스팩의 페이로드를 캡슐화 한다. 웹 서비스용 SOAP API는 WSDL 문서로 기술되는데, 서비스가 노출하는 작동, 메시지 포맷(XML Schema 사용), 접근 방법 등이 설명되어 있다. SOAP 메시지는 HTTP를 통해 전달되지만, 다른 트랜스포트(JMS 또는 이메일)도 가능하다.
REST는 Representational State Transfer의 약어로서, HTTP와 XML을 사용한 웹 기반 통신 기술이다. 단순함과 프로파일의 부족 때문에 SOAP과 분리되고 매력도 떨어진다. 현대 프로그래밍 언어에서 찾을 수 있는 동사 기반 인터페이스(getEmployee(), addEmployee(), listEmployees() 같은 다양한 메소드로 구성됨)와는 달리, REST는 근본적으로 모든 정보 조각에 사용할 수 있는 몇 가지 연산들(POST, GET, PUT, DELETE)만 지원한다. REST에서 강조하는 것은 리소스라고 하는 정보이다. 예를 들어, 사원에 대한 정보 기록은 URI로 구분되고, GET 연산을 통해 가져오고, PUT 연산으로 업데이트 되는 식이다. 따라서 REST는 SOAP 서비스의 document-literal 스타일과 비슷하다.
앞서 언급했던 것처럼, 콘텐트 프로바이더에서 오는 API의 부족 때문에, mashup 개발자들이 스크린 스크래핑에 의존하여 그들이 혼합하고자 하는 정보를 가져온다. 스크래핑(Scraping)은, 프로그래밍 방식으로 사용 및 조작될 수 있는 정보의 시맨틱 데이터 구조를 추출하기 위해, 소프트웨어 툴을 사용하여 인간이 소비하도록 작성된 콘텐트를 파싱하고 분석하는 프로세스이다. 일부 mashup은 데이터 획득에 스크린 스크래핑 기술을 사용한다. 특히, 공공 섹터에서 데이터를 가져올 때 그렇다. 예를 들어, 부동산 매핑 mashup은 지도 제작 공급자의 지도와 판매 또는 임대 리스팅을 스크랩 된 “comp” 데이터를 혼합할 수 있다. 데이터를 스크래핑 하는 또 다른 mashup 프로젝트로는 XMLTV가 있는데, 이것은 전 세계, TV 리스트를 모으는 툴의 컬렉션이다.
스크린 스크래핑은 세련되지 않은 솔루션으로 간주된다. 여러 가지 이유가 있다. 두 개의 근본적인 단점들이 있기 때문이다. 첫 번째는 인터페이스를 가진 API와는 달리, 스크래핑은 콘텐트 프로바이더와 콘텐트 소비자 간 지정된 프로그램 방식의 콘트랙트가 없다. 스크래퍼는 소스 콘텐트의 모델과 관련하여 툴을 디자인 해야 하고, 공급자는 지속적으로 표현 모델에 의존해야 한다. 웹 사이트는 룩앤필을 주기적으로 정비하여 스타일을 유지해야 한다. 툴이 이 일을 하지 못하기 때문에 스크래퍼의 고통만 늘어난다.
두 번째 문제는 고급의, 재사용 가능한 스크린 스크래핑 툴킷 소프트웨어, 즉 scrAPIs의 부족이다. 이 같은 API와 툴킷이 부족한 이유는 각 스크랩핑 툴이 애플리케이션을 필요로 하기 때문이다. 때문에 많은 개발 오버헤드가 생기고, 개발자들은 콘텐트를 역 엔지니어링 하고, 데이터 모델을 개발하며, 공급자 사이트에서 미가공 데이터를 파싱 및 모아야 한다.
스 크린 스크래핑의 세련되지 못한 특성은 인간이 소비하도록 만들어진 콘텐트가 자동화된 머신이 소비하기에 좋은 콘텐트가 되지 못한다는 사실에서 기인한다. 시맨틱 웹은, 기존 웹이 머신도 읽을 수 있는 정보를 사용하여 인간을 위해 설계된 콘텐트를 보완하도록 증가될 수 있다고 표방한다. 시맨틱 웹이라는 정황에서, 정보는 데이터와는 다르다. 데이터가 의미를 전달할 때에는 정보가 된다. 시맨틱 웹의 목적은 의미를 전달하는 메타데이터를 가진 데이터를 보강하여, 자동화, 통합, 추론, 재사용에 맞는 웹 인프라스트럭처를 만드는 것이다.
Resource Description Framework (RDF)로 알려진 W3C 스팩군은 데이터를 기술하는 문법 구조를 확립하는 방식을 제공한다. XML로는 충분하지 않다. 같은 데이터를 기술하는데 많은 방식으로 코딩 할 수 있다는 점에서 너무 모호하다. RDF-Schema는 RDF의 기능에 추가되어 머신이 읽을 수 있는 방식으로 인코딩 한다. 일단 데이터 객체가 데이터 모델에서 기술될 수 있다면, RDF는 subject-predicate-object(subject의 S는 relationship R과 object O를 갖고 있다.)를 통해서 데이터 객체들 간 관계 구조를 제공한다. 데이터 모델과 관계 그래프의 결합은 온톨로지의 생성에 적용되고, 이는 검색 및 추론될 수 있는 계층적 지식 구조가 된다. 예를 들어, it "eats" other "animal-type" 라는 제약 조건을 가진 "animal-type"의 하위 클래스로서 "carnivore-type" 모델을 정의할 수 있고, 이것에 대한 두 개의 인스턴스를 만든다. 하나는 치타와 북극곰과 이들의 습성과 관련된 데이터로 전개되고, 또 다른 하나는 가젤과 펭귄과 이들 각각의 습성과 관련된 데이터를 전개할 수 있다. 추론 엔진은 이러한 개별 모델 인스턴스들을 “혼합”하고 치타가 펭귄이 아닌 가젤을 잡아먹는다는 추론을 내린다.
RDF 데이터는 다양한 분야에서 빠르게 채택되고 있다. 소셜 네트워킹 애플리케이션(FOAF -- Friend of a Friend)과 신디케이션(RSS)도 한 예이다. 게다가, RDF 소프트웨어 기술과 컴포넌트는 어느 정도 성숙해졌고, 특히 RDF 쿼리 언어(RDQL과 SPARQL)와 프로그래밍 프레임웍과 추론 엔진(Jena와 Redland) 분야가 성장했다.
RSS 는 XML 기반 신디케이션 포맷의 일부이다. 신디케이션은 콘텐트를 배포하고자 하는 웹 사이트가 RSS 문서를 만들고 이 문서를 RSS 퍼블리셔로 등록한다. RSS가 실행되는 클라이언트는 퍼블리셔의 피드에서 새로운 콘텐트를 검사하고 알맞은 방식으로 이에 대응한다. RSS는 뉴스 아티클과 헤드라인, CVS checkins나 wiki pages용 changelog, 프로젝트 업데이트, 라디오 프로그램 같은 오디오 데이터까지, 광범위한 콘텐트를 합성한다. Version 1.0은 RDF 기반이지만, 최신 2.0 버전은 그렇지 않다.
ATOM은 새롭지만 더 유사한 신디케이션 프로토콜이다. Internet Engineering Task Force (IETF)의 제안 표준이고 RSS 보다 더 좋은 메타데이터를 관리 할 방법을 모색하고 있으며, 더 좋은 문서를 제공하고, 구조 개념을 일반 데이터 표현에 적용한다.
이러한 신디케이션 기술은 뉴스와 웹로그 애그리게이터 같은 이벤트 기반 콘텐트 또는 업데이트 중심 콘텐트를 모으는 mashup에는 잘 맞는다.
다른 데이터 통합 분야와 마찬가지로, mashup 개발에는 기술적 문제들이 많이 있다. 특히 mashup 애플리케이션들은 더욱 많은 기능들을 갖추어야 한다. 이 섹션에서는 몇 가지 문제점들을 규명해보도록 하겠다.
오늘날 기업의 제 1의 IT 관심사는 엔터프라이즈 가상 구조에 데이터 통합하기라는 조사가 있었다. 가상 구조(virtual organization)는 연합 비즈니스 단위의 합성이며, 각각은 관리 도메인 안에 포함되어 있음을 의미한다.) (현재 비즈니스 조건들을 반영하는 기업 대시보드를 만들기 위해) 레거시 데이터 소스를 통합해야 하는 도전에 직면한 많은 엔터프라이즈 IT 관리자들과 마찬가지로, mashup 개발자들도 이종의 데이터 세트 간 공유 시맨틱 의미를 추출해야 한다는 비슷한 도전 과제를 안고 있다. 따라서, mashup 개발자가 무엇을 해야 하는지 알고 싶다면 엔터프라이즈 IT가 직면한 통합 문제를 검토해 봐야 한다.
예 를 들어, 데이터 모델들 간 트랜슬레이션 시스템들이 설계되어야 한다. 데이터를 일반 형식으로 변환할 때, 매핑이 완전한 것이 아닐 때 추론이 이루어진다. (예를 들어, 하나의 데이터 소스가 하나의 모델을 가질 수 있고, 주소 유형에는 국가 필드가 포함되어 있는 반면, 다른 것은 그렇지 않다.) mashup 개발자들은 소스 데이터 모델 분야에는 전문가가 될 수 없다. 이 모델은 이들에게는 서드 파티에 해당하고, 추론은 매력적이거나 명확하지 못하다.
소실된 데이터나 불완전한 매핑 외에도, mashup 디자이너는 그들이 통합하고자 하는 데이터가 머신 자동화에 맞지 않다는 것을 알게 된다. 정리가 필요하다. 예를 들어, 법 집행 체포 기록은 일관성 없이 입력될 수 있다. 이름을 줄여서 쓰고(어떤 곳에서는, "mkt sqr"로, 또 다른 곳에서는 "Market Square"로 표기한다.), 추론이 어렵게 된다. RDF 같은 시맨틱 모델링 기술은, 데이터 스토어에 빌트인 된다면, 다른 데이터 세트들 간 자동화 추론 문제를 완화시킨다. 레거시 데이터 소스들은 시맨틱 모델링 기술에 사용되기 전에 분석과 데이터 청소의 관점에서 인간의 노력이 많이 필요하다.
mashup 개발자들은 IT 통합 매니저가 겪지 않은 여러 문제들과도 싸워야 한다. 이중 하나가 데이터 오염 문제이다. 이들의 애플리케이션 디자인의 일부로서, 많은 mashup들은 퍼블릭 사용자 인풋을 끌어들인다. WIKI 애플리케이션 도메인에서 분명해졌듯이, 이는 양날이 선 칼이다. 공개 기여와 데이터 혁신을 가능케 하기 때문에 강력하지만, 일관성 없고, 부정확 하게, 또는 의도적으로 데이터 입력을 유도한다. 후자는 데이터 신뢰성에 대해 의심하게 되고, 이는 mashup이 제공하는 가치를 충분히 상쇄한다.
mashup 개발자들이 직면한 또 다른 통합 문제는 스크린 스크래핑 기술이 데이터 획득에 사용될 때 발생한다. 이전 섹션에서도 설명했지만, 파싱과 수집 툴과 데이터 모델을 추출하는 데는 상당한 역 엔지니어링이 필요하다. 이러한 툴과 모델이 만들어지는 최고의 상황에서도, 소스 사이트가 콘텐트를 표현하는 방식을 리팩토링 해야 한다. 따라서 통합 프로세스에 제동이 걸리고 mashup 애플리케이션 오류로 이어진다.
Ajax 모델의 웹 개발은 보다 풍부하고 완벽한 사용자 경험을 제공할 수 있지만, 난점도 안고 있다. Ajax는 브라우저의 클라이언트 측 스크립팅 기능과 DOM을 결합하여 브라우저 디자이너가 생각하지 못했던 콘텐트 전달 방식을 이룩해야 한다. (아마도 Ajax의 해킹 특성에 기인한 것 같다.) 하지만, 이는 Ajax 기반 애플리케이션을 Microsoft created Internet Explorer 이후 웹 디자이너를 난감하게 하는 같은 브라우저 호환성 문제로 가져온다. 예를 들어, Ajax 엔진은 XMLHttpRequst 객체를 사용하여 원격 서버들과 비동기식으로 데이터를 교환한다. Internet Explorer 6에서, 이 객체는 원시 JavaScript가 아닌 ActiveX로 구현된다.
보 다 근본적으로는, Ajax의 경우, 사용자 브라우저 안에 JavaScript가 실행되어야 한다. 하지만 JavaScript를 지원하지 않거나 실행되지 않는 브라우저나 자동화 툴을 사용하는 특정 사용자들도 있기 마련이다. 이 같은 툴 세트로는 인터넷과 인트라넷 검색 엔진용 정보를 모으는 로봇, 스파이더, 웹 크롤러 등이 있다. Ajax 기반 mashup 애플리케이션은 소수의 사용자 기반과 검색 엔진 가시성을 잃게 된다.
페이지 내에 비동기식으로 콘텐트를 업데이트 할 때 JavaScript를 사용하면 사용자 인터페이스 문제가 생긴다. 콘텐트는 더 이상 브라우저의 주소 바에 있는 URL로 연결되지 않기 때문에, 사용자는 브라우저의 백(back) 버튼의 기능과 BOOKMARK 기능을 기대할 수 없다. Ajax는 비점증적 콘텐트 업데이트를 요청함으로써 레이턴시를 줄일 수 있지만, 형편 없는 디자인 때문에 사용자 경험이 엉망이 되고, 업데이트의 세분성은 양에 비해 너무 적고 업데이트 오버헤드는 가용 리소스를 갉아먹는다. 또한, 인터페이스 로드나 콘텐트가 업데이트 되는 동안 사용자(진행 바 같은 비주얼 피드백을 가진)사용자를 지원해야 한다.
분산된, 크로스 도메인 애플리케이션과 마찬가지로, mashup 개발자와 콘텐트 프로바이더는 보안 문제도 다루어야 한다. 아이디의 개념은 성가신 주제가 될 수 있다. 전통적인 웹은 익명 액세스용으로 구현되었다. 싱글사인온은 바람직한 기능이지만, 많은 기술들이(Microsoft Passport에서 Liberty Alliance 까지)있고, 반드시 통합되어야 하는 아이디 네임스페이스에 부조화를 만든다. 콘텐트 프로바이더는 자신들의 API에 인증과 권한 스킴을 적용하여(보안 아이디나 안전하게 구분할 수 있는 애트리뷰트 개념이 필요하다.) 유료 등록자나 민감한 데이터가 포함된 비즈니스 모델에 실행해야 한다. 민감한 데이터는 기밀성(암호화)이 필요하고, 이들을 다른 소스들과 결합할 때 특별한 주의를 기울여야 한다. 아이디는 감사와 규제 순응에 필수적이다. 게다가, 서버와 클라이언트 측에서 발생하는 데이터 통합의 경우, 사용자부터 mashup 서비스까지 아이디와 보안이 필요하다.
이전 섹션에서 설명한 기술적 문제 외에도, mashup이 대중성을 확보하면서 생기는 사회적인 문제도 있다.
mashup 개발자들이 직면한 가장 큰 사회적 문제들 중 하나는 지적 재산의 보호와 소비자 프라이버시 대 공정 사용과 정보의 자유로운 흐름 간 대립이다. 무식한 콘텐트 프로바이더(스크린 스크래핑의 표적)와 데이터 검색을 위해 API를 노출하는 콘텐트 프로바이더들은 자신들의 콘텐트가 승인되지 않는 방식으로 사용되고 있다는 것을 알아야 한다. 웹 애그리게이션과 규제와 관련하여, 참고자료를 참조하라.
mashup 웹 애플리케이션 장르는 아직 유아기에 머물러 있다. 여가 시간에 많은 mashup을 만드는 정도이다. 이러한 개발자들은 보안 같은 문제들을 인식하지 못한다. 게다가, 콘텐트 프로바이더는 머신 기반 콘텐트 액세스에 API를 제공하는 것의 가치를 이제서야 깨닫기 시작했고, 많은 사람들은 이것을 중요한 비즈니스 문제로 간주하지 않는다. 이러한 사실들이 결합하여 저질의 소프트웨어를 양산하고, 테스팅과 품질 보증 같은 우선순위들은 개념 입증과 혁신의 뒤로 물러나 있다. 커뮤니티는 보다 성숙한 소프트웨어 개발 프로세스를 위해서 오픈 표준과 재사용 가능한 툴킷들을 조합해야 한다.
mashup이 재미있는 장난감에서 세련된 애플리케이션으로 변모하기 전에, 강력한 표준, 프로토콜, 모델, 툴킷 등의 제반 사항들이 해결되어야 한다. 많은 소프트웨어 개발 리더, 콘텐트 프로바이더, 기업가들이 mashup의 가치, 즉 mashup이 귀중한 비즈니스 모델이라는 것을 인식해야 한다. API 프로바이더는 자신들의 콘텐트에 요금을 부과할 것인지의 여부를 결정해야 하고, 부과할 것이라면, 그 방법도 모색해야 한다. (예를 들어, 등록비 또는 사용료) 아마도, 다양한 서비스 품질이 제공될 것이다. eBAY나 Amazon 같은 프로바이더들은 자신들의 API를 무료로 사용할 수 있도록 하는 운동을 벌이고 있다. mashup 개발자들은 광고 기반의 수익 모델을 모색하거나, 흥미진진한 mashup 애플리케이션을 개발해야 할 것이다.
mashup 은 웹 애플리케이션의 신종 장르이다. 시맨틱 웹에서 기인한 데이터 모델링 기술을 약결합, 서비스 지향, 플랫폼 중립의 통신 프로토콜과 결합하면, 웹에서 사용할 수 있는 거대한 정보를 활용 및 통합할 수 있는 애플리케이션을 위한 인프라스트럭처를 제공하게 된다. mashup 애플리케이션이 대중성을 얻어가면서, 공정 사용과 지적 재산권, 그리고 그리드 컴퓨팅과 b2b 워크플로우 관리 같은 사회적 문제들에 어떤 영향을 미치는지를 보는 것도 재미있는 일이다.
mashup 개발에 대해 자세히 알고 싶다면 developerWorks의 새로운 튜토리얼 시리즈를 기대하기 바란다. mashup 구현 방법을 설명할 예정이다. 시맨틱 웹 기술과 온톨로지를 사용하여 자신의 mashup을 구현하는 방법을 설명할 것이다.
원문:
developerWorks > XML | Web development >
Mashups: The new breed of Web app
An introduction to mashups
Level: Introductory
Duane Merrill (duane@duanemerrill.com), Writer, Freelance
08 Aug 2006
Updated 16 Oct 2006
Mashups are an exciting genre of interactive Web applications that draw upon content retrieved from external data sources to create entirely new and innovative services. They are a hallmark of the second generation of Web applications informally known as Web 2.0. This introductory article explores what it means to be a mashup, the different classes of popular mashups constructed today, and the enabling technologies that mashup developers leverage to create their applications. Additionally, you'll see many of the emerging technical and social challenges that mashup developers face.
A new breed of Web-based data integration applications is sprouting up all across the Internet. Colloquially termed mashups, their popularity stems from the emphasis on interactive user participation and the monster-of-Frankenstein-like manner in which they aggregate and stitch together third-party data. The sprouting metaphor is a reasonable one; a mashup Web site is characterized by the way in which it spreads roots across the Web, drawing upon content and functionality retrieved from data sources that lay outside of its organizational boundaries.
This vague data-integration definition of a mashup certainly isn't a rigorous one. A good insight as to what makes a mashup is to look at the etymology of the term: it was borrowed from the pop music scene, where a mashup is a new song that is mixed from the vocal and instrumental tracks from two different source songs (usually belonging to different genres). Like these "bastard pop" songs, a mashup is an unusual or innovative composition of content (often from unrelated data sources), made for human (rather than computerized) consumption.
So, what might a mashup look like? The ChicagoCrime.org Web site is a great intuitive example of what's called a mapping mashup. One of the first mashups to gain widespread popularity in the press, the Web site mashes crime data from the Chicago Police Department's online database with cartography from Google Maps. Users can interact with the mashup site, such as instructing it to graphically display a map containing pushpins that reveal the details of all recent burglary crimes in South Chicago. The concept and the presentation are simple, and the composition of crime and map data is visually powerful.
In Mashup genres, you'll survey the popular genres of mashups, including mapping mashups. Related technologies overviews the technology landscape that relates to the construction and operation of mashups. Technical challenges and Social challenges present the eminent technical and social challenges, respectively, affecting mashups.
In this section, I give a brief survey of the prominent mashup genres.
In this age of information technology, humans are collecting a prodigious amount of data about things and activities, both of which are wont to be annotated with locations. All of these diverse data sets that contain location data are just screaming to be presented graphically using maps. One of the big catalysts for the advent of mashups was Google's introduction of its Google Maps API. This opened the floodgates, allowing Web developers (plus hobbyists, tinkerers, and others) to mash all sorts of data (everything from nuclear disasters to Boston's CowParade cows) onto maps. Not to be left out, APIs from Microsoft (Virtual Earth), Yahoo (Yahoo Maps), and AOL (MapQuest) shortly followed.
The emergence of photo hosting and social networking sites like Flickr with APIs that expose photo sharing has led to a variety of interesting mashups. Because these content providers have metadata associated with the images they host (such as who took the picture, what it is a picture of, where and when it was taken, and more), mashup designers can mash photos with other information that can be associated with the metadata. For example, a mashup might analyze song or poetry lyrics and create a mosaic or collage of relevant photos, or display social networking graphs based upon common photo metadata (subject, timestamp, and other metadata.). Yet another example might take as input a Web site (such as a news site like CNN) and render the text in photos by matching tagged photos to words from the news.
Search and shopping mashups have existed long before the term mashup was coined. Before the days of Web APIs, comparative shopping tools such as BizRate, PriceGrabber, MySimon, and Google's Froogle used combinations of business-to-business (b2b) technologies or screen-scraping to aggregate comparative price data. To facilitate mashups and other interesting Web applications, consumer marketplaces such as eBay and Amazon have released APIs for programmatically accessing their content.
News sources (such as the New York Times, the BBC, or Reuters) have used syndication technologies like RSS and Atom (described in the next section) since 2002 to disseminate news feeds related to various topics. Syndication feed mashups can aggregate a user's feeds and present them over the Web, creating a personalized newspaper that caters to the reader's particular interests. An example is Diggdot.us, which combines feeds from the techie-oriented news sources Digg.com, Slashdot.org, and Del.icio.us.
This section gives an overview of the technologies that are facilitating the development of mashups. For further information about any of these technologies, consult Resources at the end of this article.
A mashup application is architecturally comprised of three different participants that are logically and physically disjoint (they are likely separated by both network and organizational boundaries): API/content providers, the mashup site, and the client's Web browser.
- The API/content providers. These are the (sometimes unwitting) providers of the content being mashed. In the ChicagoCrime.org mashup example, the providers are Google and the Chicago Police Department. To facilitate data retrieval, providers often expose their content through Web-protocols such as REST, Web Services, and RSS/Atom (described below). However, many interesting potential data-sources do not (yet) conveniently expose APIs. Mashups that extract content from sites like Wikipedia, TV Guide, and virtually all government and public domain Web sites do so by a technique known as screen scraping. In this context, screen scraping connotes the process by which a tool attempts to extract information from the content provider by attempting to parse the provider's Web pages, which were originally intended for human consumption.
-
The mashup site. This is where the mashup is hosted. Interestingly enough, just because this is where the mashup logic resides, it is not necessarily where it is executed. On one hand, mashups can be implemented similarly to traditional Web applications using server-side dynamic content generation technologies like Java servlets, CGI, PHP or ASP.
Alternatively, mashed content can be generated directly within the client's browser through client-side scripting (that is, JavaScript) or applets. This client-side logic is often the combination of code directly embedded in the mashup's Web pages as well as scripting API libraries or applets (furnished by the content providers) referenced by these Web pages. Mashups using this approach can be termed rich internet applications (RIAs), meaning that they are very oriented towards the interactive user-experience. (Rich internet applications are one hallmark of what's now being termed "Web 2.0", the next generation of services available on the World Wide Web.) The benefits of client-side mashing include less overhead on behalf of the mashup server (data can be retrieved directly from the content provider) and a more seamless user-experience (pages can request updates for portions of their content without having to refresh the entire page). The Google Maps API is intended for access through browser-side JavaScript, and is an example of client-side technology.
Often mashups use a combination of both server and client-side logic to achieve their data aggregation. Many mashup applications use data that is supplied directly to them by their user base, making (at least) one of the data sets local. Additionally, performing complex queries on multiple-sourced data (such as "Show me the average purchase price for real estate bought by actors who have co-starred in movies with Kevin Bacon") requires computation that would be infeasible to perform within the client's Web browser.
- The client's Web browser. This is where the application is rendered graphically and where user interaction takes place. As described above, mashups often use client-side logic to assemble and compose the mashed content.
There is some dispute over whether the term Ajax is an acronym or not (some would have it represent "Asynchronous JavaScript + XML"). Regardless, Ajax is a Web application model rather than a specific technology. It comprises several technologies focused around the asynchronous loading and presentation of content:
- XHTML and CSS for style presentation
- The Document Object Model (DOM) API exposed by the browser for dynamic display and interaction
- Asynchronous data exchange, typically of XML data
- Browser-side scripting, primarily JavaScript
When used together, the goal of these technologies is to create a smooth, cohesive Web experience for the user by exchanging small amounts of data with the content servers rather than reload and re-render the entire page after some user action. You can construct Ajax engines for mashups from various Ajax toolkits and libraries (such as Sajax or Zimbra), usually implemented in JavaScript. The Google Maps API includes a proprietary Ajax engine, and the effect it has on the user experience is powerful: it behaves like a truly local application in that there are no scrollbars to manipulate or translation arrows that force page reloads.
Both SOAP and REST are platform neutral protocols for communicating with remote services. As part of the service-oriented architecture paradigm, clients can use SOAP and REST to interact with remote services without knowledge of their underlying platform implementation: the functionality of a service is completely conveyed by the description of the messages that it requests and responds with.
SOAP is a fundamental technology of the Web Services paradigm. Originally an acronym for Simple Object Access Protocol, SOAP has been re-termed Services-Oriented Access Protocol (or just SOAP) because its focus has shifted from object-based systems towards the interoperability of message exchange. There are two key components of the SOAP specification. The first is the use of an XML message format for platform-agnostic encoding, and the second is the message structure, which consists of a header and a body. The header is used to exchange contextual information that is not specific to the application payload (the body), such as authentication information. The SOAP message body encapsulates the application-specific payload. SOAP APIs for Web services are described by WSDL documents, which themselves describe what operations a service exposes, the format for the messages that it accepts (using XML Schema), and how to address it. SOAP messages are typically conveyed over HTTP transport, although other transports (such as JMS or e-mail) are equally viable.
REST is an acronym for Representational State Transfer, a technique of Web-based communication using just HTTP and XML. Its simplicity and lack of rigorous profiles set it apart from SOAP and lend to its attractiveness. Unlike the typical verb-based interfaces that you find in modern programming languages (which are composed of diverse methods such as getEmployee(), addEmployee(), listEmployees(), and more), REST fundamentally supports only a few operations (that is POST, GET, PUT, DELETE) that are applicable to all pieces of information. The emphasis in REST is on the pieces of information themselves, called resources. For example, a resource record for an employee is identified by a URI, retrieved through a GET operation, updated by a PUT operation, and so on. In this way, REST is similar to the document-literal style of SOAP services.
As mentioned earlier, lack of APIs from content providers often force mashup developers to resort to screen scraping in order to retrieve the information they seek to mash. Scraping is the process of using software tools to parse and analyze content that was originally written for human consumption in order to extract semantic data structures representative of that information that can be used and manipulated programmatically. A handful of mashups use screen scraping technology for data acquisition, especially when pulling data from the public sectors. For example, real-estate mapping mashups can mash for-sale or rental listings with maps from a cartography provider with scraped "comp" data obtained from the county records office. Another mashup project that scrapes data is XMLTV, a collection of tools that aggregates TV listings from all over the world.
Screen scraping is often considered an inelegant solution, and for good reasons. It has two primary inherent drawbacks. The first is that, unlike APIs with interfaces, scraping has no specific programmatic contract between content-provider and content-consumer. Scrapers must design their tools around a model of the source content and hope that the provider consistently adheres to this model of presentation. Web sites have a tendency to overhaul their look-and-feel periodically to remain fresh and stylish, which imparts severe maintenance headaches on behalf of the scrapers because their tools are likely to fail.
The second issue is the lack of sophisticated, re-usable screen-scraping toolkit software, colloquially known as scrAPIs. The dearth of such APIs and toolkits is largely due to the extremely application-specific needs of each individual scraping tool. This leads to large development overheads as designers are forced to reverse-engineer content, develop data models, parse, and aggregate raw data from the provider's site.
The inelegant aspects of screen scraping are directly traceable to the fact that content created for human consumption does not make good content for automated machine consumption. Enter the Semantic Web, which is the vision that the existing Web can be augmented to supplement the content designed for humans with equivalent machine-readable information. In the context of the Semantic Web, the term information is different from data; data becomes information when it conveys meaning (that is, it is understandable). The Semantic Web has the goal of creating Web infrastructure that augments data with metadata to give it meaning, thus making it suitable for automation, integration, reasoning, and re-use.
The W3C family of specifications collectively known as the Resource Description Framework (RDF) serves this purpose of providing methodologies to establish syntactic structures that describe data. XML in itself is not sufficient; it is too arbitrary in that you can code it in many ways to describe the same piece of data. RDF-Schema adds to RDF's ability to encode concepts in a machine-readable way. Once data objects can be described in a data model, RDF provides for the construction of relationships between data objects through subject-predicate-object triples ("subject S has relationship R with object O"). The combination of data model and graph of relationships allows for the creation of ontologies, which are hierarchical structures of knowledge that can be searched and formally reasoned about. For example, you might define a model in which a "carnivore-type" as a subclass of "animal-type" with the constraint that it "eats" other "animal-type", and create two instances of it: one populated with data concerning cheetahs and polar bears and their habitats, another concerning gazelles and penguins and their respective habitats. Inference engines might then "mash" these separate model instances and reason that cheetahs might prey on gazelles but not penguins.
RDF data is quickly finding adoption in a variety of domains, including social networking applications (such as FOAF -- Friend of a Friend) and syndication (such as RSS, which I describe next). In addition, RDF software technology and components are beginning to reach a level of maturity, especially in the areas of RDF query languages (such as RDQL and SPARQL) and programmatic frameworks and inference engines (such as Jena and Redland).
RSS is a family of XML-based syndication formats. In this context, syndication implies that a Web site that wants to distribute content creates an RSS document and registers the document with an RSS publisher. An RSS-enabled client can then check the publisher's feed for new content and react to it in an appropriate manner. RSS has been adopted to syndicate a wide variety of content, ranging from news articles and headlines, changelogs for CVS checkins or wiki pages, project updates, and even audiovisual data such as radio programs. Version 1.0 is RDF-based, but the most recent, version 2.0, is not.
Atom is a newer, but similar, syndication protocol. It is a proposed standard at the Internet Engineering Task Force (IETF) and seeks to maintain better metadata than RSS, provide better and more rigorous documentation, and incorporates the notion of constructs for common data representation.
These syndication technologies are great for mashups that aggregate event-based or update-driven content, such as news and weblog aggregators.
Like any other data integration domain, mashup development is replete with technical challenges that need to be addressed, especially as mashup applications become more feature- and functionality-rich. This section touches on a handful of these challenges, some of which you can address and mitigate, while others are open issues.
Data Integration Challenges: Semantic Meaning and Data Quality
Qualitative surveys suggest that the number one enterprise IT concern today is data integration within the enterprise virtual organization. (In this context, I use the term virtual organization to mean a composition of federated business units, each contained within its own administrative domain.) Like many enterprise IT managers who find themselves up to the task of integrating legacy data sources (for example, to create corporate dashboards that reflect current business conditions), mashup developers are faced with the analogous challenges of deriving shared semantic meaning between heterogeneous data sets. Therefore, to get an idea for what mashup developers have in store,you need look no further than the storied integration challenges faced by enterprise IT.
For example, translation systems between data models must be designed. When converting data into common forms, reasonable assumptions often have to be made when the mapping is not a complete one (for example, one data source might have a model in which an address-type contains a country-field, whereas another does not). Already challenging, this is exacerbated by the fact that the mashup developers might not be domain experts on the source data models because the models are third-party to them, and these reasonable assumptions might not be intuitive or clear.
In addition to missing data or incomplete mappings, the mashup designer might discover that the data they wish to integrate is not suitable for machine automation; that it needs cleansing. For example, law enforcement arrest records might be entered inconsistently, using common abbreviations for names (such as "mkt sqr" in one record and "Market Square" in another), making automated reasoning about equality difficult, even with good heuristics. Semantic modeling technologies, such as RDF, can help ease the problem of automatic reasoning between different data sets, provided that it is built-in to the data-store. Legacy data sources are likely to require much human effort in terms of analysis and data cleansing before they can be availed to semantic modeling technologies.
Mashup developers might also have to contend with several issues that IT integration managers might not, one of which is data pollution. As part of their application design, many mashups solicit public user input. As evidenced in the wiki application domain, this is a double-edged blade: it can be quite powerful because it enables open contribution and best-of-breed data evolution, yet it can be subject to inconsistent, incorrect, or intentionally misleading data entry. The latter can cast doubts on data trustworthiness, which can ultimately compromise the value provided by the mashup.
Another host of integration issues facing mashup developers arise when screen scraping techniques must be used for data acquisition. As discussed in the previous section, deriving parsing and acquisition tools and data models requires significant reverse-engineering effort. Even in the best case where these tools and models can be created, all it takes is a re-factoring of how the source site presents its content (or mothballing and abandonment) to break the integration process, and cause mashup application failure.
The Ajax model of Web development can provide a much richer and more seamless user experience than the traditional full-page-refresh, but it poses some difficulties as well. At its fundamentals, Ajax entails using the browser's client-side scripting capabilities in conjunction with its DOM to achieve a method of content delivery that was not entirely envisioned by the browser's designers. (Perhaps this hack-like nature of Ajax lends to its appeal.) However, this subjects Ajax-based applications to the same browser compatibility issues that have plagued Web designers ever since Microsoft created Internet Explorer. For example, Ajax engines make use of an XMLHttpRequst object to exchange data asynchronously with remote servers. In Internet Explorer 6, this object is implemented with ActiveX rather than native JavaScript, which requires that ActiveX be enabled.
A more fundamental requirement is that Ajax requires that JavaScript be enabled within the user's browser. This might be a reasonable assumption for the majority of the population, but there are certainly users who use browsers or automated tools that either do not support JavaScript or do not have it enabled. One such set of tools are the robots, spiders, and Web crawlers that aggregate information for Internet and intranet search engines. Without graceful degradation, Ajax-based mashup applications might find themselves missing out on both a minority user base as well as search engine visibility.
The use of JavaScript to asynchronously update content within the page can also create user interface issues. Because content is no longer necessarily linked to the URL in the browser's address bar, users might not experience the functionality that they normally expect when they use the browser's BACK button, or the BOOKMARK feature. And, although Ajax can reduce latency by requesting incremental content updates, poor designs can actually hinder the user experience, such as when the granularity of update is small enough that the quantity and overhead of updates saturate the available resources. Also, take care to support the user (for example, with visual feedback such as progress bars) while the interface loads or content is updated.
As with any distributed, cross-domain application, mashup developers and content providers alike will also need to address security concerns. The notion of identity can prove to be a sticky subject, as the traditional Web is primarily built for anonymous access. Single-signon is a desirable feature, but there are a multitude of competing technologies (ranging from Microsoft Passport to the Liberty Alliance), thus creating disjointed identity namespaces that you must integrate as well. Content providers are likely to employ authentication and authorization schemes (which require the notion of secure identity or securely identifiable attributes) in their APIs to enforce business models that involve paid subscriptions or sensitive data. Sensitive data is also likely to require confidentiality (that is, encryption), and you must take care when you mash it with other sources to not put it at risk. Identity will also be crucial for auditing and regulatory compliance. Additionally, with data integration happening both on the server and client-side, identity and credential delegation from the user to the mashup service might become a requirement.
In addition to the technical challenges described in the previous section, social issues have (or will) surface as mashups become more popular.
One of the biggest social issues facing mashup developers is the tradeoff between the protection of intellectual property and consumer privacy versus fair-use and the free flow of information. Unwitting content providers (targets of screen scraping), and even content providers who expose APIs to facilitate data retrieval might determine that their content is being used in a manner that they do not approve of. For a good review of Web aggregation and regulations, see Resources.
The mashup Web application genre is still in its infancy, with hobbyist developers who produce many mashups in their spare time. These developers might not be cognizant of (or concerned with) issues such as security. Additionally, content providers are only beginning to see the value in providing APIs for machine-based content access, and many do not consider them a core business focus. This combination can yield poor software quality, as priorities such as testing and quality assurance take the backseat to proof-of-concept and innovation. The community as a whole will have to work together to assemble open standards and reusable toolkits in order to facilitate mature software development processes.
Before mashups can make the transition from cool toys to sophisticated applications, much work will have to go into distilling robust standards, protocols, models, and toolkits. For this to happen, major software development industry leaders, content providers, and entrepreneurs will have to find value in mashups, which means viable business models. API providers will need to determine whether or not to charge for their content, and if so, how (for example, by subscription or by per-use). Perhaps they will provide varying levels of quality-of-service. Some marketplace providers, such as eBay or Amazon, might find that the free use of their APIs increases product movement. Mashup developers might look for an ad-based revenue model, or perhaps build interesting mashup applications with the goal of being acquired.
Tutorials in the "The ultimate mashup -- Web services and the semantic Web" series
- Part 1: Use and combine Web services
- Part 2: Manage a mashup data cache
- Part 3: Understand RDF and RDFs
- Part 4: Create an ontology
- Part 5: Change out Web services
- Part 6: Give the user control
Mashups are certainly an exciting new genre of Web applications. The combination of data modeling technologies stemming from the Semantic Web domain and the maturation of loosely-coupled, service-oriented, platform-agnostic communication protocols is finally providing the infrastructure needed to start developing applications that can leverage and integrate the massive amount of information that is available on the Web. As mashup applications gain higher visibility, it will be interesting to see how the genre impacts social issues such as fair-use and intellectual property as well as other application domains that integrate data across organizational boundaries, such as grid computing and business-to-business workflow management.
For a deeper-dive into mashup development, stay tuned for the launching of a new series of tutorials on developerWorks that will teach you how to construct your own mashups. In fact, the series will even teach you how to use Semantic Web technology and ontologies to enable others to create their own mashups.
Learn
- Programmable Web: Stay up to date with the latest on mashups and the new Web 2.0 APIs.
- Considering Ajax, Part 1: Cut through the hype (Chris Laffra, developerWorks, May 2006): Consider this set of discussion points for every developer before you use Ajax techniques for a Web site.
- Ajax page: Visit this page sponsored by the Mozilla Development Center.
- The Interplay of Web Aggregation and Regulations (LawTech): Be sure to read this good review of Web aggregation and regulations (PDF file).
- DB2 and open source: Put yourself on the map with Google Maps API, DB2/Informix, and PHP on Linux (Marty Lurie and Aron Y. Lurie, developerWorks, March 2006): Create an easy-to-use map with your data on it.
- Building Web service applications with the Google API (Nicholas Chase, developerWorks, May 2002): Learn to embed Google search results and other information in your Java applications in this tutorial.
- The ultimate mashup -- Web services and the semantic Web tutorial series: Take the all the tutorials in this series and create a custom mashup.
- Second Generation Web Services: Read this XML.com article for coverage of the REST architecture.
- REST and the Real World: Read more on REST from XML.com.
- The W3C Semantic Web Activity site: Read about the Semantic Web.
- W3C RDF Activity: Visit this site for the latest on Resource Description Framework.
- Introduction to Jena: Use RDF models in your Java applications with the Jena Semantic Web Framework (Philip McCarthy, developerWorks, June 2004): Find out how to use the Jena Semantic Web Toolkit to exploit RDF data models in your Java applications.
- What is RSS?: From XML.com, learn about this syndication format for news, content, and personal weblogs.
- Atom Overview: Read about the XML-based Web content and metadata syndication format and application-level protocol from AtomEnabled.org.
- IBM XML 1.1 certification: Find out how you can become an IBM Certified Developer in XML 1.1 and related technologies.
- XML: See developerWorks XML Zone for a wide range of technical articles and tips, tutorials, standards, and IBM Redbooks.
- developerWorks technical events and webcasts: Stay current with technology in these sessions.
Get products and technologies
- W3C SOAP Specification: Get the latest version.
- Scraping with style: scrAPI toolkit for Ruby: Try this technology for your mashups.
Discuss
- XML zone discussion forums: Participate in any of several XML-centered forums.
Duane Merrill has developed grid computing and distributed data integration platforms for over five years. He has been a contributor to the Legion Project at the University of Virginia and a core developer for the Avaki Corporation's distributed enterprise information integration product Avaki. He is currently obtaining his Ph.D in Computer Science at the University of Virginia.


