반응형

최근 디스토리 블로그의 에디터가 신버전으로 바뀌었습니다. 메뉴를 보던 도중 코드블럭 기능이 생겨서 한번 사용해 봤는데요. 소스코드는 입력이 되긴 하지만 그냥 밋밋하더군요. 그래서 이번에 다시 syntax highlight 기능이 되도록 설정을 해 봤습니다.

 

예전에 syntaxhighlighter 라는 스크립트를 설치한 적이 있었지만 이번에는 다른 스크립트를 찾아 봤습니다.

 

highlight.js 입니다. https://highlightjs.org/ 에서 다운 받을 수 있습니다.

 

이 스크립트를 추가하는 방법은 CDN 을 이용하는 방법과 직접 소스를 다운받아 자신의 블로그에 업로드하고 설정하는 방법이 있습니다.

자신의 블로그에 직접 파일을 업로드 할 수 없다면 CDN 을 이용한 설치만 가능합니다. 그리고 블로그의 HTML 직접 수정도 가능해야 이 스크립트를 설치할 수 있습니다.

 

위 스크린샷 화면의 "Get version XXXX" 라고 되어 있는 부분을 클릭하면 다음과 같은 화면이 나옵니다.

 

>

 

페이지의 상단부분에는 CDN 설정방법이 나와있습니다. 저는 아래쪽 jsdelivr 거를 썼는데 작동만 잘 되면 어느걸 써도 상관없습니다.

스크린샷 맨 아래 "style directory" 라는 곳을 클릭하면 style css 가 여러개 있는데 이중 자신의 맘에드는 css 를 선택해서 설치할 수 있습니다. 단 CDN 설치의 경우엔 .css 앞에 .min 을 붙여야 합니다.

예를 들어 내가 vs.css 라는 스타일을 쓰고 싶다면 첫째 줄 뒷부분에 있는 default.min.css 부분에  vs.min.css 라고 입력해 주면 됩니다. 메인페이지에서 여러 스타일을 직접 확인해 볼 수 있으니 참고하세요.

 

>

 

CDN 링크도 알았겠다. 이젠 블로그 스킨에서 HTML 만 수정해 주면 됩니다.

관리자 페이지에서 스킨편집 --> HTML 편집으로 들어 갑니다.

 

제가 추가한 소스코드 입니다.  CDN 부분은 그대로 복사해 넣은거고 마지막 줄만 추가 해 넣었습니다.

 

티스토리 에디터에서 '코드블럭' 을 선택해서 소스코드를 넣어준 경우 설치가 완료되면 바로 적용됩니다.

 

만일 CDN 을 이용하지 않고 직접 파일을 다운받아 설정해 준다면 위 스크린샷에서 보이는 '파일 업로드' 를 통해 파일을 업로드 하고 아래 처럼 설정 해 주면 됩니다.

<link rel="stylesheet" href="./images/atom-one-dark.css">
<script src="./images/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

(바로 위의 html 이 바로 highlight 가 적용된겁니다. 참고삼아 보세요.)

 

업로드할 파일은 highlight.pack.js 파일과 자신이 사용할 스타일 파일만 업로드 하면 됩니다.

위 예의 atom-one-dark.css 는 제 블로그에서 쓰는 스타일입니다. 다운받은 파일의 styles 디렉토리에서 자신이 사용할 스타일 파일을 업로드 하면 됩니다.

 

CDN 을 사용하지 않고 직접 파일을 블로그에 업로드해서 쓰는것의 장점은 좀 더 다양한 언어의 syntax highlight 가 가능하다는 것입니다.

CDN 으로 사용시 지원하는 프로그램언어는 24가지라고 합니다.

 

다운로드 페이지에서 사용할 언어를 선택해 다운로드 합니다

위 스크린샷이 다운로드 페이지 하단 부분입니다. 자신이 사용할 언어를 체크하고 아래의 다운로드 버튼을 누르면 프로그램을 다운 받을 수 있습니다. 상당히 많은 언어를 지원합니다.

 

많이 쓰이는 프로그램언어를 사용한다면 CDN 을 사용하는 방법으로 충분합니다만....직접 파일을 업로드 해서 설정한다고 해도 설정이 무척 간단해서 어렵지 않게 사용할 수 있을 겁니다.

 

