MacBook Air mid 2012 디스크 용량을 늘리기 위해 OWC Aura SSD 1TB (for MacBook Air mid-2012) 모듈을 주문했는데, 덕분에 한참 삽질을 했다.
요약하자면 아래와 같다.
Continue reading Mojave 이상에서 OWC Aura SSD 사용하기컴퓨터 이야기 :)
MacBook Air mid 2012 디스크 용량을 늘리기 위해 OWC Aura SSD 1TB (for MacBook Air mid-2012) 모듈을 주문했는데, 덕분에 한참 삽질을 했다.
요약하자면 아래와 같다.
Continue reading Mojave 이상에서 OWC Aura SSD 사용하기지난해 회사를 옮기고 난 후 필요에 의해 스터디도 많이 하고 논문도 원없이 보고 있는거 같다.
처음엔 도대체 이게 뭔가 싶었는데, 논문들을 계속 보다보니 왠지 이젠 스크래치로 구현도 가능할 것 같아서 실현을 해보기 위해 지난 2월 데스크탑을 업그레이드 했다.
그 결과물들은 요기:
요며칠 인터넷을 떠돌아다니다가 hassio라는 재밌는 프로젝트를 발견했다.
최근 업무 관련해서 XLA를 알게 되었는데, 재밌는 프로젝트인데 반해 관련된 자료를 찾는게 쉽지 않길래 한번 소개를 해보면 좋을 것 같다는 생각이 들었습니다.
우선 XLA (Accelerated Linear Algebra)는 Tensorflow의 서브 프로젝트로 그래프 연산의 최적화 / 바이너리 사이즈의 최소화 등을 목적으로 하는 컴파일러입니다.
let’s encrypt를 이용하면 무료로 SSL 인증서를 받을 수 있고, 특히나 v2 api를 이용하면 와일드카드 인증서까지 받을 수 있기 때문에 개인들은 구지 돈내고 유료 SSL 인증서를 발급 받을 필요는 없을것 같다.
내 경우는 DNS를 cloudflare로 모두 옮겼기 때문에 certbot-dns-cloudflare를 이용해서 인증서를 발급/갱신하도록 설정했다.
Continue reading ubuntu에서 letsencrypt ssl 인증서 사용하기 (with cloudflare dns)
워드프레스만 운영하려는 경우라면 워드프레스 인스턴스를 생성하면 되겠지만 나같은 경우 virtual host로 여러 사이트들을 띄워놓을 생각이라 우분투 바이오닉 인스턴스를 생성한 뒤 워드프레스를 직접 세팅하기로 했다.
재밌어보이길래 python으로 간단한 슬랙봇을 만들어볼까 하고 알아봤더니 slackbot이란 모듈을 사용하면 슬랙봇을 쉽게 만들 수 있을것 같아서 슬랙봇을 만들어봤다.
그런데 파이썬 프로세스는 멀쩡하게 살아있지만 하루 정도가 지나면 봇이 disconnected 상태로 바뀌는 문제가 지속적으로 발생하는 문제가 있었다. 관련해서 예제 코드들을 찾아봐도 별다른 부분이 없길래 며칠 동안 디버깅을 하면서 문제를 해결해봤다.
우선 인터넷에 떠도는 slacker 기반 echo 봇의 기본 골격은 아래와 같았는데…
최근 python을 익히고, 많은 일들을 python으로 처리하기 시작했는데 미디어에서 프레임을 추출하는 모듈 중에 깔끔한 모듈을 못찾겠어서 직접 모듈을 하나 만들었다.
Continue reading pydemux: simple ffmpeg wrapper
Raspberry pi를 이용해서 웹으로 컨트롤 가능한 리모콘을 만들어볼까 하고 찾다가 아래와 같은 IR transmiter 구동 회로를 찾았다.
Base에 전류가 어느정도 걸리면 Emitter에서 Collector 쪽으로 전류가 흐르도록 하는 회로인건 기억이 나는데, 저항 선택을 어떻게 해야 하는지 잘 모르겠길래 pspice로 특성을 뽑아봤다.
팩스에서 처럼 이미지를 흑/백 으로만 표현할 수 있는 경우에도 어느 정도의 명암을 표현하기 위한 방법으로 아래와 같은 오리지널 이미지가 있을 때…
한 픽셀 값은 0~255 사이의 값을 가진다고 하고, 128 이상의 값은 하얀 색으로, 128 미만 값은 검은 색으로 표현하면 결과는 다음과 같다.
보다시피 디테일은 거의 사라져버리기 때문에 이런 것을 피하기 위해 디더링이란 기법을 사용하곤 한다. 수식으로 이를 표현해보자면 다음과 같고…
말로 설명하자면 랜덤 값을 더해준 뒤 128 을 기준으로 Thresholding 을 한다! 정도로 표현이 가능할 듯… 이론적으론 매우 간단하지만 효과는 확실하다. -16~16 의 랜덤 값을 이용하여 dithering 한 결과는 다음과 같다.
-32~32 사이의 랜덤 값을 이용할 경우는…
확실히 좀 디테일이 조금 생겨나는 것을 확인할 수가 있다. 장비들이 좋아지면서 이런 식의 트릭들에 대한 연구는 사라져가는 것 같다. -_ㅠ
위 테스트에 사용한 코드:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <stdio.h> #include <time.h> #include <stdlib.h> int main( int argc, char** argv ){ int i, j; unsigned char* src; unsigned char* dst; FILE* in; FILE* out; src = (unsigned char*)malloc(sizeof(unsigned char)*512*512); dst = (unsigned char*)malloc(sizeof(unsigned char)*512*512); srand(time(NULL)); in = fopen("lena512.raw", "rb" ); fread( src, sizeof(unsigned char), 512*512, in ); fclose(in); for( j = 0 ; j < 512 ; j++ ){ for( i = 0 ; i < 512 ; i++ ){ if( src[j*512+i] > 128 ) dst[j*512+i] = 255; else dst[j*512+i] = 0; } } out = fopen("lena512_thres.raw", "wb" ); fwrite( dst, sizeof(unsigned char), 512*512, out ); fclose(out); for( j = 0 ; j < 512 ; j++ ){ for( i = 0 ; i < 512 ; i++ ){ if( (src[j*512+i] + rand()%32 - 32) > 128 ) dst[j*512+i] = 255; else dst[j*512+i] = 0; } } out = fopen("lena512_dither_32.raw", "wb" ); fwrite( dst, sizeof(unsigned char), 512*512, out ); fclose(out); return 0; } |