목표

  • 50MB가 넘어가는 엑셀 파일 두 개를 join시키는 것
  • 기준이 되는 column은 유동적이며, 사용자가 직접 고를 수 있을 것
  • 프로그래밍에 대한 지식이 없는 사람도 간단하게 사용할 수 있을 것.
  • 한 프로세스 내에서 끝날 것
  • 엑셀 제공 함수보다 속도가 빨라야 함(이건 무리일수도)

 

openpyxl은 쉽고 간단하나 속도가 느림 제대로 된 merge함수가 없는 것 같음아니면있나?

read_only로 불러오면 속도는 다소 빨라지나 iter_col 사용이 불가능하다. 열만 조회하는 것도 불가능

몇만 row 이상은 데이터 읽다가 세월이 끝나겠음 이러면 툴을 짜는 의미가 없다.

검색이 가능하면 좋겠으나 무작위 데이터의 산더미라 딱히 깔끔한 탐색 방법이 떠오르지않는다

 

pandas를 사용할 것, openpyxl보단 xlrd가 좋으나 1M행이 넘으면 열리지 않는다(넘는거같은데..)

엑셀파일을 그대로 불러오는 것보다 csv파일 형태로 불러오는 게 훨씬훨씬 빠르다

분단위를 초단위로 개선시킬 수 있다

 

한줄로 끝날 줄 알았더라면 진작에 pandas를 썼을텐데 ㄱ-

self.df2.columns.difference(self.df1.columns) -> 겹치는 열 날릴때, 조인에는 쓸수없다만

result_df = pd.merge(self.df1, self.df2on=self.col_select.get(), how="inner")

 

의문점

  • 함수를 사용한 경우 함수를 유지시켜야 하는가?
  • 기타 서식을 유지시키는 방법은?
  • 느린 건 내 컴퓨터의 문제가 아닌가?

간단한 미디어 스트리밍 api를 만들었는데, 월에 최최최대 45~60기가 가까이의 트래픽이 발생할 예정이다.(보통은 하루에 1기가 이하가 아닐까) 10메가 전후의 파일을 post로 업로드하면 파일에 대한 id값(md5해시)을 받고, 그 값을 통해 액세스하는 아주 원시적이고 위험하다 싶은 방식이다. 이 때 파일 자체의 위치는 겉으로 드러나지 않는다. 대신 무식하게 파일 전체를 response한다... php초보라 어쩔 수 없다. 잘 모른다. 되면 그만. ddos를 막기 위해 리퍼러 제한을 걸어두긴 했지만 리퍼러 째로 위조하면 그만이고...ㅡㅡ

기능 특성상 웬만한 호스팅 업체의 약관에 위배되는 탓인지(외부 트래픽, 미디어 스트리밍 등등) 수많은 해외 무료 호스팅 서비스를 이용해 보았으나 대부분 실사용하기 전 테스트 과정에서 곧바로 밴당하는 결말을 맞았다ㅡ.ㅡ 트래픽 제한값이내에서만 활용해도 약관 위배 여지가 있다면 칼같이 계정을 날려버린다. 어떠한 언질도 없이...

그래서 어쩔 수 없이 현재 유료로 사용중인 호스팅에 남는 트래픽을 이용할 겸 돌려볼까 싶다가도 어떤 불이익을 받게 될지 도무지 알 수 없어져 막막하기만 했다. 무엇보다 각종 기능이나 설정에 제한이 걸려 있어 내가 원하는 기능을 완벽하게 구현할 수 있는 호스팅 서비스가 생각보다 없었다. 그나마 찾은 곳들도 약관이 깐깐하거나 트래픽 문제가 심각했다. 원치않는 기싸움은 덤이다.

헌데 안드로이드 기반 휴대폰 굴러다니는 것 꽤 많지 않은가. 이걸 이용해도 되겠다는 생각이 들었다. 하루에 1~2기가는 흔히들 쓰니까 가정집에 부담가는 트래픽도 아니다. 무엇보다 내마음대로 원하는 환경을 구축할 수 있는 게 좋다.


여기까지가 일대기였고, 이후는 세팅에 대한 메모.

남는 폰과 공유기를 이용하면 간단하게 구축할 수 있다.

공유기는 네티스나 iptime제품이면 되는데, 다른 회사 제품도 가능한 모델은 있을 것 같다.

ddns설정으로 공유기 자체적으로 도메인을 연결시킬 수 있다.

