[컴] 안드로이드 폰 광고ID 재설정

galaxy / android / 안드로이드 폰 광고 아이디 설정


광고 ID 재설정

  • 갤럭시 기준
  • 설정 --> Google --> 광고 --> 광고 ID 재설정



광고 ID 재설정이 필요한 이유

이 ID 가 웹등에 접속할 때 내가 누군인지를 구분해주는 역할을 하게 된다. 그렇기에 주기적으로 이것을 변경해주면, 어느정도의 익명성이 보장될 수 있다.(하지만 당연하게도, 완벽한 익명성을 보장하진 않는다.)



[컴][js] OpenSSL hmac in NodeJS

노드에서 hmac 사용 / open ssl / openssl hmac 사용법 / 노드제이에스 / node js

OpenSSL hmac in NodeJS


ref. 1 과 ref. 2 를 참고하면 대략적으로 사용법을 알 수 있다.

const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', 'a secret');

hmac.update('some data to hash');
console.log(hmac.digest('hex'));


References

  1. crypto.createHmac
  2. crypto_class_hmac


[컴][js] AdoniJS 에서 큰 DB data 를 retrieve 할 때

chunk / big data / adonijs lucid big data / database cursor / adonis 에서 cursor 사용방법 / db query / size / big size / 쿼리 / node query / how to handle big query result


AdonisJS Lucid 에서 stream 사용

AdonisJS-lucid 의 사용에서 큰 결과 값을 갖는 query 를 다룰 때 stream 을 사용하면 된다. 일반적인 cursor 의 사용이라고 생각하면 될 듯 하다.

AdonisJS Lucid 의 문서에서는 찾기가 힘들었는데, community 에서 자료를 찾았다.(ref. 1)

내용을 정리하면, Lucid는 KnexJS 를 사용하고 있고, KnexJS 에서 streams 를 제공한다. 그것의 사용법은 아래와 같다.

아래 stream 의 예제는 ref. 1 을 참고해서 만들었다.

const ccursor =
  Database.connection('cocktail')
    .raw(
      `SELECT * FROM point AS t1 WHERE t1.id !='tester'
      ORDER BY id ASC`
    ).stream()
  
const prom = new Promise((resolve, reject)=>{
    Logger.error('test2');
    ccursor.on('data', (row)=>{
      Logger.info('test-data');
    })
    ccursor.on('end', () => {
      Logger.info('test-data');
      resolve()
    })
    ccursor.on('error', (param1) => {
      Logger.error('test-error : ' + param1);
      reject()
    })
});
await prom.then((val)=>{
    Logger.info('test-resolve');
}).catch((val)=>{
    Logger.error('test-reject');
});


위의 code 를 실행하면 Logger.info('test-data'); 가 계속 실행되다가 끝날때 Logger.info('test-data'); 가 실행될 것이다.

또는 아래처럼 작성해도 된다.
const prom = new Promise((resolve, reject)=>{
  const ccursor =
    Database.connection('cocktail')
      .raw(
        `SELECT * FROM g5_point AS t1 WHERE t1.mb_id !='admin'
        ORDER BY po_id ASC`
      ).stream();
  ccursor.on('data', (row)=>{
    Logger.error('test-data');
  })
  ccursor.on('end', () => {
    Logger.error('test-end');
    resolve()
  })
  ccursor.on('error', (param1) => {
    Logger.error('test-error : ' + param1);
    reject()
  })
});
await prom.then((val)=>{
  Logger.error('test-resolve');
}).catch((val)=>{
  Logger.error('test-reject');
});


async

아래처럼 async 를 사용할 수 있다.

const prom = new Promise(async (resolve, reject)=>{
  const ccursor =
    Database.connection('cocktail')
      .raw(
        `SELECT * FROM g5_point AS t1 WHERE t1.mb_id !='admin'
        ORDER BY po_id ASC`
      ).stream();
  ccursor.on('data', async (row)=>{
    Logger.error('test-data');
  })
  ccursor.on('end', async () => {
    Logger.error('test-end');
    resolve()
  })
  ccursor.on('error', async (param1) => {
    Logger.error('test-error : ' + param1);
    reject()
  })
});
await prom.then((val)=>{
  Logger.error('test-resolve');
}).catch((val)=>{
  Logger.error('test-reject');
});



아직은 사용하기가 쉽지 않다. 그리고 await/async 와 잘 맞지 않아 보인다. 그래서 자꾸 memory 가 넘치는 듯 하다.

개인적으로 현재로서는 그냥 offset, limit 을 이용해서 일정부분만 retrieve 해서 가져와서 사용하고, 다시 또 일정부분을 가져와서 사용하는 방식이 더 나아 보인다.



See Also

  1. laravel 에서 큰 Database result 를 처리할 때

References

  1. A Way to process large results of database Query in Adonis without consuming too much RAM - Help / Database - Forum - AdonisJS Framework
  2. Knex.js - A SQL Query Builder for Javascript


