선불유심을 구매할 일이 있어서 조금 알아봤습니다.
한달정도 사용할 예정이고, 데이터를 중심으로 구매하려고 합니다. 통화료는 다 고만고만 합니다. 데이터는 KT 가 조금 비싼 편에 속합니다.

결론은 SK 나 U+로 가야하는데 기존에 SK를 사용하고 있으니, 그냥 SK 로 가입을 해야 되겠습니다.

SK

데이터

데이터: 데이터는 별도 충전 시 아래 요금으로 이용 가능 (사용기한: 충전 후 1년 이내)

권종 100MB 500MB 1GB 2GB 5GB
가격 2,000원 10,000원 15,000원 19,000원 33,000원

단, 기본 충전금액을 모두 사용할 경우 데이터량이 남아 있더라도 이용불가하며, 기본요금제 충전 이후 잔여 데이터량 이용 가능

KT LTE

구분 상세정보 데이터(패킷, 0.5KB당)
충전 표준 데이터(패킷) 0.01원 통화(초) 4.4원 메시지(건) 22원 0.01원
충전 미디엄 데이터(패킷) 0.01원 통화(초) 3.4원 메시지(건) 22원 0.01원
충전 라이트 데이터(패킷) 0.01원 통화(초) 3.9원 메시지(건) 22원 0.01원

표의 금액은 부가세가 포함된 실제 지불 금액입니다.

LG U+

별도로 데이터를 충전하는 방식

구분 충전금액(월) 기본제공(월)
PPS 데이터 100MB 5,500원
PPS 데이터 500MB 8,800원
PPS 데이터 1GB 13,200원
반응형

뭐 새로운 배울꺼 없나 싶어 찾아 보다가. github.com 을 통해서 page 를 만들 수 있다는 사실을 알게 되었다. 그래서 한번 그냥 만들어 보자 싶어 만들어 본다.

시작

tistory 블로그를 적을 때에도 markdown 을 사용해서 HTML 로 컨버팅을 해서 문서 작업을 하고 있었는데, Jekyll을 사용하면 반복적인 작업을 할 필요가 없다.

의문점

  1. 구글에서 검색이 잘될까?

장점

  • 호스팅 서비스가 필요없다.
  • 설치가 쉽다.(그런데 이상하게 안됨)
  • markdown 언어로 간편하게 적을 수 있다.
  • 어디서든지 git 을 사용할 줄 알면 글을 적을 수 있다.

단점

여기서에서 github page 에대한 제한 사항이 있습니다.

  • 페이지늬 소스는 1GB 아래여야 합니다.
  • Github Pages sites 는 매달 100GB 전송량 제한이 있습니다.
  • Github Pages sites 대 시간 빌드를 10번으로 제한 합니다.
  • github 을 사용할 줄 알아야 한다.
  • markdown 문법을 배워야 한다.
  • 설치가 반영되기까지가 좀 시간이 걸린다. 테마 설치를 하려고 하는데, 늦게 반영이 되더라
    theme 을 적용하고 난 뒤에 메인 페이지가 나오지 않아서 왜 이러지하고 찾아봤는데, 시간이 좀 지나고 난 뒤에 접속을 하니 되더라.

설치하기

구글링하면 많이 나온다 에서 많은 사람들에 이에 관한 문서들을 남겨놓았다. 굳히, 나까지 이런 문서를 남겨놓을 필요는 없을 것 같다.

반응형

라즈베리파이3 b+ 을 사용하고 있는데, 현재는 zero w 를 구입해서 세팅을 하다가 일정 중요한 부분을 기록하다.

라즈베리파이 기초설정

SSH 모드를 사용해서 설정하는게 편합니다. 더 편하게 하려면 GUI 모드를 이용해서 접속을 하시면 더 편합니다.

WIFI 잡기

주위에 잡을 수 있는 와이파이 정보를 읽어옵니다.

# sudo iwlist wlan0 scan

Imgur

