2015. 5. 21. 22:04


텍스트 문장을 char 배열, 또는 byte 배열로 분해하면...? 문득 떠오른 것을 그냥 한번 만들어 보았다.


어디 써먹을 데 있으려나...





C# 에서 char는 문자 1개당 하나씩 대응(2바이트 인듯 하다) 하고, byte는 알고 있던대로... 한글 2바이트 기타 아스키 코드 1바이트 대응 하고 있다.




char 배열로 분해하기

char[] charArr = msgStr.ToCharArray(); 

- msgStr 은 문자열이 들어있는 string 변수이다.




byte 배열로 분해하기

System.Text.Encoding AscEnc = System.Text.ASCIIEncoding.GetEncoding("ks_c_5601-1987");

byte[] byteArr = AscEnc.GetBytes(msgStr);

- msgStr 은 문자열이 들어있는 string 변수이다.

- 문자열 인코딩을 설정한 다음 바이트 배열로 분해하여 담는다.





풀 소스코드는 Github 에서 다운로드 가능~

https://github.com/haebi/textsplitter




[실행파일]

textsplitter.zip


그냥 실행파일만 필요하면 이것을 받으면 된다. 

닷넷 4.5가 설치되어있지 않다면 실행되지 않고 불평을 늘어놓을 것이다. (아마도...)





Posted by 해비
2015. 5. 21. 13:37



VS 2013 에서의 github 사용 방법 간단정리



1. git 다운로드

http://msysgit.github.io/



2. 회원가입, 로그인 후 리포지터리 생성

https://github.com/

- 리포지터리 생성할 때, Initialize this repository with a README 에 체크가 되지 않도록 주의한다.



3. 그대로 vs2013 실행 후, 아무거나 프로젝트 하나 만들자 (윈폼 하나 떠 있어도 일단은 OK 다)

[파일] - [소스 제어에 추가] - [Git 선택] - [확인]



4. [보기] - [팀 탐색기] 열어서, [홈(집)] - [프로젝트-변경내용] - [커밋 메시지 입력] - [커밋]

- 여기서 로컬에 커밋이 완료 되었습니다.



5. 다시 [팀 탐색기] 열어서, [홈(집)] - [동기화 되지 않은 커밋] - [github에서 생성한 리포지터리의 URL 주소 입력] - [게시] - [github ID, PW 입력]

-여기서 github에 푸쉬가 완료 되었습니다.





이제 github 으로 부터 소스 내려받아서 작업 진행을 예로 들겟습니다.

1. vs2013실행 - [파일] - [소스제어에서 열기] - [팀 탐색기] - [연결(플러그)] - [복제본] - [github 리포지터리 URL 입력] - [복제]

- 원격지의 소스를 로컬에 내려받았다.



2. [복제] 버튼 아랫부분에 로컬에 내려진 프로젝트가 보인다. - [더블클릭] 하면 해당 [프로젝트의 홈으로 이동]한다.

   - 솔루션파일(.sln)을 다시 더블클릭하면 해당 솔루션이 열린다.

   - 솔루션 탐색기로 가면 프로젝트는 이미 열려있다. 직접 소스를 열도록 한다.



3. [소스 수정] 알아서 임의로 수정한다. 그냥 버튼 하나 추가로 끝내도 좋다.



4. [팀 탐색기] - [홈] - [변경내용] - [커밋 메시지 입력] - [커밋 후 푸시] - [github ID/PW 입력] - [로컬커밋 & github 푸시 완료]

- 이번엔 로컬 커밋과 github의 푸시를 한번에 완료 하였다.






Posted by 해비
2015. 5. 8. 23:19


여기서 셋팅하는 프로그램 목록입니다

- NAS 기능을 위한 것.

samba (네트워크 드라이브)

openVPN (원격에서 네트워크 드라이브 연결용)



- 시스템 설정

iptables (방화벽)

SSH (원격 쉘 접속)

디스크 마운트



배포판은 아무거나 취향에 따라서~~

여기 설정은 데비안 8 기준입니다.

SSH, 기본구성유틸리티를 제외한 모든 체크를 해제 후 설치 진행합니다. (권장)



설치 시 파티션 설정

 /boot

 ext4

 250 MB

 /

 ext4

 29.5 GB

- 32GB MicroSD 에 설치 해서 USB로 부팅하였다.

- /boot 에 250 MB 제외한 모든 용량을 / 에 할당 하였다.

- MicroSD 에 운영체제를 설치하는 이유는 관리의 편의성 때문이다. usbit 로 통째로 이미지 백업을 해두고, 필요시 복원하면 간편하게 관리가 된다. (32GB 기준으로 이미지 백업 하는데 약 50분 소요되는 듯 하다)




스왑공간 생성

$ sudo apt-get install dphys-swapfile

- 설치만 하면 기본 2 GB의 스왑공간이 생성된다.


스왑공간 설정(옵션)

$ sudo vim /etc/dphys-swapfile

CONF_MAXSWAP=100

- 주석을 해제하고 원하는 용량을 지정할 수도 있다. (단위 MB)




쉘 프롬프트 색상 설정

$ cd ~

$ vim .bashrc

force_color_prompt=yes

- 주석처리 되어있다면 풀어준다.

- 저장 후 로그아웃 했다가 다시 로그인 한다.




