ipTIME V108을 분해해 보았다.

간헐적으로 일어나는 속도 저하 때문에 도저히 견딜 수가 없어 새로운 유선 공유기를 주문하게 되었다.

펌웨어 플래싱을 새로 해 보아도 해결되지 않는 것으로 보아 하드웨어에 문제가 있는 듯 해서 열어보았다.

KakaoTalk_20160712_194044079

ipTIME V108의 전면부. 보통 V 넘버링은 저가형 모델, 혹은 VPN 기능 탑재 모델로 알려져 있다.

KakaoTalk_20160712_194044668 내부 부품들.
MICREL社는 현재 Microchip社에 인수된 회사이다.
KSZ8695X는 GoC(Gateway-on-a-Chip)인데, ARM992T(@166MHz)를 코어로 하는 IC이다.
100Mbps 지원은 무리가 없는 수준.

아래 넓직한 칩은 SPANSION社의 CMOS Flash Memory. 16Mbit의 용량이다.
4X32SDRAM이라 쓰인 칩은 StarRam社 제품. 중국 제조사인지 데이터시트가 검색되지 않는다.

전체적인 구성을 볼 때 전혀 문제가 없는데, 아마도 메인 칩인 KSZ8695X의 발열 문제로 인해
(평상시에 52℃이다) 성능 문제가 발생하는 것이 아닌가 한다.

— 추가 —

캡처

telnet으로 접속해 보니 busybox를 돌린다…?

동영상 파일에서 음성 스트림을 추출해 보자!

모종의 경로로 음원을 구하다 보면 동영상 파일에서 음성 파일을 추출하는 경우가 많죠.
예전엔 nicosound 등의 사이트가 있었기도 하고요.

이 포스트에서는 동영상을 FFMPEG를 통해 음성 스트림을 Direct Stream Copy로 추출하는 방법에 대해
논해볼까 합니다.

FFMPEG란 인코딩을 위한 툴입니다. CLI 환경에서 돌아가는지라 이를 활용한 것들이 대표적으로
유X일이라던가, 다X팟 인코더 등이 있죠.

사용법은 간단하게 하면 다음과 같습니다.

$ ffmpeg –i input.mp4 output.avi

이것을 batch 파일을 통해 이용해 보도록 합시다.

@echo off
FOR %%f IN (%1, %2, %3, %4, %5) DO (ffmpeg.exe –i %%f –c:a copy –vn %%f.m4a)

이렇게 Direct Stream Copy를 하게 되면, 손실 포맷(m4a, mp3, ogg 등)으로 다시 인코딩하게 되어 생기는 손실을 막을 수 있습니다.

별도로 경로를 지정하고 싶다면 -vn 옵션 뒤를 수정하면 됩니다.
위 batch 파일은 5개의 큐만 존재하므로 원한다면 %6, %7 등으로 뒤를 수정해 큐를 늘릴 수 있습니다.

AVR에 플래싱을 해 보자! (avrdude)

요즘은 Arduino가 상당히 대중화된 느낌이다.
다양한 버전의 Arduino가 나오기도 했고, 그에 상응할 만큼 쉴드도 많은 종류가 존재한다.

오늘은 대다수 Arduino의 심장인 AVR MCU에 hex파일을 플래싱해보려 한다.

먼저 hex파일을 생성해야 한다. 소스 코드를 이용할 경우 CLI 환경(cmd, 터미널 등)에서 make를 이용해 hex(elf) 파일을 만들면 된다.
직접 소스를 짠 경우 프로젝트를 빌드하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
C:\Users\RiTA>avrdude
Usage: avrdude [options]
Options:
  -p <partno>                Required. Specify AVR device.
  -b <baudrate>              Override RS-232 baud rate.
  -B <bitclock>              Specify JTAG/STK500v2 bit clock period (us).
  -C <config-file>           Specify location of configuration file.
  -c <programmer>            Specify programmer type.
  -D                         Disable auto erase for flash memory
  -i <delay>                 ISP Clock Delay [in microseconds]
  -P <port>                  Specify connection port.
  -F                         Override invalid signature check.
  -e                         Perform a chip erase.
  -O                         Perform RC oscillator calibration (see AVR053).
  -U <memtype>:r|w|v:<filename>[:format]
                             Memory operation specification.
                             Multiple -U options are allowed, each request
                             is performed in the order specified.
  -n                         Do not write anything to the device.
  -V                         Do not verify.
  -u                         Disable safemode, default when running from a script.
  -s                         Silent safemode operation, will not ask you if
                             fuses should be changed back.
  -t                         Enter terminal mode.
  -E <exitspec>[,<exitspec>] List programmer exit specifications.
  -x <extended_param>        Pass <extended_param> to programmer.
  -y                         Count # erase cycles in EEPROM.
  -Y <number>                Initialize erase cycle # in EEPROM.
  -v                         Verbose output. -v -v for more.
  -q                         Quell progress output. -q -q for less.
  -?                         Display this usage.
