2018년 11월 9일 금요일

읽기 전용인 input 태그의 값이 변경되었을 때, 감지 방법

진짜.. 이걸로.. 쌩쑈를 다 해서리.. 정리차 적어 놓음..

0. 쇼핑몰 리뉴얼 중 주문 화면에서 우편 번호를 받으면 이게 산간 오지 지역이면 도선료를 추가로 부여해야 하는 상황 발생.

1. 쇼핑몰 솔루션을 자체 마이그레이션 하는 것이기에 알아서 해야 함.

2. daum의 주소찾기 사용 중.

3. 솔루션에서 script로 자체 기능 구현해 놨음.. button 태그 클릭하면 class 감지해서 우편번호 검색기가 뜨게..

4. 문제는 우편 번호를 받는 input 태그가 readonly 속성이라.. 값을 전~~~혀 읽을 수 없음!!

5. 어쩔까 고민하고, 구글링 한 결과.. readonly 속성이 붙은 건 어쩔 수 없고, 키 입력이 안들어오게 막는게 더 낫겠다란 생각이 들음. (readonly 속성을 때면.. 값이라도 읽을 수 있으니..)

6. css로 readonly 속성이 된 것처럼 보이게 하고.. 자~~ 이제 onchange 이벤트로 값을 읽어보자!!!

7. 어? 이거 왜 못 읽지?

8. 이리저리 삽질 시작.. jquery로 이벤트 리스너도 추가. bind도 해보고 triger도 해보고..

9. 안된다!!! 이 쉬운게 안된다니!!! 이게 뭔 상황이지??

10. 좀 더 구글링을 해보니.. change란 이벤트는 키 입력이 이뤄져야 발생이 되고, 값을 고쳐준 경우엔 별도의 처리가 필요하다!~ 란 걸 알게됨..

11. 이하. 조치 내용...

12. 아직도 배울게 많군화~~~~

  1. var $input = $("#rcvPost")//이놈이 오늘의 주인공 우편번호 input box!!   
  2. $("#rcvPost").on('input'function() {
  3.     // Do this when value changes
  4.     console.log("Input text changed!" + $(this).val());
  5. });


이렇게 javascript에서 선언하고..

별도의 함수를 구현해야 한다.. 이하 코드..

  1. (function ($) {
  2.     var originalVal = $.fn.val;
  3.     $.fn.val = function (value) {
  4.         var res = originalVal.apply(this, arguments);
  5.  
  6.         if (this.is('input:text') && arguments.length >= 1) {
  7.             // this is input type=text setter
  8.             this.trigger("input");
  9.         }
  10.  
  11.         return res;
  12.     };
  13. })(jQuery);

이 같이 처리하면.. 값 변경이 일어나면.. 입력이 된 것처럼 동작시킨다..

진짜 끗!!





2018년 10월 31일 수요일

SQL 조건절에 CASE 문으로 여러 조건 결합하기...

오늘의 난관..

SQL 쿼리에서 기존에 프로시저를

8개 매장별로 조회하게 만들었는데..

오늘 요건이 인터넷 매장은 따로 보고...

전체 매장을 선택하면 인터넷 매장을 제외한 나머지들의 합산만 보고 싶다고 하여..

궁리...

프로시저에 임시테이블을 써서.. 분기문으로 나눌수가 없음..

조건절에서 제어해야 할 거 같아서.. 이리저리 구글링해 보니..

CASE WHEN을 OR로 연결해서 쓸 수 있다는 걸 알게 됨..

5000 이란 코드가 들어오면.. 인터넷 매장 (5040)을 제외한 나머지를 조회 시키고..

해당 매장코드가 들어오면 정상조회를 시키는 쿼리를 결국 완성..


  1. AND
  2.         (
  3.             (
  4.                 CASE WHEN @LOC = '5000' THEN '5010' END = 매장코드컬럼
  5.                 OR
  6.                 CASE WHEN @LOC = '5000' THEN '5020' END = 매장코드컬럼
  7.                 OR
  8.                 CASE WHEN @LOC = '5000' THEN '5030' END = 매장코드컬럼
  9.                 OR
  10.                 CASE WHEN @LOC = '5000' THEN '5060' END = 매장코드컬럼
  11.                 OR
  12.                 CASE WHEN @LOC = '5000' THEN '5070' END = 매장코드컬럼
  13.                 OR
  14.                 CASE WHEN @LOC = '5000' THEN '5080' END = 매장코드컬럼
  15.                 OR
  16.                 CASE WHEN @LOC = '5000' THEN '5090' END = 매장코드컬럼
  17.             )
  18.             OR 매장코드컬럼 LIKE ''+ @LOC + ''
  19.         )

또 쿼리 철인가... 쿼리만.. 죽어라 하게 되네...


======================================

2020-12-02 : 좀 나중에 덧붙임..

이렇게 쓰면.. 쿼리 처리는 쉽겠지만.. 성능은 포기해야 할지도..

지금 다시 짜라고 하면.. @LOC 별로 분기를 만들어서.. 귀찮지만(!!)

