2015년 12월 16일 수요일

Access Remote Mac without any commercial Apps

You can connect to your remote Mac using only pre-installed softwares on Mac OS.

Remote Mac:

- open System Preferences > Sharing. Check 'Screen Sharing'

Client Mac:

- open Terminal.
- cd /System/Library/CoreServices/Applications
- open "Screen Sharing.app"
- enter IP address of remote mac

Screen sharing protocol uses VNC and the default port is 5900.

You need to set port-forwarding if you want to access remote mac from outside of an AP.


2015년 11월 17일 화요일

워즈니악 인터뷰 내용 / Founders at Work

First of all, try to have the highest of ethics and to be open and truthful about things, not hiding. If you have to hide something for company reasons, at least explain what you’re doing. Don’t mislead people. Know in your heart that you are a good person with good goals because that will carry over to your own self-confidence and your belief in your engineering abilities. Always seek excellence: make your product better than the average person would.

2015년 11월 11일 수요일

먼나라 프로그래머의 블로그

Grzegorz Adam Hankiewicz라는 사람의 블로그를 읽었다. 프리랜서 프로그래머. 대부분의 글을 살펴봤다. 스페인에 살고 있는 개발자. 아이폰/아이패드 앱도 개발하면서 프로그래밍 언어에 대해서도 관심을 가지고 있다. 읽다 보니, 아침이네. 30대 아저씨인데, KPOP에도 관심이 많은 듯. KPOP 이 여럿 보인다.

Ballmer Peak라는 말이 있다는 것을 알게 되었는데, 스티브 발머랑 관련이 있었군.

글이 또 점점 짧아진다.

2015년 11월 10일 화요일

Nim에 대한 생각

어떤 프로그래밍 언어가 널리 퍼지려면 여러가지 조건들이 있다. 그 중 최근 분위기는 큰 단체나 회사가 밀어야 한다는 것인데, Nim의 경우 Andreas Rumpf 개인 프로젝트를 벗어나지 못하고 있다.

https://www.reddit.com/r/rust/comments/3s6mxr/which_language_has_the_brightest_future_in/

Nim 자체는 매력적인데, 치명적인 단점으로 지적되는 것이 있더라. 그래서 Nim에 작별을 고하는 사람도 있고.

http://gradha.github.io/articles/2015/02/goodbye-nim-and-good-luck.html

사실 daily toy tool로는 Python을 쓰건, Nim을 쓰건 별 차이는 없을텐데, 좀더 실무에 적용하려다 보니 실망이 커진듯 하다.
 
위의 페이지에 소개되어 있는 Silver는 언젠가 시간이 되면 테스트런을 해볼 생각이다.

#긴글을쓰기에는피곤한상태

OS X용 다용도 제어툴 - 해머스푼(Hammerspoon)

윈도우 제어를 위해 Slate를 사용하다 요즘은 그냥 Window Tidy를 사용하고 있는데, 어쩌다 Hammerspoon이라는 것을 알게 되었다. 이쪽도 계보(?)가 좀 있는데, Slate에서 Mjolnir로 갔다가 Hammerspoon으로.

원래 Xmonad를 OS X에서 사용하려다가 찾은 것인 Slate였는데..

Hammerspoon은 윈도우 관리 뿐만 아니라 더 다양한 작업들을 할 수 있다. Lua 기반.

API 문서 참고.

2015년 11월 8일 일요일

아이맥 비디오 카드 수리 (iMac 2009)

2009년도에 구입한 아이맥. 2주전 토요일 화면이 깨지고 부팅할 때 세로로 핑크색 줄이 표시되면서 부팅이 안된다. 맥 관련 커뮤니티와 게시판을 들어가 보고, 구글링을 해보니 비디오 카드의 문제로 비슷한 증상을 보인 것들이 많다. 얼마 전 2011 early MBP 15인치도 비슷한 증상이 있어서 애플의 무상 수리를 받았다. 무상 수리가 아니었으면 60~80만원 정도가 들어갔을 듯.

