목표

  • 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")

 

의문점

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

그냥 별 건 없고 레트로에 꽂혔는데 적당한 테마가 없어서 윈98 컨셉으로 작업.

아이콘을 제외하고 최대한 이미지를 배제하였음. 대부분 CSS로 처리했다.

status bar에 있는 냥캣은 그냥 기믹. 누르면 랜덤으로 음악이 재생된다.

 

간단한 미디어 스트리밍 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으로 글을 조회하는 건 안되는거같다 -_-;;

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

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


제목은 쓸데없는 검색 유입을 막기 위해서,, 써방을 해 두었음

원래 목적은 익스프레스엔진용 모듈 중에 추가하면 재밌을 만한 거 없나..하다가 그냥 직접 만들어 볼까 싶기도 했고 의뢰받은 것도 있고 해서 연습 삼아 시작한 것. 포인트 복*도 몇 만 원 받던데 이거도 팔면 ..음 누가 사가긴 하려나...

php, html, javascript전부 다 잘 모르는 분야이기 때문에 그냥 야매로 만들었다ㅋㅋ jsp로 게시판 만들어본 게 웹에 대한 마지막 기억이고 ㅋㅋㅋㅋ 심지어 자바스크립트에서 클래스 선언도 어떻게 하는지 모르겠어서 레퍼런스 찾아보면서 시작했다ㅋㅋㅋㅋㅋ 만들어 놓고도 저게 맞는 건지 모르겠음ㅋㅋㅋㅋㅋ 카드 이쁘게 좌라락 뜨는 것도 어떻게 하면 좋을지 몰라서 이또한 야매로.. setTimeout과 setInterval로 아무렇게나 했고,, 솔직히 jquery slideDown이 너무 적절하게 잘 어울릴 것 같아서 이래저래 노력해봤는데 동작이 안 되어서,, 슬펐다.. jquery어떻게 쓰는지도 모르겠음..

하튼 그래도 이틀 정도 짬내니 금방 만든 것 같다..지만 솔직히 게임만 구현해둔 프로토타입이라 php와 db어쩌구저쩌구연동도 하려면 갈 길은 멀듯..

그냥, 오랜만에 뭔가 사소한 거라도 코딩을 해보니까 즐거웠다. 정말 많은 생각이 들 정도로..


카드 이미지는 OpenGameArt에서 프리 소스를 이용하였고, 나머지는 직접.



+. 급하게 모듈 연동 시키느라 다른 소스 막 갖다붙여서 쓰고 그랬네.. 공식적으로는 못쓰는 모듈이 될 것 같지만 개인용도로 의뢰받았으니..괜찮겠지

디자인 맡아주신 분 덕분에 지금은 스샷과 많이 달라졌고..ㅋㅋ 훨씬 예뻐졌다 :)

걍 내 컴에서 돌아가게 만들어서 호환안될수도있음

귀ㅣ차나서 웅........

랜선 꽂혀있는 상태에서 연결 끊어버리는 프로그램

직접랜선뽑고꼽고하기귀찮아서만듦 태블릿으론 명령어 치기 불편해서 자동으로 쳐주는 것임 끗


zzowitch.exe


미친 다음새기들 사진업로더를 플래시로만들면어떡해...............ㅡㅡ; 점점 퇴보하고있다...플래시없앨거라며..

메모용 글.

솔직히 내가 이걸 직접 설명할정도로 이해를 하진 못했다..

threshold는 '문턱'이라는 의미로, 한계치를 정해놓고 영상을 흑과 백으로 나누고 싶을때 쓴다. 이진화라고 하기도 함.

종류가 되게 다양한데 otsu threshold외에는 너무 진입장벽이 높다...(주관적)

통계적인 부분이 포함되어있는거같다. 난 일단 최대한 이해를 포기하도록했다....

4학년때 시뮬레이션 할 때가 생각나는거같긴한데...좋은기억이아니라서..


http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html

자바로 된 예제와 설명(영어의 압박은 논외로 치자)이 있다.


사용 예시.

원본, 이진화시킨 결과.

사실 그렇게 건전(?)한 짓은 아니다. 완제품을 뜯어보고 어떻게 만들었나 들여다보는 짓이라고 할 수 있다.

자바가 아무래도 머신 위에서 돌아가서 그런지 역공학 하기가 타 언어에 비해 비교적 쉬운 모양.

가끔 디컴파일을 해야할 때가 있어서 메모용으로 기록하는 글이라 정성은 좀 부족할지도 모른다.


1. APK 파일 추출

탐색기 앱 등이 보통 앱 백업 기능을 지원하는데 이를 이용하여서 컴퓨터로 옮겨도 되고, 구글링해서 추출하는 사이트를 통해 받아도 된다.

후자는 에러가 꽤 많이 나는 편이고, 페이지 내 낚시성 광고가 많아서 좀 그렇다.


2. Dex2Jar 다운로드

소스포지 통해서 최신버전을 받으면 된다. apk 파일이 있는 곳에 압축을 풀자.

탐색기에서 쉬프트(컨트롤인가...) 오른쪽 클릭을 하면 명령창을 해당 위치에서 바로 열 수 있다.

