라즈베리파이에의 python 3.8 에서 pillow를 pip 로 설치하려다 보니 오류가 발생한다.

 

오류 내용을 보니 다음과 같은 내용이 있다.

티스토리 붙여넣기 버그 때문에 에러 내용을 이미지로.....ㅠㅠ

오류 내용 중 The headers or library files could not be found for jpeg 이 부분을 가지고 구글링 해보니 

jpeg 관련 개발 라이브러리를 설치하면 된다고 한다.

아래 명령어로 추가 설치 후 pip install pillow 를 하면 정상적으로 설치 된다.

sudo apt-get install libjpeg-dev zlib1g-dev

 

 

'Programming > Python' 카테고리의 다른 글

pip pillow 설치 오류  (0) 2020.06.26


MFC 중 CDatabase 를 이용하여 Excel 파일을 컨트롤 할 수 있는 기능이 있다.

 


 

CDatabase  database;

CString  sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)");
CString  sExcelFile = "xls 파일 전체 경로";

CString  sSql;
CString  strError;

 

 

 

sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"), sDriver, sExcelFile, sExcelFile);
if(database.OpenEx(sSql, CDatabase::noOdbcDialog))
{
 
 sSql.Format(_T("SELECT * FROM [%s$A1:IV65536]"), "Address");

 


 

 

위와 같은 방법으로 xls 파일을 읽어 엑셀 데이터를 사용 할 수 있는데 2017년 10월 중순쯤부터 갑자기 오류가 나기 시작한다.

 

-5016

FIRSTROWHASNAMES\

잘못된 연결 문자열 특성입니다

 

 

뭐 위와 같은 내용의 에러 메시지가 보이게 된다.

 

 

구글링을 해보니 msexcl40.dll 파일이 업데이트 되면서부터 발생한 문제로 보인다.

 

문제가 발생하는 msexcl40.dll 의 버전은 4.0.9801.1 버전이고 크기는 345,088 byte 이다.

 

가장 좋은 방법은 KB4041681 업데이트를 제거 하는 방법이 있다.

 

하지만 최근 Windows 10 RS3 로 업데이트 하였다면 KB4041681 업데이트가 보이지 않는다.

 

이럴때는 msexcl40.dll 파일을 문제가 발생하지 않는 4.0.9801.0 버전으로 변경을 해주어야 하는데

 

이 파일은 특별한 권한이 있지 않는 이상 덮어쓰기가 되지 않는다.

 

msexcl40.dll 4.0.9801.0 버전 파일을 구하여 접근 가능한 경로에 파일을 복사 해둔다.

 

그리고 나서 레지스트티 편집기 (regedit.exe) 를 실행한다.

 

\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\Excel

 

위 경로로 이동한 다음 Win32 라는 키의 값을 보면

 

C:\Windows\SysWOW64\msexcl40.dll

 

이렇게 되어 있는데 이 앞쪽 경로를 msexcl40.dll 4.0.9801.0 버전 파일이 있는 경로로 변경해준다.

 

예를 들어 D 드라이브의 Driver 라는 경로에 msexcl40.dll 이 존재 한다면

 

d:\driver\msexcl40.dll

 

위와 같이 변경해 주면 된다.




혹여 파일이 필요하신 분들은 아래 파일을 사용.


msexcl40.dll  - 4.0.9801.0


msexcl40.zip


파일에 의심이 되시는 분들은c:\windows 에서 msexcl40.dll 을 검색해보시면 


여러 파일들이 검색이 되는데 이 중 크기가 다른 파일 또는 날짜가 다른 파일이 검색이 된다면 해당 파일의 속성을 클릭하여 버전 확인 후 


4.0.9801.0 버전 파일을 복사하여 사용하면 된다.



 

https://support.microsoft.com/ko-kr/help/4042007/description-of-the-security-update-for-the-microsoft-jet-database-engi

 

 

https://social.technet.microsoft.com/Forums/en-US/55b1d633-b715-491e-917e-b7cb01ae0523/error-in-windows-update-kb4041681-unexpected-error-from-external-database-driver-1?forum=sqldataaccess

 

 





만약 프로그램의 소스를 수정 할수 있는 상황 이라면 다음과 같이 코드를 수정 하면 작동 한다.



 

CDatabase  database;

//CString  sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)");

CString  sDriver = _T("Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)");

CString  sExcelFile = "xls 파일 전체 경로";

CString  sSql;
CString  strError;

 

 

 

sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"), sDriver, sExcelFile, sExcelFile);
if(database.OpenEx(sSql, CDatabase::noOdbcDialog))
{
 
 //sSql.Format(_T("SELECT * FROM [%s$A1:IV65536]"), "Address");

 sSql.Format(_T("SELECT * FROM [%s$]"), "Address");





Visual Studio Code 를 주력으로 사용중이다.

 

옛날 소스들을 Open 하다 보면 간혹 문자열들이 깨져서 보이는 경우가 많은데

 

이떄 VS Code 의 우측 아래쪽에 UTF-8 또는 EUC-KR 이라고 써져 있는 부분을 눌러

 

인코딩 하여 다시 열기 메뉴를 선택 해 인코딩 셋을 지정 해주면 된다.

 

 



그런데 인코딩 하여 다시 열기를 선택 하면



위와 같이 Korean (EUC-KR) 콘텐츠에서 추측함 이라고 어느 정도 인코딩셋을 추측을 해주는것을 볼 수 있다.


그렇다면 저 인코딩셋을 자동으로 변환하는 기능도 있을것 같아 찾아 보니 설정에서 가능한것으로 나온다.


파일 -> 기본 설정 -> 설정 메뉴를 클릭하자.



 위와 같은 설정 화면을 볼수 있다. 이떄 우측의 화면에


{

}


대괄호 사이에 다음 문구를 넣어 준다.


"files.autoGuessEncoding": true


 

 

JSON 구조의 설정 파일이므로 , 에 주의 해야 한다.

 

 위 문구를 추가 하고 저장한 다음 


UTF-8 문자열 파일이 아닌 다른 인코딩셋으로 된 파일을 열어보자.


이제 자동 변환되어 파일이 열리는것을 확인 할 수 있다.

 

 

  1. 유아독존 2017.09.29 09:05

    와우!!!!!! 감사합니다!!!!!!!!!!!!

  2. ㅇㅇ 2020.10.28 15:49

    배우고 갑니다 ~_~

 

Javascript 개발 중 console.log 를 이용해서 디버깅을 많이 하는데

 

개발이 끝나고 console.log 를 모두 지워야 하나? 라는 고민을 하다가

나중에 또 디버깅이 필요 하면 ?? 이라는 의문으로 구글링을 좀 해보니

 

다음과 같은 방법으로 함수형태로 대체가 가능.

 

 

isDebug = false; // toggle this to turn on / off for global controll

if (isDebug) var debug = console.log.bind(window.console)
else var debug = function(){}

 

위와 같이 선언 해 놓고

 

console.log 를 모두 debug 로 변경 하면 된다.

 

그러고 나서 isDebug 의 flag 값을 true 로 하면 console.log 가 작동 하고 그렇지 않으면 작동하지 않는다.

'Programming > javascript' 카테고리의 다른 글

Javascript console.log 함수 만들기  (0) 2016.10.04

 Python - Kivy 예제

 

Simple Clock

 

 

from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock

import time

class IncrediblyCrudeClock(Label):
    def update(self, *args):
        self.text = time.asctime()

class TimeApp(App):
    def build(self):
        crudeclock = IncrediblyCrudeClock()
        Clock.schedule_interval(crudeclock.update, 1)
        return crudeclock

if __name__ == "__main__":
    TimeApp().run()

 

 

 

 

원형 시계

 

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Color, Line
from kivy.uix.floatlayout import FloatLayout
from math import cos, sin, pi
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import NumericProperty

import datetime

kv = '''
#:import math math

[ClockNumber@Label]:
    text: str(ctx.i)
    pos_hint: {"center_x": 0.5+0.42*math.sin(math.pi/6*(ctx.i-12)), "center_y": 0.5+0.42*math.cos(math.pi/6*(ctx.i-12))}
    font_size: self.height/16

:
    face: face
    ticks: ticks
    FloatLayout:
        id: face
        size_hint: None, None
        pos_hint: {"center_x":0.5, "center_y":0.5}
        size: 0.9*min(root.size), 0.9*min(root.size)
        canvas:
            Color:
                rgb: 0.1, 0.1, 0.1
            Ellipse:
                size: self.size     
                pos: self.pos
        ClockNumber:
            i: 1
        ClockNumber:
            i: 2
        ClockNumber:
            i: 3
        ClockNumber:
            i: 4
        ClockNumber:
            i: 5
        ClockNumber:
            i: 6
        ClockNumber:
            i: 7
        ClockNumber:
            i: 8
        ClockNumber:
            i: 9
        ClockNumber:
            i: 10
        ClockNumber:
            i: 11
        ClockNumber:
            i: 12
    Ticks:
        id: ticks
        r: min(root.size)*0.9/2
'''
Builder.load_string(kv)

class MyClockWidget(FloatLayout):
    pass

class Ticks(Widget):
    def __init__(self, **kwargs):
        super(Ticks, self).__init__(**kwargs)
        self.bind(pos=self.update_clock)
        self.bind(size=self.update_clock)

    def update_clock(self, *args):
        self.canvas.clear()
        with self.canvas:
            time = datetime.datetime.now()
            Color(0.2, 0.5, 0.2)
            Line(points=[self.center_x, self.center_y, self.center_x+0.8*self.r*sin(pi/30*time.second), self.center_y+0.8*self.r*cos(pi/30*time.second)], width=1, cap="round")
            Color(0.3, 0.6, 0.3)
            Line(points=[self.center_x, self.center_y, self.center_x+0.7*self.r*sin(pi/30*time.minute), self.center_y+0.7*self.r*cos(pi/30*time.minute)], width=2, cap="round")
            Color(0.4, 0.7, 0.4)
            th = time.hour*60 + time.minute
            Line(points=[self.center_x, self.center_y, self.center_x+0.5*self.r*sin(pi/360*th), self.center_y+0.5*self.r*cos(pi/360*th)], width=3, cap="round")

class MyClockApp(App):
    def build(self):
        clock = MyClockWidget()
        Clock.schedule_interval(clock.ticks.update_clock, 1)
        return clock

if __name__ == '__main__':
    MyClockApp().run()

 

 

 

 

 

 

 

※ 출처 : http://stackoverflow.com/questions/18923321/making-a-clock-in-kivy

 

 

'Programming > Kivy' 카테고리의 다른 글

Kivy Library 시계 예제  (0) 2015.12.29

 

 

 

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "2643db8d-0f78-4476-8646-2a54c71b8ad3" --type headless

 

 

serv_addr.sin_addr.s_addr = INADDR_LOOPBACK

 

 

s_addr 에 값을 세팅할때 INADDR_LOOPBACK 플래그로 세팅하면 로컬에서만 접속됨.

#define MAKEBYTE(hi, lo)   ((unsigned char)0xF0 & (hi << 4)) | ((unsigned char)0x0F & (lo))
#define HIBYTE(w)    ((unsigned char)0xF0 & w) >> 4
#define LOBYTE(w)    ((unsigned char)0x0F & w);

 

 

unsigned char cSum = 0;

 //cSum = sTemp[0] | sTemp[1] << 4;
 cSum = MAKEBYTE(sTemp[0], sTemp[1]);

 sTemp[2] = HIBYTE(cSum);
 sTemp[3] = LOBYTE(cSum);

 

 

4비트 단위로 쪼개면 각각 0~15 값(2의 4승) 까지만 사용 가능

 

 

 

+ Recent posts