프로그래머의 길 멘토에게 묻다

저자
데이브 후버, 애디웨일 오시나이 지음
출판사
인사이트 | 2010-07-26 출간
카테고리
컴퓨터/IT
책소개
프로그래머가 되고 싶다면..소프트웨어 개발 분야에서 경력의 시작...
가격비교 글쓴이 평점  


장인 정신이라는 관점에서 프로그래머는 어떻게 공부해나가야 할까에 대한 길잡이가 되어줄 수 있는 책이다.

책은 먼저 장인이 되기 전, 장인이 되기 위해 장인이나 숙련공 밑에 들어가 배우는 견습생에 빗대어 설명하고 있다.

프로그래머의 장인 정신이라는 개념은 Software Craftsmanship (Pete McBreen 저, 번역서) 책에서 소개된 듯 하다.


책은 패턴 언어(Pattern Language)로 구성되어있다.

예전엔 잘 몰랐는데, 이름을 붙이는 것은 중요한 일이라고 느껴진다. 패턴 언어의 장점으로 꼽는 것은 구구절절이 설명해야 할 것을 패턴 언어로 표현함으로써 이해와, 시간을 절약할 수 있다. 어쩌면 심오할 지 모르는 철학이 담긴 패턴 언어를 너무 쉽게 말하는 건 아닌가 싶다.


개발자에게 패턴이라고 하면 딱 떠오르는 건 GoF의 디자인 패턴이 아닐까?

그 외에도 스터디 그룹을 위한 패턴 언어[각주:1]도 있고, 다양한 분야에 적용되고 있는 듯 하다.


예전에 황병선 멘토님이 말씀하시길 "전문가는 전문 용어를 사용하여 있어보이게 말하는 것"라고 하셨다. 물론 농담조이었긴 하지만, '있어 보이는'것을 떠나 그러한 용어를 사용해서 지식을 공유하는 사람들끼리 효율적인 의사소통을 가능하게 한다.


앞으론 어떠한 것을 설명하는 것이 반복된다고 느껴지면 이름 붙이기를 연습해봐야겠다.

이를 테면 가끔 스터디를 진행하거나, 지인이 프로그래밍을 하다가 막히는 부분이 있어 물어볼 때 원격 데스크탑으로 연결하여 화면을 공유하면서 직접 코드를 작성하면서 보여주거나, 주석을 달면서 이렇게 이렇게 해봐라고 한 적이 많았는데, 이런 것에 원격 패어 프로그래밍이라고 이름을 붙여보는 것도 재밌을 듯 하다.


책은 아직 내가 가보지 않은 길에 대한 얘기도 많이 나온다. 이 책에 소개된 환경을 겪게 된다면 그 다음은 장인으로 향하는 길이 될 것이다. 위에 나온 책 소프트웨어 장인 정신이나 실용주의 프로그래머의 경우는 프로그래머에게 이 책의 다음 길잡이가 되어줄 수 있다고 하니, 천천히 읽어봐야겠다.

아직은 봐도 이해하거나 공감할 수 없는 부분도 있으니 그런 때가 와 봐야 책의 진의를 느낄 수 있지 않을까?


* 한국 위키피디아 - 패턴 언어




  1. http://www.industriallogic.com/papers/khdraft.pdf [본문으로]



후쿠시마에 남겨진 동물들

저자
오오타 야스스케 지음
출판사
책공장더불어 | 2013-03-10 출간
카테고리
과학
책소개
다큐멘터리 사진작가가 기록한 후쿠시마에 남겨진 동물들 쓰나미로 ...
가격비교


지진으로 인한 쓰나미와 후쿠시마 원전 폭발로 인해서 사람이 떠나온 후쿠시마에 남은 동물들의 참상을 그리고 있다.



프레임

저자
최인철 지음
출판사
21세기북스 | 2011-03-20 출간
카테고리
자기계발
책소개
나의 한계를 깨는 마음 경영법 프레임을 바꾸면 인생이 바뀐다! ...
가격비교


책을 읽으며 다시 프레임이라는 프레임에 빠지지 않을까 싶지만, 당연하게 선택을 해왔던 것들이 의식적이든 무의식 적이든 프레임의 영향을 받는다는 걸 알게 되었다.

노블레스 오블리주Noblesse Oblige


높은 신분에 따른 도덕적 의무,


14세기 백년전쟁 때 프랑스의 도시 칼레는 영국과의 전쟁 중 더 이상 원병을 지원받을 수 없게 되자, 항복 선언을 한다.

영국은 항복을 받아들이는 조건으로 그동안의 반항에 대한 책임으로 칼레 시민 중 6명을 처형하도록 하고,