[컴] 클라우드 플레어 의 문제에 대한 투명한 대처

cloudflare/  투명 / 진단 결과 / 문제 발표 문제해결 / 클라우드 / 플래어 / 플레어 / 소통 / 정확한 / 투명한 / 응답 / 대답 / 고객과의 소통 / 보스 이어폰 /

클라우드 플레어 의 문제에 대한 투명한 대처

7월 2일에 클라우드플레어가 멈췄다.(outage) 이와 관련해서 자세한 내용을 공개했다.
내용의 이해를 떠나서 문제에 대한 투명한 공개의 좋은 예

See Also

  1. Bose QC 35 Firmware 4.5.2 Noise Cancellation Inves... - Bose Community - 285738, 2020-04-02 : Bose 에서 Noise Cancellation 관련 고객들의 의견에 대한 답변, 자세한 분석, 

[컴][유틸] VSCodium

vscode / visual studio code/ open license


VSCodium

여기 를 보면 알 수 있는 데, 마이크로소프트(MS)가 Visual Studio Code 가 빌드할 때 vscode repository 를 복사해서 product.json 변경하고 빌드를 한다고 한다.

이 때 product.json 에 MS 에서의 특정 기능을 집어넣는다. (텔레메트리, 갤러리, 로고 등) 그리고 자신들의 라이센스 를 걸고 배포한다.

이 라이센스에 데이터의 수집에 대한 라이센스도 들어가 있다.

그래서 그 라이센스와 관련없이 VSCode 를 빌드해서 MIT license 로 배포하는 것이 VSCodium 이다. 자세한 사항은 README.md 를 읽어보자.

vscode 에 data 수집이나 telemetry 관련 옵션이 있긴하지만, 여하튼 개인적으로 그냥 VSCodium 을 쓰는 것이 나을 듯 하다.



[컴][웹] confluence 사용하는 국내업체들

지라 / 컨플루언스 사용 업체 리스트 / jira / 어디서 사용하는지 / 사용하는 대기업 /

confluence 사용하는 국내업체들


  1. 넥슨
  2. 롯데쇼핑e커머스사업본부
  3. 삼성전자
  4. 안랩
  5. 알티캐스트
  6. 애플코리아
  7. 우아한 형제
  8. 잡코리아
  9. 쿠팡
  10. 현대모비스
  11. 현대오토론
  12. cafe24
  13. LG 전자
  14. LIG 넥스원
  15. naver
  16. sk
  17. sk 하이닉스

Reference


  1. [Blind] Confluence 쓰는 회사들 알려주실 수 있나요? (IT엔지니어)




[컴] qBittorent 의 익명모드

토렌트 / 토렌트 익명 모드 / 토렌트 감시 / 토렌트 안전하게 / 토렌트 익명성 보장 / 피하기


qBittorent 의 익명모드

아래글은 qBittorent 의 Anonymous mode 글을 가져와서 번역하고, 약간의 설명을 추가했다.

Anonymous Mode

도구 --> 옵션 --> 비트토런트 --> 익명모드 사용하기 를 통해 사용할 수 있다.
이 옵션은 설명글 에 따르면 이 모드를 활성화 하면 누군지 모르게 identity 를 가려준다.(try to mask its identity)
qBittorrent v3.3.0+qBittorrent v2.9.0 - qBittorrent v3.2.5 에서 동작이 다르다. qBittorrent v2.9.0 - qBittorrent v3.2.5 에서 더 많은 제한이 있다.

qBittorrent v3.3.0+

"익명모드"를 사용하면,
  • peer-ID 가 더이상 클라이언트 지문(client's fingerprint) 에 포함되지 않게 된다.
  • user-agent 가 빈문자열(empty string) 으로 리셋(reset) 된다.
  • 다른 구분가능한 정보(identifying information) 들, 예를 들면 IP, listening 포트등과 같은 정보들은 직접적으로 공개되지 않게 된다.

qBittorrent v2.9.0 - qBittorrent v3.2.5

libtorrent-rasterbar 의 버전이 1.0.0. 아래 버전을 사용하게 된다. 그래서 '익명버전'이 활성화 되면 qBittorrent v3.3.0+ 에서 제공되는 기능(features) 과 함께 추가적으로
  • Local Peer Discovery 를 disable 한다.
  • DHT 를 disable 한다.
  • UPnP & NAT-PMP 를 disable 한다.
  • (any) proxy 를 통해서 http(s) trackers 에게만 얘기한다.
  • SOCKS5/I2P proxy 를 통해서 udp trackers 에게만 얘기한다.
이 기능들은 qBittorrent v3.3.0+ 에서는 "프록시가 지원하지 않는 연결 비활성화기(Disable connections not supported by proxies)" 옵션으로 빠졌다.
  • 프록시가 지원하지 않는 연결 비활성화기 : 도구 --> 옵션 --> 연결 --> 프록시 서버 panel --> 프록시가 지원하지 않는 연결 비활성화기