본문 바로가기

분류 전체보기

(170)
[batch]최근 만들어진 디렉토리 3개 구하기 최근 만들어진 디렉토리 3개를 보여주고 사용자가 그 중 원하는 디렉토리를 선택할 수 있게 해주는 배치스크립트. @echo off set WORK_DIR=D:\temp\ SetLocal EnableDelayedexpansion @FOR /f "delims=" %%f IN ('dir /b/ad-h/o-d/t:c %WORK_DIR%') DO ( set /a "idx+=1" set "DirName[!idx!]=%%~nxf" if !idx!==3 goto :break ) :break for /L %%i in (1,1,%idx%) do ( echo [%%i] !DirName[%%i]! ) echo. set /p inVal=Select Directory: echo. cd %WORK_DIR%!DirName[%inVal..
[Go Lang]1분 후 정각에 로직 수행 Kafka 성능 테스트를 위해 여러 장비에서 같은 시각에 메시지 produce 할 일이 생겼다. 각 장비에서 최대한 같은 시각에 메시지 전송 시작하게 프로그램 실행 시점 1분 후 정각에 전송 시작하도록 go의 timer 를 이용해 구현해 본 부분. hostName, _ := os.Hostname() t := time.Now() fmt.Println("Curr :", t) rounded := time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), 0, 0, t.Location()) fmt.Println("Round :", rounded) after1m := rounded.Local().Add(time.Minute * time.Duration(1)) f..
[Go Lang] Kafka Async Producer 긴급하게 Kafka 이용한 대량 데이터 처리 테스트 지원 요청이 있어서 예전에 go 로 짰던 프로그램을 요건에 맞추어 좀 수정해봤습니다. 여러 장비에서 대량 데이터를 짧은 시간 내에 produce 하는 척 하기 위해 AsyncProducer 와 고루틴 등을 이용해보았는데 아직 목표치만큼 송신하지는 못하고 있어서 개선 부분 고민 중입니다. 온라인에서 참고한 샘플 소스랑 요건 조합하다 보니 go 초보 수준이라 네이밍이나 이런게 엉망이지만 혹시라도 조언 주실 분 있을지 몰라 올려봅니다. package main import ( "bufio" "container/list" "flag" "fmt" "github.com/Shopify/sarama" "gopkg.in/yaml.v2" "io/ioutil" "log" "..
stretch goal AngularJS Up & Running 이 책 번역서도 나왔던 걸로 기억하는데 역서 제목을 모르겠네요. 아무튼 거기 도입부에 일화 소개가 나오는데 구글 피드백이라는 프로젝트 진행 중에 Misko 라는 개발팀의 한 직원이 자기가 취미로 만들고 있는 녀석 이용하면 6개월여 동안 개발한 거 2주 내에 동일하게 만들 수 있다고 하길래 팀장이 그렇다면 한 번 입증해보라고 허락합니다. 팀장은 당연히 실패할거라고 생각하면서도 실패했을 때 그 개발자의 모습이 흥미로울거 같아서 팀원들과 같이 재미있게 지켜봤다고 하죠. 예상대로 2주 내에 구현은 실패, 하지만 그 일주일 후 Misko 는 기존 6개월 분의 작업분을 모듈화, 재사용 가능, 테스트 가능한 새로운 모습으로 내놓았습니다. 종전 18,000 라인을 1,500 라..
js - Array 타입 체크 기존 js 소스 리팩토링하면서 반복되는 구문 중 변경 부분만 객체 리터럴로 처리해서 코딩했는데 사용하다보니 인자가 하나 더 있는 경우가 있네요. 가령, aobj = { a : "100", b : "200", c : "300" } 이런 식으로 했는데 넘겨줘야할 값이 하나 더 있는 경우가 있어서 객체 리터럴 내에서 배열로 처리하기로 했습니다. 만들었던 펑션 내에서 값이 배열인 경우에는 다르게 처리해줘야 하는데 보통 하듯이 instanceof 사용하려다 혹시 성능 영향 있지 않을까 싶어서 찾아보니 variable.constructor === Array 가 성능면에서는 좀 더 낫다고 하네요. 이런 식으로 사용. aobj = { a : "100", b : [null, 0], j : "100", h : ["300"..
js - if 문 줄여 쓰는 꽁수 if (userName) { gotoMain(); } else { login(); } 위 코드는 이렇게 쓸 수도 있죠. userName && gotoMain() || login(); 권장할만한 팁은 아니지만 온라인의 소스들 보면 이런 류의 귀여운 기술들 활용하는 경우 적지 않아서 참고들 하시라고 ...
js - for in 주의점 구문의 간단함 때문에 js 에서 일반 for 문 대신 for in 을 자주 써왔는데 이번에 황당한 경험. array 를 받아 처리하는데 이 배열에 들어있지 않은 엉뚱한 값이 마지막에 튀어 나와서 에러 발생. 원인 도무지 모르겠어서 일단 forEach 문으로 바꾸니 에러는 해결되었는데 그래도 이유 궁금해서 찾아보니, 가령 var arr = [1, 2, 3]; for (var x in arr){ console.log(arr[x]); } 기대한대로 실행됩니다, 그런데, Array.prototype.foo = 1; 이렇게 한 줄 실행해주고 for in 다시 돌려보면 ... @_@ array 타입에 prototype 으로 뭔가 확장해놓은 상태라면 for in 에서 의도치 않은 결과를 얻을 수 있다는거죠. 이외에도..
기술 부채 잡담 결함/버그는 기술 부채의 일부분인가? 여러가지 의견이 존재하지만 결함은 기술 부채에 포함되지 않는다 보는 것이 훨씬 효과적인 듯 싶다. 이 쪽 입장에서는 결함/버그와 기술 부채를 구분하는 기준으로 '가시성'을 언급하는데, 즉 결함은 사용자 눈에 보이지만 기술 부채는 대체로 보이지 않는다는 관점이다. 대개의 경우 결함은 집중적인 관심/관리를 받게된다. 반면 기술 부채를 이끄는 문제는 대부분 보이지 않기 때문에 관심을 받지 못하고 무시되거나 뒤로 미뤄지곤 하게 된다. 결국 실용적인 관점에서 결함과 분리해서 기술 부채로 관심/관리을 쏟을 부분을 따로 정립해두어야 '기술 부채'가 갖는 함의를 제대로 현실에서 살려낼 수 있을 것이다. 그리고 이 관점에서야 기술 부채를 해결하는 주요 수단으로서 '리팩토링'의 가치가..