기본 콘텐츠로 건너뛰기

1월, 2021의 게시물 표시

AIDA64 Extreme 무료키 배포중입니다

 우연히 램 오버클럭 관련 글들을 검색중에 aida64 키를 무료로 받을 수 있다는 이야기를 듣고 저도 등록 했습니다.  https://winningpc.com/aida64-extreme-product-key-coupon-code-free/ 에 가셔서 키를 받으면 됩니다. "Click here..." 라고 된 곳을 클릭하고 키를 받으세요.     등록된 화면 입니다. 키 얻는 사이트에도 설명되어 있지만 만료일은 없습니다. 계속 사용 가능합니다. 다만 유지보수 만료일이 표시 되어 있죠. 2023년 6월 10일 입니다. 이때까지 나오는 aida64 까지는 업그레이드가 가능합니다.  > 시스템 정보를 확인하고 벤치마크도 가능한 프로그램입니다. 요즘엔 램 오버클럭 후에 성능을 확인하기 위해 많이들 사용하고 계시죠. 언제까지 배포하는지는 모르겠습니다. 필요하신 분은 빨리 받으세요. 

[pygame] Cannon 게임 프로젝트 6 - 총알 발사

 제작로그 6 - 총알 발사, Vector2 클래스의 이용 위 스크린샷은 게임에서 쓰이는 대포의 모습입니다.  대포는 빨간색으로 표시해 놓은곳을 중심으로 좌우로 90도씩 회전하도록 되어 있습니다. 이를 위해서는 2가지를 해결해야 합니다. 첫째는 대포를 중심을 기준으로 회전시켜야 했습니다. 이에 대해선 제 블로그에 pygame 의 회전을 다룬 다른 포스팅이 있는데 그걸 참고 하시면 됩니다. 링크 둘째는 총알을 발사했을때 특정 각도로 총알을 움직여야 하는 것이었습니다. 보통은 이런 경우 삼각함수를 이용해야 할테지만 pygame 에는 Vector2 라는 클래스가 있어서 이걸 이용할 수 있습니다.  다만 저도 아직 Vector2 클래스를 완전히 다 이해한 것은 아닙니다. 대충 보고 제가 필요한 부분만 이용한 것이라 더 간단한 방법이 있을 수 있음을 미리 알려드립니다. > 우선 Vector2 클래스에 대해 간단히 설명하겠습니다. Vector2 클래스는 죄표를 쉽게 다룰 수 있는 클래스 입니다.  예를 들어 (1,1) 에서 (1,100) 으로 공을 계속 1 만큼 이동시키는 건 매우 간단합니다. y 좌표에 계속 1 을 더하면 됩니다.  그런데 (10,10) 에서 (100,200) 으로 공을 1만큼 이동 시키려면 어떻게 해야 할까요? x,y 값에 각각 얼마씩을 더해줘야 할까요? 이걸 Vector2 클래스를 이용하면 별다른 수학적 계산 없이 할 수 있습니다. >>> a = pygame.math.Vector2(10,10) >>> b = pygame.math.Vector2(100,200) >>> c = b - a >>> c <Vector2(90, 190)> >>> d = c.normalize() >>> d <Vector2(0.428086, 0.903738)> 위에 보시면 아시겠지만 Vector 끼리 연산이 가능합니다.  b 에서 a 값을 빼서 두 좌표 사이

Aliexpress Standard Shipping 준등기 조심하세요

 아시는 분은 다 아시는 내용이긴 하던데요.  최근에 알리익스프레스에서 aliexpress standard shipping 으로 2개의 물건을 받았했습니다. 그런데 그 2개가 배송이 달랐습니다.  tracking no. 가 숫자만으로 된것과 LPxxxxxxxxSG(xxx 는 숫자) 로 된 것 2가지가 있더군요. 숫자만으로 된 트래킹 번호는 택배처럼 집으로 배달 되었으나....LPxxxxxSG 로 되어 있는 물품은 그냥 저희집 아파트의 우편함에 넣고 가버리더군요. 가끔 배달되었다는 문자를 받았다는 분들도 있었지만 배달완료 문자조차 받지 못한 분들이 많았습니다.  이게 바로 준등기라고 하더군요. 저는 트래킹이 되는 건 모두 직접 전달해 주는 건 줄 알았는데 'L' 로 시작하는 건 트래킹은 되지만 직접 전달이 아닌 그냥 우편함에 넣고 가버리면 되는 거라고 합니다. 이게 문제가 뭐냐 하면 일단 배달 완료가 되어 버리면 분실에 대해 아무도 책임지지 않는다는 겁니다. 트래킹이 안되면 내가 물건을 못받았을 경우 디스풋 걸어서 보상을 받을 수 있지만, 준등기는 직접 전달하지는 않으면서도 트래킹이 되기 때문에, 일단 배달 완료라고 나오면 끝입니다. 판매자도 우체국도 책임지지 않습니다. 그냥 구매자 손해가 되는 겁니다.  보통 LPxxxxxxSG 로 보내는 건 배터리가 있는 경우라고 하던데 모든 경우가 다 그런지는 모르겠습니다만...트래킹이 'L' 로 시작할 경우 가급적 빨리 물건을 우편함에서 회수하는 것이 좋을 것 같습니다.