ESSID 명이 접속을 네트워크 암호를 나타냅니다.

다음명령어를 통해서 테스트를 해 봅니다.

# wpa_passphrase SSID이름 비밀번호

여러가지 문구나 나오는게 있는데, 이부분은 보안을 위해서 설정할 수 있는 부분이기도 한데, 추가 정보는 이쪽을 통해서 보세요. 처음 사용자에게 중요한 부분은 아닙니다.

설정 파일을 편집 합니다.

# sudo vi /etc/wpa_supplicant/wpa_supplicant/conf
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="네트워크이름"
    psk="암호"
}

이렇게 입력을 해 준 후에 리부팅을 해 줍니다.

# sudo shurdown -r now

멀티 와이파이 잡기

여러장소에서 와이파이를 잡기위해서 멀티 와이파이를 설정 할 수 있습니다.

terminal 을 통해서 실행

새로운 걸 설치 안하고, 위의 방법을 통해서 같은 방법으로 문구만 추가해 주면 됩니다.

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="네트워크이름"
    psk="암호"
}

# 아래 추가 된 문구
network={
    ssid="네트워크이름2"
    psk="암호2"
}

콘솔 어플을 통해서 사용하는 방법

아래의 명령어로 설치를 진행 한 후 실행하기( 설치용량 4mb )

# sudo apt-get install wicd-curses -y
# sudo wicd-curses

실행하면 나오는 화면

Imgur

지금은 잡히는 와이파이가 하나 밖에 없습니다.

여기서 키보드 오른쪽방향키를 누르면 설정 모드로 들어갈 수 있습니다. 여기서 KeyAutomatically connect to this network 를 눌러서 추가합니다.

Imgur

세팅값은 /etc/wicd/wireless-settings.conf 에 저장.

블루투스 잡기

블루투스 모드 컨트롤에 들어갑니다.

# sudo bluetoothctl
agent on
default-agent
discoverable on
scan on

리스트들이 보이면 자신이 원하는 블루투스 기기을 선택해서 붙여넣기 합니다.

pair xx:xx:xx:xx:xx:xx

여러가지 요구 미션이 잇는데 수행하면 pair 가 완료 됩니다.

메모리에 올려줍니다.

trust xx:xx:xx:xx:xx:xx

Imgur

여기까지 하고 리붓을 해도 잘 잡힙니다.
만약 리붓을 해도 안 잡히면 다음문서를 참조하세요

참조문서

반응형

centos 7 커널 최신버전으로 설치하기

참조

커널 version 확인 하기

# uname -sr

CentOS 7.3 최신버전을 설치했는데도 저의 커널은 3.1 버전이었습니다.

업데이트 진행

ELRepo repository 를 CentOS7 에 추가합니다.

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

설치가능 커널목록 을 확인 합니다.

# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

커널을 설치합니다.

# yum --enablerepo=elrepo-kernel install kernel-ml

여기가지 설치가 끝났습니다.
이제 부팅 순서를 변경해야 새로운 커널로 부팅이 되는 것을 확인 할 수 있습니다.

현재 부팅 순서 변경하기

ssh 로 접속해서 하려니 속이 터졌습니다.

/etc/default/grub파일의 GRUB_DEFAULT=0 으로 추가를 해 줘도 새로운 커널로 부팅이 안되서 찾와봤는데, 아래처럼 하는게 제일 확실한 방법 인 것을 알게 되었습니다.

오타가 나는 순간 부팅이 안되고 물리적으로 서버를 찾아가야 하는 합니다.

현재 부팅 순서 확인하기

# grub2-editenv list
saved_entry=Fedora (3.14.9-200.fc20.x86_64) 20 (Heisenbug)

시스템에 등록 된 부팅커널 확인

# grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2
CentOS Linux (4.13.2-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-693.2.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-99469085913545568c1e75ad9d37bd09) 7 (Core)

uefi로 설치하신 분은 /boot/efi/EFI/centos/grub.cfg 에 위치하고 있습니다.
# grep ^menuentry /boot/efi/EFI/centos/grub.cfg | cut -d “’” -f2

