2007년 4월 30일 월요일

쇼핑몰에 이미지 링크를 거는 전문 서비스

http://www.topmania.com/
탑 매니아 이미지 링크 - 무제한이며 사용한 만큼 비용을 지불한다.
초당 10M를 15만원에 제공함

카페 24같은 경우 종량제이긴 한데 한도가 결제가 500G단위라 관리자도 모르게 이미지가 끊어져 버리는 경우가 종종 있다.

2007년 4월 27일 금요일

오예~ adSense 누가 누른겨~~

사용자 삽입 이미지




어라 이것봐라..3센트 벌었네.ㅋㅋㅋ 좋아좋아~

혜승이 에게 어린이날이란..

혜승이는 매일 뭔가를 사달라고 한다.
아빠 나 이거 사줘, 저거 사줘 하지만 정작 사준적은 거의 없다, 일년에 혜승이가 선물을 받을 수 있는 날은 공식적으론 생일이 유일하다. 그리고 생일 == 선물로 각인이 된 듯 하다.

혜승이 에게 전화를 했다.
혜승이 너 어린이 날이 뭔줄 알아?
몰라
엄마한테 물어봐봐..
(멀리서) 엄마..~~~ 어린이 날이 뭐야?
(집사람) 어~ 혜승이 선물 받는날이야.~~

아빠 그러면 어린이 날이 내 생일이야?
하하하하하

너무 이뻤다..그녀를 위해 이름이 새겨진 이쁜 고무 도장을 샀다.
여기저기 찍고 다니겠지..하지만 정작 원하는건 자전거.

혜승이가 벌써 자전거 탈 나이가 됐나보다 양쪽에 보조바퀴가 있는 자전거~...
익현인 세발 자전거 타고 쫒아가고...눈에 선하네..

어릴때 나도 그 자전거 탔었는데..아직 기억이 생생한데 바퀴에 우유곽을 끼워서 다다다다~~소리가 나게 해서는 좋다고 타고 다녔는데.

어릴땐 자전거 세워놓고 놀다오면 항상 자전거가 없어졌었다.
으..그 자전거들은 어디 간걸까?

추신수 환상 수비

2007년 4월 26일 목요일

아 괴롭다.

세상에서 가장 아찔한 상태에서 찍은 사진이 아닐까 싶은 몇장을 추려봤습니다.


그간 몇장 모아논 짤방도 있고하니, 합산해서 올려볼까하구요~ㅋ


정말 저 상황이 되지 않은 이상은 아무도 그 기분을 말하기 쉽지 않을겁니다.


적어도 군대를 다녀온 사람이라면 말이죠~












하하하... 각풀었다간 살인나겠는데요?!ㅋ









그게 목구멍으로 넘어갈지나 모르겠습니다. 헐~










자살 충동 200%









웃고나서 사죄해봐야 이미 늦었습니다. 월드컵은 참... 사람을 두번죽이는군요~ㅋ


간통 들킨 목사라.

이거 예배를 어캐들 했을까?
어이 없네










어찌 그리 잘 아신다요

아 그녀들이 궁금했는데 ㅋㅋㅋ

Do not use Vista. Vista is evil

Listen, I hate Microsoft, and I hate Windows. These are no secrets. But I want to tell all you Windows users out there to stick with XP. Do not "upgrade" to Windows Vista. Why? (In part from Michael Geist.)

  • You cannot upgrade your computer without Microsoft's permission. Not the RAM. Not the hard drive. Not the processor.
  • You cannot make more than one backup copy of Windows. What if the backup copy is corrupt or lost? You are out $300-$500.
  • Microsoft Windows Defender presents itself as a spyware and virus protector. Guess what? IT defines what is spyware and virus. That may include free software, freeware, and even software you may have written yourself. Yeah, liberty. Oh wait, what liberty?
  • If your hardware is not 100% Vista Approved, Windows can automatically make your audio and/or video sound/look much crappier than it should. By playing it legally on legal hardware, it may be crippled, degraded, and altered, even though you own it. Awesome.
  • Your computer will run slower than under XP. In fact, you may need to buy a new computer just to browse the web and check your email: something you've been doing for years.
  • You may not alter any of this evil. By installing it, you have agreed that "you may not work around any technical limitations in the software".


스톨만이 형은 예전의 개발자 들이 서로의 소스를 공유해 가며 비즈니스를 하던 시대를 아름답다고 생각을 했지 그리고 기존 업체들의 OS소유에 대하여 무지 거부감을 갖었던 거고, Vista를 계기로 우리는 MS의 감옥에 갖혀 버리고 마는게 아닐까? 다른 선택의 여지도 없이?


2007년 4월 25일 수요일

이씨 과제

1. 하드웨어하고 소프트웨어의 차이
 2. 기업내 mis의 중요성

과거 홍수빈이란 분이 계셨지..난 기억이 생생한데

그녀의 소식을 들었다...왠지 맘이 좀 아프네..

Ashley Roberts가 DP사에서 찍은 Control


사용자 삽입 이미지

어딘가에서 많이 본앤데..

[vb] 키가 눌러졌을 경우 처리

비주얼베이직 내장문장들중에서 SendKeys문이 있습니다.

왼쪽 방향키가 눌러진것 처럼 하시려면 : SendKeys "{LEFT}"
오른쪽 방향키가 눌러진것 처럼 하시려면 : SendKeys "{RIGHT}"
위쪽 방향키가 눌러진것 처럼 하시려면 : SendKeys "{UP}"
아래쪽 방향키가 눌러진것 처럼 하시려면 : SendKeys "{DOWN}"
컨트롤 키가 눌러진것처럼 하시려면 : SendKeys "^"

[vb] 시간 계산

sDate = DateSerial(Year(Now()), Month(Now()), Day(Now()))

2007년 4월 21일 토요일

흠 모든 인터넷 광고 시장이 구글에 쏠리는 것인가?

여기저기 블로그를 돌아다니다 보면 모든 블로그에서 AdSense를 볼 수 있다.
물론 naver나 야후나 다음같은데서 제공한 블로그에는 구글의 AdSense를 볼 수 없지만
어느정도 블로그에 애착이 있는 사람이라면 자유? 뭔가 구속이 있는 느낌이 있어 탈출을 꿈 꿀 수 밖에 없게 되는것 같다.
- 나도 그랬고.

여하튼 모든 인터넷 광고가 구글을 통해서 독점이 된다면, 그다지 좋은 모양은 아니겠는데? 어떤 피해가 있을까? AdSense는 어떤식으로 돈을 지불할까?

자본주의 시대에는 자본의 독점이 문제였지만 정보화 시대에는 지식 및 정보의 독점이 또 다른 문제를 야기 하는구나...

나도 밑에 AdSense를 달고는 있지만 아무도 클릭하지 않던데 ㅋㅋㅋ

정성을 한 번 들여봐야겠네.

[visual basic] Record Set관련 작업

2007.4.21
Record Set 내부의 내용을 조회 하고자 한다.
물론 필드명은 모르는 걸로 한다.


while recordSet.eof = false

   for i = 0 to recordSet.fields.count
       debug.pring i & recordSet.fields(i).value
   next i

wend

2007년 4월 19일 목요일

perl 환경 변수 출력

Case 1
#!/usr/bin/perl
use strict; use warnings;


  # 지정한, 특정 환경변수의 값 얻기
  my $s = $ENV{"PATH"};
  print $s, "\n";


  # 컴퓨터의 모든 환경 변수 출력하기
  foreach $_ (sort keys(%ENV)) {
    print "$_=$ENV{$_}\n";
  }


Case 2.
#!/usr/bin/perl


   use Config qw(myconfig config_sh config_vars);
   use strict;


   print myconfig();

   print config_sh();

2007년 4월 16일 월요일

18 세일즈 전략

1. 자신의 회사를 알라


2. 자신의 제품을 알라



3. 자신의 고객을 알라