amd ryzen pro 4350g 아주 간단히 테스트 해 봤습니다

 이번에 라이젠 4350g 로 업그레이드 하고 나서 간단히 몇가지 테스트 해 봤습니다. 전문 리뷰는 다른곳에 많이 있으니 그냥 그걸 보시는게....    딱히 벤치마크 프로그램을 갖고 있는게 없어서 그냥 흔한 cpu-z 을 돌렸습니다. i7-7700k 와 비슷하다는 이야기를 들어서 reference 로 설정하고 돌려 봤습니다. 싱글쓰레드 속도는 조금 낮고 멀티쓰레드 속도는 조금 높게 나왔네요. > 내장그래픽 성능은 그냥 2회차 시작한 위쳐 3로 대신해 보도록 하겠습니다. 예전 컴퓨터로 좌절을 맛보았던 노비그라드 입니다.  위 스크린샷은 1440x900 해상도로 돌린 것입니다. 그 이상의 해상도에선 30 프레임 방어를 제대로 못합니다. 900p 로는 대체적으로 30~40 프레임이 나오고 왠만하면 30 프레임이하로 떨어지는 경우는 없습니다. 기존에는 CPU 성능의 문제로 노비그라드에서 상당한 버벅거림을 보았지만 4350g 로는 CPU 사용률은 매우 여유롭습니다. 기존에 쓰던 컴퓨터와는 CPU 성능 자체가 너무 차이가 나서 정확한 비교는 힘들지만 위쳐 3 에서의 프레임을 보면 기존에 쓰던 amd hd 7770 과 성능 차이가 크지 않다는 느낌입니다. CPU 성능이 월등히 좋은데도 노비그라드 같은 곳 아니면 프레임이 기존 컴퓨터와 큰 차이가 없는 거 같거든요. 인터넷 벤치마크도 거의 비슷한 성능으로 나오더군요.  온라인 게임 같은 건 하지도 않아서 이야기 해 볼게 위쳐 3 밖에 없네요. 그냥 참고만 하세요. 큰 참고는 안되겠지만....^^; > 위의 위쳐 3 스크린샷을 보면 GPU 메모리를 거의 2G 다 쓰고 있습니다. 바이오스에서 GPU 설정을 GAME OPTIMIZE 로 설정했더니 비디오램을 2G 로 잡더군요.  오버 좀 해 보다 부팅이 안되서 바이오스 리셋 후에 GPU 설정을 잊어 버리고 그냥 AUTO 로 되어있는 상태에서 위쳐 3를 실행해 봤습니다.  GPU 설정이 AUTO로 되어 있어서 그래픽 메모리는 620메가가 할당되어 있습니다.    저의 예

[pygame] Cannon 게임 프로젝트 5 - 스프라이트 충돌 체크

 제작로그 5 - 스프라이트 충돌 체크 기본 스프라이트의 충돌체크 방법은 몇가지가 있는데요. 여기서는 mask 방식의 충돌체크만 설명하겠습니다.  사각형과 원 방식의 충돌체크는 충돌을 판단하는 기준만 다를뿐 기본적으로 비슷한 함수를 사용하기 때문에 뒤에 아주 간단히 설명 하겠습니다. > mask 충돌체크를 하기 위해선 기본적으로 이미지를 로딩할때 convert_alpha() 를 사용해야 합니다. robot_image = pygame.image.load('images/robot.png').convert_alpha() 위의 문장과 같이 이미지를 로드해야 합니다.  > 또 한가지 조건은 sprite 클래스에 mask 란 변수를 만들고 mask 데이터를 넣어 줘야 합니다.  class Robot(pygame.sprite.Sprite):     def __init__(self,img,x,y):         super().__init__()         self.image = img    #스프라이트 이미지 surface         self.rect = img.get_rect()  #이미지 rect 구해서 저장         self.rect.center = (x,y)    #캐릭터 위치좌표         self.x = x         self.y = y         self.mask = pygame.mask.from_surface(img) #충돌체크용 마스크 생성  보통 스프라이트 클래스는 기본적으로 위와 같이 만듭니다. 맨 마지막줄에 보면 pygame.mask.from_surface(img) 문장으로 이미지를 이용해서 mask 를 만들고 있습니다.  > 위의 2가지가 준비되었으면 이제 스프라이트 충돌 함수를 사용할 수 있습니다. hit_list = pygame.sprite.spritecollide(bullet,robot_list,True,pygame.sprite.collide_mask) 첫번째가 단일 스프라이트, 두번째가 스

