2014년 11월 21일 금요일

마늘 볶음밥

안녕하세요

점점 요리 블로그가 되는 기분이 들지만 기분 탓이려니 넘기고..

오늘은 금요일이니까 뭔가 맛난게 땡겨서 볶음밥을 해봤습니다.

재료는 남는 거 + 마늘(...) 이므로 마늘 볶음밥입니다.

다음과 같습니다


1인분이라고 하기에는 좀 많은 것 같습니다만, 넘어갑니다.

마늘이랑 햄을 좀 볶다가 밥이랑 계란과 닭가슴살(...남아서) 을 넣고 볶습니다.

완성

취향에 맞게 후추를 넣습니다. (탄거 아니에요)

맛은 마늘향이 가득(...저렇게 넣었으니) 합니다.

마늘을 좋아하므로 저는 만족

난이도: 3(기름양과 볶는 시간 조절이 필요합니다)
맛: 7 (개인적으로 좋아하는 맛)
가성비: 남는 재료라 모름


...아 이렇게 먹으니 도무지 운동을 해도..ㅠㅠㅠㅠㅠ

좋은 주말 되시길..



2014년 11월 19일 수요일

닭가슴살 마늘구이

안녕하세요

간만에 운동을 빡세게 하고오니 밀려오는 허기를 주체하지 못하고-

그렇다고 대충 먹자니 뭔가 억울(?)해서 나름 간단한 음식을 만들어봤습니다.

그런데 구상하고보니 결국 대충 먹은 것 같은게 함정...

뭐 일단 요즘 오르는 주부력(?) 덕에 그래도 전보단 잘하니까요..;



재료는.. 마늘이랑 닭가슴살이 전부입니다ㅡ_ㅡ;;

그냥 마늘을 적당이 썰어서(하지만 귀찮아서 2등분) 먼저 기름을 두른 후라이팬에 굽습니다.

전 몹시 두꺼웠기 때문에 좀 오래 구웠어요-

그리고 어느정도 익었을때, 기름을 뺀 닭가슴살을 투하!

한 20~30초 정도 타지 않게 구워주면 끝입니다.

취향껏 후추를 좀 뿌려 먹으니 먹을만했어요-


완성-_-;;

한 5분정도 걸린거 같네요

난이도: 1 (계란후라이랑 비슷)
맛: 5 (그래도 먹을 만합니다. 마늘을 좋아해서 그런가..)
재료비: 1300원 (닭가슴살 1000원, 마늘은 한 300원 어치쯤 쓴거 같음)

뭐 가성비 나쁘지 않게 먹었네요-

아.. 전에 막 수육도 하고(...) 난이도 5이상의 요리도 했는데,

사진을 찍기 힘든 환경이라 사진을 못찍었네요-

회사때문에 폰카를 봉인해놔서 ㅠㅠ 

이거도 무려 맥북 들고 찍은 사진...


뭐 어찌되었던,

그냥 아무거나 써야지 싶은 블로그에 간만에 소식 올립니다.

모두 즐거운 연말되시길..

2014년 11월 16일 일요일

Reinventing the wheel

