'아직미분류'에 해당되는 글 32건

  1. 2012.01.16 부팅할 때 mac 주소 바꾸기
  2. 2012.01.14 문자열의 md5sum을 구하는 법
  3. 2011.12.30 colormake, colorgcc 1
  4. 2011.12.04 gpg 관련
  5. 2011.11.30 git
  6. 2011.07.21 awk 코드 모음 1
  7. 2011.07.21 perl -pi -e "..." file
  8. 2011.07.21 PDF 호환성 검사
  9. 2011.07.07 우리은행 오픈 뱅킹 사용기
  10. 2011.06.20 엑셀
  11. .
아직미분류2012. 1. 16. 22:58
/etc/conf.d/netif.eth1를 설정할 때 오해하기 쉬운 것이 있다. macaddr은 mac 주소를 바꾸는 것이 아니라, mac 주소에 따라 interface name을 바꾸는 것이다.

ifconfig eth1 hw ether "00:17:31:54:82:c6"로 mac을 변경할 수 있는데, 부팅 시 적용하려면 다음 주소를 참고하여 netif.tmpl을 뜯어 고쳐야 한다. (나는 조금 다르게 고쳤지만...)
http://forums.funtoo.org/viewtopic.php?id=769

혹은 crontab에 일정 시간마다 mac을 바꾸도록 하는 무식한 방법도 있다. 무식해 보이지만, 원격으로 작업을 하는데, 제대로 고쳐졌을지 확인하기 어렵다면 이렇게라도 해야된다.
Posted by asdfzxcv
아직미분류2012. 1. 14. 14:24
1. echo -n "string" | md5sum
-n 옵션을 안 적으면 newline character까지 계산되므로 원하지 않는 결과를 얻을 수도 있다.

2. C 프로그램 사용
불확실한 부분이 있는데, MD5_Update에서 length 제한이 없나?
컴파일 옵션: gcc md5.c -std=c99 -lssl -Wall -Wextra -Wconversion
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <unistd.h>
#include <openssl/md5.h>

void md5sum(char *str, unsigned char *c);
int md5compare(unsigned char *c, unsigned char *d);
int md5print(unsigned char *c);
int md5sprint(unsigned char *c, char *out);
int md5read(char *str, unsigned char *c);

int main(int argc, char *argv[])
{
	unsigned char orig[MD5_DIGEST_LENGTH];
	if (argc == 2) {
		if (md5read(argv[1], orig) != 0) {
			printf("usage: %s <md5sum string>\n", argv[0]);
			printf("error: wrong md5sum string.\n");
			exit(1);
		}
		// foo(orig);
	} else {
		printf("usage: %s <md5sum string>\n", argv[0]);
		exit(1);
	}
	return 0;
}

void md5sum(char *str, unsigned char *c)
{
	if (!str || !c)
		return;
	MD5_CTX ctx;
	size_t len = strlen(str);
	MD5_Init(&ctx);
	MD5_Update(&ctx, str, len);
	MD5_Final(c, &ctx);
}

int md5compare(unsigned char *c, unsigned char *d)
{
	if (!c || !d)
		return 1;
	for (size_t i = 0; i < MD5_DIGEST_LENGTH; ++i) {
		if (*(c++) != *(d++))
			return 1;
	}
	return 0;
}

// print md5 result to string
int md5print(unsigned char *c)
{
	if (!c)
		return 1;
	for (size_t i = 0; i < MD5_DIGEST_LENGTH; ++i)
		printf("%02x", c[i]);
	putchar('\n');
	return 0;
}

int md5sprint(unsigned char *c, char *out)
{
	if (!c || !out)
		return 1;
	for (size_t i = 0; i < MD5_DIGEST_LENGTH; ++i) {
		sprintf(out, "%02x", c[i]);
		out += 2;
	}
	*out = '\0';
	return 0;
}