관련된 글을을 보다가 발견한 홈페이지. 히팅건으로 비디오카드를 굽는 기술;;

맥프로 그래픽, 히팅건으로 부활시키기

히팅건을 구입해서 해볼까 했으나 안되면 말고 버릴 것이 아니라, 사설 업체를 찾아봤다. 애플케어는 만료된지 오래.

몇 곳을 골라서 일단 에버노트에 북마크를 해놓고 회사 웍샵을 준비하느라 밀어뒀다.

주 중에 3곳에 전화를 해봤다. 한 곳은 방문 수리 업체인데, 아이맥을 수거해서 수리하고 가져오는 방식. 수리비는 29만 5천원을 부른다. 다른 곳은 불친절하다는 평가들이 있는 곳이었는데, 전화를 하니 35만원에서 40만원. 마지막 한 곳은 택배로 비디오 카드를 받아서 수리하고 보내주는 곳. 여기는 8만원을 이야기 한다. 게시판을 보니 동일한 증상으로 아이맥을 수리한 것도 있고, 많은 사람들이 저렴한 가격에 비디오 카드 수리를 맡기는 것으로 보여 이 곳으로 결정.

아이맥 분해. 비디오 카드를 꺼냈다. HDD를 SSD로 교체하느라 몇번 열어 본 경험이 있었으나, 비디오 카드까지 분리는 처음이라 시간이 좀 걸렸다. (ifixit 링크)

메시지를 주고 받고, 우체국 택배로 수요일에 발송. 목요일에 도착했다고 문자 받고, 금요일에 수리가 다되었다고 연락이 왔다. 토요일에 집에 돌아와 보니 택배가 도착해있다. 미리 주문해놓은 서멀그리스도 함께.

비디오 카드를 보니 비디오 칩과 주변의 색이 보내기 전과 달리 까맣다. 찍어놨던 사진과 비교를 해보니, 비디오 카드가 교체된 것은 아니다. 카드 뒷면을 불빛에 비춰보니 그을린 듯한 흔적이 보인다. 구웠군.

조립.

칩들에 서멀그리스를 바르고, 비디오 방열판에 조립. 카드를 끼우는 것은 쉬운데, 그 전에 빼놓았던 비디오 카드 온도 센서 케이블을 다시 끼우는 것이 아주 ㅈㄹ이다. 비디오 카드를 끼운 후, front bezel과 본체를 연결하는 케이블 4개를 꽂는다. Vertical sync ribbon cable을 끼우는 것도 조심해야 한다. 얇아서 망가지기 쉽다. 리본 케이블에 붙어 있는 얇은 전선이 끊어지면 망한다. (오래 전 클리에를 사용하다 자가 수리한다고 비슷한 케이블을 망가트린 기억이ㅜㅜ) 전면 glass panel까지 붙이고 부팅. 정상 동작.

감격의 순간도 잠시, 고개를 돌리니, 나사 11개가 보인다. 비디오카드와 프론트베젤을 고정하는 것을 잊었다.ㅋㅋ 앞으로 쏟아지면 어쩔뻔 했는지. 다시 분리하고 조립. 이번에는 HDD 팬이 5000 RPM 가까이 돈다. HDD 온도 센서를 안끼웠네. 내일 하자;;

일요일. 다시 분리&조립. 이제 HDD 팬이 1000 RPM 정도로 조용하다.

4만라인 정도의 코드를 빌드할 때 MBP에서는 CPU가 100도 가까이 올라가고 팬이 시끄럽게 돈다. 5년이 넘은 아이맥에서는 40도 정도로 조용히(?) 끝낸다. 당시 최고 사양을 구입했고, SSD를 장착해줘서 아직까지 팔팔하다. 비디오 카드를 이런 방식으로 수리한 후에도 다시 문제가 생기는 경우가 있는 것 같은데, 잘 버텨주길.

  Model Name:    iMac
  Model Identifier:    iMac11,1
  Processor Name:    Intel Core i5
  Processor Speed:    2.66 GHz
  Number of Processors:    1
  Total Number of Cores:    4
  L2 Cache (per Core):    256 KB
  L3 Cache:    8 MB
  Memory:    8 GB
  Processor Interconnect Speed:    4.8 GT/s