각각에 해당하는 쿼리를 짜는 것을 선택할 듯...

2018년 10월 22일 월요일

Java OpenJDK 10에서 MSSQL Connection 문제에 대해서...

Oracle의 삽질 덕분에..

혼자서 미리 피해보겠다고 OpenJDK 10으로 갈아탄 나...

덕분에 나의 최애 툴인 squirrel-sql에서 MS-SQL 접속 문제가 계속 발생한다..

로그 내용은 주로 연결 거부 또는 보안 문제로 접속을 할 수 없다인데...

웃긴건... 이클립스에도 비슷한 증상이 발생..

그래서..

운영 쪽은 JDK 1.8로 내리고.. mssql driver도 구버전으로 내렸다..

그래도 왠지 아쉬워서.. 개발환경은 어떻게든 해보려 했으나..

driver 버전과 상관없이 Java 쪽의 사정으로 연결 거부만 발생...

아마도 MS-SQL 서버의 구버전(경험상 2005 미만)들에는

동일한 문제가 발생하는 것으로 보인다..

결국은 http://jtds.sourceforge.net/ 라는 오픈소스 드라이버 적용하여 해결..

좀 허무하긴 한데.. 그래도 Java 버전 안 바꿔서 다행임..

끗!

2018년 9월 4일 화요일

Classic ASP로 xml 통신 소스 만지던 중...

기존 소스가 안돌아가기 시작..

마치 컴포넌트가 없는 것처럼 로그가 나오길래..

문득.. 현재 설치된 xml 통신관련 컴포넌트가 뭐가 있는지 확인하는게 뭘까?

라는 궁금증에서.. 검색 시작...

찾았음...

reg query hkcr /f xmlhttp

끗!

2018년 8월 21일 화요일

Using SQuirreL SQL Client With OpenJDK 10.X

Java가 유료화 된다는 소식을 접하고..

나중에 생길수도 있는 불필요한 문제를 피하고자 OpenJDK로 갈아탔다..

요즘엔 Java 개발할 일이 없어서 일단... 환경설정만 OpenJDK 10.2 버전에 맞게 설정했음.

그런데!!!

두둥!!!!

Squirrel SQL Client 3.7.X 버전이 니가 JRE를 10 버전 이상 쓰고 있다고 안된다고 오류 발생.

OpenJDK 버전을 상위버전에서 지원할까 하여 3.8.1 버전 다운로드해서 설치했지만..

여전히 같은 오류 발생...

로그를 봤을때는 JRE 버전체크를 통과 못하는 것으로 보인다..

실행 배치 파일을 열어서 확인..


다음과 같은 줄이 보였다..

@REM "%LOCAL_JAVA%" -cp "%SQUIRREL_SQL_HOME%\lib\versioncheck.jar" JavaVersionChecker 1.8 9


@REM는 내가 주석처리 한 거임.. 위의 명령 대신...

"%LOCAL_JAVA%" -cp "%SQUIRREL_SQL_HOME%\lib\versioncheck.jar" JavaVersionChecker 10

요렇게 바꿔주니까 통과!!

그런데.. 기존 설정에서 MS-SQL JDBC 드라이버를 6.2 버전쓰고 있었는데..

이번엔 Class가 없다는 오류가 발생..

역시 요딴거에 패치가 있을듯 하여.. 검색하니..

https://docs.microsoft.com/ko-kr/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017

에서 7.0 버전 발견..

설치해 보니.. JRE 8 버전과 JRE 10 버전 두가지 드라이버가 있드라..

그래서.. 10버전으로 드라이버 교체해서 성공!!

끗!


2018년 8월 20일 월요일

[NES] Bard's Tale 1 Ending

이 게임을 초등학교 5학년 때 처음 접하고..

플랫폼은 다르지만 거의 30년만에 엔딩을 봤다..


최후의 망가탑 5층에 겨우 도착!

당신은 문의 반대쪽에 끔찍한 무언가를 느꼈다.

데몬 로드와의 일전!

이녀석을 가볍게 격파하면...

드디어 망가를 만날 수 있다!


지금 망가가 당신의 앞에 있다!

그의 잔인한 눈이 당신들의 존재를 유심히 들여다본다.

왜 나를 방해하는가?

이 얼음의 세계가 가장 아름답지 않나?

인간의 느낌과 감정은 참 추잡하지.

왜 그것들로 성가시게 하는가?

너희들 내면에서 분노가 타오르는 게 느껴지는군.

나와 싸우길 원하는가, 나약한 인간이여?

좋아.

그걸 원한다면, 기회를 주지.


생각보다 어렵다...
하지만 cheat의 힘으로 만렙을 찍어놨기에...
한 20분 싸워서 겨우 이김..


물리쳤다!

우리가 이겼다!!!

남쪽에서 부는 따스한 바람을 느끼듯 자연스러운 안도의 한숨을 쉬었다.

태양은 구름을 뚫고 햇살이 창을 통해 쏟아진다.

빛이 망가의 몸을 그슬린다.

