본문 바로가기

optimize

코드 정리 #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.. 더보기
코드 정리 #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 더보기
코드 정리 #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.. 더보기
코드 정리 #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(); } 먼저 가볍게 하나 짚고 넘어가자면 일관된 코멘트 구조는 눈여겨 볼만하다. 다만 좀더 간결하게 작성할 수 있지 .. 더보기
코드 정리 #1 인터넷으로 소스를 검색하다보면 읽을 때 피로도가 증가하는 경우도 있는 것 같다. 마침 눈에 띄는 소스가 있어서 일부를 한번 수정해 보았다. 소스 출처 : https://github.com/bytefish/opencv/blob/master/eigenfaces/src/eigenfaces.cpp Before void Eigenfaces::compute(const vector& src, const vector& labels) { if(src.size() == 0) { string error_message = format("Empty training data was given. You'll need more than one sample to learn a model."); CV_Error(CV_StsUnsuppo.. 더보기