geek_stuff/review 2006. 8. 30. 13:41

h2210 거치대

투피에서 공구아크릴 PDA 거치대

HP의 h2210용으로 맞췄더니 어제 배송이 왔다.

조립해놓고 찍어주는 센스!

geek_stuff/today 2006. 8. 30. 09:13

데이터 관리? 어떻게 하고계십니까?

직장인님의 글에서 트랙백합니다.

내가 어렸을적 XT컴퓨터를 쓸적만해도, 다른컴퓨터에는 없었던 비싼 물건의 5.25인치 하드디스크가

달려있었다. 요즘 세상에는 5.25인치 크기의 하드디스크라는게 나오지도 않지만, 내가 486을 쓸때까지만해도

지금은 WD로 사명을 바꾼 WesternDigital이 인수한 퀀텀(Quantum)에서 BigFood이라는 5.25인치 하드디스크가

가장 보편적인 5.25인치 하드였다. 그래봤자 용량은 1G도 안됬던거 같다.


그 XT에는 20Mb의 고용량을 자랑하는 하드디스크가 달려있었는데, 286을 사니 거기에는 40Mb가 달려있었고,

486에는 400Mb 하드가 달려있었다. 펜티엄을 샀을때에는 800Mb였고, 그다음 펜티엄 2였을때가 아마 2G,

펜3로 넘어오니 갑자기 20G, 펜 4, 40G, 점점더 갈수록 80G, 지금은 정말 많은 하드디스크를 사용하고 있게 되었다.

문제는 이 많은 용량에 저장된 파일들을 어떻게 정리를 하고 있느냐인데,

정말 내가 현재 사용할수 있는 저장소의 총 용량이 200Gb대를 넘어가니 더이상 손을 대지 못하고 있다.

특히 날로 늘어만 가는 사진은 아무리 블로그와 싸이에 올리고, 피카사로 정리를 한다고 해도 역시나 귀찮은 일이다.

하지만 나름대로 룰이 있으니, 어디한번 나열해 보기로 한다.


1. 네트워크드라이브를 적극활용한다.
나는 개인적으로 리눅스 서버를 집에서 운영하고 있다. 물론 일반인들이 따라하기엔 다소 무리가있지만, 삼바서버를 구축해서 내 문서를 내트워크드라이브로 잡아버리면 내 문서의 파일은 자동으로 서버에 백업이 된다. 하지만
컴터를 다시 시작하거나 할 경우 인증의 문제가 생기게 되는데 이는 배치파일로 해결했다.

2. 네트워크 드라이브는 어떤 특정한 폴더를 드라이브로 지정하는 특성으로 인해서, Home, Mp3, Movie, Shared, Install등의 폴더를 만들어놓고 드라이브를 지정해줬다. 예를들면 mp3는 M:, Install은 I:, Shared는 S:, 식으로 각각의 자원을 카테고리별로 나눠서 저장한다. 각각의 클라이언트에서 생성되어지는 파일을 개인폴더 및 공유폴더에 저장하도록 룰을 세웠다. 서버에 저장하면 좋은점은 자신이 컴퓨터를 꺼 놓고 가도 밖에서 자신의 파일에 엑세스 할 수 있다는 점이다.

3. 나머지 파일은 D드라이브다.
예를들어 가상CD롬이라던지, 서버에 저장하기 힘든 성질의 것이라던지,등은 D드라이브를 이용한다.
4Gb짜리 리눅스iso이미지 파일을 궂이 서버에 둘 필요는 없지않은가?

4. My OOO을 활용한다.
윈도의 [내 문서]에 보면 My Pictures, My Videos, My eBoos 등등 자신이 원하는만큼 폴더명을 주면 된다.
서버같은게 없을경우 My Documents라는 폴더 하나만 백업하면 되기때문에 일이 수월해진다.

geek_stuff/web & network 2006. 8. 30. 01:39

이름만들기

바걍이 강아지를 분양받았다.

주변의 지인들에게 이름을 짓는것을 도움받으려 대화명을 "이름을 지어주세요~"라고 바꿔놨는데,

mini님과 셋이서 대화하다가 mini님이 던져준 사이트...

▶제다이식 이름 만들기 http://www.xach.com/misc/jedi.html  
▶스타워즈식 이름 만들기 http://www.insectdissection.com/save-curtis/swname 
▶스머프식 이름 만들기 http://www-personal.umich.edu/~mule/smurfgen.html 
▶요정식 이름 만들기 http://www.emmadavies.net/fairy
▶닌자 버거식 이름 만들기 http://www.ninjaburger.com/fun/games/ninjaname 
▶인디언식 이름 만들기 http://www.aspalta.cbc.ca/deaddog_asp/aininfo.asp 
▶호빗식 이름 만들기 http://www.chriswetherell.com/hobbit 
▶포켓몬식 이름 만들기 http://pizza.sandwich.net/poke/pokemon.html 
▶아프리카식 이름 만들기 http://www.fadetoblack.com/namegenerator 
▶미국식 이름 만들기 http://www.blazonry.com/scripting/usname.php 
▶중국식 이름 만들기 http://www.mandarintools.com/chinesename.html 
▶레게식 이름 만들기 http://www.irielion.com/israel/reggaename.html

출처불분명... ㅡㅡ
geek_stuff/today 2006. 8. 16. 00:27

어떠한 브라우저든지 기본브라우저로 설정하는 방법

기본브라우저가 아닌 상태에서 인터넷을 사용하다보면 가끔 IE가 열릴때가 있다.

이 프로그램은 기본브라우저를 고정시켜주는 프로그램이다.

출처는 http://windowsxp.mvps.org 이며,

다만 제대로 되는지는 잘 모르겠다. ㅡㅡ

geek_stuff/web & network 2006. 8. 14. 18:49

이벤트를 걸어놨는데도...

역시 제 이메일로 4만힛을 보내주시는 분이 없군요 ㅠㅠ

"누가 이따위 초 마이너 블로그에 누가와서 그런 캡쳐같은 고생을 하냐!"












라는 생각이 들어서.....

그냥 막 드립니다. 오예~

티스토리 초대장 그까이꺼 그냥 쏩니다.

3장 남았군요 ^^;

리플달때는 받으실 이메일주소와 자신의 블로그 주소를 꼭 적어주세요

아니면 지워버리겠음 ㅡㅡ
geek_stuff/today 2006. 8. 14. 10:43

[이벤트] 티스토리(Tistory.com) 초대장을 드려용~♡

(photo by mini)

에..또...

어떻게 하다보니 티스토리 초대장이 또 생겼습니다. :)

어찌어찌해서 총 10장이나 생겼는데, 일단 아는 사람이 달라는 몇몇장을 뺀 나머지를 보내드립니다.

(수량이 확실치는 않으나 최소 4장이상)

응모방법은 2가지 입니다.



첫번째 방법

제 블로그의 카운터가 4만힛 및 전후(39999 또는 40001)가 되었을 때 캡쳐한 화면과

받고 싶은 도메인 1차, 2차를 (없으실경우 이메일 주소의 ID로 보내드립니다.)

제 이메일(me@1kko.com)으로 보내주시면, 티스토리 초대장을 보내드립니다.

참고로 평균적으로 하루에 약 300카운트 이상씩 증가하나 이 글로인해 얼마나 더 증가할지 모릅니다. :)




두번째 방법

무조건 이 글에 댓글을 달아주시면 랜덤으로 남는 초대장을 드리겠습니다.

다만, 자신의 블로그(또는 개인 홈페이지)주소, 자신의 이메일 그리고

받고 싶은 도메인 1차지망, 2차지망을 표기하여야 합니다.

블로깅을 하시다가 티스토리로 넘어 오시고자 하는 분, 또는 테스터들에게 추천드리며,

만일 위의 사항중 한가지라도 없을 경우, (예: 이메일주소 미표기, 또는 블로그 주소 미표기)

일괄 확인후 가차없이 삭제가 됨을 알아두세요~




여러분의 참여로 4만힛까지 오게되었습니다!

아무쪼록 많은 관심 부탁드리며, 티스토리 하나씩 업어가시길(?) 바랍니다.


%8.14 추가: 오늘중으로 결말이 날 듯 합니다.
geek_stuff/web & network 2006. 8. 11. 13:16

온라인 멀티플레이 플래쉬 게임

싸마님의 블로그에서 트랙백 합니다.

요즘 디자인 때문에 플래쉬를 보기도하고 관련 책도 읽고 있다.

그러던 도중 발견한 네트워크 멀티플레이 플래쉬 게임...


자기가 원하는 글자를 끌어다가 움직여서 원하는 단어를 만드는 게임(?) 정도라 생각하면 되는데,

참여하는 사람이 많아서 막 내 글자를 뺏어가기도 하고 내가 남의 글자를 뺏어오기도 하는 거다.


하다가 맘에 드는 단어를 보면 다른글자를 찾아다가 맞춰주기도 하고 ㅎㅎ

은근 재밌다.

http://web.okaygo.co.uk/apps/letters/flashcom/

오른쪽 구석에 1kko.com이 자리잡고 있다-ㅋ

geek_stuff/web & network 2006. 8. 10. 15:13

한글주소 쳤을때 넷피아 안보는 방법

백아님의 글에서 트랙백 합니다.