조각나 무너지고 먼지로 돌아갔다.

침묵이 평화와 성취로 당신의 파티를 감싼다.


선한 대마법사, 카이런이 섬광속에서 당신 앞에 나타났다.

잘했네! 스카라브래에서의 너희들의 임무는 이제 끝났네.

사악한 자는 이제 물리쳤고 그의 겨울의 주문은 지금 끝날거라네.

왜 망가가 그랬을까요?

아마 그는 그 자신의 마법이나, 힘에대한 탐구에 의해 지배당한 것 같네.

우리는 결코 알 수는 없을걸세...

자 돌아가세. 모든 이들에게 공포의 세대가 끝났음을 알리게!

카이런이 그의 지팡이를 휘두르자, 당신들은 공중에 떠올랐다.

... 스카라브래에 평화가 돌아왔다.


음유시인의 이야기

알려지지 않은 이야기




각종 공략들은 다음을 참고


이제 Bard's Tales Trilogy와 Bard's Tale 4에 도전해야 겠다..


2018년 8월 14일 화요일

IIS 실패한 요청 추적을 활성화 한 뒤.. 생기는 xml 파일 보기

asp 페이지 개발중, 500 오류가 났는데.. 화면상으로 전혀!!!!

에러 출력이 안되어.. 실패한 요청 추적 규칙 이란게 있단 걸 확인하고..

서버에 적용..

에러 발생시 xml과 xsl가 생성되는 것을 확인..

평소 사용하던 크롬으로 보았으나.. 하얗게....

IE로 보았더니... raw 코드가 난무...

xsl를 차단하는 것으로 판단...

열라 구글링...

결국 찾음..

보안이 구린 IE로 다음과 같이 하면 됨..

  1. add about:internet to trusted sites
  2. to run in compatibility mode.

2018년 7월 23일 월요일

오늘의 삽질 일기... ASP에서 json을 POST 로 넘겼을때 처리....

소요시간 : 6시간...

문제 사항 :

1. ASP 환경에서 json을 textarea에 담아서 POST로 넘긴다음 처리 할려고 했으나..

2. json String을 Parse 하는 부분에서 계속 오류...

3. ASP에서 사용되는 라이브러리를 변경하여 여러 방법으로 테스트 해봤으나.. 계속 오류...

4. POST로 받은 json String 을 Replace 해봤으나.. 계속 오류..

5. Raw Text 형태로 출력해 보면.. 정상적으로 값이 잘 보임...

6. 예전에 특수문자 Escape 문제가 생각나서 시도했으나.. 여전히 안됨..

7. 하다가.. 그냥.. jquery로 처리를 해보자 하는 마음에... javascript 변수에 받아서 출력해 봄.

8. 헉!!!! 더블쿼테이션(")  이 HTML 코드(")로 변경되어 넘어와 있네?

