포터블기기 강좌


컴퓨터를 켤때마다 매일 인용문이 나오면 좋겠다는 생각을 해봤습니다.

cowsay같은거도 있지만 실없는 소리보다는 뭔가 의미있는 내용이 나오는걸 찾아봤네요

그러다보니 theysaidso.com 에서 매일 서비스하는 인용글 서비스가 있네요

이걸 i3스테이터스 바에 띄우는걸 만들어 봤습니다.


그런데 이 i3스테이터스바를 그려주는 것은 시계등 자주 업데이트해야하는데 그때마다 저 REST서비스를 이용하면 안되겠죠

그래서 간단한 캐싱기법을 생각해봤습니다.

.cache/quotes로 한시간정도 최근의 인용문이 유지되도록 했습니다.

물론 bash상에서도 간단히 될거같은데 다른 파이선스크립트상에서 쓰려고 파이선모듈로 만들었습니다.




다음을 ~/bin에 넣고 conky에서 json으로 표시하면 됩니다.

만일 터미널실행시 표시하고 싶다면  .bashrc 에 quotes라고 추가하세요



먼저 캐시 모듈

cache.py

-------8<-------------------8<-------------------8<-------------------8<-------------------8<------------


#!/usr/bin/env python
import os,sys
import time as tm, datetime as dt


class Cache:
    def __init__(self, interval ):
        """ Use sys.argv joined by delimeter_ as key """
        a = []
        a.append(sys.argv[0].split("/")[-1])
        a += sys.argv[1:]
        self.key = "_".join(a)
        self.interval = interval
        self.file_name = os.environ['HOME']+"/.cache/"+self.key

    def read(self):
        value = None  # Assume cache is exprired by default
        timestamp = -1
        try:
            f = open(self.file_name, 'r')
            content = f.readlines()
            line = content[-1].rsplit(' ',1)
            value,timestamp = str(line[0]), float(line[1])
                 
        except IOError:
            pass
        if timestamp + self.interval < tm.time():  # means expired
            value = None
        return value

    def write(self,  value):
        f = open(self.file_name, 'w+')
        f.write(str(value) + " " + str(tm.time()))
        f.close()

    def clear():
        os.remove(self.file_name)







quotes  실행화일

(chmod +x quotes 로 실행권한주고 ~/bin에 넣습니다)

-------8<-------------------8<-------------------8<-------------------8<-------------------8<------------


#!/usr/bin/env python
import urllib, json
from cache import Cache

def get_quotes():
    """ Read cached data if exists """
    q_cache = Cache(3600)
    value = q_cache.read()

    if value == None:
        url="http://quotes.rest/qod.json?category=inspire"
        response = urllib.urlopen(url)
        data = json.loads(response.read())
        try:
            value = data["contents"]["quotes"][0]["quote"] + " - " +\
                data["contents"]["quotes"][0]["author"]
            q_cache.write(value)
        except KeyError:
            print "key error"
            print data
            pass   # return old value
    return value

msg = get_quotes()
print msg




screenshot
번호 제목 작성자 작성일 조회
41 95LX에서 라즈베리 파이 접속하기. [6] file piloteer 02.04 4488
40 리눅스: 생성일 기준으로 자동 파일 정리 스크립트 (초보) [3] file 건설노무자 02.22 4699
39 리눅스: vim: 설정하기 [1] file 영진 03.12 7221
38 리눅스: bash스크립팅: 간단한 통계내기 file 영진 03.31 6936
37 리눅스: 언어벤치마크 [4] file 영진 05.05 6803
36 안드로이드 태블릿 기본적인 이해 및 테스트 방법론 (제1강) file 星夜舞人 05.20 6627
35 리눅스: bash스크립팅 - 화일이름 일괄 바꾸기 [2] file 영진 05.22 6615
34 리눅스: GUI 바꾸기 [민트리눅스] [2] 영진 05.29 6878
33 T전화 : 기본앱 대신 플레이스토어 앱으로 쓰기 그리고 두개가 뭐가 다른가. [2] 피델리티 06.02 7104
32 리눅스: 간편하게 날씨예보보기 [2] file 영진 06.06 6698
31 리눅스: 대기오염지수 보기 [3] file 영진 06.08 6534
30 리눅스: 뉴스를 터미널에서 보자 [2] file 영진 06.10 6765
29 리눅스: 온라인 사전을 사용하자 [1] file 영진 06.11 6860
28 리눅스: vim을 이북리더로 쓰기 [2] file 영진 06.15 7133
27 리눅스: xfce4터미널 폰트조정하기 [4] file 영진 06.18 7251
26 리눅스: 데스크탑 노티피케이션 이용하기 [2] file 영진 06.24 7108
25 USB Type-C: 도깨비 방망이 ? [14] 사드사랑 03.07 5829
24 문리더 비슷한 iOS 용 텍스트 리더 [3] matsal 07.18 6487
23 USB Type-C: 극히 조심하세요. [7] 사드사랑 07.20 5281
22 리눅스: xfce4 화면 확대하기 영진 09.29 3853

오늘:
575
어제:
717
전체:
15,195,218