QT는 이전부터 제가 많이 GTK와 비교하며 포스팅을 해온 라이브러리입니다. GTK는 상당히 좋은 라이브러리지만 QT와 비교해서 한 가지 꿀리는 것이 있습니다. 바로 QTCreator라는 무지막지하게 강력한 개발환경입니다.

 QTCreator는 C++기반 개발환경으로 비슷한 MFC와 비교했을 때 전혀 꿀릴 것이 없는 상당히 강력한 개발환경입니다. GUI는 기본에 Visual Studio와 비교해도 크게 다를 바 없습니다. 물론 Visual Studio가 여러모로 편리한 인터페이스를 지니고 개발자 친화적이기는 하지만 문제는 어디까지나 Windows 전용이라는 것이고 Microsoft의 물건이 아니라면 상당히 불친절하다는 단점이 있습니다.


그에 비해 QT는 여기저기 참 잘 붙는 라이브러리이며 QTCreator란 개발환경마저 오픈소스로 만들어져서 상당히 확장성이 뛰어납니다. 무엇보다 QT 그 자체가 상당한 장점으로 작용합니다. 즉, 컴파일 환경에 따라 다르기는 하지만 QT로만 짜여진 프로그램은 OSX, Linux, Windows를 가리지 않습니다. OS 특화 기능을 제외하면 일단 돌아갈 수 있다는 생각을 할 수 있습니다.



UI 개발이 이토록 쉽다니... QTCreator는 정말 강력한 툴이다.

그런데 이 QTCreator에서 사용하는 C++이 여러모로 편리하고 인력도 상당히 많지만 개발 시간이 조금 오래 걸린다는 단점이 있습니다. 물론 숙련된 개발자의 경우 어떠한 언어보다 빠르게 개발이 가능하지만 Ruby나 Python 심지어 Perl같은 스크립트형 언어에 비하면 개발 시간이 느린 것은 사실입니다. (물론 속도를 중시한다면 C++이 당연히 더 좋습니다.)



C++이 개발하기 편하다는 사람도 있지만 나에게 있어 C++은 괜히 복잡한 언어로 밖에 안 보인다....


그래서 저는 나름대로 Python으로 GUI개발을 할 수 있는 도구를 원했는데 QTCreator를 직접 쓰는 것은 아니지만 QTCreator에서 만든 GUI를 Python으로 변환할 수 있게 만들어진 도구가 있더군요. 이름하여 pyuic입니다.


QTCreator로 일반적인 QT Widget Application프로젝트를 만든 다음 Forms 폴더내의 ui파일을 더블클릭하면 GUI디자인을 할 수 있는 환경이 뜹니다. (제일 위에 있는 스크린샷 참조)


여기서 GUI디자인을 하고 저장을 하면 ~~.ui파일이 만들어지는데 이 파일을 텍스트에디터로 열어보면 일반적인 XML형식임을 알 수 있습니다. 이 XML형식의 UI파일을 Python코드로 변환해주는 프로그램이 pyuic입니다.


pyuic는 다음과 같은 명령으로 설치할 수 있습니다.


QT4

 sudo apt-get install pyqt4-dev-tools

 QT5

 sudo apt-get install pyqt5-dev-tools


QT4와 QT5의 차이는 말 그대로 버전 차이입니다. QT5가 wayland에 대응하는 버전이니 QT5를 더 추천합니다.


그리고 터미널을 이용해서 ui파일이 있는 프로젝트 폴더로 쳐들어갑시다.


cd 어쩌고.. 명령입니다.


그리고 한번 다음 명령을 쳐봅시다.


QTCreator로 만든 UI파일을 따로 빼내서 사용하자.



pyuic5 *.ui -x -o test.py

 QT4를 쓰신다면 pyuic5대신 pyuic4를 쓰시면 됩니다.

그러면 test.py라는 파일이 만들어지는데 이 파이썬 스크립트를 실행하면 여러분이 만든 GUI가 떡 하니 나옵니다!!!!



내가 만든 GUI가 파이썬으로 실행된다 우오오!!


중요한것은....이 스크립트에는 아무런 기능도 없습니다. 버튼이나 스크롤등의 기능을 만드시려면 이제 스크립트를 수정하거나 다른 스크립트에서 전달하는 등의 방법을 이용하시면 됩니다.


만약 UI만 파이썬으로 구현하고 중요한 기능은 다른 스크립트나 다른 언어를 이용하신다면 아까 명령에서 -x 옵션만 빼주시면 init함수를 빼버립니다. Jython등을 쓰면서 메인 함수를 Java로 사용하신다면 굉장히 편리합니다.


즉 Python 스크립트로 변환시

pyuic5 *.ui -o test.py


요렇게 해주시면 UI클래스만 나오므로 다른 메인 클래스에서 받아 쓰면 상당히 편리합니다.

실제로 저는 아두이노 제어 프로그램을 이런 식으로 짰습니다. Python을 그간 써먹은 적이 별로 없어서 약간 속도가 더디기는 했지만 Python특유의 빠른 개발속도 덕에 하루 만에 완성해서 써먹었습니다. 그리고 이거 우분투에서 만든 것이지만 Windows에서 실행하면 그대로 실행됩니다. OSX는 테스트해보지 못했지만 당연히 실행 될 것이라 생각하고 있고 기타 Python과 QT가 포팅된 모든 OS환경이라면 모두 실행이 잘 될것이라 생각됩니다.


어떤가요? 어떤 환경에서도 척척 붙는 언어인 Python, 그리고 어떤 환경에서라도 쓸 수 있는 라이브러리인 QT. 여러분께 정말 추천하고 싶은 개발 조합입니다.

,


이 놈이 바로 Arduino Mega. 포트가 많아서 출력이 많이 필요할 때 유용하게 쓰인다.


얼마 전에 아두이노 Mega 2560보드로 프로젝트를 잠시 진행한 적이 있었습니다.

캐릭터LCD를 붙여서 LCD에 글씨를 띄워야 하는데 자꾸 LCD에 글자가 깨지는 현상이 일어났습니다. 이유는 잘 모르겠는데 어찌어찌 하다 보니 글씨가 제대로 뜨기는 하더군요. 어쨌건 이후로는 정상적으로 작동하길래 그 날은 그냥 넘어갔습니다.


그런데 해당 문제가 다음날 또 터지더군요. LCD에서 글씨가 또 깨지더군요. 이유가 뭔지 잘 몰라서 난리를 치던 중에 프로그램 문제인가 싶어서 PC에 아두이노를 연결하자 정상적으로 LCD에 글씨가 뜨기 시작했습니다.


