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.