[우분투 리눅스] 디스크 관리 프로그램 gnome-disks

 프로그램 메뉴에 보면 "디스크" 라고 되어 있는 프로그램 입니다. 윈도우의 "디스크 관리" 프로그램과 비슷한 프로그램이라고 보시면 됩니다.  제가 설치한 xubuntu(xfce4 환경) 에는 기본으로 설치되어 있지 않은데요. sudo apt install gnome-disks  라고 터미널에서 입력하거나 "소프트웨어" 프로그램에서 찾아서 설치하시면 됩니다. 의존성도 얼마 없어서 설치 용량도 별로 안먹습니다. 이 프로그램은 디스크 파티션 나누고 포맷하고 백업하고 할때도 편리합니다만...제 경우는 주로 윈도우쪽 디스크 마운트 할때 씁니다.  제 경우는 예전에 사놓은 60 기가 SSD 를 리눅스용으로 쓰고 있는데요. 윈도우에서는 리눅스 파티션을 못 읽으니까 데이터 들은 주로 NTFS 파티션에 저장하고, 리눅스에서 NTFS 파티션을 마운트 하는 식으로 쓰고 있습니다.  이 경우 부팅시에 NTFS 파티션을 마운트 해 놓도록 설정을 해 놓을 필요가 있는데....이 프로그램에서 설정 하면 편합니다. > 미리 마운트 할 파티션을 지정해 놓고 "마운트 옵션 편집" 으로 들어가서 위의 창이 뜨면 설정해 주면 됩니다.  "시작할 때 시스템에 마운트" 는 보통 기본으로 체크 되어 있으니 그냥 두시고요. "표시이름" 과 "마운트 지점" 정도 수정해 주시면 옵션은 알아서 변경되고요. 위에 표시해 놓은 부분 중에 "uid=1000" 정도만 추가 해 주면 됩니다. 사용자가 마운트한 디스크를 읽고 쓰기 위해 설정해 주는 것 입니다. uid 는 현재 계정 사용자의 uid 값을 넣어줘야 되는데요. 보통 계정을 한개만 쓰면 "1000" 번 입니다. 잘 모르면 사용하는 계정에 로그인 되어 있는 상태에서 터미널을 열고 "id" 라고 입력해 보면 해당 계정의 uid 값을 알 수 있습니다. 

crucial ddr4 - 3200 8기가 램 오버클럭 기록

극오버를 하실 분에겐 맞지 않는 글입니다. 호기심에 한번 시도 해 본 거고요. 그냥 기록삼아 적어 두는 글입니다. 그러니 극 오버 하실분은 굳이 읽으실 필요 없는 글이라는 걸 미리 말씀드립니다. > 이번에 crucial ddr4 - 3200  8기가램 2개로 16기가를 구성했습니다. 원래 오버에 크게 생각이 없었지만 구입한 김에 가볍게 해 보기로 했습니다.  목표는 뭐...황당할지 모르지만 기본 전압인 1.2v 에서 가볍게 오버해 보는 것입니다.  > 일단 처음에 램타를 조여보기로 했습니다. 인터넷 검색해 보니 cl 16 이 들어간다고 하더군요. cl 16 이하의 값을 넉넉하게 줘도 부팅이 안됩니다.  바이오스 초기화 하고 cl 18 을 넣어 봅니다. 부팅되고 윈도우도 무사히 진입합니다. > 그 다음은 1.2v 에서 3600 이 되는가에 대한 테스트 입니다. 램타는 모두 auto 로 두고 3600 으로 설정해보니 부팅도 잘 되고 윈도우도 잘 뜹니다. cpuid 를 보니 cl 26 으로 설정되어 있습니다. 아무리 그래도 26 은 좀 너무하지 않나 생각이 듭니다. ^^; 3200 램이 cl 22 니까 그 정도 까지 맞춰보자고 생각합니다. 아까 3200 에서 cl 18 이 되었으니 3600 이면 cl 22 는 들어 갈거라고 근거없이 추측해 봅니다. 그래서 1.2v 3600 22-24-24-24-50 으로 설정해서 부팅해 봅니다. 부팅되고 윈도우도 잘 뜹니다. 대충 웹서핑 좀 해 봤더니 별 문제 없는 거 같습니다. 마지막으로 testmem5 advanced 5 로 안정화 테스트를 해 봅니다. 주기는 10.  잘 되나 싶었는데 8 주기에서 멈추고 더이상 진행이 되지 않습니다. 에러가 표시되지는 않았지만 오버 실패 입니다.  > 8주기까지 성공한걸 보면 전압을 조금 더 주거나 cl 24 로 설정하면 무난히 성공할거 같습니다. cl 22 에서 이하의 값들을 조금 더 올려서 테스트 해 봐도 될거고요.  나중에 정말 한가하면 한번 해 봐야죠.  3600