// read md5 string and store
int md5read(char *str, unsigned char *c)
{
	if (!str || !c)
		return 1;
	if (strlen(str) != 2 * MD5_DIGEST_LENGTH)
		return 1;
	for (size_t i = 0; i <MD5_DIGEST_LENGTH; ++i) {
		unsigned int tmp;
		sscanf(str, "%02x", &tmp);
		str += 2;
#if 0
		if (tmp > UCHAR_MAX)
			return 1;
#endif
		*(c++) = (unsigned char) tmp;
	}
	return 0;
}
Posted by asdfzxcv
아직미분류2011. 12. 30. 00:22
colormake

다음 사이트에서 소스를 다운 받는다.
http://bre.klaki.net/programs/colormake/


color make는 perl script로 되어 있다. cmake라는 bash script도 같이 제공되는데, CMake의 cmake와 이름이 같아서 그냥 덮어쓰면 문제가 된다.

원래는
make $* 2>&1 | colormake.pl `stty size`
라고 되어 있는데, 이걸 실행하면 stty에서 에러가 나는 경우가 있다. 이 경우에는 SIZE=`stty size`처럼 중간 변수를 사용해야 한다. 아무튼 이렇게 size를 넘기면, 긴 라인의 중간을 잘라 먹어서 한 줄에 나오게 바꿔준다. 그러나 이것이 마음에 들지 않는 사람도 있을 것이다. 그렇다면 `stty size`를 지워버리면 된다.

추가적으로
| less -r -pError
를 붙여도 된다.

그리고 인터넷을 뒤지다가
exit ${PIPESTATUS[0]}
를 추가한 경우도 발견하였다.
이것은 make의 return 값을 그대로 유지하기 위해서 필요한 듯?

$*과 $@의 정확한 차이??

colorgcc

colorrmake와 colorgcc를 모두 써봤는데, 이런저런 이유로 colorgcc가 더 나은 것 같다.
(gcc 4.5에 맞추어 스크립트를 살짝 수정만 해줄 필요가 있긴 하다.)
Posted by asdfzxcv
아직미분류2011. 12. 4. 12:56
gpg는 여러가지 암호화를 지원하는데...

비대칭 암호화는 필요 없고, 단순한 symmetric 암호화가 필요한 경우가 있다.
이 경우 사용법은
gpg -c --cipher-algo <암호화 알고리즘> -o filename.gpg filename
처럼 간단하다. 그리고 압축하면서 동시에 암호화 하는 것도 가능하다.
http://superuser.com/questions/272879/how-to-use-password-protection-with-the-linux-tar-command

그러나 암호를 묻는 창이 gtk window로 뜨기 때문에 문제가 되는 경우가 있다.
이 경우 ~/.gnupg/gpg-agent.conf를 고치면 된다.
pinentry-program /usr/bin/pinentry-qt4
no-grab
default-cache-ttl 600
/usr/bin/pinentry-qt4도 안되면 /usr/bin/pinentry-curses를 써보자.

그 외에도 gpg는 용도가 많은데 다음을 참고하자.
http://www.gentoo.org/doc/en/gnupg-user.xml
http://www.gnupg.org/documentation/
 
Posted by asdfzxcv
아직미분류2011. 11. 30. 19:17

git

복제는 "git clone"으로 함. 무턱대고 "git pull"부터 하면 안 됨.

alias를 설정한 후에 실행하는데,
fatal: cannot exec 'git-ci': Permission denied
라는 에러가 보이면, $PATH에 진짜로 git-ci라는 실행 파일이 있거나, $PATH 중 일부에 접근 불가능한 경우이다.
[core]
        editor = vi
[user]
        name = Name
        email = email@server
[diff]
        tool = vimdiff
[difftool]
        prompt = false
[alias]
        d = difftool
        ci = commit
[merge]
        tool = kdiff3
