기본 콘텐츠로 건너뛰기

9월, 2020의 게시물 표시

자동차 라이트에 습기 문제

 이번 장마철에 차를 운행하다 보니 라이트에 습기가 차더군요. 라이트가 켜 있을때는 괜찮은데 주차후에 라이트가 꺼지면 습기가 찹니다.  > 비슷한 증상은 겨울에 발생합니다. 겨울에 히터를 틀고 운전을 하면 안쪽 유리에 습기가 찹니다. 바깥 공기와 내부 공기의 온도차 때문에 생기는 현상입니다. 이때 해결 방법은 공조기를 이용합니다. 결론적으론 공조기에 의해 에어컨이 켜지면서 습기를 제거함으로써 문제를 해결하죠. 라이트도 비슷합니다. 라이트가 꺼지면 온도가 내려가면서 안쪽 유리에 습기가 생기게 됩니다. 라이트가 꺼져서 온도가 내려가기는 하지만 그래도 외부에 비해 온도가 높기 때문에 온도차에 의해 습기가 생기게 되죠. 위에서 이야기 했던 겨울에 앞 유리창에 습기가 생기는 것과 똑 같은 현상입니다.  > 가끔 라이트가 완전 밀봉되어 있다고 생각하시는 분들이 있는데 그건 사실이 아니라고 합니다. 라이트의 높은 열때문에 밀봉될 수 없기 때문에 공기가 통하는 통로가 있습니다. 이곳으로 습기가 들어갈 수도 있습니다. 또한 제품을 생산할 때 건조한 공기를 주입하고 완전 밀봉하지 않는 한 제조 과정에서 습기가 들어갈 가능성도 얼마든지 있습니다. 물론 라이트의 불량일 가능성도 있습니다. 기본적으론 라이트에 외부의 물이 들어갈 수 없도록 되어 있는데 부분적으로 손상이 되어 틈이 발생하면 그곳으로 물이 유입될 가능성도 있습니다. 어떠한 경우인지는 잘 관찰해 봐야 겠지요.  일반적으로 습기가 생긴 후에 충분한 시간이 지나서 라이트의 공기가 완전히 식은 후에 라이트의 습기가 사라진다면 라이트의 문제일 가능성은 낮습니다.  만일 라이트에 단순히 습기가 차는게 아니라 아래쪽에 물이 제법 고이거나, 물방울이 많이 발생한다면 라이트의 불량을 의심해 볼 필요가 있습니다. 단, 비가 지속적으로 오거나 장마철이라 습도가 매우 높은 경우라던가 하는 상황에 따라 판단할 필요도 있습니다.  > 현재 제조사의 불량 기준은 시동을 켜고 라이트를 켜서 30분내에 습기가 사라지지 않으면 불량으로

파이썬에서 자료형을 파일로 저장하기

리스트,  튜플, 딕셔너리 같은 자료형을 파일로 저장하는 방법을 적어 보겠습니다. 예전에는 pickle 이라는 것도 썼었지만 지금은 다른 방법을 권하더군요. 그중 json 을 사용하는 방법을 적어 볼까 합니다. 간단히 대화형 인터프리터를 이용해서 사용해 보겠습니다. >>> i = [2,4,6,8,10] >>> i [2, 4, 6, 8, 10] >>> import json >>> with open('list.json','w') as f: ...     json.dump(i,f) >>> i=[] >>> i [] >>> with open('list.json','r') as f: ...     i=json.load(f) ... >>> i [2, 4, 6, 8, 10]  간단히 리스트 i 에 값을 넣고 json 을 이용해 list.json 파일로 기록한 다음 변수를 초기화 하고 저장된 파일을 읽어들이는 예제 입니다.  자료형을 매우 간단히 파일로 저장할 수 있습니다. 실제 파일을 텍스트 에디터로 읽어보면  [2, 4, 6, 8, 10] 위와 같이 기록되어 있습니다. > 딕셔너리도 위와 똑같이 사용가능합니다.  >>> i={'ip':'192.168.100.50','port':'6790'} >>> i {'ip': '192.168.100.50', 'port': '6790'} >>> import json >>> with open('dict.json','w') as f: ...     json.dump(i,f) >>> i=[] >>> i [] >&g