2016.08.03: 블로그의 글들을 다시 읽다가 메모 추가. 2016년 2월 4일에 eBay를 통해 메모리를 구입해서 장착. 32GB로.

2017.03.07: 1년 3개월만에 재수리.

2015년 11월 7일 토요일

새벽의 취미 생활

토요일이다. 새벽에 일어나서, 어제 저녁에 트위터에 올라와 보던 글을 다시 한 번 읽어 본다.

4 Weeks of Golang: The Good, the Bad, and the Ugly

브라우저에는 Safari Books Online의 책이 열려 있다.

Clojure Reactive Programming

당면한 프로젝트에 사용할 웹 프레임 웍 중 하나로 보고 있는 Gin 홈페이지도 열려 있다.

https://gin-gonic.github.io/gin/

그리고는 Dave Cheney의 동영상과 David Nolen의 ClojureScript 동영상을 한 편씩 본다.

The Legacy of Go by Dave Cheney - GothamGo 2015 Closing Keynote
Alan Kay가 말했다는 "Programming is a pop culture". 공감. gofmt, Interfaces, Goroutines
ClojureScript: Lisp's Revenge by David Nolen
Revenge까지는.
그리고 Dave Cheney의 홈페이지에 가서 Go와 Rust에 대한 글들을 읽는다.

http://dave.cheney.net/2015/10/30/programming-language-markets
Programming Language Markets를 보면 Web/Mobile이 대세라는 것을 알 수 있다. Backend를 차지 하기 위한 경쟁. 그 외 모든 부분에서 C/C++를 대체하기는 요원해보인다.
http://dave.cheney.net/2015/07/02/why-go-and-rust-are-not-competitors
경쟁 상대는 아니지. Rust는 좀더 근본적인 것을 해결하려는 것이고, 잘 되어서 C/C++을 대신할 수 있길 기대.
http://dave.cheney.net/2015/08/08/performance-without-the-event-loop
Go의 최대 장점
http://dave.cheney.net/2015/11/05/lets-talk-about-logging
좀 억지스럽다고 할까. Feature를 최소화해야 한다는 생각에는 동의. 
http://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
Optional parameter가 없으니 참 고생들 한다.

오늘의 프로그래밍언어 오덕질/프오덕질/포덕질?

어제 저녁부터 계속 비가 내리고, 화면 오른쪽 상단에 "Firefox 42.0 available" 알림이 뜬다.

2015년 10월 20일 화요일

AWS Lambda 로컬 개발 환경


AWS Lambda가 여러가지 면에서 끌리는데 도입이 꺼려지는 이유가 있다. 공식 로컬 개발환경을 제공해주지 않는다는 점. 매번 AWS에 올려서 테스트를 해야 한다니.

그래서 이미 이 문제를 고민한 사람들이 있으리라는 생각으로 구글링을 좀 해봤다. 아래와 같은 웹 페이지들을 발견.


그나마, 모두 Node.js를 사용하는 방법들 뿐이다.

곧 Amazon에서 로컬 개발환경을 제공하겠지만, 그 전까지는 불편함을 다른 개발자들이 제공한 툴로 해결할 수 밖에 없겠다.

Google App Engine의 대안으로 선택을 하려고 한 이유가 App Engine의 Data Store 때문이었는데, 몇년만에 들여다 보니 App Engine에서 Google Cloud SQL을 사용할 수 있게 해준다.

뭘 선택하든 이런 플랫폼을 사용하게 되면 얻게되는 이점은 크지만, 종속성은 어쩔 수 없겠다. 내가 원하는 실행 환경을 사용할 수도 없다는 것도 단점.

2015년 10월 15일 목요일

프로그래밍 언어들

시작은 애플 베이직이었다.