...사실 그동안은 전력 수급 문제로(LCD가 생각보다 전력을 많이 필요로 합니다. USB만으로는 좀 벅찰 정도입니다.)9V 어댑터를 연결해서 쓰고 있었는데 USB연결 없이 어댑터만 연결하자 LCD에 글씨가 깨지는 것이었습니다. 어댑터 문제인가 싶어서 어댑터 전압을 측정했더니 9V로 아주 쌩쌩하게 잘 돌아갔습니다. 사실 7V만 나와도 정상 작동 되어야 하는 것이기에(아두이노는 7~12V 어댑터를 연결하면 알아서 자체적으로 5V,3.3V로 알아서 낮춰서 잘 돌아갑니다.) 어댑터가 문제였을리는 거의 없습니다.


그래서 결국 아두이노 보드를 시험하던 도중 5V 출력단에서 전압이 이상하리만큼 낮은 것을 확인했습니다. 3.3V남짓 나오더군요. 그 옆에 있던 3.3V 출력단은 어떤가 봤더니 당연하게도 3.3V가 나오고 있었습니다. 즉 3.3V는 정상.


5V 출력 포트와 3.3V 출력 포트. 여기와 관련된 곳이 바로 어댑터 연결잭 근처에 있는 레귤레이터다. 즉 저놈이 전압 불안정의 원인

그래서 혹시나 하고 인터넷에 5V 출력 관련 이슈가 있나 해서 찾아보니 이슈가 있는 것인지는 모르겠지만 외국에도 사례가 있더군요.

http://www.instructables.com/id/Fix-a-fried-Arduino-Mega/#step1


Fried-Arudino...일명 날아간(튀겨진?) 아두이노 살리기.


아무래도 제 예상입니다만 LCD를 달면서 전류가 혀용량을 넘어섰고, 그에따라 레귤레이터가 맛이 갔는지도 모르겠습니다. 어쨌건 해당 글에는 레귤레이터를 아에 갈아버리더군요. 그것도 원래 아두이노에 달려있던 SOT-223대신 LM7805로 바꿔버렸습니다.


SOT-223도 괜찮은 칩이기는 한데, LM7805가 아무래도 신뢰도가 워낙 좋다 보니 이해가 가더군요.(LM시리즈는 전자상가에서 쉽게 구할 수 있는 데다가 실습 교재로 엄청 많이 쓰입니다.) 게다가 학교에서 수리 하다보니 LM7805는 워낙 남아돌아서(...) 저 사이트에 나온대로 바꿔보기로 했습니다.



그런데....

레귤레이터의 납이 안 떨어지네요...아무리 인두로 지져도 인두 온도가 낮은 것인지 저 칩을 뗄레야 뗄 수가 없었습니다. 그래서 그냥.... 


 해당 사이트를 참고해서 Vout부분인(즉, 원래 5V가 나왔어야 했지만 맛이 가서 3.3V가 나오는) 가운데 다리(*ㅡ_ㅡ*)를 잘랐습니다. 쉽게 말해서 그냥 보드에서 안 떨어지니 그냥 고자(...)로 만들어버리는 것으로 결정.


그리고 새로이 7805를 기존 레귤레이터 다리에 위치에 맞춰서 그대로 납땜을 했습니다.

SOT-223은

1pin GND

2pin Vout

3pin Vin

이지만,

LM7805는

1pin Vin

2pin GND

3pin Vout

입니다.

즉, 중간에 다리가 꼬이는데 혹시라도 있을 합선을 방지하기 위해 가운데 다리에 수축튜브를 끼워넣어서 절연을 해줍니다.

자세한 내용은 위의 링크가 걸린 사이트를 참조하시면 편하고, Vin의 위치가 1-3이니까 기존 레귤레이터와 LM7805가 서로 마주보게(...) 납땜 해주시면 편리합니다. 즉, LM7805의 2번 다리와 3번 다리를 서로 엇갈리게 꼬고 LM7805의 1번 다리와 기존 레귤레이터의 3번 다리가 만나도록 납땜 해주셔야 합니다. 혹시라도 잘못 연결하면 레귤레이터에서 연기가 피어오르는 것을 감상하실 수 있습니다.


7805를 아두이노에 납땜한 모습 테스터기로 찍어보자 딱히 합선은 없었다.

어쨌건 레귤레이터도 바꿨겠다. 어댑터 연결후에 5V포트의 전압을 측정하자 5V 칼전압이 나옵니다. Wow!


LCD를 연결하자 LCD에 글씨 엄청 잘 뜹니다. 역시 전압이 문제였다고 밖에는....일단 7805는 열이 많이 나오는 소자라서 방열판을 붙여줘야 합니다. 7805파는 가게에서 방열판도 같이 파니까 꼭 방열판을 달아놓으세요. 안 그러면 저 7805도 맛이 가는 수 있습니다. SOT-223은 잘 모르겠지만 7805는 그만큼 허용 전류량도 높으니 전류를 많이 뽑아먹어도 이제 큰 무리는 없을 겁니다. (못해도 1A는 버틴다고 하네요.)만세!




추가 이야기

아두이노에 가변저항 없이 LCD연결하기.


보통 아두이노 예제에서 LCD연결 회로는 다음과 같습니다.


저 가변저항이 무슨일을 하는가 봤더니 LCD 글씨의 대비를 조절하는 것이라고 합니다. 즉, 전압을 조절해서 LCD의 어두운 부분을 만드는 전압을 설정하는 것인데, 까놓고 말해서 가변저항 달기도 짜증나서 이를 간단히 하는 방법을 알려드리겠습니다.


우선 저 가변저항이 없으면 글씨가 무조건 까만 사각형으로 나오게 됩니다. 그리고 가변저항을 돌리다 보면 어느 순간 글씨가 보이는데 그 글씨가 보이는 수준은 LCD마다 제각각입니다. 기준전압이 지들 마음대로인데 보통은 5V짜리 기준으로 2.5V입니다. 즉 반정도 돌리면 보입니다. 그런데 가변저항을 달 생각하니까 그냥 짜증이 나더군요. 그래서 회로를 살짝 수정했습니다.




저 갈색선이 보이시나요? 아두이노의 6번핀과 LCD의 Contrast핀을 직접 이었습니다.


6번핀이 뭐냐하면 PWM지원 핀입니다.

analogWrite(~~,~~);

이 코드가 먹히는 핀이라는 것입니다. 물론 6번핀 말고도 PWM지원 핀이면 어디에 연결해도 상관은 없습니다.


analogWrite(6,120);//6은 6번핀이라는 의미 120은 듀티비가 120 즉, 출력 전압은 120/255 * 5V


위의 코드를 Setup()함수 내에 적어주시면 가변저항 없이도 LCD의 글씨가 보일 것입니다. 좀 까맣다 싶으면 120보다 낮은 수로 바꿔주시면 되고 너무 하얗다 싶으면 120보다 높이면 됩니다. 일부 LCD는 반대일 수도 있습니다. 어쨌건 저 숫자를 바꿔주면 조절이 됩니다. 심지어 머리를 조금만 더 쓰면 대비 조절을 별도의 스위치 조작이나 PC연결로 할 수도 있습니다.