4. 정치를 사랑하라
이게 무슨 말이지?
세일즈는 정치 활동이라. '정치' 란 서로 협력하며 결과를 만들어 가는 과정이라 할 수 있다.

흥미 진진한 인간관계 게임이라 할 수도 있다.

5. 경쟁사를 소중히 여겨라.


6. 고객 조직과 관계를 맺어라.
고객 회사의 모든 부서와 친밀한 관계를 맺어라..
그래 이제 한 번 더 전화하고 먼저 연락하고 해야겠다.

7. 자기 조직내에서 관계
여기에 대해선 나도 생각 하는게 있지. 상대방이 최고의 성과를 내기 위해 내가 어떤 정보를 제공해야 하는가에 집중하다 보면 시너지가 나게 되어 있음

8. 지킬 수 없는 약속은 금물이다.
에혀 난 지킬 수 없는 약속을 싫어함에도 불구하고 아주 난발을 하고 있지..하루 아침에 공든탑이 무너지진 않을지.

9. 솔루션을 판매하라.
세일즈맨의 입에서 나오는 말은 항상 다음과 같다. " 우리 제품은 이런 특정한 문제를 해결해 주고 이런 막대한 기회를 창출해 주며 당신에게 이만큼의 이익을 안겨 줄 수 있습니다. 이를 구체적으로 설명하면 이렇습니다."

생각해 보자..판매상의 문제, 그래서 나도 핵심 관리 영역이라는 것을 생각한 적이 있었지..당장 만들어야 겠다.

마케팅 전문가왈 롤렉스는 롤렉스 시계를 파는게 아니라 '롤렉스를 통한 느낌' 을 판매한다



10. 자존심을 버리고 도움을 청하라.



11. 브랜드 이야기를 하라.
회사의 비젼, 경험등을 고객과 공유하자.

우리는 모든 업체를 묶을 것이다. 엄청난 넷트웍을 만들어낼 것이다.

12. 멋진 실패를 반겨라.
대체 멋진 실패란 어떤 실패 이길래 매번 이 이야기가 나오는 걸까? 실패가 됐든 성공이 됐든 경험을 통해서 배울 수 있다는 것은 맞는 말이다.

13. 모두 내탓이다.










1. 미래를 경영하라

Date: 2007.4.16
find friends
동지를 만드는 것이 중요하다, 같은 관심사를 갖는 동지들을 만들라..
어떻게 해야 하나?
오프라인 모임에 참여해서 다른 사람들의 생각을 듣고, 새로운 영역을 창조하자

내가 지금 원하는 것이 무엇인가?
그것을 얻기 위해서 무엇을 해야 하는가?

계정 추가 및 변경

계정 추가

insert into user (Host, User) values ('%', 'aptman');
update user set Password = password('aptman') where User = 'aptman';
flush privileges;



변경

1.update user set password=password('비밀번호') where user = '[user]';
2.flush privileges;

권한
GRANT ALL PRIVILEGES ON DBNAME.* TO ID@localhsot IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

하드코어 방식