우분투에서 snap store 이용하는 방법

 우분투는 최근에 본격적으로 snap 을 이용하기 시작했습니다. 우분투의 기본 프로그램 설치 GUI 프로그램인 '소프트웨어' 프로그램에서 필요한 프로그램을 검색해 보면 기존의 apt 로 설치하는 앱과 snap 으로 설치하는 프로그램이 혼재되어 있습니다.  우분투의 snap 에는 snap store 라는 프로그램이 있고 이 프로그램은 snap 프로그램들만 보여줍니다.  snap store 를 설치하지 않은 상태에서 snap 프로그램을 검색해 보려면 다음 사이트에 들어가서 검색해 보면 됩니다. https://snapcraft.io/ 위 사이트에서 snap store 를 검색해 봅니다. 오른쪽에 install 버튼을 누르면 설치하는 방법이 나옵니다. 간단하게는 터미널을 열고 위에서 쓰여 있는것 처럼 'sudo snap install snap-store' 만 입력하면 아주 간단하게 설치할 수 있습니다.  View in Desktop Store 를 선택하면 '소프트웨어' 프로그램으로 연결할 수 있습니다. 위 프로그램에서 snap store 를 설치할 수 있습니다. >   스냅스토어는 snap 을 이용한 프로그램만 검색된다는거 외에는 '소프트웨어' 프로그램과 거의 동일하게 생겼습니다.  > 저는 크로미움을 설치 할겁니다. 왼쪽위의 검색 아이콘을 누르고 chromium 을 검색했습니다.  > 설치를 누르면 설치가됩니다. >    설치가 끝나면 Permission 이란 버튼이 보이는데요. snap 프로그램들은 가상환경에서 실행됩니다. 따라서 접근 권한에 대한 설정이 있습니다. 잘 모르시면 특별한 일 없으면 건드리실 필요는 없습니다. 일반적으로 프로그램 실행에 필요한 권한은 다 설정 되어 있는게 보통입니다. > snap store 의 '설치함' 버튼을 누르면 snap 으로 설치된 프로그램만 보여줍니다. snap  프로그램만 관리할때는 나름 편합니다. >   일반적으로 그냥

파이썬에서 랜덤값 사용방법