Posted by asdfzxcv
아직미분류2011. 7. 21. 22:21
grep sth *.out | awk 'BEGIN {sum=0;} {sum+=$4;} END {avg=sum/NR; printf "%.4f\n", avg;}'
str=`grep "sth" *.out |
awk 'BEGIN {sum=0; sumsq=0;} NR == 1 {min=$4; max=$4}
{sum+=$4; sumsq+=$4*$4;} min > $4 {min=$4} max < $4 {max=$4}
END {avg=sum/NR; stddev=sqrt(sumsq/NR - avg**2);
printf "sth: %.4f & %.4f & %.4f %.4f", min, avg, max, stddev;}'`
# This awk program transposes a table.
# Output is a tab-separated table, but separator can be easily modified.
# Usage: awk -f transpose.awk input_file
BEGIN {
        p = 0 
}
{
        for (i=1; i<=NF; ++i) {
                a[NR,i] = $i
        }   
}
NF > p { 
        p = NF
}
END {
        for (j=1; j<=p; ++j) {
                str = a[1,j]
                        for (i=2; i<=NR; ++i) {
                                str = str"\t"a[i,j]
                        }   
                print str 
        }   
}
Posted by asdfzxcv
아직미분류2011. 7. 21. 21:56
이 명령은 엄청 유용할 수도 있다.
예를 들면,
perl -pi -e "s/#define MYDEF [0-9]*/#define MYDEF 1234/g" myheader.h
처럼 써 먹을 수 있는데, 반드시 header의 #define 부분을 바꾸고, 재 컴파일 한 뒤, 실행하는 일을 반복해야 하는 상황에서, 이런 명령을 script에 끼워 넣고 사용하면 된다.
Posted by asdfzxcv
아직미분류2011. 7. 21. 20:59
PDF로 논문을 제출할 때 몇 가지 요구 사항이 있을지도 모른다.

1. Type 1 font를 쓸 것. PDF에 embed할 것.
Document Properties의 Fonts 탭을 보면 된다.
Embedded라고 나오는지, Type 1이라고 나오는지 확인해보자.
(pdffonts라는 명령어도 있다. tex 시스템을 설치했으면 아마 있을 듯.)

2. Adobe reader *.* 이상에서 열리도록 할 것.
Security 탭을 보면 "Can be Opened by:"라는 항목이 있다.
Security Method는 아마 No Security라고 나와야 할 것이고, Document Restriction Summary에서 이상한 제한이 있어도 아마 안 될 것이다. (이런 보안 옵션이 있으면, 받는 쪽에서 문서 처리가 불가능할 테니까...)

3. 이미지 해상도
알아서 좋은 이미지를 넣자.

4. Attachments, bookmarks, and links
이런 거 없는 게 좋다. LaTeX 패키지에 따라 이런 걸 만드는 패키지가 있으니, 그런 패키지를 쓰지 말거나, 옵션을 바꿔서 비활성화 하거나 하자.

Posted by asdfzxcv
아직미분류2011. 7. 7. 14:16
원래 사용기를 올리는 것을 귀찮아하는데 이벤트때문에 올리게 되었다. OTP 무료 발급에 실패한 것도 억울(?)하니 다른 이벤트라도 도전해봐야지...

기존의 구식 인터넷 뱅킹은 MS Windows 운영체제와 인터넷 익스플로어의 조합에서만 사용 가능했다. 이 때문에 리눅스나 맥을 쓰는 사람은 인터넷 뱅킹을 사용하기 어려웠다. 리눅스도 지원해 달라는 운동이 한참동안 벌어진 후, 몇몇 은행에서 리눅스와 맥도 지원하기 시작했다. 현재 우리은행과 국민은행에서 오픈뱅킹 서비스를 제공하고 있다. (+ 기업은행도 한다고 한다. 써본 적은 없지만...)

예전의 모 은행 보안 관련 사태도 있고 해서, 안 그래도 은행을 바꿀까 하기도 했고, 오픈뱅킹 서비스를 제공하는 착한 은행이 마음에 들기도 했다. 우리은행이 집과 직장에서 가깝다는 등의 장점이 있어서 우리은행을 선택했다.