APPLE BASIC (1984년)
APPLE Assembly (1984년)
Pascal / CPM
Turbo Pascal (1989년)
Turbo C
C++ (1990년)
Lisp (1992년? 신선함!)
Perl (처음 읽었던 책이 Learning Perl이었나, Programming Perl이었나 확실하지 않다. 정말 재밌었다)
Python (1.5부터 사용했었던듯. Perl을 주로 사용하다 Python으로 넘어갔다)
Visual C++, Visual Basic (1996년)
Java (가장 많이 사용했던 때는 2007년, 2012년)
Objective-C (iOS 개발을 시작한 후 2008년)

뭔가 빠진 것 같은데, 기억이 안난다.

언제부터였던가 프로그래밍언어 덕후가 된 후. 최근에 관심을 가지고 보고 있는 프로그래밍 언어들.

Haskell
Clojure
Rust
Elixir
Nim
Go

언어별로 잘 맞는 분야가 있는 것 같다.

처음 Perl을 사용할 때의 재미를 다시 느껴보고 싶어서, 이런 저런 프로그래밍 언어들을 들여다 보고 있는건가..

2015년 9월 4일 금요일

How to check Windows System Service status with Python


You can check Windows system service status using Python.

Using psutil

>>> import win32serviceutil
>>> win32serviceutil.QueryServiceStatus("Service_Name")
(272, 4, 7, 0, 0, 0, 0) # 4 means it's running
>>> win32serviceutil.QueryServiceStatus("Service_Name")
(272, 1, 0, 0, 0, 0, 0) # 1 means it's stopped

Using wmi

You can lookup with conditions like StartMode and State. Following code enumerates services whose StartMode is "Disabled" and current State is "Stopped".

>>> import wmi
>>> c=wmi.WMI()
>>> c.Win32_Service(StartMode="Disabled", State="Stopped")
[<_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="aspnet_state">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="clr_optimization_v2.0.50727_32">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="clr_optimization_v2.0.50727_64">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="Mcx2Svc">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="NetMsmqActivator">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="NetPipeActivator">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="NetTcpActivator">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="NetTcpPortSharing">, <_wmi_object: \\YEONSH-PC\root\cimv2:Win32_Service.Name="RemoteAccess">]

Check if specific service is running or not. Empty array is returned if the service is not running.

>>> c.Win32_Service(Name="Netlogon", State="Running")
[]

2015년 7월 28일 화요일

brew install python


아니, pip도 설치 안되어 있었네. 놀라며 brew install python. 따라 오는 것들이 많다.

➜  UI git:(2.5_dev) brew install python
==> Installing dependencies for python: readline, sqlite, gdbm, openssl
==> Installing python dependency: readline
==> Downloading https://homebrew.bintray.com/bottles/readline-6.3.8.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring readline-6.3.8.yosemite.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

OS X provides similar software, and installing this software in
parallel can cause all kinds of trouble.

OS X provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/readline/lib
    CPPFLAGS: -I/usr/local/opt/readline/include

==> Summary
🍺  /usr/local/Cellar/readline/6.3.8: 40 files, 2.1M
==> Installing python dependency: sqlite
==> Downloading https://homebrew.bintray.com/bottles/sqlite-3.8.10.2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring sqlite-3.8.10.2.yosemite.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

OS X provides an older sqlite3.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/sqlite/lib
    CPPFLAGS: -I/usr/local/opt/sqlite/include

==> Summary
🍺  /usr/local/Cellar/sqlite/3.8.10.2: 9 files, 2.8M
==> Installing python dependency: gdbm
==> Downloading https://homebrew.bintray.com/bottles/gdbm-1.11.yosemite.bottle.2.tar.gz
######################################################################## 100.0%
==> Pouring gdbm-1.11.yosemite.bottle.2.tar.gz
🍺  /usr/local/Cellar/gdbm/1.11: 17 files, 532K
==> Installing python dependency: openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2d_1.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring openssl-1.0.2d_1.yosemite.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include