create database testdb;
insert into db values ('%', 'testdb', 'testuser', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
insert into user (Host, User) values ('localhost', 'testuser');
insert into user (Host, User) values ('%', 'testuser');
update user set Password = password('password1234') where User = 'testuser';
flush privileges;

쿼리에 조건을 주기

SELECT category1,
IF(category1 < 10, CONCAT("0", category1),category1) AS is_bookmarked
FROM ns_product
where category1 <> ""
order by id limit 10;


설명 10보다 작은 숫자는 앞에 0을 붙여서 출력하고 그렇지 않은 경우는 그냥 출력함


+-----------+---------------+
| category1 | is_bookmarked |
+-----------+---------------+
| 10        | 10            |
| 5         | 05            |
| 5         | 05            |
| 1         | 01            |
| 8         | 08            |
| 10        | 10            |
| 8         | 08            |
| 1         | 01            |
| 3         | 03            |
| 5         | 05            |
+-----------+---------------+
결과...


case 2.

select ifnull(sum(case when e_sort='0' then e_count end),'0')
..

인덱스 생성

인덱스 생성
- alter table을 이용한 인덱스 생성이 더 flexible함
- 인덱스명은 생략가능

ALTER TABLE 테이블명 ADD INDEX 인덱스명 (인덱스컬럼);
ALTER TABLE 테이블명 ADD UNIQUE 인덱스명 (인덱스컬럼);
ALTER TABLE 테이블명 ADD PRIMARY KEY (인덱스컬럼);
ALTER TABLE 테이블명 ADD FULLTEXT (인덱스컬럼);

CREATE INDEX 인덱스명 ON 테이블명 (인덱스컬럼);
CREATE UNIQUE INDEX 인덱스명 ON 테이블명 (인덱스컬럼);
CREATE FULLTEXT INDEX 인덱스명 ON 테이블명 (인덱스컬럼);

unique인덱스와 primary key인덱스와의 차이
unique은 null허용하지만, primary key는 null허용 안함
unique은 하나의 테이블에 여러개 올 수 있지만, primary key는 하나만 존재

테이블생성시 지정
CREATE TABLE 테이블명
(
... column declarations ...
INDEX 인덱스명 (인덱스컬럼),
UNIQUE 인덱스명 (인덱스컬럼),
PRIMARY KEY (인덱스컬럼),
FULLTEXT 인덱스명 (인덱스컬럼),
...

);

:= 문장을 이용한 변수의 설정

:= 문장을 이용한 변수의 설정

현재 dbakorea의 데이터베이스강좌게시판에 등록된 총 게시물은 43개이다. 43개의 강좌를 읽은 수(hit수)는 각각 다르다.
평균 hit수를 구해 보자.

mysql> select @total_hit := sum(hit), @total_record := count(*) from zetyx_board_database;
+------------------------+---------------------------+
| @total_hit := sum(hit) | @total_record := count(*) |
+------------------------+---------------------------+
| 3705 | 43 |
+------------------------+---------------------------+
1 row in set (0.00 sec)

mysql> select @total_hit/@total_record as 평균HIT;
+-----------------+
| 평균HIT |
+-----------------+
| 86.162790697674 |
+-----------------+
1 row in set (0.00 sec)



select substring(subject from 9) from zetyx_board_database where substring(subject, 1, 8) = '[ORACLE]';

쿼리 결과를 파일로 저장하기

쿼리 결과를 가끔씩 파일로 보고 싶더라구...


mysql> select * into outfile '[파일명]'

             from csinfo;


저장위치
/usr/local/mysql/data/[계정]/[파일명]

서버 restart

/usr/local/mysql/bin
safe_mysqld &


* To start mysql server:
# /etc/init.d/mysqld start

* To stop mysql server:
# /etc/init.d/mysqld stop

* To restart mysql server
# /etc/init.d/mysqld restart

Tip: Redhat Linux also supports service command, which can be use to start, restart, stop any service:
# service mysqld start
# service mysqld stop
# service mysqld restart

(B) If you are using mysql on Debian Linux then use following command:

* To start mysql server:
# /etc/init.d/mysql start

* To stop mysql server:
# /etc/init.d/mysql stop

* To restart mysql server
# /etc/init.d/mysql restart

More MySQL articles are here and here.

MySQL 서버가 살아 있는지 확인

db 서버가 살아있는지 확인

mysqladmin -u root -p ping

[예술의 정당] 로버트 카파 전...보고싶다.

예병일의 경제노트를 메일로 받았는데 유독 나의 마음을 끄는 기사 하나.
로버트 카파라..내가 요즘 관심 있는 부분이 세세한 묘사? 라고나 할까?
작은 움직임이나 흔들림에 의미를 부여하는 작가들의 능력이 존경 스럽다.


삶에서의 열정, 그리고 전설적인 종군 사진기자 로버트 카파
(예병일의 경제노트, 2007.4.13)

독일군 기관총 한 정이 상륙용 주정을 향해 총알을 퍼부어대는 통에 아름다운 프랑스로의 귀환에 대한 나의 꿈은 더욱 철저하게 망가졌다. 주정에서 내린 군인들은 물을 헤치며 나아갔다...

바닷물은 너무 차가웠고, 해안까지의 거리는 아직 100미터 이상 남아있었다. 내 주위로 총탄이 날아들어 물을 튀겼다. 나는 제일 가까운 철제 장애물을 향해 내달렸다. 병사 한 명도 나와 동시에 그 장애물 뒤로 뛰어들었다...
나는 썩 내키지 않았지만 내가 숨은 강철기둥에서 벗어나려고 여러 번 시도했다. 그러나 그때마다 적의 총탄이 나를 쫓아왔다. 약 50미터 전방에 반쯤 불탄 수륙양용장갑차 한 대가 수면 위로 삐져나와 있었다.







"If your photographs aren't good enough, you're not close enough."
(만약 당신이 사진이 충분하게 만족스럽지 않다면,당신은 충분히 가까이 다가가지 않은 것이다)

전설적인 종군 사진기자 로버트 카파. 그는 포토저널리스트로서 그 시대의 결정적인 순간들을 담아내기 위해 생명의 위험을 무릅썼습니다. 스페인내전, 중일전쟁, 2차대전, 중동전쟁, 인도차이나전쟁. 그 모든 전쟁터에서 그는 병사보다 더 적진 가까이에 다가가(close) 촬영했다고 합니다.

자신의 '대상'에 충분히 가까이 다가갔던 그는 전설적인 사진들을 남겼습니다. 누구나 한번은 보았을, 그가 스페인 내전에서 촬영한 '병사의 죽음'. 참호에서 뛰쳐나와 총을 오른손에 든채 머리에 총을 맞고 쓰러지는 공화군의 한 병사의 모습은 그의 지인들이기도 했던 피카소의 '게르니카', 헤밍웨이의 '누구를 위하여 종은 울리나'와 함께 스페인 내전을 다룬 불후의 명작으로 꼽히고 있습니다.

1944년 6월 6일의노르망디 상륙작전. 이 작전이 성공할지 여부도 불투명했던 상황에서 그는 군인들과 함께 상륙정을 탔고, 독일군의 총탄이 빗발치던 오마하 해변에 내렸습니다. 상륙정에서 내렸지만 해안가까지는 100여미터가 남아있었고, 차가운 바닷물을 헤치고 전진해야 했습니다. 함께 상륙정을 탔던 군인들중 많은 이가 바다에서 죽었습니다. 6월6일 하루에만 2000여명의 군인들이 목숨을 잃었습니다.
초점이 흔들리는, 오마하 해변에 상륙하는 군인들의 사진은 그렇게 만들어졌습니다.

1954년 그는 41세의 나이로 인도차이나전을 취재하러 갔다가 베트남에서 지뢰를 밟고 폭사했지만, 친구 존 스타인벡의 말 처럼, 우리에게 예술에 대한 존경과 성실을 가르쳐주었습니다. 이후 ‘카파이즘’은 ‘죽음을 두려워하지 않는 투철한 기자정신’이라는 뜻으로 통하고 있습니다.

지금 예술의전당에서 '로버트 카파전'이 열리고 있습니다. 저도 가볼 생각입니다. 그의 사진들을 보면서, 내가 뜨거운 열정을 갖고 나의 삶, 나의 목표에 충분히 가까이 다가가고 있는지(close), 아니면 두려움에, 게으름에 목표의 주변부에서 맴돌고 있지는 않은지, 돌아볼 생각입니다.
주말입니다. 함께 카파의 사진들을 보면서 그의 치열했던 삶, 뜨거웠던 열정을 마음속에 담아 오면 어떨까요?

2007년 4월 13일 금요일

RPM 사용 방법

RPM 사용하기

김병찬 redhands@soback.kornet.nm.kr

V1.0, September 30, 1997

1. 소개

RPM 은 아주 간편하고 사용하기 편한 패키지 관리자이다. 사용자 뿐만 아니라 만드는 사람에게 있어서도 좋은 패키징 툴이다. 여기선 RPM 을 사용하고 관리하는 방법을 설명하겠다.

2. 일반적인 정보

2.1 RPM 구하기

현재 RPM 은 레드햇사에서 만들어 배포하고 있다. 물론 GPL 이다. 가장 최신의 RPM 패키지는 ftp.redhat.com 에서 찾아볼 수 있다. 국내에서는 알짜 레드햇 이라는 이름으로 더욱 많이 알려져 있고, 또한 대부분의 레드햇 사용자가 알짜팀에서 제작한 알짜 레드햇을 사용한다. 한글 관련 패키지는 ftp.kreonet.re.kr 구할수 있을것이다. 알짜 레드햇에 대한 정보는 미약하나마 적수네 동네 에서 구할수 있을것이다.

3. RPM 사용하기

RPM 사용은 아주 간단하다. 설치, 제거와 질문 그리고 패키지 제작 이렇게 세부분으로 나눌수 있는데 여기서는 설치와 질문 부분만 살펴 보기로 하자. 패키지 제작에 관한것은 이미 적은 글도 있고 (엉성하지만) 초보에게는 아직은 골치아픈 이야기가 될테니까 말이다. 사실 RPM 관련의 명령들은 이 글이 아니라도 많은곳에서 보고 배울수 있다. man rpm 으로 볼수도 있을것이고 RPM HOWTO 도 이미 번역이 되어 있다. 또는 rpm --help 를 봐도 된다. 참고 바란다.

RPM 패키지의 이름에 대해서 잠시 알아보고 넘어가도록 하자.

        foobar-1.0-1.i386.rpm

RPM 패키지 이름에서 - 는 각 필드를 구분하는 것이다. ^^

  • 우선 맨 앞부분의 foorbar 는 패키지의 이름이다. 가장 기본적인 것이다.
  • 두번째 1.0 은 패키지의 버전이다. 프로그램 버전과 일치하는 것이다.
  • 세번째의 1 은 패키지의 릴리즈 번호이다. 이 패키지가 몇번째로 만들어진 것인지를 나타낸다. 똑같은 프로그램으로 버전이 같다고 해도 이전에 만든 패키지를 다시 재 패키징을 하였다면 (뭔가 변화가 있고) 릴리즈 번호를 올리게 된다.
  • 네번째의 i386 은 어떤 시스템에서 쓰이는것인지를 나타내는 것이다. i386 이라면 당연히 PC 계열을 나타네는 것이고 sparc 이라면 스팍 리눅스용, alpha 라면 알파 리눅스용일것이다. (현재 레드햇은 이 세개의 시스템용으로 나온다.) 이 네번째 필드가 src 라고 적힌것이 있는데 그것은 소스 RPM 이다. 바이너리 패키지를 만들기 위해 필요한것이다. ^^
  • 마지막의 rpm은 소위 말하는 확장자이다. RPM 패키지라는것을 나타내 준다.

3.1 설치, 제거

RPM 패키지의 설치와 제거는 아주 간단하다. 밑의 예를 보자.

        rpm -i foobar-1.0-1.i386.rpm

보통은 이런식으로 사용하게 된다.

        rpm -ivh foobar-1.0-1.i386.rpm

이 명령으로 하면 설치 되는 모습이 # 마크로 표시 될것이다. 썰렁함을 면해 볼 수 있을것이다.

RPM 으로 패키지를 설치할 때는 사실 위의 명령보다는 -Uvh 옵션을 사용하는 습관을 익히는것이 좋을것이다.

        rpm -Uvh foobar-1.0-1.i386.rpm

이 명령을 사용한다면 rpm 은 이 패키지의 이전 버전이 설치 되었는지를 보고 가 되어 있다면 업그레이드를 할것이다. 또 설沈되어 있지 않드면 설치 할 것이다. 그냥 -i 또는 -ivh 로 설치 한다면 이전 버전의 같은 패키지에 대한 정보는 사라지지 않을것이고 또한 이전의 설정 파일도 백업되지 않는다. 다시 한번 강조하지만 되도록 rpm -Uvh 를 사용하라.

설치, 제거의 여러 옵션들

그외 몇가지 부수적인 옵션이 있는데 여기서 설명하도록 하겠다. 이 부수적인 옵션들은 설치 또는 업그레이드 또는 제거 옵션뒤에 붙이게 된다. (제거 옵션에서는 --nodeps , --noscripts , --test 만을 사용한다.)

  • --nodeps :
    의존성을 무시하고 설치한다. 가장 많이 겪게 되는 문제인데 RPM 에서는 어떠한 패키지가 깔려 있지 않으면 그거에 영향을 받는 패키지는 못 까는 경우가 있다. 그럴때 사용하는것이 --nodeps 이다.
  • --force :
    강제로 설치 하게 된다. 보통 패키지 설치시에 현재의 패키지에 포함된 파일이 이미 다른 패키지에 의해 설치 되 있을때 충돌을 한다며 에러가 나는데 이 옵션으로 설치 할수 있다. 참 이 옵션은 이미 있는 파일은 덮어 쓰지 않는다. 이미 있는 파일마저 덮어 쓸려면 --replcaefiles 를 사용하면 된다.
  • --oldpackage :
    새로운 패키지를 지우고 구버전의 패키지로 교체할 때에 사용한다.
  • --percent :
    패키지 파일을 설치하는것을 퍼센트로 표시해준다. 멋있게 나오는것은 전혀 아니니 기대하지 말자! (ftp 설치 같은것을 할때 유용할 것이다.)
  • --replacepkgs :
    이미 같은 패키지가 설치되 있더라도 다시 설치한다.
  • --replacefiles :
    이미 설치된 다른 패키지의 파일을 덮어 쓰면서라도 목숨 걸고 설치한다. (왠만하면 쓰지 말자 무섭다!)
  • --root <디렉토리> :
    <디렉토리>를 마치 / 처럼 생각하고 설치를 한다. 즉
  • --root /tmp 라고 한다면 /tmp/ 인 것으로 생각하고 그 이하로 설치하게 될것이다.
    한가지 문제가 있다면 이 명령을 사용하면 RPM 정보를 기록하는 파일을 지정한 디렉토리 및에서 찾게 된다. 흐흐
  • --test :
    패키지를 실제로 설치하지는 않고 충돌이나 의존성 문제가 있는지만을 검사한다.
  • --noscripts :
    스크립트를 실행하지 않는다. (레드햇 패키지에는 4개의 스크립트가 들어간다. 설치 전후, 제거 전후 이렇게 4개이다.)
  • --excludedocs :
    문서 파일은 설치 하지 않는다.

이 옵션들을 모두 기억할 필요는 없다. 단 --nodeps 만은 꼭 머리 속에 넣어 두기 바란다. 흘려 듣지 말기를 

한가지 매우 재밌는것이 있다. 윈도우 같은 상용 프로그램들에서는 상상도 못할 일이다. 바로 FTP 를 이용한 설치이다. (상용 프로그램 어떤것이 그냥 FTP 로 받아서 설치 하도록 해주겠는가?)
FTP 를 이용해서 설치 하기 위해서는 네트웍에 연결이 되어야 하고 정확한 위치를 알아야만 한다.

        rpm -i ftp://ftp.foobar.com/pub/redhat/foobar-1.0-1.i386.rpm

-i 가 무엇을 뜻하는지를 까먹었다면 다시 처음부터 읽기 바란다. -.-+ 여기서 --precent 를 사용한다면 재밌을것이다. 그외의 질문도 가능한데 그건 좀 있다가 얘기하자. 아 골아퍼!

3.2 질문 하기

패키지의 장점을 그대로 드러내는 곳이다. 현재 설치된 패키지나 설치하지 않은 패키지에 대한 정보를 보고 그 패키지의 구성을 살펴 볼수도 있고, 무슨 파일이 있는지 어떤 패키지와 의존성이 걸리는지 누가 만들었는지 등등 많은 것을 알수 있다. 하나 하나 설명해 보기로 하겠다.
RPM 에서 질문을 수행하기 위해서는 -q 라는 옵션을 쓴다. rpm -qa 이런식으로 -q 이후에 다른 옵션을 붙여 쓰는 것이다. 기억하라 RPM 에서 옵션을 적을때 꼭 rpm -q -a -l 이런식으로 뛰어 써야 하는것은 아니다 그냥 rpm -qal 이렇게 붙여 쓰면 된다.

도데체 이놈의 컴에 어떤 패키지가 깔려 있을까? 답답할때가 있을것이다. 내가 이걸 깔았나 안 깔았나 패키지가 몇개나 깔려 있는건가... 대충 프로그램 이름은 아는데 패키지명은 정확히 모르겠고 아주 답답할때가 ^^ 이렇게 해보자.

        rpm -qa |more

위에서 질문을 수행하기 위해서는 -q 를 사용한다고 하였다. 다시 한번 강조 하지만 기억하라. -a 옵션은 모든 패키지를 보여 달라는 것이다. 다른 명령과 조합해서 쓸수도 있다. 참 뒤에 |more 는 너무 많이 출력되니까 한페이지씩 보기 위해서 사용한거다. ^^
심심할땐 이런 명령을 사용해 볼수도 있을것이다.

        rpm -qal

-l 옵션은 어떤 패키지에 속한 파일들을 모두 출력하는 것이다. 여기서 -a 옵션과 같이 사용했으니 설치된 모든 패키지에 속한 파일들을 보여줄 것이다. 꽤 오래 걸리겠지만... 이런식으로 여러개의 옵션을 조합해서 사용함으로써 더욱 많은 정보를 더 쉽게, 또한 간단하게 알아 낼수 있다.

어떤 패키지에 대한 대략적 정보를 알고 싶으면 어떻게 할것인가?

        rpm -qi foobar

이런식으로 사용한다. -q 는 다시 안 말해도 알것이고 -i 는 info 의 약자일것이다. 그 패키지에 대한 약간의 정보를 제공하게 된다. 한가지 기억해야 할것은 패키지의 이름만을 적는것이다. 저 위에서 설명 하였다. ^^ 다시 한번 보든지 기억을 해 내든지 하기를...

$ rpm -qi howto-ko

Name        : howto-ko                    Distribution: (none)
Version     : 1.1                               Vendor: Byeng-Chan, Kim <redhands@soback.kornet.nm.kr>
Release     : 3                             Build Date: Tue Sep 30 19:18:42 1997
Install date: Tue Sep 30 19:19:23 1997      Build Host: issue.ml.org
Group       : Extensions/Korean             Source RPM: howto-ko-1.1-3.src.rpm
Size        : 612864
Summary     : Various HOWTOs from the KLUG Document Project
Description :
This is the best collection of Korean Linux documentation there is.
If you want to find newer versions of these documents, see
http://klug.ajou.ac.kr or http://members.iWorld.net/mangchi
For the versions in this package see /usr/doc/HOWTO/translations/ko(rea).
Good Time!  (Sorry, I don't hanv Tex. so, I don't make ps and dvi...)

이런식의 화면을 볼수 있을것이다. 각각 무엇을 나타내는지 파악이 되리라 싶다. 패키지의 이름, 버전, 릴리즈 번호, 만든 사람, 만든곳, 만든 시간, 크기, 설명 등을 볼수 있다. ^^

이렇게 사용해 보면 또 어떨까?

        rpm -qif /bin/ls

-i 옵션은 위에서 설명 했는데 -f 옵션은 또 무엇인지? 음 머리가 좋은 사람은 직접 해봤거나 대충 짐작을 할것이다. 흐흐 (머리 좋은가?) -f 는 지정한 파일을 포함하는 패키지를 알려준다. 그런데 -i 옵션을 사용했으니까 그 패키지에 대한 대략적인 정보를 보여 줄것이다. 그냥 -f 만 쓰면 패키지 이름만 보여주고 말겠지만 재밌지 않은가? 이건 또 어떤가?

        rpm -qlf /bin/ls

음 무슨 명령인지 머리속을 팍 스쳐 지나갔으리라고 생각한다. 아까 -l 옵션은 그 패키지에 속한 파일들을 다 보여 준다고 했다. 그렇다면? 후후 /bin/ls 파일을 포함한 패키지에 속한 모든 파일을 보여 줄 것이다. 아차차 다시 강조하자 얍! (뭐 말할지 알겟지만) 질문은 언제나 -q 옵션을 사용한다. 기억 기억

-f 명령은 아주 유용하게 쓰인다. 어떤 파일이 도데체 어느 패키지에 있는지 알수가 없을때, 에러가 났을때, 연관된 파일을 찾아 낼때 등등 생각해보면 아주 많은 경우에 쓰일것이다. 어떤 프로그램의 패키지가 있는데 이게 에러가 계속 나고 실행이 안된다. 요리조리 궁리해보면 이런 방법을 사용해 볼수 있을것이다.

        rpm -qsRf /bin/foobar

무엇일까? (흐흐 또 새로운 옵션이 등장) -qf 는 알겠는데 -sR 은 또 뭔지..... 자자 성급하게 알려고 하지 말자 설명할거니까... 방금 패키지 에러 예기를 했으니 역시 똑똑한 사람은 짐작을 할수도 (난 멍청한가?)

-s 옵션은 패키지가 포함한 파일들의 상태를 보여주게 된다. 이 패키지에 속한 파일들이 설치가 되었는지 지워 졌는지 딴걸로 바뀌었는지를 알수 있다. 각각 normal, not installed, replaced 로 표시 된다. 어떤 파일이 쉬익 지워졌다면 그 프로그램이 실행되지 않을수도 있지 않는가^^

아 그리고 -R 은? 후후 이 명령은 패키지가 의존하고 있는 다른 파일 또는 패키지를 보여 준다. 의존이라고 하면 잘 이해가 가지 않을수도 있는데 이 패키지의 프로그램을 실행하기 위해서 필요한 파일, 프로그램들을 나타내는 것이다. 왠만한 프로그램은 libc 가 없으면 실행 되지 않을것이다. (이해가 되었나? 흠?) 그러니까 이 파일이 의존하는 프로그램들을 찾아서 흐흐 그 프로그램들이 또 이상은 없는지 확인하면 호호 에러를 고칠수도 있을것이다.

자자 다시 고, 못 먹어도 고!!!

        rpm -dc foobar

흠 이건 뭐에 쓰는 물건 아니 옵션인고? -d 는 문서 파일만 보여준다. 흐흐 그리고 -c 는 설정 파일만 보여준다. (붙여쓰는 일은 거의 없지만 인간이 글 적다 보면 더 적기 귀찮을때가 있지 않겠는가) 이 패키지의 설정 파일만 보거나 문서 파일만 보고 싶을때 사용하면 되지 않겠는가^^

대충 정리 끝났다. 이정도만 알면? 써먹을수 있지 않을까? 아 참 중요한거 하나 빼먹은거 같다. -p 옵션이다. 설치된 패키지에 대한 옵션이야 그냥 -qi 이런식으로 사용하면 되는데 설치 되지 않은 패키지에 대해서는 -p 옵션을 사용해야 한다. 완전한 경로와 정확한 이름을 써야 한다. 패키지 이름만 적는것이 아니다.

        rpm -qip /tmp/foobar-1.0-1.i386.rpm

무슨 말인지 잘 모르겠으면 손으로 해보라. 머리는 컴이 아니니까 ^^

이런, 또 빼먹었다. 이걸 잘 인식하지 않는 사람이 있을텐데 후  --scripts 라는 옵션이다. 물론 -q 와 함께 사용한다. 요런식으로,

        rpm -qp --scripts /tmp/foobar-1.0-1/i386.rpm

아까 잠시 말한적이 있을것이다. RPM 패키지에는 4개의 스크립트가 포함된다고 말이다. 설치 전후, 제거 전후 그런데 왜 이렇게 이걸 설명을 하냐면 중요하기 때문이다. 패키지라는것이 아주 위험하다. 잘 사용하면 아주 편하지만 악의를 가진 사람에게 있어서는 트로이의 목마로 사용될수도 있는것이다.

패키지는 root 로 설치하게 된다. 이 명령을 사용할때가 바로 이때다 설치 전!!! (물론, 설치 후에 사용해도 상관이 없겠지만...) 왜 그런가 다시 한번 말하지만 4개의 스크립트에 무엇을 집어넣어도 상관이 없다. 설치후에 rm -rf / 가 실행되도록 한다면 당신의 시스템은? 풍지박산 개박살^^ 꼭 기억하라 설치전에 꼭 체크를 해보는 습관을 가져라. 그리고 믿을수 있는곳에서 패키지를 받아 와라. 그렇지 않고 개박살난 후에 후회해봤자 소 잃고 외양간 다 날라가고 집구석까지 폭삭 내려 앉은 후에 외양간 고친다고 발악하는 꼴이 될꺼라고 이 연사 강력하게 주장합니다. 에궁

에이 이왕 가는김에 -K 도 알아보자. 이건 -q 를 같이 사용하지 않는다.

        rpm -K /tmp/foobar-1.0-1/i386.rpm

이 명령은 파일에 대해서만 수행하게 된다. 무슨 작동을 하는 명령이냐면 (뜸  들이기) 패키지 파일에 대한 md5, pgp 사인, 파일의 크기 에 대하여 조사 하는 명령이다.

/tmp/foobar-1.0-1.i386.rpm: size pgp md5 OK

이런식의 출력을 보게 될것이다. pgp 사인은 이 패키지의 제작자가 위에 자신이 만들었다는 표시 정도로 하게 되는것으로 내가 믿을수 있는 사람의 사인이 되어 있다면 이 패키지는 충분히 믿을수 있는것 아니겠는가? ^^ 알짜 레드햇 제작진의 PGP 공개키는 적수네 동네 에서 구할수 있다. 또한 md5 와 size 로 패키지가 변경이 되었는지 깨졌는지를 간단하게 알수 있다. 만약 저 테스트중에 크기와 md5 부분에서 이상이 난다면 누군가 악의적으로 바이너리 해킹을 했거나 전송 받는중에 깨진것일거다.

        rpm -Kv /tmp/foobar-1.0-1/i386.rpm

이렇게 -v 또는 -vv 옵션을 같이 사용하면 좀더 상세한 내용을 볼수 있다. -v-vv 는 어떠한 명령에도 같이 사용할수 있다. 좀 더 상세한 정보를 원할때 사용하기 바란다. ^^

        rpm -qlv foobar

이런식으로 사용한다면 그 패키지에 포함된 파일들에 대한 상세한 정보를 보여줄 것이다. 크기, 퍼미션, 위치 등등

아까 설명한다고 했었는데... FTP 로도 질문이 가능하다. 다만 서버에서 배려를 했다면 말이다. ^^ 설치와 마찬가지로 정확한 위치를 알아야 한다. 또한 질문의 모든 옵션을 사용할수 있다. -K 만 빼고 ^^ 앗 -a 도 빼고 ^^

        rpm -qip ftp://ftp.foobar.com/pub/redhat/foobar-1.0-1.i386.rpm

질문하기의 여러 옵션들...

-q와 함께 사용한다는거 잊지 말고 대략적으로 옵션들의 기능을 적겠다.

  • <패키지명> :
    <패키지명> 에 대한 질문을 수행한다.
  • -a :
    모든 패키지에 대하여 질문을 수행한다.
  • -f <파일> :
    <파일> 을 포함하는 패키지에 대한 질문을 한다.
  • -F :
    -f 와 같은 기능이지만 표준 입력으로 부터 파일명을 읽는다. 그러니까 ls /usr/bin | rpm -F 이런식으로 사용한다.
  • -p <패키지 파일> :
    패키지 파일에 대한 질문을 한다.
  • -P :
    -p 와 같은 기능이지만 표준 입력으로 부터 파일명을 읽는다. ^^
  • -i :
    패키지에 대한 대략적인 정보를 출력한다.
  • -R :
    패키지가 의존하고 있는 파일 또는 패키지 목록을 보여준다.
  • -l :
    패키지에 속한 파일들을 보여준다.
  • -s :
    패키지에 속한 파일들의 상태를 보여준다.
  • -d :
    문서 화일만 보여준다.
  • -c :
    설정 파일만 보여준다.
  • --scripts :
    설치, 제거 과정에 사용되는 쉘 스크립트가 있다면 그 내용을 출력한다.

4. 끝내면서

거의 대부분 HOWTO 와 메뉴얼 페이지에 있는 내용이지만 좀 더 쉽게 적어 볼려고 했다. 쉬울지 모르겠지만... 좀 더 쉽게 그리고 알차게 RPM 패키지를 사용하기 바란다.

4.1 질문 사항이 있다면?

RedHat 홈페이지적수네 동네 에 들러보기 바란다. 또, RPM HOWTO 나 메뉴얼 페이지 등을 자세히 살펴 보기 바란다. 메일로 질문은 되도록 사양을 하며 나우누리 질문 게시판에 질문을 하는것도 좋은 방법이다.

4.2 저작권

이 문서는 GPL 라이센스를 따른다. 알아서 사용하기 바란다. 흐흐^^ 다시 한번 말하지만 이 인간 적수가 쓰는 글은 모두 GPL 이다. ^^

벤츠몰고 skt돌진한 아저씨의 인터뷰

SKT가 얼마나 돈을 긁어가는지 직원당 수익이 짱이란다.
자랑이 아닌데...왤케 SK에선 뭘 해도 미운지 모르겠네 ㅎㅎㅎ

2007년 4월 11일 수요일

[regular expression] 매칭된 전체값을 검색

pos ( $stinr ) 은 다음 찾을 문자열의 시작점을 의미한다.
조타..

# ex

while ($string =~ m/\('PageNavigater1','([0-9])'\);/g) {
         $max_page = $1 . "\n";
         pos ( $string )+1;
}

흠 별게 다 있네

스트리커의 랭킹이 다 있네.. ㅋㅋㅋ

맨유 vs 로마 챔스 2차전 하이라이트

아띠 꼭 보고 싶었는데..못 본게 한이네. 지성이가 나왔으면 10:1 이었을텐데 ㅋㅋㅋ

2007년 4월 10일 화요일

table의 row의 mouse over, mouse out 에 따른 바탕색 정의

<style type="text/css">
<!--
body { background: #FFF }
.yellowThing {
background: #FF9;
}
.whiteThing {
background: #FFF;
}
.redThing {
background: #F00;
}
//-->
</style>


<table cellspacing="0" cellpadding="3" border="0">
<tr onmouseover="this.className='yellowThing';"
   onmouseout="this.className='whiteThing';"><td>hello</td><td>world</td></tr>
<tr onmouseover="this.className='yellowThing';"
   onmouseout="this.className='whiteThing';"><td>hola</td><td>mundo</td></tr>
<tr onmouseover="this.className='yellowThing';"
   onmouseout="this.className='whiteThing';"><td>hello</td><td>hello</td></tr>
<tr onmouseover="this.style.background='#F00';"
   onmouseout="this.style.background='#FFF';"><td>hola</td><td>mundo</td></tr>
</table>

아 정말 재미나다. - 생각이 바뀌면 모든 것이 바뀐다

생각이 바뀌면 모든 것이 바뀐다

엘런 케이(Alan Kay)가 이반 서덜랜드(IvanSutherland)에게 물었다. “도대체 어떻게 당신 혼자서 일 년 만에 컴퓨터 그래픽을 발명해 내고, 첫 번째 객체 지향 소프트웨어 시스템을 만들고, 또 최초로 실시간 제약 해결 엔진까지 만들 수 있었나요?” 그러자 이반이 대답했다. “그게 어렵다는 걸 몰랐거든요.”-앨런 케이가 이반 서덜랜드에 대해

참고로, 서덜랜드의 스케치 패드(Sketch Pad)는 새벽 3시에서 6시까지 하루 세 시간씩(나머지 시간은 군사용으로 사용되던 시스템이었음) 개발하여 일 년 만에 완성되었다. 앨런 케이는 그의 논문을 전산학을 통틀어 가장 위대한 박사학위 논문이라고 일컬으며 뉴턴의 업적에 비견했다

* 스케치 패드는 객체 지향의 출발점 이었지..엘런 케이는 스케치 패드에서 영감을 얻어 현대 객체 지향을 완성할 수 있었지..흠흠

인력이 아닌 상상력의 빈곤을 탓하라

인력이 아닌 상상력의 빈곤을 탓하라
필자는 종종 「상상력의 빈곤」이란 말을 하곤 한다. 사람들은「우리는 인력이 부족해」라는 말을 쉽게 뱉는다. 그 말은 모든 다른 문제를 탈색시켜 버리는 강력한 효과가 있다. 「입 다물어」가되는 셈이다. 인력이 부족하다고 말하는 순간 더 이상 논의가 필요 없게 되는 것이다. 필자는 그 이면에 우선 상상력의 빈곤이 자리 잡고 있다고 본다.

그래 사실 프로그래밍 기술이 얼마나 뛰어난지는 비즈니스에 있어 그리 중요한 요소가 아닐지 모른다. 상상력이 곧 무엇을 할 것인가? 그리고 어떻게 할 것인가를 의미한다.


∙�이런 것은 테스트할 수 없을 거야.
∙�이 난잡한 코드를 어떻게 무슨 수로 다듬어? 그냥 이렇게 사는 거지.
∙�원래 비즈니스 모델 자체가 복잡하기 때문에 이 의존성들은 더 이상 깔끔해질 수 없어.
∙�이런 식으로 처음부터 퍼포먼스 고려 안하고 코딩하면 서버 올리고 10초 만에 다운 될걸.
∙�이런 일은 여러 명이 협력해도 할 수 없을 거야.
∙�내가 저 사람이랑 같이 일해서 도대체 무슨 시너지와 이익이 있을까.
∙�우리 시스템의 결함 발생 비율을 100개 이하로 줄인다니 그건 불가능해.
∙�이 코드 한번 빌드하는데 4시간이 넘는데 어쩌라고.
∙�이런 일은 한 달은 족히 걸리는 일이야, 절대 그 이하로는 못하지.
∙�고객이랑은 뺏느냐 뺏기느냐 생존 경쟁일 뿐이야.
∙�이 일은 절대 자동화 할 수 없어. 그저 사람을 이용해 반복적로만 할 수 있을 뿐.

짝 프로그래밍의 비밀

장면10 - 짝 프로그래밍의 비밀
실버 플래터 소프트웨어(Silver Platter Software)란 회사에서 재미있는 논문을 발표했다. 「Promiscuous Pairing andBeginner」s Mind」란 글이다. 번역하자면 「빈번한 짝교환과 초심」정도 되겠다.

그 회사에서는 다양한 방식으로 짝 프로그래밍을 실험하면서 팀의 개발속도(한 이터레이션에 얼마만큼의 일을 했는가 하는 생산성 지표)의 변화를 추적했다.

하루 종일 한 번도 짝을 바꾸지 않은 기간과 90분 정도마다 짝을 바꾼 기간을 비교해 보면 후자가 전자에 비해 팀 전체 속도는 두 배 이상 높았다.

또한, 일을 개발자들에게 나누어 줄 때, 세 가지 다른 방법으로 실험해 보았는데(모두 짝 프로그래밍과 병행), 하나는 가장 적합한 사람(most qualified person)에게 일을 주는 것, 또 하나는 능력에 상관없이 일을 주는 것, 마지막은 가장 부적합한 사람(leastqualified person)에게 일을 주는 것이었다.

아니 가장 부적합사람이 가장 효율이 높다면 가장 적합한 사람 아닐까???

www.rubyonrails.org

루비 온 레일은 3세대 스크립트 원어라고 불리는 스크립트 언어인 루비(Ruby) 기반의 웹 애플리케이션 프레임워크다. 데이비드 하이네마이어 한슨(David Heinemeier Hanson)이 처음 개시한 루비 온 레일은 개발 생산성이 아주 높아서 개시되자마자 전 세계 개발자들에게 인기를 얻으며 승승장구하고 있다.

재미있는 것은 루비 온 레일의 성공으로 인해 최근 들어 각광을 받고 있는 루비가 1993년에 고안되었다는 사실이다. 이는 자바와 PHP가 발표된 1995년보다 2년이나 긴 역사를 가졌다는 얘기이다. 그렇다면 10년이 넘는 세월동안 그렇게 좋은 스크립트언어가 왜 찬밥 신세를 면하지 못하다가 최근에서야 인기를 끌게 된 것일까? 그 문제의 중심은 바로 루비가 스크립트 언어라는 점이다.

스크립트 언어는 사용하기 쉽다는 장점이 있기는 하지만, 다른 프로그램의 도움을 받아야만 동작할 수 있는 탓에 간단한 작업을 반복적으로 수행하는 등의 가벼운 프로그래밍에만 사용되었다. 하지만 10년의 세월을 거치면서 비약적인 발전을 거듭한 하드웨어가 루비의 버팀목이 되어준 것이다.

빨라진 프로세서와 값싼 메모리 덕에 이제는 최적화된 프로그램이 아니더라도 충분히 빠르게 실행되기 때문에 굳이 어렵고 복잡한 프로그래밍을 할 필요가 없어진 것이다.

그리하여 사용법이 간단한 루비가 각광을 받고 있는 데다가 개발 생산성을 높이는데 그만이라는 루비 온 레일이라는 프레임워크까지 나왔으니 개발자들에게는 노칠 수 없는 매력이었던 것이다.

루비는 그저 그런 스크립트 언어가 아니라 10년의 세월 동안 상업적 이해관계에 휘둘리지 않은 채로 개발자 커뮤니티에서 축적된 성과를 함축하고 있는 언어이다. 그 결과 사용하기 쉬우면서도 자바와 C, 닷넷 언어보다 훨씬 뛰어난 생산성을 자랑하는 언어이니 관심 있는 독자들은 한번 사용해 보자.

루비 온 레일에 대한 자세한 정보는 루비 온 레일 홈페이지(www.rubyonrails.org)에서 확인할 수 있다.

2007년 4월 7일 토요일

우리나라에도 맘에 드는 디자인 가구 회사가 있네..

koon 이라는 미래 지향적 디자인 가구 회사가 있었다.
얼리어댑터의 일상적인 멜을 받고 당연 북유럽의 회사라 생각했는데.
원산지가 한국 이었다.

맘에 든다.

http://www.casa.co.kr/shopping/main.jsp 덩달아 이런데도 알게 됐는데..

흠...나름 주제를 잘 잡은듯.

http://www.koondesign.com/

2007년 4월 6일 금요일

왕 케익

사용자 삽입 이미지사용자 삽입 이미지
왕 케익 입니다.

perl에서 excel처리 만들어 내는 파일의 version이 좀 낮은게 흠이랄까?

perl에서 excel처리

Spreadsheet::ParseExcel 의 사용


#---------------------------------------------------------
   use strict;
   use Spreadsheet::ParseExcel;

   my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
   foreach my $sheet (@{$excel->{Worksheet}}) {
       printf("Sheet: %s\n", $sheet->{Name});
       $sheet->{MaxRow} ||= $sheet->{MinRow};
       foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) {
           $sheet->{MaxCol} ||= $sheet->{MinCol};
           foreach my $col ($sheet->{MinCol} ..  $sheet->{MaxCol}) {
               my $cell = $sheet->{Cells}[$row][$col];
               if ($cell) {
                   printf("( %s , %s ) => %s\n", $row, $col, $cell->{Val});
               }
           }
       }
   }
#---------------------------------------------------------


GE 인사관리의 7대 비법... 차별화, 높은 업무기준, 단순화

직원들을 끊임없이 평가하고 등급을 매겨야 조직에 활기가 넘치고 능력에 의한 승진풍토가 조성된다. 직원들의 업무나 실적을 평가해 그에 따라 보상하고 처벌해야 한다.
잭 웰치는 업무 능력이 떨어지는 하위 10%를 잘라내야 한다는 유명한 말을 남겼다. 후계자인 이멜트는 웰치처럼 숫자로 퇴출기준을 정하지는 않고 있지만 차별화가 회사에 활력을 높여주는 요인은 것만은 분명하다.
동료들과 함께 평가를 받는다는 불안감이 능력을 발휘하게 만든다. GE는 늘 조직에 그런 불안감을 조성해왔다. 조직에 가장 적게 기여하는 사람이 누구이고,조직은 그 사람을 어떻게든 해야 한다는 생각을 가져야 한다.

===================================
흠 그렇구나.


잭 웰치와 제프리 이멜트의 GE. 이 유명한 CEO들과 함께하며 13년 동안 GE의 인사관리를 총지휘했던 윌리엄 코너티 인사담당 수석 부사장.
그가 담당 업무를 인계하고 은퇴를 준비하면서 'GE의 7대 인사관리 비법'을 비즈니스위크에 공개했습니다. 그가 밝힌 GE 인사관리의 7가지 비법은 다음과 같습니다.

① 직원을 능력별로 과감하게 차별화하라
② 끊임없이 업무 기준을 높여라
③ 인사담당자는 CEO의 친구가 되지말라
④ 후계자 육성계획을 세워라
⑤ 흡수한 외부 조직에 대해 포용력을 가져라
⑥ 맡은 업무에만 집중할 수 있도록 배려하라
⑦ 업무 지시를 단순화하라

코너티가 가장 강조한 것은 '능력에 따른 과감한 차별화'였습니다. 직원들을 끊임없이 평가하고 등급을 매겨 그에 따라 보상하고 처벌해야 기업이 활력을 유지할 수 있고 성공할 수 있다는 겁니다. 잭 웰치는 업무 능력을 기준으로 '하위 10%'는 잘라내야 한다는 정책을 사용했습니다.

끊임없이 업무 기준을 높여야한다는 것도 중요한 정책이라고 생각합니다. CEO는 자신은 물론 다른 직원들이 업무능력을 높일 수 있도록 만들어야 합니다. GE에서 실패한 간부는 업무능력을 높이기 위한 학습을 멈춘 사람들이라고 합니다.

단순하고 분명한 의사소통도 중요합니다. 많은 구성원들을 혼란스런 메시시로 이끌어갈 수는 없습니다. 리더는 일관성 있고 단순한 몇개의 메시지를 통해 조직을 이끌어야 혼선을 막을 수 있습니다.

능력에 따른 차별화, 높은 업무기준, 단순하고 분명한 커뮤니케이션... GE에서 배울만한 리더십, 조직운영 방법입니다.

2007년 4월 5일 목요일

ie->request를 사용한 dynamic parameter sample

#=============================================
# 객체 생성
my $cj = HTTP::Cookies->new(file => "cookie_cymarket.txt", autosave => 1);
my $ie = WWW::Mechanize->new( cookie_jar => $cj, agent=>'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET C
LR 1.1.4322)'  );

#=============================================

# request
my $res = $ie->request (
        POST 'https://cyxso.cyworld.com/login.jsp',
        Content      => [
                email   => $id,
                passwd  => $pass,
                safechk => "on",
                loginstr => "direct",
                ],
        );
#=============================================
# form을 가져오기
my @webforms = HTML::Form->parse( $res->content, $res->base );
my $form = $webforms[0];
my @inputs = $form->inputs;

# request를 사용한 dynamic parameter sample
use HTTP::Request::Common; # 중요

foreach my $input ( @inputs )

              if ( $input->name eq "excel_name" )
              {
                      $params{ $input->name } = $m_transFile2;
              }
              else
              {
                      $params{ $input->name } = $input->value;
              }
       }