인터넷을 하다보면 종종 넷피아를 만나게 되는데,

한글주소를 잘못 쳤을 경우 넷피아로 연결이 되는거에대한 사용자들의 불만이 많은 것 같다.

결론부터 말하자면 내가 사용하고 있는 환경에서는 넷피아를 거의 본적이 없는데,

첫째는 웹마(WebMa)를 사용하여, 기본 브라우저 검색을 따로 설정을 해놨기 때문이고,

둘째는 DNS서버주소를 다른곳으로 잡아서 사용하고 있기 때문이다.



첫번째 방법은 여러 인터넷 환경에 바로바로 적용시키기 어려우나,

두번쨰는 네트워크 설정의 DNS서버 주소만 바꾸는 것만으로도 쉽게 적용시킬 수 있다


넷피아로 안드로메다를 여행하게 되는 방법은 이렇다.

1. 사용자가 주소 질의(Request)
2. DNS서버 응답 & 쿼리
3. 있으면 해당 주소 사용자에게 보내줌
4. 없으면 넷피아로 연결




그럼 다른건 다 제껴두고 4번이 문제!

이 DNS서버만 바꿔주면 되는것인데, KT든 하나로든 대부분의 상용DNS에선 그렇지 않다는 것이다.

하지만 개인이 DNS서버를 가지고 있는것도 아니고, 문제는 KT에서 제공하느냐 인데,

결론부터 말하자면,

제공한다.



KT의 DNS주소는 168.126.63.21

이렇게되면 주소창에 한글주소를 잘못치게 되더라도 넷피아로 넘어가는 경우는 없게된다.

하지만 이 서버도 단점이 있는데, 업데이트 주기가 늦다는 것이다. (나쁜 KT넘들...)

해결방법은.... Secondary DNS를 원래의 주소인 168.126.63.1로 설정하면 되지 않을까 생각해봤지만

예전에 어디선가, DNS의 구조는 Primary든 Secondary든 일단 사용자가 질의를 날리면,

한꺼번에 두군데에 날려서 먼저 응답하는 것을 선택한다고 들은적이 있다.


그럼 좀더 확실한 방법은..?






결국... 구글툴바설치인가...ㄷㄷㄷ
geek_stuff/web & network 2006. 8. 3. 01:01

현재 자신의 데스크탑은 어떻게 되어있나요?

르웬(RW)님의 블로그에서 트랙백합니다.

올블에서 띵까띵까 놀다가 무심코 클릭했는데 걸려들고말았다.

ルール:
 これを見た人は、必ずデスクトップのスクリーン
 ショットを日記に載せます。
 執行猶予はありません。
 あまりに名誉毀損だという場合には、アイコンや
 ファイル名に修正を加えてかまいません。
 しかし、あまり修正しすぎるとおもしろくないので
 ある程度自粛しましょう。

 簡単な説明をつけると良いですね。
 さあ、早速すべてのウィンドウを最小化しましょう!


Rule:
이것을 본 사람은, 반드시 데스크탑 스크린샷을 일기에
올려야 합니다.
집행유예는 없습니다.
너무나도 명예훼손인 경우에는, 아이콘이나 파일 이름에
수정을 가해도 상관없습니다.
그러나, 너무 수정하면 재미없으므로 정도껏 자제합시다.
간단한 설명을 붙여도 좋습니다.
자, 어서 모든 창을 최소화하십시오!

번역 이즈(쿨럭)

그래서 제 데스크탑은...

음.. 듀얼이라서 이렇게 길게 나왔군요..-_- (2560x1024)

자자, 이제 모두들 자신의 바탕화면 스샷을 찍은 후, 모두 트랙백을 날려주세요!

고고고!!
geek_stuff/web & network 2006. 7. 30. 23:17

글씨를 이미지로

인터넷을 돌아다니다가 발견한 이 사이트...

Spell with flickr: http://metaatem.net/words.php

참.. 머리좋다. 게다가 아티스틱한 느낌이 절로 드는구나!

Exclamation point K KK Oo 'S
                                Www Oo R L D
geek_stuff/today 2006. 7. 14. 04:25

티스토리 초대권 2장 쏩니다!

일단 거두절미하고,

티스토리 초대권 2장 쏩니다!
오예~~!!

가장 먼저 이글에 댓글을 다신분에게 1장!

7월 15일 오후 5시 첫번째 리플님에게 1장!


발송은 다음날 일괄적으로 이루어 질것이며, 아무쪼록 많은 참여 바랍니다!

이 글에 이메일과 원하시는 도메인 주소를 코멘트로 달아주세요!

만일 같은시간대의 중복 발생시!!!
블로그나 홈페이지가 있으신 분을 우선으로 초대해 드리겠습니다!


이미 가지고 계신분은 참가를 자제해주세요~


다른글이나 방명록에 티스토리 초대해달라는 글을 달아주시면...반드시 응징하겠습니다.




덧. 7월 16일: 이벤트 종료. lovecon님과 루나미님께 초대장이 발송되었습니다.
geek_stuff/today 2006. 7. 13. 18:38

티스토리 추천블로그?

엥? 아니 이게 어찌된일인가..

네이트에 들어갔더니 대뜸 파일을 전송한 미니님...

아니 이게 뭐지? 하고 받아봤더니 이게 웬걸?;;




... 추천블로그??;;

놀라서 후다닥~ "따따쩜티스토리쩜컴"을 주소창에 입력했으나...

"내 페이지는 안나오는데요? 라고 말했더니 "F5를 몇번 눌러보세요~"

라는 계시를 주심....

오오오... 나도 이제 유명세를 타는건가!! 으하하하하!!
geek_stuff/web & network 2006. 6. 27. 19:50

테터 플러그인 제작중... HELP!

테터 플러그인을 제작하고 있습니다.

지금 생각하고 있는건 테터의 구조에 싸이월드의 방명록을 출력하는 플러그인인데요,

보통 다른 플러그인들은 그냥 있는것에 더 삽입만 하는경우지만

제가 생각하고 있는 플러그인의 경우는 본문에 iframe를 사용하고 나머지 부분은

테터의 스킨을 유지하게 하려고 합니다.

그냥 스킨파일을 수정해버리면 간단하겠지만 나중에 스킨을 바꿀때를 생각해서

플러그인의 형태로 만드는 것이 좋을것 같아서 말이죠..

(플러그인 형태이므로 나중에 배포도 생각하고 있습니다만
아직 만들어지지도 않은 마당에 너무 먼곳만 바라보고 있는것은 아닌지 모르겠군요..;; )



벌써 3일째 삽질중입니다만 별다른 뾰족한 해결책을 못찾겠습니다. (아아악!!)

치환자 종류를 찾아봐도 좀 그렇고 이벤트를 찾아봐도

본문 출력할때, 라던지 방명록 출력할때 발생하는 이벤트를 찾지 못하겠게든요..


제가 못찾고 있는것인지 아니면 머리가 나빠서 그런건진 모르겠습니다만

혹시 이 블로그를 다녀가시는 분들중에 아시는분이 있으면 도와주세효! ㅠㅠ

geek_stuff/server & linux 2006. 6. 25. 18:38

APM설치 howto

www.mysql.org에서 mysql 최신판을 다운로드 한다.
'tar xvzf' 명령을 통해 압축을 푼 후 압축이 풀린 디렉토리로 이동한다.


./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=euc_kr


※ configure실행시 발생할 수 있는 Error checking for termcap functions library... configure: error: No curses/termcap library found
위와 같은 에러가 나올 경우 languages의 'ncurses-devel'을 설치한다.


./make
./make install


명령이 올바로 실행되면 '/usr/local/mysql' 이란 디렉토리가 생성된다.
./usr/local/mysql/bin/mysql_install_db


실행 후 /usr/local/mysql/data 디렉토리가 생성된다. data 디렉토리가 차후 사용하게 될 각종 DB와 Table들이 저장된다.


./adduser mysql


mysql 계정을 시스템에 추가시킨다.


chown mysql -R /usr/local/mysql/data


data 디렉토리의 권한을 mysql 에게로 변경한다.


./usr/local/mysql/bin/mysqld_safe &


mysql demon을 Background로 실행시킨다.




www.apache.org 에서 apache 최신버젼(2.X)을 다운받는다. 압축을 푼 후 다음과 같이 설정하여 설치한다.

# ./configure --prefix=/usr/local/apache --enable-mode-shared=all --enable-so --enable-cgi --enable-modules=all --enable-vhost-alias
# make
# make install




www.php.net 에서 php 최신버젼(4.X)을 다운받는다. 압축을 풀고 다음과 같이 설정한다.

# ./configure --prefix=/usr/local/php4 --with-apxs2=/usr/local/apache/bin/apxs --with-apache-install=/usr/local/apache --with-mysql=/usr/local/mysql --with-sybase=/usr/local/freetds --with-config-file=/usr/local/php4/conf --with-exe-dir=/usr --with-freetype-dir=/usr --enable-force-cgi-redirect --enable-discard-path --enable-ftp --enable-modules=so --enable-track-vars=yes
# make
# make install


환경설정 파일(httpd.conf)을 다음과 같이 수정한다.

# vi /usr/local/apache/conf/httpd.conf


DocumentRoot

홈페이지 문서가 담긴 디렉토리로 설정 (e.g: /www)