==> Summary
🍺  /usr/local/Cellar/openssl/1.0.2d_1: 464 files, 18M
==> Installing python
==> Downloading https://homebrew.bintray.com/bottles/python-2.7.10_2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring python-2.7.10_2.yosemite.bottle.tar.gz
==> Caveats
Pip and setuptools have been installed. To update them
  pip install --upgrade pip setuptools

You can install Python packages with
  pip install <package>

They will install into the site-package directory
  /usr/local/lib/python2.7/site-packages

See: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Homebrew-and-Python.md

.app bundles were installed.
Run `brew linkapps python` to symlink these to /Applications.
==> /usr/local/Cellar/python/2.7.10_2/bin/python -s setup.py --no-user-cfg install --force --verbose --single-version-externally-mana
==> /usr/local/Cellar/python/2.7.10_2/bin/python -s setup.py --no-user-cfg install --force --verbose --single-version-externally-mana
==> /usr/local/Cellar/python/2.7.10_2/bin/python -s setup.py --no-user-cfg install --force --verbose --single-version-externally-mana
==> Summary
🍺  /usr/local/Cellar/python/2.7.10_2: 4866 files, 76M

2015년 7월 15일 수요일

읽은 횟수에 따른 마킹 색상

책을 처음 읽을 때는 노란색.
두번째 읽을 때는 녹색.
세번째 읽을 때는 파란색.
네번째 읽을 때는 분홍색.
다섯번째 읽을 때는 검은색으로 아예 가려 버린다.

2015년 5월 16일 토요일

부러운 커뮤니티. Julia issue #8839 closed

https://github.com/julialang/julia/issues/8839

Julie 이슈 8839의 이름은 Jeff Bezanson PhD.

Jeff는 Julia의 핵심 개발자인데, MIT 박사과정 졸업을 해야 하는 문제로, problematic 개발자가 되었다는데 :)

이슈의 내용도 재미있고, 1년 가까이 달린 댓글들도 재밌다.

부러운 개발 커뮤니티.


Defense.

이슈를 closing하는 ceremony도 하고.

2015년 5월 5일 화요일

파주 출판단지에 있는 지지향 게스트 하우스


5월 5일에 출판단지에 사람들이 이렇게 많을 줄은 몰랐다. 아이들과 함께 할 수 있는 행사가 많이 열리고 있었다. 책도 할인 판매를 하는데, 온라인보다 싸지는 않다.

게스트하우스는 아이들 때문에 침대가 없는 방으로 했는데, 이불들이 너무 저렴하시다. 깔고 잘 요는 스폰지. 게다가 스폰지가 이불호청 보다 커서 안에서 접혀있는데, 펴지지 않는다. 바닥에는 전기장판 2개가 깔려 있다. TV는 원래 안보니 없어도 상관없는데, 화장실은 너무 작다. 출입구는 밀폐가 잘 안되어서 문을 닫아도 아래쪽으로 빛이 샌다. 207호가 그랬는데, 다른 호실은 모르겠다. 혹시나 다음에 가게 된다면 침대방으로 해야겠다.

출판단지 내에 영화관이 있는 것이 의외였다. 그리고, 식사를 할 곳이 적어서 선택의 여지가 얼마 없다. 상가들은 들어왔다가 장사가 안되어서 나간 곳도 많아 보이고.

2015년 4월 9일 목요일

오랜만에 맥 OS로 부팅을

언제가 마지막이었는지 기억도 안난다. 오랜만에 맥 OS로 부팅.

그런데, 부팅하다가 복구 화면으로 넘어간다. 뭐지. 다시 부팅을 해봐도 당연히, 마찬가지.

타임머신에서 복구 하자. 백업 목록이 뜨는데, 최종 백업이 3월 10일. 딱 한 달만이군.


오랜만에 부팅하지만, 역시 맥의 UI가 마음에 든다. 안정된 느낌.

윈도우와 오가며 사용할 일이 많으니, 맥의 한영 전환키와 스크롤 방향을 윈도우와 맞춰야 겠다.

한영 전환키 변경 방법은 여기를 참고해서 변경. 스크롤 방향은 시스템 설정/마우스에서.

2015년 4월 4일 토요일