ll 명령어 사용(ls -l)

$ sudo vim /etc/profile

alias ll='ls $LS_OPTIONS -l'

- 일일이 ls -l 치는거 귀찮다. 그냥 ll 입력을 위해 설정한다.




SSH 설치 및 설정

$ sudo apt-get install ssh

$ sudo vim /etc/ssh/sshd_config

Port 22

PermitRootLogin no

- SSH 접속포트 설정

- Root 계정 로그인 금지




방화벽 설정

$ vim iptables

iptables -P INPUT ACCEPT
iptables -F


iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP


# Allow any connection from this host.
iptables -A INPUT -i lo -j ACCEPT

# Allow all broadcast traffic.
iptables -A INPUT -m pkttype --pkt-type broadcast -j ACCEPT

# Avahi
iptables -A INPUT -m udp -p udp --dport 5353 -j ACCEPT



# SSH
iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT

# SAMBA
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 137:139 -j ACCEPT
iptables -A INPUT -m udp -p udp --dport 137:139 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

# OpenVPN
iptables -A INPUT -m udp -p udp --dport 1194 -j ACCEPT



iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
iptables -P INPUT DROP


iptables -P OUTPUT ACCEPT


iptables -nL


iptables -t nat -F
#iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -nL


방화벽 설정 스크립트 파일 생성 및 적용

$chmod 700 iptables
$sudo ./iptables

현재 방화벽 설정을 담은 파일 생성 및 /etc/ 폴더 아래에 복사
$sudo iptables-save > iptables.conf
$sudo mv iptables.conf /etc/

부팅시 지금 설정한 규칙이 유지되도록 설정
$sudo vim /etc/network/interfaces

pre-up iptables-restore < /etc/iptables.conf

- 부팅시 iptables 규칙 자동 재적용 설정.




장치마운트

마운트 할 경로 생성

$ sudo mkdir /mnt/hdd1


장치의 UUID 확인

$ sudo blkid


장치의 UUID와 현재 파일시스템을 설정.

$ sudo vim /etc/fstab

UUID=장치의UUID       /mnt/hdd1       ext4      defaults        0        0 


장치 마운트

$ sudo mount -a

- /etc/fstab 설정이 잘못된 경우 부팅시 문제가 되므로 꼭 마운트 하여 테스트 해 보도록 한다.




Samba 설치 및 설정

$ sudo apt-get install samba

$ sudo apt-get install samba-common-bin 


사용자 추가

먼저 시스템 사용자를 추가하고, samba 유저에 추가를 한다.

$ sudo useradd net1

$ sudo useradd netr

$ sudo smbpasswd -a net1

$ sudo smbpasswd -a netr

- 기존 samba 사용자 패스워드 변경 시 -a 옵션(samba사용자 추가)을 제거 한다.


$ sudo vim /etc/samba/smb.conf

workgroup = WORKGROUP

dos charset = CP949

display charset = UTF8

unix charset = UTF8



[nas_rw]

path = /mnt/hdd1/nas

writable = yes

valid users = net1


[nas_r]

path = /mnt/hdd1/nas

writable = no

guest = yes

- smb.conf 는 기존 내용을 전부 지우고 이 내용으로 대체 한다.

- 동일 경로를 공유명칭 2개 (nas_rw, nas_r) 로 권한을 달리 하여 공유 하고 있다.

- nas_rw 는 쓰기권한이 주어졌고, nas_r 은 쓰기가 허용되지 않는다.

- net1 로 로그인 하면 nas_rw, nas_r 둘 다 접근이 가능하며, net1을 제외한 smbuserpasswd 에 등록된 모든 계정에 대해 nas_r 에만 접근이 가능하다.




OpenVPN 설정

- 이 블로그의 OpenVPN 설치 항목을 참고... (너무 길다 -_-)






넉넉한 메모리는 파일 복사시 버퍼로 활용되기도 합니다.

- 넉넉한 용량의 메모리는 파일 복사시 기가비트 랜의 빠른 속도를 감당하지 못하는 느린 5400 rpm하드디스크의 속도를 일정부분 커버 해 줍니다.









Posted by 해비
2015. 5. 3. 08:42



압축(zip)

 tar cvzf file.tar.gz --exclude=file.tar.gz .

- 마지막의 .은 현재 폴더를 의미

- --exclude는 여러개 지정가능( --exclude=file1 --exclude=file2 ... )



내용확인

 tar tvf file.tar.gz



압축해제

 tar xvf file.tar.gz -C /etc/test



압축(bzip)

 tar cvpjf ssltools.tar.bz2 ssl/ 



해제

 tar xvpjf ssltools.tar.bz2

- 현재 폴더 하단의 ssl 폴더를 통째로 압축합니다.

- 해제시 하단에 폴더가 생기고 안에 풀립니다.

- tar로 파일을 묶고, bzip 으로 압축합니다.



tar --help 내용 중 일부

 -c, --create               create a new archive

 -t, --list                 list the contents of an archive

 -v, --verbose              verbosely list files processed

 -z, --gzip, --gunzip, --ungzip   filter the archive through gzip

 -f, --file=ARCHIVE         use archive file or device ARCHIVE


 --exclude=PATTERN      exclude files, given as a PATTERN

 -C, --directory=DIR        change to directory DIR




Posted by 해비