my $res = $ie->request (
               POST 'http://seller.gsestore.co.kr/selling.registerMultiDlvInfoTemp.smp',
               Content_Type => 'form-data',
               Content      => \%params,
       );

Date::Simple

use Date::Simple ('date', 'today');

  # Difference in days between two dates:
  $diff = date('2001-08-27') - date('1977-10-05');

  # Offset $n days from now:
  $date = today() + $n;
  print "$date\n";  # uses ISO 8601 format (YYYY-MM-DD)

  use Date::Simple ();
  my $date  = Date::Simple->new('1972-01-17');
  my $year  = $date->year;
  my $month = $date->month;
  my $day   = $date->day;

  use Date::Simple (':all');
  my $date2 = ymd($year, $month, $day);
  my $date3 = d8('19871218');
  my $today = today();
  my $tomorrow = $today + 1;
  if ($tomorrow->year != $today->year) {
       print "Today is New Year's Eve!\n";
  }

  if ($today > $tomorrow) {
       die "warp in space-time continuum";
  }

  print "Today is ";
  print(('Sun','Mon','Tues','Wednes','Thurs','Fri','Satur')
         [$today->day_of_week]);
  print "day.\n";

  # you can also do this:
  ($date cmp "2001-07-01")
  # and this
  ($date <=> [2001, 7, 1])