반응형

pygame 은 이름대로 파이썬으로 게임제작을 할 수 있도록 만들어진 라이브러리 입니다.

 

아무래도 사용법을 익히려면 간단한거 하나 만들어 보는게 좋을꺼 같아 뭘 할까 하다가 벽돌깨기 게임을 만들어 보기로 했습니다.

딱히 강좌도 아니고....제대로 된 게임을 만드는것 자체도 목적이 아니라, 어디까지나 pygame 을 익히고 기록을 남겨두는게 목적이기 때문에 소스의 깔끔함이라던가 정돈이라던가 그딴거 없이 대충 갑니다.(파이썬도 사실 아직 잘 모릅니다)

pygame 의 문서만 보고 하는거라 잘못 아는것도 있을 수 있고, 더 좋은 방법이 있는데 어렵게 하는 것도 있을 수 있음을 미리 알려드립니다.

파이썬은 당연히 python 3.x 버전을 사용할 것 입니다.

 

>

 

첫번째는 그냥 기본적인 라이브러리 사용방법에 대한것이라 화면에 블럭을 한줄 표시하는 소스입니다.

import pygame
from block import *

SCREEN_X = 1024
SCREEN_Y = 768

pygame.init()   #pygame 라이브러리 초기화
screen = pygame.display.set_mode((SCREEN_X,SCREEN_Y))   #특정크기의 스크린 생성
background = pygame.Surface(screen.get_size())#스크린과 동일크기의 surface 생성. 
                                              #이곳에 실제 그림을 그린후 원래 스크린에 복사함

#소스코드 위치 아래 images 폴더에 그림파일을 보관함. 
#convert 는 좀 더 빠른속도를 낼수 있게 이미지를 변환한다고 함.
pic = pygame.image.load("images/bb.png").convert()
#pic = pygame.transform.scale(pic,(nx,ny))    #이미지 크기를 바꾸고 싶을때 사용함
block_list = pygame.sprite.Group()

#스프라이트를 생성하여 SpriteGroup 에 추가함. 스프라이트의 위치 좌표도 만들어 넣어준다
for i in range(1,9):    
    block = Block(pic)      #블럭객체 생성. 파라미터는 그림파일
    block.rect.x = i * 91   #화면상에 표시될 x 좌표
    block.rect.y = 100      #화면상에 표시될 y 좌표 
    block_list.add(block)   #객체를 sprite.group 에 추가

done = True

#게임의 메인루프. 루프에서 빠져나오면 게임은 종료됨
while done:        
    ev = pygame.event.get()
    for event in ev:
        if event.type ==pygame.QUIT:     #창의 종료버튼이 눌렸을때 게임종료
            done = False                 #false 값을 줌으로서 루프를 빠져나와 게임종료
        if event.type == pygame.MOUSEBUTTONDOWN:    #마우스가 눌렸을때 마우스의 위치 얻음
            pos = pygame.mouse.get_pos()            #현재 마우스 포인트의 위치좌표
        break

    block_list.draw(background)   #SpriteGroup 에 있는 스프라이트를 
                                  #background surface 에 모두 그림
    screen.blit(background,(0,0)) #background 를 screen 에 복사해 줌
    pygame.display.flip()          #화면 갱신 

대략적 설명은 소스에 주석으로 달려있으니 길게 설명할 건 없겠고요.

 

화면에 이미지(스프라이트)를 표시하는 방법은 sprite class 를 상속받은 block 클래스를 만들고 이 block 클래스의 객체를 생성해서 Sprite.Group 클래스에 추가합니다. 추가할때 각 이미지가 표시될 화면상 좌표를 block.rect.x 와 block.rect.y 에 넣어줍니다.

sprite.group 클래스의 draw 를 이용하면 sprite.group 에 추가된 스프라이트들을 모두 화면에 그려줍니다.

 

 

다음은 block 스프라이트 클래스 입니다.

import pygame

class Block(pygame.sprite.Sprite):
    def __init__(self,img):
        super().__init__()
        self.image = img
        self.rect = img.get_rect()
       

별건 없습니다. sprite 객체를 상속해서 block 클래스를 만듭니다. 사용할 이미지와 크기와 위치를 지정할 rect 변수를 지정해 줍니다.

 

 

