« Previous : 1 : 2 : 3 : 4 : 5 : ... 38 : Next »

ipv6 프로그래밍시 유용한 코드들

출처

http://cydream.net/tt/54

include/linux/kernel.h

#define NIPQUAD(addr) \
((unsigned char *)&addr)[0], \들
((unsigned char *)&addr)[1], \
((unsigned char *)&addr)[2], \
((unsigned char *)&addr)[3]
#define NIPQUAD_FMT "%u.%u.%u.%u"

IPv4 주소를 000.000.000.000 형태로 포맷팅한다.

#define NIP6(addr) \
ntohs((addr).s6_addr16[0]), \
ntohs((addr).s6_addr16[1]), \
ntohs((addr).s6_addr16[2]), \
ntohs((addr).s6_addr16[3]), \
ntohs((addr).s6_addr16[4]), \
ntohs((addr).s6_addr16[5]), \
ntohs((addr).s6_addr16[6]), \
ntohs((addr).s6_addr16[7])
#define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
#define NIP6_SEQFMT "%04x%04x%04x%04x%04x%04x%04x%04x"

IPv6 주소를 0000:0000:0000:0000:0000:0000:0000:0000 형태로 포맷팅한다.

include/linux/ipv6.h

struct ipv6hdr {
__u8   version:4,
   priority:4;
__u8   flow_lbl[3];

__u16   payload_len;
__u8   nexthdr;
__u8   hop_limit;

struct in6_addr saddr;
struct in6_addr daddr;
};

IPv6 헤더 구조.
4|24
16|8|8
32x4
32x4

struct ipv6_opt_hdr {
__u8   nexthdr;
__u8   hdrlen;
/*
  * TLV encoded option data follows.
  */
};

IPv6 옵션헤더. hdrlen에 정의된 길이만큼 TLV로 인코딩된 옵션 데이터가 존재한다.

int ipv6_optlen(u8 *nexthdrp)

nexthdrp로 가리키는 옵션헤더의 길이를 알려준다.

int ipv6_skip_exthdr(const struct sk_buff *skb, int start, u8 *nexthdrp)

주어진 skb에서 nexthdrp로 나타내어지는 옵션헤더를 건너뛴다.

static inline void ipv6_addr_copy(struct in6_addr *a1, const struct in6_addr *a2)

a1의 주소를 a2로 복사한다.

static inline void ipv6_addr_set(struct in6_addr *addr, __u32 w1, __u32 w2, __u32 w3, __u32 w4)

addr로 표현되는 IPv6 주소 구조체를 w1,w2,w3,w4의 값으로 설정한다.

static inline int ipv6_addr_equal(const struct in6_addr *a1, const struct in6_addr *a2)

a1과 a2의 주소가 일치하는지 확인한다.


include/linux/ip6_checksum.h

static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, __u16 len, unsigned short proto, unsigned int csum)

해당 IPv6 패킷의 checksum을 계산한다.


include/linux/skbuff.h

extern void kfree_skb(struct sk_buff *skb);

skb를 위해 할당된 공간을 해제한다.

extern struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int fclone);

새로운 skb를 할당한다.

extern struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t priority);
extern struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t priority);

주어진 skb를 복사한다.

extern struct sk_buff *skb_realloc_headroom(struct sk_buff *skb, unsigned int headroom);

주어진 skb의 headroom 공간을 주어진 크기로 재조정한다.

static inline struct sk_buff *skb_peek(struct sk_buff_head *list_)

skb 리스트중 첫 아이템을 peek 한다. list에서 삭제하지는 않음.

static inline __u32 skb_queue_len(const struct sk_buff_head *list_)

skb 리스트의 길이를 반환한다.

static inline struct sk_buff *skb_peek_tail(struct sk_buff_head *list_)

skb 리스트중 마지막 아이템을 peek 한다. list에서 삭제하지는 않음.

extern struct sk_buff *skb_dequeue(struct sk_buff_head *list);

skb 리스트중 첫 아이템을 꺼낸다.

extern void skb_insert(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);
extern void skb_append(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);

list로 주어지는 skb에 새로운 skb를 삽입한다.

static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, int len, void *buffer)

skb에 존재하는 패킷의 헤더 위치를 반환한다.

static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp)
static inline void skb_set_timestamp(const struct sk_buff *skb, struct timeval *stamp)

skb에 기록된 timestamp를 반환/설정한다.

static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
static inline unsigned char *skb_push(struct sk_buff *skb, unsigned int len)

skb의 앞/뒤에 len 길이만큼의 공간을 확보한다.

static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)

skb로 부터 len 길이만큼을 읽어온다.

static inline int skb_add_data(struct sk_buff *skb, char __user *from, int copy)

skb에 from으로부터 copy 만큼의 데이터를 복사한다.

Posted by 눈빛마음

2010/09/07 11:47 2010/09/07 11:47
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/563

출처 : http://suselinux.co.kr/bbs/board.php?bo_table=tip&wr_id=1701&page=3

나만의 정리
id_rsa는 비밀키다.
즉 id_rsa가 내 컴퓨터에서 있어야 하고
id_rsa.pub 파일은 접속할 컴퓨터의 authorized_keys에 들어 있어야 하는 것이다.
물론 AuthorizedKeysFile 설정은 접속할 컴퓨터가 적용되어 있어야 하는 것이고.



오늘은 간단한 ssh 관련 팁을 소개하고자 한다.
가끔 많은 수의 시스템을 관리하다 보면 중복적인 시스템 로그인 과정에서 ID와 Password를 입력하여 로그인 하는 과정이 다소 불편하다고 느낄때가 있다.

물론 이는 ssh 를 사용하지 않고 telnet 서비스를 사용한다면 Linux 시스템에서 기본적으로 제공하고 있는 tcsh 등을 이용한 간단한 스크립트 프로그램을 작성하여 암호 인증없이 로그인 하는것이 가능하다.

하지만 telnet 서비스는 독자들도 알다 시피 스니핑등의 보안취약성이 잠재하는 매우 취약한 서비스로서 최근에는Windows군을제외하고 대부분의 Unix 나 Linux 시스템등에서는 권장하지 않거나 아예 배제 시키는것이 추세이다.

그렇다면 이러한 불편함을 그냥 계속 갖고 ssh 서비스를 이용해야 하는것일까?

대답은 NO 이다.

SSH 서비스는 기본적으로 telnet 서비스와는 달리 주고 받는 데이터를 암호화 하여 전송하기 때문에 상대적으로 스니핑등의 크래킹 행위에 대해서 안전한것으로 알려져 있다.

SSH서비스의 암호화와 복호화 과정에는 RSA 와 DSA 라는 쌍생성 키가 존재하여 데이터를 주고받는 양쪽의 시스템에해당키값들이저장되어 있다가 해당 키값을 요구할때 키값을 제공 하여 확인후 데이터를 복호화 하여 처리하게 되는 것이다.

그렇다면...

해당 키값과 그 키값에 password 값만 들어있다면 로그인 과정이 생략될수도 있지 않을까?

그렇다 SSH에서는 기본적으로 그러한 기능을 제공하고 있다.

그럼 지금부터 로그인 과정없이 ssh 인증을 통과할수 있도록 처리해 보자.

일단은 두대의 시스템이 필요하다.

한대는 로그인 작업을 할 시스템이며 다른 한대는 원격지 서버 즉 로그인 대상 시스템이 되는것이다. (편의상 작업 시스템은 A시스템 원격지 시스템은 B시스템으로 불르겠다.)

우선은 두대의 시스템 모두에서 다음과 같이 ssh  설정파일을 열어 인증관련 지시자를 활성화 시켜주어야 한다.

[root@master ~]# vi /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

[root@master .ssh]# service sshd restart


[root@cluster1 ~]# vi /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

[root@cluster .ssh]# service sshd restart


그 다음 로그인 대상 시스템인 원격지 B시스템에 로그인 하여 다음과 같은 커맨드를 실행한다.

[root@cluster1 ~]# ssh-keygen -t rsa

그러면 rsa 키값을 저장할 경로와 이름을 묻게된다.
여기서 그냥 엔터를 치게되면 디폴트 값으로 저장이 되며 관계가 없기 때문에 그냥 엔터를 치도록 하자.

그 다음은 password 를 물을 것이다.
이것은 로그인시 사용할 패스워드를 묻는것인데 여기서 그냥 엔터를 처버리면 되는것이다.
그럼 다음과 같이 아무런 값도 없는 null 값의 키값이 암호와 인증키가 되어 생성되어진다.

[root@cluster1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
78:87:5e:4b:8e:5c:1c:ec:12:be:ea:2f:0e:58:a1:2e root@cluster1
[root@cluster1 ~]#

이제 해당 인증 키값을 authorized_keys 라는 이름으로 copy할 차례이다.

위에서 보면 /root/.ssh/id_rsa.pub 라는 경로와 이름으로 public key 가 생성된것을 알수 있다.

[root@cluster1 ~]# pwd
/root
[root@cluster1 ~]# cd .ssh/
[root@cluster1 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@cluster1 .ssh]#
[root@cluster1 .ssh]# cp -RfpP id_rsa.pub authorized_keys

그다음 다음과 같이 키값의 복사를 위해 vi 등으로 해당 파일을 열어서 해당 내용을 copy 하도록 하자.

[root@cluster1 .ssh]# vi authorized_keys

ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAIEAuXEEbsmiRJDf4qTssziT59oBkTSJ1zD1CJqKH5tQQWSYR/Mdmofe74jVlrsLy1Xi0W9DgQx/AAko0FsiH/Ouc5l/9BVDSrZlFsnc/AqJ0MLl4kHXLW8fLkAyWG9mogbh5e25Z66nM4UCHgOhWalU/vX9mIYeurpVrpIc0UgiV7c=root@cluster1

위에서와 같이 암호화 되어진 public key 값이 보인다 .  이것을 copy 하여 작업 시스템인 A 시스템에 추가해 주면 되는 아주 간단한 작업인 것이다.

이제 작업 시스템인 시스템 A로 돌아가 처음과 같이 동일한 작업을 수행해 준다.

[root@master ~]# pwd
/root
[root@master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0b:30:8c:0c:65:7c:f8:37:6a:06:d5:16:d8:77:a0:6f root@master
[root@master ~]#
[root@master ~]#
[root@master ~]#
[root@master ~]# cd .ssh/
[root@master .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@master .ssh]#
[root@master .ssh]# cp -RfpP id_rsa.pub authorized_keys

그 다음 방금전  copy 한 시스템 B의 키값을 추가하면 끝이나는 것이다.

[root@master ~]# vi /root/.ssh/authorized_keys

ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAIEAx2XbqUColepSsLs7vbVYxJFn0CadJw/MzVcpY6oLxv69CiWDqcRZ1zwGOgj/gvwPwMmHHVMNxacFIrCXU+Q0vkwh1DqRj77PDhVRIq4zM5IFgpJc+5YrcRhwXFxQne5aC/vCIlHm/RXUeCstX5u9UgAkbNoTIt78oV34L/wxwNs=root@master

ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAIEAuXEEbsmiRJDf4qTssziT59oBkTSJ1zD1CJqKH5tQQWSYR/Mdmofe74jVlrsLy1Xi0W9DgQx/AAko0FsiH/Ouc5l/9BVDSrZlFsnc/AqJ0MLl4kHXLW8fLkAyWG9mogbh5e25Z66nM4UCHgOhWalU/vX9mIYeurpVrpIc0UgiV7c=root@cluster1

그리고 다시 시스템 A의 고유 키값을 다시 시스템 B쪽에 동일한 방법으로 추가해 준다.

이런 작업이 끝나고 나면 키값으로 인증을 마칠 환경 구성이 끝난것이다


자 이제 로그인 해보자~

[root@master /]#
[root@master /]#
[root@master /]# ssh root@cluster1
Last login: Fri Nov  3 18:13:18 2006 from 192.168.10.104
[root@cluster1 ~]#
[root@cluster1 ~]#
[root@cluster1 ~]#

보이는것과 같이 아무런 패스워드 인증과정 없이 로그인에 성공한 것이다.

오늘은 리눅스 시스템의 원격 쉘을 수행하는 SSH 서비스의 인증과정을 생략하는 방법에 대해서 알아 보았다.

이 방법은 내부 시스템 혹은 잣은 로그인이 필요한 시스템에만 수행하는것이 좋다.
물론 시스템 내에 인증 키값이 외부로 유출이 되었다고 한다 해도 해당 호스트 명과 인증키의 생성정보가 맞지 않기 때문에 소용이 없다.

하지만 완벽한 보안은 없는것 처럼 아무리 ssh 서비스가 보안에 뛰어나다고 해도 해당 키값이 외부로 유출 되어진다면 그다지 좋은 영향은 없을것으로 생각된다.

그렇기에 이 방법을 사용한 시스템 로그인 환경을 구성할때는 인증키 관리에 부단한 신경을 써야할 것이다.

Posted by 눈빛마음

2010/08/23 10:59 2010/08/23 10:59
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/562

gdb를 잘 쓰고 싶다! 그럼 읽어봐!

Segmentation fault에 대한 설명

gdb 실행시 인자를 주고 싶다!

gdb 실행시 break point를 잘 쓰고 싶다.



Posted by 눈빛마음

2010/08/19 20:29 2010/08/19 20:29
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/561

ubuntu에서 타임머신 돌리기

http://kldp.org/node/115114 원문 입니다.

Posted by 눈빛마음

2010/07/31 11:43 2010/07/31 11:43
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/560


ip alias 하기 모든 배포판 요약본

http://www.cyberciti.biz/faq/linux-creating-or-adding-new-network-alias-to-a-network-card-nic/

Linux Creating or Adding New Network Alias To a Network Card (NIC)

by NIXCRAFT · 6 COMMENTS

Q. I would like to create alias for my network card (NIC). How do I setup 2 IP address on One NIC? How do I add alias under Centos / Fedora / Debian / Ubuntu Linux?

A. Linux allows you to add additional network address using alias feature. Please note that all additional network IP address must be in same subnet. For example if your eth0 using 192.168.1.5 IP address then alias must be setup using 192.168.1.0/24 subnet.

ifconfig command line

You can use ifconfig command to configure a network interface and alias. For example:

  • eth0 NIC IP 192.168.1.5
  • eth0:0 first NIC alias: 192.168.1.6

To setup eth0:0 alias type the following command as the root user:
# ifconfig eth0:0 192.168.1.6 up
Verify alias is up and running using following command:
# ifconfig -a
# ping 192.168.1.6
However, if you reboot the system you will lost all your alias. To make it permanent you need to add it network configuration file.

Debian / Ubuntu Linux Instructions

You can configure the additional IP addresses automatically at boot with another iface statement in /etc/network/interfaces:
# vi /etc/network/interfaces
Append text as follows:

auto eth0:1
iface eth0:1 inet static
name Ethernet alias LAN card
address 192.168.1.7
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0

Save and close the file. Restart the network:
# /etc/init.d/networking restart

Red Hat / RHEL / CentOS / Fedora Linux Instructions

Copy etc/sysconfig/network-scripts/ifcfg-eth0 file as /etc/sysconfig/network-scripts/ifcfg-eth0:0
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
Open file /etc/sysconfig/network-scripts/ifcfg-eth0:0 using vi text editor:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
Find entry that read as follows:

DEVICE=eth0

Replace with:

DEVICE=eth0:0

Find entry that read as follows:

IPADDR=xxx.xxx.xxx.xxx

Replace it with your actual IP address:

IPADDR=192.168.1.7

At the end your file should like as follows:

DEVICE=eth0:0
IPADDR=192.168.1.7
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
NAME=eth0:0

Open file /etc/sysconfig/network-scripts/ifcfg-eth0 and make sure file does not have a GATEWAY= entry:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
Find the entry that read as follows:

GATEWAY=your-ip

Remove or comment it out by prefixing # (hash) :

 # GATEWAY=192.168.1.254

Save the file. Add the GATEWAY= to your /etc/sysconfig/network:

# vi /etc/sysconfig/network

Append or modify GATEWAY entry:

GATEWAY=192.168.1.254

Save the file. Reboot the system or run the following command:

# ifup eth0:0

OR

# service network restart

Red Hat / CentOS / Fedora Multiple IP address range

You can assign multiple ip address range as follows to eth0:
vi /etc/sysconfig/network-scripts/ifcfg-eth0-range0
Append following code from 202.54.112.120 to 202.54.112.140:

IPADDR_START=202.54.112.120
IPADDR_END=202.54.112.140
CLONENUM_START=0
NETMASK=255.255.255.0

Save and close the file.

Posted by 눈빛마음

2010/05/20 20:37 2010/05/20 20:37
, ,
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/557

파일 백업

제 블로그를 방문해주시는 분들을 위한 팁!
Bash를 이용한 타겟 지정 파일 백업 팁(?) 이라고 부르기는 뭐하지만... 암튼 그거


#!/bin/bash
SOURCEDIR=/home/iz4blue/clien_data_cs1/cs2_data/
BASEDIR=/home/iz4blue/backup/clien_cs2_data/
HEAD=files_
DEST[1]="cheditor4"
DEST[2]="log"
DEST[3]="member"
DEST[4]="memo2"
DEST[5]="memo2_deleted"
DEST[6]="file"

TARGETDIR=$BASEDIR$HEAD`date +%Y%m%d`/
mkdir $TARGETDIR

for TMP in  "${DEST[@]}"
do
echo "START Copy $TMP Directory : `date`" >> ${TARGETDIR}log.txt
cp -r $SOURCEDIR$TMP $TARGETDIR
echo "END Copy $TMP Directory : `date`" >> ${TARGETDIR}log.txt
done

이 스크립트의 기능을 약간 요약하자면
1. for loop 구문 사용
2. 변수명 명확하게 구분하기
3. 배열 사용하기

Posted by 눈빛마음

2010/05/10 10:16 2010/05/10 10:16
,
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/556

http://ubuntuforums.org/showthread.php?t=1168360&page=2

결론적으로 이야기 하면 다음과 같다.
우선 일반적인 곳에서는 /dev/md0 로 raid 를 만들게 된다.
그런데 최근커널의 auto-detect는 /dev/md_d0 와 같은 형태의 디바이스로 생기는 것 때문에 생기는 현상이다.

mdadm --stop /dev/md_d0
mdadm --auto-detect

/usr/share/mdadm/mkconf force-generate /etc/mdadm/mdadm.conf
update-initramfs -u

ps. 이것 때문에 무려 RAID 3번 생성 총 3주의 시간을 허비했다. 이런 -_-;;


I found the same problem after an upgrade to linux-image-2.6.28-11-server (Jaunty, 9.04) when the /etc/mdadm/mdadm.conf file inside the initrd image had information that did not match the UUIDs of the real arrays, thus auto-start failed leaving me with /dev/md_d0, /dev/md_d1 and /dev/md_d2 instead of /dev/md0, /dev/md1, and dev/md2 as expected.

I then ran "mdadm --stop /dev/md_d0", then on md_d1, etc, to clear the bad assemble attempt (check /proc/mdstat to see), then ran "mdadm --auto-detect", mainly to just see what the issue was with auto-starting of the arrays, however it created them again but properly this time. I then let it finish the boot process at that point. All seemed fine. After the system was up, I then force-recreated the mdadm.conf file so the UUIDs matched... "/usr/share/mdadm/mkconf force-generate /etc/mdadm/mdadm.conf" (copy your mdadm.conf to /var/tmp or something first, if you want to diff it later). Then ran "update-initramfs -u" to re-build the initrd images. Then I rebooted.

Reboot went fine. All arrays recognized and auto-started properly. No leftover /dev/md_d0 and friends, so I have to assume that when the arrays auto-start properly, at some point they are renamed to match what's in /etc/mdadm/mdadm.conf. *shrug* YMMV.

Posted by 눈빛마음

2010/05/02 14:32 2010/05/02 14:32
,
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/555

스마트폰 앱에 관한 사설

http://rind.egloos.com/5258312

아이폰 사용자 백명중에 한명이 다이어트 헬퍼를 받았다. 이정도면 메가 히트작쯤 되지 않겠는가. 과연 수익이 얼마일까?

정부에서 앱 개발자를 육성하다고 한다. 좀 쌍시옷 소리 좀 하겠다.
어제 대한민국 대표 신문이라고 일컫는 ㅈ모신문과 인터뷰 아닌 인터뷰를 했다. 그래도 역시 ㅈ일보라고, 상황을 그래도 제일 잘 파악하고 있더라. 나를 만나기 전 만난 개발자는 아이폰 앱 20개 개발해서 겨우 150만원 건졌다고 한다. 이게 대다수 앱 개발자의 현실이라고 보면 된다. 잘 나가는 앱, 말 그대로 손에 꼽는다.  숫자 밝히자면, 요즘 다이어트헬퍼 하루에 40개정도 나간다. 1달러짜리 앱 기준으로 하루 120개 정도의 수익이다. 내가 알기로 유료앱 100 팔리면 탑 100에서도 상위권이다. 이걸로  못먹고 살지 당연히.
다이어트헬퍼 3.0 기능 구현 다 되었으면서도 안푸는게 괜히 그런게 아니다. 현재 개발 반쯤 끝난 KAP이랑 동시에 출시 안하면 못먹고 살거 같으니 그런거지 -_);/  사실, 다이어트 헬퍼는 판매 좀 줄여야된다.

아이폰 앱시장에 대하여

1. 게임 시장
투입되는 자본량(또는 인력량)이 무슨 꼬꼬마가 건드릴게 아니다. 게임 시장의 경쟁이 어느정도 된다면 아예 건드릴 엄두를 못낼거다.

2. SI시장.
지금 아이폰 SI가 꽤 높은 가격을 받는건 사실이다. 얼마나 갈까? 1년가면 오래가는거라고 본다. 쾌속개발툴들 덕분에 소스단가는 낮아지고 있고, 회사마다 라이브러리 프레임웍 하나씩 갖출때쯤 동시에 무너질거다. 증권사들 HTS전부 한군데에서 만드는 것 처럼 SI시장은 곧 무너질 수 밖에 없다. 사실상 스마트폰에서 할 수 있는 일은 웹에서 데이타 긁어서 보여주는 것밖에 없다. 지금 삼천만원, 오천만원 받아서 횡재했다고 생각하는 스마트폰 업체들 무너지는거 일순간이라고 본다. 지금 외주주는 회사들은 결국 자사 전산망에서 해결하려 들걸. 그리고 나중엔 웹에이젼시를 통하여 개발하려 하지 앱에이젼시를 통하려 하진 않을거라고 본다.

3. 광고시장
네이버 블로그에 광고 달아서 돈 버는 사람 봤냐.  행운의 편지마냥 한 사람 통장에 돈 넣어주고 50개 글 싸질르면 그중에 7명의 사람이 자신에게 돈 준다는 그 예전에 유행했던 광고가 생각나는 이유는 뭐냐.

4. 유틸리티 시장
아이디어 좋아서 하나 만들었다고 치자. 다른 사람이 그 아이디어 그대로 무료로 푸는거 일순간이다.  웹메일 시장이 왜 다 무너졌는지 이해하면 빠르다. 한군데에서 무료로 풀면, 게임은 끝.  다이어트헬퍼는 미친척 DB때려박아서 저정도 순위권에서 버티는거지,  (그래도 얼마나 갈거같냐)

5. KT/SKT 외주( ? ) 시장
자기들 앱스토어 텅 비니까 어떻게든 해결하려고 하는데, 이것도 과연 오래 갈까 싶다. 통신사들도 제 살 깎아먹을거라는거 모르는거 아닐테고.  일단 몇개 이런식으로 퍼블리쉬한 다음에는 뭐 먹고 살까 걱정하면, 역시 깝깝하긴 깝대형이다. KT는 무려 MHP 앱까지 만들 태세던데, 과연 그 환경에서 개발이 쉬울까도 문제지만, 이거 뭐 .... 답이 없어. LGT는 리비젼A라서 어떻게든 SKT KT앱스토어에 빌붙을려는 모양이다만, SKT가 허락해줄리 없지. 그게 바로 SKT의 한계라고 본다만.



앱시장은 환상이다. 지금 저 수만가지 앱중에서 수익이 150이라도 넘어서 애플에서 돈 받는 개발자가 몇명이나 될 거 같냐. 지금 다들 마약처럼 들떠있는데, 좀 적나라하게 앱 개발자 수익 까보면, 말 그대로 처참하다. 정부가 청년실업 어떻게 해결하겠다고 1인기업 어쩌고 하는 모양이지만 이것도 정말 실상 알고나면 어이가 없다.  얼마전 알아봤던 정부 지원은 말 그대로 /1인/ 이어야 된다. 회사로 출근하는 알바생 한명 데리고 있으면 지원대상이 아니란다. 다이어트헬퍼 정말 한 사람이서 만들 수 있을까? _- ? 상식적으로 데이타관리, 개발및 기획, 디자이너 최소한 셋은 있어야된다. 이런걸 생까고 말 그대로 숫자 '1'에 집착한다.  중기청에서 제공해준다는 사무실은 오후 여섯시 반이면 퇴근해야된단다. 참으로 웃긴 비극이다.

그래도 앱시장에 뛰어들겠다는 사람에게 조언을 하자면

1. 자신의 능력을 의심해라
내가 만드는 앱이 진짜 잘 팔릴것 같은지 고민 좀 해봐라.

2. 자신의 앱을 의심해라
뭐 그냥 뚝딱뚝딱 여러개 만들어서 돈 벌 생각 하는 사람이 많다. 여러개 중에 하나 정도는 걸리겠지. 이거 마치 주식시장에서 아무거나 마구 사놓고 '그중 하나 걸리겠지' 라거나 문방구앞 뽑기에서 열심히 긁어대는 초딩과 뭐가 다르냐고 묻고 싶다.


3. 그냥하지마!!

Posted by 눈빛마음

2010/05/01 15:25 2010/05/01 15:25
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/554

export LC_CTYPE=ko_KR.UTF-8 나
export LC_CTYPE=en_US.UTF-8 을 이용하면 되는 것 같다.

2개의 차이점이 약간 있는 것 같은데 아직은 정확히 찾아내지는 못하였다.
짐작으로는 한글입력 위치에 대한 보존은 en_US.UTF-8 이 더 정확하게 맞는 것 같기도 하다.

http://juretta.com/log/2007/05/09/svn_can_t_convert_string_from_utf-8_to_native_encoding_/

Posted by 눈빛마음

2010/04/30 17:57 2010/04/30 17:57
,
Response
No Trackback , No Comment
RSS :
http://iz.apgu.co.kr/tc/rss/response/552

« Previous : 1 : 2 : 3 : 4 : 5 : ... 38 : Next »

블로그 이미지

눈빛마음의 사색공간

- 눈빛마음

Archives

Calendar

«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Site Stats

Total hits:
296140
Today:
51
Yesterday:
83