새벽까지의 코딩

새벽 네시을 넘어까지 코딩을 하다가, 결국 원하는 결과를 보고 잠을 잤다. 오랜만에 자바 스크립트를 읽고 수정했다. 내가 원하는 방식으로 동작하도록 하기 위해 고치면서 또한번 몹쓸(?) 자바스크립트의 매력(?)을 느낀다.ㅎㅎ

최근에는 C++로 주로 코딩을 해서 그런지, 더 심하게 이질감이 느껴졌다.

Meteor나 React에 관심은 두고 있으면서 실무에 사용할 기회가 없다. 장난감 프로젝트라도 하나 만들어서 해볼까 싶다.


Windows에서 Jenkins 사용하기

일단 설치. 설치 경로는 C:\Jenkins 등 공백 문자가 없는 곳으로 지정한다. C:\Program Files (x86)\Jenkins에 설치하면 ruby-runtime plugin 등이 설치되지 않는다.

설치 완료 후 자동으로 로컬호스트:8080을 브라우저가 연다.

포트 번호를 바꾸고 싶다.

C:\\Jenkins\Jenkins.xml을 수정해서 8080을 다른 번호로 변경.

CMD창에서 jenkins.exe stop 하고, jenkins.exe start로 재시작한다.

브라우저로 변경된 주소를 연다.

기본 설정은 누구나 접근이 가능하고, 어떤 작업도 할 수 있게 되어 있다.

Manange Jenkins 메뉴에 들어간다.
먼저 사용자를 하나 만든다. Manage Users 클릭.

사용자 등록.

다시 Manage Jenkins > Configure Global Security로 간다.

Enable security 체크.

Security Realm에서 Jenkin's own user database 선택.

Allow users to sign up은 체크 해제.

위에서 사용자를 먼저 만든 이유는 아무나 등록할 수 없도록 하기 위해서다. 사용자를 먼저 만들어 놓지 않으면 설정을 변경하고 저장한 순간. 로그인도 못하고, 사용자 계정 등록도 못한다. 그런 경우에는 이 곳 참고.

Authorization에서 Matrix-based security를 선택했다. 원하는 것을 선택해서 설정하자.

그리고 Save.

다시 로그인을 해야 한다.

이후, Bitbucket plugin, Build Authorization Token Root Plugin, Batch Task Plugin, Yammer Plugin을 설치했다. 설치에 필요한 선결조건들은 알아서 설치된다.

Bitbucket plugin은 너무 간단해서 별 쓸모가 없었다. 사용자 인증을 해야 사용할 수 있게 해놓았기 때문에 Build trigger URL을 token으로 외부에서 인증없이 호출하기 위해 Build Authorization Token Root Plugin을 설치.

Yammer Plugin을 설치할 때 선결조건인 ruby-runtime이 설치가 안되어서 한참 헤맸다. 문제는 Jenkins의 설치 경로 때문인데, 처음에는 기본 설치 경로인 C:\Program File (x86)\Jenkins에 설치를 했었다.

Yammer Plugin을 사용하려면, 앱 등록, 토큰 생성 등을 해야 한다.

오늘 몇시간 삽질한 결과 Bitbucket에 특정 모듈에 변경이 생기면 빌드를 하고, 그 결과를 Yammer에 포스팅하도록 했다.

권한 문제로 빌드시 git checkout이 제대로 안되는 경우 여기를 참고해서 설정한다. 귀찮으면 Service 관리도구를 열어서 Jenkins의 실행 계정을 사용하고 있는, git이 문제 없이 정상 동작하는 로컬 사용자 계정으로 설정해도 된다.

2015년 1월 10일 토요일

Android폰에서 IFTTT 사용하기