AMD 라이젠 프로 4350G 로 컴퓨터를 업그레이드 했습니다

 몇년만에 업그레이드인지 모르겠네요.  DDR5 나올때까지 기다려야 하나 고민도 했었는데 업그레이드의 필요성이 생겨서 이번에 업그레이드 했습니다.  amd 780g 메인보드에 ddr2 램을 몇년을 썼는지 모르겠네요. 780g 보드는 이런저런 이유로 3번 바뀌었지만 램은 계속 써왔으니 참 징하게도 오래 썼습니다. 조금씩 업그레이드도 했습니다만....이것도 AMD 라 가능한거긴 했었죠. 성능은 인텔보다 떨어졌지만....ㅡㅡ; > 뭐....자세한건 나중에 천천히 쓰겠지만... 라이젠 4350G 를 사용할 메인보드로 asrock a520m-hdv 를 샀습니다. 저장장치는 일단 CSM 으로 기존걸 그냥 쓰다가 나중에 대용량(?) SSD 로 갈 생각이었는데요.  asrock a520m-hdv 메인보드가 CSM 설정이 안되서 결국 기존 MBR 로 설치된 하드, SSD 를 GPT 로 바꾸느라 고생 좀 했네요. 윈도우 설치하드는 MBR2GPT 를 이용해서 GPT 로 변환했고, 리눅스는 그냥 지우고 새로 설치했습니다. 메인보드 설정의 BOOT 부분에 CSM 이 있긴 있는데 눌러서 들어가 보면 "CSM is disable" 이라고만 되어 있고 변경할 수 있는 버튼이라던가 그런게 전혀 없습니다. secure boot 도 물론 꺼져 있는 상태였고요.  바이오스 업데이트 해도 마찬가지고요. 홈페이지 메뉴얼에는 분명 거기서 CSM 을 켤 수 있다고 했는데.....어쨌던 저는 실패했고요. 검색해 보니 다나와 사용기 부분에 CSM 이 설정이 안된다는 분이 한 분 계시던데 그분도 결국 설정 못하셨나 보더군요.  뭐...요즘 CSM 쓰실분은 별로 없으시겠지만 혹시라도 생각하시고 계신 분들은 주의가 필요할 것 같습니다. 혹시 나중에라도 설정하는 법을  알게되면 추가해 놓겠습니다. > 윈도우 10 에서 MBR2GPT 는 기존 데이터를 보존한 상태에서 상당히 간단하게 GPT 로 변경 해 주더군요. 다만 제 경우는 윈도우 10 을 2개 설치해서 멀티부팅으로 이용하고 있어서

python3 변수를 복사하기

>>> for j in range(10): ...     random.seed() ...     for i in range(6): ...         num.append(random.randint(0,9)) ...     num_col.append(num) ...     num.clear() ... >>> num_col [[], [], [], [], [], [], [], [], [], []] 위의 소스는 랜덤값 6개를 만들어 리스트를 만들고 그 값을 num_col 리스트에 추가 합니다. 하지만 결과는 아무값도 들어가지 않습니다. 왜냐 하면 그 아래 num.clear() 때문입니다.  프로그램을 배우신 분이라면 당연히 아시겠지만....num_col 에는 num 의 값이 들어가는게 아니라 주소값이 들어 가기 때문입니다. > 원하는 결과를 얻는 방법은 2가지가 있습니다.  for j in range(10):     random.seed()     for i in range(6):         num.append(random.randint(0,9))     num_col.append(num)     num=[] 위와 같이 num.clear() 대신 num=[] 같이 새로운 값을 할당해 버리면 됩니다. 그러면 새로운 객체가 생성되고 num 의 주소값이 바뀌기 때문에 저 위와 같은 문제가 없습니다.  > 또 한가지 방법이 copy 명령을 써서 변수를 복사 하는 겁니다.  import random import copy num=[] num_col=[] for j in range(10):     random.seed()     for i in range(6):         num.append(random.randint(0,9))     num_col.append(copy.copy(num))     num.clear() 이렇게 하면 새로운 객체를 생성해서 값을 모두 복사해서 num_col 에 추가 하기 때문에 문제가 없습니다.