우리은행 오픈뱅킹은 아래 주소에서 접속할 수 있다.
https://u.wooribank.com/
URL이 간단해서 좋다.

윈도우 크롬에서 테스트해봤을 때는 아주 잘 동작했다. 리눅스에서는 아직 안 해봤다.

웹사이트 디자인에 대해 이야기하자면, 요즘에는 약간 구식인 frameset을 사용하고 있다. 이것을 사용할 경우 전체 프레임 중 하나만 주소창에 입력되면 의도하지 않은 모양이 보이기 때문에 요새는 잘 안 쓴다. 그리고 encoding으로 utf-8이 아닌 euc-kr을 사용하는 것도 이해하기 어렵다.

HTML, CSS validator를 돌려본 결과로는 HTML은 valid했고, CSS에서는 오류가 발견되었다. (frameset을 사용했길래 각 frame마다 따로 테스트해 보았다.) 그래도 HTML이라도 valid한 건 큰 장점이다. 웹표준을 신경쓰고 있긴 하니까.

이미지 글자의 사용을 줄였고, 사용하더라도 alt가 비교적 잘 등록된 것으로 보인다. 플래시도 사용하지 않는 것 같다.

아무튼 웹사이트 디자인이 깔끔하고 사용이 편리했다. 어디까지나 개인적인 생각이지만, 웹사이트 디자인은 우리은행이 타은행보다 잘 되어 있다. 남아있는 몇가지 단점도 추후에 고쳐지길 바란다.
Posted by asdfzxcv
아직미분류2011. 6. 20. 02:05
엑셀에서 A1*A2 + B1*B2 + ... + N1*N2을 원하고 있다.
하지만 SUM(A1:N1*A2:N2)는 안 된다.
(의도한 결과가 안 나오고, 위치에 따라 다르게 나온다. 예를 들어 컬럼 C에서는 C1*C2를 보여준다.)
SUM(A1*A2 : N1*N2)도 안 된다.
다행이 SUMPRODUCT라는 게 있어서 SUMPRODUCT(A1:N1, A2:N2)처럼 적으면 된다.

그러나 만약 A5*A1+A2*A2*SIN(A3) + ... + N5*N1+N2*N2*SIN(N3)정도를 원한다면?
만약 array를 element 별로 더하고 곱하는 게 된다면,
SUM(A5:N5 * A1:N1 + A2:N2 * A2:N2 * SIN(A3:N3))처럼 적을 수 있다.
그러나 이렇게 입력하면 결과가 안 나올 것이다.

그래서 SUMPRODUCT(A5:N5, A1:N1) + SUMPRODUCT(A2:N2, A2:N2, SIN(A2:N2))처럼 식이 복잡해진다.
해보니까 SIN에 argument로 array를 넣는 것은 된다. 답도 의도한 대로 나오는 것 같다.

너무 복잡하다. 그래서 인터넷을 열심히 뒤져보았다.
알고보니 array formula라는 게 있다고 한다.
SUM(A1:N1*A2:N2)처럼 입력하고 CTRL + SHIFT + ENTER하면 원하는 결과가 나온다.
이 방법을 쓰면 SUM(A5:N5 * A1:N1 + A2:N2 * A2:N2 * SIN(A3:N3))도 원하는 결과를 내 놓는다.

그럼 이런 게 왜 필요하냐는 건데...
숫자만 있거나 하면 SUMPRODUCT가 된다지만...
문자열에 숫자를 대응시켜서 사용해야 하는 경우가 있다.

이 기능을 사용하면
SUM(IF(E7:G7="A",5,IF(E7:G7="B",4,IF(E7:G7="C",3,IF(E7:G7="D",2,IF(E7:G7="F",0))))))
가 가능해진다.
(IF 부분이 지저분한데, case 문법이 있는 것도 아니고, 좀 그렇다.)
 이처럼 중간 셀을 안 만들고 복잡한 계산이 가능하다.

 

Posted by asdfzxcv