그 조건에 따르면 그들을 제외만 칼레 시민의 목숨을 살려주겠노라 했다.

누가 모두를 위해 죽을 것인가?

가장 먼저 가장 부자였던 외스타슈 드 생 피에르가 먼저 나섰고, 이어 시장, 상인, 법률가 등의 귀족들도 처형에 동참한다. 다음 날 그들은 처형을 받기 위해 교수대에 모였다. 그러나 임신한 왕비의 간청을 들은 영국 왕 에드워드 3세는 죽음을 자처했던 시민 여섯명의 희생정신에 감복하여 처형을 하지 않게 되었다.

출처 : 한국 위키피디아 - http://ko.wikipedia.org/wiki/노블레스_오블리주



지식에 있어서 노블레스 오블리주는 어떤 것일까 하고 생각해봤다.

노블레스 오블리주의 원래 의미는 고귀하게 태어난 사람은 고귀하게 행동해야 한다라는 의미를 갖고 있지만

지식에 있어서도 노블레스 오블리주가 적용될 수 있지 않을까?

신분의 높고 낮음이 아니라, 먼저 경험해보고 먼저 배운 사람이, 후에 배우는 사람들을 위해서 자신의 경험과 지식을 나눠주는 것이 아닐까 싶다.


knowblesse oblige?


'마음이 뛰다' 카테고리의 다른 글

Do you want to stay here?  (0) 2013.11.22
뚜렷도?  (0) 2013.10.10
나를 완성해 가는 길  (0) 2013.08.23
가입도 안된 사이트에서..  (0) 2013.03.12
이기적이다.  (0) 2013.03.08

완성이라고 하는 것의 기준은 본인이 잡기 나름이겠지만,

나에게 있어 나를 완성한다는 것은 없지 않을까 싶다.


어떤 목표를 달성하기 위한 기준을 두고 그 기준을 통과하면 본인 스스로도 만족을 느끼게 된다.

그 만족감으로 인해 나태해져 안도감을 느끼고 그 자리에 안주하는 일은 내게는 맞지 않다.

개인차에 따라서 거기까지가 어떤 것을 성취함에 있어 끝이라고 볼 수도 있지만

그 성취라는 것에 있어 나는 욕심이 무진장 많기 때문에 지금으로써는 그럴 일은 없을 거란 판단을 조심히 해본다.


나는 아직 내 스스로가 이것만큼은 자신있다! 라고 할 수 있는 게 없다.

나를 아는 나와 비슷한 입장의 분들은 니가 왜 잘하는 게 없냐고 되려 따지면서 겸손이라고 하기도 한다.

정말로 내게는 그게 겸손이 아니라 내가 공부하는 것들에서 내가 한없이 모자람을 느껴 진심으로 하는 말이다.

공부를 하면 할 수록 배워서 알게 된 것보다 내가 모르는 것들이 이렇게 많구나 하는 걸 더 알게 된다.

그렇다고 해서 허탈함을 느끼기 보다는 되려 더 자극이 된다.


과유불급이라 했다. 당연히 욕심 내지 않고 수순에 맞게, 그릇에 맞게 공부하는 것도 필요하다.

아직은 미숙한 것도 많고, 욕심도 많지만 조절하면서 그 욕심을 채워나가고 싶다.

'마음이 뛰다' 카테고리의 다른 글

뚜렷도?  (0) 2013.10.10
Noblesse Oblige  (0) 2013.08.29
가입도 안된 사이트에서..  (0) 2013.03.12
이기적이다.  (0) 2013.03.08
경비아저씨께서 책을 빌려주셨다.  (0) 2013.03.06

Netty를 이용해서 웹 소켓 서버를 만들고 클라이언트에서 웹 소켓을 열고 통신을 하다보니

웹 소켓에서는 아직 텍스트 통신만 지원한다.


따라서 양쪽에서 서로 쓰기 좋은 Json 포맷으로 통신하다보니 서버쪽은 자바로 구성되어 Gson 라이브러리를 쓰고,

클라이언트에서 자바스크립트로 Json <-> Object 가 필요해서 찾아보니 내장 객체로 JSON이 있다는 것을 알게 되었다.

(관련 Stack Overflow 글)


JSON Parsing 내장 객체를 지원하는 브라우저는 다음과 같다