실행화면

화면에 block 이미지를 8개 출력했습니다. 아래로 몇줄 더 출력하고 벽돌을 깰 공과 공을 튕겨낼 캐릭터 정도까지만 할 계획입니다. 공이 튕길 벽도 만들긴 해야 겠네요. ^^;

 

시험적으로 이것저것 해 볼 것이라 소스는 점점 엉망이 될것이고 짜투리 시간에 천천히 하는 거라 언제 끝날지 모릅니다. 1년이 될지 2년이 될지....

 

pygame 의 공식 홈페이지는 https://www.pygame.org 입니다.

 

반응형


이번 포스팅은 Python3 에서 랜덤값을 얻는 방법에 대해 간단히 정리해 봤습니다. 더 자세한 내용은 직접 파이썬 도큐먼트를 참고 하세요. ^^;


Python3 에서 랜덤 클래스를 사용하기 위하여....

import random 을 처음에 적어줍니다. 그리고 랜덤클래스는 인스턴스를 생성하지 않고 사용합니다.




1. random.seed([seed])

컴퓨터에서 만드는 랜덤값은 모두 계산에 의해 나오는 유사랜덤값입니다. 그러한 랜덤값을 좀더 랜덤하게 만들기 위해서 seed 값을 임의로 넣어줍니다. 만일 생략하거나 None 값인 경우 seed 값으로 현재 시간을 사용합니다.


2. random.random() 

0.0 <= x < 1.0 사이의 값을 출력합니다.


3. random.uniform(a.2, b.5)

a.2 <= x < b.5  사이의 값을 출력합니다.


4. random.randrange(b)

0 <= x < b 사이의 정수값을 출력합니다.


4. random.randrange(a,b)

a <= x < b  사이의 정수값을 출력합니다.


5. random.randint(a,b)

a <= x <= b  사이의 정수값을 출력합니다. 



위는 간단한 사용예 입니다. 뭐....별거 없습니다.


이상은 일반적인 랜덤값을 얻는 함수들이고요.....




파이썬에는 조금 재미있는 함수들이 있더군요.


6. random.choice(x)

x 에 list 변수등을 넣으면 리스트중에 하나의 값을 임의로 리턴해 줍니다.


7. random.shuffle(x)

x 에 list 변수등을 넣으면 내부 값들을 알아서 섞어 줍니다. 


8. random.sample(x,n)

x list 등에서 랜덤하게 n 개의 값을 리턴합니다.



위는 간단한 사용예 입니다. 나름 재미있게 사용할 수 있을것 같네요. 

반응형



파이썬3로 만들어본 간단한 환율 계산기 입니다. 환율 자료는 외환은행의 html 페이지를 간단히 파싱해서 사용하였습니다.


프로그램은 콘솔에서 작동하며 간단히 만들어 본것이라 변환된 값을 너무 신뢰하진 마시길 바랍니다.

요즘 프로그램을 너무 안하기도 했고, 파이썬 써본지도 꽤 되어서 그래도 가끔은 연습을 해 줘야 하지 않나...싶어서 한번 만들어 본것이니까요. ^^;


그런데 확실히 파이썬 편하긴 하네요. c 나 c++ 도 좀 해볼까 했더니 너무 귀찮다고 해야 하나.....불편하다고 해야 하나....^^;



import http.client
 
conn = http.client.HTTPConnection("community.fxkeb.com")
conn.request("GET","/fxportal/jsp/RS/DEPLOY_EXRATE/fxrate_all.html")
r = conn.getresponse()
hdata = r.read()
hdata2  = str(hdata,'euc-kr')   #웹데이터가 euc-kr 이라 변환해줌. 이 프로그램에선 안해줘도 상관은 없을것 같다.
 
fs = '<td width="420" height="28"><b><font color="#48668F">['
index1 = hdata2.find(fs)
index2 = hdata2.find(']<',index1)
 
cdate = hdata2[index1 + len(fs):index2]
cdate = cdate.replace("&nbsp;"," ")
 
fs = '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="table">'
index1 = hdata2.find(fs)
index2 = hdata2.find('</table>',index1)
 