부팅커널 변경하기

위의 리스트에서 붙여넣기 해 주세요. 괜히 직접 쓰다가 오타나지 마세요.

# grub2-set-default "CentOS Linux (4.13.2-1.el7.elrepo.x86_64) 7 (Core)"

부팅 설정이 변경 됐는지 확인 해 봅니다.

# grub2-editenv list
saved_entry=CentOS Linux (4.13.2-1.el7.elrepo.x86_64) 7 (Core)

재부팅 및 확인

다음 명령어를 통해서 재부팅을 합니다.

# reboot

변경 된 것을 확인 할 수 있습니다.

[root@ML350 ~]# uname -sr
Linux 4.13.2-1.el7.elrepo.x86_64
반응형

'개발 > 리눅스' 카테고리의 다른 글

nginx + php71 + php-fpm 설치하기  (0) 2018.06.20
centos 7 yum 깨짐  (0) 2017.12.05
리눅스 daemon 항목들 정리  (0) 2016.08.09
소유자, 그룹 변경하기  (0) 2016.07.28
우분투에서 일본어 사용하기  (0) 2016.07.18

web, sql 서버를 윈도우로 사용하고 있습니다. 그런데, 저는 리눅스 서버가 더 안정적이라고 생각해서 리눅스 서버로 backup 서버를 구축하고자 했습니다.

아크로닉스는 윈도우와 리눅스를 동시에 제공하고 있습니다.

설치하고 난 뒤에 알게 된 문제점

  1. 백업 서버 방화벽(firewalld)
  2. 백업 파일 배포방법(smb server 를 통한 파일 복제)

순서

install acronis 12 for CentOs 7

Imgur

저는 CentOs 7 로 구성하고 잇어서 Linux 64 버전을 다운 받았습니다.

설치프로그램 실행

# ./AcronisBackup_12.5_64-bit.x86_64

여기서 알아둬야 할 점은 설치 마지막에 두가지 포트를 설정해 주는 점입니다. 아래 방화벽을 세팅할때 사용합니다.

  • 관리 서버에 액세스하기 위해 웹 브라우저 포트기본값 9877
  • 제품 컴퍼넌트 간 통신에 사용될 포트 7780

방화벽

Centos 7 부터는 firewalld 라는 프로그램이 기본으로 내장 되어 있어서 방화벽을 제어 할 수 있습니다.
저는 여기를 참조해서 세팅을 했습니다.

네트워크 형태에 따라 다양한 방화벽 룰을 적용할 수 있습니다.

public zone 의 설정 파일은 XML형식로 저장이 됩니다. /etc/firewalld/zones/public.xml 에 저장이 됩니다.

Acronis backup 를 사용하기 위해서는 9877, 7780 포트를 개방해 줘야합니다. 아래와 같이 입력 해서 포트를 개방해 줍니다.

# firewall-cmd --permanent --zone=public --add-port=9877/tcp
# firewall-cmd --permanent --zone=public --add-port=7780/tcp
포트제거 방법
# firewall-cmd –permanent –zone=public –remove-port=포트

또는, 설정파일에 접근해서 수정을 합니다.

수정을 했으면, 다시 방화벽을 재실행 합니다.

# firewall-cmd --reload

ip 주소를 입력하면, 다음과 같은 접속 화면을 볼 수 있습니다. (이 화면은 한번 백업을 실행한 모습)

Imgur

에이전트 연결하기

백업할 컴퓨터에 AcronisBackup 프로그램을 설치합니다. 윈도우용 백업 프로그램을 실행합니다. 게다가 SQL 서버를 백업할 예정이어서 Agent for SQL 을 지정 했습니다.

Imgur

설치할 항목을 정하고 난뒤에 관리서버에 접속할 주소를 지정해 주면 됩니다.

백업 계획 만들기

문제점