보통 일반 가정에선 통신사에서 할당받는 ip를 쓰기 때문에 그때그때 ip 주소가 바뀌기 일쑨데, 알아서 따라가게끔(? 설정할 수 있다.

그 후 공기계로 같은 와이파이에 접속한 뒤 공유기 설정 페이지에 들어가 내부 ip를 고정시킨다. ddns설정을 해도 내부적으로 ip가 바뀌면 말짱 도루묵이기 때문이다.

이후 포트포워딩을 통해 휴대폰 ip의 특정 포트로 연결되도록 설정한다.

이 때 유의할 점은 통신사에 따라 포트 자체가 막혀있기도 하다는 점. 80이 막혀있다면 8080을 쓰고, 뭐 그렇게 하면 된다.

그리고 서버 역할을 수행해줄 휴대폰은 적당히 원하는 서버 앱을 받아서 깔도록 한다 ,, ,, 다양한 서드파티 프로그램이 제작되어 있다. 필자는 php서버가 필요해서 오픈소스 php 서버 앱을 찾아 깔았다.

그 뒤엔 그냥 일반 서버 이용하듯 하면 된다. 뒤에 포트 적는 것도 잊어선 안 된다.

끝.

메모용


XE기반 커뮤니티에 로그인해서 회원만 조회 가능한 글을 긁어오는 크롤러가 필요해서 대충 파이썬으로 짜보고 있는데,

로그인 시스템이 다른 사이트와 약간 다른 점이 있는지 단순히 POST에서 form data를 넘겨주는 걸로는 제대로 로그인처리가 되지 않는다.

크롬 개발자 도구에서 Network탭을 선택한 뒤, 리퀘스트가 어떻게 날아가는지 확인해보니 별도의 쿠키값이 넘어간다.

PHPSESSION SESSIONKEY 등 잡다한 값들이 들어간다... 이걸 어디서 구해와야하는지 감이 안 와서 헤맸으나 어떻게든 됐다.


1. request.Session()을 통해 세션을 생성한다.

2. 세션.post로 해당 사이트에 요청을 보낼 것(get X)

3. 리턴값의 cookies를 저장 -> 세션 키 등이 저장되어있다

4. xe의 procMemberLoginForm ACT에 로그인 데이터를 POST

-> 헤더와 데이터는 적당히 크롬 개발자모드에서 Network 녹화 기능을 통해 사이트로 넘어가는 값들대로 적어주면 된다

-> cookie파라미터는 3에서 저장한 값을 날려준다.


일단 이렇게 하면 로그인은 성공한다... 회원전용페이지로 리다이렉트 넘어가는 것도 잘 된다.

다만 이 세션을 그대로 유지하고 get으로 글을 조회하는 건 안되는거같다 -_-;;

좀 더 연구가 필요하지만 일단 로그인을 성공한 것에 의의를 두자

-> 지금은 된다. 첫 연결부터 세션으로 해야 유지가 제대로 된다.



자바로 설명돼있긴 하지만 충분히 자세하다.

슈퍼클래스를..공유하는,...뭐시깽이들의.. 인스턴스를... 한 클래스만으로... 자유롭게...만들고 싶을 때...쓰는 패턴...거시기..인 것 같긴 한데...

공부가 아직 더 필요한 듯..... 싱글톤과 결합해서 쓰는 듯 하다.

일반적인 프로그램보다 게임처럼 클래스가 사방팔방 여러 갈래로 나뉘고 동적으로 인스턴스를 생성하는 곳에 쓰이는 것 같음.

정말 뜬금없는 오류가 아닐 수 없다.

우선 나를 비롯한 많은 사람들이, "내가 뭔가 잘못한 게 있나?"하며 프로젝트 설정, 소스코드, 경로 설정을 이잡듯 뒤집어 엎었을 것이다.

한마디로 정리하자면, 내가 뭔가 잘못한 건 아니다. 당당히 남탓을 해도 된다(......)


일단 이 오류를 발견한 계기를 거슬러 올라가본다. 컴퓨터를 옮기기 전 VS2010에서 작업하던 게임 프로젝트가 있었다.

오랜만에 잠깐 손보고 싶어서 프로젝트를 열어봤는데, 설정을 티끌만치도 건들지 않고 전 환경과 동일한 경로, 같은 파일, 같은 폴더를 만들어 두었으나 링크에러만이 나를 반겼다!!

찾아보니 비주얼스튜디오 및 VC 컴파일러가 버전업하면서 sprintf, fprintf등등 std시리즈 함수가 define된 원형 함수를 약간 바꾼 듯 한데,

기존 구 VC 컴파일러로 작업된 SDL라이브러리가 현재는 없는(정확히는 이름이 다른) 함수를 쓰느라 깨져버린 것...

사실 구버전이라고 하기도 무색한게 불과 2010에서까지만해도 잘 되었고, 이런 io함수는 감히 쉽게 바꿀만한 함수가 아니기 때문에...

최적화 목적이 아니었을까 싶지만 대체 왜 바뀐건지 정확히는 모른다. 별로 알기도 귀찮고.


자세한 원인은 밑의 사진을 참조 - 출처는 스택오버플로우("unresolved external symbol __imp__fprintf and __imp____iob_func, SDL2").

함수 포인터 배열을 넘겨주던 기존 방식이, 파라미터 번호에 따라 해당 함수 포인터를 바로 넘겨주도록 바뀐 모양.


그래서 해결법은, 세 가지 방법 중 하나(혹은 둘?)를 고르면 된다.

1. 위의 스택오버플로우 글에 적혀있듯이 __iob_func() 함수를 직접 선언한다. stdin, stdout, stderr에러가 났을 때만 가능하지 싶다.

2. stdio함수 링크 오류인 경우 링커 옵션에 legacy_stdio_definitions.lib를 추가하라카신다.

3. 오픈 소스 라이브러리인 경우, 해당 사이트(나의 경우 sdl)에서 제공하는 라이브러리 프로젝트를 직접 받아 VS2015로 열면 컨버팅을 해주는데, 이걸 컴파일해서 출력된 lib, dll파일을 이용하는 것.



간만에 보는 참 반가운 친구. 오랜만이당☆★☆★!!!!!!!!!!


잡담.

몰랐는데 나 충돌처리 부분을 만들어 뒀었다...........................게임오버 화면도 만들어 뒀었다.

뭐가 귀찮아서 멈춘거지!!!근데 때려치고 비주얼 노벨식 어드벤처 게임 엔진 만들고싶다. 플랫포머는 은근히 그래픽적인 면에서 구현이 귀찮단말이지..

증상.

1. VS2010SP1가 설치가 안 되거나, 제거가 안 되고, 복구도 안 된다. (필자의 경우 설치 자체는 되어있다..)

2. "이 컴퓨터 상태에서는 지원되지 않으므로 Microsoft Visual Studio 2010 서비스 팩1을 설치할 수 없습니다." 라고 뜬다.

-> 이 오류는 주로 '용량이 없을 때' 일어나는 오류이므로 용량(5.5GB)부터 체크해야 한다. 확보 후에도 해당 에러가 난다면 계속 글을 읽기 바람.

3. 컴파일 시 COFF변환 오류가 뜬다. (LNK에러)

-> 해당 프로젝트가 VS2010SP1가 설치된 상태에서 생성되었으나 현재 VS2010에 SP1이 적용되지 않았을 때 발생하는 오류라고 한다.


이런!!에러가!!뜬다!!

이거때문에 비주얼 스튜디오를 지우고 깔기를 몇번했던가. 콘솔 프로젝트는 메니페스트 포함->아니오 설정으로 어느정도 커버가 됐는데

MFC 프로젝트는 도저히 컴파일이 안 됐음.

해외 쪽 웹에 있던 해결책은 이것이다. http://stackoverflow.com/questions/5296830/microsoft-visual-studio-2010-service-pack-1-installation/5300990#5300990


그러타!! 이 용자께서는 제어판에서 프로그램 추가/변경을 통해 Microsoft Office Developer Tools (x64)를 설치해보라고 하고 있다!!

우선 난 x86인고로 x86으로 설치해보았다.


요로코롬...

두둥.......두둥... 설치 완료 후 다시 SP1을 설치해본다.. 하지만 이걸 읽는 사람들은 미리 밑부분을 읽어 C++런타임을 제거한 후 설치하기바란다...


으아아!! 설치가 되고 있지 아니한가!!

그런데..........


무려 20~30분 간 기다린 후 마지막 설치 과정에 에러가 났다. 이번엔 또 뭐가 문제란 말인가ㅜㅜㅜㅜㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

해당 문제의 해결책도 찾아보았다..........


(고통)

설치를 취소하고 런타임을 제거한다!!!!!!!!!!!!!!!!!!!!!!!! 욕이 나오고 있으나 생략하겠다!!!!

다시.......ㅋ...........ㅋㅋㅋㅋ........ㅋㅋㅋ 서비스팩을 설치하고 있다.......웃음이 나온다......


그리고 끝으로 성공!

자잘한 설명은 생략하고 깔끔하게 적는다!

콘솔 어플리케이션처럼 기본 아이콘이 제공되지 않는 프로그램에 한하며 MFC 등은 적용 방식이 다르다!



1. 프로젝트 폴더 내이든 어디든 일단 변경하고픈 아이콘을 준비한다


2. 리소스파일->추가->리소스(R)... 클릭


3. 아이콘 가져오기


4. 컴파일



끝.

참고 : http://msdn.microsoft.com/ko-kr/library/7sx52ww7.aspx



TRACE 매크로

 비주얼 스튜디오 내 콘솔 창에서 확인할 수 있게 하는 매크로. 매크로이지만 뒤에 세미콜론(;)이 붙는다.

Debug빌드 시에만 출력되며, Release로 빌드하면 해당 부분이 사라진다.




스레드 내부에 TRACE 매크로를 위와 같이 사용해 보았다.

printf 거의 동일하게 사용되는 것을 알 수 있다.




출력 창에 이렇게 나오게 된다.

 설치할 적에는 창이 잘 떴는데, 제거를 하기 위해 인스톨 파일을 다시 실행하니

완전 투명하게 뜨거나 오른쪽 상단 구석에 검은 사각형만 떠서 골머리를 앓았습니다.

닷넷을 다시 깔아봐도 안되고, 시스템 복원을 해봐도 안되고, 무엇이 문제였나 했는데

설마하고 그래픽 카드 드라이버 설치하니 해결 -_-;;; 나의 오전을 돌려줘..


rescan.zip


32비트 환경에서 동작

자세한 사항은 사용법 참고

+ Recent posts