2016년 10월 27일 목요일

jQuery.uploadfile ajax-file-upload-filename 영역 수정

jQuery.uploadfile ajax-file-upload-filename 영역 수정

드래그 & 드랍이 되는 jQuery plugin을 찾다가 jQuery.uploadfile 을 사용하게 되었습니다.

파일명 + 용량 표시가 영역을 벗어나는 문제가 발생합니다. 작은 공간에서 사용하려 하였기에 문제가 되었습니다.

해당 영역을 살펴보면, 주어진 텍스트 보다 더 긴 영역을 차지하고 있음을 알 수 있습니다.

레이아웃을 살펴보면 300 X 20 임을 확인할 수 있습니다.

넓이가 300px으로 설정된 것을 확인 할 수 있습니다.

uploadfile.css 파일에서 300px 로 설정된 것을 확인 할 수 있습니다.

.ajax-file-upload-filename {
  width: 300px;
  height: auto;
  margin: 0 5px 5px 0px;
}

width: 300px; 를 width:100% 로 수정합니다.

영역을 벗어나지 않고 안쪽으로 텍스트가 나오는 것을 확인 할 수 있습니다.

2016년 10월 20일 목요일

[맛집] The Place 서울 스퀘어점

[맛집] The Place 서울 스퀘어점

오늘 목적지는 광화문 교보문고!

운동 겸 해서 걸어가쟈 했는데, 후두둑 비가 떨어지기 시작;;

비를 피하기 위해 점심도 먹을 겸 서울 스퀘어에 들어갔습니다. 마침 출출한 허기를 채우기 위해 둘러보던 중에 The Place를 발견했습니다.

위치

서울역 8번, 9번 출구 쪽에 서울스퀘어가 있고, 9번출구가 지하 1층과 연결되있어요.

The Place 는 에스컬레이터를 타고 1층으로 고고 하시면 됩니다.

사실 일욜 이라서 그런지 서울스퀘어 내 매장들이 거의 다 문을 닫고 있었어요.

문 열고 있는 곳 중에서 그나마 여치가 맘에 들어해서 들어감 ㅋㅋ

주문 빨리 하느라 정신없이 메뉴판을 점원 손에 들려보내버림…메뉴판 사진은 다음에 기회가 되면 올리겠습니다;;

메뉴

THE PLACE 홈페이지에 있는 샐러드와 피자 메뉴 내용입니다.

FRESH SALAD

  • 그린 레터스 샐러드 GREEN LETTUCE SALAD 7.
  • 할라피뇨 콥 샐러드 JALAPENO COBB SALAD 9.
  • 이탈리안 시저 샐러드 ITALIAN CAESAR SALAD 12.
  • 리코타 프루타 샐러드 RICOTTA FRUTTA SALAD 12.
  • 살모네 샐러드 SALMONE SALAD 15.

PIZZA

  • 폭탄피자 콰트로 포르마지오 BOMBA PIZZA 21.
  • 더블 피자 THE PLACE PIZZA 18.
  • 마르게리타 MARGHERITA 16.
  • 살라미 피자 SALAMI PIZZA 15.
  • 만조 MANZO 21.
  • 파래 깔라마리 피자 GREEN LAVER CALAMARI PIZZA 18.

리코타 프루타 샐러드 와 무언가 신기해 보이는 버섯 살라미 폭탄피자를 주문했습니다.

푸짐한 리코타 치즈가 침샘을 자극합니다.
여치 : 리코타 치즈가 넘나 고소하고 담백한 것~

짜잔 폭탄이 등장했습니다.

어엇…… 불을 붙입니다. 갑자기 불쑈를 시작합니다.

완전 신기해서 셔터를 몇 번을 눌렀는지 ㅋㅋ

금방 불이 사그라 듭니다. 밑 부분을 동그랗게 가위로 자르면 보물을 발견할 수 있습니다.

반갑다. 향긋한 소시지 향기여!!

위 뚜껑빵을 먼저 테이블에 옮겨주고,

아래 피자는 싹둑싹둑 잘르고 치즈를 돌돌 뿌려서 테이블로 올려주심

저기 보이는 소스에 뚜껑빵(먹물빵)을 찢어서 찍어먹는거에용~