tb = hdata2[index1+len(fs):index2]
 
tbsp = tb.split("</tr>")
del tbsp[0:2]  #환율표의 컬럼 항목이므로 계산에선 쓸일이 없다. 삭제
 
a=[]
va=[]
for t in tbsp:
    idx3=0
    while(1):
        idx1 = t.find('<td',idx3)
        if idx1 == -1 :
            if len(a) > 0 :
                va.append(a.copy())
            break
        idx2 = t.find('>',idx1)
        idx3 = t.find("<" ,idx2)
        a.append(t[idx2+1:idx3].replace("&nbsp;","").replace("\n","").replace("\t","").lstrip().rstrip())
 
    a.clear()       
 
va[1][6] = float(va[1][6]) /100  #일본 엔화는 100 에 대한 환율임
 
while(1):
    print("\n환율 기준 날짜 : {}".format(cdate))
    print("\n입력방법 : 숫자 변환하고싶은통화(예: 25 usd , 30 eur)")
    print("usd : 미국 , jpy : 일본 , eur : 유로 , cny : 중국 , gbp : 영국")
    print("프로그램 종료 : e 혹은 q 입력")
    print("\n입력 : ",end=" ")
    cur=input()
   
    if cur in ['e','q']:
        print("\n프로그램을 종료합니다.\n")
        break
   
    scur = cur.split(" ")
 
    if len(scur) < 2 :
        print("\n입력 오류. 형식에 맞게 입력해 주세요.\n")
        print("-"*60)
        continue
      
    sc = -1
    if scur[1] == "usd":
        sc = 0
    elif scur[1] == "jpy":
        sc = 1
    elif scur[1] == "eur":
        sc = 2
    elif scur[1] == "cny":
        sc = 3
    elif scur[1] == "gbp":
        sc = 4
 
    if sc == -1:
        print("\n입력오류입니다. 정확하게 입력해 주세요.\n")
        print("-"*60)
        continue
    try:   
        print("\n{0:,.2f} 원".format(float(va[sc][6]) * float(scur[0])))
    except ValueError:
        print("\n숫자를 입력해 주세요.\n")
       
    print("-"*60)   





프로그램은 터미널(콘솔)에서 실행됩니다. 위 소스를 적당한 이름으로 저장하시고 터미널을 여신후에


python3 프로그램이름.py


형식으로 실행하면 됩니다. 물론 파이썬3는 설치되어 있어야 하고, 리눅스의 경우는 대부분 기본으로 설치되어 있습니다.


프로그램 사용방법은 위 스샷에 다 설명되어 있고, 실제 실행하면 설명이 나오니 간단히 설명하자면.....

2.99 달러가 현재 국내 원화로 얼마인지를 보고 싶으면 "2.99 usd" 형식으로 입력하면 됩니다. 2.99 와 usd 사이에 빈칸 한칸을 넣어줘야 됩니다.


어차피 내가 보려고 남겨놓는거니까 설명은 이정도로만 하겠습니다. ^^;







반응형



아주 간단히 정리해 보았습니다. 더 상세한 내용은 python3 document 를 참고하세요. ^^;



일단...파이썬3에서는 파이썬2 버전과 달리 print 문에 반드시 괄호를 써야 한다는 점이 다릅니다.

print 를 사용하는 방법은 크게 2가지로 나뉩니다.

1. 기존 C 언어등에서 사용하는 방법

간단히 예제만 적어보겠습니다.


>>>print("a:%d b:%d" % (10,20))

a:10 b:20


C 언어에서 처럼 형식을 지정해서 출력하는 방법(%5d 같은....)도 가능합니다.


2. 파이썬3의 format 을 이용하는 방법


>>>"a:{0} b:{1}".format(10,20)

'a:10 b:20'


>>>"a:{1} b:{0}".format(10,20)

'a:20 b:10'

>>>"a:{} b:{}".format(10,20)

'a:10 b:20'


프린트 될 형식을 지정해 주는것도 가능합니다.


>>>"a:{0:4.2f}".format(343.2234)

'a:343.22'


형식을 지정하는 방법은 C 언어등에서 사용하는 방법과 비슷합니다.


3. 그외 참고할만한것들