로컬디스크(SQL 이 설치가 되어 있는 곳)에 백업은 간단합니다. 그러나 제가 원하는 방법은 백업서버에 저장을 하는 것이었습니다. 그래서 백업 저장되는 곳을 네트워크 드라이브를 만들어 주는 방법을 선택 했습니다.

관리서버가 있으면, 자동으로 관리서버의 디렉토리에 자동으로 인식 저장할 수 있는 줄 알았는데, 그게 아니라, acronis backup 프로그램 외적으로 연결통로를 만들어서 사용해야 했습니다. 이럴 꺼면, 기본적인 스케줄로 SQL 백업 스케줄을 만들어서 사용해도 괜찮지 않을까 싶습니다.

centos 7 에 samba 설치

yum 을 통해서 삼바를 설치

# yum install samba

사용자를 만들어 줍니다.

# useradd acronis -g acronis

useradd acronis 라고 입력 했더니, 이미 있는 그룹이라면서 만들어지지 않습니다. 그래서 그냥 이렇게 만들었습니다.

삼바사용자 생성

# smbpasswd -a acronis
New SMB password:
Retype new SMB password:

공유할 폴더를 만들고, 사용자 권한을 연결합니다.
저는 사용자 폴더를 통째로 권한을 주려고 합니다. 어차피 이거를 위해서만 사용할 꺼니까요

# chown -R acronis:acronis /home/acronis
# chmod -R 770 /home/acronis
$ chron -t samba_share_t /home/acronis

chron 은 seLinux 때문에 사용합니다.

삼바 설정 변경

# vi /etc/samba/smb.conf

아래와 같이 추가했습니다.

[acronis]
path = /home/acronis
valid users = @acronis, acronis
guest ok = no
writable = yes
browsable = yes

설정을 저장하고 삼바를 재실행 합니다.

# systemctl restart smb
# systemctl restart nmb

아크로닉스에서 위치추가

이제 SQL 서버에서 Cent Os 서버의 파일 저장소에 접근할 수 있게 되었습니다.

접속 아이디와 비밀번호는 위에 설정한 대로 입력하면 접근할 수 있습니다.

리눅스도 초보고 윈도우 서버도 초보이다 보니 맨땅에 열심히 헤딩하고 있습니다.
윈도우 라이센스 비용이 많이 들어서, 이렇게 했지만, 돈 많으신 분들은 직접 라이센스 구매해서 하시기 바랍니다. 참고로 아크로닉스는 서버 대당비용을 지불해야 합니다. 더 구입해야 하네요.

반응형

HP 서버를 하나 새로 들어오면서 RAID1 구성으로 Centos를 설치하려고 하는데, 이게 B140i통해서 구성을 해야 되는 문제가 있다. 이를 사용하려면 이에 받는 드라이버를 로드해서 인스톨해야 한다.

ahci 로 그냥 설치하면 생기는 문제점

  1. RAID 구성을 사용할 수 없다.
  2. 팬이 55% 로 자동 조정

ahci 로 간편하게 설치가능하지만, 서버부팅시점에 나는 만큼의 서버팬이 돌아가는 것을 경험할 수 있다. 반드시 B140i드라이버를 통해서 OS 설치 하여야 합니다.

반드시 드라이버 dd 로드 하셔서 사용하세요

B140i 드라이버 다운로드

드라이버는 매번 업글되니 확인하기 바란다.

Centos 와 Redhat enterprise 드라이버는 동일하므로 여기서 다운받으면 된다. 드라이버 다운로드

다운로드하신 드라이버 hpxxx.dd.gz 압축 풀면 hpxxx.dd 파일 확인되며, 확장자명에 .iso를 추가합니다

예시
hpdsa-1.2.6-115.rhel7u0.x86_64.dd.iso

USB에 저장을 해 놓습니다.

OS 설치

OS 설치이미지 장치와 DD USB 메모리 모두 서버에 연결하고, OS 이미지로 부팅합니다.