avrdude version 5.10, URL: <http://savannah.nongnu.org/projects/avrdude/>
cs

cmd에 avrdude를 입력하면 나오는 화면이다.
본 글에서는 Arduino를 ISP로 활용할 것이므로 다음과 같은 포맷으로 avrdude 명령어를 사용하면 된다.

1
avrdude -P COM3 -b 19200 -c avrisp -p t85 -e -U hfuse:w:0xFF:m -U lfuse:w:0xFF:m -U efuse:w:0xFF -U flash:w:main.hex
cs

-P 옵션 : 포트 지정 (예 : COM4)
-b 옵션 : Baud rate 지정
-c 옵션 : 프로그래머 지정 (Arduino를 ISP로 쓸 경우 avrisp)
-p 옵션 : 타깃 칩 모델 지정
-e 옵션 : Chip erase 수행
-U 옵션 : High, Low, Extended Fuse 설정 및 플래싱 관련 설정

High, Low, Extended Fuse 세팅값은 이 곳에서 계산하는 것이 편하다. (http://www.engbedded.com/fusecalc/)

Aliexpress에서 구입한 Arduino Pro Micro.

KakaoTalk_20160707_012556022

상당히 만듦새도 깔끔하고, 작동도 잘 하는데 한 가지 큰 문제점이 있습니다.
Arduino Pro Micro의 메인 칩인 ATmega32u4의 퓨즈 비트 중 CKDIV8가 1로 설정되어 있는 것 같은데,
외부 전원을 연결하거나, 리셋한 이후 동작 속도가 느려집니다.

이를 해결하려면 Arduino IDE에서 부트로더를 다시 구우면 됩니다.
집에 굴러다니는 Arduino UNO나 기타 ISP를 이용하세요.

사용하는 핀은 VCC, GND, RST, 15(SLCK/SCK), 14(MISO), 16(MOSI) 의 총 6개 핀입니다.
사용하시는 프로그래머의 핀 배열에 맞게 꽂아서 플래싱하시면 됩니다.

#P.S : 모든 셀러의 아이템에서 그런 것은 아니고, Feiyang Electronics 라는 셀러의 제품만 그런
증상을 보이는 듯 합니다.

PostgreSQL 9.5, PostGIS 2.2.2 설치 (CentOS 7)

PostgreSQL을 설치시 기본 설정은 localhost:5432만 listen하도록 되어 있습니다.

이를 수정하기 위해서는 다음 방법을 따라 하시면 됩니다.

1
vi /var/lib/pgsql/9.5/data/pg_hba.conf
cs

이것으로 pg_hba.conf 파일의 맨 끝에 다음 줄을 추가해 줍시다.

1
host    all        all        0.0.0.0/0        md5
cs

기존 localhost 항목의 ident는 md5으로 바꿔줍니다.
trust로 바꿀 시, 어떤 인증도 필요하지 않으니 주의해서 사용합니다. password의 경우 비밀번호를 plain text로 전송하므로 이 역시 주의합니다.

다음으로 postgresql.conf 파일을 수정합니다.

1
vi /usr/lib/pgsql/9.5/data/postgresql.conf
cs

스크롤을 조금 내리다 보면 FILE LOCATIONS 항목이 있습니다.
이 곳에서 다음 항목을 수정해 줍시다.

1
2
3
data_directory = ‘/var/lib/pgsql/9.5/data’
hba_file = ‘/var/lib/pgsql/9.5/data/pg_hba.conf’
ident_file = ‘/var/lib/pgsql/9.5/data/pg_ident.conf’
cs

절대 경로가 아닌 상대 경로로 해도 결과는 같은데 상대 경로 지정을 어떻게 해야 할 지 애매해서 저렇게 해 뒀습니다. 저 항목에 기본적으로 주석 처리가 되어 있는데 이것을 해제하지 않으면 pg_hba.conf 파일의 수정한 항목이 반영되지 않습니다.

스크롤을 조금 더 내려서 CONNECTIONS AND AUTHENTICATION 항목의 첫 번째 설정 항목인 listen_addresses를 수정합시다.

1
listen_addresses = ‘*’
cs

와일드카드 문자를 넣어 놓으면 어차피 localhost도 포함되니 저렇게 해 둡시다.
모든 IP에서 들어오는 연결을 허용하는 설정입니다.

모든 항목을 수정했다면 다음 명령어를 수행합니다.

1
systemctl restart postgresql9.5
cs

netstat을 통해 5432번 포트에서 LISTEN 중인지 확인합니다.

1
2
3
4
5
6
7
8
9
10
[rita@server data]# netstat -nat
Active Internet connections (servers and established)
Proto RecvQ SendQ Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0    256 10.0.1.2:22          10.0.1.1:57822       ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::5432                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
cs

아래처럼 0.0.0.0:5432 항목이 생겼다면 성공적으로 설정이 반영된 것입니다.
추가적으로 postgres의 패스워드를 수정하려면 다음 명령어를 실행합니다. (처음 수정하는 경우 pg_hba.conf 항목의 localhost 설정에서 trust로 설정을 해 두어야 합니다.)

1
2
3
4
5
6
7
8
[rita@server]# psql -U postgres -h localhost
postgres 사용자의 암호:
psql (9.5.3)
도움말을 보려면 “help”를 입력하십시오.
postgres=# ALTER USER postgres WITH PASSWORD ‘패스워드’;
ALTER ROLE
postgres=# \q
cs

다음으로 PostGIS를 설치하기 위해, 먼저 Repository를 추가해 줍니다.
PostGIS의 경우, PostgreSQL Repository에 없기 때문에 EPEL(RHEL Extra Packages for Enterprise Linux) Repo를 추가해 주어야 합니다.

1
[rita@ritaserver ~]# yum -y install epel-release
cs

이후 PostGIS를 설치합니다.
본 글에서는 PostgreSQL의 버전이 9.5이므로, PostGIS도 그에 맞추어 설치합니다.

1
[rita@ritaserver ~]# yum -y install epel-release
cs

설치가 끝난 후, SQL Client를 통해 Extension을 설정해 주어야 합니다.
postgres 데이터베이스가 아닌, 사용할 데이터베이스를 새로 만들고 그 곳에서 실행합니다.

1
2
3
4
5
6
7
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;
cs

자세한 것은 아래 링크를 확인하세요.

Simplified ver. / Detailed ver.

XpressEngine에서 서버 내 sendmail 서비스를 이용해 메일을 보내는 방법.

기존 XpressEngine의 /classes/mail/Mail.class.php 를 보면 useGmailAccount() 가 기본으로 설정되어 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function useGmailAccount($account_name$account_passwd)
{
    $this–>SMTPAuth = TRUE;
    $this–>SMTPSecure = “tls”;
    $this–>Host = ‘gmail.com’;
    $this–>Port = ‘587’;
    if ($this–>isVaildMailAddress($account_name))
        {
            $this–>Username = $account_name;
        }
    else
        {
            $this–>Username = $account_name . ‘@gmail.com’;
        }
    $this–>Password = $account_passwd;
    $this–>IsSMTP();
}
cs

이것을 조금 바꾸어 useLocalServer()를 만들자.

1
2
3
4
5
6
7
8
9
10
function useLocalServer($account_name$account_passwd)
{
    $this>SMTPAuth = FALSE;
    $this>Host = ‘localhost’;
    $this>Port = ’25’;
    $this>Username = $account_name;
    $this>Password = $account_passwd;
    $this>IsSMTP();
}
cs

SMTPAuth의 경우 서버에서 사용하고 있다면 서버 설정에 맞게 수정하면 된다.
Host, Port 역시 서버 설정에 따라서.

FTP 접속시 550 Permission Denied 에러가 계속 뜨는 경우. (CentOS 7, vsftpd)

보통의 경우 /etc/vsftpd/vsftpd.conf 파일의 write_enable 항목을 YES로 수정하면 해결 되는 경우가 많지만, 이 파일에서 어떤 항목을 수정해도 FTP Client에서 계속 550 Permission Denied 에러를 토해내는 경우가 있다.

이럴 경우 SELinux가 문제인지 확인해 보아야 한다.

getsebool -a | grep ftp 명령어를 친 뒤 ftp_home_dir 항목이 off라면 setsebool -P ftp_home_dir=1 을 통해 on으로 수정해 주자.
뒤의 -P 옵션은 재부팅시에도 ftp_home_dir=1을 유지하도록 설정값을 저장하는 옵션이다.

을왕리 해수욕장, 당일치기 여행.

고등학교 동창인 친구와 당일치기로 노을을 보러 을왕리에 다녀 오게 되었다.

운이 좋아 용유역까지 자기부상열차를 탈 수 있었다.
자기부상열차는 시범 운행 중이기에, 현재는 운임을 받지 않고 운행하는 중.
막차는 5시 45분에 있다.

인천국제공항으로 들어가는 구조물. 모양이 특이하다.

용유역에서 내려 인천 221, 302, 306번 중 아무 것이나 골라 타면 을왕리 해수욕장까지 갈 수 있다.
정류장이 좀 찾기 힘든 편인데, 용유역 2번 출구로 나가 횟집들이 모여 있는 방향 쪽으로 가다 보면
파란색 지붕의 구조물이 있다. 그 곳에서 버스를 타면 된다.

오랜만에 본 바다는 여전히 아름다웠다.
아쉽게도 구름으로 인해 해가 완전히 지는 것은 보지 못했지만.