[카테고리:] 컴퓨터

  • 삽질이 끝나지 않아

    형 지정을 미리 하지 않고 실행시에 판단하는 동적 바인딩 언어는 앞으로 안좋아할 것 같다. (쓰고 안쓰고를 떠나서.)

    일단 뭐가 틀렸는지 알 수가 없다. 난 분명히 문서에 써 있는대로 함수에 넣으라고 한 놈을 “넣은 것 같은데” 안 맞는다고 에러.

    문서에 보면 “이 함수의 리턴은 image이다”라고 되어 있는데 실제로 해보면 str로 리턴. 에러.

    파이썬은 거기에 들여쓰기를 계속 넣었다 뺐다 해야 한다. for나 if를 넣었다 뺐다 하는 경우에도 블럭 전체의 들여쓰기를 넣었다 뺐다 해야 한다. 불편하다.

    애초에 처음 배우는 언어로 사용중 실시간 코딩을 해보겠다고 한 내가 미친놈이고 죄인이지.

    파이썬이 나한테 욕먹는건 분명 내 개인 사정때문인데, 그래도 욕은 해야겠다. 파이썬 싫다.

    누가 좀 개발해줘……

  • 괴이한 오류

    PIL로 작업중인데

    Image.fromstring() 메소드는 분명 str을 받아다가 image로 만들어 주는 거라고 들었다.


    http://www.pythonware.com/library/pil/handbook/image.htm

    그래서 이렇게 썼다.

    self.wxImg = Image.fromstring(“L”, (f.getData().shape[1],f.getData().shape[2]), t.tostring()).convert(‘RGB’).tostring()

    근데

    self.wxBmp2 = self.wxImg.ConvertToBitmap()

    이렇게 썼더니 “str은 ConvertToBitmap같은거 모른다”는 에러를 내뱉는다.

    뭐여…-_-

    PIL문서에서 구라친겨?

    삽질좀 끝내자…제발…

  • 윈도우즈는 불편하다

    아…

    불편하다.

    귀찮고.

  • TIARRA

    TIARRA : Thomson parabola Image Analyzer for Radiation Research and Application

    현재 개발중인 프로그램이다. Thomson Parabola Spectrometer의 결과 데이터를 분석하기 위한 툴. Python+wxPython+PIL+pylab+numpy를 이용한다. 필요한 모든것이 이미 다 만들어져 있는건 좋은데, 아직 배운지 얼마 안되다 보니 계속해서 문서를 찾느라 시간이 간다.

    로고에 숫자가 막 써 있는건 곡선 눈금자를 테스트 해본 것이다. 실제 데이터가 저 눈금자를 따라서 움직인다. 우측의 그래프는 곡선 눈금자를 따라서 RGB값을 그래프로 그린 것이다. 물론 실제 데이터의 밝기 정보를 그래프로 그려준다.

    이제 다음 단계는 1. 저 눈금자를 이온 종류에 따라 여러개 생기도록 하는 것 2. 해상도 교정 3. 영상 회전 보정 4. 아이콘 툴바 사용 5. 사용설명서 제작이다. 써놓고 보니 많네…

  • 비트맵에 그림 그려서 출력하기.

    비트맵 파일을 불러온 후, 그 위에 그림을 그리고, 그 결과를 화면에 출력해야 한다. 이때 사용하는 것이 wx.MemoryDC이다. DC는 Device Context인데, 그림을 그릴 수 있는 화면이라고 생각하면 된다. 그중 MemoryDC는 흐린 기억속의 그대처럼 임시로 선언해서 잠깐 쓰고 버릴 수 있는 객체이다.

    #일단 하나 만들자.

    self.mydc = wx.MemoryDC()

    #밑그림으로 사용할 파일을 하나 마련한다.

    self.wxBmp = wx.Bitmap(datafilename, wx.BITMAP_TYPE_ANY)

    #그 밑그림을 MemoryDC에 집어넣는다.

    self.mydc.SelectObject(self.wxBmp)

    #MemoryDC에서 이제 원하는대로 그림을 그린다.

    self.mydc.DrawLine(1,1,100,100) #그림 그리는 메소드는 많으니 알아서 찾아보도록 한다.

    #방금 쓰던 MemoryDC에 wx.NullBitmap을 연결하면 원래 있던 녀석은 그림이 그려진 채 버려지게 된다.

    self.mydc.SelectObject(wx.NullBitmap)

    #이제, 조작이 완료된 self.wxBmp를 가져다 쓰면 된다.


    http://www.python-forum.org/pythonforum/viewtopic.php?f=2&t=10224



    http://wiki.wxpython.org/WorkingWithImages



    http://www.wxpython.org/docs/api/wx.MemoryDC-class.html

    이 방법을 찾느라 한 2주 걸린듯…

  • 파이썬의 어려움

    난데없이 1주일만에 파이썬 공부해서 GUI 프로그래밍을 해야 하니 참으로 어려운 일이다. C나 VB와 비교할 때, type이 실행시에 지정되니 편한 사람도 있겠지만 이것때문에 계속해서 헷갈리고 있다.

    파이썬의 클래스는 말만 클래스지 완전한 클래스가 아니다. 심지어, 클래스 내부에서 참조할 때에도 항상 self를 붙여야 하고, 클래스 내부의 메소드를 정의할 때 항상 self를 인자로 넘겨받아야만 한다. 다시말해서, 메소드를 호출 할 때, 클래스 내부에서 사용하는데도 불구하고 self.methodName(a, b)라는 형식으로 self를 참조해야만 한다.



    [각주:

    1

    ]



    VB는 써도 되지만, 안써도! 된다.

    그리고.

    myBmp = wx.Bitmap.LoadFile(filename, filetype)

    이런식으로 불러올 수 없다. 당연하다면 당연한건데, 쓰다보면 불편하다. 선언도 없는데…

    myBmp = wx.EmptyBitmap(1,1)

    myBmp.LoadFile(filename, filetype)

    이런식으로 가짜로 선언(?)한 후에 사용해야 한다.

    1. self는 VB에서의 me, C++에서의 this처럼 자기가 소속된 클래스를 가리키는 이름이다.

      [본문으로]

  • Pidgin 2.8.0


    http://sourceforge.net/projects/pidgin/files/Pidgin/2.8.0/pidgin-2.8.0.exe/download

    공식 홈페이지에서 로드맵은 2.8.0이 완성 된걸로 나오는데 다운로드 링크가 변경되지 않아서 계속 헤메고 있었다.

    소스포지로 직접 찾아들어갔더니 되더라.

  • MFC, VB.net, wxPython

    윈도우즈용 GUI프로그램을 만드는 난이도는 MFC가 가장 어렵고, VB.net이 가장 쉽다. wxPython은 그 사이에 있다.

    (주관적 평가임.)

    VB.net은 그림 그리고 클릭해서 그 부분이 처리할 코드를 쓰면 된다.

    wxPython은 그림을 코딩하고 그 부분이 처리할 코드를 쓰면 된다.

    MFC는 그림을 코딩하고 그 부분이 처리할 코드를 쓰면 되는데, C/C++로 써야 한다.

    VB.net이 과학기술계산용으로 강력한 라이브러리를 갖고 있었으면 좋았겠지만, GSL이나 numpy같은 것들이 VB용으로 나오질 않았다. (.net Fx 위에서 돌아가는 것 자체가 이미 계산용으로서는 성능이 나오지 않는다는 거지만.)

    그래서 요새는 wxPython을 쓰는 중. 리눅스에서도 그냥 돌아가니까 더 맘에 든다.

    MFC랑 VB.net은 그냥 돌아가지 않으므로 곤란하다. (리눅스에서 내가 지금 만드는 프로그램을 돌릴 일은 없겠지만)

  • 함수의 중첩 정의

    C언어에서는 함수를 중첩 정의하는 것을 허용하지 않는다.

    예를들어, C언어에서 다음과 같은 함수를 생각해 보자.

    #include

    int test(int a){

    printf(“a “);

    int nested_test(int b){

    printf(“nested”);

    return 1;

    }

    return nested_test(1);

    }

    int main(){

    test(0);

    return 1;

    }

    test함수 안에 nested_test함수가 또 정의되어 있다. C언어 표준에서는 이런 함수 정의를 허용하지 않는다. 그러나 GCC의 C컴파일러에서는 허용한다. 위의 프로그램을 실행시키면 a와 nested가 둘 다 나타난다.


    def test(a,b):

    print(a)

    print(b)

    def test1(a,b):

    print(a+b)

    test1(a,b)

    test(1,2)

    test1(1,2) # ERROR!!

    파이썬에서도 같은 일이 가능하다. 파이썬에서는 중첩 정의를 원래부터 허용한다. 물론, test함수의 바깥쪽에서 test1을 불러오려고 하면 오류가 발생한다. 밖에서는 test1이 안 보이기 때문이다. (Scope 문제)

    C언어에 GCC를 사용하는 경우에, 함수포인터를 연결해서 함수 내부에 중첩 정의된 함수를 불러오는 것이 가능은 하다. 단, 가능하다고 해서 해도 된다는 뜻은 아니다. 함수는 호출되는 순간에 연결되었다가 끝나는 순간 모든 작동을 정지하므로 만약 중첩 정의된 함수가 함수의 외부에서 호출되었을 때 모든 일을 마무리짓기 전에 바깥쪽의 함수가 끝나버린다면, 일이 마무리되기 전에 종료되어 오류를 발생시킬 것이다. (안해봤음…)


    http://langdev.org/posts/38



    http://sparrow.borlandforum.com/board/boardview.asp?table_name=tip&sel=&findit=&srch=&gotopage=7&block=0&board_idx=115&path=N&vir_numm=170&vir_numm2=65



    http://discuss.joelonsoftware.com/default.asp?interview.11.431470.11



    http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html



    http://en.wikipedia.org/wiki/Nested_function

  • 파이썬 어렵게 배우기


    http://learnpythonthehardway.org/

    파이썬 언어를 어렵게(?) 배울 수 있는 책이라고 한다. 공짜다.

    온라인 강의는 유료.