포터블기기 강좌


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

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
번호 제목 작성자 작성일 조회
61 구형 안드로이드폰들에서 2-step verification 사용하여 구글계정관리하기 [4] scotch 09.23 32833
60 iPhone 이 진짜 벽돌이 되었다고 느낄때. [16] 김강욱 09.24 33442
59 SmartQ Z-Watch의 배터리를 오래 사용할수 있는 팁입니다. [14] 저스틴 11.18 34948
58 아이튠즈에서 iOS 앱이 내 구매기록에서 사라졌을 때 [3] file 파리 02.04 32530
57 중국산 스마트폰 구입시 한국 사용 가능 여부 체크 포인트 [7] file tomeast 05.21 32386
56 onda 975i 1.0.6 으로 업데이트 방법 [1] n4 08.14 27570
55 성야무인식 타블렛 배터리 효율 측정공식 [13] file 星夜舞人 09.24 28857
54 초보자들을 위한 타오바오에서 중국 폰 구매시 주의 사항 [8] 풀맨 10.13 28883
53 중국산 태블릿 터치패널 교체 하기 [7] file 풀맨 01.23 30618
52 중국산 8인치 윈도우 태블릿 터치감 기준 구매 가이드 [9] 풀맨 05.13 27768
51 palm m500 롬 업그레이드 하기 [14] file jubilee 08.12 8648
50 CPU 세팅 어플 [1] 페퍼민트 08.26 4854
49 루팅 없이 통신사 좀비어플 비활성화 시키는 앱 [7] 페퍼민트 08.30 6422
48 MEEP 태블릿 > 일반 태블릿으로 변경하기 [1] 제이티 10.18 5222
47 중국에서 구입한 갤럭시S6 갤럭시노트5 같은폰은 폰카의 셔트음이 무음으로 되나요, [9] 그린 11.25 2339
46 중국 저가 AP 7세대의 운명과 8세대의 향방 [7] 星夜舞人 12.10 2138
45 미친척하고 비영리 Kickstarter 프로젝트 진행하기 (1편) 星夜舞人 12.28 3359
44 미친척하고 비영리 Kickstarter 프로젝트 진행하기 (2편) [2] 星夜舞人 12.28 4181
43 리눅스: bash스크립팅 [3] file 영진 01.29 3735
42 리눅스: 텍스트 브로우징을 이용하자 [3] file 영진 01.31 4332

오늘:
258
어제:
579
전체:
15,222,251