여치 : 피자는 도우가 정말 얇아서 좋았고, 치즈는 조금 부족한 느낌.
토핑으로 소시지와 버섯이 올라가 있었는데, 짭짤하면서 버섯의 향도 느껴지고 맛있었으용
제가 베이글 같은 빵 좋아하는데 여기 뚜껑빵 맘에 들었으 ㅋㅋ
★★★★★

남프 : 빵에 찍어 먹는 소스가 꽤 괜찮았어요. 꿀, 토마토살사소스, 렌치소스(?). 3가지 소스를 한꺼번에 모두 빵에 올려서 먹으면 으~~~~ 굿입니다. ★★★★

여치가 찍으라고 주문한 주방풍경 입니다. 오른쪽에서 피자 반죽을 하고, 왼쪽에 있는 화덕에서 피자를 굽습니다. 화덕을 찍어달라고 했는데 좀 멀어서 주방을 찍었네요 ㅋ



tags: the place, 서울 스퀘어, 맛집, 서울역,

2016년 10월 12일 수요일

[Spring] 이미지 보여주기 & 파일 다운로드

[Spring] 이미지 보여주기 & 파일 다운로드

이미지 보여주기

<img src="<c:url value='/web/file/attachImage.do?seq=${seq}&no=${no}'/>" width="550" />

img 태그를 삽입하고 이미지 데이터를 조회할 경로를 입력합니다.


