본문 바로가기

전체 글377

violation of our Malicious Behavior policy???? 크롤링 하는 서버가 http -> https로 변경됨에 따라 나 역시 서비스 중인 앱을 https로 변경하였다. 단순히 주소만 https로 변경하면 되는 줄 알았는데, 그게 아니었다 ㅠ_ㅠ 인증서 없이 간단하게 https 통신을 가능하게 하기 위해서 아래의 코드처럼 모든 인증서를 허용해주는 객체를 만들고 httpsConnection에 설정을 추가해 준다. TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager(){ public X509Certificate[] getAcceptedIssuers(){return new X509Certificate[0];} public void checkClientTrusted(X509Certificat.. 2020. 12. 4.
python에서 multi line으로 진행상황 나타내기 2016/11/19 - [Programming/python] - python에서 Progressbar 표현하기 python에서 Progressbar 표현하기 Python script를 실행하는데 이게 돌고 있는건지.. 아니면 멈춘건지 의구심이 들때가 간혹 있다. 언제 끝나는지 궁금하기도 하고... 그래서 python으로 progressbar를 표현할 수 있는게 없나 구글에서 찾아봄. htt.. yujuwon.tistory.com 위의 코드를 활용해서 multi line으로 화면에 진행상황을 출력하려고 했으나, 번번히 실패를 경험하게 된다. 가령 stdout에 '/r', '/n'등을 입력하고 flush를 하게 되면 출력하려고 하는 문장이 1줄로만 나타나거나, newline이 동작하여 아래로 쭉 써지게 된다.. 2019. 11. 24.
[ELASTIC SEARCH] full scan 하기 elastic의 index table을 full scan 하려고 아래와 같이 코드를 작성해서 호출했다. 처음에 total size를 가져온 후 from의 window size를 옮겨가며 전체 데이터를 가져오는 방식이다. 그런데 위와 같이 작업 할 경우 아래와 같은 에러메시지가 나타나게 된다. Limit of total fields 10000 in index has been exceeded. 해당 index에서의 최대 결과 윈도우는 기본으로 10000으로 설정되어 있으며( index.max_result_window) 해당 값을 넘어갈 시에 위와 같은 메시지가 발생한다. 내가 아무리 from을 13000, size를 100으로 줬다고 하더라도 es 내부에서는 전체 13100개를 가져온 후 0~13000개는 .. 2019. 8. 8.
[골빈해커의 3분 딥러닝] 05_01_TensorBoard 텐서플로우로 만든 모델을 저장 및 로딩하고 모델 파라미터 값들을 tensorboard에 표현해 보자. data = np.loadtxt('../data/data.csv', delimiter=',', unpack=True, dtype='float32') x_data = np.transpose(data[0:2]) y_data = np.transpose(data[2:]) data.csv 파일을 읽어서 앞의 두개의 데이터는 x_data로 나머지 데이터는 y_data에 저장하자. 참고로 data.csv는 아래의 형태로 구성되어 있다. 1 0 0 0 1 1 1 0 1 0 0 0 1 0 0 x_data의 경우 transpose를 안해줄 경우 2x3 형태의 데이터 [[1 1 0] [0 1 0]] 로 저장이 되기 때문에 .. 2019. 6. 7.
[골빈해커의 3분 딥러닝] 04_03_Word2Vec Word2Vec 모델을 deep learning을 이용해서 구현해 보자. import tensorflow as tf import matplotlib import matplotlib.pyplot as plt import numpy as np tensorflow와 matplotlib, numpy를 각각 import 한다. (각각 version : 1.13.0, 3.0.3, 1.16.3) matplotlib는 단어 -> 벡터로 변환 후 2차원 그래프 상에서 표시해주기 위한 용도로 사용된다. from matplotlib import font_manager, rc font_name = font_manager.FontProperties(fname="/usr/share/fonts/truetype/dejavu/guli.. 2019. 6. 6.
[골빈해커의 3분 딥러닝] 04_02_DeepNN 2019/06/04 - [machine learning] - [골빈해커의 3분 딥러닝] 04_01_classification [골빈해커의 3분 딥러닝] 04_01_classification 골빈 해커님이 쓰신 3분 딥러닝을 코드 위주로 설명한 포스팅. 4장 01에서는 2개의 특징 데이터(털, 날개)를 가지고 [기타, 포유류, 조류]를 분류하는 모델을 설명하고 있으며, 전체 코드는 아래와 같다. step by.. yujuwon.tistory.com 이전 포스팅에 이어 이번에는 layer를 2개를 만들어서 (Deep) 모델을 구현한 예제를 살펴보자. 이전 포스팅과의 차이라면 layer 개수와 loss 함수를 tf에서 제공하는 함수를 썼다는 정도이다. 전체 코드는 아래와 같다. 이전 포스팅과 차이점만 살펴보자.. 2019. 6. 5.
[골빈해커의 3분 딥러닝] 04_01_classification 골빈 해커님이 쓰신 3분 딥러닝을 코드 위주로 설명한 포스팅. 4장 01에서는 2개의 특징 데이터(털, 날개)를 가지고 [기타, 포유류, 조류]를 분류하는 모델을 설명하고 있으며, 전체 코드는 아래와 같다. step by step으로 하나씩 살펴보자. import tensorflow as tf import numpy as np 텐서플로우와 numpy를 import 하고 있다. 참고로 실행 환경에서의 텐서플로우와 numpy 버전은 각각 1.13.0, 1.16.3을 사용하였다. x_data = np.array([[0, 0], [1, 0], [1, 1], [0, 0], [0, 0], [0, 1]]) y_data = np.array([ [1, 0, 0], # 기타 [0, 1, 0], # 포유류 [0, 0, 1].. 2019. 6. 4.
centOS6 git HTTP request failed 버그 간만에 서버에 접속해서 git clone을 받으려고 하니깐 아래와 같은 에러 메시지가 발생한다. 처음에는 HTTP request 관련 문제라 서버 network을 살펴봤는데, 결과적으로는 centOS 6에서 나타나는 버그였다. 해결 방법은 nss와 curl 패키지를 업데이트 해주면 된다. $> yum update -y nss curl 만약에 yum update 서버도 못찾는 경우에는 (/etc/yum.repos.d/*.repo) 파일을 적당히 수정해 주자. update가 무사히 완료가 되었으면!! 다시 git clone을 시도해 보자. 만약에 nss와 curl을 업데이트 했는데도 똑같은 에러가 발생한다면?? git 1.7에서 나타나는 버그로 아래와 같이 git update를 진행해 주자. $> wget .. 2019. 6. 3.
TextToCNN으로 분류하기 Text를 마치 하나의 image로 인식해서 CNN 모델에 태우는 기법의 분류가 높은 성능을 보인다고 해서 나도 한번 테스트를 해봤다.우선 이론 및 모델은 김윤 교수님의 논문인 Convolutional Neural Networks for Sentence Classification을 차용했다. 모델에 대해 간략히 설명하자면, 어떤 하나의 문장이 들어오면 해당 문장을 단어로 나누고 (위의 그림의 경우에서는 wait, for, the, video, and가 됨) 각 단어에 대해 embedding vector를 적용 시킨다. 가령 단어의 개수가 5개고 embedding vector가 128차원이라면 매트릭스는 5 x 128의 행렬이 된다. 이렇게 구성된 행렬에 convolution을 적용시킨다. 논문에서는 co.. 2019. 1. 28.
android 오레오 적용기 구글에서 위와 같은 엄포장이 날라왔다!!!핵심은 11/1일 이전에 targetSdk version을 26이상으로 맞추라는 거였다. '그래.. 업데이트 한지도 오래됐으니깐 맞춰줄께~' 너무 쉽게 생각했었을까?? 바꿔야 할 게 너무 많았다. 일단 무턱대고 gradle의 targetsdk를 26으로 변경하고 build 했다. (support:appcompat-v7은 23.0.0, compileSDKVersion도 23으로 유지) '어~ build 잘되네.. 쉽자나~' 내 폰에서만 확인해 본 후, 무턱대고 배포 ㄱㄱ를 진행했다. 결과적으로 targetsdk를 26으로 바꾸자마자 크게 2가지 문제가 발생했다. 참고로 아래의 두 가지 문제를 해결하기 위해서는 compileSDKVersion과 support:appc.. 2018. 10. 31.
BloomFilter를 이용해서 데이터 찾기. map-reduce, 혹은 spark를 사용함에 있어서 가장 비용을 많이 차지하는 부분은 map-reduce의 reduce, spark에서는 join 부분일 것이다.join을 할때는 되도록 데이터 셋을 최대한 줄인 후에 join을 하는 게 가장 바람직하다. 만약에 실제 내가 사용할 데이터는 2억건인데 input으로 들어온 데이터가 400억 건이면 400억 건에 대해 일단 2억건으로 줄인 후 join을 진행하는게 맞다. 그럼 400억 건을 2억건으로 어떻게 줄일까?? 물론 2억건을 메모리로 다 올린 후에 for문으로 찾아도 된다. 그러나 지금 설명하려고 하는 내용은 bloomFilter를 활용해서 데이터를 줄이는 방법을 말하려고 한다. 일단 BloomFilter에 대해 간략히 설명하자면, 해시 테이블을 활.. 2018. 10. 30.
github 저장소에 ssh 연결하기 ssh로 git clone 하려고 하는데 인증 받지 않은 키라는 오류 메시지가 뜬다.그래서 서버 인증을 위한 인증키를 만들어 주려고 한다. 아래와 같이 인증키 페어를 생성하자. $> ssh-keygen 위의 명령어를 실행하면 인증 키가 담긴 파일 명, 패스워드 등을 입력할 수가 있다. 나는 기존에 id_rsa 키가 존재하기에 rd_user_rsa라고 새롭게 인증키를 생성했다. 이렇게 생성된 인증 키를 github에 등록하자. 저장소의 settings를 클릭 한 후 왼쪽 메뉴의 Deploy keys를 클릭하면 위와 같은 화면이 나타날 것이다. 오른 쪽 버튼인 Add deploy key를 누르고 rsa public key를 등록하자. (public key는 rsa.pub라고 써있는 유형을 말함) 이렇게 등록.. 2018. 10. 26.
안드로이드 해시 값 확인하기 카카오 API를 사용하기 위해서는 카카오 개발자 센터에서 안드로이드 키 해시를 등록해야 한다. 만약 해당 안드로이드와 다른 키 해시 값이 등록이 될 경우 API 값을 리턴 받을 수가 없다. 그리고 디버그용 해시 값과 릴리즈용 해시 값이 엄연히 다르기 때문에 두가지 경우의 해시 값을 모두 등록해주어야 한다. ( 카카오 개발자 센터에서 디버그 용, 릴리즈 용 애플리케이션을 각각 만들어야 한다는 소리) 우선 디버그용 키 해시 값 얻어오는 방법을 알아 보자. (맥 기준) $> keytool -exportcert -alias androiddebugkey -keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64 그리고 .. 2018. 10. 5.
Can`t load DaumMapEngineApi.so file 근 5년여 가량 개인 앱 서비스를 운영하고 있었는데, 갑자기 어제 구글플레이개발자콘솔 화면에 아래와 같이 에러 횟수가 확 늘어나는 것을 확인했다. 게다가 어떤 분이 지도보기를 하면 앱이 죽는다고 남겨 주신 리뷰가 해당 버그를 추적하는데 큰 힘이 되었다. 우선 버그를 찾기가 엄청 힘들었다. 일단 내 폰, 와이프 폰에서는 정상 동작 한다!! 사용자 실수인가??? 이런 의심도 찰나.. 우연찮게 빌린 처남 폰에서 지도보기를 하니 앱이 죽는다. -_-;;; 아... 최신 폰에서만 앱이 죽나 보다... 처남에게 양해를 구하고 디버깅 시작!! Can`t load DaumMapEngineApi.so file 위의 에러 메시지가 발생하며 MapView가 실행되지 않는 것을 확인할 수 있었다. '아.. 그래 지도 lib .. 2018. 10. 4.
[HBASE] 간단 명령어 이직하기 전에는 Hbase를 접할 경우가 1도 없었는데, 이직 후 Hbase를 가지고 노는 일이 많기에 사용법을 좀 정리해 보기로 했다. 우선 접속! 아래와 같이 접속하면 된다. $> hbase shell 만약에 customizing한 config 파일이 있고 이 설정대로 접속하고 싶다면? $> hbase --config shell ex) hbase --config /working/hbase shell 위의 명령이 성공하면 hbase shell 내부로 진입 한 것을 확인할 수가 있다.우선 snapshot list를 확인해 보자. hbase> list_snapshots 화면에 snapshot 리스트들이 출력되는 것을 확인할 수가 있다.불필요한 snapshot은 아래 명령을 써서 지워주자. hbase> de.. 2018. 9. 26.
2018 ifkakao 오랜만에 KAKAO에서 개발자 컨퍼런스를 개최했다. 바로 if kakao 등록부터 사람들로 바글바글 하다. KEYNOTE는 신정환 CTO와 김병학 AI장이 맡았다. 만약에 카카오가 한다면?? 이 주제가 메인인 것 같다. 카카오가 한다면 세상을 이렇게 바꿀 수 있다. 이런 의미인가? 대부분 AI 관련된 이야기가 주를 이뤘다. 1. KAKAOi가 작년에 출시되었고 이어서 카카오 미니가 출시되었다.2. 카카오 미니는 처음 발화 인식 실패율이 12%나 됐었는데 훈련을 통해 5.9%까지 낮췄다.3. 카카오 오픈 빌더가 오픈했다. 처음에는 15개의 도메인으로 시작했지만 지금은 40개의 도메인을 갖추었다. 또한 오픈빌더를 통해 개발 시 카카오톡과 함께 카카오미니도 연동할 수 있다.4. KAKAOi의 직접적인 성장도 .. 2018. 9. 5.
hadoop guava 버전 충돌 maven guava 버전을 20.0으로 올리고 map reduce 작업을 돌리는데 자꾸 이전 버전을 타는 문제가 발생했다. 문제는 정확히 아래와 같다. 목표는 입력 url에서 top Domain을 뽑아내기 위함임.top Domain을 뽑기 위해서 guava의 아래의 함수를 사용함. InternetDomainName.from(host_url).topPrivateDomain().toString(); 하지만 위의 함수를 map reduce를 통해 돌릴 경우 InternetDomainName{name="domain"} 이런 식으로 객체가 리턴이 됨. 아무래도 hadoop의 lib와 dependency lib가 서로 충돌이 일어나서 dependency lib를 못 타는 것 같았다. 이를 해결 하기 위해 mave.. 2018. 5. 28.
spaCy 사용하기 - Training Models spaCy의 훈련 로직은 대충 아래의 그림과 같다. training data는 text와 label로 구성이 되어져 있고, Model에서는 해당 text에 대해 label을 예측한다. 정답과 비교해서 차이만큼 gradient를 적용하고 이런식으로 반복함으로써 모델을 update하는 구조이다. spaCy에서는 GoldParse라는 class를 지원하는데 이걸 이용해서 모델을 학습할 수도 있다. entity 학습의 경우 BILUO scheme를 따른다. 또한 학습 성능을 향상시키기 위해 dropout을 적용할 수도 있다. 아래는 간단하게 모델을 업데이트 하는 코드를 설명하고 있다. english 타입의 빈 모델을 만들고, training data를 적당히 섞어 준 다음에 data를 1개씩 가져와서 모델을 업.. 2018. 4. 24.