2017년 3월 18일 토요일

우분투 서버 타임존 변경하기 ubuntu / server timezone

우분투 서버 타임존을 변경할 생각을 안하고
계속 숫자를 더해서 해결해 오다가
결국 날짜가 꼬여버려서 ㅎㅎ

결국 타임존을 변경하게 되었다 ㅎㅎ

방법은 단순하다

date

를 쳐서 타임존을 확인하고,
지금 우리 시간이랑 다르면 변경해야하는데

(
현재 서버 타임존이 뭔지 궁금하면 먼저 확인을 해볼 수도 있다
more /etc/timezone

나는 Etc/UTC로 나오더라
Asia/Seoul로 되어야 한다
)

아래 명령어로 변경한다
sudo dpkg-reconfigure tzdata

이건 나는 처음 보는 명령어였는데,
놀랍게도 인터럭티브 화면이 나오더라 ㅎㅎ
그냥 Asia 선택하고
South Korea를 선택하면 끝!

이제 서버는 우리나라 시간이 되었고,
나는 수많은 서버에서 돌아가는 봇들의 시간과....
크론잡을 수정해야된다 ㅎㅎ
기술 부채라니 ㅜㅠㅠ

2017년 2월 26일 일요일

동기적 vs 비동기적 ( Synchronous vs Asynchronous )

동기적 Synchronous

- 작업이 끝날 때까지 기다린 후 다음 작업 수행

비동기적 ASynchronous
 
 - 다른 작업을 하고 있다가, 요청했던 작업이 끝나면 추가 작업 수행

인데, 맨날 헷갈리고 아직도 잘 모르겠다

2017년 2월 9일 목요일

의대 과외, 페달링 프리미엄



이런저런 과외 사이트에 아무렇게나 등록된 선생님이 아닙니다.
상위 0.05%의 세계, 검증된 의대 선생님을 소개시켜드립니다.

2017년 1월 24일 화요일

구글 독스(Google Docs) 응답을 받을때 Slack으로 받기

사실 그 동안 google apps script를 써보고 싶었는데, (시도도 몇번했지만) 너무 귀찮고 꼭 받아봐야하는 응답들이 생겨서, 대충 구글링 하다가 성공해 버렸다.

오늘 할 것은 사용자가 설문을 제출 할 경우, 제출한 내용을 슬랙으로 보내는 아주 간단한 내용이지만, 스크립트의 함수를 어떻게 연결하는지에 대한 방법도 있으니, 어쩌면 이거 하나만 보면 앱스 스크립트는 다 쓸 줄 안다고 생각해도 될지 모르겠다.

일단 나는 그런 느낌이다.

1. 구글 폼을 제작한다. (원하시는 대로 알아서)
2. 우측 상단의 메뉴버튼을 눌러서, 스크립트 편집기를 연다

3.그럼 이런 친구가 우릴 반기는데


4. 이 function 위에 한줄을 입력하고,

var POST_URL = "https://hooks.slack.com/services/$@$@$!$(웹훅 주소)";

5. myFunction()안에 아래 내용을 입력한다

var response = form.response.getItemResponses();
 
  // 슬랙으로 보내고 싶은 문항을 정리한다
  var x = response[0].getItem().getTitle();
  var y = response[0].getResponse();
  var z = x + ' ' + y
  var msg =
      { "payload": '{"text": "' + z + '"}' }

   var options =
   {
     "method" : "post",
     "payload" : msg
   };

   UrlFetchApp.fetch(POST_URL, options);


 // Make a POST request with form data.
 var resumeBlob = Utilities.newBlob('Hire me!', 'text/plain', 'resume.txt');
 var formData = {
   'name': 'Bob Smith',
   'email': 'bob@example.com',
   'resume': resumeBlob
 };
 // Because payload is a JavaScript object, it will be interpreted as
 // as form data. (No need to specify contentType; it will automatically
 // default to either 'application/x-www-form-urlencoded'
 // or 'multipart/form-data')
 var options = {
   'method' : 'post',
   'payload' : formData
 };
 UrlFetchApp.fetch('https://httpbin.org/post', options);

response[]는 각 항의 질문과, 답변을 가지고 있으며, getItem().getTitle()로 제목을,  getResponse()로 답변을 가져올수 있다.

6. 이제 myFunction을, 트리거로 설정한다.