9. 더블쿼테이션(")을 변환하는 소스를 넣으니.. 잘된다..

10. 이놈의 삽질은 도데체 언제까지 해야 하나...

2018년 7월 19일 목요일

[NES] Legend of Zelda





젤다는 공주의 이름이다!!!



주인공의 이름은 링크라고!!!



제발 기억해줘!!

2018년 7월 12일 목요일

[NES] RockMan 6 Ending





뭔가 합리적이면서.. 쉽기도 하고..



재미는 5보다 더 좋은 듯..



패미컴 버전은.. 2가 제일 재미있는 듯 하다..

2018년 7월 10일 화요일

2018년 7월 5일 목요일

[NES] RockMan 4 Ending



속성에 대한 의존이 심한 록맨 3와는 다르게..

속성이 안 맞아도 어느정도 공격이 통하고..

스테이지 구조도 상쾌하게 변경되었다..

그래도... 최종 보스의 페이즈 중.. 특정 무기만 통하게 한 건.. 좀 그러지 않나...

2018년 6월 28일 목요일

[NES] Double Dragon 1 Ending

 

아케이드 버전과는 많이 다른 패미컴용 더블 드래곤 1.

기술 체계도 레벨업 개념이 들어가서..

적을 무찌르고 경험치를 쌓으면 점점 기술이 추가된다.

아케이드 버전의 팔꿈치는 잊어라!

그리고.. 3스테이지는 미로이므로.. 입구에 안 들어가면 무한루프...

그리고.. 아케이드에서의 2인 플레이시

마리안을 놓고 벌이는 대전은..

패미컴에선 패미컴만의 설정으로..

모든것의 흑막은 동생 쉐리다~~~ 그러니 패줘라~~

란 설정으로.... 물론.. 본 작만 해당된다..

간만에 해도 어느정도 재미는 있다..

아래는 기술표 퍼온것..

레벨시스템
하트는 레벨을 나타내며 경험치 1,000이 쌓이면 레벨업을 합니다. 채찍과 야구 방망이가 30의 경험치를 주니 애용하도록 합니다. 레벨업 할때 마다 새로운 기술을 사용할 수 있습니다.
하트1개: <점프>A+B, <박치기>반대 방향 대시
하트2개: 일반공격모션이 추가됨. 데미지가 더 쌔짐하트3개: 점프가 날라차기로 바뀜! 가장 중요함하트4개: 일정 거리에서 발차기를 난사하면 적을 잡습니다. 주먹을 누르면 던집니다.하트5개: 누워있는 적에게 아래 주먹을 누르면 테이크다운을 합니다. 의외로 쓸모 있는 기술하트6개: 뒤돌아 팔꿈치 치기 봉인기에 가까운 수준입니다.하트7개: 발차기 막타가 바뀝니다. 위력은 쌘데 애들이 앉아서 잘피합니다.

2018년 6월 15일 금요일

[NES] RockMan3 Ending





RockMan3 는 강제 세이브를 사용해도 어렵다..



그리고 상성이 있어서.. 아얘 먹통이 되는 보스도 있고..



어찌어찌 겨우 클리어..

2018년 6월 4일 월요일

2018년 5월 28일 월요일

[NES] RockMan2 Ending


2는 보조 무기들을 정말 아껴써야 클리어가 가능하게 되어 있네...

1처럼 록버스터로만 클리어가 안되는 보스가 많다..

그래도.. 재미있네..

2018년 5월 11일 금요일

Apache solr 구동시 MA147LL/A 관련 오류 발생

신규로 Apache solr 추가 구축중..

사용 버전은.. 예전꺼 재설정하기 귀찮아서.. 4.30 사용..

그런데.. 구동해보니... 처음보던 오류가 발생..

MA147LL/A 문자 관련 오류가 발생했는데..

또 폭풍 구글링으로 해결...

https://stackoverflow.com/questions/19420972/declaring-unique-key-as-int-in-solr-results-in-error

요약하면.. elevate.xml  파일의 MA147LL/A 부분을 주석처리 하면.. 해결!

근데 이게 왜 발생했는지는 잘 모르겠다..

2018년 4월 19일 목요일

코넬식 필기

오늘 웹서핑 하다가 발견한 것..

상당히 유용할 듯..

울집 얘들한데 함 시켜봐야 겠다..


2018년 4월 11일 수요일

[번역] 아마존 베스트 셀러 랭크 (BSR) 의 이해 - 확실한 안내

회사에서 통계내기 위해 공부 차...

쓸데없는건 번역 안함.. 그리고.. 내맘대로 번역.. ㅎㅎ

원문 : https://viral-launch.com/amazon-blog/amazon-tips/amazon-best-sellers-rank-bsr-guide/

아마존 최고 판매 순위 (BSR) 이해 - 확실한 안내


At Viral Launch, we thrive on understanding and discovering the intricacies of the “science” of Amazon’s marketplace and the process of selling successfully. One of our recent targets was reverse engineering the Amazon Best Sellers Rank (BSR) algorithm with the intent of building an incredibly robust Amazon sales estimation algorithm with unprecedented accuracy. While we have built a far more accurate BSR to sales mapping algorithm than what is currently available, reverse engineering the BSR algorithm requires a far greater amount of data plus more sophisticated machine learning tactics.
Here are our findings on BSR and the downfalls of using Amazon’s Best Sellers Rank as a tool to estimate sales. This is a technical piece so I apologize for it being so dry. 

 아마존의 최고 판매 순위란?

what is amazon best seller rank
상품의 최고 판매 순위는 상품의 상세정보 페이지에서 볼 수 있다. 일반적으로 상품들은 여러 분류로 내열된다. 보통은 최상위 분류가 있고 (이 예로는 미용 & 개인 위생 용품의 #2,235), 그리고 하위 분류가 있으며, 이 경우 41번째 최고 판매 상품은 아래 아래 아래 아래 분류의, 세럼이다. 자주 여러 아래 아래 하위 분류들에서 상품을 찾고 여러 상위 수준의 분류들에서는 덜 찾게 된다. 판매 추정 방정식에서는, 그것이 알고리즘이 관심을 갖는 최상위 분류이다. 누군가가 현재 64,000+ 하위 분듀들 중 아무거나 펼쳐놓을 충분한 자료를 갖고 있다면, 그 숫자들을 사용할 수는 있겠지만, 그다지 가능성은 없어보인다.

아마존 최고 판매 순위 (BSR)은 어떻게 계산되는가?

한 상품의 최고 판매 순위 또는 BSR은 부여된 시간내에 같은 분류안의 다른 상품들과의 주문 수를 비교하여 계산된다.
간단히 말해서, 분류내의 "최고 판매" 상품은 그 분류에서 #1의 BSR을 갖게된다. 분류 내의 두번째 "최고 판매" 상품은 그 분류에서 #2의 BSR을 갖게된다.
그러면 "최고 판매"는 정확히 무엇인가? 주문을 고려한 시간은 무엇인가?
다양한 시간대에서 아마존에 주문이 접수되는것에 대한 가중치 양을 계산하기 위해 선형 회귀 분석(Linear Regression)이라 하는 가장 논리적/성공적인 기계 학습 알고리즘을 여러번 사용했었다 (알지는 모르겠지만, 산림 회귀 분석 결정, 베지언 선형 회귀 분석, 그리고 증폭 의사결정 회귀 분석 알고리즘도 시도했었다). 따라서 일반적으로는, 이런 종류의 데이터셋을 사용하면, 각 시간별 아마존 판매 가중치에 대한 이해를 돕기 위한 선형 회귀 분석을 예측하곤 했다. 예전의 하루 판매는 BSR을 계산시 1년 전에 비해 크게 증가했다. BSR 방정식을 역분석하는 데 도움이 되기에 선형 회귀 분석 방법을 간단하게 설명하자면, 선형 회귀 분석은 방대한 양의 데이터를 다루는 방정식에 적당한 계수를 찾는 것을 도와주는 AI 방정식이다. 방정식은 BSR = X(a)+ Y(b) + Z(c)… 처럼 보여진다. a, b 그리고 c는 각 시간대 별 주문 수이며, X, Y, Z는 각 기간대 별 가중치들이다. 지난 1시간 동안의 판매 (a)는 RSR 계산에서 40%의 값 (X)이고 2시간 전의 판매 (b)는 RSR 계산에서 20%의 값 (Y)가 된다.
불행히도, 이 접근 방법으론 구하고자 하는 정확한 계산 값을 반환하진 못했지만 어떤 굉장한 통찰력을 알게 해줬다.
BSR은 작업하기가 어려웠지만, 시행착오를 거쳤고, 방대한 양의 데이터를 간단하게 분석하는 것으로, 확실히 많이 배웠다! 이들 중 일부는 새로운 발견들은 아니지만, 당신처럼 익숙하지 않은 사람들에겐 다음처럼 적용된다:
  • BSR은 2-3시간 이내에 판매된 상품에 대해 업데이트 한다 (아마존의 마켓의 BSR 업데이트에 대해선 결제가 확실히 완료됐을 때라고 가정).
  • BSR 계산은 최근 판매에 더 큰 가중치를 준다.
  • 판매 이력은 여전히 계산에서 많은 비중을 차지한다.
  • 우리는 BSR이 거의 동일한 두 개의 상품들이 지난 한 달 동안 몇 배의 판매 차이가 생긴 것을 보았다. (예. BSR #76,430 과 #76,433의 각각의 월 판매는 94 와 310이다.)
  • 우리는 BSR이 많이 낮은 상품이 훨씬 적은 판매를 하는 것을 보았다 (예. BSR #720은 지난 한 달 간 366 판매).
  • 판매가 없는 새 품목들은 아마존 최고 판매 순위를 갖지 않는다.
  • 파생 상품을 나열해보면. 파생의 일부 유형은 자체 BSR을 갖지 않고 그들의 판매를 살펴보면 그들의 부모 ASIN(Amazon Standard Identification Number:아마존 표준 식별 번호)와 마찬가지인 것을 보인다. 다른 파생 유형들은 자체적인 최고 판매 순위를 갖지 않는다.
  • BSR은 주문에 의존적이고 개수에 독립적이다. (예. 단일 주문의 품목 90개는 1개의 주문보다 더 영향을 끼친다).
  • BSR은 한 번의 판매로 10단계, 심지어 수십만 단계 아래 순위로 흔들릴 수 있다. 마찬가지로, BSR은 급속히 떨어질 수 있다 (우리는 다음 판매가 발생하기까지 시간 당 10,000번의 하락을 봤습니다).
  • BSR은 모든 상품별로 매 시간마다 재-계산 된다. 같은 시간에 같은 BSR을 갖는 두 개의 상품들을 본 적이 없기에.. 일부 사람들의 제안처럼 각 시간별 상위 X개의 상품들을 재-계산할 수는 없다.
보시다시피, BSR은 상품이 과거에 얼마나 잘 팔렸고 지난 몇 시간 동안 얼마나 잘 팔렸는지에 대한 지표가 될 수 있다. 문제는 상세한 BSR 이력이 없다면, 정확하게 말할 수 없다는 것이다.

BSR 변동의 예시

상품 A와 B로 해보자. 상품 A는 지난 6개월 동안 정원 관리 부분에서 일 별로 40개씩 꾸준히 판매되었으며 상품 B는 31일 전에 1번 판매되었을 뿐이다.
amazon best seller example
제품 B를 함께 구입하고 그들을 상품을 실제로 홍보하기 시작해서 지난 이틀 동안 총 120 개를 팔았다고 해보자. 지난 30일 동안 상품 B가 120개 그리고 상품 A가 1200개 판매되었다고 해도 상품 B는 상품 A와 아주 비슷한 BSR을 가질 것이라고 예측하게 된다.
amazon best sellers rank example
좀 미쳤지?

동일한 판매지만 다른 순위

분류별로 수백만 개의 상품들이 있기에 같은 판매 수를 갖는 2개의 ASIN 이 있을 수는 있지만,아주 다른 BSR을 갖는다.
지난 30일 동안 상품 A가 197 개를 판매했고 상품 B가 200 개를 판매하여 각각의 BSR은 12,000과 10,0000으로 지정되었다고 하자. 자, 이제 지난 3시간 이내에 상품 A가 3번 판매됐고, 상품 B는 없다고 하자. 상품 A가 지난 1달 동안 같은 판매 수를 발생했지만 순위는 8,000등 언저리가 될 것으로 예측할 수 있다.

시기가 전부다

상품 A는 아마존에서 18개월 전에 2번만 판매되었고 이제 정원 관리 부분에서 BSR이 2,000,000로 지정되었다. 상품 B는 12개월 전에 1번 판매되었다고 하면, 이 상품의 BSR은 1,000,000 정도라고 예측할 수 있다. 상품 A가 판매량이 더 많아도, 판매가 일찍 발생하여 BSR 계산의 "하위"에 이르렀지만, 상품 B는 훨씬 나중까지 BSR 계산의 "하위"를 찍지 않았다. BSR이 매시간 업데이트됨에 따라, 판매가 보고되지 않는 상품들은 일반적으로 (BSR이 증가하여) 순위에서 밀려나고, 판매가 오른 상품이 올라간다.

BSR은 판매 예측에는 좋지 않다 (하지만 최선이다)

가장 정확한 판매 예측 알고리즘을 작성하는 여정에서, 아마존 플랫폼에서 가능한 모든 판매 지표를 떠올렸었다. 한가지 생각은 마켓 당 가정된 평균 상품 평점을 기반으로, 대략 다음처럼, 한 달 이내에 상품 당 평균 25개의 상품평이 추가되었고 상품 평점이 유기농 판매의 1%라 가정한 다음 그 달에 2,500 건의 판매가 있었다고 하자. 이것은 확실히 적절한 접근 방법은 아니지만, 아이디어 구상에선, 아무 생각 없는게 안 좋은 생각이다. 가장 보편적인 대안은 몇가지 주요 약점이 있지만, 재고 수준을 추적하는 것이다. 이 접근 방법은 판매자가 외부 요인으로부터 판매를 이끌어내는 상황과 재고 수준이 999 개 이상인 목록, 또는 최대 주문 수량 설정이 있는 목록에는 허용되지 않는다
이런 접근 방법과 상당히 정확한 기존 도구가 있는데도 BSR에 의해 사용하지 않게 된 것은 왜일까? 우리는 이러한 변동이 심한 측정으로 인해 최고 판매 순위 사용을 반대해 왔다. BSR은 매 시간 세계적으로 업데이트되어 각 상품들의 최고 판매 순위를 측정하여 매 시간별로 계산하고 조정된다. 아마존이 BSR 업데이트를 내보낼 때마다, 주어진 상품의 순위는 크게 변동될 수 있다. 예를들면, 우린 상품의 최고 판매 순위가 90,000에서 뛰어올라, 1시간 뒤 한번의 판매로 38,000으로 이동되고, 다음 시간 순위가 76,000으로 떨어지는 것을 관찰했다. 이것은 항상 장터 전반에 걸쳐 발생하고 있다.
향후, 아마존에서 발견한 BSR을 "스냅샷"이라 부르자 (매 시간 변경되는 BSR의 시간당 스냅샷이기에).
그래서 판매량 측정에 대한 나쁜 척도가 될 스냅샷 BSR의 예시로, 차 주전자를 갖고 싶다고 상상해보자. 언제 사람들이 새 차 주전자를 구매해야 한다고 떠올릴 것 같나? 예를들면 사람들이 업무 전에 아침 차/커피를 마실 때 아침에 새 차 주전자를 구매해야 한다고 떠올린다고 해보자. 그 의미는, 차 주전자에 대한 BSR이 밤 보다 아침에 낮아질 수 (높은 구매 예측을 보일 수) 도 있다는 것이다. 그래서, 아침에 자료 조사를 해보면, 밤에 한 것보다 더 높은 판매량 예측을 할 수 있을 것이다. 요일에도 마찬가지 일 수 있다. 예를들면 차/커피를 마시는 사람의 절반만이 출근 길에 여분의 활력을 얻기 위해 업무 시간 중 차/커피를 마신다고 해보자. 그것은 BSR/판매 수치가 평일 대비 주말을 대조해 볼 때 달라질 수 있다는 뜻이다.
본질적으론 직접적인 계산이 없고, BSR은 일, 주 및 또는 월 이내에서 급격히 변동할 수 있기에, 아마존 최고 판매 순위는 빈약한 지표이다.

이 지식을 사용한 판매 예측 알고리즘 구축 방법

너무 많은 세부 사항을 공유하는 것이 편안하지는 않지만, 아마존 상품 연구 도구에서 엄청나게 정확한 예측 알고리즘을 갖을 수 있게 하는 몇가지 주요 측면이 있다.
보시다시피, 아마존 베스트 판매 순위는 시시각각, 날마자, 그리고 매주 극도로 불안정 할 수 있다. 그래서 어느 정도 정확한 판매 예측 도구를 구축하려면, 한달 내내 발생하는 BSR의 막대한 변동을 고려할 도구를 구축해야 했고, 우리는 해냈다. BSR 스냅샷을 사용하여 지난 달의 판매량을 평가하는 것은 하나의 정지 화상으로 영화의 줄거리를 예측하는 것과 같다. 그것은 상당히 부정확할 수 있다.
강조하고 싶은 알고리즘의 한가지 특징은 매일 밤 판매 매핑 알고리즘으로 BSR을 계속해서 업데이트 한다는 것이다. 이것은 우리의 계산이 마켓의 자연스러운 추세와 일치하게 유지하게 해준다. 아마존 전체의 계절별 추세와, 아마존이 인기가 올라감에 따라, 정기적으로 알고리즘을 새로 고치지 않는 예측 도구는 그 예측들이 빠르게 뒤쳐지고 시간이 지나면서 정확도가 지속적으로 감소한다.




글 추가...

위의 내용으로 부족한 듯 하여.. 좀 더 구글링을 해보니.. 다음 글도 상당히 유용하다.

https://www.makeuseof.com/tag/8-things-people-dont-know-amazons-bestsellers-rank-sales-rank/


2018년 4월 6일 금요일

ASP로 단축주소 생성하자.

전 회사에서까진 Java 개발했는데..

점점 ASP의 입지 및 자료들이 줄게 되어... 개발 기록차 남김..

ASP가 그래도 간단하고 편하긴 하다..

google의 단축주소 api를 사용하려고 했으나, 서비스를 중단할 예정에 FireBase로 이전한다고 함..

FireBase는 함 둘러봤는데 뭐가 뭔지 모르겠음..ㅎㅎ

그냥 간단한.. Bitly 로 잽싸게 결정! 코드는 아래와 같다.

  1. <%
  2. Function fnBitlyUrl(longURL)
  3.     token = "bitly에서 발급받은 토큰값"
  4.     url = "https://api-ssl.bitly.com/v3/shorten?access_token="&token&"&longUrl=" & longURL & "&format=txt"
  5.    
  6.     set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
  7.     xmlhttp.open "GET", url, false
  8.     xmlhttp.send ""    
  9.     fnBitlyUrl = xmlhttp.responseText
  10.     set xmlhttp = nothing
  11. END FUNCTION
  12. longURL = "http://www.lifebook.com" '변환하고 싶은 주소'
  13. response.write fnBitlyUrl(longURL)
  14. %>

적당히 입맛에 맞게 쓰길..

윈도우 환경에서 간단한 백업 스크립트 작성

리눅스 환경이면 간단하게 tar + find 명령어로 해결할 것을...

윈도우즈 서버 사용하는 죄로... 뻘짓을...

진행사항

1. 특정기간이 지난 파일은 삭제.

2. data란 디렉토리엔 상품이미지가 가득하여 데이터로서 백업 가치가 없어서 제외

3. 반디집은 제외 압축이 안되서 실패!

4. 윈도우즈용 tar은 뭔가 명령어가 안된다! (실력 부족일지도..)

5. 그냥 맘 편하게 7zip으로 가즈아~~

6. 작성한 bat는 다음과 같음

  1. REM 1주일 지난 파일은 자동으로 삭제...
  2.  
  3. ForFiles /P D:\workspace\\backup /S /M * /D -7 /C "cmd /c del /Q @file"
  4.  
  5.  
  6.  
  7. CD D:\workspace\압축할경로\www\
  8.  
  9. D:
  10.  
  11. 7z a -t7z D:\workspace\backup\%DATE%.7z D:\workspace\압축할경로\www\ -mx0 -x!www\data\*

7. 주의할게.. 제외 옵션인 -x뒤에 경로가.. 절대경로가 아니라 상대경로임.

8. 그래서 스크립트 안에 보면 디렉토리를 이동해서 가게 했음.

9. 끗! 뭘봐!

2018년 3월 19일 월요일

MSSQL에서 특정 컬럼을 SPLIT 해서 값을 구하고 싶을때.

일반 예제들을 보면.. split의 기능 구현만 되어 있다..

지금 내가 하려는 도서 크기의 X * Y 값에 대해서 split을 하면

테이블 반환 함수 형태가 되어 2건의 결과가 나온다..

더 중요한건 내가 원한 것은 상품코드 당 split 한 결과들이 각각 연결되야 하는데..

잘 안되더라~~

그래서 구글링~~

https://dba.stackexchange.com/questions/86143/how-to-join-a-table-with-a-table-valued-function


SELECT

M.상품코드,

M.상품크기,

U.*

FROM

상품테이블 M

CROSS APPLY dbo.fnSplit(M.상품크기,'*') U

WHERE 1=1

AND ITEM_SIZE IS NOT NULL

AND (LEN(ITEM_SIZE)-LEN(REPLACE(ITEM_SIZE,'*',''))) &gt; 0


요딴식으로 하면

A000200752  72*105  1   72

A000200752  72*105  2   105

A000200753  83*118  1   83

A000200753  83*118  2   118

이런식으로 결과가 각각 나뉘어서 출력된다.. 오늘 CROSS APPLY란거 하나 배웠네..

나머진 알아서 요리 시작!

끗!


Memcached 업데이트를 해보자!

회사로 KISA에서 다음과 같은 제목으로 메일이 옴...

Memcached 서비스를 악용한 대규모 DDoS 공격 대비 보안 강화 요청

평소 관심이 1도 없던 나는 또 귀차니즘이 발동했지만..

이건 페널티를 물 수도 있다는 생각에 조치 시작..

일단 이게 뭔지 알아봄..

http://blog.alyac.co.kr/1565

아 띠붕~~ 뭔진 모르겠지만.. 하여간.. 귀찮은 거임..

환경 : CentOS 6.5


netstat -tnlp

명령어 사용해보니.. 실제로 쓰이고 있음을 확인..

yum update memcached

명령으로 업데이트를 노려보았으나... 그닥 맘에 안드는 버전으로 업데이트 됨..

공식 배포를 받아야 겠구나란 생각에.. 다음 사이트 방문하여.. 최신 버전 받음..

https://github.com/memcached

받고.. 압축 풀고 설치하면 될 줄 알았냐!! 의존성이 있는 라이브러리도 깔아야 함!

yum install -y libevent libevent-devel

자~~ 이제 설치를 하자!!

압축을 푼 곳으로 이동 --> 다음 명령어 실행

./configure && make && make test && sudo make install

사실... 설치 가이드만 잘 읽어보면 써 있음!!


끗!!










2018년 2월 23일 금요일

법무법인이나 총판이란 곳에서 소프트웨어 라이선스 위반이라고 연락이 왔다면?

몇일전 회사에 법무법인 양X 의 변호사란 쉑이 전화해서
니들 마이크로소프트 불법 쓰고 있는거 걸렸고
우리가 그걸로 법적 조치 들어가는 중이야~ 라고 개솔 시전함
뭐 난 경험적으로 무시해도 된다고 했으나.. 불안한
부장님께서 그 법적조치는 어떻게 확인하냐 해서리..
민사조정신청 번호를 주더구만...
조회해 보니.. 접수한건 사실이네..
그래서 우리보고 니네 소프트웨어 내역 제출해라 라고 지럴...
뭐 대응안해도 되긴 하는데..
불안한 부장님을 위해.. 가족(동서형님이 변호사)을 동원...
민사조정신청이란게 완전 웃기더구만...
MS가 우리를 적발하는게 아니고.. 이런 쉑들이 먼저 사건 만들어서 협박건을 만들어서 만약 진짜 위법건이면 MS에다가
야! 우리가 이렇게 건수 만들어 와쓰~~ 나 이뻐? 우쮸쮸~~ 하는 거더구만..
하여간.. 동서형님에게 공식적인 조언을 들음..
요약하면.. 이 구라쟁이 쉑끼들아~~ 어디서 협박질이여..
니들이 우리 위반했다는 증거 있어? 있으면 니네가 구체적으로 내놔봐.
그리고 계속 개솔 지껄이면 법적 책임을 졸라 묻겠으!!
라고 내용 증명을 보내면 된다고 함.(원본은 점잖음.. 근엄근엄)
물론 무시해도 상관은 없다고 함. 정 찝찝하면 저런 내용을 점잖게 쓰라고 함...
다른 IT 종사자 여러분.. 적어도 회사껀 정품쓰는거 알죠?
쫄지 맙시다!


===============================후기==========================================

이 쉐리들 우리가 규모가 되는거 같으니까 민사 만들어서 재판 진행함..

우리 회사도 변호사 고용하여 맞대응..

이 쉐리들이 이슈화 한 것은..

1. MS-SQL DB 서버에 대한 익스터널 커넥터 라이선스가 있는가?

2.Windows Server에 대한 SPLA 라이선스가 있는가?

이렇게 크게 2가지로 요약할 수 있다.

나머지 업무용 PC에 대해선 용무가 없다..

특히 SPLA 라이선스는 MS 측의 입장으로 코에 걸면 코걸이, 귀에 걸면 귀걸이 식이라..

상당히 골때리는 라이선스이다..

결국은 상대측에서 고소취하로 갔지만...

SPLA 라이선스는 좀 말이 많을 듯 하다.. MS 맘대로 해석을 하면 어쩔수 없지 않을까...

결론 : 쇼핑몰 운영하는 분들은 SPLA 라이선스 꼭 체크하시길...


BE Band (비밴드) - 2024년 03월 02일 잠실새내 락앤롤욱스 공연

나의 10~20대를 보낸 잠실에서의 공연.. 오랜만에 가보니.. 여기가.. 마눌님과 자주 가던 영화관이었는데... 여긴 뭐가 있었는데... 란 추억도 떠올리며 기분좋게 감.​ 공연장은 좀 협소한 편이었고, 인천의 쥐똥나무 보다는 약간 크고... 인천 ...