#############
format
############
my $change_date = $date->format("%d %b %y");
   my $iso_date1 = $date->format("%Y-%m-%d");
   my $iso_date2 = $date->format;

알베르 카뮈 - 시지프 신화

인간이 참으로 고민해 봐야 하는 문제는 자살에 대한 문제이다....
그외의 문제는 먼저 살것인지 죽을것인지가 해결된 이후에 고민할 일이다.

나로 하여금 자살이라는것에 대해 새로운 시각을 갖게 해준 책이다.

신들의 저주를 받아 시즈프산으로 커다란 바위를 밀고 올라가는 벌을 받은 인간..

[perl]Spread::ExcelWrite에서 한글 사용

일케 쉬운걸 왜..왜..왜 찾을 수가 없었을까?


#!/usr/bin/perl -w


use strict;
use Spreadsheet::WriteExcel;
use Unicode::Map;


# simple.xls라는 worksheet를 만든다.

my $workbook  = Spreadsheet::WriteExcel->new("simple.xls");
my $worksheet = $workbook->add_worksheet();


# 한글을 unicode로 만들어서 write_unicode를 사용해서 worksheet에 기록

my $map   = Unicode::Map->new("EUC-KR");
my $utf16 = $map->to_unicode("이것은 한글 테스트 입니다.");
$worksheet->write_unicode(6, 0,  $utf16);    # TeX revision no.?

