Wednesday, September 23, 2015

리눅스 터미널에서 실행하던 프로그램을 터미널 접속 종료 후에도 계속 실행하게 하려면

nohup 명령어 & 한다.

Saturday, August 22, 2015

C#에서 부모의 Property를 공개하여 표시하는 방법

usercontrol을 만들때
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Bindable(true)]
public override string Text
{
   get { return base.Text; }
   set { base.Text = value; this.Invalidate(); }
}

라고 쓰면 Text property를 폼 디자이너에서 표시할 수 있다.

Thursday, July 30, 2015

import pymssql UnicodeDecodeError: 'ascii' Error.

pymssql을 python 2.7 에서 import 하려고 하면

UnicodeDecoeError: 'ascii' .... 하는 오류가 나타난다면

그 컴퓨터의 이름에 ascii로 표현 불가능한 문자가 있어서 그렇다.


이걸로 2일 삽질했다. 젠장.. 어떤 개새끼가 컴퓨터 이름에다가 한글 썼어,, 아우.. 미쳐버리겠네. 씨발놈새끼 뒤져라. 컴퓨터 이름, 프로젝트 파일 이름, 템포러리 디렉토리 이름에다가 영문 숫자 이외 다른 글자 넣는 새끼 만나면 뒤진다.




컴퓨터 이름을 영문과 숫자로만 채우면 해결됨.

--------------------------------------------------------------------------
>>> import pymssql
....
UnicodeDecodeError: 'ascii' Error


Change your computer name to simple alphabet and numeric


Wednesday, July 29, 2015

인간적으로 우리 UTF-8만 쓰자.

euc-kr 이고 cp949고 나발이고 죽겠다.

그냥 utf-8만 쓰자.

8bit character를 위해 만든 프로그램에서도 왠만하면 다 되잖어..

아... character set 때문에 하루 완전 날렸네.

오랫만에 삽질했다. 한여름 서버실에서 추위에 떨면서.