아래 설치 메뉴에서 'e'를 눌러서 편집모드로 들어 갑니다.

Imgur

linuxefi 라인의 제일 마지막 줄에 커서를 옮기고 quiet 뒤에 아래 문장을 이어서 작성합니다.

modprobe.blacklist=ahci inst.dd

일정시간이 지나고 난 뒤에 아래 화면이 나옵니다.
‘r’ 를 입력해서 저장되어 있는 USB를 선택합니다.
여기서는 2번으로 되어있습니다.
‘c’ 를 입력하고 계속 진행 합니다.

Imgur

그리고, 안에 있는 dd.iso 파일을 선택합니다. 파일이 제대로 들어있다면 아래와 같은 화면을 확인할 수 있습니다.

Imgur

확장자가 rpm으로 되어있는 드라이버를 찾을 수 있습니다.
1번을 눌러서 드라이버를 입력하고, ‘c’를 입력하고 다음으로 진행합니다.

Imgur

선택한 드라이버가 [x] 표시 된 것을 확인할 수 있습니다.
‘c’를 눌러서 다음으로 진행합니다.

Imgur

그럼 이제 설치가 진행되는 것을 확인 할 수 있습니다.

반응형

ac66 에 transmission-daemon-openssl 을 설치하려고 하는데 엔트웨어 설치가 안될때…

jffs 설정을 끝내고 난뒤에, 엔트웨어를 설치하려고 하는데, 하드가 ext 로 포맷이 안되어 있으면 설치가 되지 않는다.

엔트웨어 설치명령어

entware-setup.sh

usb 하드 연결을 하려고 하는데 이상하게 ntfs 로 연결이 잘 안 될때가 있다. 그럴때 ext3 로 포맷을 해서 인식하게 하는 방법이 있다

format

ac66, ac68 등 asus 공유기에서 하드를 직접 포맷하는 방법입니다. mk명령어를 통해서 여러가지 포맷방식으로 포맷을 할 수 있습니다.

mkfs.ext2, mkfs.ext3, mkfs.vfat, mkntfs 등을 통해서 사용할 수 있습니다.

우선 fdisk -l을 통해서 어디를 포맷해야 할지 찾아야 합니다

# fdisk -l
admin@ac66:/tmp/home/root# fdisk -l
Found valid GPT with protective MBR; using GPT

Disk /dev/sda: 1953458176 sectors,  931G
Logical sector size: 512
Disk identifier (GUID): ccd00cb0-427e-40c3-b428-cdb12fe3bba0
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1953458142

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34          262177        128M   0700  Microsoft reserved partition
   2          264192      1953456127        931G   0700  Basic data partition

일단 저는 포맷을 해 놓은 상태이기 때문에 위와 같은 화면이 나옵니다. number 에 나오는 숫자를 잘 보고 실행해야 합니다.
아래와 같이 입력을 하게 되면 빠른 포맷을 실행할 수 있습니다.

# mkfs.ext3 -E lazy-itable_init=1 /dev/sda2
반응형

golang 1.9

golang 1.9 release news

소개

최신 Go 버전 1.9 버전은 Go 1.8 이후 6 개월 후에 출시되고, Go 1.x 시리즈에서 10 번째 릴리스입니다. 언어에는 두 가지 변경 사항이 있습니다.
type alias에 대한 지원 추가 및 구현이 부동 소수점 연산을 통합 할 수 있는 시점 정의하는 부분입니다. 대부분의 변경 사항은 toolchain, runtime 및 라이브러리의 구현에 있습니다. 언제나 그렇듯이 이 릴리스는 Go 1 호환성을 유지합니다. 거의 모든 Go 프로그램이 이전처럼 계속해서 컴파일되고 실행될 것입니다.

이 릴리스에서는 명쾌한 단조로운 시간 지원 기능을 추가하고, 패키지 내의 기능 컴파일을 병렬화하며 test helper 기능을 보다 잘 지원하고 새로운 비트 조작 패키지를 포함하며, 새로운 동시 map type을 제공합니다.