@RequestMapping("/attachImage.do")
public void attachImage(RMap rmap, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException {		
	UMap umap = fileService.selectAttachFile(rmap, model);
	byte[] imageData = (byte[]) umap.get("file");
	response.setContentType("image/jpeg");
	response.getOutputStream().write(imageData);
}

DB 에서 데이터를 조회합니다. (byte array)
contentType 을 image/jpeg로 설정합니다.
response 를 통해 결과를 전송합니다.

파일 다운로드

window.location="/web/file/fileDownload.do?seq="+seq+"&no="+no;

다운로드할 파일을 요청하는 URL를 설정합니다.


@RequestMapping("/fileDownload.do")
public void fileDownload(RMap rmap, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException {		
	UMap umap = fileService.selectAttachFile(rmap, model);
	byte[] imageData = (byte[]) umap.get("file");
	String filename = (String) umap.get("attach_file_name");
	response.setContentType("application/octet-stream");
	response.setHeader("Content-Disposition", "attachment;filename=" + filename);
	response.getOutputStream().write(imageData);
}

DB 에서 데이터를 조회합니다. (byte array)
contentType 을 application/octet-stream로 설정합니다.
header 에 filename 을 설정합니다.
response 를 통해 결과를 전송합니다.

참고

http://egloos.zum.com/yooncom/v/9069964
http://hellogk.tistory.com/129

2016년 10월 11일 화요일

[용산 맛집] 쭈꾸미 공작소

[용산 맛집] 쭈꾸미 공작소

매콤한 맛을 찾으러 떠나봅니다.

주메뉴

쭈꾸미 - 12000원
쭈꾸미+삼겹살 - 13000원
쭈꾸미+삼겹살+새우 - 14000원

(2016.10 기준)

주문은 기본 2인분 이상입니다.

쭈삼새

쭈삼새를 주문했습니다. 새우는 1인분에 한마리씩 추가되는 듯합니다. 새우 2마리가 살포시 놓여있습니다.

추천

마지막 볶음밥을 추천합니다. 소스의 매콤한 맛과 날치알이 멋진 조화를 이룹니다. 안먹었으면 후회할뻔 했습니다.

위치

지도를 클릭하시면 위치정보를 확인하실 수 있습니다.

명품원조 한방 왕족발 용산본점

명품원조 한방 왕족발 용산본점

스트레스 많은 월요일, 고지방 고단백 음식에 동하여 신용산역을 두리번거리던 중…

두둥!!! 족발탐험을 시작하기로 합니다.

그 1탄, 신용산역 5번출구 앞 100미터 전방에 명품원조 한방 왕족발 보쌈 집을 발견.

허름한 가게지만 사람이 북적북적하여 믿고 먹기로 결정함. (사진은 다음지도 로드뷰에서 가져왔습니다.)

위치

지도를 클릭하시면 위치정보를 확인하실 수 있습니다.

입장~

1층 홀은 굉장히 좁아서 꽉 차있고, 나가려는 찰나!

“2층 있어횽~” 주인아주머니 정도 되시려나, 우리의 발길을 딱 붙잡아주신다.

(줄을 서서 기다리지는 않고 그냥 북적북적한 정도입니다.).

2층으로 계단을 올라 오른쪽으로 꺾어 가면 “입간판”이 보입니다. (계단 타고 올라가면 바로 홀이 보이는 것이 아닙니다)

회사원이 퇴근 후에 한잔하기 좋은 시간인 저녁 7시 40분쯤에 가서 마지막 테이블 차지하였습니다.

다만 가게안에 울리는지 느~므 시끌시끌, 돛대기 시장임 ㅋㅋ (주위의 웅성웅성 소리는 사람많은 호프집과 구분되지 않을 정도입니다)

메뉴판

2016년 10월 가격

벽면에 발을 걸어놓아서 실내포차같은 분위기를 느낄 수 잇습니다.

중요한 것 맛이니까, 우선 귀를 잘 틀어막고, 족발 중 자 주문합니다.

우리는 고기 본연의 맛을 느끼기 위해 소주 따윈 생략하기로 함 ㅋㅋ

(사실 내가 다이어트를 해야 하니까 고기 외에 다른 칼로리는 배제하는 양심 ㅋㅋ)

드디어~ 둥둥!!

먹어봅시다

김이 모락모락, 껍데기가 탱글탱글, 고기가 야들야들~ 오홍홍.

맛있어 보임입니다. (시장이 반찬이다. Hunger is the best sauce)

먼저 고기 맛을 정확히 느끼기 위해 상추 쌈이 아닌, 따시한 고기 한점 입으로 직행!

음음, 야들야들, 보돌보돌 하심 ㅎㅎㅎ

맛있게 맛있게 흡입흡입~

좀 식었을 때는 껍데기가 완전 쫀득해져서 식감이 좋아집니다. 하지만 완전히 식어버리면 고기에서 비릿내가 슬슬 올라옵니다. (완전 식을 때 쯤이면 충분히 먹어서 배가 부른 상태이기도 합니다. )

총평!

소주를 곁들인 안주용으조 두고두고 먹기에 좋습니다.
고기만 사냥하는 사람들이라면, 적어도 탄산음료정도는 먹어주시든지, 빠르게 30분 내에 흡입하는 것을 추천합니다.

2인이 먹기에 자가 적당한 양입니다. (2인이 먹기에 조금 많은 정도?!)

2016년 10월 10일 월요일

스타벅스 별★따기 - 시나몬 돌체 라떼, 시나몬 돌체 프라푸치노!

스타벅스 별★따기 - 시나몬 돌체 라떼, 시나몬 돌체 프라푸치노!

사실 전 스벅에 즐겨가는 스타일은 아니예요

커피맛은 쌉싸름 하기만 하면 괜찮다 라고 생각하는 저는 관대한 입맛 for coffee라는 것을 미리 언급해두는 바입니다^^

이번에 스벅에 간 이유는 커피도 마시고 별도 따기 위함!!^^*

5주년 기념 음료 출시

스벅이 새로운 메뉴를 출시할 때 일정기간 동안 방문하여 구매하는 회원들에게, 별을 따따블로 제공하고 있는데요,
지금 행사 중인 음료는 에스프레소 분류-시나몬 돌체 라떼와 프라푸치노 분류-시나몬 돌체 프라푸치노예요.

별모으기 좋아하는 저는 이런 행사를 놓치지 않으려 스벅앱에 자주자주 들어가 보아요 ㅎㅎ (별모으시는 분에게 추천)

지난 10월 5일부터 18일까지 그린, 골드 회원에게 스벅카드로 신규음료를 구매하면 별 3개를 더 주는 행사를 진행하고 있는데요,

여기에 플러스!! 10월 12일까지 사이렌오더로 주문하고 스벅설문조사에 응하는 경우 1개의 별을 다음날 적립해주는 행사도 있어서 사이렌 오더로 시나몬 돌체 라떼 주문~

시나몬 돌체라떼 톨 사이즈 기준 5600원으로, 칼로리는 295kcal(아이스는 210kcal), 카페인 75mg 되겠습니다.
(참고로, 시나몬 돌체 라떼 프라푸치노는 톨사이즈 기준 6100원, 칼로리 255kcal, 카페인 7mg)

저는 무지방 우유, 돌체시럽 2(사이렌 오더에서 기본이 3이더라고요), 연유휘핑크림은 적게

원래 크림은 안올려 먹지만…시나몬 돌체라떼의 취지가 향긋한 시나몬과 부드럽고 진한 연유휘핑크림 이므로 시늉은 내주었습니다. ㅋㅋ

사진으로 봐도 휘핑크림이 참 빈약하죠?ㅋㅋㅋ

시식 후기

저는 라떼 마실때 시럽을 넣지 않는 스타일이라서 그런지 좀 많이 달게 느껴졌어요,
달달한 거 좋아하지 않으시면 연유휘핑이 있으니 시럽은 과감히 생략하셔도 좋을 듯.

좀 색다른 건 카페라떼 보다 좀 고소한 맛이나요~
약간 견과류를 갈아 넣은 듯한? 맛이 미세하게 납니다. 맛이 괜찮더라고요~
근데 이게 책을 보면서 마시다 보니 식어버리기도 하고…계속 먹다보니 너무 달기도 하고…;;

재주문 의향

있어요!! 담번에는 시럽없이 연유휘핑 보통으로 올려 먹어볼래요~

다시 한번 먹고 싶다는 생각은 드는 걸 보니, 괜찮은거 같죠?^^

날이 점점 쌀쌀해지는데, 책 한권 들고 카페 앉아 따시게 라떼 한잔 하시어요~♥

2016년 10월 6일 목요일

계절밥상 용산아이파크몰점

계절밥상 용산아이파크몰점

코리아 세일 페스타 할인 행사를 한다는 소식을 보고 계절밥상으로 향했습니다.

코리아 세일 페스타

계절밥상에서 진행하는 코리아 세일 페스타 기간은 2016.09.29 ~ 10.09 입니다.

중요!!!

결제 전에 해당 이벤트 페이지를 제시해야 합니다. 위의 이미지를 제시해야 10% 할인을 받을 수 있습니다.

위치

지도를 클릭하시면 위치정보를 확인하실 수 있습니다.

계절밥상은 용산 아이파크몰 동관 7층 에 있습니다.

이용가격

구분 평일 점심 평일 저녁 주말/공휴일
성인 14,900 22,900 22,900
초등학생 10,900 10,900 10,900
미취학 아동 7,500 7,500 7,500

이용시간

이용시간은 2시간 입니다. 출구에서 영수증을 제시하면 2시간 무료 주차로 처리해 줍니다.

먹어봅시다.

휴일이여서인지 오픈한지 얼마 되지 않았음에도 사람들이 많았습니다.

계절밥상 입구

음식을 향한 마음은 입구를 바람처럼 스쳐 지나가게 만드는 힘이 있습니다. 사진은 나오면서 찍었습니다.

계절밥상은 고기를 좋아하는 저에게 항상 아쉬움을 안겨주는 곳입니다. 치킨으로 그 마음을 달래봅니다.

팥빙수

디저트로 호떡과 팥빙수를 즐깁니다. 호떡 은 인기가 좋아서 사람이 몰리기 때문에 나오는 시간에 잘 맞춰서 가져와야 합니다.

뻥튀기 아이스크림은 아이스크림을 따로 퍼와서 자리에서 제조하는 것이 편합니다.




tags: 용산, 계절밥상, 아이파크, 아이파크몰, 코리아 세일 페스타, 치킨

2016년 10월 5일 수요일

실용주의 프로그래머 TIP 4/4

실용주의 프로그래머 TIP 4/4

55. 생각의 틀을 벗어나지 말고, 틀을 찾아라.

해결이 불가능해 보이는 문제와 마주쳤을 때, 진짜 제약 조건을 찾아라. 스스로에게 이렇게 물어보라. ‘정말로 반드시 이런 방식으로 해야 하는 일인가? 꼭 해야만 하는 일이긴 한 건가?’

56. 준비가 되었을 때 시작하라.

여러분은 살아오면서 경험을 쌓아왔다. 자꾸 거슬리는 의혹을 무시하지 말라.

57. 어떤 일들은 설명하기보다 실제로 하는 것이 더 쉽다.

명세의 나선에 빠지지 말라. 언젠가는 코딩을 시작해야 한다.

58. 형식적 방법의 노예가 되지 마랄.

여러분의 개발 실천방법과 개발 능력의 맥락 안에 넣어보지 않고, 맹목적으로 어떤 기법을 채택하지 말라.

59. 비싼 도구가 더 좋은 설계를 낳지는 않는다.

벤더들의 과장, 어떤 분야의 도그마 그리고 가격표의 휘광에 넘어가지 말라. 도구 자체의 장점만 갖고 판단하라.

60. 팀을 기능 중심으로 조직하라.

설계자와 코더를, 테스트 담당자와 데이터 모델 담당자를 분리시키지 말라. 코드를 만드는 방식에 맞춰 팀을 만들어라.

61. 수작업 절차를 사용하지 말라.

쉘 스크립트나 배치 파일은 똑같은 명령을, 똑같은 순서로, 어느 때라도 반복해서 실행해준다.

62. 일찍 테스트하고, 자주 테스트하라. 자동으로 테스트하라.

매번 빌드할 때마다 실행되는 테스트가 책꽂이의 테스트 계획보다 훨씬 효과적이다.

63. 모든 테스트가 통과하기 전에 코딩이 다 된게 아니다.

뭐 더 할 말 있나?

64. 파괴자를 써서 테스트를 테스트하라.

코드의 별도 복사본을 만들고, 그 복사본에 고의로 버그를 넣은 다음 테스트가 잡아내는지 검증하라.

65. 코드 커버리지보다 상태 커버리지를 테스트하라.

중요한 프로그램 상태들을 파악해서 테스트 하라. 단지 많은 코드 줄 수를 테스트 범위안에 넣는 것만으로는 충분하지 않다.

66. 버그는 한 번만 잡아라.

인간 테스터가 버그를 찾아내면, 그 때가 인간 테스터가 그 버그를 찾는 마지막 순간이 되어야 한다. 그 순간 이후부터는 자동화된 테스트가 그 버그를 담당하도록 만든다.

67. 한국어도 하나의 프로그래밍 언어인 것처럼 다루라.

코드를 작성하는 것처럼 문서도 작성하라. DRY 원칙을 존중하고, 메타데이터를 사용하고, MVC 모델을 쓰고, 자동 생성을 이용하고 등등.

68. 문서가 애초부터 전체의 일부가 되게 하고, 나중에 집어넣으려고 하지 말라.

코드와 떨어져서 만든 문서가 정확하거나 최신 정보를 반영하기는 더 힘들다.

69. 사용자의 기대를 부드럽게 넘어서라.

사용자들은 무엇을 기대하는지 이해한 다음, 그것보다 약간 더 좋은 것을 제공하라.

70. 자신의 작품에 서명하라.

옛날 장인들은 자신의 작업 결과물에 서명 하는 일을 자랑스럽게 여겼다. 여러분도 마찬가지여야 한다.

실용주의 프로그래머 TIP 3/4

실용주의 프로그래머 TIP 3/4

37. 통합하지 말고 설정하라.

애플리케이션에서 기술 선택을 설정 옵션으로 구현하고, 통합하거나 만들어 넣지 말라.

38. 코드에는 추상화를, 메타데이터에는 세부 내용을

프로그램은 최대한 일반화해서 만들고, 세부사항들은 가능하면 컴파일된 코드 기반 바깥으로 빼라.

39. 작업흐름 분석을 통해 동시성을 개선하라.

사용자의 작업흐름이 허용하는 동시성을 최대한 활용하라.

40. 서비스를 사용해서 설계하라.

서비스, 곧 잘 정의되고 일관성 있는 인터페이스를 통해 의사소통하는 독립적이고 동시성 있는 객체들의 관점에서 설계하라.

41. 언제나 동시성을 고려해 설계하라.

동시성이 가능하도록 설계하면, 더 적은 가정만 내리고서도 더 깔끔한 설계를 할 수 있다.

42. 모델에서 뷰를 분리하라.

애플리케이션을 모델과 뷰의 관점으로 설계해서 적은 비용만 들이고도 유연함을 얻어내라.

43. 칠판을 사용해 작업흐름을 조율하라.

참여하는 요소들의 독립성(independence)과 고립성(isolation)을 유지하면서도 개별적인 사실과 에이전트를 잘 조율하려면 칠판을 사용하라.

44. 우연에 맡기는 프로그래밍을 하지 말라.

정말 믿을 만한 것만 믿어야 한다. 우발적인 복잡함을 조심하고, 우연한 행운을 목적의식을 가지고 만든 계획과 착각하지 말라.

45. 여러분의 알고리즘의 차수를 추정하라.

코드를 작성하기 전에, 실행 시간이 대략 얼마나 걸릴지 감을 잡아 놓아라.

46. 여러분의 추정을 테스트하라.

알고리즘의 수학적 분석이 모든 것을 다 알려주지는 않는다. 실제 대상 환경에서 코드의 수행 시간을 측정해보라.

47. 일찍 리팩터링하고, 자주 리팩터링하라.

정원의 잡초를 뽑고 식물 배치를 조정하는 것과 똑같이, 코드도 필요할 때면 언제라도 다시 작성하고 다시 작업하고 다시 아키텍처를 만들라. 문제의 근원을 해결하라.

48. 테스트를 염두에 두고 설계하라.

코드를 한 줄이라도 쓰기 전에 테스팅에 대해 생각하기 시작해야 한다.

49. 소프트웨어를 테스트하라. 그렇지 않으면 사용자가 테스트하게 될 것이다.

가차 없이 테스트하라. 사용자가 여러분을 위해 버그를 찾게 만들지 말라.

50. 자신이 이해하지 못하는, 마법사가 만들어준 코드는 사용하지 말라.

마법사는 엄청난 양의 코드를 만들 수 있다. 그것들은 프로젝트에 통합해 넣기 전에 그 코드 내용을 전부 이해하는지 확실 해놓도록 하라.

51. 요구사항을 수집하지 말고 채굴하라.

요구사항이 지면에 놓여져 있는 경우는 퍽 드물다. 보통은 가정과 오해, 정치의 지층들 속 싶이 묻혀 있다.

52. 사용자처럼 생각하기 위해 사용자와 함께 일하라.

시스템이 정말로 어떻게 사용될지 통찰력을 얻을 수 있는 가장 좋은 방법이다.

53. 구체적인 것보다 추상적인 것이 더 오래간다.

구현 말고 추상에 투자하라. 추상은 서로 다른 구현이나 새로운 기술의 출현 때문에 빗발치듯 생기는 변화를 견뎌내고 살아남을 수 있다.

54. 프로젝트 용어사전을 사용하라.

프로젝트에서 쓰이는 특정 용어와 어휘들의 유일한 출처를 만들고 유지하라.

실용주의 프로그래머 TIP 2/4

실용주의 프로그래머 TIP 2/4

18. 추정을 통해 놀람을 피하라.

시작하기 전에 추정부터 하라. 잠재적인 문제점들을 미리 찾아내게 될 것이다.

19. 코드와 함께 일정도 반복하면 조정하라.

구현하면서 얻는 경험을 이용해서 프로젝트의 시간 척도를 세밀히 조정하라.

20. 지식을 일반 텍스트로 저장하라.

일반 텍스트 형식은 시일이 지났다고 못쓰게 되는 일이 없다. 일반 텍스트 형식은 여러분의 작업을 활용하고 디버깅과 테스팅을 쉽게 만드는데 도움이 된다.

21. 명령어 셀의 힘을 사용하라.

그래픽 사용자 인터페이스로는 할 수 없는 일에 셀을 이용하라. command shell

22. 하나의 에디터를 잘 사요하라.

에디터를 마치 손의 연장으로 자유자재로 다루어야 한다. 여러분이 사용하는 에디터는 설정을 바꿀 수 있고, 확장가능하고, 프로그램 가능해야 한다.

23. 언제나 소스코드 관리 시스템을 사용하라.

소스코드 관리는 여러분 작업을 위한 타임머신이다. 언제라도 과거로 돌아갈 수 있게 해준다. GIT, SVN

24. 비난 대신 문제를 해결하라.

버그가 여러분 잘못인지 다른 사람 잘못인지는 별로 중요하지 않다. 그것은 여전히 여러분의 문제이며, 여저히 고쳐야 할 필요가 있다.

25. 디버깅을 할 때 당황하지 마라.

숨을 깊게 들이 쉬고, 무엇이 버그를 일으키는지 생각하라!

26. ‘select’ 는 망가지지 않았다.

OS 나 컴파일러의 버그를 발견하는 일은 정말 드물게 일어나며, 심지어 써드파티 제품이나 라이브러리일지라도 드문 일이다. 버그는 애플리케이션에 있을 가능성이 가장 크다.

27. 가정하지 마라. 증명하라.

진짜 데이터와 경계 조건이 있는 실제 환경에서 여러분이 내렸던 가정들을 증명하라.

28. 텍스트 처리 언어를 하나 익혀라.

여러분은 하루 가운데 많은 시간을 텍스트와 씨름하며 보낸다. 왜 여러분 대신 컴퓨터가 그 일의 일부를 하게끔 만들지 않는가? perl, python, ruby

29. 코드를 작성하는 코드를 작성하라.

코드 생성기는 생산성을 증가시키며 중복을 막는 일에도 도움이 된다.

30. 완벽한 소프트웨어는 만들 수 없다.

소프트웨어는 완벽할 수 없다. 피할 수 없이 나타나는 에러로부터 여러분의 코드와 사용자들을 보호하라.

31. 계약에 따른 설계를 하라.

코드가 실제로 하기로 한 것을 문서화하고 검증하기 위해 계약을 사용하라.

32. 일찍 작동을 멈추게 하라.

보통은 죽은 프로그램이 절름발이 프로그램보다 해를 훨씬 덜 끼친다.

33. 단정문을 사용해서 불가능한 상황을 예방하라.

단정은 여러분이 세운 가정을 검증해준다. 확실한 것이 없는 세상에서 여러분의 코드를 보호하려면 단정문을 사용하라.

34. 예외는 예외적인 문제에 사용하라.

예외를 잘못 쓰면 고전적 스파게티 코드의 모든 가독성과 유지보수 문제를 그대로 겪을지도 모른다. 예외는 예외적인 일들만을 위해 남겨두어라.

35. 시작한 것은 끝내라.

가능하다면, 리소스를 할당한 루틴이나 객체가 해제도 책임져야 한다.

36. 모듈간의 결합도를 최소화하라.

디미터 법칙을 적용하고 ‘부끄럼 타는 shy’ 코드를 작성해서 결합이 생기는 일을 피하라.

디미터 법칙은 객체의 모든 메소드는 다음에 해당하는 메소드만을 호출해야 한다고 말한다.

1. 객체 자신의 메소드
2. 메소드의 매개변수로 넘어온 인자의 메소드
3. 메소드 내부에서 생성 된 객체의 메소드
4. 메소드가 포함하고 있는 객체의 메소드

실용주의 프로그래머 TIPS 1/4

실용주의 프로그래머 TIPS 1/4

1. 자신의 기술(craft)에 관심과 애정을 가져라.

소프트웨어 개발을 잘 해보려는 생각이 없다면 왜 인생을 그 일을 하면서 보내는가?

2. 자신의 일에 대해 생각하면서 일하라!

자동 조종 장치를 끄고 직접 조종하라. 스스로의 작업을 지속적으로 비판하고 평가하라.

3. 어설픈 변명을 만들지 말고 대안을 제시하라.

변명하는 대신 대안을 제시하라. 그 일을 할 수 없다고 말하지 말고, 무었을 할 수 있는지에 대해 설명하라.

4. 깨진 창문을 내버려두지 말라.

눈에 뜨일 때마다 나쁜 설계, 잘못된 결정, 좋지 않은 코드를 고쳐라.

깨진 유리창 이론(영어: Broken Windows Theory, BWT)은 미국의 범죄학자인 제임스 윌슨과 조지 켈링이 1982년 3월에 공동 발표한 깨진 유리창(영어: Fixing Broken Windows: Restoring Order and Reducing Crime in Our Communities)이라는 글에 처음으로 소개된 사회 무질서에 관한 이론이다. 깨진 유리창 하나를 방치해 두면, 그 지점을 중심으로 범죄가 확산되기 시작한다는 이론으로, 사소한 무질서를 방치하면 큰 문제로 이어질 가능성이 높다는 의미를 담고 있다.

5. 변화의 촉매가 되라.

사람들에게 변화를 강요할 수는 없다. 대신, 미래가 어떤 모습일지 그들에게 보여주고 미래를 만드는 일에 그들이 참여하도록 도우라.

6. 큰 그림을 기억하라.

주변에 무슨 일이 일어나는지 점검하는 일을 잊어버릴 정도로 세부사항에 빠지지 말라.

7. 품질을 요구사항으로 만들어라.

프로젝트의 진짜 품질 요구사항을 결정하는 자리에 사용자를 참여시켜라.

8. 지식 포트폴리오에 주기적으로 투자하라.

학습을 습관으로 만들어라.

9. 읽고 듣는 것을 비판적으로 분석하라.

벤더, 매체들의 야단법석, 도그마에 흔들리지 말라. 여러분과 여러분 프로젝트의 관점에서 정보를 분석하라.

10. 무엇을 말하는가와 어떻게 말하는가 모두 중요하다.

효과적으로 전달하지 못한다면 좋은 생각이 있어봐야 소용없다.

11. DRY - 반복하지 마라 (Don’t Repeat Yourself)

어떤 지식 한 조각도 하나의 시스템 안에서는 모호하지 않고, 권위 있고, 단 하나뿐인 표현을 가져야 한다. DRY

12. 재사용하기 쉽게 만들라.

재사용하기 쉽다면, 사람들이 재사용할 것이다. 재사용을 촉진하는 환경을 만들라. REUSE

13. 관련 없는 것들 간에 서로 영향이 없도록 하라.

컴포넌트를 자족적이고, 독립적이며, 단 하나의 잘 정의도니 목적만 갖도록 설계하라. 직교성

14. 최종 결정이란 없다.

돌에 새겨진 것처럼 불변하는 결정은 없다. 그렇게 생각하는 대신, 모든 결정이 해변의 백사장 위에 쓴 글자와 같다고 생각하고 변화에 대비하라.

15. 목표물을 찾기 위해 예광탄을 써라.

예광탄이것저것을 시도해보고 그것들이 목표와 얼마나 가까운 데 떨어지는지 보는 방법으로 목표를 정확히 맞추게 해준다.

16. 프로토타입을 통해 학습하라.

프로토타이핑배움의 경험이다. 프로토타이핑의 가치는 만들어낸 코드에 있지 않고, 여러분이 배운 교훈에 있다.

17. 문제 도메인에 가깝게 프로그래밍하라.

사용자의 언어를 사용해서 설계와 코딩을 하라.

실용주의 프로그래머들의 특징

실용주의 프로그래머들의 특징

  • 얼리어덥터 성향 / 새로운 것에 빨리 적응하는 성향. 자신감
  • 캐묻기 좋아한다.
  • 비판적인 사고의 소유자
  • 현실적이다
  • 다방면의 기술에 익숙하다.

그들은 직면한 문제 너머를 생각하며, 문제를 항상 더 큰 맥락에 놓으려 노력하고, 항상 더 큰 그림을 보려 한다.

목표

  • 매년 새로운 언어를 최소 하나는 배워라
  • 기술 서적을 분기마다 한 권씩 읽어라.
  • 비 기술 서적도 읽어라
  • 수업을 들어라
  • 지역 사용자 모임에 참여하라.
  • 다른 환경에서 실험해보라
  • 요즘 흐름을 놓치지 마라
  • 인터넷을 이용하라.

아키텍처 프로토타입에서 규명할 사항

  • 주요 컴포넌트의 책임이 잘 정의되었고 적절한가?
  • 주요 컴포넌트 간의 협력관계가 잘 정의되었는가?
  • 결합도는 최소화 되었는가?
  • 잠재적 중복을 찾아낼 수 있는가?
  • 인터페이스 정의와 제약 사항은 수용할 만 한가?
  • 각 모듈이 실행 중에 필요로 하는 데이터에 접근할 수 있는 경로를 갖고 있는가?

스트룹 효과(Stroop Effect)

의미없는 이름보다 더 고약한 것은 오해를 불러일으키는 이름이다.

다른 사람들의 코드를 존중해야 한다.

개발자간에 황금률(남들이 자신에게 해주기 바라는 대로 남에게 행하라)과 상호존중이라는 기반을 지킨다.

출처

  • 책:실용주의 프로그래머

2016년 10월 4일 화요일

Metro UI for WPF

Metro UI for WPF

https://github.com/MahApps/MahApps.Metro 에서 템플릿을 다운로드 받습니다.

Templates.zipv파일을 다운받아서 템플릿 폴더에 압축을 풉니다.

C:\Users\<USER>\Documents\Visual Studio 201x\

새 프로젝트 다이얼로그에서 템플릿을 선택할 수 있습니다.

[시스템 트레이딩] 종목 코드 얻기

[시스템 트레이딩] 종목 코드 얻기 사이보스플러스를 이용합니다. 기본 프로그램들을 모두 설치한 후에 CpUtil.CpCodeMgr 를 이용하여 종목 코드들을 얻을 수 있습니다. 야후 파이넨스를 사용하려다가 안되서, 사이보스를 활용하였습니다. 아래...