DirecotyIndex

디렉토리 접근시 초기값으로 불러올 문서 설정 (e.g: index.php)

DefaultCharacterSet

출력 언어 기본값 (e.g: euc-kr)


어플리케이션 관리 파일(mime.types)을 다음과 같이 수정한다.

# vi /usr/local/apache/conf/mime.types


파일의 맨 마지막 라인으로 이동한 후 다음 줄을 추가한다.

Application/x-httpd-php php html


Apache를 재시작한다.

# /usr/local/apache/bin/apachectl start 

geek_stuff/today 2006. 6. 21. 14:28

맥북을 지를까..



저번에 어디선가 우연찮게 보게된 동영상입니다.

그후 어디였지 어디였지 하다가 결국 가위님의 블로그...

그때 한창 tistory.com의 초대권 때문에 였었습니다만..

저 동영상을 보고 애플 홈페이지에 접속해보니 맥북이 무려 119만원...


단돈 119만원! 싸다 싸!




그동안의 고가 정책만 고수해왔던 애플이 저렴한가격에 내놓는걸 보니 지름신님께서 마구 지르라는 명령을...

게다가 13.3인치에 1280 x 800 해상도!!

완전 내가 원하는 작고 높은 해상도자나!!!

거기다 parallels의 vm만 설치하면 맥, 윈도, 리눅스 모든게 저리도 쉽게 전환이 가능하다는거에

엄청난 뽐뿌질!!



기다려라 맥북!! 내가간다!!
geek_stuff/today 2006. 6. 1. 23:00

HSBC의 OTP (One time password) device.

속눈썹님의 블로그에서 트랙백: http://ilashman.cafe24.com/5393

OTP (One Time Password) Device라는것이 인터넷 뱅킹에서도 사용이 되고 있네요.
One Time Password란 한번만 사용할 수 있는 패스워드로, 보통 로그인 방식이 매번 같은 id와 같은 password를
사용하는 방식이라면 OTP는 이런것이죠.

처음로그인할때: 너 이름이 뭐지?
패스워드: 이코요

두번째로그인할때: 너 키가 몇이지?
패스워드: 1xx cm요

세번째로그인할때: 너 몸무게가 몇이지?
패스워드: xx kg요
One Time Password의 예


이렇게 매번 다른질문으로 사용자에게 질문을 하면 사용자는 그에 맞는 password를 입력함으로서
다른사람이 합법적 유저가 한 행위를 똑같이 반복함으로서 인증수단이 무효화되는 것을 방지하려는 거죠

오늘 속눈썹님의 블로그에서 재미있는 글을 봤습니다. HSBC의 OTP라고 해서 뭔가하고 봤는데...



HSBC의 OTP Device

이렇게 생긴 장치더군요. 속눈썹맨님의 궁금해 하신건

과연 이 device가 자체적으로 통신을 해서 HSBC와 password를 주고 받느냐 인데..

결론부터 말씀드리자면 "제 생각엔 아닙니다." 입니다.

만일 OTP라는게 One Time Password의 줄임말이라면 말이죠..



HSBC의 홈페이지에 가보니 OTP를 맨처음 사용할 때 뒤에있는 바코드의 일련번호를 입력해서 등록하는게 나오는데, 이것은 각각의 device에 저장된 6자리 password의 목록일꺼라 생각됩니다.

OTP의 일련번호: 0001
OTP 0001이 생성할 수 있는 번호 및 순서 100001, 300003, 600006, 200002, 400004

OTP의 일련번호: 0002
OTP 0002가 생성할 수 있는 번호 및 순서 500005, 700007, 900009, 800008, 100001
로그인 서버에 저장된 OTP관련 내용들(가정)

이런식으로 서버에 저장이 되어있겠죠, 꼭 번호가 다 틀리지 않아도 순서만으로도 다른 OTP가 만들어 질 수 있는겁니다. 하지만 그것도 어느정도의 범위가 지정되어 있겠죠, 앞뒤 50개사이에는 각각의 OTP가 같은 값을 가질수 없다 라던지 하는...

그리고 여러번 눌러놓고도 패스워드가 다 입력이 가능했다는것은 사용자의 실수를 만회하기 위해서 어느정도 여유를 둔것 같네요, 마지막 입력한 패스워드의 앞뒤 10개정도면 입력해도 받아들일수 있도록 말이죠...

어디까지나 제 생각입니다만..ㅋ 궁금하신게 해결되셨나 모르겠네요.


여담입니다만, 저게 통신이 가능하다면 아마 은박지로 쌓아놓으면 전파가 방해되어서 사용이 불가능할겁니다.
아니면 핸드폰이 처지지않는 지하라던지, 이런곳에서는 통신이 된다면 동작이 불가능 하겠죠.

하지만 결국 통신을 하지 않는다면 저 OTP는 버튼을 누를때마다 이미 저장되어있는 번호를 순차적으로 보여주는 장치라는 것밖에 되지 않는다는 거죠. 아주 약간의 메모리(6.56Mb: 하지만 이것은 0부터 999999까지 모든수를 저장했을때)와 버튼 스위치 하나, 그리고 메모리에 있는것을 액정에 표시하는 회로만으로 구성되어져있는 싸구려 장치이라는겁니다. 사실 무슨은행이 이런거에다가 통신이 되는 걸 집어넣겠습니까.. 쓸때마다 돈나오고 은행측에서는 유지비가 장난이 아닐듯 싶은데요.ㅎㅎ

geek_stuff/today 2006. 5. 31. 09:20

Linear Shifted Array Generator

Linear Shifted Array Generator by !kKo

output_file<<((end-start)/shift)+1<<endl; // number of entries...

int j=0;
for (int i=start; i<=end; i=i+shift) // making array
{
  array[j++]=i;
}
 
//  Uncomment the following line to display the whole array.
// for (i=0;i<(end-start)/shift;i++){cout<<array[i]<<" ";} cout<<endl;
 
for (i=shift;i<=(end-start)/shift;i++) // writing to file
{
  output_file<<array[i]<<" ";
}
for (i=0;i<shift;i++) // writing to file
{
  output_file<<array[i];
  if(i<shift-1) output_file<<" ";
}
output_file<<endl;

Download Full Source Code
geek_stuff/today 2006. 5. 27. 10:55

Tistory 초대권 응모관련...

사실... 제가 저번 포스팅에도 말씀드렸다 시피 홈페이지 주소를 남겨달라고 부탁드렸는데

몇몇 분들이 그냥 이메일 주소만 적어놓고 가셨더군요..

물론 남겨주신 분도 많으시지만 대부분 다른분의 초대를 이미 받으신 상태구요.

어제 12시 반까지 기다리다가 그냥 잤는데, 방금 확인해보니 초대기능이 다시 활성화가 되었습니다.

친구에게 한장을 보냈기 때문에 아직 초대권이 3장이 남아있습니다.



초대기능의 선 기능을 다하기 위해서 남겨주시는 댓글분들의 홈페이지나 블로그를 한분한분 모두 둘러보고

초대를 해 드릴 예정입니다. =_= (무슨 제가 뭔 감투를 쓴 마냥;; )

뭐... 어떻게 생각하면 기분나쁘실 수도 있겠지만 저는 테터의 팬이고 또한 태터의 발전을 위해서라는 명분(?)아래

베타테스팅을 한다는 것을 감안해주시면 좋겠습니다.^^


이전글에 코멘트를 남겨주신분들에게는 죄송하지만 현재 글에 달린 코멘트에만 초대를 할 예정입니다.

선착순은 아니고, 다만 홈페이지(또는 블로그 주소)와 이메일 주소를 남겨주시면 되겠습니다.

(홈페이지/블로그 주소 안남겨주시면 당첨확율 0% 이므로 꼭 주소를 남겨주세요~)


5/26 18:48 현재 남은 초대장 갯수: 3

5/26 19:18 현재 남은 초대장 갯수: 2

5/26 22:10 현재 남은 초대장 갯수: 1

5/27 10:57 현재 남은 초대장 갯수: 0

'geek_stuff > today' 카테고리의 다른 글

티스토리 초대권 2장 쏩니다!  (12) 2006.07.14
티스토리 추천블로그?  (1) 2006.07.13
맥북을 지를까..  (3) 2006.06.21
HSBC의 OTP (One time password) device.  (3) 2006.06.01
Linear Shifted Array Generator  (0) 2006.05.31
Tistory.com Beta에서의 첫 글  (3) 2006.05.26
1kko.com 블로그의 변천사  (0) 2006.05.21
자료구조 과제 #3  (0) 2006.05.10
자료구조 과제 #2  (0) 2006.05.10
자료구조 과제 #1  (0) 2006.05.10
geek_stuff/today 2006. 5. 26. 00:09

Tistory.com Beta에서의 첫 글

어떻게 해서 당첨되어서 한 40분을 기다렸군요=_=

jihwang**@gmail.com이 다른 이메일일까 하고 생각해봤습니다만...

a~z, 0~9까지 각 글자단위당 26+10개, 총 36개의 조합이 가능하며 이것이 두자리 이므로
36의 제곱=1296 의 각기 다른 조합이 있다는것을 계산하여 알아보고 나선;;;

대략 절망.... ㅠㅠ