Android에서 IFTTT를 설치하고 계정을 활성화 하니, 새로운 channel이 여러개 생기는데, 아이폰에서는 가능하지 않은 것들이다.


  • Android Device
    • Android powers devices that are beautiful and available in many shapes and sizes. Unlock new functionality for each of your devices with the Android Device Channel.
  • Android Location
    • The Location Channel is a native Android Channel that allows Recipes to use information from cellular, Wi-Fi and GPS networks to determine your approximate location.
  • Android Notifications
    • The Notifications Channel is a native Android Channel that sends short message alerts to your devices.
  • Android Phone Call
    • The Phone Call Channel is a native Android Channel that provides a set of Triggers and Actions built around calls placed to and from your phone.
  • Android Photos
    • The Photos Channel is a native Android Channel that allows you to use your device's camera and photo gallery in Recipes.
    • Note: Active Android Photos Recipes upload all new photos taken on your device.
  • Android SMS
    • The SMS Channel is a native Android Channel that allows you to receive Short Message Service (SMS) messages on your device and send messages to other phone numbers.
    • Note: Standard carrier rates may apply.
  • Android Wear
    • Android Wear organizes your information, suggests what you need, and shows it to you before you even ask.

번호 정보를 이용해서 스팸인지 미리 알 수 있는 '후후' 같은 서비스나 통화 내역 녹음 같은 기능 때문에, 메인 폰으로는 안드로이드 폰이 좋다. 그런데, 카메라.. 카메라 때문에.. 아이폰을 놓을 수가 없다.

Python에서 로그 설정

기본적인 코드 구성.


2015년 1월 5일 월요일

오랜만에 C++ 코드를 보고 있다

오랜만에 C++ 코드를 보고 있다. 게다가 C++11. 마지막으로 C++ 코드를 작성한 때가 언젠가 기억이 나지 않는다. 처음 C++를 사용한 때는 학부에서 OS과목을 들을 때. 학기말 프로젝트를 C++로 작성해서 냈었다. 운영체제의 스케쥴링을 시뮬레이션 하는 프로그램이었던 것으로 기억한다. 최근 C++11을 보니, 추가된 것들이 많다. 하나씩 찾아서 보고 있다.

코드 읽기를 위해 사용하는 도구는 Source Insight. 오랜만에 찾아서 다운로드하고 설치했는데, 인터페이스도 그대로고, 홈페이지 디자인도 아주 오래되어 보인다. 그래도 여전히 최고의 소스코드 읽기 도구. (그런데, 파이썬은 지원이 안되네?)

2015년 1월 1일 목요일

지난 3년간 사용한 도구나 기술들

새로운 한 해가 시작되는 마당에 지난 3년간 내가 사용해왔던 것들을 한번 적어본다.

  • iOS development
    • Xcode
    • Objective-C with Cocoa Touch Framework
  • Android development
    • ADT
    • Java
  • Web / Server development
    • Google AppEngine using Python
    • Flask (Python Web Framework)
    • Celery (Distributed Task Queue, Python)
    • JavaScript
    • PHP
    • jQuery
    • AngularJS
  • Image Editing
    • GIMP
    • Pixelmator

오늘의 읽을 거리

https://medium.com/lets-make-things/the-origin-of-product-hunt-7acb09e2593a

http://www.insight.co.kr/view.php?ArtNo=11752

http://www.zdnet.co.kr/news/news_view.asp?artice_id=20141211171916

특정 IP를 nginx 접속 차단하기

아침에 서버 로그 그래프를 보니, 다운로드 페이지로의 접속 횟수가 엄청나다. 로그를 확인하니, 상하이쪽 IP 주소에서 계속 접속을 하고 있다.

nginx.conf에 include /etc/nginx/conf.d/blockips.conf를 만들고 nginx.conf에서 include를 했다.

nginx.conf:

http {
...

    # BLOCK SPAMMERS IP ADDRESS
    include /etc/nginx/conf.d/blockips.conf;
}

blockips.conf:

deny XXX.XXX.XXX.XXX;

nginx를 다시 시작하기 전에 nginx -t로 설정파일을 테스트해 본 후 재 시작.

그런데, 이렇게 하면 nginx에서 접속 처리를 하기 때문에 로그에는 계속 남고, 시스템 자원을 이용하게 된다.

더 앞쪽에서 막기 위해 iptables 사용:

sudo iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP