얼마 전에 페이스북에 올라온 질문인데, “MIPS 어셈블리 코드 중 beq 를 안쓰고 bne 를 쓰는 이유는 무엇인가요?” 라는 질문이다. 아래와 같은 C 언어 코드가 있고,if (i == j) f = g + h; else f = g - h;이를 순서도로 나타내면 다음과 같다. 컴파일러와 최적화 옵션에 따라 생성되는 어셈블리 인스트럭션이 아래와 똑같다고 말할 수 없다.일반적으로 컴파일러는 인스트럭션을 생성할 때 조건문의 경우 반대 조건으로 해석해서 인스트럭션을 작성한다. 이런 경우 대부분 인스트럭션의 크기가 짧아지기 때문에 더 적은 클럭에서 명령을 수행할 수 있기 때문이다. 따라서 아래와 같은 어셈블리 코드가 생성된다.# bne 를 사용하는 코드 bne $s3, $s4, Else add $s0, $s..
얼마 전 Swift 1.2 버전으로 업그레이드를 실시했다. 뭐, 자의에 의해서 한 것은 아니고, Xcode 6.3.1 버전으로 업데이트 하니 자연스럽게 Swift 언어 버전도 업데이트 된 것! 다음은 Swift 1.2 로 업데이트하면서 나에게 발생한 오류를 정리해 본다. 1. NSString과 String 타입 캐스팅(형변환)은 명시적으로 하도록 변경 이렇게 동작하던 코드는 더 이상 암시적으로 캐스팅을 하면 안된다. func print(string: String) { // print } let str : NSString = “POWERUMC” print(str) Swift 1.2 부터는 위의 코드는 다음과 같이 명시적으로 캐스팅을 해야 한다. func print(string: String) { // pr..
데이터베이스로 데이터를 조회하는 데, 성능을 꾀하기 위해 redis와 연동을 한다. 신규 기능에 적용하는 것은 어렵지 않을 것 같다. 하지만 기존 legacy 코드를 db에서 redis로 변경 한다면 새로운 전략이 필요할 것이다. 이런 경우가 얼마나 많겠냐마는 때때로 미션 크리티컬한 시스템 문제가 발생하면 한 번쯤 고려해 볼 만한 시나리오다. db에서 redis로 변경한다면 redis client 코드로 db 데이터를 조회하고 redis 데이터를 조회하여 결과 셋을 조합 proxy 객체를 생성하여 db/redis 중 데이터 조회 redis 명령 추가 위의 몇 가지 전략 중 성능이 가장 좋은 것은 3 > 2 > 1 이 될 것이고, 수정해야 할 legacy 코드의 양은 2 > 3> 1 순서가 될 것이라 짐작..
전 세계 인터넷은 OpenSSL의 중대한 버그로 난리다. 이 버그의 주요 요지는 특정 OpenSSL을 사용할 경우 메모리의 64KB를 획득할 수 있고, 이 버그로 서버 인증서의 비밀키(개인키)를 취득하여 서버로 오가는 모든 패킷을 취득할 수 있다. 라는 것인데, 이를 가리켜 Heartbleed(심장출혈) 버그라고 한다. 그 만큼 심각한 버그가 맞는데, 일각의 미디어에서 최악의 시나리오를 너무 일반화시키는 것이 아닌가 싶다. 필자가 보안 전문가는 아닌 만큼 잘못된 부분은 너그러이 지적해 주길 바란다. - 사용자는 모두 패스워드를 변경해야 하나? 해도 되고 안해도 된다. 어차피 개인정보는 오픈소스. :) 농담이고, 취약성이 있는 OpenSSL을 사용하면 공격자는 클라이언트의 사용자 요청 데이터를 가로챌 수 ..
필자는 소프트웨어 개발에 필요한 앱은 라이선스를 구매해서 쓴다. 자랑은 아니지만 앱스토어와 그 외 구매한 앱의 개수가 200개가 넘어간다. 히힣; 오늘 소개하는 앱 처럼 제값어치 하는 앱에겐 뭔가 모를 희열을 느낀다. 여성분들이 쇼핑을 좋아하는 것처럼 -0- Hopper Disassembler 이 앱은 윈도우의 WinDbg, 그리고 GNU gdb처럼 디버거 명령줄(Command Line)에 익숙하지 않은 디버거에게 유용한 앱이다. 몇 달 전, Objective-C with LLVM 어셈블리 코드를 분석하기 위해 구매했다. Objective-C 내부적인 언어적 매커니즘을 이해하기 위해 역어셈블리 분석은 필수이기 때문이다. 그 중 이 앱은 기대한 것 보다 기능은 적지만, 사소한 곳에서 감동을 주는 앱이라 생..
재미있는 C 언어 문제 인터넷 RSS 피드를 구독해서 보다가 재미있는 C 언어 코드를 발견했다. 조금 난해하게 보이는 코드다. 이런 코드로 신입 개발자 면접 시험을 보면 재미있겠단 생각이 든다. 문제의 C 언어 코드는 다음과 같다. 소스 코드와 실행 결과가 전혀 매치가 안되는 이 또라이 같은 코드를 보고 순간 멈칫 할 것이다. 하지만 조금 귀 기울여 보면 말 되는 코드다. 이 링크를 클릭하면 즉시 컴파일 된 실행 결과도 함께 볼 수 있다. main() { int a,b,c; int count = 1; for (b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,\ TFy!QJu ROo TNn(ROo)SLq SLq ULo+\ UHs UJq TNn*RPn/QPbEWS_JSW..
매버릭스 업데이트 후 개발 중인 맥 앱에서 발생하는 문제 OSX 매버릭스로 업데이트한 후 XCode로 개발 중인 유틸리티 프로그램의 일부 기능이 작동하지 않는 현상이 발생한다. 원래 Alpha 버전으로 곧 배포할 예정이었는데, 이 문제로 배포가 늦어질 것 같다. 문제는 Objective-C와 Cocoa를 사용하여 전역 마우스 및 키보드 후킹(hook global mouse and keyboard event)을 사용하는 코드가 있는데, 그 중 키보드 이벤트만 캡춰링(capturing)할 수 없는 현상이 발생한다. 해결 방법 의외로 해결 방법은 간단하다. 먼저 OSX 매버릭스에서 변경된 보안 사항에 대해서 알 필요가 있다. 기술적인 내용은 아니므로 쉬엄쉬엄 다음의 글을 참고하기 바란다. OS X 10.9 매..
반 객체지향(Half-of-OOP) 가장 먼저 명심하자. 오브젝티브-C는 C언어의 슈퍼셋(Super Set)이고 C++의 객체 지향과는 거리가 멀다. 오브젝티브-C 언어는 마치 객체지향 프로그래밍(OOP, Object-Oriented Programming) 처럼 보이지만 객체지향 언어가 아니다. 그렇다고 완전히 함수형 언어도 아니다. 하지만, 오브젝티브-C는 객체지향의 가장 대표적인 특징인 상속(Inheritence)이 가능하고 인터페이스 구현이 가능하다. ANSI-C 입장에서 바라보면 상속과 인터페이스 구현은 함수형 언어로서 가당치도 않은 언어적 특성임에 틀림 없을 것이다. (이 문장의 인터페이스는 오브젝티브-C의 @protocol을 의미함.) 물론, C 언어에서도 구조체(struct), 포인터(poi..
아름답고 자연스러운 오브젝티브-C 필자가 오브젝티브-C(Objective-C)를 접한 것은 올해 초, 갑갑한 문법적인 표현(Syntax)을 보니 코드를 보기가 싫어졌었다. 하지만 많은 iOS 개발자가 생겨나고 맥킨토시(Macintosh)를 쓰면서 자연스럽게 맥용 응용 프로그램에 관심이 생기기 시작했다. 처음에는 리눅스와 대부분의 운영체제를 지원하는 Qt(큐티) 프레임워크를 봐오다가, 코코아(Cocoa) 를 알게 되면서 맥킨토시에 가장 아름다운 UI 프레임워크인 것을 느끼게 되었다고 할까. 오브젝티브-C는 매우 깊은 역사가 있다. 이 역사에 대해서는 다음의 위키피디아(Wikipedia) 를 참고하기 바란다. 필자도 이 언어에 대한 깊은 역사를 이렇다 할 만큼 자신 있게 설명해 주기 힘들 것 같다. .. 생..
[퀴즈] 프로그래머를 위한 문제 #3 요즘 퀴즈를 풀다보니 재미가 들렸나, 필자가 문제를 하나 내보려고 한다. 어려울 수도, 그렇지 않을 수도 있는 문제이며, 효율적인 코드를 작성하는 것 보다 최대한 짧게 짜는 것이 목적이다. 문제의 유형과 정답의 유형은 지난 문제를 참고하면 된다. [퀴즈] 프로그래머를 위한 문제 #1 [퀴즈] 프로그래머를 위한 문제 #2 미로 찾기 게임 문제는 미로 찾기 게임이다. 10 x 6 (가로, 세로) 크기에 * 문자가 채워진 직사각형 미로의 크기가 변해도 실행 가능해야 한다. 문자 S 는 입구 위치, 문자 E는 출구 위치이다. S 문자와 E 문자 사이에는 공백으로 연결된 길이 있고, 길은 여러 갈래일 수 있다. 길(공백)은 2x2(가로, 세로) 이상의 공간을 가질 수 없다. ..
프로그래머를 위한 문제 #2 얼마 전 OKJSP 를 통해 이런 문제를 보았다. 문제는 아래의 코드 중 /* INPUT */ 주석에 알맞은 코드를 넣어, victory() 메서드가 호출되도록 완성하여라. 필자의 컴퓨터에서는 답이 (function-48)(); 로 나왔다. typedef int (*f)(); int variable = 1; int function() { if(variable == 1 ) return /* INPUT */ 5; victory(); } int main() { function(); return 0; } [문제 코드] 위의 INPUT 주석에 알맞은 코드를 넣어라. 단 제약 조건이 있습니다. 다음의 문자는 사용할 수 없음 : main, victory, asm, %, *, _, #, /..
프로그래머를 위한 문제 프로그래머라면 알쏭달쏭한 논리적인 문제를 좋아하는 편인 것 같다. 답이 팍~ 나오는 문제보다 역량에 따라 코드의 아름다움이 달라지는 것을 추구하는 프로그래머라면 더욱 그렇다. 문제: 1부터 1만까지 8은 모두 몇 개가 나오나? 문제는 쉽다. 1부터 1만까지 8이라는 문자 개수만 카운팅하면 된다. 그런데 이렇게 간단한 문제를 코딩해 놓고 보면 맘에 안든다. 더 짧게…. 아래의 문제를 각 언어별로 풀어보았는데, 바이트 수는 캐러지 리턴(carriage return) 문자를 모두 제거한 바이트 수이다. 참고로, 이 문제는 ‘닷넷(.NET) 프로그래머 모임’ 에서 처음 본 문제인데, 오래 전의 일이라 게시글의 링크를 도저히 찾기가 힘들어서 링크를 남기지 못했다. 여러분 중 문제를 풀어보려..
발생 배경Qt를 가장 잘 개발할 수 있는 개발 도구 Qt 개발 플랫폼인 Qt 5.0(Qt 5.0 / Qt Creator 2.6.2) 에서 QWebView 위젯을 제대로 link 및 include 할 수 없는 현상이 발생한다. 이전 환경에서는 물론 발생하지 않는, 이전 release에 보고된 버그이다. 오류 유형은 일치하지 않으나 발생하는 환경은 유사하다고 볼 수 있다. widgets 모듈에 포함되었던 QWebView가 다른 모듈로 분리가 되었기 때문이다. :-1: error: symbol(s) not found for architecture x86_64 해결 방법해결 방법은 의외로 간단하다. .pro 파일(qmake) 의 속성을 다음과 같이 추가한다.QT +=core gui webkitwidgets QT..
본 글을 월간 마이크로소프트 2012년 5월호 특집 기사로 다루어진 내용입니다. Visual Studio 11이 Visual Studio 2012로 변경됨에 따라 본문의 내용을 일부 수정하였습니다. 그리고 현재 필자는 NCSOFT에 재직하지 않음을 참고하기 바랍니다. [월간 마이크로소프트 5월호 특집기사] Windows 8 시대를 준비하는 Visual Studio 2012 [월간 마이크로소프트 5월호 특집기사] C++ 매트로 앱 개발을 위한 C++/CX 언어 [월간 마이크로소프트 5월호 특집기사] Windows 8 시대를 준비하는 Visual Studio 2012를 마치며 엄준일 – 현재 NCSOFT에 재직 중이며, Microsoft ALM MVP와 한국 Visual Studio 팀과 블로그를 운영하고 ..
- Total
- Today
- Yesterday
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
- Silverlight
- github
- ASP.NET
- .NET Framework 4.0
- Team Foundation Server 2010
- 엄준일
- 팀 파운데이션 서버
- Visual Studio
- Windows 8
- .NET
- Visual Studio 11
- 비주얼 스튜디오 2010
- umc
- Managed Extensibility Framework
- MEF
- mono
- Team Foundation Server
- LINQ
- Visual Studio 2008
- monodevelop
- ALM
- c#
- 땡초
- Visual Studio 2010
- 비주얼 스튜디오
- test
- POWERUMC
- testing
- TFS
- TFS 2010