하던 상황중 까뜨나 하자 라고 마음을 먹고 페이지를 열려는 찰나...!

아아~~ 떴습니다 ㅠㅠ

Tistory.com에서 귀하를 초대했습니다.
tistory는 멀티미디어 블로깅, 제한없는 저장공간, 나만의 블로그 주소등을 제공하는 블로그 서비스입니다.

아래의 링크를 클릭하시면 tistory 블로그에 바로 입주하실 수 있습니다
http://jihwangyi.tistory.com/....

서비스 이용약관 보기

○ 블로그 주소 : http://jihwangyi.tistory.com
○ 로그인 이메일주소 : jihwang**@gmail.com
○ 비밀번호는 임시로 설정해 두었습니다.
    위의 링크와 연결되어 있는 페이지에서 꼭 변경하시기 바랍니다.
○ 관리자 → 환경설정에서 블로그 주소를 변경해주세요
Tistory 처음부터 시작하기

초대권연결이 원활치 않은경우, 초대URL 에서 마우스 오른쪽버튼을 클릭하신후 '새창에서열기' 하시기 바랍니다.


제 계정에서 파일을 백업해다가 여기에 올리니 스킨이 다른걸로 바뀌어 버리는군요-ㅋ

스킨 수정기능은 아직 없는듯 싶습니다.

그리고 초대기능은 아직 안보이는데요...

여기저기 구석구석 다 눌러봤는데....

음... 제가 못찾고 있는걸지도...


그럼 이전 포스팅에서 리플을 달아주신분들중에 선정하여 초대권을 보내드리겠습니다.^^

'geek_stuff > today' 카테고리의 다른 글

티스토리 추천블로그?  (1) 2006.07.13
맥북을 지를까..  (3) 2006.06.21
HSBC의 OTP (One time password) device.  (3) 2006.06.01
Linear Shifted Array Generator  (0) 2006.05.31
Tistory 초대권 응모관련...  (17) 2006.05.27
1kko.com 블로그의 변천사  (0) 2006.05.21
자료구조 과제 #3  (0) 2006.05.10
자료구조 과제 #2  (0) 2006.05.10
자료구조 과제 #1  (0) 2006.05.10
심심해서 서버 하나를 뚫어봤다.  (0) 2006.05.08
geek_stuff/web & network 2006. 5. 24. 16:52

무료 일본어 번역 사이트

갑작기 일본어 몇마디를 번역하려고 했는데 인터넷에 찾아보니 여러가지가 있더군요

그중에서 제 목적에 가장 부합한 녀석을 찾았는데 저 혼자만 알고 있기가 뭐해서요..ㅋ

http://ocn.amikai.com/amitext/indexUTF8.jsp

일본의 OCN... 영화사이트(=_=..)가 아닌 Open Computer Network이라는 곳에서 제공하는 서비스 입니다.

NTT의 계열사인듯 싶군요-.

번역은 영어, 중국어(간체), 한국어를 일본어로, 또 그 반대도 가능합니다.

한번에 최대 4000자까지 가능하다니까 간단한 문서도 번역이 가능하겠군요.

geek_stuff/web & network 2006. 5. 23. 10:39

이메일 이미지 생성방법

예전에 포스팅 해놓은 글인데 언젠가 내 스킨에도 이미지를 추가하리라 생각만 하다가 잃어버린 케이스...

얼마 되지 않는 글들임에도 불구하고 어느샌가 포스팅이 한페이지 뒤로 넘어가 있어서 잊어버리고 있었다.

하지만 최근 스킨에 약간씩의 수정을 가하면서 생각없이 이리저리 뒤지던 도중 내가 써놓은 포스팅 발견...

약간의 수정을 가하여서 (라기보단 그저 머릿말 뿐이지만) ....


쓰려고 했는데!!!
..
..

=_=;;; 이미 같은글이 있다....;;

귀차니즘과 함께 그냥 주소만 덜렁 포스팅 하는 무책임한 결과를 낳았다.

쿨디님의 블로그에서 관련글: http://www.coold.pe.kr/tt/index.php?pl=125



하아... 그렇지만 그냥 다이렉트 링크를 만들어 두었던 나의 노동력이 헛되게 하지 않기를 바라는 마음에..=_=

geek_stuff/today 2006. 5. 21. 23:47

1kko.com 블로그의 변천사

내 블로그/홈페이지의 변천사:

98년 포탈에서 html 하드코딩으로 첫 홈페이지 제작 : xoom.com/~jihwang

<처음 만든 홈페이지 대문>
지금 봐도 별로 누추해보이지는 않는다-ㅋㅋ


01년 zeroboard를 이용한 실험용 개인홈페이지 다수 제작: 개인컴에서 IIS5 를 이용

<처음 캠으로 만든 홈페이지 배경>
블러(Blur)처리를 용서하소서...


02년 php, asp를 모르고서는 제대로된 홈페이지가 나오지 않는다는것을 알고는 한때 좌절...;
      때문에 싸이월드 도토리 왕창 구입.;;

<예전 싸이월드>
예전에는 힛 캡쳐해서 선물달라는 협박도 통했었는데 말이지..


02년말 jihwang.org라는 도메인을 ttpia에서 구입
이런것도 주더라...


04년 군에서 zog를 발견, 이거 테스트한다고 linux서버 구축 및 파일서버 활용
<예전 조그의 모습>

05년 jihwang.org를 zog로 꾸미다가 tattertools를 발견, 이때부터 테터와의 인연 맺어짐
<테터툴즈>
예전에 했던 포스팅을 예전 스킨과 함께...


06년 jihwang.org를 1kko.com으로 바꾸고 블로그 개장

<중간에 모든글을 날릴뻔한 불상사가 있을뻔 했지만 다행히 백업으로 목숨부지..ㅜㅜ>


06년 5월 21일: 77개의 글과 함께 만힛 달성.

<10000번째 힛 기념 스샷>





흠 이제야 겨우 10000힛인가...

'geek_stuff > today' 카테고리의 다른 글

맥북을 지를까..  (3) 2006.06.21
HSBC의 OTP (One time password) device.  (3) 2006.06.01
Linear Shifted Array Generator  (0) 2006.05.31
Tistory 초대권 응모관련...  (17) 2006.05.27
Tistory.com Beta에서의 첫 글  (3) 2006.05.26
자료구조 과제 #3  (0) 2006.05.10
자료구조 과제 #2  (0) 2006.05.10
자료구조 과제 #1  (0) 2006.05.10
심심해서 서버 하나를 뚫어봤다.  (0) 2006.05.08
Apple.com이 윈도우즈를 지원한다?!  (2) 2006.04.06
geek_stuff/server & linux 2006. 5. 21. 15:36

리눅스에서 커널패치 없이 ntfs사용하는 방법

최근 산 NDAS장비 때문에 리눅스에서 커널패치없이 NTFS를 사용할수 있는 방법이 없을까 하고

인터넷을 찾아다니던중 발견한 것!!

http://linux-ntfs.org/
바로 이것이야!~!

'geek_stuff > server & linux' 카테고리의 다른 글

우분투(Ubuntu) 설정 A-Z  (0) 2008.01.22
서버 OS 재설치  (0) 2008.01.22
윈도우와 리눅스 콘솔에서 헷갈리십니까?  (2) 2007.01.20
삼바 서버 멈춤현상  (0) 2006.12.21
APM설치 howto  (0) 2006.06.25
리눅스에서 NDAS장비 사용하는 방법  (0) 2006.05.06
서버포멧! ㅠㅠ  (0) 2006.04.28
흐음.. 이상한 일이다.  (1) 2006.04.04
서버다운...  (5) 2006.03.21
rrdtool을 설치하려고 하는데 잘 안된다.  (0) 2006.03.20
geek_stuff/today 2006. 5. 10. 00:54

자료구조 과제 #3

/*
Data Structure Assignment #3
Spring, 2006
Due Date: 2006. 5. 8. Monday 6:00 PM.

주어진 input sequence에 대하여 heap을 구성하여 array에 저장하고 이를 in-order(type 1), pre-order(type 2), post-order(type 3), level-order(type 4)로 저장하는 프로그램을 작성 하시오. 속도에 따라 점수가 부여된다. 따라서, heap은 array에 저장되어야 하고 traversal은 iterative한 방법을 사용해야 한다 (recursive한 프로그램은 0점 처리).

예:
? Input:
10 // number of item
2 // traversal type
1 3 20 61 91 123 8 71 32 21 // items

30
1
30 40 13 12 11 .....

:
:

-1 // end of input

첫 번째 input으로부터의 max heap은 다음과 같다.

   123
          /   /    \
71   /   91
     /      /
61  21  3  8
  /       /       \
  1    32    20

123719161213813220



? Output:
123 71 61 1 32 21 20 91 3 8 // preorder traversal (because traversal type = 2)
123 71 61 1 32 21 20 91 3 8
0.034 // 수행속도 (입출력 시간 제외, 소수점 3자리)

40 30 13 12 11 ....
0.040

.
제한 사항
1. Input item의 개수는 최대 100000개입니다.

2. Input은 C:\ass3_input.txt에서 입력 받아서 C:\학번_이름_반.txt에 출력하면 된다.
예)출력 파일 c:\200621094_홍길동_A.txt

3.제출시 파일명은 "학번_이름_반"으로 작성하세요. 여기서 반은 과제물 제출 게시판의 반입니다.(A,B,C) 실행 파일과  C파일 두 개를 올려주세요.
예) 200621094_홍길동_A.exe /200621094_홍길동_A.c

4.소스 파일과 실행 파일을 압축하지 말고 올려주세요.  

5. c:\ 폴더에 실행파일이 없을 경우에도 동작해야 합니다.

6.변동 사항이 있을 수 있으니 공지 사항을 꼭 확인해 주세요.

7.과제물 제출 시 반드시 비밀글을 체크하시고 올리셔야 합니다. 


*/
ac
#include<stdio.h>
#include<windows.h>