보드가 깔끔한 것을 원하신다면 이 방법을 추천드립니다. 가변저항은 좀 불편하니까요. 디지털 방식도 나쁘지는 않다고 생각합니다.

,

http://moordev.tistory.com/20


우선, 링크의 글에서 저는 갖은 삽질을 통해서 안드로이드 버전을 올릴 수 있었습니다. 그런데 이것이 무엇을 의미하는 것인지 이때까지 저는 알지 못했습니다. 갑작스런 한글패치 및 삽질 하기 전에는...


관심 없으시겠지만 패치 제작 동기를 보고 싶으시다면 클릭


우선 이야기는 쭉 거슬러 올라가서 제가 Long Live The Queen의 한글패치가 개발중이라는 소식을 들으면서 시작됩니다.

http://ghap.tistory.com/entry/LONG-LIVE-THE-QUEEN-%ED%95%9C%EA%B8%80-%ED%8C%A8%EC%B9%98-%ED%8C%8C%EC%9D%BC%EC%9E%85%EB%8B%88%EB%8B%A4

끄암이라는 분께서 팀 왈도와 함께 한글패치를 공개중이라는 소식을 듣고는 적용을 해보았습니다. 그리고 이것을 안드로이드로 포팅하기 위해서 또 다른 삽질을 시작합니다.


Ren'Py의 최신 버전을 다운로드 받고 glpatch.rpy 삭제, steam.rpy 삭제, translation.rpy를 unrpyc한 후 2줄 주석 처리

translation.rpy

screen language_select:
    tag menu
    modal false
    add 'video_prefs_bg'
    vbox:

 →

screen language_select:
    tag menu
    # modal false
    add 'video_prefs_bg'
    vbox:

                 renpy.file(fn).close()
                return fn
            except:
                return s
        
        renpy.display.text.text_tags['tag'] = False
label set_language_failed:
    "An error occurred loading the new language:\n%(last_exception)s"
    return

 →

                 renpy.file(fn).close()
                return fn
            except:
                return s
        
        # renpy.display.text.text_tags['tag'] = False
label set_language_failed:
    "An error occurred loading the new language:\n%(last_exception)s"
    return

 

 

 

그리고 안드로이드에만 해당되는 패치로써

config.searchpath[0] 을 전부 '/sdcard' (따옴표 포함)로 찾아바꾸기 함으로써 한글패치 중 translation 폴더를 sdcard에 넣어서 패치가 인식되도록 고칩니다. 


그 다음 이전과 똑같이 rpatool로 llq.rpa 파일을 풀어버립니다.

그리고, 렌파이 런처에서 안드로이드로 작업하면 모든 것이 끝이 납니다. 정확히는 해당 글의 유튜브 영상을 보시면 안드로이드 포팅이 완료 됩니다. 그냥 유튜브 영상을 따라한 후 위의 작업을 해주시면 모두 완료 됩니다.

 

바로 여기까지가 안드로이드포팅을 위한 삽질이었습니다. 그런데 '/sdcard'로 찾아바꾸기를 하는 것을 제외한 나머지 작업이 또 필요하게 될 줄은 저도 몰랐습니다.

안드로이드 포팅 하면서 한글패치를 하고 한글화가 몇 군데가 덜 되었다는 것을 발견 합니다.

이 부분은 포럼에서도 말이 많은 부분이다. 왜 번역이 안 되는지 이유를 알 수 없다고..

즉, 몇군데가 완벽히 번역이 되지 않았는데, 문제는 번역파일 내에 이 문장들이 들어있었던 겁니다. 즉, 번역파일이 있음에도 문장이 번역이 되지 않는 이상한 현상이 생긴 것입니다.

이를 해결하고자 렌파이 내에 자체 번역기능이 있다는 것을 알게됩니다.

options.rpy에

config.language = "korean"

이 한 줄을 추가하고 렌파이 루트에 environment.txt 파일을 만들고, 그 안에

RENPY_UPDATE_STRINGS=""

이 한 줄을 넣어주면 이후 렌파이런처를 통해 게임을 할 때마다 game/tl/korean/strings.rpy 파일이 생성되면서 번역을 위한 파일이 생성 됨을 알 수 있었습니다. 그리고 여기서 번역을 해서 문장을 처리하니 잘 만 되더군요.(좀 노가다이기는 하지만)


그런데.....


렌파이런처가 아닌 스팀을 통해서 실행을 하면 오류가 나는 것이 문제였습니다. 그것도 tl/korean/strings.rpy 파일이 문제라고 하더군요.

웃긴것은 렌파이 런처를 통해서는 잘만 실행이 되었다는 겁니다.

렌파이 런처를 통해서 실행하면 에러가 없었단 말이다. 대체 뭐가 문제야!

....


결론부터 말하자면 렌파이 런처를 통해서 실행하면 최신버전의 렌파이(즉, 안드로이드 포팅을 위해 다운로드 받은 그 렌파이)를 통해 실행이 되고 스팀으로 실행하면 기존에 제작자가 만들었던 렌파이로 실행이 되는 것이었습니다. 즉, 렌파이 버전이 달라서 생긴 문제입니다.

기존 버전은 6.12.2 이었고, 이번에 제가 다운로드 받은 버전은 6.17.7이었습니다. 이 버전 차이가 약간의 문제를 일으킨 것입니다.


제가 안드로이드 포팅을 위해 이리저리 뜯어고치고 바꾸고 한 것이 사실 제가 다운로드 받은 렌파이엔진에 맞게끔 뜯어고친 것과 같은 것입니다. 그리고 저 game/tl/korean/strings.rpy 파일도 기존 스팀으로 다운로드 받은 렌파이로는 처리가 불가능(translation 관련 스크립트가 전무합니다.)했기에 에러를 뿜은 것입니다.


...그래서 렌파이 런처로 어쨌건 실행은 되긴 되니까 배포판 만들기 기능으로 아에 새로운 배포판을 만들어봤습니다.


내가 만든것도 아니면서 배포판 기능을 사용했다... 뭐 직접 배포할 것도 아닌데 뭘


중간에 options.rpy 파일을 손대는 과정이 있었는데 잠깐 무시하고 배포판으로 만들어진 것을 직접 실행해봤습니다. 그랬더니 Steam문제만 일으키고 마네요?

그래서 options.rpy를 기존것으로 교체후에 Steam에 있던 폴더를 교체해봤습니다.

잘만 번역 되네요. 심지어 스팀도 연동 잘 됩니다.그런데 이것이 의미하는 것이 한 가지 있었습니다...게임엔진이 완전히 교체되었다는 사실입니다. 이제, 렌파이도 버전이 바뀌었고, Python도 Python2.6에서 Python 2.7로 바뀌었습니다. 이것이 어떤 문제를 일으킬지는 알 수 없지만, 최소한 번역 관련해서 문제를 일으킬 것 같지는 않군요.


LongLiveTheQueen/lib/ 폴더트리구조부터 바뀌었다. 이외에도 LongLiveTheQueen/renpy/ 도 당연히 바뀌었다. 엔진 버전 자체가 바뀐 상태로.

그리하여...해당 엔진 버전업 패치를 공개하고자 합니다. 그런데... /game/ 폴더 제외하곤 거의 통짜 교체라 이게 먹힐지 안 먹힐지....


닫기



이미 대부분의 기능이 Ghap님 패치에 이식 되었습니다. 몇몇 추가기능(그래픽 가속 기능, 렌파이 번역엔진, 안드로이드 포팅)등을 이용하실 생각이 있으신 분들만 사용해주시면 됩니다.

단순 게임을 즐기기 위해서라면 Ghap님 패치만으로 충분합니다. (몇몇 문장 번역 안 되는 문제는 Ghap님 께서 alpha버전을 통해서 작업하고 계십니다. 필요한 기능이 alpha버전에 들어가 있거든요.)




이 패치는 우선적으로 http://ghap.tistory.com/entry/LONG-LIVE-THE-QUEEN-%ED%95%9C%EA%B8%80-%ED%8C%A8%EC%B9%98-%ED%8C%8C%EC%9D%BC%EC%9E%85%EB%8B%88%EB%8B%A4

여기에 있는 패치 적용이 전제되어야합니다. 즉, Ghap님의 패치를 먼저 하시라구요...


단!!! 우선 Ghap님 패치중에서 options.rpy는 하지 말아주십시오. 엔진 교체시 스팀 연동불가의 원인이 될 수 있습니다. 우선 options.rpy를 뺴고 제 패치를 설치한 후에 구동해 보십시오. 구동이 잘 된다면 그냥 게임을 해주시면 되고 구동이 안 되시면 그 때 options.rpy를 넣어주셔도 늦지 않습니다.


우선 기존의 C:\Program Files\Steam\steamapps\common\LongLiveTheQueen\renpy폴더를 미리 삭제해 주셔야합니다.

안 그러면 엔진충돌 납니다. 혹시 모르니 미리 백업하시는 것도 필수입니다.

리눅스 사용자라면

~/.steam/steam/SteamApps/common/LongLiveTheQueen/renpy 폴더를 미리 삭제해주시면 됩니다.


이전버전

그리고 


윈도우 사용자용(7z압축)
리눅스,MacOSX사용자용(tar.gz압축 권한 설정이 되어있습니다.)


위의 패치를 다운로드 받으신 다음 그대로 덮어쓰기 해주시면 됩니다. 


리눅스 사용자는 tar.gz 파일을 이용하시면 따로 권한 설정을 하실 필요가 없습니다.

그리고 리눅스 사용자에 한해서 다음 명령어로 실행권한을 주시기 바랍니다.(OSX는 모르겠습니다. 아마도 리눅스 처럼 해줘야 할 것 같습니다.)


chmod +x ~/.steam/steam/SteamApps/common/LongLiveTheQueen/lib/linux-i686/LongLiveTheQueen

chmod +x ~/.steam/steam/SteamApps/common/LongLiveTheQueen/lib/linux-x86_64/LongLiveTheQueen

chmod +x ~/.steam/steam/SteamApps/common/LongLiveTheQueen/LongLiveTheQueen.sh


이 패치로 인해 생기는 문제에 대해서 저는 책임을 지지 않습니다. 패치를 함으로써 생기는 문제는 전적으로 사용자 책임입니다.


번역은 Ghap(ghap.tistory.com)님과 팀 왈도의 결과물입니다. 번역본을 다른 용도로 이용하실 분은 미리 번역자분께 허락 받기 바랍니다.


8월 9일 추가


이 이미지를 moodbg.png라고 /game 넣어주시면 기분 탭의화면이 이것으로 바뀝니다. 영문 폰트를 대충 지운 흔적이 보이지만 게임상에선 아무 지장없습니다.(...)


8월 10일 새벽에 추가


Prettyprint.rpy(숫자관련 스크립트)부분을 대폭 수정하여 영문으로 뜨는 부분을 날려버리고 아라비아숫자로 뜨도록 바꿨습니다.  one two 등으로 뜨는 부분을 1,2 로 싹다 바꿨습니다. 하나 둘 셋으로 바꿔도 되지만 우리나라 말 특성상 한 대대 두 소대 세 중대 등 단위가 바뀌면 또 말이 바뀌어서 그냥 아라비아 숫자로 뜨도록 했습니다. 이렇게 하는 것이 더 보기에 낫고요. 일부 함수가 작동을 하지 않은 것으로 판단되어서 그냥 함수를 덮었습니다. 그랬더니 잘 되네요. 이유야 어찌되었든...


그리고 추가 개선 한글 패치에서 Ghap님의 1.5버전에 맞게 일부 수정했습니다. 어쨌건 이 패치를 하면 한글은 잘 나오는데 다른 언어 사용자들은 지옥을 맛보게 될 겁니다.(설마 이 게임을 영어 공부하는데 쓰지는 않겠지요?)


8월 10일 버전 패치(구글드라이브라 속도가 매우 느립니다. 인내를 갖고 기다리시면 다운로드가 될 것입니다.)


윈도우 사용자용(7z압축)
리눅스,MacOSX사용자용(tar.gz압축 권한 설정이 되어있습니다.)


8월 12일 새벽.

로그 기능에 문제가 생겼던 이유는 파이썬이 기본적으로 아스키 코드를 기반으로 만들어지기 때문에 벌어진 일입니다. 해당 파이썬 스크립트 시작 부분에


sys.setdefaultencoding('utf-8')


요 한줄을 추가 함으로써 해결이 됩니다.

브라우저에서 마구 깨지는 문제는 htmlize_readback_log() 함수 첫줄에

<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head>

이 <html>와 <body>사이에 태그를 삽입하도록 만들면 됩니다.


html = '<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head><body>'


이런 식으로 말이지요.


아래 13일 버전 패치를 통해서 해결 했습니다.

도로 접기


8월 13일 버전 패치(구글드라이브라 속도가 느립니다. 기다려 주시면 링크가 뜰 것입니다.)

{스팀경로}/LongLiveTheQueen 폴더에 압축을 풀기 전에 LongLiveTheQueen/renpy 폴더를 미리 삭제해 주시기 바랍니다.

Ghap님의 패치와 달리 (스팀경로)/LongLiveTheQueen 폴더에 압축을 풀으셔야 합니다.



윈도우용 (7z압축)

리눅스,OSX용 (tar.gz압축 따로 권한설정 필요없음)


수정사항