그대로 배치 파일 입력 -> 파라미터로 해당 apk파일명을 적으면 jar 파일이 뿅 하고 나온다.

이 때 유의해야할 부분은 경로 상에 '공백'이 있으면 에러가 발생한다는 점. 제대로 적었는데 에러가 나온다면 대부분 경로, 파일명 문제인 것 같다.


3. DECOMPILE!

자바 디컴파일러 아무거나 받아서 jar 파일을 열면 된다. 보통 jd gui를 사용하게 된다.

간혹, 소스가 보이지 않는 경우가 생기는데, 그 부분을 꼭 봐야겠다!면 해결방법은 간단하다.

디컴파일러를 다른걸 쓰면 된다 -_-

http://www.javadecompilers.com/ <- 온라인으로 디컴파일해주는 사이트이다. 파일로 저장도 가능.

간단한 자동 업데이트 프로그램이 필요해서 작업중. 네트워크상으로 뭔가 주고받는건 정말 오랜만에 만들어본다.

mfc로는 해본 적이 없는듯? 아무튼 기록용 글. 나중에 또 찾을거같아서.


* Rich Edit 2.0

  1. 단순히 추가만 해서는 사용이 불가능하다. 실행조차 안됨.
  2. "AfxInitRichEdit();"을 코드 상에 추가해야한다. OnInitDialog에 넣으면 될 줄 알았는데 안 됨.
  3. InitInstance내에 넣어야 한다고 한다. 하지만 이 코드는 ☆☆☆☆Dlg.cpp에는 없음.
  4. 알고보니 (적어도 나는) 절대 들어갈 일 없는 ☆☆☆☆.cpp파일에 있었다.
  5. 추가하니 잘 뜬다.
귀찮아서 안쓰기로 했다. 역시 리스트박스가 최고

* Progress Bar

  • 일반적으로 파일 다운 진행같은 경우 스레드로 만들어서 돌리는 모양.
  • 무한 진행은 SetMarquee(스레드없어도 문제X). 인자는 얼마나 천천히 진행하느냐 인 것 같은데, 0이어도 별 문제 없음.

* Ping

https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa366050(v=vs.85).aspx

귀찮네. 안 할래.


* HTTP 받기

WinInet이용. 인터넷 핸들 열고, URL 여는 식인 듯. 아 귀찮아.

이거때문에 파일 호스팅할 서버 찾고 홈페이지까지 열었다. 주객이 전도된 느낌마저 있다....

apache상에서 password protection 된 폴더는 Unauthorized가 뜬다 이거 어떻게 해결할지 고민중...

-> 약간 다른 함수를 쓰기로 했다.

https://support.microsoft.com/ko-kr/kb/234913 참조

첫번쨰 방법은 실패 -> username과 password지정해서 connect

두번째 방법은 http://microsoft.public.inetsdk.programming.wininet.narkive.com/8PDvK30R/filled-username-password-in-internetconnect-but-internetreadfile-shows-unauthorized

이것도 실패.......................... 아파치 폴더 잠금 때문인지 아닌지 모르겠지만 그냥 FTP를 쓰도록 하기로 하였다...^v^...


* ZIP 압축 해제

운영체제 자체에서 제공되는 걸 이용하는 방법, 직접 헤더 따서 읽어들이는 방법, 라이브러리를 이용하는 방법 등이 있다.

솔직히 이미 만들어져 있는 라이브러리 쓰는게 천배만배 나은 걸 아는데 무슨 생각인지 쓰기 싫다. ZIP이 생각보다 구조가 그리 복잡하진 않은듯. 압축된 경우 푸는 방법이 좀 의문이긴 하지만 뭐 푸는 법이 있겠지...

기존에 급조했던 매크로(http://zzoyu.tistory.com/105 이것도 공개X)가 생각보다 성능이 좋았다.

친구말로는 스탠딩석만 서른 다섯번 잡아봤다고(...)

내가 만들었지만 내 프로그램을 안믿는지라 별 기대는 안했다만 정말 예상외로 그냥 평범하게 '쓸만하다'.

그 때 부터 지금까지 많은 일이 있었고(내가 처음으로 아이돌에 입덕했다거나...미나야언니가가난해서미안해.....) 그래서 기왕 이렇게 된 거 좀 수정해보기로 했다.

나름 이런저런 특이한 시도를 많이 해봤기때문에 일단 사진을 모자이크하기로 한다(........어느정도 추정 가능한게 함정............)

지금은 저 사진에 비해 굉장히 길어졌다.... 구역건너뛰는 일명 이삭줍기도 넣었고 그외기타등등...............

기능 추가는 대부분 끝났고, 최적화나 자잘한 버그를 해결할 예정.

그리고 거의 취케팅 전용 프로그램이었는데, 티케팅도 가능하게 시도해보려한다.흐흐 <-가능하게 했는데 사이트 리뉴얼로 수정필요,,ㅅi파,,,,,,,,,,

오랜만에 프로그램 짜니까 참 즐겁다.

+ Recent posts