Back to the Mac

4세대 하스웰 프로세스가 탑재된 2013년형 맥북에어를 구입하였습니다.

IMG_1481

지금까지 여러번 Mac을 사고 팔기를 반복했습니다.

  1. 맥북 (2007년)
  2. 아이맥 (2008년)
  3. 맥북에어 (2011년)
  4. 맥북에어 (2013년)

처음 만난 순간부터 Mac OS X가 참 마음에 들었지만 국내 환경에서 할 수 없는 것들이 많다보니 Mac OS X와 MS Windows를 왔다갔다 하다가 차라리 MS Windows 하나만 쓰자는 결론에 매번 도달하더군요.

IMG_1484

다시 Mac으로 돌아가자고 결심하게 된 까닭은 다음과 같습니다.

  1. iOS 앱개발, Node.js 웹개발
  2. Mac 사용 환경 개선 (인터넷 뱅킹, 한글 폰트, …)
  3. 너무나 매력적인 OS X 10.9 Mavericks

프로그래밍에 대한 순수한 열정을 유지하려면 회사 업무가 아닌 취미로 프로그래밍을 즐겨야 한다고 생각합니다. 회사에서 매일 사용하는 Eclipse, Java, Android SDK 보다는 전혀 경험이 없는 Xcode, Objective-C, iOS SDK를 공부하면 배우는 것도 많고 재밌을 것 같았습니다. iOS 앱개발이 아니더라도 Unix를 기반으로하는 Mac은 개발자에게 훌륭한 환경을 제공합니다!

mac-first-look

직관적이고 간결한 UI을 제공하는 OS X는 사용하는 것만으로도 즐거움을 선사합니다. 많은 변화가 있을것으로 예상되는 차기 버전 Mavericks가 기대됩니다. 가을에 출시 예정인데 WWDC 이후에 Mac을 구입했기 때문에 무료로 업데이트 받을 수 있습니다. Mountain Lion보다 배터리를 적게 사용한다고 하는데, Mountain Lion에서도 하스웰 맥북에어는 12시간을 사용할 수 있습니다. Mavericks에서는 몇 시간을 사용할 수 있을까요?

air-order

이번에는 고장날때까지 사용할 생각으로 최고 사양으로 구입했습니다. 200만원이 넘는 가격이 아깝지 않도록 생산적인 일에 잘 활용할 생각입니다. 앞으로 Mac을 사용하면서, Mac으로 프로그래밍 공부를 하면서 경험한 것들을 조금씩 블로그에 정리해 보겠습니다.

Ubuntu에 Objective-C 개발환경 구축하기

1. 관련 패키지 설치

$ sudo apt-get install build-essential
$ sudo apt-get install gobjc
$ sudo apt-get install gnustep-devel

2. 빌드 환경 구축

$ sudo chmod +wx /usr/share/GNUstep/Makefiles/GNUstep.sh
$ /usr/share/GNUstep/Makefiles/GNUstep.sh

.bashrc에 추가

/usr/share/GNUstep/Makefiles/GNUstep.sh

3. Vim 설정

cocoa.zip 다운로드

$ unzip cocoa.zip -d ~/.vim

.vimrc에 추가

let filetype_m='objc'

4. 코드 작성 (hello.m)

#import <Foundation/Foundation.h>

int main (int argc, const char *argv[])
{
    NSLog (@"Hello!");
    return (0);
}

5. 빌드

$ gcc `gnustep-config --objc-flags` hello.m -o hello -I /usr/include/GNUstep/ -L /usr/lib/GNUstep/ -lgnustep-base

6. 실행

$ ./hello
2013-07-18 20:39:42.506 hello[6697] Hello!

2013 SW+인문 컨퍼런스 요약

열정 없는 인생은 죽음과 같다 – 싸이월드 창업자 형용준 대표

  • 오프라인 사용자 프로세스를 가상의 세상으로 옮겨보기
  • 오프라인 세상을 잘 이해해야 함
  • 오프라인의 문제를 해결하는 솔루션으로서의 SW 개발이 필요함
  • 문제를 함께 인식해야 구성원이 같은 방향으로 열정을 가질 수 있다.

생각의 관점을 바꿔라! – 관점디자이너 박용후

  • 카카오톡 포함 16개 회사의 마케팅 담당
  • 통찰: 같은 현상이나 사물을 바라보고 남과 다른것을 볼 수 있는 능력
  • Jobs: Connect & Develop not R&D
  • 당연하지 않았던 것들이 당연해 지면서 세상은 바뀐다.
  • 퓨쳐마킹의 시대가 왔다. 2015년엔 당연해질 것들!?
  • Simple, Easy
  • 메뉴얼이 필요하면 성공 가능성이 낮아진다.
  • 링크 기반의 확산 시스템을 이해하지 못하면 SW를 성공시킬 수 없다.
  • 자발적 확산구조 (애니팡)
  • 마케팅은 고객의 관점을 바꿔 우리 제품을 다르게 보이도록 하는 것
  • 남과 다른 관점의 시작: 당연함을 부정하라!
  • 당연함을 넘어서는 생각법
    • 본질
      • 항상 질문하라. 김범수 의장
      • 전화기의 본질!? 커뮤니케이션
    • 핵심
    • 관점
  • 내가 만든 앱이 사람들의 습관을 바꿀 수 있을까!? 그렇지 않다면 투자받을 수 없다.
  • 필요할 때 도와주고 사라져야 한다. 슈퍼맨이 계속 곁에 있다면 어떨까!?
  • 생각한대로 된다. 된다고 말하고 믿고 안된다는 생각이 떠오르면 버리려고 노력한다.
  • 픽사의 이야기. 가장 중요한 건 중력. 잡스는 중력을 가진사람이다. 개발자, 기획자가 함께 고민해야 한다. 중력을 가진사람이 있어야 일을 성공시킬 수 있다.
  • 모두의 격려를 받는 회사가 나왔으면 한다.
  • 세바시 251회 관점을 바꾸면 미래가 바뀐다 @박용후 Perspective Designer