1. 로그 관련 오류 수정 - UTF-8인코딩을 기본적으로 쓰도록 함 (기존은 ASCII 인코딩이었음)

2. 저장이나 불러오기 중에 빈 슬롯에 "Empty Slot" 을 "비어있음"이라고 뜨도록 함. 200개 까지는 커버 함

3. 과목을 다 배우거나 한 종류만 50을 배웠을 때 과목 명이 영문으로 뜨므로 임시로 그것을 막기 위해


"당신이 현재 배우는 스킬은 50이 되었습니다. 같은 그룹내의 다른 스킬들이 25 이상이 되기 전엔 해당 스킬을 향상시킬 수 없습니다."

"당신은 이 스킬에 대해 더 배울 것이 없습니다."


이런 식으로 뜨도록 수정. - 한국어를 이용한 꼼수 - strings에 적힌 것과는 별개로 translation.rpy에 하드코딩 했으므로 무조건 이렇게 뜹니다.


4. prettyprint.rpy에 몇몇 함수가 여전히 작동 불능상태이므로 readable_number_small함수를 Override하는 식으로 덮었음. 함수가 작동 안 하는 일은 없을 것입니다.

(주의. Ghap님의 1.6버전의 한글패치 중 /translation/kr/ui/printpretty.rpy 파일이 들어있는 한 해당 스크립트가 우선 오버라이드 됩니다. /translation/kr/ui/printpretty.rpy 및 /translation/kr/ui/printpretty.rpyc 파일의 삭제 부탁드립니다. strings파일도 같이 있는 것으로 봐서 ghap님이 실수 하신 것으로 보입니다.)


5. 세이브파일에는 0주차로 뜨고 게임 내에서는 1주차로 뜨는 것을 수정 하는 패치 제작(제작사와 관계없이 수정 했으므로 무슨 일이 벌어질지 저도 모릅니다. 제작사는 버그가 아니라고 했으므로 안 하셔도 됩니다.)

세이브 주차수 관련 패치


압축을 풀어서 /game 폴더에 넣어주십시오.


6. 제일 중요한 오타 및 실수 수정.

,

이 글은 2012년 10월 27일에 제 다음블로그에 있던 글을 가져온 것입니다. 지금하고 약간 안 맞을 수도 있습니다. (하지만 저는 아직도 이 방법대로 만들어서 사용하고 있습니다.)

컴퓨터를 10년이상 굴리다보니 친구나 친척을 통해서 낡은PC가 잘 굴러들어온다. 소음도 엄청 크고 가끔 터질지 모르는 시한폭탄같은 물건도 있지만 그것 중에는 버려두기 아까울 정도의 물건도 있다. 특히 내가 어딘가에서 3만원주고 구입한 인터넷PC가 그러한데 우리은행이라 적힌 것을 봐서 고객편의용으로 굴리다가 용산에 내놓은 것으로 보였다. 어쨌건 생각보다 깨끗한데다가 조용한 편이라(120mm 팬 하나로 냉각을 끝낸다.) 토렌트머신 및 NAS대용으로 굴리고 있다. NAS용으로는 그냥 Pydio/AjaXplorer 를 이용하면 NAS대용으로 충분히 굴릴 수 있다. 이건 쉬우니까 설명 안 한다. 

일단 이제는 쓰지않는 낡은 PC에 하드를 큰걸 넣고 깨끗한(?)리눅스를 설치한다. 제일 좋은 것은 역시 우분투서버버전이나 X없는 데비안, 그리고 센트OS정도? X를 쓴다면 내가 이 글을 올릴 이유가 없을 정도로 쉬울테니(마우스로 딸깍거리기만 하면 바로 웹컨트롤이 되는데 굳이 이렇게 글을 올리겠는가...)

설명 기준은 우분투(혹은 데비안)기준이다. 다른 OS를 쓴다면 설정파일이나 몇가지가 다를 것이다.

(트랜스미션 홈페이지에서 데비안만 따로 설명하고 있다. 설정파일이 다른곳에 있다고(...))

일단 

sudo apt-get install transmission-daemon

으로 트랜스미션의 데몬(서버버전?)을 설치한다. 그리고 설정파일을 수정하기 위해서 서버를 중지시켜야 한다. 중지 명령어는

sudo /etc/init.d/transmission-daemon stop

이러면 서버가 중지되었다고 뜬다. 서버를 중지시키는 이유는 아파치와는 다르게 일단 데몬이 죽지 않으면 설정파일을 원래대로 돌려놓기 때문이다.

이제 /var/lib/transmission-daemon/info/setting.json 파일을 편집한다.

sudo nano /var/lib/transmission-daemon/info/setting.json

(만약 나노를 쓴다면 이렇다는 것이고 vi를 원한다면 nano 대신 vi를 쓰면 될것이다. 참고로 vi는 초보자에겐 엄청 버겁다...)


쭈욱 내려가다가 rpc-whitelist란 항목이 보이는데 이부분을 true에서 false로 고친다. (외부에서 웹으로 접속하기 위함이다.)

포트도 바꾸려면 포트도 바꾼다. 기본포트는 9091이다.

rpc-username과 rpc-password도 원하는 것으로 고친다. 이 항목은 웹으로 접속할 때 필요한 로그온과정에서 물어볼 것이다. 잘 기억하자.

그리고uname umask의(감사합니다 욱이님 수정했습니다.) 숫자를 18에서 0으로 고치자. 이래야 777로 누구나 수정 가능한 권한이 주어지게 된다.

일단 여기까지만 해도 상관없다. 나머지는 웹으로 접속한다음 설정해도 충분히 설정이 가능하기 떄문에...

다시 서버를 실행한다. sudo /etc/init.d/transmission-daemon start

그리고 웹브라우저로 서버에 접속해보자.

http://(서버주소):(포트번호 기본은9091) 

이 러면 유저네임과 패스워드를 물어볼텐데 아까 설정한 이름과 패스워드를 입력해보자. 이제 웹으로 토렌트를 충분히 컨트롤할 수있게 되었다. 더 많은 설정을 하고 싶다면 아래쪽의 톱니버튼을 누르고 Preference를 누르면 더 설정이 가능하다. 예를 들면 다운로드 폴더라던가 속도라던가.

안드로이드에서는 TorrrentFu같은 어플리케이션으로 컨트롤이 가능하다. 아니면 Transmission-remote같은 것도 괜찮다. 아이폰도 있을텐데 이건 내가 아이폰이 없으니 알아서 앱스토어를 잘 뒤져보시라. 정 짜증나면 그냥 웹브라우저를 이용해도 충분히 컨트롤 가능하다. 다만 PC용 웹화면이라 확대축소가 불가피하다.

써보니 Transmission 의 큰 문제가 있었다. Transmission으로 받은 파일은 소유주가 Transmission이고 덕분에 CIFS등으로 접속하면 여길 수정할 수가 없다는 것이다. 그래서 Transmission 계정에 몇 가지 권한을 지니게 해줘야만 했다.