#define IN_FILE "c:\\ass3_input.txt"
#define OUT_FILE "c:\\200120993_이지황_B.txt"

struct time{
LARGE_INTEGER   st, ed, freq ;
  double          gap ;
  BOOL            bEnable;
  char            szName[256];
  UINT            counter;
  double          fTotal_Time;
}mytime;

struct dat{
int num; // number of input datas
int type;
int *heap, *temp, *out; 
}data;


void inorder(void) // when case 1,
{
int i=1, j=1;
for( ; i<=data.num/2; i*=2);
 
while(1)
{     
if(i == 1)
{
  data.out[j++] = data.heap[i];
  data.temp[i] = -1;
  for(i=i*2+1; i<=data.num/2; i*=2);
}
else
{
  if(i*2 <= data.num && data.temp[i*2] != -1)
  {
   data.out[j++] = data.heap[i*2];
   data.temp[i*2] = -1;
  }

  if(data.temp[i] != -1)
  {
   data.out[j++] = data.heap[i];
   data.temp[i] = -1;
  }
   
  if(i*2+1 <= data.num && data.temp[i*2+1]!= -1)
  {
   for(i=i*2+1; i<=data.num/2; i*=2);
   continue;
  }
  //printf("i:%d j:%d\n",i,j);
}
i/=2;
if(j>data.num) break;
}
}


void preorder(void) // when case 2,
{
int i=1, j=1;

while(1)
{
for( ; i<=data.num; i*=2)
{
  if(data.temp[i]!= -1)
  {
   data.out[j++]=data.heap[i];
   data.temp[i]= -1;
  }
}
if(i/2-1>=data.num)
{
  i=i/2+1;
  data.out[j++]=data.heap[i];
  data.temp[i]= -1;
}

i=i/2+1;

if(i%2==0)
{
  while(i%2==0)
  i=i/2;
}
if(j>data.num)
  break;
}


}


void postorder(void) // when case 3,
{
int i=1, j=1;  
for( ; i<=data.num/2; i*=2);
 
while(1)
{     
if(data.temp[i]!= -1)
{
  data.out[j++]=data.heap[i];
  data.temp[i]=-1;
}

if(i+1<=data.num && data.temp[i+1]!= -1 && (i+1)%2==1) 
{
  i++;
  if(i*2<=data.num)
  {
   for( ; i<=data.num/2; i*=2);
   continue;
  }
  data.out[j++] = data.heap[i];
  data.temp[i]= -1;
}

i/=2;
if(j > data.num) break;
}
}


static void Start()
{
mytime.gap = 0.0;  // init
mytime.bEnable = FALSE;
mytime.counter = 0;
mytime.fTotal_Time = 0.0;

// system test
QueryPerformanceCounter ( &mytime.st ) ;
if ( mytime.st.QuadPart == 0 )
{
mytime.bEnable= FALSE;
OutputDebugString("시스템이 지원이 안됨,,, 사용할 수 없음[CTimeCounter Class]\n");
}

// start()
mytime.counter ++;
QueryPerformanceCounter ( &mytime.st ) ;
}


static void End()
{
char szMsg[64];

QueryPerformanceCounter ( &mytime.ed ) ;
QueryPerformanceFrequency ( &mytime.freq ) ;

// 소요 시간 계산
mytime.gap = ( (double) (mytime.ed.QuadPart - mytime.st.QuadPart )) / ( (double) mytime.freq.QuadPart ) ;
mytime.fTotal_Time += mytime.gap;

sprintf ( szMsg, "수행시간 %.6f초\n", mytime.gap) ;
OutputDebugString(szMsg);
}


int read(FILE *in_file)
{
int i;
fscanf(in_file,"%d",&data.num);
if(data.num== -1) return 0;
else
{
data.heap=(int*)malloc(sizeof(int)*(data.num+1)); // memory allocation
data.temp=(int*)malloc(sizeof(int)*(data.num+1));
data.out= (int*)malloc(sizeof(int)*(data.num+1));

fscanf(in_file,"%d",&data.type);

for(i=1; i<=data.num; i++)
{
  fscanf(in_file,"%d",&data.temp[i]);
}
}
return 1;
}


void sort(FILE *out_file)
{
int i,j,tmp;
int flaglevelorder=0;

Start(); // clock starts

// max heap insertion occurs here.
for(i=1; i<=data.num; i++)
{
data.heap[i]=data.temp[i];
for(j=i; j>1; j/=2)
{
  if(data.heap[j]<data.heap[j/2]) break;
  else
  {
   tmp=data.heap[j/2];
   data.heap[j/2]=data.heap[j];
   data.heap[j]=tmp;
  }
}
}

switch(data.type)
{
case 1:
inorder();
break;
case 2:
preorder();
break;
case 3:
postorder();
break;
case 4: //level-order
flaglevelorder=1;
//for(i=1; i<=data.num; i++) data.out[i]=data.heap[i];
break;
}

End(); // clock stops

if(flaglevelorder)
{
for(i=1;i<=data.num;i++) fprintf(out_file, "%d ", data.heap[i]);
}
else
{
for(i=1;i<=data.num;i++) fprintf(out_file, "%d ", data.out[i]);
}

fprintf(out_file,"\n%5.3f\n\n", mytime.fTotal_Time);

free(data.heap); // unallocation of memory
free(data.temp);
free(data.out);
}


void main(void)
{
FILE *infile, *outfile;

infile=fopen(IN_FILE,"r");
outfile=fopen(OUT_FILE,"w");

while(read(infile)) sort(outfile);

fclose(infile);
fclose(outfile);
}

geek_stuff/today 2006. 5. 10. 00:49

자료구조 과제 #2

/*
자료구조 - 2번째 과제물.
제출 기한 : 2006. 3. 31. Friday 6:00 PM.

주어진 숫자를 radix sort algorithm (pp. 350-357) 을 이용하여 정렬하라.

예 (radix 가 10일 경우):

329        720        720        329
457        355        329        355
657        436        436        436
839  ->    457   ->   839   ->   457
436        657        355        657
720        329        457        720
355        839        657        839


Input 양식:
5                // input 개수
10329353
2340213
234091223
2342321
2341323

Output 양식:
2340213
2341323
2342321
10329353
234091223


조건:
1. 각 숫자는 최대 9자리이다.
2. Input은 C:ass2_input.txt에서 입력 받아서 C:ass2_output.txt에 출력하면 된다.
3. 제출시 파일명은 "학번_이름_반"으로 작성하세요. 여기서 반은 과제물 제출 게시판의 반입니다.(A,B,C)
  예) 200621094_홍길동_A.exe /200621094_홍길동_A.c
4. 소스 파일과 실행 파일모두 제출 하셔야 합니다.  
5. input 개수에 상관없이 작동해야 합니다. 단 integer범위를 벗어나진 않습니다.
6. c: 폴더에 실행파일이 없을 경우에도 동작해야 합니다.
7. Radix_Size에 변동 사항이 있을 경우 공지사항에 다시 올리겠습니다.
8. 공지 사항을 꼭 확인해 주세요.
*/

#include <stdlib.h>  // to use function: atoi()
#include <string.h>  // to reset buffer: memset()
#include <windows.h> // for class CTimeCouter
#include <stdio.h>  // for class CTimeCouter

#define IN_FILE "c:\\ass2_input.txt"
#define OUT_FILE "c:\\ass2_output.txt"

// global variables here
struct data{
int* list;      // input data enters here
int* temp;  // mydata.temporary data to exchange
int num_in;    // number of inputs
}mydata;

struct time{
LARGE_INTEGER   st, ed, freq ;
   double          gap ;
   BOOL            bEnable;
   char            szName[256];
   UINT            counter;
   double          fTotal_Time;
}mytime;

static void Start()
{
mytime.gap = 0.0;         // init
mytime.bEnable = FALSE;
mytime.counter = 0;
mytime.fTotal_Time = 0.0;

// system test
QueryPerformanceCounter ( &mytime.st ) ;
if ( mytime.st.QuadPart == 0 )
{
 mytime.bEnable= FALSE;
 OutputDebugString("시스템이 지원이 안됨,,, 사용할 수 없음[CTimeCounter Class]\n");
}

// start()
mytime.counter ++;
QueryPerformanceCounter ( &mytime.st ) ;
}


static void End()
{
char szMsg[64];

QueryPerformanceCounter ( &mytime.ed ) ;
QueryPerformanceFrequency ( &mytime.freq ) ;

// 소요 시간 계산
mytime.gap = ( (double) (mytime.ed.QuadPart - mytime.st.QuadPart )) / ( (double) mytime.freq.QuadPart ) ;
mytime.fTotal_Time += mytime.gap;

sprintf ( szMsg, "수행시간 %.6f초\n", mytime.gap) ;
OutputDebugString(szMsg);
}