Reinventing the wheel (http://en.wikipedia.org/wiki/Reinventing_the_wheel) 에 대해서는 이전에도 여러 글에도 소개가 되어 있기에, 스스로도 바퀴를 다시 만드는 일은 하지 말자고 늘 생각하고 있었습니다.

그럼에도 일을 하다보면 어쩔 수 없이 '간소화된 바퀴'라도 다시 만드는 경우가 많습니다.

하지만 대부분의 경우 일이 진행되면서 결국 '제대로 된 바퀴'를 요구하기 마련이기에 진작에 만들어진 바퀴를 쓰는 것이 더 좋습니다.

그걸 알지만 쉽지는 않습니다.

여러가지 이유가 있겠지만, '당장 지금 해야 합니다'가 큰 비중을 차지하고 있을 것 같습니다.

이 경우, 당연히 기존의 바퀴를 이해하지 못하고 있기에 당장 필요로 하는 기능만 하는 바퀴를 만드는 것을 시도합니다.

과연 '진작' 이걸 알 수 있을까요? 미리 모든 바퀴를 학습해야 할까요?

아니면 '당장' 이것을 해야 하는 것 자체가 좀 잘못된 것일까요?

뭔가 모순같지만, Reinventing the wheel을 하지 않으려면, 바퀴 '안'만들 시간이 필요한 것 같습니다.

2014년 9월 5일 금요일

이른 가을 조금 피곤한 기분으로 카페에서

글을 씁니다.

딱 나쁘지 않은 날씨에 조금 피곤해서 나름하네요.

할 일은 늘 많은 것 같고 그렇네요.

그래도 사실 노느라 시간을 다 쓰고 있어서 한편으로는 좀 부끄럽기도 하고요.

오히려 전보다 더 게을러지고 관리도 안하는 것 같습니다.

다시 또, 다시.

마음을 잡아봐야죠.

2014년 2월 13일 목요일

이와키 워터드립 튜닝기

얼마전에 충동 구매로(...) 이와키 워터드립 기구를 구매하였습니다.
( http://www.caffemuseo.co.kr/shop/detail.asp?g_num=2989 )

비싸게 느껴졌던 워터드립 기구였는데, 이처럼 저렴한 제품이 아른거리니 정신 차려보니 결제 완료였습니다(ㅜㅜ)

하지만 싼 것은 다 이유가 있는법-

워터드립에서 아주 중요한 요소인 '물 조절'이 불가능한 치명적인 단점이 있었습니다.

워터드립은 아주 천천히 물방울이 떨어져야 하는데, 이 제품은 약 1~2초에 한 방울(나중에 수압이 낮아지면 좀 느려지긴 합니다 만 그래도 빠릅니다)씩 떨어지더군요-

다행히 해결이 불가능한 문제는 아니었습니다. 사용 후기를 보면 수많은 사람들이 이런 고민을 하고 있었고, 그 중 많은 사람들이 이를 해결하고 방법을 공유하였습니다. (이러한 부분도 저의 충동 구매를 거들었죠)

몇 가지를 시도해봤는데, 일단 다 실패했습니다. 다음과 같습니다.


  • 물통에 단추 놓기: 단추가 충분히 눌리지 않아 어려움
  • 구멍을 필터(혹은 실)로 막기: 필터가 불어나 물이 막히기 쉬우며 수압이 낮아지는 것에 대한 대응이 어려움
  • 구멍을 글루건으로 막고 다시 구멍 내기: 글루건이 인체에 무해한지 판단하기 어렵고, 기구가 손상되므로 시도하지 않음
시도하지는 않았지만 3번째 방법에서 영감을 얻어 어제 다음을 테스트 해봤습니다.
  • 구명을 비닐로 덮고 새로 구멍 내기: 비닐을 덮는 것이 좀 귀찮긴 하지만, 수압이 낮아지면 구명을 좀 더 내서 조절 할 수 있는 장점이 있습니다. 노하우가 조금 필요합니다.
그나마 가장 만족스러운 방법으로 오늘은 이를 업그레이드 하여 랩으로 덮고 구멍을 내는 방법을 시도해보려고 합니다. 

성공한다면 청소도 쉽고, 외관상 큰 단점도 없을 것 같아 괜찮은 방법이 될 것 같습니다.

다만, 그간의 실험으로 집에 커피가 넘쳐가는 관계로(...) 커피를 조금 소진한 다음주에 시도해보겠습니다.




2014년 1월 21일 화요일

Python property

Python 에는 property라는 것이 있습니다.

간단하게 이해하면 Java의  getter/setter등을 대체 할 수 있는 것입니다.

사실 Java에 property 기능이 없어서 getter/setter 와 같은 관용구가 한 예로 사용되는 것이지 좀 더 넓은 의미인데요, python에서는 attribute를 그대로 노출 시키는 것을 권장하는 것 같습니다.

기본적으로 다음과 같이 씁니다. (pybrain code에서 일부 가져왔습니다)
vectorformat = property(getVectorFormat, setVectorFormat, None, "vectorformat can be '1d', '2d' or 'list'")
첫 인자부터 Read, Write, Delete, Doc 로 이해하시면 됩니다.

(아마도)2.6 부터는 decorator로 제공되며 다음과 같이 사용 할 수 있습니다.

@state.setter
def state(self, k):
        if not (0 <= k <= 2):
            raise ValueError("Must be 0 through 2 inclusive!")
        else:
            self._state = k


좀 더 자세한 내용은 다음의 블로그에 잘 나와있습니다.
http://infohost.nmt.edu/tcc/help/pubs/python27/web/property-function.html
http://blog.dahlia.kr/post/2492201571

2014년 1월 9일 목요일

그것은 언제나 당신의 잘못이다.

얼마 전, 잘 동작하던 프로그램이 잘 동작하지 않았습니다.
build system이 꼬여 있는 것은 아닌가, 이전 로직에 문제가 있다가 이제야 발생하는 것은 아닌가 등의 여러 원인을 생각하고 분석하면서 시간을 보냈습니다.

그렇게 먼 길을 돌아온 끝에 저는 저의 코드에서 작은 실수를 발견했습니다. ('!'를 빼 먹었더군요)

생각해보면 당연합니다. 제가 commit 한 코드 몇 줄이 가장 최신에 반영이 되었거든요-
그럼에도 저는 저 멀리 있는 것부터 의심하고 있었습니다.

'코딩 호러의 이펙티브 프로그래밍'을 읽다 보면 다음과 같은 항목이 나타납니다.
프로그래밍의 첫 번째 원리: 그것은 언제나 당신의 잘못이다.
네, 그렇습니다. 저의 잘못입니다. 사실 당연히 다른 것들보다 제가 방금 넣은 그것이 가장 문제가 되겠지요.

그럼에도 자신을 돌아보기보다 다른 곳을 먼저 확인하는 것을 보고 '참 아직 멀었구나' 라는 것이 느껴졌습니다.

그래도 그나마 다행이라고 위안 삼는 것은 발견한 직후 팀원들에게 바로 저의 실수로 인한 버그라는 것을 인정하고 그에 대한 수정 로그를 공유 했다는 점입니다. (더욱 다행인 건 해당 버그는 널리 알려지지 않았습니다)

아직 부족한 것이 많아서 그런지 스스로의 허물을 먼저 의심하고 인정하는 일이 쉽게 되지는 않습니다.

뭐, 이런 경험을 쌓다 보면 좀 더 나아지지 않을까 하는 생각을 해봅니다.


문제가 생겼습니까?

그럼 스스로를 먼저 의심하세요

2014년 1월 7일 화요일

Python Dictionary Key로 boolean 사용

요즘 틈틈이 아주 아주 느린 속도로 pybrain code를 보고 있습니다. python을 잘 못해서 공부하려는 목적으로 보고 있는데, 그래서 인지 신기한(?) 코드가 많네요.

오늘 본 코드는 dictionary 의 key 활용입니다.
우선 간단하게 dictionary에 대해서 설명하면  'key'와 'value' 쌍을 가지는 자료형 입니다. 가장 단순한 예로 다음과 같이 쓸 수 있습니다.
>>> dic = {'key1' : 'value1', 'key2' : 'value2'}
>>> dic['key1']
'value1'
유용하게 자주 쓰는 자료형인데요, key 에 boolean이 포함된 tuple이 쓰일 수 있는 것은 생각 못했습니다. 오늘 발견한 코드가 그 예입니다.
    network_map = {
        (False, False): FeedForwardNetwork,
        (True, False): RecurrentNetwork,
    }
자주 쓰이는 코드 형태인지는 몰라도 유용할 것 같습니다. 다음과 같은 것도 가능합니다.
>>> dic = {(True, False) : "t, f"}
>>> dic[(True, 1==2)]
't, f'
키 자체를 평가해서 위와 같이 값을 구해 올 수 있습니다.

 

매일매일 정보를 공유하면서 느낀점

작년에 회사에서 매일 하던 활동이 하나 있습니다.

'정보 공유 활동' 인데요, 매일매일 사람들에게 제가 알게된 유용한 지식을 전달해 주는 활동입니다. 기사나 블로그등을 공유하였는데, 일부는 직접 해보고 간단한 소감(?)을 덧붙여서 공유를 했습니다.

이를 통해 다른 사람들의 의견을 알고 싶었고, 더 나아가서 다른 사람들도 이러한 활동을 부담없이 했으면 좋겠다는 생각에 시작했습니다. 하지만 예상보다 그러한 변화는 적었습니다.

무엇이 문제였을까요? 요즘 읽고 있는 '제프 앳우드'의 '이펙티브 프로그래밍'에서 '예를 통해 리드하기' 라는 글에 다음의 글이 인용되어 있습니다. (원문은 데니스 포브스(Dennis Forbes)의 글이라고 합니다)
겸손하라. 언제나 일단 자기가 잘못됐다고 가정하라. 개발자들은 실수를 저지르지만, 그리고 새로 들어온 당신은 다른 개발자가 저지른 실수를 발견하고 수정할 수 있게 도와야 하지만 당신이 발견한 사실을 자부심을 가지고 발표하기 전에 그것이 정말로 확실한지 여부를 거듭 확인해야 한다. 잘못 발견한 내용을 가지고 떠들거나 하면 당신의 신뢰도에는 회복할 수 없는 결정타가 가해지기 때문이다.
건설적인 비판에 집중하며 끝까지 신중하라. 청취자의 넓히는 것은 방어논리나 보복을 야기할 가능성을 높인다. 팀은 언제나 당신의 동기가 무엇인지 주목하고있으며, 만약 당신이 자신의 업적을 과시하기 위해 다른 사람들의 업적을 훼손하면 곧바로 발각되어 추방될 것이다.
신뢰와 준경을 얻는 최선의 방법은 엄청난 노력과 실질적인 결과를 보여주는 것뿐이다. 모든 사람에게 좋은 개발 방법론을 이메일로 전송하거나, 어떤 기술을 이용하면 훌룡한 결과를 낳을 거라는 식의 조언을 보내는 식의 값싸고 피상적인 대체물은 동일한 결과를 낳지 못하며, 설령 그렇다고 해도 효과가 지속되지 못한다.
행동은 말보다 설득력이 있다. 팀블로그나 위키, 새로운 소스코드 관리 메커니즘, 혹은 새로운 기술에 대해 말하는 것은 값싼 일이다. 누군가 힘든 노력을 통해 그런 것들을 실제로 구현했을 때 당신은 그저 그 아이디어에 대한 소유권을 주장하려고 하고 있을 뿐이라는 사실을 다른 사람들은 이미 잘 알고 있다. 뭔가를 제안하고자 한다면 제안을 뒷받침하는 노력을 실제로 기울여야 한다. 예를 들어 초보적인 사용자 가이드라인이나 팀블로그에서 사용되는 기술에 대한 실제 데모를 통해 팀블로그의 기초적인 작업이 무엇인지 보여줘야 한다. 이러한 노력이 곧 당신의 아이디어가 채택될 것임을 보장하지는 않는다. 이런 노력이 수포로 돌아갈 수도 있다. 그렇지만 팀은 당신이 손쉽게 신뢰를 얻으려고 하는 것이 아니라 실제 동기를 가지고 있다는 것을 보게된다.
모든 상황에 들어맞는 조언은 없다. 모든 애플리케이션이 수많은 방문자를 자랑하는 전자상거래 사이트인 것은 아니다. 어떤 방법이 단지 널리 사용된다고 해서 당신이 들어가려는 그룹에게도 잘 맞는 설계 철학이라고 할 수는 없다.
제가 특히 뜨끔한 항목은 '행동은 말보다 설득력이 있다. 팀블로그나 위키, 새로운 소스코드 관리 메커니즘, 혹은 새로운 기술에 대해 말하는 것은 값싼 일이다. ' 입니다. 물론 저는 공유 활동 자체가 의미를 가지고 퍼지기를 바랬으므로 조금 다르겠지만, 저러한 마음이 없지는 않았는지 반성해 봅니다.
또한, 글에서 말하는 '행동'을 좀 더 구체적으로 실행하지 않을 것이 잘못되지 않았나 싶은 생각이 듭니다.

그래서 올해부터는 그간의 정보 공유 활동을 중단하고 이를 발전시켜 직접 행동한 것을 가끔씩 공유하는 것을 시도해보려고 합니다.

이유는 다음과 같습니다.

  • 위에서 언급한 것과 마찮가지로 '값싼 일'을 하고 싶지는 않습니다. 정말 중요한 것을 제가 직접 해보고 그것을 좀 더 깊이 있게 공유하는 것이 참여를 유도하는 것에 더 도움이 될 것으로 판단됩니다.
  • 어째서인지 사람들은(저를 포함하여) 매일매일 오는 무언가를 점차 가볍게 생각하는 경향이 있습니다. 시스템의 경고 이메일도 매일보면 느슷해지는 법이죠. 그래서 비정기적으로 정보를 공유하려고 합니다.
  • 개인적으로도 얕은 정보를 공유하는 것보다는 이는 그냥 알고 있고, 중요한 것 몇가지를 깊이있게 보는 것이 더 발전적이라고 느꼈습니다.
올해는 저의 활동이 좀 더 긍정적으로 작용하기를 기대해봅니다. 

2014년 1월 6일 월요일

블로그 시작합니다

30이 되었습니다.

블로그를 시작합니다.

사실 블로그는 처음이 아닙니다. 
그간 무수한 블로그를 만들고 또 접었습니다.

그럼에도 이렇게 '또' 시작합니다.

이렇게 자꾸 '또' 하다보면, 작게나마 무언가 남아가겠지요-


이번 블로그 시작에서 전과 다른점은 제 이름으로 시작한다는 점이네요.

그전에는 익명으로 활동을 하려고 했는데, 왜인지 이제는 제 이름으로 하는 것이 맞다고 느껴집니다. 

굳이 의미를 붙이자면 30이되어서 그런걸까요? (사실 전부터 느낀거라서 이 이유는 아니겠지만요 :) )

그래서 더 책임을 가지고 이번에는 좀 더 오래, 가능하다면 쭉 블로깅을 했으면 좋겠습니다.