만약 Transmission의 계정명이 debian-transmission이라면

sudo usermod -a -G debian-transmission

sudo chgrp debian-transmission 다운로드폴더

sudo chmod 777 다운로드폴더

같은 작업이 필요하다.

,

이 글은 2014년 1월 5일 원래 제 다음 블로그에서 가져온 글입니다.

Long Live The Queen 프린세스메이커의 패러디 게임이라고 하는데 죽을일이 없는(가끔 가출은 하더만...) 프린세스 메이커와는 다르게 잘못된 선택은 곧 죽음인 살얼음판의 프린세스메이커라고 한다고해서 가격도 싸길래 냉큼 질러보았다.(사실 리눅스 지원인것도 한 몫했다. 리눅스 지원 게임이 그리 많지는 않으니..최근 개인프로젝트로 돌릴까 하는 클라우드게이밍도 스팀이 리눅스를 지원하면 그냥 클라우드 데스크탑에 스팀만 띄워주면 되니까 쉬워진다.)

일단 냉큼 지르고 영어의 압박을 간단히 떨친후(사실 영어로 되어있어서 반대로 게임하기 수월했다.) 뭐가뭔지 몰라(...) 공략을 찾던 중 이 게임이 Ren'Py라는 엔진으로 만들어졌다는 것을 알았다.

 Ren'Py... 이름에 왠지 Py가 들어가는데다가 MacOSX, Linux, Windows를 전부 지원한다? 혹시 이거 Python?하고 스팀설치 폴더에 들어가서 뜯어본결과 Python맞더만...그것도 PyGame이라는 엔진을 비주얼노벨용으로 만든게 Ren'Py고 PyGame이 안드로이드도 지원하기 때문에 Ren'Py도 안드로이드 지원이 가능하다고 되어있었다.

그러나. 이 게임은 스팀에서 판매하기에 안드로이드 지원이 될 턱이 없었고 스크립트 언어인 Python이라면 별 저항없이 안드로이드에 이식이 되지 않을까 하던중 RenPy SDK에서 안드로이드 지원이 가능하다는 것을 찾아내었다.

흐음...이걸 일단 안드로이드에 이식해 보기로 하고 결국 휴일에 삽을 들고 말았다...에라이.

 자 안드로이드 포팅(?)을 위한 준비물을 우선 말해보도록 하겠다. 여기서는 우분투같은 리눅스 환경에서 작업하는 것으로 되어있습니다. Mac이나 Windows는 스팀게임의 경로나 안드로이드폰 연결방법등이 다릅니다.

 http://baekansi.hosting.paran.com/doc/html/android.html

여기에 일단 안드로이드용으로 컴파일 하기위해 어떻게 해야할지 자세히 나와있다.

우선 필요한 것은

1. Ren'Py SDK http://www.renpy.org/latest.html

2. Oracle JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html

3. Python 2.7 이건 뭐...알아서 검색하던가 sudo apt-get install python2.7

4. RAPT(렌파이 안드로이드 패키징 툴)http://www.renpy.org/dl/android/

5. 손을 댈 Ren'Py로 만들어진 게임(여기선 Long Live The Queen 되시겠다. 이건 Steam관련 스크립트가 있긴 하지만...스팀없이도 실행되는 것을 확인)

6. rpatool https://github.com/Shizmob/rpatool  rpa나 rpi등으로 이미지나 음악들이 압축 되어있는 경우 어쩔 수 없이 이 파일들을 풀어 해쳐놓아야 안드로이드에서 실행이 된다. 아니면 다른 방법이 있을 수도 있는데 방법을 잘 모르겠다.(...)

7. 삽질을 위한 안드로이드 기반 기기(에뮬레이터는 비추)

8. adb 안드로이드개발 홈페이지에서 다운로드 받던지 아니면 sudo apt-get install android-tools-adb

*. 당신의 삽질력


일단 되었으면 JDK와 Python을 설치하자.

그리고 Ren'Py SDK를 적당한곳에 압축을 풀고 RAPT를 Ren'Py SDK의 압축 푼곳에다가 같이 압축을 풀어넣자.

압축 풀기가 완료되었다면 renpy.sh를 실행해서 Ren'Py런처가 실행이 잘 되는지 우선 보도록 하자. 되었다면 예시로 같이 들어있는 것도 실행해 보고 이것저것 하다가 일단 종료.

 이 제 스팀에서 Ren'Py게임을 구입하자. 아니면 조금 뒤적거리면 무료로 좋은 게임을 배포하기도 하니 잘 찾아보자. 걔중엔 지하철에서 하기에는 조금 엄한물건도 있기는 하지만....여기서는 아까 말했던 Long Live The Queen(이하 LLQ)을 이용하도록 하자. 그리고 꼭 한번 실행시켜주자. 가끔 스팀이 제대로 다운로드 안 하고 다 됐다고 사기치는 경우가 있어서 그런것이니  한번은 꼭 실행시켜보도록 하자.

실행이 확인 되었으면 ~/.local/share/Steam/SteamApps/common 로가면 당신이 그동안 스팀에다가 쏟아부은 결과물들이 들어가 앉아 있다. 여기서 Long Live The Queen이란 이름의 폴더째로 일단 복사하자.

 복사한 폴더는 위의 Ren'Py SDK와 RAPT의 압축을 풀어넣은 곳에다가 붙여넣기 하면 된다. 다시 한번 renpy.sh를 실행해보자. LongLifeTheQueen이 보이는가? 오른쪽에 Android라고 보이는가? 여기에 보면 Emulation으로 실행을 해볼 수 있다!!!! 그.러.나. 여기서 실행하면 당연하다는 듯이 에러난다. 이 에러를 잡는 것이 바로 이 삽질의 핵심이다.

삽질의 처음은 로그를 뜯어보는 것이다. 로그를 한번보자. glpatch.rpy가 에러가 났다고 나온다. 하지만 게임폴더를 아무리 뒤져도 rpy파일은 보이지 않는다. 사실 파이썬을 써보면 알겠지만 속도를 위해 한번 바이트코드로 컴파일하게 되는데 렌파이도 비슷한 원리로 스크립트를 컴파일 해 놓은 것이다. 즉 로그에서 rpy라고 나오는 파일이 사실 rpyc를 말하는 것으로 생각해도 좋다.
 

 암튼 glpatch라는 놈이 문제라고 되어있는데 이미 컴파일되어있는 스크립트를 어떻게 해볼 수는 없고 한번 제거해보도록 하자.즉 삭제! 그리고 빈파일을 하나 만들어서 glpatch.rpy라고 하나 만들어 놓자. 빈 파일이기 때문에 아무런 내용은 없지만 그렇다고 파일이 없으면 그건 그것대로 또 에러가 난다. 말그대로 patch라고 되어있는 걸로 봐서 OpenGL관련 문제를 해결한 패치로 보인다. 그러나 안드로이드에서는 저게 도리어 문제를 일으키니 패치를 없애도록 하자. 그리고 한번 게임을 실행해보면 glpatch.rpyc가 생성되어있는 것을 알 수 있다. rpy가 빈파일이므로 rpyc도 빈내용으로 만들어진 바이트코드가 된다. 이걸로 한 가지 알 수 있는 것은 저 패치는 PC에서만 통하는 것으로 보인다는 것. 아마 Nvidia나 ATI드라이버 호환내용이 아니었을까?