>>> a="hello"
>>> a.center(20,"-")
'-------hello--------'
>>> a.ljust(20,"-")
'hello---------------'
>>> a.rjust(20,"-")
'---------------hello'


위의 예를 보면 어떻게 사용하는건지 알 수 있겠죠? ^^;


다음은 zfill()


>>> a=1234
>>> a.zfill(12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'zfill'
>>> str(a).zfill(12)
'000000001234'


숫자앞에 자리수에 맞추어서 '0' 을 넣어주는 함수인데 당연하지만 rjust 를 이용해도 똑같이 할 수 있습니다. 위의 예를 보면 알겠지만 zfill 함수는 string 쪽 함수입니다.(생각해 보면 당연합니다만....) 따라서 변수가 int 형이면 str 형으로 변환해서 사용해야 합니다.


다음 라인으로 넘어가지 않고 그 라인에 계속 출력하고 싶을때


print(a , end = " ")

print(b)


a가 출력된 이후 빈칸 이후에 b 가 줄바꿈 없이 출력 됩니다.



각 값들 간에 특별한 구분자를 넣고 싶을때.


>>> print(1,2,3,4,5)
1 2 3 4 5


>>> print(1,2,3,4,5,sep="---")
1---2---3---4---5




이 글을 쓴 이후에 추가된 문법입니다. 추가해 놓습니다.



예전에 테스트 해 봤을때는 우분투의 파이썬이 좀 낮은 버전이라 안되던데, 오늘 생각나서 테스트 해 보니 잘 되는군요.

그냥 간단히 스크린샷으로 설명은 대신 합니다.


반응형


2019년 8월 내용을 수정합니다.


시간이 오래 지나다 보니 대부분의 링크가 깨져 있어서 모두 삭제했습니다.

확인 결과 살아 있는 링크는 https://wikidocs.net/ 하나 뿐이군요. ㅡㅡ;


예전 점프 투 파이썬은 2.x 버전을 다루고 있었지만, 시간이 지난만큼 시대에 맞추어서 2.x 버전에서 3.x 버전으로 모두 개편되어 있습니다.


그외에 다른 파이썬 서적들도 추가되었으며 파이썬외의 책들도 추가되어 있으므로 다른 분야에 관심있으신 분들도 도움이 될것 같습니다.



반응형


최근에 안드로이드 sdk 를 설치하고 이클립스를 이용해 컴파일을 했습니다.
그런데 이클립스에서 프로그램을 실행하면 안드로이드 에뮬레이터는 실행이 되지만 컴파일한 프로그램이 에뮬에서 실행이 안되더군요.
그냥 안드로이드 에뮬레이터만 실행되서 덩그러니.....

왜 프로그램이 에뮬레이터에서 실행이 안되는지 참 답답하던차에....구글을 한참 뒤진 결과 adb.exe 서버를 중지하고 재 시작하면 된다는 글이 있더군요.

adb.exe 가 있는 위치는 만일 sdk를 c 드라이브에 설치를 했을 경우...

C:\Program Files (x86)\Android\android-sdk\platform-tools

입니다.

저는 64비트 윈도우라 경로가 "Program Files (x86)" 이지만 32비트 윈도우라면 저 부분은 "Program Files" 입니다.

아무튼 adb.exe 는 저 경로에 있고, 손쉽게 실행하려면 환경변수에 Path 를 지정해 주면 편리합니다.


adb 서버를 재 시작하는 방법은

adb kill-server
adb start-server

해주면 됩니다.

이렇게 했더니 매우 잘 되는군요. 좀 귀찮기는 한데 어쩔 수 없죠.

"Hello, World!!!" 보기가 이렇게 어려운건 처음이로군요. ㅡㅡ; 윈도우 7 쪽에선 자주 발생하는것 같은데 다른 방법을 혹시 아시면 알려주시면 고맙겠습니다.



반응형

온라인에서 볼 수 있는 파이썬 강좌인 점프 투 파이썬을 pdf 파일로 보실 수 있습니다.

http://wikidocs.net/read/750

에 가셔서 PDF 파일을 다운받아 보시면 됩니다.

좋은책 공개해 주신것에 대해 감사드립니다.


2013년 12월 13일 수정사항

지금은 pdf 파일로 무료로 제공되지는 않고 있고, 따로 구입을 하셔야 합니다. 온라인으로는 계속 무료로 이용할 수 있습니다.

시간이 지나다 보니 링크가 조금씩 달라져서 이를 수정해서 포스팅 해 두었으니 참고하세요.

새로운 포스팅 링크



반응형


국내 라디오 방송을 스트리밍으로 들으려면 기본적으로 윈도우에서 전용프로그램을 이용해야 합니다. 리눅스나 맥용 프로그램은 없습니다.

최근 윈도우가 아닌 환경에서 듣는 방법을 알려주는 블로그를 발견했습니다.

http://mielikki.tistory.com/197

발견하고 php 소스를 보니 웹페이지로 만들지 않고 프로그램으로 만들수도 있을것 같아 python 으로 만들어 보기로 했습니다. 간단한 연습겸 httplib 도 좀 써보고 싶어서요.

#!/usr/bin/python

import httplib
import subprocess
import sys

def CreateProcess(command):
    try:
        p = subprocess.Popen(command,shell=True)
    except OSError,e:
        print "oserror"

args = sys.argv

if len(args) < 2 :
    ch = 2
else :
    ch = args[1]

conn = httplib.HTTPConnection('kbs xx주소',80)
conn.request("GET","/xxxxxx/xxxxxxxxxx?id=xxxxx&channel=%s"%ch)
r1 = conn.getresponse()
st = r1.read()
conn.close()

index1 = st.find("mms:")
address = st[index1:]

arg = "totem %s"%address
CreateProcess(arg)

파이썬으로 하니 간단히 되는군요.

간단히 설명하면 httplib 라이브러리로 스트리밍 주소를 얻어서 totem 으로 그 주소를 넘겨 재생하게 하는 방식입니다. 리눅스에서 작성했기에 totem 을 쓰도록 했고 윈도우의 경우엔 조금만 수정해 주면 됩니다.

스트리밍 주소인 mms:// 를 얻었으면 다음부턴 그냥 그걸 쓰면 되지 않느냐고 생각하시겠지만 그렇게 얻은 주소를 나중에 사용하려고 하면 에러가 발생하며 재생이 안됩니다. 제 경우엔 이 프로그램을 써도 가끔 안되는 경우가 있더군요. 그땐 다시 시도해 보면 됩니다.

mms:// 주소를 얻는 부분은 kbs 가 딴지를 걸 경우를 대비해 xxx 로 처리해 두었는데 실제 사용하시겠다면 그 부분을 수정해 주면 되고 실제 주소는 위의 링크를 보시면 아실수 있습니다. 뭐...실제로 딴지를 걸만한 근거가 있는지는 모르겠는데 가급적 성가신일은 피하고 싶어서 그런것이니 양해를 바랍니다. ^^;

사용법은 파일이름을 kbsradio.py 라고 가정하면 .....

kbsradio.py 1
kbsradio.py 2


이런식으로 1 채널과 2채널을 선택해 주면 됩니다. 만일 뒤의 인자가 없을 경우 2 채널로 연결됩니다.

나중에 kbs에서 연결방식을 바뀌게 되면 언제든 이 프로그램은 작동하지 않을수 있습니다.

 

반응형

우분투 9.10 에서 테스트 한 결과입니다. 다른 리눅스에선 다를 수 있다는 점을 밝혀둡니다.

MonoDevelop 에서 Linq를 그냥 컴파일 하면 에러가 발생합니다. 해결방법은 의외로 간단합니다.


위 그림과 같이 Reference 에서 오른쪽 버튼클릭후 Edit Refereence 를 클릭합니다.


그런다음 위과 같이 System.Core 를 체크해 줍니다. 그러면 아래쪽에 표시된 것처럼 System.Core 패키지가 추가됩니다.


위쪽 소스가 보이고 아래쪽 Application Output 쪽에 결과가 보이시죠. Mono 에서도 Linq 잘 작동하는군요.

뭐...Mono 쓰시는 분 거의 없을것 같기도 하고, 별거아니지만 일단 기록해 둡니다. 혹시 필요하신분이 있으실지도 모르니까요. 저를 위한 기록이기도 하고요. ^^;


+ Recent posts