int read(FILE * in_file)
{
char tmpr[10]="";
int i;

fscanf(in_file,"%s",&tmpr);
if (atoi(tmpr)==0) return 0; // break if input is zero
else
{
 mydata.num_in=atoi(tmpr)+1;

 mydata.list = (int*)malloc(sizeof(int)*mydata.num_in); // memory allocation as size of mydata.num_in, and link this to mydata.list
 mydata.temp = (int*)malloc(sizeof(int)*mydata.num_in); // memory allocation as size of mydata.num_in, and link this to mydata.temp

 for(i=1; i<mydata.num_in; i++)
 {
  fscanf(in_file,"%s",&tmpr);
  mydata.list[i] = atoi(tmpr);
 }
}
return 1;
}


static void sort(FILE* out_file)
{
int cnt[256], idx[256], i;

Start(); // start stopwatch

memset(cnt, 0, 1024); // initializing count
idx[0]=0; // initializing index
for(i=0; i<mydata.num_in; i++)   cnt[(mydata.list[i] >> 0) & 255]++;
for(i=1; i<256; i++)   idx[i] = idx[i-1] + cnt[i-1];
for(i=0; i<mydata.num_in; i++)   mydata.temp[idx[(mydata.list[i] >> 0) & 255]++] = mydata.list[i];

memset(cnt, 0, 1024); // initializing count
idx[0]=0; // initializing index
for(i=0; i<mydata.num_in; i++)   cnt[(mydata.temp[i] >> 8) & (255)]++;
 for(i=1; i<256; i++)   idx[i] = idx[i-1] + cnt[i-1];
for(i=0; i<mydata.num_in; i++)   mydata.list[idx[(mydata.temp[i] >> 8) & 255]++] = mydata.temp[i];

memset(cnt, 0, 1024); // initializing count
idx[0]=0; // initializing index
for(i=0; i<mydata.num_in; i++)   cnt[(mydata.list[i] >> 16) & (255)]++;
for(i=1; i<256; i++)   idx[i] = idx[i-1] + cnt[i-1];
for(i=0; i<mydata.num_in; i++)   mydata.temp[idx[(mydata.list[i] >> 16) & 255]++] = mydata.list[i];

memset(cnt, 0, 1024); // initializing count
idx[0]=0; // initializing index
for(i=0; i<mydata.num_in; i++)   cnt[(mydata.temp[i] >> 24) & (255)]++;
for(i=1; i<256; i++)   idx[i] = idx[i-1] + cnt[i-1];
for(i=0; i<mydata.num_in; i++)   mydata.list[idx[(mydata.temp[i] >> 24) & 255]++] = mydata.temp[i];

End();  // stop stopwatch

fprintf(out_file,"%.10f\n", mytime.fTotal_Time);
for(i=0; i<mydata.num_in-1;i++) fprintf(out_file,"%d ", mydata.list[i]);
fprintf(out_file,"\n");
}


void main(void)
{
   FILE *in_file, *out_file;

in_file=fopen(IN_FILE,"r");
out_file=fopen(OUT_FILE,"w");

while(read(in_file)) sort(out_file);

fclose(in_file);
fclose(out_file);

free(mydata.list);
free(mydata.temp);
}

'geek_stuff > today' 카테고리의 다른 글

Linear Shifted Array Generator  (0) 2006.05.31
Tistory 초대권 응모관련...  (17) 2006.05.27
Tistory.com Beta에서의 첫 글  (3) 2006.05.26
1kko.com 블로그의 변천사  (0) 2006.05.21
자료구조 과제 #3  (0) 2006.05.10
자료구조 과제 #1  (0) 2006.05.10
심심해서 서버 하나를 뚫어봤다.  (0) 2006.05.08
Apple.com이 윈도우즈를 지원한다?!  (2) 2006.04.06
숫자 generator 프로그램  (0) 2006.03.27
뉴 개념의 PC 등장!  (0) 2006.03.10
geek_stuff/today 2006. 5. 10. 00:48

자료구조 과제 #1

/*/////////////////////////////////
Data Structure Assignment #1


과제1:
Operand의 크기가 너무커서 integer type으로 처리하지 못하는 더하기 연산을 integer 덧셈처럼 처리하는 프로그램을 작성하시오.

채점에 사용될 양식
예)
input.txt

21123424543254546575767868
+4235465475678687979797

2335344365547657
-345463574687

25434665457655765879
+4547568798080980

3543454
-46576985679

..
..
..
EOF

output.txt
325243436576970808976

3655765876987908606080

654768780900897979799
..
..
..

답 생성시 음수는 숫자앞에 '-'기호를 붙이셔야 됩니다.
위의 방식으로 하겠습니다.

값 사이의 줄 공백은 input 파일에서는 처리하셔야 되고
처리가 안되어 있다면 '순서대로 2줄을 읽어들여' 처리하는 식으로 되어 있으면 됩니다.

output파일에서의 공백은 처리 안하셨어도 됩니다.
*/

#include <fstream.h> // includes iostream.h
#include <string.h>  // for strcmp()

#define IN_FILE "C:\\input.txt" // don't forget to use double '\\' instead of '\'
#define OUT_FILE "C:\\output.txt"
#define MAX_LEN 200 // up to 200 chars (w/ cr & sign, +1)
#define POSITIVE 0
#define NEGATIVE 1