아까처럼 PC에서 renpy.sh를 실행하고 Android - Emulation - Phone 혹은 Tablet 를 실행해보자. 이번에는 타이틀 화면이 뜬다? 참고로 Translation.rpy를 작성한뒤 game폴더에 넣어주고 Translation.rpy에 폰트를 지정한다음 해당 폰트를 Game폴더에 같이 넣어주면 폰트도 맘대로 바꿀 수 있게 된다. 다만 은폰트나 나눔 폰트를 이용하는 것을 권한다. 맑은 고딕도 예쁘지만 이건 MS가 저작권을 지니고 있어서...Translation.rpy작성법은 http://www.renpy.org/wiki/Ren%27Py_%EC%97%90%EC%84%9C_%ED%95%9C%EA%B8%80_%EC%84%A4%EC%A0%95%EC%97%90_%EB%94%B0%EB%A5%B8_%EC%95%88%EB%82%B4

여기를 참조하시길

이제 안드로이드용으로 컴파일을 해보자. 해보기에 앞서서 터미널 사용법을 알고 있으리라 믿는다.

 renpy가 설치된 곳으로 가서 (RAPT의 압축을 푼 곳으로 가서)

./android.py installsdk

라고 치면 이 녀석이 안드로이드 SDK를 다운로드 받으면서 이것저것 물어보게 된다. 그냥 yes 혹은 no라고 대답만 하면 알아서 잘 해주니 그냥 시키는대로 하자.

그다음

./android.py configure LongLiveTheQueen

이라 치면 configure 뒤에 붙은 게임의 안드로이드 설정을 하게 된다. 역시 묻는말에 꼬박꼬박 대답하면 된다. 개인적으로는 2.2기반보다 4.0기반으로 만드는 것을 추천한다. 3.0은 그냥 버리는 거다.

이제 설정이 끝났다면 드디어 APK빌드를 해보게 된다. 이에 앞서 안드로이드 폰을 PC에 연결하고 ADB설정을 하고 디버그모드를 허용까지 해주어야 편하다. ADB설정은 이 블로그 어딘가에 잘 써있으니 참고.

일단 안드로이드기기를 PC에 연결하고

./android.py build LongLiveTheQueen release install

이렇게 하면 안드로이드용으로 빌드도 하고 안드로이드기기에 알아서 설치까지 다 해준다.


이제 실행해보기전에

./android.py logcat

