본문 바로가기

분류 전체보기

EPD 와 OTC 방법론 정의 EPD : Ending Predicted Development. 종료 예측 개발 OTC : One Time Coding. 원타임코딩, 한번에 코딩하기. 종료 예측 개발은 프로젝트를 설계할 때 종료시점과 최종 결과물이 예측 되어야 한다. 중간에 뭔가가 바뀌면 새로운 결과와 일정이 예측된다. 현실성이 있는 예측이어야 하는데 이것은 원타임코딩을 하면 가능하다. 원타임코딩은 설계 된대로 한번에 코딩하는 방법이다. 이 때 코딩이 완료될 때까지 설계가 변경되면 안된다. 코딩할 때 가장 좋은 방법이 설계 때 고려되면 중간에 수정할 일이 없다. 설계가 제대로 되는 것은 경험이 쌓여야 하는 것이므로 초보 개발자가 할 수는 없다. 그러나 현실에서 중간에 수정요청사항이 있을 때가 비일비재한데 그때 그때 수정하다보면 프.. 더보기
코드 정리 #8 이번 코드는 비동기 http 라이브러리에 들어가는 문자열 trim 코드부분이다. 로직은 잘 만들어진 편인데 코딩된 화면이 깔끔하지 않다. 한번 손을 봐보겠다. 출처 : https://github.com/AsyncHttpClient/async-http-client/blob/master/client/src/main/java/org/asynchttpclient/util/HttpUtils.java private static String extractContentTypeAttribute(String contentType, String attribute) { if (contentType == null)return null; for (int i = 0; i < contentType.length(); i++) { if.. 더보기
[기초] OpenSSL 해쉬 함수 사용 예제 SHA256 해쉬의 사용 예제는 다음과 같다. #include unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) { SHA256_CTX c; static unsigned char m[SHA256_DIGEST_LENGTH]; if (md == NULL) md = m; SHA256_Init(&c); SHA256_Update(&c, d, n); SHA256_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); return md; } 출처 : https://github.com/openssl/openssl/blob/master/crypto/sha/sha256.c 해쉬를 할때 위처럼 데이터를 한꺼번에 .. 더보기
코드 정리 #7 자바스크립트는 C/C++/Java 와 비교할 때 치명적인 에러를 내지는 않는다. 그러므로 코딩 컨벤션이 느슨해도 실제 운영되는 프로그램 개발에 지장이 없는 편이다. 물론 이것 때문에 웹 프로그래밍의 진입 장벽이 낮기도 하지만 엄격한 로직 제작의 중요성이 떨어지는 것은 아니다. 이번에는 자바스크립트로 된 코드를 정리해 보겠다. 출처 : https://github.com/sdepold/connect-form/blob/master/lib/connect-form.js 다른 사람들은 어떨지 모르겠으나 저렇게 코딩된 코드는 나는 한참 살펴봐야 이해가 되었다. 이렇게 코딩해 보면 어떨까? module.exports = function(options) { options = options || {}; return fun.. 더보기
코드 정리 #6 애용하는 에디터 노트패드++의 소스가 깃에 있어서 한번 들어가 보았다. 그중에 특정 문자열이 있는지 찾는 코드가 있는데 이것을 최적화 해보겠다. 출처 : https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/EncodingMapper.cpp 1차 최적화는 다음과 같다. bool IsInListA(const char *token, const char *list) { char word[64] = {0}; size_t i = 0; size_t j = 0; if ((!token) || (!list))return false; for (size_t len = strlen(list); i 더보기
코드 정리 #5 애용하고 좋아하는 Dlib 라는 라이브러리가 있다. 이런 대단한 라이브러리를 만들어 공개한 저작자에게 경의를 표한다. 일단 예제 소스를 한번 보자. 출처 : https://github.com/davisking/dlib/blob/master/examples/image_ex.cpp 특정 부분을 발췌해 보겠다. 오... Allman Style의 코딩이다. 여러모로 마음에 드는 코드인데 한가지 아쉬운 점이 있다. 바로 변수명과 함수명의 스타일이 동일하다는 것이다! 언제나 직관적인 코드 이해를 추구하는 나로서는 정말 아쉬운 스타일이다. 실무에서 dlib 잘 쓰고 있다. 저작자에게 감사를 표한다. 더보기
코드 정리 #4 유명한 jsoncpp 라이브러리의 소스를 보다가 생각나는 점을 포스트한다. 출처 : https://github.com/open-source-parsers/jsoncpp/blob/master/src/jsontestrunner/main.cpp 이렇게 수정하면 어떨까? int main(int argc, const char* argv[]) { Options opts; int exitCode; try { exitCode = parseCommandLine(argc, argv, &opts); if (exitCode != 0) printf("Failed to parse command-line."); else exitCode = runTest(); } catch (const std::exception& e) { prin.. 더보기
다양한 LBP 소스가 있는 깃허브 레포지토리 깃허브에 LBP 의 각종 구현이 패키지화 되어 알고리즘 구현을 비교 공부해 볼 수 있는 레포지토리가 있다. 출처 : https://github.com/carolinepacheco/lbplibrary 쭉 둘러보니 마음에 드는 코딩 방식은 Loop 중첩이 적은 부류들이다. 내가 수정할 필요가 있을 때 수정이 가장 쉬운 코드이기 때문이다. 그러나 LBP 같은 것은 로직을 수정해서 할 일이 거의 없다고 보면 된다. 그래서 실무에서는 성능이 좋은 코드를 라이브러리화 하면 된다. 더보기
코드 정리 #3 이번 소스는 여기에 있다. 출처 : https://github.com/bytedeco/javacv/blob/master/src/main/java/org/bytedeco/javacv/FFmpegFrameFilter.java 깃허브에서 무작위로 아무 코드나 들어가서 구경하다 보면 난해한 코드들이 보인다. 난해한 이유는 로직이 정교하고 복잡해서 난해할 수도 있겠지만 위의 소스는 최적화가 덜되어 난해한 것 같다. 나를 처음 당혹스럽게 만든 것은 이 부분이다. 자바는 명시적 메모리 프리를 지원 안하지만 개비지 콜랙터를 위해서 null을 할당하기도 한다. 그런데 위 코드에서 null을 넣어서 동작시킨다는 것은 넣지 않으면 예상대로 동작 안할 수도 있다는 것이다. 저렇게 조금은 중구난방하게 메모리 해제를 하는 부분은.. 더보기
코드 정리 #2 깃허브의 소스를 보다가 이렇게 작성하면 좋았을 텐데 하는 부분이 있다. 코드를 볼 때 직관적으로 파악이 안된 부분이다. 다음 출처의 코드를 이야기 해보고자 한다. 출처 : https://github.com/shimat/opencvsharp/blob/master/src/OpenCvSharp/Vector/VectorOfByte.cs /// /// /// public class VectorOfByte : DisposableCvObject, IStdVector { /// /// /// public VectorOfByte() { ptr = NativeMethods.vector_uchar_new1(); } 먼저 가볍게 하나 짚고 넘어가자면 일관된 코멘트 구조는 눈여겨 볼만하다. 다만 좀더 간결하게 작성할 수 있지 .. 더보기