(http://caniuse.com/json)


JSON 객체의 함수로는 Object를 Json 문자열로 변환하는 stringify 와 반대로 Json 문자열을 객체로 변환하는 parse 함수가 있다.


JSON에 관한 설명은 MSDN에 잘 나와있어 사용방법에 관한 내용은 생략하고 매개변수에 대한 내용만 스크랩했다.

http://msdn.microsoft.com/ko-kr/library/ie/cc836466(v=vs.94).aspx


1. JSON.stringify(value [, replacer] [,space])

value

필수 요소. JavaScript 값은 일반적으로 변환할 개체 또는 배열입니다.

replacer

선택 사항입니다. 결과를 변환하는 함수 또는 배열입니다.

replacer가 함수이면 JSON.stringify는 키와 각 멤버의 값을 전달하여 함수를 호출합니다. 반환 값은 원본 값 대신 사용됩니다. 함수가 undefined를 반환하면 멤버가 제외됩니다. 루트 개체의 키는 빈 문자열인 ""입니다.

replacer가 배열이면 배열에 키 값이 있는 멤버만 변환됩니다. 멤버가 변환되는 순서는 배열의 키 순서와 같습니다. replacer 배열은 value 인수도 배열인 경우 무시됩니다.

space

선택 사항입니다. 읽기 쉽도록 들여쓰기, 공백, 줄 바꿈 문자를 반환 값 JSON 텍스트에 추가합니다.

space가 생략되면 반환 값 텍스트가 추가 공백 없이 생성됩니다.

space가 숫자이면 반환 값 텍스트가 각 수준의 지정된 공백 수로 들여쓰기됩니다. space가 10보다 크면 텍스트가 10칸 들여쓰기됩니다.

space가 '\t'와 같이 빈 문자열이 아니면 반환 값 텍스트가 각 수준의 문자열의 문자로 들여쓰기됩니다.

space가 10자보다 긴 문자열이면 처음 10자가 사용됩니다.

변환할 객체에 toJSON(key) 함수가 있는 경우 해당 키를 가진 값을 변환하여 반환한다.



2. JSON.parse(value [,reviver])

value

필수 요소. JavaScript 값은 일반적으로 변환할 개체 또는 배열입니다.

replacer

선택 사항입니다. 결과를 변환하는 함수 또는 배열입니다.

replacer가 함수이면 JSON.stringify는 키와 각 멤버의 값을 전달하여 함수를 호출합니다. 반환 값은 원본 값 대신 사용됩니다. 함수가 undefined를 반환하면 멤버가 제외됩니다. 루트 개체의 키는 빈 문자열인 ""입니다.

replacer가 배열이면 배열에 키 값이 있는 멤버만 변환됩니다. 멤버가 변환되는 순서는 배열의 키 순서와 같습니다. replacer 배열은 value 인수도 배열인 경우 무시됩니다.

space

선택 사항입니다. 읽기 쉽도록 들여쓰기, 공백, 줄 바꿈 문자를 반환 값 JSON 텍스트에 추가합니다.

space가 생략되면 반환 값 텍스트가 추가 공백 없이 생성됩니다.

space가 숫자이면 반환 값 텍스트가 각 수준의 지정된 공백 수로 들여쓰기됩니다. space가 10보다 크면 텍스트가 10칸 들여쓰기됩니다.

space가 '\t'와 같이 빈 문자열이 아니면 반환 값 텍스트가 각 수준의 문자열의 문자로 들여쓰기됩니다.

space가 10자보다 긴 문자열이면 처음 10자가 사용됩니다.



금방까지 작업하던 이클립스를 종료하고 다시 시작했더니,


로딩 중에 응답이 없어지면서 더 이상 진행이 되질 않는다.

로딩 중인 패키지는 org.eclipse.mylyn.task.ui





키워드를 org.eclipse.mylyn.task.ui 그대로 검색해보니 이클립스의 버그인 듯 하다

참고 : http://eclipse.1072660.n5.nabble.com/Workbench-fails-to-start-Plug-in-org-eclipse-mylyn-tasks-ui-was-unable-to-load-class-org-eclipse-mylt-td134522.html


고치는 방법은 실행 시 워크스페이스 입력 대화상자에서 다른 워크스페이스를 선택해서 한번 실행했다가

File 메뉴에서 Switch Workspace를 이용해 원래의 워크스페이스를 선택하면

이클립스가 재시작되면서 정상적으로 동작한다.



Android SDK Tool 20 버전 이상부터 Library Project의 AndroidManifest.xml 의 내용을 애플리케이션 프로젝트의 Manifest에 병합할 수 있게 되었다 (관련 링크 : http://tools.android.com/download/adt-20-preview)


  • Build System
    • Automatic merging of library project manifest files into the including project's manifest. Enable with the manifestmerger.enabled property.


이전에는 Library Project의 매니페스트에 서비스나 액티비티, 퍼미션 등을 등록하더라도 해당 Library Project를 사용하는 애플리케이션 프로젝트에는 아무런 적용이 되지 않았는데, ADT 20 부터는 이를 활용할 수 있게 된것이다.


지금 소마에서 개발하고 있는 Salina의 안드로이드 SDK에서 퍼미션이나, 서비스 사용을 위해서 애플리케이션 프로젝트에서 이래저래 설정해줘야 할 것들이 많았는데, 이것으로 SDK의 적용이 아주 쉬워졌다. 라이브러리를 개발하는 입장에서는 아주 큰 이점이 아닌가 싶다.


라이브러리 프로젝트와 애플리케이션 프로젝트의 Manifest의 내용이 중복되는 경우의 충돌은 확인해 봐야할 듯 하다.


적용방법은 간단하다.  프로젝트의 설정파일(project.preference)에서 manifestmerger.enabled=true 만 추가해주면 적용된다.

Salina Project에서 RatingBar가 아래 같은 모습으로 들어가야 하는데 기본 크기는 너무 크다






그렇다고 그냥 RatingBar의 layout_width, layout_height의 크기를 줄여버리면 이런 모습이 되어버린다.


ㅡㅡ...




검색 결과 중 대부분이 RatingBar를 커스터마이징 하기 위해서 style xml을 만들어내는 것이었는데,

(http://blog.naver.com/PostView.nhn?blogId=telsome&logNo=90094111681)

RatingBar를 커스터마이징 할 수도 있는 거지만 크기만 변경하는 되는 문제여서 더 간단한 것을 찾다 보니 

StackOverFlow에서 답을 찾을 수 있었다.


>> StackOverFlow : Decrease the size of Rating Bar in android 2.1


RatingBar의 xml에 속성에 style="?android:attr/ratingBarStyleSmall" 를 추가하면 보다 작은 크기로 적용이 된다.


<RatingBar
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    style="?android:attr/ratingBarStyleSmall"/>


다만 정확히 원하는 크기로 변경하기 위해서는 커스터마이징을 해야한다.

이미지뷰를 화면에 꽉 채우기에 앞서 뷰의 영역에 대해 먼저 설명하겠습니다.



그림이 다소 난잡하지만, 하나의 뷰는 크게 세 가지 영역으로 볼 수 있습니다.

뷰가 실제로 보이는 크기와는 상관이 없지만 다른 뷰와의 거리를 조절하는 외부 여백 margin

눈에 보이는 크기에 포함되는 내부 여백 padding,

전체 뷰 크기에서 위의 두 여백을 제외하고 내용이 들어가는 부분으로 나뉘어집니다.


margin과 padding은 둘다 여백이지만 뷰에 배경색상을 지정했을 때 margin 영역에는

배경색상이 지정되지 않고 공간만을 차지하고, padding 부분에는 배경색상이 적용됩니다.


왜 이 이야길 꺼냈느냐 하면, 액티비티에 이미지뷰를 삽입하려면 이미지뷰를 둘러싸고 있는 레이아웃이

padding의 값이 0이 아닌 경우가 있기 때문에 이미지뷰를 아무리 키운다고 한들 여백이 생기기 때문입니다.


IDE (Eclipse나 IntelliJ 기반의 Android Studio)에서 새로운 레이아웃 XML을 자동으로 생성하면

기본 레이아웃은 RelativeLayout이고 요런 속성이 주렁주렁 달려서 자동으로 xml 문서가 생성됩니다.

android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"


저렇게 자동으로 생성된 xml 레이아웃 파일의 경우 저 부분을 제거해주어야 원하는 대로 화면에 꽉 찬 이미지뷰를 만들 수 있습니다.



여백에 관한 얘기는 여기까지 하고, 이미지뷰에서 이미지를 채우기 관련 속성인 scaleType에 대해 알아보겠습니다.

scaleType 속성이 가질 수 있는 값은



위의 그림과 같이 matrix, fitXY, fitStart, fitCenter, fitEnd, center, centerCrop, centerInside 여덟가지입니다.


위 속성에 관해 녹두장군님의 포스트(http://mainia.tistory.com/473)에서 설명이 잘 되어있어 링크로 대체하도록 하고, 화면에 이미지를 맞추기 위해서는 scaleType의 값으로 fitXY를 사용하면됩니다.


위의 내용대로 한다면 xml의 내용은 아래와 같이 나오게됩니다.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".IntroActivity" >

    <ImageView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/salina_community_intro"
        android:scaleType="fitXY"/>

</LinearLayout>


추가적으로 Manifest에서 Activity의 theme 속성 수정을 통해서 타이틀바의 유무, 상태표시바 유무(풀스크린)를 수정할 수 있습니다. 어찌보면 별 내용도 없는 것을 횡설수설 괜히 길게 썼네요. 도움이 되셨길 바랍니다~!  :)

+ Recent posts