excel파일로 저장하기

use Spreadsheet::WriteExcel;

   # Create a new Excel workbook
   my $workbook = Spreadsheet::WriteExcel->new("perl.xls");

   # Add a worksheet
   $worksheet = $workbook->add_worksheet();

   #  Add and define a format
   $format = $workbook->add_format(); # Add a format
   $format->set_bold();
   $format->set_color('red');
   $format->set_align('center');

   # Write a formatted and unformatted string, row and column notation.
   $col = $row = 0;
   $worksheet->write($row, $col, "Hi Excel!", $format);
   $worksheet->write(1,    $col, "Hi Excel!");

   # Write a number and a formula using A1 notation
   $worksheet->write('A3', 1.2345);
   $worksheet->write('A4', '=SIN(PI()/4)');

perl isNumeric 루틴 샘플

##################################################################
    ## Sub Name: IsNumeric.
    ## Description: This sub validates the input to check to see if
    ##the input is a Numeric value
    ## Example: 100, 1,000, and 14.00 are valid inputs.
    ##################################################################
    sub IsNumeric {
    	my $InputString = shift;
    	
    	if ($InputString !~ /^[0-9|.|,]*$/) {
    		return 0;
    	}
    	else {
    		return 1;	
    	}	
    }

2007년 4월 4일 수요일

html의 확장자를 xls로 만들어 내릴 경우

mso format 에 대해서
date: 2007.4.4 15:16 - jk.

확장자를 xls로 만들어서 html로 data를 내릴 경우


<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<xml>
<x:ExcelWorkbook>
  <x:ExcelWorksheets>
  <x:ExcelWorksheet>
   <x:Name>Sheet1</x:Name>
   <x:WorksheetOptions>
    <x:Selected/>
   </x:WorksheetOptions>
  </x:ExcelWorksheet>
  </x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
<body>

## Misc
# Add a formula to a cell : <td x:num x:fmla="=B2+1"></td>
# Define a cell as Text   : <td style='mso-number-format:"\@"'>00123</td>
# Indent a row 2 columns  : <td colspan=2 style='mso-ignore:colspan'></td>

# perl sample
#!/usr/bin/perl
use strict;
use warnings;

sub add_xl_header    {
   return<<EOT;
<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<xml>
<x:ExcelWorkbook>
  <x:ExcelWorksheets>
  <x:ExcelWorksheet>
   <x:Name>Sheet1</x:Name>
   <x:WorksheetOptions>
    <x:Selected/>
   </x:WorksheetOptions>
  </x:ExcelWorksheet>
  </x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
<body>
EOT
}

sub add_xl_table    {
   defined(my $array_ref = shift) || return;
   my ($use_row_headers, $use_col_headers) = @_;
   my $table;
   my $max_width = 0;
   if ($use_row_headers)    {
       my $row = shift @$array_ref;
       $table .= "<tr>\n";
       $table .= "<th>$_</th>\n" for @$row;
       $table .= "</tr>\n";
   }
   for my $row (@$array_ref)    {
       $max_width = @$row if @$row > $max_width;
       $table .= "<tr>\n";
       $$row[0] = '<b>' . $$row[0] if $use_col_headers;
       $table .= "<td>$_</td>\n" for @$row;
       $table .= "</tr>\n";
   }
   $table = "<table>\n<col span=$max_width style='width:48pt'>\n$tabl
+e</table>\n";
   $table;
}

sub add_xl_separator    {
   my $sep_rows = shift || 1;
   return "<table><tr style='mso-xlrowspan:$sep_rows'></tr></table>\n
+";
}

sub add_xl_trailer    {
   return "</body>\n</html>\n";
}

## Misc
# Add a formula to a cell : <td x:num x:fmla="=B2+1"></td>
# Define a cell as Text   : <td style='mso-number-format:"\@"'>00123</
+td>
# Indent a row 2 columns  : <td colspan=2 style='mso-ignore:colspan'><
+/td>

my @test_array1 = ( [2, 3, 5] , [7, 11, 13] , [17, 19, 23] );
my @test_array2 = ( ['', 'Height', 'Siblings'], ['Joe', 77, 1], ['Fran
+k', 70, 4] );

print add_xl_header;
print add_xl_table \@test_array1;
print add_xl_separator 3;
print add_xl_table (\@test_array2, 1, 1);
print add_xl_trailer;

공지영 - 우리들의 행복한 시간

행복한 시간이라..제목을 어쩌면 이렇게 잘 지었을까?

우리는 모두 사형집행을 받고 살아가는 존재라는걸 왜 알지 못했을까?
사형수들은 손목과 발목에 커다란 수갑을 항상 차고 있다.
그들이 지은 죄에 비하면 그것은 작은 형벌이라고 생각하는 사람도 있겠지만.

시간이 흐를수록 사형수들은 초월자가 되어간다...세상의 모든것을 버렸기 때문이다.
자신을 위한것은 더이상 그들에겐 의미가 없다.

자신이 해한 사람의 가족들에게 참회의 눈물을 흘린다, 저번에 본 해바라기란 영화가 생각났다. 자신의 아들을 살해한 사형수를 아들로 받아들인 어머니, 그를 사랑하게 된 여동생.

인간에게 용서란 말을 뺀다면 무엇이 남을까??....이젠 살고 싶다..