random은  파이썬에서 랜덤한 숫자를 얻기 위해 사용하는 모듈입니다. 간단히 사용법을 정리해 봤습니다. 1. random.seed() 컴퓨터에서 생성하는 랜덤값은 엄밀히 말하면 완전 랜덤은 아닙니다. 계산식에 의해서 만드는 유사 랜덤 값입니다. 따라서 seed 에 들어가는 숫자가 동일하면 나오는 랜덤 값도 동일합니다.  별도로 파이썬에선 위 명령을 주지 않아도 import 될때 현재 시간이 seed 가 되어서 적용되지만 원한다면 명시적으로 seed 를 호출할 수 있습니다. seed 에 원하는 숫자를 인자로 사용할 수 있으며 만일 위처럼 인자를 넣지 않을 경우 seed 는 현재시간을 사용합니다. 2. random.random()       0.0 <= x < 1.0 사이의 값을 출력합니다. 3. random.uniform(a.4, b.7)      a.4 <= x < b.7  사이의 값을 출력합니다. 4. random.randrange(b)      0 <= x < b 사이의 정수를 출력합니다. 5. random.randrange(a,b)      a <= x < b  사이의 정수를 출력합니다. 6. random.randint(a,b)      a <= x <= b  사이의 정수를 출력합니다. >>> import random >>> random.random() 0.3594656143224264 >>> random.uniform(3.5,4.2) 3.6876359136188914 >>> random.randrange(8,10) 8 >>> random.randint(5,10) 6   위와 같이 사용하면 됩니다. > 위의 함수 외에 좀 수고를 덜어 줄 수 있는 함수들도 있습니다.  만약에 오늘 점심메뉴에 뭘 먹을지 고민된다면....이걸 파이썬의 랜덤에 맡긴다면 다음과 같이 하면 됩니다. >>> a=['짜장

파이썬에서 print 문 사용형식 정리

 파이썬에서 문자 출력 방법에 대해 정리해 보겠습니다. 다른 언어 쓰다가 쓰려면 매번 헷갈려서... 가장 최근에 새로 생긴 문법부터 소개 하겠습니다. 대화형 인터프리터 환경에서 간단히 확인 가능합니다. > >>> x=1 >>> y=5 >>> print(f"x+y={x+y}") x+y=6 >>>print(f"x={x}") x=1  문자열 앞에 f 를 넣고 프린트 할 변수를 {} 안에 넣으면 되는 무척 간단한 문법입니다 > >>> print("x = %d, y = %d" % (x,y)) x = 1, y = 5   예전 C 언어등에서 사용했던 방식과 비슷한 방식 입니다.  > >>> print("x={0}, y={1}".format(x,y)) x=1, y=5 >>> print("x={}, y={}".format(x,y)) x=1, y=5 format 문을 이용하는 방법입니다. 괄호({}) 안에 숫자로 format 문의 첫번째 인자, 두번째 인자등을 선택합니다. 숫자없이 괄호만 쓸 경우 차례대로 대입됩니다. >  >>> print("a","b","c","d") a b c d >>> print("a","b","c","d",sep=',') a,b,c,d print 문에서 ',' 로 여러문자를 print 하면 빈칸으로 구분되는데 이를 다른 문자로 바꾸는 방법입니다. 여기서는 보이는것 처럼 ',' 로 바꿔봤습니다. > print(x,end=',') print(y) 파이썬에서 print 문은 인쇄하고 줄바꿈을 합니다. 만일

tkinter 콤보박스 간단사용예

 tkinter 의 간단한 콤보박스 사용예입니다.  콤보박스에서 컬러를 선택하면 그 아래 Label 의 배경색이 변합니다.  그 아래 Progressbar 는 그냥 심심해서(?) 넣어 본것 입니다. indeterminate 모드로 넣은 것인데 indeterminate 모드는 정확한 진행정도를 나타내는게 아니라 그냥 진행중이라는걸 표시하는 것입니다. 진행바가 그냥 좌우로 움직이기만 합니다.  from tkinter import * from tkinter.ttk import * from tkinter.messagebox import *   class Application(Frame):     def __init__(self, master=None):         super().__init__(master)         self.master = master         self.pack(side="top")         self.create_widgets()       def create_widgets(self):         self.cb = Combobox(width=10,value=['white','blue','yellow','black','red'])         self.cb.current(0)         self.cb.bind("<<ComboboxSelected>>", self.change_color)         self.cb.pack()                  self.style = Style()         self.style.configure("BW.TLabel", foreground="black", background="white")                   self.l1 = Label(text = "Color Label&qu

자동차 타이어 공기압

저 같은 경우는 직접 타이어 공기압을 확인 하고 넣어줍니다. 공기 넣으러 카센터 가는게 더 귀찮다는 이유도 있고 사실 카센터를 별로 믿지 못하는 것도 있고....그렇습니다.  예전에는 오토코스 제품을 썼는데 얼마전 고장나고 나서 지금은 자동차의 리페어킷(제조사 명칭은 모빌리티 키트)에 있는 소형 컴프레셔를 쓰고 있습니다.  https://lingel.tistory.com/300  위 링크에 있는 제품인데 차에 있는 기본장비라 그런지 기존의 오토코스 제품처럼 넣을 공기압 설정하고 버튼누르면 자동으로 넣어주는 그런 기능은 없고 직접 압력 게이지를 보고 알아서 스위치를 키고 꺼서 넣고 싶은 많큼 넣는 완전 수동이지만 생각보다 쓸만해서 새 제품을 구입할 필요는 없겠더군요. 요즘 차들은 대부분 생긴건 달라도 비슷한 소형 컴프레셔가 들어 있으니 같은 용도로 쓸 수 있습니다. 참고로 같이 들어있는 실란트는 타이어 펑크났을때 쓰는거니 단순히 공기압 체크하고 넣을땐 절대 쓰면 안됩니다.    넣어 주는 공기압은 운전석 문 열어보면 b 필러에 대부분 적혀 있고 자동차 메뉴얼에도 적혀 있습니다. 제 차인 모닝 메뉴얼에 있는 내용인데 33 psi 가 권장 공기압 입니다.  하지만 대부분 카센터에선 저대로 안넣어줍니다. 36 psi ~ 40 psi 정도 넣어 줍니다. 이유는 아마도 신경쓰지 않고 탈 수 있기 때문이 아닐까 싶습니다. 자주 공기압 넣어야 되면 차주도 귀찮고 카센터도 귀찮고....넉넉하게 넣어두면 그럴일이 없으니까요.  하지만 그래서 카센터에서 일반적으로 넣어주는 저 공기압이 좋으냐는 좀 다른 문제 입니다. 자동차 메이커가 추천 공기압을 저렇게 정해 놓은건 당연히 이유가 있을테니까요.  권장 공기압 쪽이 아무래도 타이어가 충격을 조금 더 완화해 줄거고 때문에 자동차 하체에 걸리는 충격도 좀 완화해 줄거고요. 아무래도 승차감도 좀 낫겠죠. 물론 승차감은 주관적이라 개인차는 있겠지만요.  제 경우를 말하자면 위에 쓴 리페어킷의 컴프레셔의 아날로그 게이지로 36 psi 로 넣

이번주 에픽 스토어 무료게임 FM2020 외

 에픽 스토어는 언제까지 무료게임을 배포할까요? 참...이제 조금 힘을 빼나 싶었는데....    FM 2020 을 무료로 주내요. 정말 충격과 공포입니다.  watch dogs 2 는 저번에 한번 무료로 풀린 적이 있긴 하지만 뭐....가운데 Stick It To The Man 도 스팀평가는 좋네요.  그나저나 FM 2020 은 말만 들었지 한번도 해 본적은 없는데 재미를 느낄 수 있을지 모르겠네요. 제가 스포츠 게임은 별로 안좋아 하는 편이라....

파이썬(Python) 온라인 이북

 파이썬을 공부하기 좋은 온라인 책입니다.  https://wikidocs.net/book/1 점프 투 파이썬 이라는 책으로 오프라인으로도 판매되고 있고요.  ebook 을 주문하실 수도 있으며, 온라인으로 그냥 보실 수도 있습니다.  제 경우는 예전에 오프라인으로 구입했었는데 그 당시 책은 2.x 기반이었고 온라인에서도 2.x 기반이었지만 최근에는 3.x 버전이 나온 지 오래 되었기 때문에 위 강좌 내용도 3.x 기반으로 완전히 개편되어 있습니다. 저 사이트 wikidocs 에는 위 책 말고도 여러 무료 서적이 있으니 한번 확인해 보시면 도움이 되실 겁니다. 

tkinter 기본 위젯 사용예

  그냥 tkinter 가 어떻게 쓰이는지 기본적인 작동을 하도록 만들어 본 것 입니다. 기본 골격은 파이썬 도큐먼트에 있는 예제 소스에서 가져왔고 거기에 살을 좀 붙였습니다. 가장 많이 쓰는 Label 과 버튼, 에디트 컨트롤의 기본적인 사용예 입니다. import tkinter as tk from tkinter import ttk from tkinter import messagebox class Application(ttk.Frame):     def __init__(self, master=None):         super().__init__(master)         self.master = master         self.pack(side="top")         self.create_widgets()     def create_widgets(self):         style = ttk.Style()        #style 설정         style.configure("BW.TLabel", foreground="black", background="white")                  self.l1 = ttk.Label(text = "Label1", style = "BW.TLabel")         self.l1.pack(side="top")                  self.textEntry = tk.StringVar() #파이썬의 String을 그냥 못쓰기때문에 tk의 String을 사용         e1 = ttk.Entry(textvariable = self.textEntry)         e1.pack()         e1.bind("<Return>",self.message)    #enter 키를 눌렀을때 message 함수 호출             

kotlin 람다 함수

 개인적으로 람다 함수는 영~~익숙해 지지 않는 면이 있어서 kotlin 을 좀 보는 김에 한번 정리를 해 봤습니다. //3번 fun strLength3(s:String) : Int{ return s.length } fun printStrLength(s:String,p:(String)->Int){ println("String = " + s) println("String Length = ${p(s)}" ) } fun main() { var strLength : (String) -> Int = {s -> s.length} //1번 var strLength2 = {s:String -> s.length} //2번 println("*".repeat(30)) println(strLength("Strike")) println(strLength2("Air")) println("*".repeat(30)) printStrLength("Hello, World!"){s:String -> s.length} //4번 println("*".repeat(30)) printStrLength("Water",strLength) //5번 println("*".repeat(30)) printStrLength("Bread",::strLength3) //6번 println("*".repeat(30)) } 1번이 정석대로의 선언방식이라고 합니다.   2번은 스마트 캐스팅을 이용한 선언이라던데(배우는 중이라 확실히는 모르겠습니다) 어쨌던 1번과 2번은 결과적으로 같은 내용입니다. 표현방법의 차이라고 할까요.   3번은 1번 2번과 같은데 흔히 사용