포터블기기 강좌


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

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 Android 4.1.1 JellyBean 루팅하기 [20] file Lock3rz 09.30 9625
40 카카오톡 연락처 연동 방지하는 방법 \(^0^)/ [11] file matsal 12.25 10167
39 [스압][엉성] Nook hd,hd+ 루팅및 apk설치법.. [2] 짐레이너 11.30 11070
38 크롬 - 쉽게 사이트 바로가기 만들기. file Freedom^^ 06.13 11127
37 티없이 맑게~ 자신있게~ 액정 보호지 붙이기~ [18] file yohan666 06.20 11365
36 gps가 없는 패드에서 gps사용하기 [13] file 꾸기 04.26 11972
35 USB Type-C 케이블과 USB 3.2 그래픽 출력단자 [2] matsal 01.01 12838
34 안드로이드 잠금패턴 잊었을 때 긴급 대처 [6] 기둥 07.07 14243
33 휴대폰 내장GPS이용 네비게이션 사용하기 2번째 방법 [1] 이스크라 04.26 14248
32 아이폰 케이블 수리 [2] file jubilee 10.08 14761
31 A10 ICS 루팅하기[JB루팅파일 추가] [7] file Lock3rz 03.24 14925
30 기기명 변경으로 어플 호환성 높이기.. [17] file 애쉬 05.09 17590
29 MMS 에 대한 이해 (OMA-MMS와 SKT-MMS 그리고 KT와 SK) [12] 피델리티 09.16 18434
28 아이폰 테더링을 위한 블루투스 페어링(연결)이 잘 안될 때 채리새우 03.08 19562
27 [입문자용] ADB 드라이버 강제 설치하기 [8] Lock3rz 05.12 19766
26 mx 플레이어에서 한글자막 쉽게 보기 [6] 푸른산 04.05 20918
25 onda 975i 1.0.6 으로 업데이트 방법 [1] n4 08.14 27562
24 외국 3G 스마트폰 샀을때 갑자기 No Service가 떠서 전화가 안될때 해결하는 방법.. [5] 星夜舞人 03.17 27577
23 중국산 8인치 윈도우 태블릿 터치감 기준 구매 가이드 [9] 풀맨 05.13 27760
22 성야무인식 타블렛 배터리 효율 측정공식 [13] file 星夜舞人 09.24 28849

오늘:
677
어제:
550
전체:
15,208,248