다음과 같이 위의 메뉴에서 [리소스] -> [현재 프로젝트의 트리거]를 누르고,
(파일이름이 저장 안되었다면 저장하고)

새 트리거를 추가한다.


그리고 아래와 같이 설정한다.
myFunction을 / 설문지에서 / 제출시에 실행한다는 얘기다!

쉽다! 이것까지만 이해하면 아주 쉽다!

이렇게 생각해보면 사실 안에다 코드를 안넣고, 구글링한 다른 이름의 function들로 덮어 씌워도 된다.
뭐가 메인함수인지만 안다면 말이다.

이름이 myFuncion()일때부터 알아서 하세요 라고 말했던거다.
심지어 저게 어떤 trigger의 default로 설정되어있지도 않아서 난 좀 불편하다고 여겼는데, 어떻게 보면 당연할지도.

이제 그러면 설문지를 제출할때마다! 슬랙으로 알림이 오게 된다!
구글 앱스 스크립트는 js니까, 이제 이것만알면 뭐든지 할 수 있을것 같은 기분이다 ㅎㅎ

2016년 10월 18일 화요일

[마케팅] 멈춰있기에 오히려 더 움직이는 사진, 시네마 그래프

우연히 페이스북에 Flixel (https://flixel.com)의 광고를 보게 되었다.
페이스북에서 삼성의 광고를 통해 자주 보았던 부분적으로만 움직이는 사진을 만들어주는 툴이라길래
아 이게 어느새 포맷화된 기법이구나 라고 생각하게되어 더 알아보고자 이렇게 글을 쓰게 되었다.

이렇게 "부분적으로만 움직이는 사진"을 시네마 그래프(Cinema Graph)라고 한다.
시네마(Cinema)와 포토그래프(Photograph)의 합성어로, 멈춰있는 듯 한 그림에서 특정 부위만 움직이도록 하는 기법인데, 일반적으로는 Gif형식으로 업로드 하거나 영상형식으로 업로드한다.

원리는 간단하다 (구현은 조금 복잡하다 ㅎ). 동영상을 촬영해서 한 컷을 선택하고, 움직이게 하고 싶은 부분은 움직이게 만든다.
예를 들어 위의 삼성영상 같은 경우 표현하고 싶은내용은
"물속처럼 생동감있는 환경[유동]에서도 삼성 휴대폰은 안정적이다[고정]"이니까, 


1. 우선 
휴대폰을 욕조에 집어넣고 동영상을 찍었을것이다. (찍을때 사람은 뭐 거의 가만히 있었겠지만 조금 흔들렸을 것이다 ㅎㅎ)
2. 동영상 중에서 휴대폰과 들고 있는 손이 잘나온 컷을 하나 골라서 선택해서 고정시키고
3. 생동감을 표현하고 싶은 요소 "물고기"나 "물방울"은 그대로 동영상이게 만드는 것이다.


사실 새롭지는 않고 2011년 부터 나오기 시작한 기법인거 같은데, 유행이 온다, 왔다, 안왔다라기보단 마케터라면 가끔씩 쓸 수 있지않을까 생각해볼만한 기법인것 같다.

데이터 적으로 가장 많은 반응을 유도하는 게시물은 이미지지만,


(출처: socialbakers)
정적인 이미지 보다는 동영상이나 gif를 활용할때 지루한 느낌에서 탈피할 수 있기도 하고,
동영상 자체보단, 특정 포인트에 더욱 집중할 수 있게 만들어주고 싶을때 시네마 그래프가 쓰일 수 있지 않나 싶다.

또한 아직까지는 그렇게 많이 보급 되지 않았다는 점에서는, 신선함을 통해 이목을 집중시킬 수 있어 유용할 수 있다고 생각한다. 
 그래서 제목에서 말했던 것처럼 멈춰있기에 오히려 더 움직이는 사진이 시네마 그래프를 가장 잘 나타내는 말인 것 같다.

일반적으로 시네마 그래프를 제작하고 싶다면 (Adobe After Effect필요), 애드 스토어에서 설명해주신 강좌를 따라해보면 될 것 같다.


조금 더 간편하게 작업 하고 싶다면, 유료 툴이긴 하지만, Flixel을 사용해보는 것도 좋을것 같다. (유료라서 직접 사용해보지는 않았다, 죄송하다.)



flixel은 혹시 안쓰더라도, 시네마 그래프에 관한 인사이트를 얻기에도 좋은 사이트라고 생각한다.
flixel의 작품들이 모이는 갤러리가 있으니 참조하면 좋을것 같다.


이렇게 시네마 그래프에 대해서 알아보았지만, 아직까지 우리 회사의 게시물에서는 어떻게 활용해야할지 모르겠다. 일반적으로 웨어러블이나, 하드웨어쪽에서는 많이 활용할수 있을 것 같다.

2016년 9월 29일 목요일

[롤드컵] 2016 시즌 월드 챔피언십 일정 캘린더

오늘부터 시작된 롤드컵 2016 시즌 월드 챔피언십 일정 캘린더를 만들어 보았습니다.

구글 캘린더 주소는 아래 링크로,
https://calendar.google.com/calendar/embed?src=a9l6klum41c6t476g3n7vchvtk%40group.calendar.google.com&ctz=Asia/Seoul

ical은 아래 드랍박스 링크에서 받아서 설정해주세요.
https://www.dropbox.com/s/f60uf2nm4zt34tc/%EB%A1%A4%EB%93%9C%EC%BB%B5%202016%20%EC%8B%9C%EC%A6%8C%20%EC%9B%94%EB%93%9C%20%EC%B1%94%ED%94%BC%EC%96%B8%EC%8B%AD%20%EC%9D%BC%EC%A0%95.ics?dl=0

아직은 예선 일정만 있으며, 추후 일정은... 추가할지 안할지 아직은 잘 모르겠습니다.
누군가 보내주신다면 추가 할 수 있을지도

2016년 8월 29일 월요일

안드로이드 스튜디오 Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to #$% 오류

현재까지의 해답

app의 build.gradle이 아니라, project명 아래에 있는 build.gradle의 dependencies안의 그래들 버전을
https://jcenter.bintray.com/com/android/tools/build/gradle/ 에서 최신버전으로 확인하여 입력한다.

매번 해야 할거같은게 귀찮지만 ㅠㅠ 일단 되긴한다.

------------------------------------------------------------------------------------------

안드로이드 스튜디오를 오랜만에 켰더니 다음과 같은 오류가 떴다.

Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "a9de88373078a630d15b224aee7b19151825f1ee"



그러면서 두개의 버튼

Fix plugin version and sync project
Open File

이 뜬다.


오류는 말그대로 Gradle Plugin 버전이 오래되서 그런건데,
자동으로 알아서 되야하지 않나 싶은데, 안드로이드 스튜디오 업데이트를 해봐도 되지 않는다.

플러그인 버전을 고치고 프로젝트 싱크가 아름답게 알아서 되길 바라면서 
첫번째 버튼을 눌러봤자 같은 오류문만 만나게 된다.

대략 이런 느낌...

어쩔 수 없는 선택지로 내가 무얼 해야할지 모르지만, 일단 Open File을 누르면
build.gradle 파일이 열린다.
더욱이 안타까운건, app의 build.gradle이 열린다는거...
gradle의 dependency는 app의 build.gradle이 아니라, project명 아래에 있는 build.gradle에 있다!


이럴때 정말 억울하게도 오류가 날때마다
https://jcenter.bintray.com/com/android/tools/build/gradle/ 에 들어가서 최신 버전을 확인해서 입력해주어야한다는게 대부분 인터넷에 올라온 설명이다.



지금의 나로써는 2.2.0-beta3을 사용해야하는 상황..

근데 매번 이래야 하다니, 말그대로 너무 노답이다.
프로그래머란 무엇인가, 같은 노가다를 안하기 위해 새로운 노가다를 하는 사람이 아닌가!
앞으로 편안한 답변을 찾아보자.

30분째 삽질중...




어느덧 한시간...
그동안 설정에서 

gradle 세팅을 Use local gradle distribution에서 Use default gradle wrapper로 바꿔보기도하고..

디펜던씨를 싱크해주고 SDK나 툴버전을 싱크해준다는 andle
https://github.com/Jintin/andle
도 설치해서 실행해 봤지만,

여전히 해결되지 않는다.

스택오버플로우를 보면 위의 두 방법 다 이걸로 해결된 사람들이 있다는데,
나는 왜때문에...

결국 굴복하고...

직접 입력하고 말았다.

아아
해결하지 못해 의미없는 시간들...

억울하다
억울해...
해답을 아시는분이 계시다면... 알려주세요...


그럼 저는 이만
들어가 보겠습니다...
쓰레기라 죄송해요...