void mysort(char *mychar) // clear out spaces;
{
int j=0;
char temp[MAX_LEN]=""; // clearing garbages out (will temporary store cleared *mychar values)
for (int i=0;i<=MAX_LEN+1;i++)
{
 if (mychar[i]!=' ') temp[j++]=mychar[i]; // if the character is not a blank, than save to the temp.
}
strcpy(mychar, temp); // overwrite strings with 'blank removed' ones.


int signcheck_rmv(char *mychar) // check sign and return 1 if it's negative, else 0.
{
int ret_key=0;
for (int i=0;i<=MAX_LEN+1;i++)
{
 switch(mychar[i])
 {
 case '-':
  ret_key=1;     // if it's negative turn the flag on.
 case '+':
  mychar[i]=' '; // and then change the sign symbol to a blank.
  break;
 }
}
mysort(mychar); // call sort function to remove spaces

return ret_key; // return 1 if it's negative, otherwise 0
}


void remove_zeros(char* output) // remove front zeros, ej) 001023 -> 1023
{
char temp[MAX_LEN]="";
strcpy(temp,output);

for (int i=0;(unsigned)i<strlen(temp);i++) {
 if(temp[i]>='1') break;
 else temp[i]=' ';
}
mysort(temp);

if (strcmp(temp,"")==0) strcpy(temp,"0"); // leave one '0', if output is null.
strcpy(output,temp);
}


inline int bigger(int a, int b){ if(a>b) return a; else return b; }  // return bigger integer, else return first input.


void reform(char *mychar, int len) //digit count and modify 11 as 0011 to fit for 2222
{
int j=len-strlen(mychar); //+1 is for case of increase of number over 10
if (strlen(mychar)==(unsigned)len) {} //skip if strlen(mychar) is equal to itself.
else {
 while(j--) {
  for (int i=len; i>=0; i--) //repeat as length of mychar.
  {
   if(i<=0) mychar[i]='0'; // put '0' to mychar[i] if [i] is 0.
   else mychar[i]=mychar[i-1]; //otherwise
  }
 }
}
}


void calculate_plus(char* a, char* b, char *output, int last) // calculate and saves value to *output
{
int c=0;
int inta, intb;

char temp[MAX_LEN]="";

// digit count and modify 11 as 0011 to fit for 2222
reform(a, last);
reform(b, last);
reform(temp, last);

for (int i=1;i<=last;i++)
{
 inta=a[last-i]-'0';
 intb=b[last-i]-'0'; // converts a character to an integer
 //cout<<"inta+intb:"<<inta+intb<<endl;

 temp[last-i]=(((inta+intb)%10)+c)+'0'; // perform plus calculation

 if((inta+intb)/10) // if a+b is over 10, then we need to
 {
  c=1;    // set flag to 1 which says the output is more than 10.
  if(i==last) // in case the output have more digit than input, like 999+999.
  {
   reform(temp,strlen(temp)+1); // increase one more digit
   temp[0]='1';                 // then put 1 in front.
  }
 }
 else c=0; // otherwise reset the flag
}

remove_zeros(temp);
strcpy(output,temp); // copy temp to output
}


void calculate_minus(char* a, char* b, char *output, int last) // calculate and saves value to *output
{
int inta=0, intb=0, c=0;
char temp[MAX_LEN]="";
char my_a[MAX_LEN]="";
char my_b[MAX_LEN]="";

strcpy(my_a,a);
strcpy(my_b,b);

// count digit and modify 11 as 0011 to fit for 2222
reform(temp, last);
reform(my_a, last);
reform(my_b, last);

for (int i=1;i<=last;i++)
{
 if((my_a[last-i]-'0')==0) inta=0;
 else inta=(my_a[last-i]-'0');
 if((my_b[last-i]-'0')==0) intb=0;
 else intb=(my_b[last-i]-'0'); // converts a character to an integer


 if(inta-intb-c>=0)
 {
  temp[last-i]=(((inta-intb)%10)-c)+'0'; // perform minus calculation
  c=0;
 }
 else //if(inta-intb-c<0)
 {
  temp[last-i]=(inta-intb-c+10)+'0';
  c=1;
 }
}
remove_zeros(temp);
strcpy(output, temp);
}


int calculate(char *a, char *b, char *output, int a_is_neg, int b_is_neg) //(unsigned)bigger number comes to a, return 1 when the answer is MINUS.
{
char temp[MAX_LEN]="";
int type_a=0, type_b=0, i;
int len_a=strlen(a);
int len_b=strlen(b);
int last=bigger(len_a,len_b);

int a_size=1, b_size=1;

if(len_a==len_b) // assume that we have same length, because we already reform(a)&(b)
{
 for (i=0;i<=last;i++) // compare one by one
 {
  if(a[i]>b[i]) a_size*=(i+1); // +1 to prevent result is 0,  when i==0;
  if(b[i]>a[i]) b_size*=(i+1);
 }
 //cout<<"a_size: "<<a_size<<endl<<"b_size: "<<b_size<<endl;
 if(a_size>b_size)
 {
  if(a_is_neg) {calculate_minus(a,b,output,last); return NEGATIVE;} // when a_is_big and a_is_neg, output must be NEGATIVE
  if(b_is_neg) {calculate_minus(a,b,output,last); return POSITIVE;}
  calculate_plus(a,b,output,last); return POSITIVE;
 }
 if(b_size>a_size) //switch between (a,b) is occuring here.
 {
  if(b_is_neg) {calculate_plus(b,a,output,last); return NEGATIVE;} // when b_is_big and b_is_neg, output must be NEGATIVE
  if(a_is_neg) {calculate_plus(b,a,output,last); return POSITIVE;}
  calculate_plus(a,b,output,last); return POSITIVE;
 }
 calculate_plus(a,b,output,last); return POSITIVE;
}


int LONG=1;  //define as variable because we have to change later..
int SHORT=0;
//negative=1
//positive=0

if (len_a>len_b) { type_a=LONG; type_b=SHORT; }
if (len_b>len_a) { type_b=LONG; type_a=SHORT; }
if (a_is_neg) type_a+=NEGATIVE; else type_a+=POSITIVE;
if (b_is_neg) type_b+=NEGATIVE; else type_a+=POSITIVE;

// long-  type_x=2,
// long+  type_x=1,
// short- type_x=1,
// short+ type_x=0.

// first determine two definite situation.
// long+a(1) - short-b(1) = 0 // minus_calc, return POSITIVE
// long+a(1) - short+b(0) = 1 // plus_calc, return POSITIVE
// long-a(2) - short-b(1) = 1 // plus_calc, return NEGATIVE
// long-a(2) - short+b(0) = 2 // minus_calc, return NEGATIVE
// short+a(0) - long-b(2) = -2 // switch, minus_calc, return NEGATIVE
// short+a(0) - long+b(1) = -1 // plus_calc, return POSITIVE
// short-a(1) - long-b(2) = -1 // plus_calc, return NEGATIVE
// short-a(1) - long+b(1) = 0 // switch, minus_calc, return NEGATIVE

// now arranging by output, we can see top 2 has distinctive output.

// long-a(2) - short+b(0) = 2 // minus_calc, return NEGATIVE
// short+a(0) - long-b(2) = -2 // switch, minus_calc, return NEGATIVE

// long+a(1) - short-b(1) = 0 // minus_calc, return POSITIVE
// short-a(1) - long+b(1) = 0 // switch, minus_calc, return NEGATIVE
// long+a(1) - short+b(0) = 1 // plus_calc, return POSITIVE
// long-a(2) - short-b(1) = 1 // plus_calc, return NEGATIVE
// short+a(0) - long+b(1) = -1 // plus_calc, return POSITIVE
// short-a(1) - long-b(2) = -1 // plus_calc, return NEGATIVE

// so we can write:
if ( (type_a-type_b) == 2 ) { calculate_minus(a,b,output,last); return NEGATIVE; }
else if ( (type_a-type_b) == -2 ) { calculate_minus(b,a,output,last); return NEGATIVE; }

// now we have 6 conditions left, so we change the calculation from a-b to a+b.
// then we'll have two distinctive output from them.

// long+a(1) + short-b(1) = 2 // minus_calc, return POSITIVE
// short-a(1) + long+b(1) = 0 // switch, minus_calc, return NEGATIVE

// long+a(1) + short+b(0) = 1 // plus_calc, return POSITIVE
// long-a(2) + short-b(1) = 3 // plus_calc, return NEGATIVE
// short+a(0) + long+b(1) = 1 // plus_calc, return POSITIVE
// short-a(1) + long-b(2) = 3 // plus_calc, return NEGATIVE

// so we can write:
else if ( (type_a+type_b) == 2 ) { calculate_minus(a,b,output,last); return POSITIVE; }
else if ( (type_a+type_b) == 0 ) { calculate_minus(b,a,output,last); return NEGATIVE; }

// now we have 4 conditions left, so we change the definition of long
// now change the def of long.
else{
 LONG=10;
 type_a=type_b=0; //reset type_a and type_b

 // recalculate then.
 if (len_a>len_b) { type_a=LONG; type_b=SHORT; }
 if (len_b>len_a) { type_b=LONG; type_a=SHORT; }
 if (a_is_neg) type_a+=NEGATIVE; else type_a+=POSITIVE;
 if (b_is_neg) type_b+=NEGATIVE; else type_a+=POSITIVE;

 // LONG=10
 // SHORT=0
 // NEGATIVE=1
 // POSITIVE=0
 
 // which makes
 // long-  type_x=11,
 // long+  type_x=10,
 // short- type_x=1,
 // short+ type_x=0.

 // we perform the plus calculations to determine next top two.
 // long+a(10) + short+b(0) = 10 // plus_calc, return POSITIVE
 // short+a(0) + long+b(10) = 10 // plus_calc, return POSITIVE
 
 // long-a(11) + short-b(1) = 12 // plus_calc, return NEGATIVE
 // short-a(1) + long-b(11) = 12 // plus_calc, return NEGATIVE

 // so we now can write:
 if ((type_a+type_b) == 10) { calculate_plus(a,b,output,last); return POSITIVE; }
 else { calculate_plus(a,b,output,last); return NEGATIVE; }
}

return POSITIVE; // return positive if the answer is 0 situation(a=b) like (111-111)=0
}


void main(void)
{
char a[MAX_LEN]="";
char b[MAX_LEN]="";
char output[MAX_LEN]="";  // clearing out garbages

// opening files...
ifstream input_file(IN_FILE); //open file to read
ofstream output_file(OUT_FILE); //open file to write
if(input_file.fail()) //input file check
 cerr << "Error opening "<<IN_FILE<<endl;
else if(output_file.fail()) //output file check
 cerr << "Error opening "<<OUT_FILE<<endl;
else
{
 while (! input_file.eof()) //loop starts to get lines, stops end of the file.
 {
  strcpy(output,""); // just in case if the line have odd number
  //read file by line
  input_file.getline(a, sizeof(a)); //get a line, when repeats get the next odd line
  input_file.getline(b, sizeof(b)); //get a next line, when repeats get the next even line
  if (strcmp(a,"EOF")==0 || strcmp(b,"EOF")==0) break; // break out loop when meets "EOF" string, no matter if there's more to read.
   // so, really doesn't matter either line number is on even, or odd.

  //calculation
  //remove the sign
  int is_a_neg=signcheck_rmv(a);
  int is_b_neg=signcheck_rmv(b);

  switch(calculate(a, b, output, is_a_neg, is_b_neg)) // check out whether output positive calculation or negative.
  {
  case NEGATIVE:
   reform(output,strlen(output)+1);
   output[0]='-';
  case POSITIVE:
   break;
  }

  //cout<<"a: "<<a<<endl<<"b: "<<b<<endl<<"o: "<<output<<endl;  // just for testing purpose.
  output_file<<output<<endl; // write a line to output file.
 }//end of eof checking loop
}//end of input file error checking

// closing files...
input_file.close();
output_file.close();
} //end of main(void)*/

'geek_stuff > today' 카테고리의 다른 글

Tistory 초대권 응모관련...  (17) 2006.05.27
Tistory.com Beta에서의 첫 글  (3) 2006.05.26
1kko.com 블로그의 변천사  (0) 2006.05.21
자료구조 과제 #3  (0) 2006.05.10
자료구조 과제 #2  (0) 2006.05.10
심심해서 서버 하나를 뚫어봤다.  (0) 2006.05.08
Apple.com이 윈도우즈를 지원한다?!  (2) 2006.04.06
숫자 generator 프로그램  (0) 2006.03.27
뉴 개념의 PC 등장!  (0) 2006.03.10
도전 PC 100만원!  (5) 2006.02.23
geek_stuff/today 2006. 5. 8. 00:00

심심해서 서버 하나를 뚫어봤다.

아는 서버를 뚫어봤다.

신가하게도 잘 들어가진다.

보안상의 문제로 이것저것 세팅을 해놓은줄 알았는데

일부러 열어 놓은것인지 아니면 그냥 생각이 없던것인지는 모르겠으나

하여튼 나는 일이 쉽게 된다고 생각했다.

처음에는 wget으로 파일의 이름을 잘 맞춰서 data 디렉토리에 접근하면 된다고 생각했는데

(어짜피 permission이 707이니깐) 그런데 일이 생각지도 않은 apache부분에서 쉽게 풀려버렸다.

어째서 이 옵션은 기본적으로 enabled되어있는것인데 이걸 생각을 못했을까 하는 생각도 들고

설마 나같은 사람이 있을꺼란 생각을 못했겠지 라는 생각도 들고...

아무튼 이 포스팅은 일단 secret.

[Secret]
Q:내가 해킹한 서버는 어디일까요??
A:자료구조

프로그래밍 과제를 올리는 곳인데...

뚫린다... 오오... 신가하다...

아니... 조교는 이런것도 안막아놓고 뭐했대?

얘기해서 프로그램 안짜고 10점만점 달라고 할까... 보안상 문제되는곳은 막아주겠다고 하면서-ㅋ

하지만.. 프로그래밍 과제도 몇개 안남았다..;;


그럼.. 이 포스팅은 어느정도 날짜가 지나야 공개가 되야하는군...

그렇다면 깔끔하게 7월 1일... 모든 기말고사와 채점이 다 끝난 이후로군... 후후..

[/secret]

'geek_stuff > today' 카테고리의 다른 글

Tistory.com Beta에서의 첫 글  (3) 2006.05.26
1kko.com 블로그의 변천사  (0) 2006.05.21
자료구조 과제 #3  (0) 2006.05.10
자료구조 과제 #2  (0) 2006.05.10
자료구조 과제 #1  (0) 2006.05.10
Apple.com이 윈도우즈를 지원한다?!  (2) 2006.04.06
숫자 generator 프로그램  (0) 2006.03.27
뉴 개념의 PC 등장!  (0) 2006.03.10
도전 PC 100만원!  (5) 2006.02.23
옛날 컴퓨터에 대한 단상.  (3) 2006.02.13
geek_stuff/server & linux 2006. 5. 6. 16:34

리눅스에서 NDAS장비 사용하는 방법

최근에 새로텍에서 판매하는 U-Stor NDS-354라는 장비를 샀다.



리눅스 서버가 최근 날라갈 뻔한 경우가 있어 이제는 백업을 해야겠다는 생각이들어 시게이트 250G와 함께 구입.

리눅스에 attach해서 사용할 것인데, 아무리 찾아봐도 홈페이지와 국내 사이트에서는 없길래 찾아찾아 겨우

NDAS라는 것을 처음 개발한 ximeta의 홈페이지까지 가서 찾아냈다.

주말이라 새로텍에 문의해도 글이 올라올 것 같지 않아 하루죙일 삽질한 결과를 남긴다.
(사실 처음에 성공했는데 생각해보니 파티션을 나누지 않아서 대략 난감;; 처음부터 다시 시도 했으나 문제발생..
어째저째 여러번 시도해서 100G는 리눅스용 ext3로, 나머지 150G는 윈도용 NTFS로 포멧하고 두대의 컴퓨터에 read/write mode로 연결 성공.. 아 감동의 눈물이여...)


설치방법은 아래와 같다.

먼제 아래의 사이트로 가서 운영체제와 해당 버전을 맞춰 두개의 파일을 다운받는다.
http://www.ximeta.com/support/downloads/index.php

운영체제의 커널에 맞는 버전의 .rpm.bin와 NDAS admin utility를 받으면 된다.

설치방법은

# /bin/sh ./ndas-kernel-1.0.2-2.6.16_1.2107_FC4.24.i686.rpm.bin
..
..

이렇게 치면 yes no를 물어오는데 yes치고나면 현재 디렉토리에 rpm이 나온다.

# rpm -ivh ndas-kernel...
ndas-kernel: ######################

이것을 설정한 후 시스템을 리붓시켜줘야한다.

# shutdown -r now

리셋 후 같은방법으로 ndas admin utility를 설치

# rpm -ivh ndas-admin-...
ndas-admin: ######################

이제 장치를 등록해야한다. 이는 NDAS장비의 특성으로 보이며 이를 입력하지 않았을 경우 장비에 접근할 수 없다.

# ndasadmin register XXXXX-XXXXX-XXXXX-XXXXX-WWWWW -n NetDisk1

여기서 XXXXX는 등록코드이며 뒤의 WWWWW는 다섯자리의 장비 write코드이다. -n뒤는 장비 이름이다.

일단 이렇게 하면 성공하였다는 메세지가 뜨며 장비를 사용하기 위해서는 ndas 드라이버를 구동시킨후 장치를 enable시켜야 한다.

# ndasadmin start
NDAS driver is initialized.


# cat /proc/ndas/devices/NetDisk1/slots

하면 장비의 슬롯번호가 뜨는데 그 번호를 사용해서 다음과 같이 입력

# ndasadmin enable -s # -o w
Block device /dev/ndas-####:# is ready to use.
( -o옵션에 s보다는 w를 적극추천.. s로 한경우 다른 호스트에서 연결할때 read/write모드로 연결 가능하지만 쓰는 타이밍을 잘 맞춰야 파일이 손상되지 않으며 만일 손상될경우 복구방법은 거의 없어보임..)

이렇게하면 장비가 쓰기가능한 모드로 바뀌면서 마운트시킬수있는 장비 이름이 생성된다.

fdisk로 파티션을 3개로 나눠준 경우 /dev안에 ndas-####:#p1, ndas-####:#p2, ndas-####:#p3... 등을 볼 수 있으며, 이 경우 특정 파티션을 포멧하려고 하면

# mkfs.ext3 /dev/ndas-####:#p1
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
....
..
.

이후 마운트를 할경우 /dev/안에 ndas-####:0p#으로 마운트시키면 드디어 NDAS장비를 리눅스에서 사용할 수 있게된다.

# mount /dev/ndas-###:#p1 /mnt/ndas1


개인적인 생각이지만 ximeta의 NDAS를 사용하는 모든 제품은 이런식으로 마운팅이 가능할 듯..


덧1) 이 뻘짓거리를 다 하고 나서 든 생각은... 도대체 왜 새로텍에서 이 내용을 메뉴얼로 안만들었을까하는 의구심과 함께 분노가 물밀듯이 밀려옴... 곧... complain카테고리에 포스트 하나가 추가되겠군요...