을 실행하고 기기에서 게임을 실행해보자. (Ren'Py기본 아이콘에 기본로딩화면이 뜬다. 이는 RAPT루트/res/drawable을 교체함으로써 바꿀 수 있다. 이건 그냥 참고사항


아마도 혹은 역시나 에러를 내뿜어 주실것이다.

 steam.rpy

결국 스팀이 일을 내주셨다. 아까처럼 steam.rpyc를 삭제하고 빈파일로 steam.rpy파일을 하나 만든 후에 게임을 한번 실행하고 다시 APK를 만들어주자.


그리고 bytecode.rpyb파일은 그때그때마다 삭제해놓길 바란다. 게임실행속도를 올리기위한 방법중 하나지만 APK의 용량증가의 원인중 하나이므로...


이제는 안드로이드기기에서 타이틀화면을 봐야 정상인데....

 안된다. 그럼 아까처럼 logcat을 한번 보자.

  왠 아이콘 이미지를 못 찾는다고 뜬다.(icon-big.png)ignore 버튼을 누르니 이번엔 배경이미지를 못찾는다고 하고 배경음악도 못찾는다고 하고..

이 파일들 아까 Game폴더에 없었는데?


 사실 이것의 경우는 안드로이드용 렌파이의 문제일것으로 보인다. 게임 개발자나 회사에서 감추고픈(?) 이미지나 음악들이 떠돌아다니는 것을 싫어하기에 Ren'Py에서는 rpa라는 파일로 압축+암호화를 하는데 이게 안드로이드 내에서 정상적으로 복호화가 진행이 되지 않은 것이다. 잘 뒤져보면 llq.rpa란 파일이 보인다. 아마 못찾는다고 뜬 파일들은 이 안에 다 있을 것이다. 그럼 이걸 풀어서 game폴더에 흩뜨려 놓으면 정상적으로 실행이 될 것이다.

그럼 무엇으로 복호화를 할까? 아주 간단하게도 rpatool을 이용하면 된다. 이 것도 하나의 파이썬 스크립트로 되어있는데 그냥 game폴더에 넣어주자. 그리고 cd명령으로 game폴더까지 들어간다음

./rpatool.py -x llq.rpa

이러면 암호화되었던 것들이 압축이 싹풀리면서 보이게 된다. 그럼 이제 rpatool하고 llq.rpa파일은 필요없어졌으니 삭제하자. 겸사겸사 bytecode.rpyb파일도 삭제해주고.

이제 다시 빌드하고 폰에 넣으면?

 타이틀화면 입성! 게임까지 입성이다!!!

오오..


힘든 사투였다.오오..근데 이 게임을 지하철에서 하는 건 좀 무리 아니려나...

2014. 7 .26 우선 안드로이드 포팅을 하는 방법을 올린 유튜브 영상이다. 본인이 찍었으며 이 방법을 통해서 만들어진 결과물을 마음대로 배포하지를 않기를 바란다. 만들어진 결과물은 개인적으로만 사용하고 꼭 스팀에서 구입한 것을 이용하자. 공식홈페이지에서 구입한 것은...잘 모르겠다.


,

http://www.freeantennas.com/projects/template/

이 사이트를 보거나

http://www.binarywolf.com/249/diy-parabolic-reflector.htm

이 사이트를 보면 무선공유기에 반사판을 만들어서 무지향성인 공유기안테나를 지향성안테나로 만들어준다고 합니다. 일단 지향성안테나가 됨으로써 방향만 맞으면 최대 25%정도 성능향상이 이루어진다고 하길래 한번 만들어서 씌워보았습니다. 다만 저는 쿠킹호일이 아닌 알루미늄 테이프로 만들었고 3겹을 덮어주었습니다.

결과는....

차마 스크린샷으로 보여주지 못할 정도로 참담했습니다. 내가 실력이 없는 것인지 아니면 어디부터 잘 못된것인지... 다만 아주 약간 성능이 향상되었습니다. 다만 이건 체감하기 어려울 정도입니다. 이쯤되면 리플렉터보다는 그냥 안테나를 하나 새로 만드는 것이 나을 것 같군요. 아니면 공유기에 끼워넣어준 안터나가 원체 구려서 그럴지도 모르지요.

만약 리플렉터장착만으로 상당히 성능향상이 이루어지신분이 있다면 댓글이나 트랙백을 부탁드립니다.

,

XP의 지원이 끊긴지도 꽤 되었습니다. 사람들은 이제 낡은OS를 버리고 새OS로 갈아타는 중입니다. 대부분 사람들의 새OS가 MS입장에선 윈도8이었으면 매우 좋았겠지만, 윈도8이 아닌 윈도7이란게 MS는 답답한 노릇일겁니다. 7이 8보다 더 비싸니 더 좋을 수도 있겠군요. 

서론은 그만하고 이제 본론으로 들어가겠습니다. XP가 처음 세상에 나온 시절에 기존에 쓰던 프로그램이 돌아가지 않아서 많은 사람들이 혼란을 겪었습니다.여차하면 새pc에 98을 설치하는 경우도 있었으니까요. 윈도의 판매는 윈도의 완성도가 아니라 그 응용프로그램들이 이끈다고 할 정도로 쓰던 프로그램이 안 돌아가면 그 OS가 어떻든 안 씁니다. 리눅스가 아무리 발전해도 윈도를 못 따라잡는게 바로 이런겁니다. 맥도 엄연히 말하자면 osx가 아니라 파이널컷이나 키노트를 쓰기위해 사는경우가 많습니다. (예쁘다고 사는사람도 있기는 합니다.) 

그럼 윈도7은 어떨까요? 일반 사용자들이야 큰 문제는 없습니다. 비스타가 난리를치기는 했지만 비스타를 통해 어느정도 호환성을 확보해서 7에게 넘겨주었습니다. 심지어 드라이버도 호환됩니다. 이정도면 합격입니다만 어디까지나 일반사용자입장에서야 합격이고 산업현장에서는 이야기가 조금 다릅니다. 

산업현장에서는 프로그램상 보통 안정성이 검증된 구버전을 선호합니다. XP기반뿐만아니라 아직도 도스로 관리하는 기업도 있습니다. 그런데 7은 솔직히 검증되었다고 하기에는 조금 부족할지도 모릅니다. 특히 기계컨트롤 관련으로는 관리자 권한이라던가 드라이버 문제로(xp와7은 드라이버가 완벽히 호환되지 않습니다. 어떤문제가 일어날지 모릅니다.) 기존 프로그램을 사용해야 할수도 있습니다. 그리고 일부 프로그램은 설치조차 안되서 호환성설정을 해야하는데 그것마저 잘 안되는경우도 있습니다. 그럼 7호환되는 프로그램을 사야 합니다. 기업들이 좋아할리가 없지요. 아마도 큰마음 먹어야 할 수도 있습니다.

사용자에 따라 큰 차이를 보이는 이유가 무엇일까요? 사실 그 이유는 프레임워크 및 라이브러리부분과 커널단이 차이를 보이기 때문입니다.

프레임워크는 닷넷프레임워크같이 응용프로그램이 돌아갈때 해당 응용프로그램이 돌아가게끔 해주는 일종의 뼈대입니다. 닷넷으로 개발한다고 하면 닷넷프레임워크를 뼈대삼아 이리저리 끼워 맞추는 겁니다. 그런데 윈도는 닷넷만 있지 않습니다. VisualC++로 만든 윈도API기반 프로그램이 더 많습니다. 그런데 이 API가 조금 바뀌어서 다르게 동작한다면? 오류터지는 겁니다. 윈도API를 프레임워크라고 한다면 이 달라지는 것을 갖고 이리저리 패치해야합니다. Wine이 버전에따라 될때가 있다가 안될때가 있다가 하는게 바로 이 api의 구현이 어떻게 바뀌었을지 모르기 때문입니다. Api가 xp와7이 얼마나 다를지는 MS만이 알고 있을겁니다. 아 라이브러리는 이 API가 구현되어진 파일들이고요. directx같은것도 라이브러리입니다.

그리고 산업현장에서 쉽게 OS를 못바꾸게 만드는 원흉인 커널이 되겠습니다.  사실 라이브러리는 패치하기 쉽습니다. 함수형태가 변하는경우는 거의없고 구현이 살짝 바뀌어서 거기맞춰 수정하기만 하면 되기때문에 리버스엔지니어링으로 처리해버리는 경우도 가끔있습니다.(보통은 그럴 필요는 없고 프로그램 제조사에서 금방 대응해줍니다) 문제는 드라이버입니다. 기계들을 관리하는 프로그램들은 드라이버단이 필수인데 커널이 바뀌면 참 대응하기 어렵습니다. 제조사에서 바로 대응해주기도 어렵고요.7은 xp가 못하는 기능이 다수 포함되었는데 파일시스템추가라던가 iso마운트 전력소모 컨트롤 다중프로세스 최적화 등등 그런데 이게 드라이버단에서 꽤나 문제를 일으킵니다. 사운드 드라이버같은것은 별 문제를 안 일으키는데 gpu를 활용하고(cuda같은) 시리얼통신을 하며 특수pci카드같은 장치를 통한방식을 쓴다면 드라이버가 참 말썽을 많이 일으킬것이 뻔합니다. 실제로 xp용 그래픽드라이버를 7에 설치하였을시에 해상도는 잡히지만 발열이 어마어마하게 나며 사망했습니다.... 커널단에서 전력조절을 못한듯 합니다. 그래픽카드야 새 윈도를 당연히 대응해주지만 특수장치 같은경우에는 드라이버를 새로 개발해야 할 정도로 답답해집니다. 그라고 가끔 디스크인식 문제도 벌어진다는군요. 산업용보드같은 경우에는 안정성을 위해 구버전 칩셋에 구형cpu를 다는경우가 많은데 이게 7용 드라이버가 없는경우라고 하더라구요. 산업현장에서는 참 답답할 노릇입니다. OS를 바꾸기는 해야겠지만 기계까지 바꿀수는 없으니...

아마도 이래서 산업현장에서는 범용보다는 임베디드를 선호하는 것일 수도 있겠습니다. 일단 임베디드는 최적화된데다가 OS교체주기가 기니까요. 

갑자기 임베디드하고 범용의 비교가 나왔네요. 기존xp를쓰시던분들은 7교체를 하실때 주변 하드웨어 호환을 고려하셔야합니다. 일반 사용자들은 그냥 지금쓰는 프로그램이 돌아가는지만 확인하시면 되고요. 산업현장은 바꾸는게 능사가 아닐수도 있겠네요.

,