오늘 brew update를 했더니 golang이 업그레이드가 된 사실을 알게 되었습니다. 그래서 중요한 변경부분을 적어 봅니다.

언어의 변경점

두가지 변경점이 있습니다.

Go는 패키지간에 유형을 이동하면서 점진적인 코드 복구를 지원하는 type alias을 지원합니다. type 디자인 문서리팩토링에 대한 기사에서 문제를 자세히 설명합니다. 즉, type alias 선언은 다음과 같은 형식을 취합니다.

type T1 = T2

이 선언은 T2로 표시된 type에 대한 대체 철자 인 alias T1을 도입합니다. 즉, T1과 T2는 모두 같은 type을 나타냅니다.

언어의 작은 변경점은 아키텍처의 “fused multiply and add”(FMA) 명령어를 사용하여 중간 결과를 반올림하지 않고, x*y+z를 계산하는 것과 같이 부동 소수점 연산을 함께 구현할 수 있는 언어구현을 의미합니다 x * y. 강제적으로 중간의 반올림을 실시하려면, float64 (x * y) + z라고 기입합니다.

Ports

이 릴리스에는 지원되는 새로운 운영 체제 또는 프로세서 아키텍처가 없습니다.

ppc64x requires POWER8

FreeBSD

OpebBSD 6.0

known Issue

NetBSD 커널 충돌로 인해 1.9 개발동안 NetBSD 빌더 실행이 중단되었습니다 (NetBSD 7.1까지 포함). Go 1.9가 릴리스됨에 따라 NetBSD 7.1.1이 수정되었습니다. 그러나 현재로서는 테스트 통과 한 NetBSD 빌더가 없습니다. 다양한 NetBSD 문제를 조사하는 데 도움을 주시면 감사하겠습니다.

Tools

병렬 컴파일

Go 컴파일러는 이제 다중 코어를 활용하여 패키지의 함수를 병렬로 컴파일하는 기능을 지원합니다. 이것은 별도 패키지의 병렬 컴파일에 대한 go 명령의 기존 지원에 추가됩니다. 병렬 컴파일은 기본적으로 켜져 있지만 환경 변수를 아래와 같이 변경하면 비활성화 할 수 있습니다.

GO19CONCURRENTCOMPILATION = 0

Vendor matching with ./…

Moved GOROOT

Compiler Toolchain

어샘블러

Doc

긴 인수 목록들이 생략됩니다. 이 것은 go doc 의 가독성을 개량했습니다.
구조체 필드에 대한 문서보기가 지원됩니다. 예를 들어 doc http.Client.Jar로 이동하십시오.