개발자여! 꿈을 설계하라 – 데니스홍

  • 나는 천재가 아니다. 똑똑하고 아주 열심히 하는 엔지니어다.
  • 연구소 및 개발중인 로봇 소개
  • 장님이 운전할 수 있도록 도와주는 로봇기술을 개발한 경험으로부터 자신이 하고 있는 일이 사람들에게 도움이 될 수 있다는 것을 가슴으로 깨닫게 되었다.
  • 모든 분야의 전문가가 될 수는 없다. 협력을 잘하는 것이 중요하다. 자신은 기계공학 전공이지만 필요한 분야에 대해 어느정도 이해도를 가지고 있다.

토크쇼

  • 고우성: 같이 일하는 사람이 즐거워하는가를 생각하며 일을 한다. 즐거움이 있어야 창의적인 아이디어가 나올 수 있다.
  • 데니스홍: 내 꿈은 로봇엔지니어 뿐만 아니라 요리사, 마술사. 다양한 분야에 대한 관심과 경험이 새로운 발상에 도움이 된다.
  • 데니스홍: 뛰어난 사람보다 같이 재밌게 일할 수 있는 사람을 선택한다. 친구가 되고 싶은 사람.
  • 박용후 디자이너: 착한 사람, 기업과 일해야 지속성을 가질 수 있다. 식당에서 종업원에게 함부로 대하는 사람은 ROI로 사람을 판단한다. 필요없으면 사람을 버리는 사람. 나로 인해서 다른 사람이 행복했으면 좋겠다는 생각을 가진 사람이 착한 사람. 이러한 가치를 추구하는 기업이 착한 기업.
  • 유진평: 자발적으로 만들어갈 수 있는 환경을 마련해 주자. 임의로 만들어 내는 방향은 아니라고 생각한다. 미래창조과학부를 예로 들어.
  • 박용후: 성공하는 앱의 공통점은 단순함. 자발적 확산 구조를 활용. 상황, 환경을 잘 활용함. 인프라에 대한 이해. 사람들이 열광하는 코드를 읽기. 실패하는 앱들은 결이 없다. 하나의 흐름이 없고 흩어져있다.
  • 박진형: 창업에 사람이 제일 중요. 믿고 함께할 수 있는 사람을 선택.
  • 유명환: 합의를 만들어낼 수 있는 사람과 함께 일해야 한다.
  • 박용후: 커뮤니케이션을 못하는 회사는 똑똑한 사람들을 모아놓고 멍청한 선택을 한다. 카카오톡은 직책 호칭이 없어서 장벽없이 커뮤니케이션을 한다.
  • 양수열: 개발자가 인문학적인 부분까지 잘 할 수 있을지는 어려운 문제. 중요한 것은 커뮤니케이션 능력.
  • 데니스홍: 연구실에서 학생을 뽑을 때 나와 같이 되고 싶은 사람. 나와 같은 사람, 친구가 되고 싶은 사람을 선발한다.
  • 박용후: 동기부여가 가장 중요. 어떤 일을 해야하는지 명확히 인식이 되었다면 회사에 출근하지 않아도 일을 할 수 있다. 자유보다 자율이 중요하다.
  • 유명환: 분야를 떠나서 함께 일을 해결하려는 의지가 필요함.

Node.js로 다운로드 완료된 파일 목록을 메일로 전송하기

Summary

토렌트(Deluge)로 다운로드를 걸어놓고 진행상황을 매번 확인하기 귀찮아서 구현한 코드입니다. 다운로드 디렉토리를 관찰하다가 새로운 파일을 발견하면 files 맵에 파일이름을 키로 저장해 두고 3분을 기다립니다. 3분이 경과하면 files 맵에 저장된 파일 중 실제로 존재하는 파일만 추려서 파일 목록을 만들어내고 이를 G메일로 전송합니다. G메일 전송에는 emailjs라는 모듈이 사용되었습니다.

Module

$ npm install emailjs

Source

var fs = require('fs');
var path = require('path');

var completeDir = '/data/torrent/complete';
var files = {};
var working = false;

var email = require("emailjs/email");
var server = email.server.connect({
   user: "reshout",
   password: "xxxxxxxx",
   host: "smtp.gmail.com",
   ssl: true
});

fs.watch(completeDir, function(action, filename) {
  files[filename] = true;
  if (!working) {
    working = true;

    var text = "";
    var count = 0;

    setTimeout(function() {
      for (var prop in files) {
        if (files.hasOwnProperty(prop)) {
          var apath = path.join(completeDir, prop);
          if (fs.existsSync(apath)) {
            text += (prop + "\n");
            count++;
          }
        }
      }

      server.send({
        text: text,
        from: "reshout <reshout@gmail.com>",
        to: "reshout <reshout@gmail.com>",
        subject: "[reshout.com] " + count + " files downloaded"
      }, function(err, message) {
        console.log(err || message);
      });

      working = false;
      files = {};
    }, 1000 * 60 * 3);
  }
});