예판넷대장이 직접 판매한 슈타게 개봉샷

구성품은 패키지와 포스터, 닥터페퍼와 대장님의 명함과 닥터페퍼(중요하니 2번씀)

포스터 빼고 한장더!

개봉부터 찍는것을 잊어서 안찍혀있지만, 박스테이프로 꼼꼼하게 붙어있어서 닥터페퍼가 들어있던 작은 상자는 빈상자인줄 알고 버릴뻔했다.

하지만 무거워서 다시보니 출렁출렁,,,, 이게뭐지 하고 보니 닥터페퍼가 똭~!


플레이 후기는 나중에 남기겠다.

엘 프사이 콩가루

이건 PHP로 mp3를 swf로 변환해 재생하는 코드

http://kr.php.net/manual/kr/function.swfmovie.streammp3.php#12973



이거는 http://cafe.naver.com/q69/86101 에서 퍼온 자바스크립트 재생이 코드

<html>

<head>
<title>Simple Embedded MP3 Player</title>

<script type="text/javascript">
var mp3Player
function launchPlayer(mp3File) { 
    
mp3PlayerExists = (mp3Player!=null)
    
    if (mp3PlayerExists && !mp3Player.closed) {mp3Player.focus()}

    mp3Player = window.open("mp3player.html?" + mp3File,"mp3Player","height=150,width=130,status=yes,toolbar=no,menubar=no,location=no")
}

function closePlayer() {
   mp3PlayerExists = (mp3Player!=null)
    if (mp3PlayerExists && !mp3Player.closed) {mp3Player.close()}
}
</script>

</head>

<body onload="closePlayer()" onunload="closePlayer()">

<a href="javascript:launchPlayer('../snd/karizma2.mp3')">Play Song</a><br/>
<br/>
<a href="http://www.aol.fr/">closePlayer() on unload</a><br/>
<a href="launcher.htm">closePlayer() on load</a><br/>

</body>
</html>


 


<!-- mp3player.html -->


 


<html>

<head>
<title>Simple Embedded MP3 Player</title>

<script type="text/javascript">
function playFile() {
document.realPlayer.DoStop()
    document.realPlayer.SetSource(document.location.search.substring(1))
    document.realPlayer.DoPlay()
}

function stopFile() {
    document.realPlayer.DoStop()
}
</script>
</head>

<body onload="playFile()">

<div style="position:absolute;top:-200px;left:-200px">
<object id="realPlayer" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="0" height="0">
   <param name="console" value="_master">
   <param name="autostart" value="false">
<embed name="realPlayer" type="audio/x-pn-realaudio-plugin" width="0" height="0" console="_master" autostart="false"></embed>
</object>
</div>
<form>
    <input type="button" value="PLAY" onclick="playFile()"><br/>
    <input type="button" value="STOP" onclick="stopFile()"><br/>
    <input type="button" value="CLOSE" onclick="window.close()"><br/>
</form>

</body>

</html>


'생활 > 리버스(?)' 카테고리의 다른 글

일본 만담 ㅋㅋ  (0) 2012.03.10
SSD사용 요령  (0) 2012.03.10
아이폰스펙에 대한 진실  (0) 2012.03.10
소켓 프로그래밍 공부중  (0) 2012.03.10
Un·touch·a·ble (5)  (0) 2011.02.10

몇일전에 CJ 헬로 모바일이라는 KT회선을 이용하는 MVNO에서 넥서스5를 저렴한 가격에 풀었다.

요즈음 안드로이드 프로그래밍을 하고 있기도하고, 겔놋2, 겔스3등을 사용해보았고, 크레마원 이라는 android 이북도 구매한김에 레퍼런스 안드로이드가 한대 있으면 갖고놀기 좋겠다는 생각이 들어서 냉큼 질렀었다.(지금생각해보면 이거 유지비가,,, 물론 구글에 제돈주고 사는것보다는 저렴하지만,,,)

어찌됐든 개봉기!

퍼런색 껍데기. 예전에 넥서스7 2세대 껍데기도 본적이 있는데, 넥서스시리즈는 전부 퍼런색인건가??

일단 깔끔해 보이는 포장이 맘에 든다. 박스 앞면에 잡소리 없이 쿨하게 Google 6글자만 있다.


저 껍데기를 벗기면 나오는 허연 속살. 여기도 마찬가지로 꼴랑 Google 6글자. 삼성폰에는 뭔가 많이 적혀있던것 같은데,,,


요즘은 식상해진, 박스를 열면 바로 보이는 스마트폰 본체. 액정을 보호하는 필름의 nexus5라는 글자가 보인다.(nexus시리즈는 공식적으로 소문자를 사용하는듯,,,)


박스 풀오픈샷(뒤집힌것 무시하자) 역시나 식상하게도 폰 본체를 올려놓은 트레이와 이를 꺼내면 그안에는 유심제거핀과, 간략한 설명서, 그리고 충전기와 케이블. 아이폰 이후로 점점 설명서들이 얇아지고 있다.(나는 숨겨진 기능 찾는재미가 늘어서 좋다ㅋ)


그리고 판매자가 겸사겸사 같이준 액보필름. 저 스티커를 보면 알겠지만, 5장이나 들어있다.(잊고 안찍었지만 앞에 바코드에는 10매 세트라고 쓰여있,,,,)


일단 레퍼폰의 장점인 Kitkat의 개발자모드에서 변경할 수 있는 런타임을 ART(Android RunTime)로 변경해보았다.

아직 개발중인 기술인데, 기존 libdvm.so를 이용한 Android의 Dalvik런타임의 경우 실시간(JIT)컴파일를 이용하여 자바 바이트코드를 네이티브코드로 변환, 실행한다. 하지만 libart.so를 이용하는 ART의 경우는 AOT(Ahead Of Time)컴파일이라 하여 실행전(즉 최초 실행이전, 보통은 설치직후) 바이트코드를 네이티브 코드로 변환해 놓는다. 가상머신을 생성할 필요도 없고, 실행중 컴파일도 하지 않아 앱의 반응속도등이 빨라지고, 코어 사용양도 줄어, 배터리 수명에 도움이 되는 기술이라고 한다.

변경을 하면 폰은 재부팅시키는데, 이때 기존 앱을 AOT컴파일을 한다. 나는 1개인가의 앱을 설치후 변경했으므로, 100개의 앱을 최적화 하고있다.

근데, 직후에 안드로이드 업뎃이 있다고 해서 업뎃후 다시 ART로 변경,,,,


2개가 줄어든 98개를 컴파일 하고있다.

일단 지금 2일째 사용중인데, 속도는 꽤나 빠릿한듯하여, 노트2나 갤스3보다 맘에 드는것 같다.(애초에 갤놋2나, 갤스3는 한참전세대폰이니,,ㅋ)



맥 또는 리눅스를 주로 사용하다가 윈도우를 사용하게되면, 커맨드라인 입력시에 피를보는 경우가 종종있다.

예를 들자면 cd로 pwd경로를 바꾼다음 ls로 파일명을 보려고 한다거나, 나도모르게 grep을 입력하고 있거나 sed를 쓰려는 경우들이다.

이런 문제를 해결하기 위해서인지, "GNU utilities for Win32"라는 프로젝트가 있다.

말 그대로 GNU utility들을 native 바이너리로 포팅해서 cygwin등의 에뮬레이트 레이어 없이 작동시키려는 프로젝트이다.

지원 명령어들은 너무 많아서 일일히 열거할 수 없지만, 어지간한것은 다 있다.(물론 ssh는 없었지만, 이것은 putty로 해결중이다.)

다운로드는 아래 페이지에서 가능하고, windows 환경변수중 PATH에 추가하면 사용 가능하다.

http://unxutils.sourceforge.net

'생활' 카테고리의 다른 글

레티나 맥ㅋ북ㅋ 프로(스압주의)  (0) 2012.08.17
염 to the 장 ㅋ  (0) 2012.08.06
맥북 입원하다  (0) 2012.06.01
노트북부활!!!!!!  (0) 2012.06.01
맥북 사망...  (0) 2012.05.31


2012/12/22 - [컴퓨터/졸업과제] - [졸업과제]과제를 위한 가이드라인 세우기

자 가이드라인에 따르면 이번엔

2. Linux 응용프로그램작성

을 할 차례이다.

2.1 응용프로그램작성

일단 이게 되면 나머지는 똑같은 것을 반복한다.

흔한 소켓프로그램 작성법을 따라서, 

#include <sys/socket.h>

#include <sys/stat.h>

#include <arpa/inet.h>

#include <signal.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/wait.h>

이놈들을 include한다.

그다음

int serv_sock;

int clnt_sock;

struct sockaddr_in serv_addr;

struct sockaddr_in clnt_addr;

int sockOpt;

요 변수들을 만든다.

각각 서버소켓(listen용) 클라이언트소켓(통신용), 서버주소(자신의 주소), 클라이언트 주소(접속한 상대의 주소)를 저장하는 변수들이고,
sockOpt 이녀석은 한 포트로 여려개의 bind를 하기 위한 옵션을 주기위해 필요하다.

serv_sock=socket(PF_INET, SOCK_STREAM,0);


if(serv_sock == -1)

error_handling("socket() error");

이걸로 서버 소켓을 만든다. 소켓은 IPv4, 스트림소켓이다.(인터넷을 사용하고, 서버-클라이언트가 항상 연결되는 소켓)

memset(&serv_addr,0,sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

serv_addr.sin_port = htons(atoi(default_PT));

sockOpt = 1;

setsockopt(serv_sock, SOL_SOCKET, SO_REUSEADDR, &sockOpt, sizeof(sockOpt));

if(bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -1)

{

error_handling("bind() error");

}


if(listen(serv_sock,5) == -1)

{

error_handling("listen() error");

}

일단 서버의 주소를 넣을 구조체를 비운다음에, 주소체계를 IPv4인터넷 프로토콜 방식으로 하자.
주소는 INADDR_ANY로 하여, 모든 주소에서 접속을 받기로 하고, port는 미리 지정된 포트를 사용한다.
REUSEADDR옵션을 켜서 이 포트를 다시 사용할 수 있도록 하여, bind에서 엄한 에러가 안나도록 하였다.
bind를 하고, listen을 하여, 클라이언트의 접속을 기다린다.
접속이 되면

addr_size=sizeof(clnt_addr);

clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr,&addr_size);


if(clnt_sock == -1)

{

exit(0);

}

이렇게, 접속을 수락하고, 

if((str_len=recv(clnt_sock, message, BUFSIZE, 0))>0)

{

int i;

message[str_len]=0;

if(message[0]!=0)

{

long long t = atoll(message);

char buf[MAX] = {0,};

long long k = 1;

long long i;

for(i=1; i<=t; i++) k*=i;

lltoa(k, buf);

printf("write : %s\n", buf);

if(write(clnt_sock, buf, sizeof(buf)) <= 0)

{

perror("write error : ");

exit(1);

}

else

{

printf("suc write : %s\n", buf);

}

}

}

puts("connect end");

close(clnt_sock);

클라이언트 소켓에서 recv로 수신한 메세지를 message변수에 저장하고 그 길이를 str_len에 저장한다.

메세지가 수신되었다면 그 문자열을 숫자로 변환하고, 그 숫자의 factorial을 구한다.

그후, 문자열로 재변환 한 뒤에, write를 하여 클라이언트에게 전송한다.

2.2 서버프로그램작성

위 프로그램을 기반으로 하여, listen이 된 경우 fork를 하여, 부모 프로세스는 다시 listen으로 돌아가고, 자식프로세스는 accept를 하여

위와 유사한 작업을 한다. 

2.3 서버프로그램과 응용프로그램 연동

서버의 자식프로세스에서, ssh를 이용하여 응용프로그램을 실행한다. 그후 서버에서 응용프로그램의 포트로 소켓을 열어 접속을 한다.

그다음 서버에게 온 입력값을 응용프로그램에 투척하고, 응용프로그램이 처리한뒤 전달된 결과값을 다시 클라이언트에게 던져준다.

 

2012/12/22 - [컴퓨터/졸업과제] - [졸업과제]과제를 위한 가이드라인 세우기

에서 쓴 것과 같이

1. 안드로이드 어플리케이션 개발.
  1.1 안드로이드 SDK설치
  1.2 안드로이드 개발도구 설정
  1.3 안드로이드 소켓프로그램 작성.
2. Linux 응용프로그램작성
   2.1 응용프로그램작성
   2.2 서버프로그램작성
   2.3 서버프로그램과 응용프로그램 연동
   2.4 안드로이드 어플리케이션으로 서버에 접속하여 응용프로그램 원격 실행

순으로 해야한다.

1.1 안드로이드 SDK설치.

http://developer.android.com/sdk/index.html << 여기에 접속하면 알아서 적당한 OS버전에 맞는 SDK와 eclipse를 수정한 IDE를 제공한다(일단은 윈도우에서만 확인)

adt-bundle-(플렛폼명).zip 파일을 받아서 압축을 풀면 1단계는 끝.
폴더 안에서 SDK Manager를 실행한뒤 원하는 안드로이드 버전의 SDK를 다운받으면 된다.
난 일단 전부 받기로,,,

1.2 안드로이드 개발도구 설정.

일단은 안드로이드 폰(HTC의 디자이어HD)을 커스텀 롬으로 사용하고 있었는데, 이놈이 왠지 개발자모드가 안먹는것 같다.
일단, 루팅을 해제하고, KT의 기본 펌웨어로 돌아가기로 한다.
사용 안드로이드 버전은 2.3.5(진저브레드, google API level10)이다.
적당히 개발자 설정 한뒤에 컴터에 꼽으면 자동으로 인식한다.

1.3 안드로이드 소켓프로그램 작성.

안드로이드 소켓프로그램은 생각보다 간단하다.
Socket 타입변수를 만들어

Socket socket = new Socket ( ip, port );    //(ip는 String, port는 int)

명령을 하면 소켓이 열리고,

private BufferedReader networkReader;
private BufferedWriter networkWriter;
networkWriter = new BufferedWriter ( new OutputStreamWriter ( socket.getOutputStream (  ) ) );
networkReader = new BufferedReader ( new InputStreamReader ( socket.getInputStream (  ) ) );
PrintWriter out = new PrintWriter ( networkWriter, true );

콤보를 먹여주면

//send
out.println( String );

//recv
line = networkReader.readLine (  );

가 구현이 된다.

졸업과제를 위해 안드로이드 모바일 클라우드를 구현하기로 하였다.

1~2주차 과제는 안드로이드 앱에서 명령을 내려 서버에서 특정 프로그램을 실행, 다시 안드로이드 앱으로 결과를 전송하는것이다.

이를 위해 우선 해야될것이

1. 안드로이드 어플리케이션 개발.
  1.1 안드로이드 SDK설치

2012/12/23 - [컴퓨터/졸업과제] - [안드로이드 프로그램]1일차. SDK설치와 개발도구 설정

  1.2 안드로이드 개발도구 설정
  1.3 안드로이드 소켓프로그램 작성.
2. Linux 응용프로그램작성
   2.1 응용프로그램작성
   2.2 서버프로그램작성

2013/01/05 - [컴퓨터/졸업과제] - [서버 프로그램]1주차. 서버쪽 소켓프로그램 만들기.

   2.3 서버프로그램과 응용프로그램 연동
   2.4 안드로이드 어플리케이션으로 서버에 접속하여 응용프로그램 원격 실행

일단 2주일 안에 이것들을 전부 해야한다...ㅠㅠ

어제 맥북이 도착해서 포스팅을 하려고 했는데, 이래저래 시간이 안나서 놀다가 잊어먹었다가 오늘 포스팅 한다.


우선 박스포장. 도착하자마자 사진은 찍었는데 내 iPhone 3Gs로 찍었더니 화질이 ㅎㄷㄷ 그래서 도착하자마자의 박스는 빼고 나머지를 동생의 iPhone 4로 찍었다.

개인정보는 모자이크

포장은 넉넉하게 잘 되있습니다.

저거 굉장히 두툼합니다.

파인더 아이콘에 있는 맥 아저씨.

상자 가득 딱 맞게 들어있는 맥북. 처음에 딱봤을땐 아이패드 등짝이랑 닮았다고 생각했음.

이것은 구성품들. 검은 상자, 아답터, 긴 플러그, 짧은플러그. 근데 긴 플러그는 접지가 안되는 놈이라 접지가 되는 예전 플러그를 사용하기로 함.

검은 상자안의 내용물. "안녕하세요" 라고 씌여있는것은 사용설명서. 흰둥이 맥북보다 상당히 두꺼워진듯한 느낌,,, 맥북프로라고 적힌것은 우리나라 제품설명서 맨 앞의 사용상 주의사항이랑 맨 뒤에있는 스펙들 적어놓은것 같은 느낌. 사과스티커랑 무선 기기 인증 안내? 그리고 시커먼것은 액정 닦개

요로코롬 생겼다. 꺼내보면 편지봉투모양으로 접혀있고, 사과는 하단의 중앙에 위치한다.

드디어 맥북 바닥에 있던 봉인을 뜯을시간.

(레~리즈!)

이건 맥북 왼쪽의 포트들. 마그세이프2(왜 바꿨지?), 썬더볼트x2, USB3.0, 이어폰 단자.

썬더볼트라는것은 PCI슬롯을 케이블로 밖으로 꺼내는듯한 규격이란다.(나도 잘 몰른다. 무지 빠르다는것 밖에는) 그래서 랜카드를 꽂을수도 있고, 외장하드도 상당히 빠른 속도로 연결 가능하단다. 또한 미니 디스플레이 포트랑 호환되서 예전에 샀던 모니터케이블을 걍 쓸수 있을것 같다.

오른쪽 단자들. SD카드 슬롯, HDMI포트, USB3.0

모니터 케이블을 미니 디스플레이포트 to HDMI 젠더에 물려서 썼는데 HDMI지원이라니!!!


이제 부팅영상.목소리는 무시하세요

'생활' 카테고리의 다른 글

윈도우에서 리눅스 명령어 사용하기  (0) 2014.04.11
염 to the 장 ㅋ  (0) 2012.08.06
맥북 입원하다  (0) 2012.06.01
노트북부활!!!!!!  (0) 2012.06.01
맥북 사망...  (0) 2012.05.31
염 to the 장 ㅋ 생활 2012. 8. 6. 08:59

맥북 레티나를 질렀습니다 ㅋㅋㅋㅋ

근데 흰둥이가 운명하신건 안자랑,,,

사실 흰둥이 맥북이 사우스 브릿지가 나가서 USB포트가 작동을 안하고, 충전도 되다 말다 했었는데,,

얼마전에 방전이 되서 충전기에 꽂으니, 충전이 안되는 사태 발생,,,

이래 저래 만져봤는데도 안되서 ㅠㅠ 하고 있었더니 부모님께서, 노트북이 필요한거면 사야지 징징대지 말고 라고 하셔서 냉큼 지름.

다행이 학교 할인이 먹혀서 기본적인 학생할인보다도 싸게 장만. 근데 그 싼가격만큼 램을 추가했으니 그게 그건가? ㅋㅋ

램 16기가에 쿼드코어 아이비 브릿지 i7, 256GB SSD.

이정도면 레알 5년은 쓸기세,,

하긴 흰둥이도 내가 삽질만 안했으면 내년까지 쓸수 있었는데,,,ㅠㅠ

'생활' 카테고리의 다른 글

윈도우에서 리눅스 명령어 사용하기  (0) 2014.04.11
레티나 맥ㅋ북ㅋ 프로(스압주의)  (0) 2012.08.17
맥북 입원하다  (0) 2012.06.01
노트북부활!!!!!!  (0) 2012.06.01
맥북 사망...  (0) 2012.05.31
맥북 입원하다 생활 2012. 6. 1. 23:50

오늘 집에 오늘길에 맥북을 입원시켰습니다.
일단 용산에 들고가긴했는데, 전원은 들어오는걸 보니, USB문제만 남은듯 합니다.

일단 16만원정도 나올거라고 하는데, 내일이 지나 검사 하고 확실히 알려준다고 합니다.

잘 되야 할텐데,,,,

'생활' 카테고리의 다른 글

레티나 맥ㅋ북ㅋ 프로(스압주의)  (0) 2012.08.17
염 to the 장 ㅋ  (0) 2012.08.06
노트북부활!!!!!!  (0) 2012.06.01
맥북 사망...  (0) 2012.05.31
[링크] 윈도우의 역사  (0) 2012.03.10
노트북부활!!!!!! 생활 2012. 6. 1. 11:49

노트북이 부활했습니다!
이제 집에 가려고 콘센트 정리를 하던중 옆에 남은 곳에 더사 맥북을 꽃았더니 주황불이 쫙~ 맥북아 부왕~
여튼 수리는 미뤄도 될지도,,,

'생활' 카테고리의 다른 글

염 to the 장 ㅋ  (0) 2012.08.06
맥북 입원하다  (0) 2012.06.01
맥북 사망...  (0) 2012.05.31
[링크] 윈도우의 역사  (0) 2012.03.10
윈도 블루스크린 에러코드 내용,,, 없으면 포맷ㅋㅋ  (0) 2012.03.10

서버를 갈아엎었다.
덕분에 홈페이지는 날아갔지만, 메일서버를 신설해서
이메일 주소를 내 고유 도메인으로 갖게 되었으니 이제 앱개발만 하면 된다.
dcmichael(at)dcmichael(dot)net
으로 만들었는데, 너무 긴 느낌이,,,
게다가 맥북이 죽어서 앱개발은 당분간 보류,,,ㅠㅠ

 

'생활 > 서버놀이' 카테고리의 다른 글

웹프로그래밍 공부하기 좋은 홈페이지,,  (0) 2012.03.10
해킨 삽질을 위한 가이드  (0) 2012.01.08
http 파일서버 프로그램  (0) 2009.11.20
맥북 사망... 생활 2012. 5. 31. 17:31

잘 키우던 맥북이 드디어 사망했습니다.
약 3년 가까이 쓰던 2010형 맥북인데, USB를 태워먹어서 Magic마우스로 버티고 있었는데,
엊그제 학교에 일이있어 내려오는동안 잘 쓰고, 친구방에서 어댑터를 꽂았는데, 불이 안들어옴,,,
보니까 서킷이 한군데 나간듯,,,
내일 올라가는길에 용산에 들러 고쳐야 겠다...

'생활' 카테고리의 다른 글

맥북 입원하다  (0) 2012.06.01
노트북부활!!!!!!  (0) 2012.06.01
[링크] 윈도우의 역사  (0) 2012.03.10
윈도 블루스크린 에러코드 내용,,, 없으면 포맷ㅋㅋ  (0) 2012.03.10
whylinuxisbetter  (0) 2012.03.10

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

http://kevin0960.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%A6%88-10-%EB%B6%80%ED%84%B0-7-%EA%B9%8C%EC%A7%80

'생활' 카테고리의 다른 글

노트북부활!!!!!!  (0) 2012.06.01
맥북 사망...  (0) 2012.05.31
윈도 블루스크린 에러코드 내용,,, 없으면 포맷ㅋㅋ  (0) 2012.03.10
whylinuxisbetter  (0) 2012.03.10
역전재판 총정리,,  (0) 2012.03.10

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

1. 정보모음에 소홀히 하지 말고 설명서를 읽음에 게을리 하지 말지어다.

오늘 필요 없는 정보는 내일 필요하리라. 가장 가치 있고도 저렴한 지식은 책 속에 있느니라. 서점과 동료의 책꽂이에 무엇이 꽂혀 있는지 때때로 살피어라. 무심코 흘렸던 종이 한 장이 너의 근심을 풀어 주었으리라. 설명서는 충분히, 꼼꼼히 읽을지어다. 모든 의문은 설명서를 안 보는데서 생기니라. 그렇더라도 모두 다 읽을 필요는 없느니라. 많은 정보가 능사는 아니니라. 정보의 가치를 찾는 법부터 배우라. 세상엔 너무나 많은 자료와 정보가 넘쳐난다.

알알이 모두 끌어 모을 생각을 하기 보단 정보를 하나로 꿰는 법부터 먼저 배우는것이 너의 근심에서 쉽게 벋어나게 하는 방법이 되리라. 일을 시작하기전에 필요한 정보를 꼼꼼히 먼저 챙기는 법부터 배워라. 너희는 먼저 개발 의뢰서를 꼼꼼히 읽을지어다. 만약 개발 의뢰서가 없다면 발주자에게 요구할 지어다. 개발 의뢰서 없는 프로그램은 존재하지 않으니라.

2. 너의 PC가 안전하다고 믿지 말지어다.

5분 후에 정전이 되고 내일 너의 하드가 맛이 가리라. 그러니 너의 소중한 소스코드는 정기적으로 여러 군데에 단계별로 백업해 두어라. PC는 평상시엔 안전하다. 그런 실수를 저지르는것은 네자신이거나 아니면 외부적인 요인에 기인한다. 항상 백업을 철저히 해두며 백업에 백업까지도 챙겨두라. 그리고 백업을 했다면 리스트를 작성하라. 쓸데없는 백업은 백해 무익하나니 리스트를 항상 유지할 지어다. 너희는 노트를 옆에 끼고 살 지어다. 노트는 너의 생명이며, 너희가 기억하지 못하는 모든것을 상기시켜 줄지어다.

3. 변하는 수를 다룰 때에는 늘 조심할지어다.

정수가 절대로 그 한계를 넘지 않으리라 가정하는 것은 어리석음이라. 127 ,-128 ,255 ,32767 ,-32768 ,65535, 이 숫자들을 너의 골수에 새기어라. 0.0은 0이 아니니 실수는 원래부터 결코 정밀하지 않느니라. 부호 없는 것과 있는 것을 어울리거나 정수끼리 나눌 때에는 늘 조심하여라. 변수는 프로그램의 근원, 프로그램을 작성할때 가장 유의 할것이 바로 변수의 이름 짓기니라. 이름보고도 성격을 알 수 있게 해두라. 그러나 변수는 성질이 더러우니 변수에 성격을 부여할때는 조심스럽게 할지어다. 너희는 코딩하기 이전에 계획을 할 지어다. 이는 프로그래머가 코더가 아닌 것이니라.

4. 무슨 일을 반복시킬 때에는 처음과 끝에 유의할지어다.

너의 컴퓨터는 1보다는 0을 좋아 하니라. 배열의 첨자가 그 범위를 넘지 않을지 손 댈 때마다 따져 보아라. 수식에 1을 더하거나 뺄 때에는 늘 긴장하라. 너의 프로그램은 단지 한 번 덜해서 틀리고 한 번 더해서 다운되느니라. 프로그램을 작성할땐 계산, 판단, 비교를 그 모든걸 컴에게 되도록 맡기지말라. 네손으로 미리 계산하고 그 결과를 사용하는 방법이 최선이니라. 컴퓨터는 의지가 없나니 네가 잘못하든 잘하든 아무런 상관이 없느라. 너희는 머리가 악세사리가 아님을 기억하고 항상 생각하고 항상 노트에 적을 지어다.

5. 항상 모든 경우의 수를 고려하고 섣불리 생략하지 말지어다.

절대로 일어 나지 않을 일은 반드시 일어나고, 가장 드물게 일어날 일이 가장 너를 괴롭히리라. 그러하니 언제나 논리에 구멍이 없는지 꼼꼼히 따져 보고, if를 쓸때에는 else 부터 생각하라. 논리적인 오류는 성급함에서 생기나니 처음엔 항상 원리와 원칙을 지키라. 생각은 네가 하라 그리고 그 결과를 컴에게 시켜라. IF를 쓰기전에 규칙을 세우라. 먼저 IF의 결과에대한 규칙부터 세우고 따져라. 그리고 논리적인 계산을 IF문장안에서 하지 말라. 하나의 IF문장속에 수많은 논리연산은 버그의 원인이니라. 어느 정도의 프로그램에 대한 윤곽이 잡히면 프로토 타입을 만들지어다. 프로토타입은 프로그램에 대한 시뮬레이션이며 발주자의 요구를 빨리 수용 하는 방법이니라.

6. 함수 안에서 매개 변수값은 결코 믿지 말지어다.

지금 그 매개 변수가 결코 가질 수 없다는 값을 내일부터는 가지리라. 그러하니 매개 변수 값이 올바름을 항상 검사할지어다. 그렇더라도 처리 속도가 문제가 되는 경우는 예외이니라. 함수도 하나의 독립적인 프로그램이란것을 잊지말며, 네가 프로그램을 작성할땐 모든 함수가 돼도록이면 독립적으로 돌아가도록 할지어다. 함수의 매계변수는 항상 그옆에 작은 컴맨트와 초기화를 잊지말라. 처음부터 속도문제를 생각하지 말라. 모든 루틴을 최적화 할순 없다. 전체 프로그램중에 단 20%가 전체 실행시간에 80%를 점유한다. 프로토 타입에대한 발주자의 의견을 꼼꼼히 들을 지어다. 이는 발주자에 대한 신뢰도의 척도니라.

7. 오류를 알려 주는 기능은 있는 대로 모두 활용할지어다.

컴파일러의 경고는 모두 켜두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든 메모리 할당은 조만간 실패할 것이라. 컴파일러가 모든 경고기능을 동원해도 알려주지 않는 것은 많다. 중요한 건 오류가 생기기전에 규칙을 지켰는지 생각하라. 파일의 입출력과 메모리의 항당은 항상 쌍으로 생각해서 열었다면 닫아주고 할당받았다면 돌려주라. 프로그램의 매인턴앤스를 게을리하지 말지어다. 이는 프로그램 만드는 일 보다 중요한 일이니라.

8. 한 번의 수정과 재컴파일만으로 연관된 모든 것이 저절로, 강제로 바뀌도록 할지어다.

어떠한 것을 수정했을 때에 연관된 것이 따라서 변하지 않는다면 그것이 곧 벌레이니라. 컴파일러로 하여금 매개 변수 리스트를 완전하게 검사하도록 하고 언젠가 손대야 하거나 따라서 변해야 하는 수치는 전부 매크로로 치환하며, 형 정의를 적극 활용하여라. 이미 완벽한 루틴을 손대지 말라. 프로그램이 무너지는 가장 첫번째이유는 도미노 현상 때문이나니 한번의 수정과 재컴파일로 쓸데없는것을 손대게 하지 말라. 컴파일러가 매개변수 리스트를 챙기지 말게 하라. 프로그램에 들어가기 전엔 미리 함수명과 매개변수 리스트를 만들어라. 너희는 프로그램의 도큐멘트를 만드는일에 게으르지말지어다. 이는 사용자가 너의 프로그램에 대해서는 바보이기 때문이니라.

9. 사용자가 알아서 잘 써 주리라고 희망하지 말지어다.

너의 프로그램은 항상 바보만이 쓰느니라. 사용 설명서를 쓸 때에는 결코 빠뜨리지 말아라. 빠뜨린 만큼 사용자는 너를 괴롭힐 것이니라. 사용자는 나쁜놈이다. 쓸데없는짓을 잘한다. 무식하다. 인간성도 더럽다. 대부분이 바보며 가끔 똑똑한 사람도 있는데 그 놈은 더 하다.모든것을 설명하지 말며 온갇기능을 가진 하나의 프로그램을 작성하려 들지 말라. 많은 기능이 필요한 프로그램은 나누어서 작게 따로 만들어주라. 너희는 공부하는데 게으르지 말지어다. 자고나면 새로운 하드웨어와 새로운 소프트 웨어가 나오기 때문이니라.

10. 매사에 겸손하고 항상 남을 생각할지어다.

가장 완벽한 프로그램일수록 가장 완벽하게 숨은 벌레가 있느니라. 네가 이 세상 최고의 프로그래머라고 떠들며 자만할 때, 옆집 곳간에서는 훨씬 더 뛰어난 것을 묵묵히 만들고 있느니라. 아무렴 프로그래밍은 혼자 잘나서 할 게 아니니, 너로 인해 다른 사람들도 더불어 잘 되면 그 얼마나 좋은 것이냐. 프로그래머는 논리적으로 생각하여야 하지만 프로그램은 비논리적으로 작성하라. 프로그래머가 경지에 들면 누가 누가 잘하는지 알수가 없는 법, 또한 프로그래머로서의 '무지'에 대해서 잊지마라. 프로그래머의 '무지'는 생략하고, 선택하고, 단순화시키고, 명백하게하는 것이니라. 항상 새로운 아이디어와 새로운 생각으로 무장하라. 그리고 나누라 나누는곳에 기쁨있나니 너희는 모든 프로그램에 대해서 위의 프로시줘를 따를 지니라.

 

※ 원작자는 임인건님으로 터보 씨 2.0 정복이라는 매우 유명한 C언어 책을 쓰시고 또한 한라 프로라는 도스용 한글 라이브러리를 만드신 분입니다.

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

Error code Stop 0x00000050
 
시스템 디바이스 사이의 소프트웨어적 충돌을 의미하는 에러

win32k.sys파일은 시스템 장치드라이버를 제어하는 파일
윈도우즈를 설치하는 과정에서 장치 설치하는 도중에 발생한 소프트웨어적인 충돌

Cmos와 램/VGA/HDD등의 하드웨어 장치를 의심해볼것.


Error code Stop 0x0000000A or IRQL_NOT_LESS_OR_EQUAL 
ː내 용
1. 프로세서 및 메모리관리나 데이터 입출력 하드웨어제어 등의 IRQL(interrupt request level)인터럽트 요청 레벨이 너무높을때 발생하는 오류이다.

2. 메모리로 접근을위한 커널모드가 퍼미션을 가지지 못할 때 생기는 오류이다.

3. 일반적으로 이 메시지는 하드웨어나 소프트웨어 호환성 문제 때문에 생긴다.

ː문제해결 방법

- 드라이버나 펌웨어를 설치하는데 실패할 때 발생한다. 문제를 해결하기 위해 실패한 드라이버를 삭제하거나 드라이버 롤백기능을 사용한다. 

- 윈도우 XP를 업그레이드하는 동안 이오류가 나타나면 호환성부족 드라이버나 바이러스를 체크 해본다.


Error code Stop 0x0000001E or KMODE_EXCEPTION_NOT_HANDLED 
ː내 용 

1. 커널 오류중 하나이며 0×A오류와 거의 같다.

2. 메모리 부족 때문에 발생하는 오류이다. 

ː문제해결 방법

- 잘못된 드라이버를 설치하거나 메모리와 IRQ충돌시 이런 문제가 나타난다.

- 바이러스 백신이나 멀티미디어 응용프로그램 백업 프로그램등과 같이 필터프로그램을 사용하는 소프트웨어를 업데이트한다.

- 원격 제어프로그램의 win32k.sys 파일이 손상되었을 경우나 다른회사의 원격제어 프로그램을 설치할 경우에 발생될 수 있다.

- 안전모드로 접근을 못하는 경우 Recovery Console을 이용하여 문제를 해결한다.

- 시스템 펌웨어의 호환성부족으로 발생할수 있으며 바이오스 업그레이드로 문제를 해결해 본다.

- 디스크 공간이 부족할 때 발생되는 오류중하나이며 chkdsk.exe autochk.exe의해 발생되는 인터넷케쉬파일이나 temporary files(*.tmp files) 응용프로그램 백업파일을 삭제해 준다.


Error code Stop 0x00000024 or NTFS_FILE_SYSTEM 
ː내 용

1. 이 오류메시지는 NTFS파일 시스템 드라이버들을 쓰거나 읽는데 필요한 드라이버파일인 ntfs.sys 가 깨지거나 삭제되었을 경우 발생한다.

ː문제해결 방법

- SCSI나 ATA 하드웨어드라이버의 부조화로 발생하는 에러이다.
스커지인 경우 termination문제 케이블을 체크한다.

- event viewer에서 시스템 로그 안에 SCSI나 FASTFAT 과 관련된 에러사항을 체크한다. 

- 시스템 제조회사에서 제공하는 하드웨어 진단프로그램과 진단 소프트웨어로 테스트해본다. 


Error code Stop 0x0000002E or DATA_BUS_ERROR 
ː내 용

1. 시스템 페러티 에러나 메모리모듈 Level2 cache 나 비디오메모리 손상으로 발생되는 에러이다. 

2. 바이러스로 인해 발생할수있다.

ː문제해결 방법

- 드라이버를 잘못설치한 경우 발생할 수 있다. 파일이름을 보여주면 제거하거나 롤백 기능을 사용하여 문제를 해결한다.

- 램의 물리적인 손상일 경우가 많으므로 데이터가 주소에 제대로 접근 못하는경우가 많다. 이럴경우는 램을 교체해본다.

- 크랙된 응용프로그램을 설치한 경우에 발생할 수 있다.


Error code Stop 0x0000003F or NO_MORE_SYSTEM_PTES 
ː내 용

1. 이 에러는 여러 가지 원인에 의해 발생될수 있다.
주로 PTEs(page table entries)-시스템의 입출력수행의 과도현상 PTEs(메모리공간에대한정보)가 부족하거나 파손되는경우에 발생할수 있는 에러이다.

2. 잘못된 드라이버 설치시 발생할수 있다.

ː문제해결 방법

- 응용프로그램들이 요구하거나 이용할 수 있는 충분한 크기의 메모리 블록이 부족한경우에 발생하는 에러이다.

- 응용프로그램의 드라이버를 업데이트해본다.

- 윈도우 xp 는 PTEs의 수를 늘리기위해 registry entry,system pages를 제공한다.


Error code Stop 0x00000050 or PAGE_FAULT_IN_NONPAGED_AREA 

ː내 용

1. 요청된 데이터가 메모리에 상주되어 있지 않을때 발생하는 에러이다.

2. 호환이 잘 안되는 소프트웨어 설치시(원격 엑세스, 바이러스 백신)들이 에러를 일으키는 원인이 된다.

3. 결함이있는 메모리(메인 메모리,L2케시 메모리,video RAM) 

ː문제해결 방법

- 잘못된 드라이버 설치시 에러를 발생시킬수 있다. 드라이버를 삭제하고 업데이트된 드라이버를 재설치 한다.

- 만약 제조회사에서 드라이버를 찾지못한다면 비슷한 종류의 드라이버로 교체한다.


Error code Stop 0x00000077 or KERNEL_STACK_INPAGE_ERROR 
ː내 용

1. 이 에러는 페이징 (가상 메모리)파일로부터 요구된 커널 데이터의 페이지가 메모리에서 읽거들이거나 발견되지 않았을때 생기는 오류이다.

2. 디스크 데이터 충돌이나 바이러스 감염에 의해서도 생기는 오류이다. 

ː상태 코드

- 0xC000009A, or STATUS_INSUFFICIENT_RESOURCES 리소스부족을 가르킨다.

- 0xC000009C, or STATUS_DEVICE_DATA_ERROR,하드디스크의 베드블럭,섹터로 요청된 데이터를 찾지 못할때

- 0xC000009D, or STATUS_DEVICE_NOT_CONNECTED, 결함있는 파워케이블, 스카시 터미네이션 ,하드디스크 컨트롤러 

- 0xC000016A, or STATUS_DISK_OPERATION_FAILED, 결함있는 하드디스크의 베드섹터

- 0xC0000185, or STATUS_IO_DEVICE_ERROR, 결함있는 파워케이블 ,스카시 터미네이션 ,하드디스크 컨트롤러 두가지 디바이스장치가 동일한 시스템 리소스를 사용해서 생기는 오류


Error code Stop 0x00000079 or MISMATCHED_HAL 

ː내 용

1. 하 드웨어추상화계층(Hardware Abstraction Layer)-입출력 인터페이스, 인터럽트 제어, 다중 프로세서 통신을 구현하 는 데 필요한 하드웨어 종속적인 세부 사항을 처리하는 루틴과 커널타입이 맞지 않아 생기는 오류이다.

2. 주로 ACPI 펌웨어 설정이 변경되었을때 자주일어나는 오류이다.

parameter 1 parameter 2 parameter 3 Description 
0×00000001 Release level of Ntoskrnl.exe Release level of Hal.dll PRCB release
level mismatch 
0×00000002 Build type of Ntoskrnl.exe Build type of Hal.dll Build type mismatch 

3. 이 에러는 주로 Ntoskrnl.exe 나 Hal.dll 파일이 손상되었을 경우에 일어난다. 

ː문제해결 방법

- 리커버리 콘솔에서 두 파일을 복구시켜준다.

- ACPI 기능을 disable 시켜준후 IRQ를 재설정해준다.


Error code Stop 0x0000007B or INACCESSIBLE_BOOT_DEVICE 
ː내 용

1. 부팅하면서 시스템 파티션을 엑세스하지 못할 때

2. 잘못된 디바이스드라이버가 설치되거나 업그레이드 될 때

3. 바이러스 감염에 의해서 발생될 수 있다. 

ː문제해결 방법

- 입출력시스템이나 컨트롤러나 드라이버 장치가 잘못잡혀있을때나타나는 오류

- 파일시스템이 부트 디바이스의 데이터를 인식하지 못했을 때

- 새로운 디스크를 추가하거나 파티션설정을 다시할경우나 새로운 디스크 컨트롤러를 업그레이드할 때 boot.ini 부트메니져정보가 변경될 경우 생긴다.
이럴 경우 boot.ini 파일을 편집하거나 부트 메니져 파라미터를 조절한다.

- 주기적으로 드라이버와 펌웨어를 업데이트 해야 합니다.


Error code Stop 0x0000007F or UNEXPECTED_KERNEL_MODE_TRAP 

ː내 용

1. 일반적으로 운영체제상의 커널모드(프로그램실행에 필요한 메모리관리,프로세서관리 데이터 입출력, 하드웨어제어를 수행)하는데 발생하는 에러이다.

2. 과다한 CPU 오버크럭킹으로 인한 열발생 때문에 오류가 발생한다. 

ː문제해결 방법 - 모든 클럭과 버스 스피드설정을 처음 설정값으로 변경시켜준다.

- 크랙된 프로 그램을 쓰는 경우 발생할수 있다.

- 호환성이 부족한 응용프로그램을 인스톨할 경우 발생하는에러이다.

- 업데이트를 통하여 해결하거나 패치를 통하여 해결한다.


Error code Stop 0x0000009F or DRIVER_POWER_STATE_FAILURE 

ː내 용

이 에러는 갑작스런 전력변동에 의해 발생하는 에러이다. 

ː문제해결 방법

- shutting down stanby mode hibernate 모드설정을 체크한다. 


Error code Stop 0x000000D1 or DRIVER_IRQL_NOT_LESS_OR_EQUAL 
ː내 용 

ː문제해결 방법

- 커널 인터럽트 요청레벨(IRQL)이 너무 높을때-메모리관리나 데이터입출력 및 하드웨어를 제어하는 신호값이 너무 높거나 운영체제가 메모리를 인식할수있는공간을 접근할수 없을때 나타나는 오류이다. 


Error code Stop 0x000000D8 or DRIVER_USED_EXCESSIVE_PTES 

ː내 용 

ː문제해결 방법

- 주로 PTEs(page table entries)-시스템의 입출력수행의 과도현상 PTEs(메모리공간에대한정보)가 부족하거나 파손되는경우에 발생할수 있는 에러이다.

- 응용프로그램들이 요구하거나 이용할 수 있는 충분한 크기의 메모리 블록이 부족한경우에 발생하는 에러이다.

- 응용프로그램의 드라이버를 업데이트해본다.

- 윈도우 xp 는 PTEs의 수를 늘리기위해 registry entry,system pages를 제공한다.

PTEs를 늘리기 위한 방법

실행-열기-regedit 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management에서
pagefoolsize의 값:0
systempages의 값 128M 메모리값 :40000
256M 메모리값 :110000 으로 변경 


Error code Stop 0x000000EA or THREAD_STUCK_IN_DEVICE_DRIVER 

ː내 용

일반적으로 주로 비디오 어댑터가 문제를 발생할 때 나타나는 오류이다. 

ː문제해결 방법

- 특히 드라이버를 (비디오 드라이버)를 새로 설치한후에 나타나는 현상으로 드라이버가 잘못잡히거나 못잡을때 나타나는 에러이다.

- 최신 드라이버로 업데이트 한다. 


Error code Stop 0x000000F2 or HARDWARE_INTERRUPT_STORM 

ː내 용

인터럽트 충돌에 의해 발생하는 메시지이다. 

ː문제해결 방법

- 같은 IRQ를 쓰는 장치를 지우고 장치를 다시 잡는다.

'생활' 카테고리의 다른 글

맥북 사망...  (0) 2012.05.31
[링크] 윈도우의 역사  (0) 2012.03.10
whylinuxisbetter  (0) 2012.03.10
역전재판 총정리,,  (0) 2012.03.10
[TIP!]windows에서 linux의 심볼릭 링크기능 사용하기  (0) 2012.03.10

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

dll파일이 필요하다고 뜨면 여기에 쳐보세요.

거의 다 나옴,,,

받아서 압축풀고 readme 는 상콤히 지워주고

system32에 넣으면 됨.

주요 클래스

class CURL
{
private:
 // The default browser
 CString m_strBrowser;
public:
 void Open(LPCTSTR lpszURL, bool bNewWindow = true)
 {
  if (bNewWindow)
   ::ShellExecute(NULL, NULL, GetBrowser(), lpszURL, NULL, SW_SHOWNORMAL);
  else
   ::ShellExecute(NULL, NULL, lpszURL, NULL, NULL, SW_SHOWNORMAL);
 }

 LPCTSTR GetBrowser(void)
 {
  // Do we have the default browser yet?
  if (m_strBrowser.IsEmpty())
  {
   // Get the default browser from HKCR\http\shell\open\command
   HKEY hKey = NULL;
   // Open the registry
   if (::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("http\\shell\\open\\command"), 0,
     KEY_READ, &hKey) == ERROR_SUCCESS)
   {
    // Data size
    DWORD cbData = 0;
    // Get the default value
    if (::RegQueryValueEx(hKey, NULL, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS && cbData > 0)
    {
     // Allocate a suitable buffer
     TCHAR* psz = new TCHAR [cbData];
     // Success?
     if (psz != NULL)
     {
      if (::RegQueryValueEx(hKey, NULL, NULL,
       NULL, (LPBYTE)psz, &cbData) ==
       ERROR_SUCCESS)
      {
       // Success!
       m_strBrowser = psz;
      }
      delete [] psz;
     }
    }
    ::RegCloseKey(hKey);
   }
   // Do we have the browser?
   if (m_strBrowser.GetLength() > 0)
   {
    // Strip the full path from the string
    int nStart = m_strBrowser.Find('"');
    int nEnd = m_strBrowser.ReverseFind('"');
    // Do we have either quote?
    // If so, then the path contains spaces
    if (nStart >= 0 && nEnd >= 0)
    {
     // Are they the same?
     if (nStart != nEnd)
     {
      // Get the full path
      m_strBrowser = m_strBrowser.Mid(nStart + 1, nEnd - nStart - 1);
     }
    }
    else
    {
     // We may have a pathname with spaces but
     // no quotes (Netscape), e.g.:
     //   C:\PROGRAM FILES\NETSCAPE\COMMUNICATOR\PROGRAM\NETSCAPE.EXE -h "%1"
     // Look for the last backslash
     int nIndex = m_strBrowser.ReverseFind('\\');
     // Success?
     if (nIndex > 0)
     {
      // Look for the next space after the final
      // backslash
      int nSpace = m_strBrowser.Find(' ', nIndex);
      // Do we have a space?
      if (nSpace > 0)
       m_strBrowser = m_strBrowser.Left(nSpace);
     }
    }
   }
  }
  // Done
  return m_strBrowser;
 }
};
whylinuxisbetter 생활 2012. 3. 10. 04:45

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

http://www.whylinuxisbetter.net/index_kor.php?lang=kor

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

http://codepad.org/fizzbuzz

 

각 코드 아래의 view를 누르면 실재 실행된 결과도 나와있음

 

http://codepad.org/

 

여기는 소스파일 1개짜리 프로그램을 임시로 작동해볼수 있는사이트,

 

P.S. perl의 위력을 보시라,, C++로 복잡하게 짠것을 단 3줄,

'생활 > 프로그래밍' 카테고리의 다른 글

프로그래머 10계명  (0) 2012.03.10
dll 다운로더 필요할진 모르겠지만,,,  (0) 2012.03.10
define 을 이용해서 getter, setter만들기  (0) 2012.03.10
각종 별찍기 문제 (위키펌)  (0) 2009.11.30
AType 작성중  (1) 2009.11.11

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

'생활 > 리버스(?)' 카테고리의 다른 글

음악재생기 코드  (0) 2014.06.03
SSD사용 요령  (0) 2012.03.10
아이폰스펙에 대한 진실  (0) 2012.03.10
소켓 프로그래밍 공부중  (0) 2012.03.10
Un·touch·a·ble (5)  (0) 2011.02.10
역전재판 총정리,, 생활 2012. 3. 10. 04:06

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

옛날에 동아리 클럽에 썼던 글입니다. 어디 블로그에서 긁어다 올렸었는데,,,

============================================================================================

SSD 사용자 분들이 처음 구입후 뭘해야 될지 몰라서 질문들이 믾기에 SSD 관리요령 정리해 보았습니다..

보시고 차근차근 설정해 논뒤 고스트 같은 걸로 백업 해놓으시면 편리할거 같군요..

현재 까지 알려진 SSD 최적 사용을 위한 지침서 가이드 라고 보시면 되겠습니다..

 

 


1. Disable prefetch

 
일반하드디스크라면 이걸 꺼서는 안됩니다. 이걸 꺼서 지렁이 몇마리가 덜 지나간다고 해도 전체적인 성능은 떨어지게 됩니다. 일반하드디스크라면 그냥 놔두는 것이 좋습니다.


그런데 SSD의 경우에는 별 이득이 없습니다. 기능 자체가 프로그램 로딩 속도를 빠르게 해 주는 것인데 그 이득이 SSD의 경우에는 굉장히 작습니다. 반면에 좋지 않은 영향을 끼치는 면은 많습니다. 그 기능을 위해 상당한 양의 writing을 해야 하기 때문입니다.

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher


(DWORD값)
값 : 0 - 사용안함
1 - Application-Launch Prefetching만 사용
2 - Boot Prefetching만 사용
3 - Both(기본값)

 

위와 같이 레지스트리 에서 수정해 주시면 됨

 

 
2.Last Access Time Stamps


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Filesystem
Modify or Make a new DWORD Value
Name = NtfsDisableLastAccessUpdate Type = DWORD Value, change value to 1

 

파일을 전혀 고치지 않고 읽기만 해도 디스크는 쓰기 작업을 합니다. 그게 좀 의아하실텐데요. 디스크에 기록하는 것은 파일 뿐 아니라 meta data라는 것도 있거든요. 파일에는 여러가지 속성이 있습니다. 읽기 전용이냐 시스템 파일이냐 히든파일이냐 등등의 전통적인 속성도 있고요. 이 파일을 최종적으로 고친 시간은 언제이냐, 최종적으로 읽은 시간은 언제이냐 등등도 있습니다.


이중에서 파일을 최종적으로 고친 시간이 언제이냐는 것은 그래도 꽤 중요한 정보입니다. 반면에 최종적으로 읽은 시간이 언제이냐 하는 정보는 그리 활용도가 높다고는 말할 수 없습니다. 조각모음 프로그램 중에서 자주 읽는 데이터를 디스크의 바깥쪽 트랙에 배치해주는 것들도 있습니다만 SSD에서는 전혀 쓸데없는 기능이지요. 괜히 최종적으로 읽은 시간 기록한다고 버벅거리기만 할 뿐입니다.


일반하드디스크를 사용하는 분들도 이 기능을 끄고 사용하는 분들이 많지요.


이 기능을 끄려면 명령 프럼프트에서


C:\> FSUTIL behavior set disablelastaccess 1


요 명령어 한번만 해 주면 됩니다.


원상회복시키려면


C:\> FSUTIL behavior set disablelastaccess 0

 

  

3.Enable disk cache

윈도우 기본 디스크 쓰기 캐시 또는 스토리지 매니저 쓰기캐시 활성

보통 윈도우 기본 디스크쓰기 캐시는 XP 이상이면 설정되어 있으며 레이드 사용자 들은 IMSM 상에서 쓰기캐시 활성화 해주셔야 함.

 

 
4. Disable LPMState

 

인텔 콘트롤러를 사용하는 경우 요즘에는 종전의 절전기능보다 훨씬 정교한 절전기능을 사용할 수 있습니다. 그런데 디스크가 그 기능을 지원하지 않으면 쓸 데 없지요. 쓸데 없을 뿐 아니라 멍청한 디스크는 당황하게 됩니다.


시스템의 디폴트 상태가 이 기능을 사용하지 않도록 되어 있다면 이미 꺼져 있는 것인데요. 사용하도록 되어 있는 상태라면 이 기능을 꺼주시면 됩니다.


디폴트 상태가 어떤 상태이냐 하는 것은 굉장히 복잡합니다. OS가 Windows XP이냐, Vista이냐, Vista라도 SP1 이전이냐 이후냐에 따라 달라지기도 하고요. 시스템이 데스크탑이냐 노트북이냐에 따라 달라지기도 합니다. 같은 인텔 콘트롤러라고 하더라도 ICH7이냐 8이냐 9 이후이냐에 따라 달라지기도 합니다. 여러가지 조합이 있지만 결국은 두가지입니다. 사용하느냐 마느냐.


끄기 위해서는


시작 -> 실행 -> regedit


하여 레지스트리 에디터로 들어가셔서


[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\iaStor\Parameters]

 

요것을 찾습니다.(찾아서 그런 항목이 없다면 그냥 된 것입니다. 일부러 만들어 주실 필요 없습니다.)


찾으신 후 값을 바꿔주시는 것이 아니라 key의 이름을 바꿔주시면 됩니다. 오른쪽 마우스 버튼을 누르고 '이름 바꾸기'를 선택하여


Parameters -> Parameters.Bad


와 같이 다른 이름으로 바꿔주시면 됩니다.
원래 그냥 삭제해 버리면 되는 것인데, 혹시나 도로 원상회복하려는 분들이 있을지 모르니 이름을 바꿔주는 것입니다.(인텔에서는 그냥 날려버리라고 했습니다.)

 

 

5. Cluster size change to 32-64KB

 

NTFS 클러스터 사이즈를 32KB 혹은 64KB 로 바꿔주거나 FAT32 로 포멧을 하고 사용한다 다만 64KB 로 바꿔주면 용량 손실이 상당하다.[FAT32 시스템 은 단일파일 4GB 이상 생성하지 못하니 주의]

 

6.Disable Indexing Service, System restore

 

 

윈도우 인덱싱 서비스 와 시스탬복원 기능 OFF 인덱싱 서비스 는 서비스항목 에서 끌수 있다.

 

 

7. Disable Paging file and DEP

 

1) HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\MemoryManagement

2) Add REG_DWORD DisablePagingExecutive 1

3) Boot.ini: /noexecute=AlwaysOff

 

 

윈도우 페이징 파일을 사용안함 으로 설정해 주고 위 레지경로에 DWORD 값으로 키를 생성하고 키 값에 DisablePagingExecutive 로 해주고 속성을 1로 해주면 적용 되며

Boot.ini 에 /noexecute=AlwaysOff 구문을 추가해 준다.

 

 

8.Use Ramdisk

 

램디스크를 활용 하거나 다른 디스크에 운영체제 임시파일 과 익스플로어 임시폴더 를 램디스크 또는 다른 디스크에 설정해 준다 [이것은 잦은 쓰기를 에방 함으로써 수명연장 과 동시에 SSD 의 퍼포먼스 저하를 에방해 준다]

 

 

9.Disable Defragmentation (Vista only)

 

 

디스크 조각모음 사용중지 비스타 의 경우에만 해당되며 비스타 는 기본적으로 조각모음 이 자동으로 수행되도록 되어 있으므로 자동조각모음 기능을 꺼준다..

 

10.Disable window search, readyboost (Vista only)

 

 

비스타 에서만 해당되는 사항이며 레디부스트 와 윈도우써치 기능을 OFF 해준다..

 

 

11.SSD 초기화

 

SSD 초기화 는 트림과 틀려서 SSD 모든 셀들을 초기화 하는 작업이라 수명에 영향을 끼칠수 있으며 보통 트림을 자주 해주는 편으로 하고 1년에 한번이나 6개월에 한번 초기화 하는것이 장기적 으로 볼때 적당 하다. HDDERASE 초기화 를 밥먹듯이 하는것은 지극히 말리고 싶다..

 

TRIM 기능 설명

 

TRIM 은 더티상태의 데이터를 기록할때 더티상태의 셀들을 기피하여 클린상태의 셀들만

사용하게 하거나, 필요없는 데이터가 존재하는 더티상태의 셀을 초기화하여 클린상태로

만들어주거나 더티상태의 셀과 클린상태의 셀을 구분하여 클린상태의 셀 영역만 사용하게 하는 SSD 속도 저하 방지 기능이라고 할 수 있다.

 

HDDERASE 초기화 시기는 TRIM 을 해도 속도가 현격히 안나오거나 할때 아주 가끔 한번씩 해주는걸 권장함..

 

 

★ 윈도우7 에서 트림 작동 확인방법 ★

 

 

관리자 권한으로 도스 명령창을 실행한 후 다음 명령을 입력한다.

fsutil behavior query DisableDeleteNotify

결과값이 아래와 같이 나오면 SSD Trim이 적용된것이다.

DisableDeleteNotify = 0

적용이 되지 않았다면 아래와 같이 1이 값이 나온다.

DisableDeleteNotify = 1

이때 다음 명령으로 Trim을 활성활 할 수 있다.

fsutil behavior set DisableDeleteNotify 0

  

 

 

PS: 위 레지스트리 설정 왠만한 건 클릭투트윅 이라는 프로그램 상에서 간편하게 설정 가능 합니다..

'생활 > 리버스(?)' 카테고리의 다른 글

음악재생기 코드  (0) 2014.06.03
일본 만담 ㅋㅋ  (0) 2012.03.10
아이폰스펙에 대한 진실  (0) 2012.03.10
소켓 프로그래밍 공부중  (0) 2012.03.10
Un·touch·a·ble (5)  (0) 2011.02.10

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

옴니아2 구입전 반드시 알아야 할 진실~!!!
2009/12/03 09:51

<사진: 삼성 옴니아2 북미 버전>

여러분은 지금 삼성의 마케팅에 속고 있습니다.
옴니아2의 구입은 제 글을 읽고 나신후에 현명하게 판단하셨으면 좋겠습니다.
연속적으로 삼성의 옴니아2에 대해서 글을 쓰려고 하니 삼성에 대한 미안함까지 들려고 한다.
내 안티삼성이 되려고 작정한 사람은 아니지만 삼성이 더이상 언론을 통하여 소비자들을
속이려고 하는 일을 멈출때까지는 이렇게라도 할 수 밖에...
진실을 속인다고 한다면 알릴려고 하는게 당연한것 아닌가?
지금 한국 모바일업계 뉴스는 온통 아이폰 출시로 가득하다.
거기에 삼성이 언론에 개입하여 나타난 아이폰 죽이기 (일명 '옴니아2 일병 구하기')와
아이폰과 비교하여 뛰어난 하드웨어를 지니고 있다는 마케팅을 하기에 급급하다.
그리고 가장 먼저 비교하는 대상이 바로 CPU에 관한것이다.
대부분의 사람들은 광고나 기사에서 처럼 옴니아2가 아이폰에 비하여
더 성능 좋은 CPU를 장착하고 나오는줄 안다. (나도 그랬지만... ^^)
일반적으로 CPU를 비교할때 옴니아2는 800MHz, 그리고 아이폰은 600MHz라는
단순 클럭수만을 비교하여 옴니아2에 손을 들어준다.
하지만 조금만 더 깊이 들어가면 이 사실은 진실이 아님을 쉽게 알 수 있다.
 
거짓이 아닌 진짜 CPU 비교
옴니아2
ARM11 아키텍쳐에 기반을 둔 S3C6410 CPU
미니멈 클럭: 533MHz
맥시멈 클럭: 800MHz
L1 캐쉬: 16KB

아이폰 3GS
Cortex-A8 아키텍쳐에 기반을 둔 S5PC100
미니넘 클럭: 600MHz
맥시멈 클럭: 833MHz
L1 캐쉬: 32KB
L2 캐쉬: 256KB

삼성이 옴니아 2가 강조하는 800MHz CPU는 맥시멈 클럭수이다.
단순 클럭수로 CPU 성능을 비교하는 자체도 이상하지만 맥시멈 클럭수만 자랑하는 삼성도 이상하다.
아이폰은 맥시멈 800MHz이상의 클럭수를 낼 수 있음에도 배터리 효율과 안정성을 위해
자체적으로 최소 클럭수에 맞춰놓은것 뿐이다.
또한 옴니아2는 ARM11 아키텍쳐를 사용하는데 이는 아이폰 3GS에서 사용하는 Cortex-A8의 이전 버전으로 코텍스에 비해 ARM11 성능은 현저히 떨어진다.

일반적으로 Cortex-A8과 ARM11의 클럭수만을 비교한다고 하면 Cortex-A8에 1.4정도를 곱한 클럭수가 ARM11의 클럭수와 비슷하다고 말하고 있다.
아크로팬 싸이트의 글을 보면 1.4배 그 이상의 차이를 보이는게 ARM11과 Cortex-A8의 차이이다.

전 세대인 ARMv6 기반 ARM1176 프로세서와의 성능 비교에서 Cortex-A8은 모든 면에서 성능 향상이 있다. 특히 EEMBC/컨슈머 영역에서 큰 성능 향상이 있으며, 상대 성능은 2.7배 이상이다. 기본 성능 자체도 약 1.6배 이상이며, 이는 Cortex-A8에 채용된 NEON 기술을 사용하지 않은 결과이므로 이를 사용해 최적화할 경우 차이는 더 크게 벌어질 것으로 보인다.

모바일 시장의 숨은 강자 Cortext-A8
아키텍쳐가 다른 두 CPU의 클럭수를 비교하는것은
인텔 팬티엄4의 클럭수와 인텔 코어 2 듀오의 클럭수를 비교하는것과 마찬가지이다.
또한 옴니아2의 CPU에는 아이폰의 반밖에 되질 않는 L1 캐쉬가 있으며 L2 캐쉬는 존재조차 하지 않는다.
아이폰은 스마트폰의 최적화를 위하여 맥시멈 클럭을 제한하고 있고
옴니아2는 어떻게 해서든 아이폰보다 낫다는것을 알리기 위해맥시멈 클럭수만을 강조하고 있다.
----------- Updated ---------------------------------------------------------------------
아래 댓글을 쓰신 분중에 ARM11과 Cortex-A8의 캐쉬부분이 잘못되었다고 쓰신분이 있어
다시 한번 말씀 드립니다.
아이폰 3G (2세대)는 옴니아2와 같은 ARM11기반의 CPU를 사용했구요.
아이폰 3G에서는 Cortex-A8 기반의 CPU를 사용했습니다.
어떤분께서 ARM11기반의 CPU의 L1 캐쉬가 Cortex-A8의 캐쉬보다 높다고 말씀하셨는데요.
아래 아이폰3G와 3GS CPU 비교표를 보시면 더 확실할겁니다.
옴니아2는 2세대 아이폰과 같은 ARM11 계열의 CPU입니다.
여기서 Issue Width와 Pipeline Depth에 대한 전문가님들의 설명을 들으면 두 CPU의 차이를 좀 더 확실히 알 수 있을까요? ^^
------------------------------------------------------------------------------------------

CPU 뿐만이 아니다
옴니아2에는 숨어있는 진실들이 더 있다.

옴니아2는 16m 칼라를 지원한다고 쓰여있지만 옴니아2에서 사용하는 윈도6.1은 65k 밖에 지원이 되질 않는다. 윈도6.5에서는 지원된다고 하지만 아직까지 정확한 정보는... (아시는 분을 더 상세하게 알려 주세요.)
그렇게 때문에 화질 좋은 스크린을 사용하고서도 제구실을 못하고 있는것이다.
------------- Updated ------------------------------------------------
옴니아2와 모토로라의 드로이드는 16:9의 3.7인치 와이드 스크린을 장착했다.
일반적인 3.5인치의 스크린이 아니라 16:9 비율의 와이드 스크린을 장착했지만 해상도는 800x480이다.
이 부분은 같은 스크린 사이즈를 지닌 드로이드와 다르다. 드로이드는 854x480의 해상도를 지니고 있다. 54픽셀정도가 무슨 차이가 나느냐 하겠지만 드로이드의 854x480은 정확히 16:9의 비율을 나타낸다. 다시 말하면 스크린 사이즈와 해상도가 정확히 16:9 비율을 지원한다는 뜻이다.
옴니아의 스크린 사이즈는 가로 3.22인치 세로 1.81인치로 16:9 비율이지만 해상도는 16:9가 아닌 5:3 비율을 지원하고 있는것이다. (아이폰은 크기와 해상도 모두 3;2 비율을 지원한다.)
스크린 사이즈 비율은 16:9, 해상도의 비율은 5:3(15:9)
-------------------------------------------------------------------------

이뿐만이 아니다..
옴니아2는 아이폰보다 헐씬 높은 해상도(800X480)를 지녔다고 자랑하지만
윈도우 모바일에서 나오는 많다고 하는 예전 애플리케이션들이 저해상도만을 지원하고 있기 때문에
고해상도가 최적화된 앱들을 그리 많지 않다는 단점도 있다.

옴니아2는 아이폰 3GS의 정전식 터치 스크린이 아닌 감압식 터치 스크린을 사용하고 있다.
이게 더 정교한 터치가 가능하다며 장점으로 이야기 하고 있지만
현재 터치 스크린의 추세는 감압식이 아닌 정전식이다.
(TV 시장에서도 플라즈마가 아닌 LCD가 대세이듯...)
정전식에서는 멀티터치가 가능하지만 감압식은 그렇지 못하다.
정교한 터치가 장점이라고 하지만 손가락을 사용했을때는 반응속도나 정교함이 정전식보다 더 떨어진다.
정전식은 손가락을 터치 하지 않는한 오작동을 일으킬 확률이 없지만
감압식은 손가락이 아니더라도 스크린에 압력만 가해지면 작동을 하기 때문에
가방안에서든 주머니에서든 오작동을 일으킬 수 있다.
감압식을 사용하면 스타일러스펜이 악세서리로 따라 오는데
그냥 이쁜 악세서리라고 생각할 수 있지만 꼭 가지고 다녀야 하는 귀찮음도 만만치 않을것이다.
또한 스타일러스펜을 분실할 염려도 생각해야 하지 않을까?
----------------------- Updated (12/03/09) ------------------------------------------------
옴니아2는 감압식 터치 스크린을 사용하기 떄문에 아이폰과 같은 강화유리를 사용할 수 없다.
강화유리를 사용하는 아이폰이 스크래치에 강하고 파손의 염려가 덜하다.
-------------------------------------------------------------------------------

감압식과 정전식의 차이
1. 감압식
살 짝 떨어져 있는 2개의 얇은 막이 눌려 서로 닿은 점의 좌표를 X축과 Y축을 나타내는 두 저항값의 변화로 알아내는 방식이다. 물리적으로 동작하는 것인만큼 내구성 문제가 있고, 막이 2개에 중간에 공기층(혹은 기름층)까지 있다보니 원래의 화면 밝기보다 많이 어두워진다. 무엇보다 저항값 2개만 사용하므로 원칙적으로 멀티터치란 있을 수 없고(교묘하게 dual touch를 구현한 사례가 있기는 하다), 어딘가의 부품에 문제가 생기면 저항값이 어그러져 다시 calibration (주로 화면 네 귀퉁이를 찍어서) 해야 하는 경우가 생긴다.하지만, 이 방식은 손가락이 아닌 다른 물건으로도 어쨋든 화면에 압력을 가하면 되기에 거친 사용환경에 적합한 방식이고 값도 싸므로 버리기 힘든 방식이다. 장갑을 끼던 플라스틱 막대기("stylus")를 쓰던 사용할 수 있다는 건 어떤 사용상황이든 큰 장점이 된다.

2. 정전기식
거의 안 보이는 전선들을 가로와 세로로 (서로 다른 층에) 깔아놓고 있으면 항상 정전기를 내뿜고 있는 인간의 몸이 닿았을 때 그 전기의 흐름을 감지할 수 있다. 이 경우엔 정확히 어떤 좌표에 전기가 흐르는 지를 알 수 있기 때문에 멀티터치가 가능하지만, 그것보다 그냥 감압식처럼 X, Y 좌표로 받는 게 더 싸기 때문에 그동안은 그냥 일반적인 방식으로 사용되어 왔다. 인간의 몸이나, 저항이 약한 도체로 만든 Stylus 펜은 인식될 수 있다.
하지만 역시 손가락으로만 쓸 수 있다는 건 대부분 약점으로 작용하고, 오동작을 막기 위해서 손가락이 닿았다고 생각되는 정전용량의 범위를 정해놓았기 때문에 특수한(?) 상황 - 이를테면 손이 유난히 건조한 날이라든가, 손이 젖어있다거나, 물방울 같은 것이 화면에 떨어져 있다든가 하는 - 에서는 인식이 잘 되지 않을 수 있다. 무엇보다 멀티터치를 지원하려면 좀더 여러 신호를 동시에 처리할 수 있는 비싼 칩을 써야 한다. Apple iPhone과 iPod Touch가 바로 이 방식을 사용했다.

터치 스크린에 관한 자세한 내용은 아래 포스팅을 참조하세요.
"Touch or No Touch: Next User Interface" -> 포스팅은 한글입니다. ^^


한가지 더 추가~!! (업데이트)
인터넷에서 대부분 비교하는 아이폰과 옴니아2의 스펙들은 자세하게 비교한것이 없기 때문에 일반적으로 옴니아2의 우수함에 손을 들어주는것 같다.
하지만 아는분들은 알지만 아이폰 스펙 비교표에 중요한 부분이 빠져 있는데
그게 바로 OpenGL 2.0을 지원하는 3D 가속기 칩이 따로 들어 있다는 부분과
2D화면 가속을 위한 커스텀칩 또한 따로 들어 있다는것이다.
PC 분야에서는 오래전부터 그래픽 가속을 위한 그래픽 카드가 따로 존재했지만
모바일 기기분야에서는 가격, 배터리, 부티등의 이유로 CPU가 그래픽 처리까지 도맡해 해왔다.
그렇기 때문에 데이터처림와 그래픽 처리를 동시에 해야 하는 스마트폰의 성능은 현저히 떨어질 수 밖에 없다. 이러한 이유가 옴니아의 CPU가 800MHz라고 할지라도 반응속도와 움직임이 느려지게 보인다. (CPU 하나로 2D, 3D 엔진을 한번에 다 돌려야 하기 때문)
그래픽을 위한 3D 가속칩(PowerVR SGX)과 2D의 일반 화면을 가속시켜주는 커스텀칩으로 인하여
아이폰의 성능은 다른 스마프폰들과 비교할 수 없을정도로 빠르게 느껴지는것이다.
이부분도 언론이나 삼성에서는 언급을 하지 않는다.

"The iPhone Becomes a Gaming Platform: Enter the PowerVR SGX"


또한 그래픽 좋은 3D 게임을 구현하기 위해서는 OpenGL 2.0을 지원해 주어야 하는데
윈도우 모바일에서는 아직까지 정식적으로 OpenGL 2.0을 지원해 주고 있지 못하다.

더 상세한 아이폰 하드웨어 스펙에 대한 내용을 보시려면 아래의 글을 참조해 주세요.

---------------------------- Updated (12/03/09)------------------------------
아이폰에는 디지털 콤파스가 내장되어 이 콤파스를 이용한 각종 앱들을 사용할 수 있는데
옴니아2에는 디지털 콤파스가 내장되어 있다는 스펙을 본적이 없다.
있는데 스펙에 넣지 않은건지 모르겠지만...
-------------------------------------------------------------------


결정적으로 옴니아2를 구입하기 전에 염려해야 할 사항은 바로
무겁고 사용하기 불편한 윈도우 모바일로 나온다는 점이고 그위에 덮어쓴 삼성의 터치위즈 UI는 사용자가 사용하기에 편하게 만들었을지는 몰라도 반응속도가 낮아진다는 지적이 많다.

지금 이야기한 부분들은 솔직히 아무것도 아닐 수 있다.
스마트폰의 가장 중요한것은 하드웨어보다도 소프트웨어쪽이기 때문이다.
아무리 성능 좋은 PC를 장만했다고 하더라도 윈도우 3.1를 설치했으면
하드웨어가 좋은들 무슨 소용이 있을까?
아이폰은 아주뛰어는 스펙을 지니고 있지는 않지만 하드웨어아 최적화된 아이폰 OS가 있으며
이 아이폰 OS는 2년이 지나는 동안 3.1버전까지 업그래이드 되어가면서 끊임없이 진화되었다.
그리고 계속해서 진화되고 있고... ^^

삼성은 아직 갈길이 멀다.
지금까지는 국내에서 스마트폰 시장을 거의 독식하다시피 해왔지만
아이폰을 통하여 위피정책도 바뀌고, WiFi를 빼는 스펙다운도 할 수 없고,
또한 수많은 외산폰들이 줄줄이 출시되어질텐데 어떻게 대처할지 궁금해 진다.


------------------ Updated (12/03/09) ---------------------------
12월 2일부터 옴니아2가 미국에서 판매되기 시작했다.
미국에서 가장 유명한 IT 블로그 싸이트가 있다면 인가젯과 기즈모도를 뽑을 수 있다.
이 두 싸이트에서 옴니아2에 대한 리뷰를 썼다. (동영상도 있고)
공정함을 잃은 한국의 언론과 IT 전문가들 보다 이들의 평가가 오히려 더 공정할 수 있지 않을까?
삼성의 터치위즈 UI 방식에 대한 불만이 많은듯 하다.
사용성도 그렇고 동작도 느리다고 하는데 이를 보안할 수 있는 방법 중 하나가
SPB Mobile Shell이라는 윈도우즈 모바일 전용 UI를 구입해서 설치하는것. ^^
동영사을 봤는데 꽤 괜찮은듯.. ^^
<script type=text/javascript>//")//]]></script>
-------------------------------------------------------------------


몇몇 분들이 제 글에 대해서 편파적이나 오해의 소지가 있다고 말씀하셔서
이렇게 몇자 더 적습니다.
제가 글 쓴 의도는 국내 언론들이 너무나 편파적으로 옴니아2의 장점만을 이야기 하고 아이폰에 대해서는 단점만 부각시키기 때문에 스마트폰을 구입하는 소비자 입장에서 편파적인 기사를 통하여 잘못된 선택을 할 수 도 있다고 생각했기에 저는 오히려 언론의 반대 입장에서 글을 썼습니다.
아이폰의 장점을 더 부각 시킨거죠.
세상에 완벽한 휴대 전화기는 없습니다.
모두가 다 장점과 단점을 가지고 있구요.
아이폰만의 장점이 있는가 하면 단점도 많습니다.
옴니아2만의 장점이 있는가 하면 단점도 많습니다.
편파적인 언론사들의 글에 의하여 선택하시지 마시고 많이 돌아다시면서
실질적으로 사용하시는 분들의 이야기를 들으시고 선택하시는게 현명하겠죠.
자신이 필요한 기능들이 들어 있는 제품을 구입하는게 가장 현명한 선택이겠죠.
옴니아2를 선택하시던 아이폰을 선택하시던 그외 스마트폰들을 선택하시던
여러방면에서 신중히 생각하시고 선택하시라고 언론과 다른 관점에서 글을 개제한 것입니다.
제가 글을 쓴 의도를 조금더 명확하게 이해하신 후에 읽으셨으면 좋겠습니다.
서로가 보이지는 않지만 서로에게 감정적인 상처를 주는 댓글은 자제해 주셨으면 합니다.
이 글 말고 이전글 (옴니아넌 비교대상이 아니야)에 링크되어 있는 언론들이 쓴 기사들을 읽고 난뒤에 제글을 읽으시면 제 마음을 조금 더 이해할 수 있으리라 봅니다.
-------------------------------------------------------------------------

2009년 11월 28일
삼성의 심기를 잘못 건드런건지
언론을 잘못 건드린건지
아니면 옴니아 동호회 회원님들을 잘못 건드린건지..
그것도 아니면 우연의 일치인지 모르겠지만
이 글을 쓰고 나서 제 블로그가 싸이트 공격을 받았습니다.
그리고 3일동안 다운되었었구요.
오늘 들어와보니 겨우 복구가 되었네요.
이런식의 보복성 공격은 도대체 어느분이 하신지....
제 블로그는 광고 하나 없는 순수 블로그를 지향하고 있는데 말이죠.
단지 미끼성 글이였다면 광고를 통해서 수익을 얻으려고 했을겁니다.
저는 계속해서 순수 블로거의 길을 가고픈 자 중 한 사람입니다.
당신들의 심기를 건드렸다면....
그거 무식한 한 사람이 공정하지 못한 언론에 대해 한마디 썼다고 이해해 주셨으면 좋겠네요.
참으로 무서운 세상입니다.
보이지 않기에 더 악한 행동을 할 수 있는 곳이군요. ㅜ.ㅜ


관련글 읽기

'생활 > 리버스(?)' 카테고리의 다른 글

일본 만담 ㅋㅋ  (0) 2012.03.10
SSD사용 요령  (0) 2012.03.10
소켓 프로그래밍 공부중  (0) 2012.03.10
Un·touch·a·ble (5)  (0) 2011.02.10
Un·touch·a·ble(4)  (0) 2011.02.10

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

1. 함수 원형

BOOL QueryInternet(const char *szAddress,UINT nPort,UINT nQuery)

2. 인자 설명
szAddress : 쿼리 요청을 보낼 주소
nPort : 포트번호
nQuery : 쿼리 횟수

3. 헤더 파일
  1. wininet.h (?)

4. 함수 코드
BOOL QueryInternet(const char *szAddress,UINT nPort,UINT nQuery)

{

/*

Return -1 : 포트번호입력오류

Return 2 : InternetOpen() 함수에러

Return 3 : InternetConnect() 함수에러

Return 4 : HttpOpenRequest() 함수에러

Return 0 : 정상

*/

 

 if(nPort<=0 || nPort>65535)

{

return -1;

}

 

HINTERNET hIOpen = InternetOpen("TestWeb",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);

if ( hIOpen == NULL )

return 2;

UINT i;

for(i=0;i<nQuery;i++)

{

HINTERNET hIConnect = InternetConnect(hIOpen,szAddress,nPort,NULL,NULL,INTERNET_SERVICE_HTTP, 0, 0);

if ( hIConnect == NULL )

{

InternetCloseHandle(hIOpen);

return 3;

}

// Request the file from the server.

 //LPCTSTR ppszAcceptTypes = "text/*" ;

HINTERNET hIReq = HttpOpenRequest(hIConnect,

NULL, // "Get"

NULL,

(LPCSTR)HTTP_VERSION,

NULL, //(LPCSTR )csUrlCon,

NULL,//&ppszAcceptTypes,

INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE,

0);

if ( hIReq == NULL){

InternetCloseHandle(hIConnect);

InternetCloseHandle(hIOpen);

return 4;

}

// Send the request.

HttpSendRequest(hIReq, NULL, 0, NULL, 0);

BYTE pBuffer[8192]={0,};

DWORD dwBytesRead;

InternetReadFile(hIReq,pBuffer,8192,&dwBytesRead);

// Close all of the Internet handles.

InternetCloseHandle(hIReq);

InternetCloseHandle(hIConnect);

}

InternetCloseHandle(hIOpen);

}

 

==========================================================================================================================

BSD용으로(리눅스&OSX) 변환 연습해봐야지,,,

'생활 > 소켓프로그래밍' 카테고리의 다른 글

소켓 프로그래밍의 기초(2)  (0) 2010.02.05
소켓 프로그래밍의 기초(1)  (0) 2010.02.05

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

우선 개념증명

서버프로그램을 먼저 켜고,

클라이언트 프로그램을 켜면 두 프로그램이 컨넥트됨.

원래 사용법은 커멘드 창에서

서버)

./server.exe <포트번호>

클라)

./client.exe <서버IP> <포트번호>

지만, 윈도 사용자를 위해 디펄트로 포트번호 89123, ip 127.0.0.1(로컬호스트:자기컴)으로 맞춰놨으니

켜면 실행.

서버에서 떠들면 클라가 그말을 받아서 떠들음.

이걸 응용해서

양방향 통신이면 1:1채팅,

양방향에다가 서버가 모든 말을 클라로 쏴주면 대화방.

서버가 문제를 모든 클라에 내고, 각각 답장을 파일에 저장하거나 채점하면 시험문제 서버.

 

이런식으로 발전시킬거임.

 

P.S> 윈도 사용자는 그냥 실행시키고 컴파일은 cygwin에서,,

리눅스는 걍 컴파일후 실행.

맥도 걍 컴파일 하면 될듯,,,

'생활 > 리버스(?)' 카테고리의 다른 글

SSD사용 요령  (0) 2012.03.10
아이폰스펙에 대한 진실  (0) 2012.03.10
Un·touch·a·ble (5)  (0) 2011.02.10
Un·touch·a·ble(4)  (0) 2011.02.10
Un·touch·a·ble(3)  (0) 2011.02.10

리눅스의 심볼릭 링크는 윈도우의 바로가기와는 다르게 파일명만 다르고 같은 위치의 데이터를 참조한다.

 

윈도우에서도 심볼릭 링크와 하드링크라는 기능이 있다.

 

심볼릭은 파일에 대한 링크이고

하드링크는 실제로 그곳의 데이터에 대한 링크이다.

 

예를들면 심볼릭의 경우 원본을 지우면 링크가 깨지지만 하드링크의 경우 원본이 삭제되어도,

그곳의 데이터를 참조하는 파일이 있기때문에 하드디스크에서 데이터가 지워지지 않는다. 그래서
하드링크된 파일을 불러올수 있다.

 

개념을 알았다면 실제로 작성해 보자.

 

WinXP

 

x:\TEST>fsutil hardlink create 링크이름 원본이름 (하드링크)

 

WinVista이상

 

x:\TEST>mklink /h 링크이름 원본이름 (하드링크)

x:\TEST>mklink /d 링크이름 원본이름 (디렉터리링크)

x:\TEST>mklink 링크이름 원본이름 (심볼릭링크)

'생활' 카테고리의 다른 글

whylinuxisbetter  (0) 2012.03.10
역전재판 총정리,,  (0) 2012.03.10
동아리 폐부  (0) 2012.03.10
크롬 확장 scribefire를 써보자  (1) 2012.02.23
Haven and Hearth 시작!  (1) 2011.02.09

'생활 > 서버놀이' 카테고리의 다른 글

서버 재설정!!  (0) 2012.05.31
해킨 삽질을 위한 가이드  (0) 2012.01.08
http 파일서버 프로그램  (0) 2009.11.20

getter setter 만들기 참 귀찮았는데 말이죠 

http://eslife.tistory.com/entry/define-%EB%A7%A4%ED%81%AC%EB%A1%9C-%ED%8C%81

 

위 출처의 define매크로를 이용하면 

// SIMPLE_FUNC_IMPL -> Get/Set 함수를자동으로만들어줍니다.

// 1. ret -> return type

// 2. fname -> Get/Set 다음에올함수명

// 3. var -> Get/Set 에대상이되는변수명

#define SIMPLE_FUNC_IMPL(ret, fname, var) \

           ret Get##fname() \

           { \

                     return var; \

           } \

           void Set##fname(ret tmp) \

           { \

                     var = tmp; \

           }

위와같이 하여

 

 

SIMPLE_FUNC_IMPL(bool, Test, m_bTest);

 

이렇게 했을때

 

bool GetTest()
{
return m_bTest;
}
void SetTest(bool tmp)
{
m_bTest = tmp;
}

각각을 만들수 있습니다.

동아리 폐부 생활 2012. 3. 10. 03:32

슬픈 이야기이지만 내가 속해있던 UNIST의 프로그래밍 동아리 UPC가 폐부되었다.

주력 멤버가 09학번(현재 4학년)들이라 다들 각자 바빠지고, 활동시간이 줄어든데다가,

마땅히 나서서 부장을 할 후배학생들이 없어 폐부를 결정하게되었다.

앞으로 클럽에 정보공유를 위해 써놓았던 뻘팁들을 옮겨놓아야 겠다

크롬 확장기능인 scribefire를 설치해보았다.

블로그에 글을 쓰려면 티스토리에 들어가서 로그인 하고 글쓰기가 귀찮아서 잘 안쓰고 있는데

원클릭으로 글쓰기 준비가 되니 참 편한것 같다.

근데,, 테그는 어디다 넣지? 싶었는데 왼쪽옆에 있네,,

사진도 티스토리를 통해 업로드 되는것 같다