덧2) 리눅스에서 디스크에 파일을 쓰고있는도중 윈도우에서 다시 파일 쓰기를 하니 모든파일이 날라감..
리눅에서 읽히지 않음. 포멧중... 이후엔 한번에 한 파티션만 마운트해야 할것 같음. read모드는 괜찮을까..
geek_stuff/web & network 2006. 5. 2. 07:30

내가 블로그의 사용성을 저해했었나?

trackback to : : http://xenix.egloos.com/1248042

Weblog Usability: The Top Ten Design Mistakes

1. No Author Biographies ( 저자의 소개가 없다. )
저번에 추가했었다.

2. No Author Photo ( 저자의 사진이 없다. )
사진보다 더 닮은 케릭터가 있었는데 스킨을 no graphic으로 바꿔버리면서 없어졌다.

3. Nondescript Posting Titles ( 애매한 포스팅 제목 )
좀 자극적인 포스팅 제목을 지을때도 있으나 대부분은 무난한듯...

4. Links Don't Say Where They Go ( 어디로 가는지 설명이 없는 링크 )
별로 없다고 생각한다.

5. Classic Hits are Buried ( 오래된 인기글은 묻어둔다. )
아.. 그랬었군.

6. The Calendar is the Only Navigation ( 캘린더가 유일한 네비게이션 이다. )
링크가 옆에 덕지덕지 하니 패스

7. Irregular Publishing Frequency ( 불규칙한 포스팅 주기 )
나도 고치고 싶지만 힘들다.

8. Mixing Topics ( 뒤섞인 주제들 )
카테고리별로 나뉘어져 있다.

9. Forgetting That You Write for Your Future Boss
( 미래의 당신의 사장이 블로그를 볼 수도 있다는 사실을 잊음 )
글쎄... 이 글을 쓰는 사람이 나인지 알까?

10. Having a Domain Name Owned by a Weblog Service
( 블로그 서비스 회사가 제공하는 도메인을 사용 )
나에겐 1kko.com(이코닷컴)이라는 도메인이 있다.

Miracle Garden님의 홈피에서 보고 어디 나도 한번 해봐? 라는 생각으로...
geek_stuff/server & linux 2006. 4. 28. 07:32

서버포멧! ㅠㅠ

드디어 설마설마하던 일이 나고야 말았다.
이제부턴 백업을 착실히 하리라.

음.. 백업용으로 300GB하드를 사야겠군...

다행히도 home은 남아있어서 많이 건질수있었고 그나마 며칠전에 심심해서 테터를 백업해놓은게 다행이다.

그외 나머지 웹 파일 및 서버설정은 다 날라가 버림 ㅠㅠ

뭐 그거야 다시 다운받고 설치하면 되지만...


가끔 안되는 경우도 있을꺼에요~

참 오신김에 공지사항도 읽어주시면 복받을꺼에요~

공지사항: http://1kko.com/notice/69