type Client struct {
    // Jar specifies the cookie jar.
    //
    // The Jar is used to insert relevant cookies into every
    // outbound Request and is updated with the cookie values
    // of every inbound Response. The Jar is consulted for every
    // redirect that the Client follows.
    //
    // If Jar is nil, cookies are only sent if they are explicitly
    // set on the Request.
    Jar CookieJar

    // ... other fields elided ...

ENV

go env --json을 통해 json 형식으로 출력할 수 있습니다.

Test

Pprof

Vet

vet명령은 go tool에 더 잘 통합되어 있어서 vet는 모든 표준 빌드 플래그를 지원하고, vet 플래그는 이제 vet와 go tool vet에서 사용할 수 있습니다.

Gccgo

Runetime

inlined frames이 포함된 스택호출

성능

언제나 그렇듯이 변경 사항은 매우 일반적이며 다양하여 성능에 대한 정확한 설명을 하기 어렵습니다. 대부분의 프로그램은 가비지 컬렉터의 속도 향상, 향상된 코드 생성 및 코어 라이브러리의 최적화로 인해 조금 더 빠르게 실행될 것입니다.

가비지 콜렉터(Garbage Collector)

세계 표준 가비지 콜렉션을 트리거하는데 사용 된 라이브러리 함수는 이제 동시 가비지 콜렉션을 트리거합니다. 특히 runtime.GC, debug.SetGCPercent 및 debug.FreeOSMemory는 동시 가비지 콜렉션을 트리거하고, 가비지 콜렉션이 완료 될 때까지 호출 goroutine 만 차단합니다.

debug.SetGCPercent 함수는 새로운 GOGC 값으로 인해 즉시 필요한 경우에만 가비지 수집을 트리거합니다. 이렇게하면 GOGC를 즉석에서 조정할 수 있습니다.

큰 오브젝트 할당 성능은 대형 오브젝트가 많은 대형 (> 50GB) 힙을 사용하는 어플리케이션에서 상당히 향상됩니다.

매우 큰 힙에 대해서도 runtime.ReadMemStats 함수는 이제 100μs보다 적게 걸립니다.

코어 라이브러리

새로운 비트조작 패키지

Go 1.9에는 새로운 패키지 인 math/bits가 포함되어 있으며 비트 조작을위한 최적화 된 구현이 포함되어 있습니다. 대부분의 아키텍처에서이 패키지의 함수는 컴파일러에서 추가로 인식되며 추가 성능을 위해 내장 함수로 처리됩니다.

Test.Helper function

새로운 (T).Helper( B).Helper 메서드는 호출 함수를 테스트 도우미 함수로 표시합니다. 파일 및 줄 정보를 인쇄 할 때 해당 기능은 건너 뜁니다. 이렇게하면 사용자에게 유용한 줄 번호를 사용하면서 테스트 도우미 함수를 작성할 수 있습니다.

동시 발생하는 MAP

sync 패키지의 새로운 map 패키지는 amortized-constant-time, 저장 및 삭제가 포함 된 동시 map입니다. 여러 goroutine이 Map의 메소드를 동시에 호출하는 것이 안전합니다.

Profiler Labels

기타 소규모 변경점

문서가 너무 많다… ㅠㅠ

반응형

ea6900, ac66 비교 사용기

2013년에 ac66r 에 아마존을 통해서 구매를 한 제품을 사용하고 있었습니다.

외장하드를 물려서 DLNA 서버로 이용하고 Tranmission 서버로 잘 이용하다가 CPU 하나로 파일들 인덱싱을 하면 버거워하는 걸 느낄 수 있었습니다. 그러다 이번에 LINKSYS 의 TP-LINK EA6900 이 저렴한 가격에 판매를 하고 있어서 구매를 하게 되었습니다.

구매한지 하루만에 설치를 하고 멀린롬을 올리는 도이안 느끼는 장점과 단점을 적어 봅니다.

장점

  1. 듀얼코어 CPU
  2. 빠른 인덱싱
  3. 저렴한 가격

단점

  1. 기기가 크다.(어댑터도 비교해서 큽니다)
  2. 발열이 크다.
  3. 멀린롬을 올리기가 힘들다.

온도

ea6900 에서는 CPU 온도가 체크가 되지만, ac66에서는 안된다. 그러나 WIFI 온도는 볼수 있으니 아래 정보로 비교하시기 바랍니다.
idle 상태의 온도 입니다.

ea6900 온도

Imgur

ac66 온도

Imgur

메뉴

지원되는 메뉴들이 차이가 보입니다.
온도가 90도가 넘어가다보니, 이를 해결하기 위해서 발열 쿨러를 하나 달아야 할꺼 같습니다. 검색을 해 보니 실제로 발열 쿨러를 장착하신 분들이 좀 계시네요

ea6900 온도

Imgur

ac66 온도

Imgur

반응형

마무리

To Do 응용 프로그램을 실제 프로토 타입으로 확장해 보겠습니다. 우리는 처음 세장에서 필요한 모든 것을 만들어 작동하는 응용 프로그램을 만들었습니다. 우리는 서비스 태스크를 수정하여 추가 및 제거 메소드를 작성한 다음 Bootstrap 테마를 적용하여 이쁘게 만들어 고겠습니다.

/app폴더에 있는 tasks.service.ts 파일을 수정하면서 시작하겠습니다.

import {TASKS} from './sample.tasks';
import {Injectable} from 'angular2/core';

@Injectable()
export class TaskService {
  getTasks() {
    return TASKS;
  };
  addTask(task) {
    TASKS.push(task);
  };
  deleteTask (task) {
    for (var i=0; i<TASKS.length; i++) {
      if (TASKS[i].id === task.id) {
        TASKS.splice(i,1);
        break;
      }
    }    
  };
}

두가지 메소드를 추가 했습니다.

addTask는 task를 매개변수로 허용하고, deleteTask 또한 task를 매개변수로 허용하고 있습니다.
addTask메소드는 새로운 task를 배열에 추가하고, deleteTask는 전송 된 작업 개체의 ID 를 기반으로 배열에서 작업을 제거 합니다.

다음으로 수정할 파일은 index.html은 app폴더 바깥에 위치하고 있습니다.
Bootstrap CDN 을 통해서 Bootstrap CSS 를 추가할 것입니다.

index.html 를 수정합니다.

<html>
  <head>
    <title>Angular 2 - My Todo List</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <script src="node_modules/es6-shim/es6-shim.min.js"></script>
    <script src="node_modules/systemjs/dist/system-polyfills.js"></script>
    <script src="node_modules/angular2/es6/dev/src/testing/shims_for_IE.js"></script>

    <script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <script src="node_modules/rxjs/bundles/Rx.js"></script>
    <script src="node_modules/angular2/bundles/angular2.dev.js"></script>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    <script>
      System.config({
        packages: {
          app: {
            format: 'register',
            defaultExtension: 'js'
          }
        }
      });
      System.import('app/main')
            .then(null, console.error.bind(console));
    </script>
  </head>

  <body>
    <my-component>Loading...</my-component>
  </body>
</html>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

Bootstrap CDN을 추가했습니다.

/app폴더에 위치하고 있는 app.component.ts파일을 수정합니다.

import {Component} from 'angular2/core';
import {HighlightDirective} from './highlight.directive';
import {TaskService} from './task.service';
import {Task} from './tasks';
import {OnInit} from 'angular2/core';

@Component({
  selector: 'my-component',
  templateUrl: 'app/app.component.html',
  directives: [HighlightDirective],
  providers: [TaskService]

})
export class MyComponent {
    public name: String;
    public today: Date;
    public task: String;
    public taskList: Task[];

constructor(private _taskService: TaskService) {
        this.name = 'Angular 2 Rocks !';
        this.today = new Date();       
        this.task = '';
        this.taskList = this._taskService.getTasks();

    }
    removeTask(item) {
         this._taskService.deleteTask(item);
    }
    addNewTask() {
        this._taskService.addTask ( { id: Math.floor((Math.random() * 10) + 10), name : this.task });
        this.task = '';
    }
}

sayMyName() 메소드를 제거하고 deleteTask, addNewTask 메소드를 추가했습니다. 이 앱은 데모앱이므로 따로 ID 등 확인은 없습니다.
프로덕션 환경에서는 이러한 방법을 보다 효과적으로 작동시키기 위해 더 많은 데이터 검증이 필요한 것입니다.

/app 폴더에 있는app.component.html파일을 수정 합니다.

<h1>{{today | date:"fullDate"}}</h1>
<div>
    <div class="form-group">
        <label for="usr">New Task:</label>
        <input [(ngModel)]="task"  class="form-control"> 
    </div>
    <button (click)="addNewTask()"  class='btn-default' myHighlight>Add Task</button>
</div>
<div>
    <div class="list-group">
        <a href="#" (click)="removeTask(item)" *ngFor="#item of taskList" class="list-group-item">{{item.name}}</a>
    </div>
</div>

우리는 목록을 제거하고, 추가 할 수 있는 버튼을 부트스트랩 테마와 함께 적용 했습니다.

마치며

반응형

+ Recent posts