pymssql 에서 한글 깨짐 문제. (pymssql.OperationalError 20017 'DB-Lib error message 20017, Unexpected EOF from the server)


import pymssql

conn = pymssql.connect(host='192.168.11.101', user='user', password='password', database='db',charset='utf8')

위 와 같이 작성해서 돌렸는데 아래와 같은 메시지를 만난다면?

pymssql.OperationalError: (20017, 'DB-Lib error message 20017, severity 9:\nUnexpected EOF from the server\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')

mssql 에 접속할때 charset이 안맞아서 그렇다.

utf8 대신에 charset='ISO-8859-1' 로 수정해서 다시 시도해본다.
그래도 안되면 charset 항목을 제외시켜도 본다.

한글을 사용하는 경우 왠만하면 빼거나, utf8 이거나 ISO-8859-1 로 해서 될것임.

문제는 데이터베이스에서 자료를 읽으면 한글이 

"Á¦±æ"  요런식으로 깨진다는것.

이 현상은 한글(euc-kr / cp949)이 ISO-8859-1로 인코딩 되어서 그런것임. 이것을 euc-kr로 변환 했다가 다시 utf-8로 변환해서 보여주면됨.

    t = row["fieldname"]
    t = t.encode('ISO-8859-1')
    t=t.decode('euc-kr')
    print(t)



그런데 connect 할때  charset을 utf8로 하지 않으면 한글이 깨지고 난리 법석이다.
utf8만 쓰는게 답이다.


예제 소스 코드
--------------------------------------------------------
#-*- coding: utf-8 -*-
__author__ = 'kdw'

import pymssql

conn = pymssql.connect(host='???????, user='????', password='????', database='???',charset='utf8')

cur = conn.cursor(as_dict=True)
cur.execute("select '제길' as damm")
row = cur.fetchone()
while row:
    t = row["damm"]
    print(t) 
    t = t.encode('ISO-8859-1')
    t=t.decode('euc-kr')
    print (t)

    row = cur.fetchone()

cur.close()
cur = None

결과: ---------------------------------------------------------------------
C:\Python27\python.exe C:/Users/kdw/PycharmProjects/untitled/test.py

Á¦±æ
제길

Process finished with exit code 0



===========================================
In English 
===========================================

change connect "charset" parameter, try again

recommand charset:
ISO-8859-1
utf8



Thursday, July 2, 2015

Raspberry pi, python에서 공유메모리 사용하기 (Python shared memory usage)

Install python sysv_ipc module

#일단, 최신버전으로 시스템 업데이트
sudo apt-get update


#python-dev 설치
sudo apt-get install python-dev

#pip 설치( 어떻게 하는지는 나도 모르겠다. 알아서 하세요)

#pip를 통해 sysv_ipc 모듈 설치
sudo pip install sysv_ipc



#이제 사용하면됨

#아래는 python예제 ( 공유 메모리 만드는 방법 )

import sysv_ipc

memory = sysv_ipc.SharedMemory( 1234, flags=01000,size=10 ,mode=0600)
#읽기
vari = memory.read()
print(vari[0])

#쓰기
memory.write("abcdefg")



#아래는 공유메모리를 얻어다 쓰는놈

import sysv_ipc

memory = sysv_ipc.SharedMemory( 1234)
#읽기
vari = memory.read()
print(vari[0])

#쓰기
memory.write("abcdefg")


-----------------------------------
#install sysv_ipc via pip
sudo pip install sysv_ipc


example (shared memory creator):

import sysv_ipc

# for creator of shared memory.     1234 is unique key
memory = sysv_ipc.SharedMemory( 1234, flags=01000,size=10 ,mode=0600)

# read
vari = memory.read()

#write
memory.write("abcdefg")



example (shared memory user):
import sysv_ipc

# for user of shared memory
memory = sysv_ipc.SharedMemory( 1234 )  # only key number needs

# read
vari = memory.read()

#write
memory.write("abcdefg")






example (shared memory creator and user):
import sysv_ipc

# open shared memory by key
memory = sysv_ipc.SharedMemory( 1234 )  # only key number needs
# not exists shared memory. so create it.
if(memory == None):
     memory = sysv_ipc.SharedMemory( 1234, flags=01000,size=10 ,mode=0600)
# read
vari = memory.read()

#write
memory.write("abcdefg")




Friday, June 19, 2015

Raspberry pi compute module PCB 제작 완료

Raspberry pi Compute module을 위한 보드 완성.

Raspberry pi Compute module은 CPU,RAM,eMMC Memory로 되어있어서
전원만 넣어주면 돌아간다.

저전력이면서도 강력한 O/S의 지원으로 다양한 활용이 가능함.



어제 삽질한 이야기. (FPC 케이블 관련)

CPU가 있는 보드와 LED가 위치한 보드사이에 FPC 케이블이 연결되어있고
i2c 통신으로 PCF8575를 제어하여 LED를 켜는 방식으로 되어있는데

갑자기 i2c 통신이 이상하게 되다가 안되다가 도저히 방법을 알 수 없는 오류들이 나타났다.

pcf8575 칩을 갈아볼까 하다가 혹시 케이블에 문제가 있는지 테스터기로 케이블의 양 끝단을 확인해보니 끊겨있었다.

FPC 케이블의 약간 두꺼운 삽입용 단자 부분과 케이블의 얇은 부분이 맞닿은 곳의 도체가 속에서 끊어진 것이다. 이게 눈에 안보임.

케이블 교체 후 해결됨.

이것때문에 4시간 고생하고 정신적으로 매우 힘들었음.


FPC 케이블이 잘 망가지는것을 삽질로 알게 되었다.


Thursday, June 18, 2015

Raspberry pi DS1307 RTC rc.local 스크립트을 올바른 사용방법

DS1307 RTC칩을 i2c로 raspberry pi 에서 사용할 때 주의할점이 있음.

/etc/modules 에 다음을 추가
rtc-1307


/etc/rc.local 에 다음을 추가

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sleep 1
hwclock -s


** Raspberry pi Compute module 또는 2.0 에서는  i2c-1 이고, Raspberry pi 1 모델에서는
i2c-0 임.

** sleep 1  이부분이 중요.
enew_device에 ds1307을 0x68주소로 등록하라고 시킨 후 o/s에서 이를 인식하고 사용하기 까지 약간의 시간이 필요한것 같다. 그래서 sleep 을 줘야함.

hwclock -s 명령이 성공할때도 있고 실패할때도 있었음.



-------------------
If hwclock-s command returens error, use sleep few seconds before "hwclock -s" command.




Tuesday, May 5, 2015

라즈베리파이에서 FrameBuffer를 통한 한글 출력

라즈베리파이에 fbtft_device 드라이버를 통해 lcd를 연결 한 후
framebuffer 접근 방식으로 한글을 출력했다.

한글 폰트는 윈도우에서 글자 하나하나를 캡쳐했고 캡쳐한 글자는 총
2350자(KSC5601 코드)이다.

개발언어는 c언어.

기능: 한글 출력, 각종 폰트 효과(굵게, 테두리, 밑줄, 회전)
폰트 크기 : 16x16, 24x24 그 외 크기는 비트맵을 늘려서 표현
색상 : 16비트 컬러. 글자색과 배경색 지정가능, 배경 투명도 가능



리눅스 콘솔화면에서 커서 안보이게 하기(Hide cursor(caret) on console screen)

다음 명령을 실행한다.

setterm -cursor off


만약 부팅 후 표시되는 기본 콘솔창에서도 커서를 안보이게 하고 싶다면

/etc/rc.local 에 위 명령어를 추가한다.



* run bellow command

setterm -cursor off


* hide curosr on default console:

append "setterm -cursor off" to /etc/rc.local




Wednesday, April 1, 2015

Raspberry pi 에서 FT232 칩을 tty로 사용하기. (Use FT232 as tty on Raspberry pi )

1. FT232를 사용한 USB Serial port를 USB 포트에 연결한다.
2. lsusb 명령으로 FT232가 잡힌것을 확인한 후 ( ttyUSB0 로 잡힌것으로 가정 )

3. loopback 테스트를 위하여 rs-232 커넥터의 2번과 3번 핀을 서로 연결한다.

4. 다음과 같이 minicom을 실행하여 시험한다.
여기서 중요한것은 -s옵션을 줘서 setup으로 들어가서 Flow control을 None으로 하는것이다.
만약 Flow control이 Hardware로 되어있는경우 rx와 tx만 연결한 loopback 테스트에서 먹통이다. 물론 rts, dtr 등등 flow control에 사용되는 핀들을 모두 loop를 걸었다면 바로 잘 될것이다.

minicom실행방법:

minicom -D /dev/ttyUSB0 -b 115200 -s


minicom을 받아서 설치하는것은
sudo apt-get install minicom   명령으로 할 수 있다.


---------------------
If you fail on loopback test ( wiring rx - tx closed ),
Use minicom with No flow control option.

run minicom and enter to menu(ctrl + a , z key) ->  config minicom -> serial port setup -> Hardware flow control -> No 


Tuesday, March 24, 2015

라즈베리파이 컴퓨트 모듈의 eMMC 에 Raspbian 설치하기. Install raspbian into eMMC of Raspberry pi compute module.

http://www.raspberrypi.org/documentation/hardware/computemodule/cm-emmc-flashing.md

에 나와있는 내용대로 하되

중요함!!!! http://www.raspberrypi.org/forums/download/file.php?id=7429 여기 나온것처럼 2014-12-24-wheezy-raspbian.zip를 다운받아 img 파일을 구해 그것을 eMMC에 기록해 넣어야 한다.

최신버전 raspbian zip 파일은 절대 사용하면 안됨!!!!



Q: How to install raspbian into raspberry pi compute module.

A: Use .Img File.

Flash image file 2014-12-24-wheezy-raspbian.img in 2014-12-24-wheezy-raspbian.zip
Use .img file!!!! Important!!!!

and watch this site!
http://www.raspberrypi.org/forums/download/file.php?id=7429

Friday, February 27, 2015

raspberry pi에 USB Flash Memory(FAT32) 읽기 쓰기가 가능하도록 마운트 (Mount FAT32 usb stick read,write permission)

USB Flash memory를 FAT32로 포맷하고 이것을 마운트 하려면 다음과 같이 한다.

굵은 글씨는 명령어.

pi@rpi ~ $ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 005: ID 0781:5580 SanDisk Corp.
Bus 001 Device 004: ID 0d8c:0105 C-Media Electronics, Inc. CM108 Audio Controller


USB Flash memory가 lsusb에 나타났다.

pi@rpi ~ $ tail -f /var/log/messagesFeb 28 05:09:34 rpi kernel: [58069.795528] usb-storage 1-1.2:1.0: USB Mass Storage device detected
Feb 28 05:09:34 rpi kernel: [58069.796076] scsi host0: usb-storage 1-1.2:1.0
Feb 28 05:09:34 rpi kernel: [58069.820379] usbcore: registered new interface driver uas
Feb 28 05:09:35 rpi kernel: [58070.793472] scsi 0:0:0:0: Direct-Access     SanDisk  Extreme          0001 PQ: 0 ANSI: 6
Feb 28 05:09:35 rpi kernel: [58070.796241] sd 0:0:0:0: [sda] 31277232 512-byte logical blocks: (16.0 GB/14.9 GiB)
Feb 28 05:09:35 rpi kernel: [58070.797056] sd 0:0:0:0: [sda] Write Protect is off
Feb 28 05:09:35 rpi kernel: [58070.797777] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Feb 28 05:09:35 rpi kernel: [58070.802944]  sda: sda4Feb 28 05:09:35 rpi kernel: [58070.806540] sd 0:0:0:0: [sda] Attached SCSI disk
Feb 28 05:09:35 rpi kernel: [58070.825946] sd 0:0:0:0: Attached scsi generic sg0 type 0

꼽았을때 sda4로 잡혔음을 알 수 있다.

그렇다면 sda4를 마운트 하면됨.
pi@rpi ~ $ sudo mount -t vfat /dev/sda4 /media/usbstick -o rw,umask=111,dmask=000
pi@rpi ~ $ ls /media/usbstick/ -l

total 8
drwxrwxrwx 3 root root 8192 Feb 28 05:28 log


이제 usb flash memory의 내용이 잘 보임. 마운트가 잘되었음.

pi@rpi /media/usbstick/log/201502 $ ls -l
total 8
-rw-rw-rw- 1 root root 15 Feb 28 05:29 20150228142900.txt


중요한것은 umask와 dmask에 따라서 디렉토리와 파일의 권한이 달라진다는점.


Thursday, February 26, 2015

라즈베리파이에서 i2c 핀을 사용하면 복구모드로 부팅될때 해결방법(raspberry pi recovery mode when i2c pin connected)

I2C SDA와 SCL핀은 복구모드 진입용으로 사용되고 있다.

부팅시 복구모드로 빠져버리는 경우는 i2c scl과 sda핀중 하나라도 low가 된것이다.
(i2c 관련 회로를 잘못 만들면 그렇게 되는 경우가 있음)

부팅시 반드시 SDA와 SCL핀은 high가 되거나 high impedence가 되도록 하면된다.


Raspberry pi will boot to recovery mode when  i2c sda pin or scl pin is LOW.

i2c sda and scl pin must HIGH or High impedence( disconnect ) while booting term.

Check your circuit

Raspberry pi에 vsftpd 쉽게 설정하기. (easy configuration for raspberry pi vsftp)

vsftpd 설치( install vsftpd )
명령어(command): sudo apt-get install vsftpd


설정파일 편집 (open configuration file)
명령어(command): sudo nano /etc/vsftpd.conf


모든 내용을 지운다. (erase all content of vsftpd.conf file)

아래 내용을 입력하고 저장. (fill content as bellow text, and write)

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
pam_service_name=vsftpd
session_support=YES
chroot_local_user=NO
listen=YES
listen_port=21


vsftpd 재시작. (restart vsftpd service)

명령어(command) : sudo service vsftpd restart


이제 pi 계정으로 로그인(Login ftp as "pi")