Wednesday, July 29, 2015

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