U E D R , A S I H C RSS

상협/삽질일지/2002

1. 1학년 겨울방학

  • AI 오목을 짜면서, if(a=1) 과 같은 코드가 수많은 코드들 사이에 몇개 있는 바람에 무진장 고생했다. 분명히 제대로 짯는데 결과는 원치 않은 방향으로 나오는 것이었다. 정말 미쳐버릴것 같은 나날들이었다. 나중에서야 저것때문에 문제가 생겼다는 것을 알고나서 Error도 뜨지 않는 오타가 정말 무섭다는 것을 알았다.
  • AI 오목 하면서, 효율적으로 어떻게 구성할지에 대한 생각을 별로 안해서, 나중에 경우의 수가 많아지자 상당히 힘들어졌다. 그때 한번 날 잡아서 중복되어 보이는 함수들을 다 통합했다. 그 통합하는 시간이 아깝다고 생각했었는데, 한번 통합하자 효율은 극도로 높아졌다. 예전에는 몇개의 기능추가 하면 그 경로를 나름대로 축약을 했었음에도 불구하고 4가지 경로 && 공격 && 방어에 대해서 따로 시간을 내어서 코드들을 작성해야 했다. 그러나 함수들을 최대한 중복되지 않게 축약하자 한번의 기능추가가 바로 공격 && 방어 && 8가지 방향에 대해서 다 적용되는 것이었다. AI 수준 높이는데 드는 노력이 훨씬 줄어 들게 되었다. 효율적으로 프로그래밍을 해야겠다는 것을 막연히 생각하고 있었지만 이 경험으로 인해서 체감을 하게 되었다.

2. 2002.4월 말

  • JDBC와 ODBC를 연결하기 위해서 많은 삽질을 했다. ㅠㅜ 여기서 아무 생각없이 코드 똑같이 쳐서는 안되겠다는 생각을 했다. 똑같이 하라는대로 했는데 분명히 안되었다. 나중에 연결하는 원리를 알고 나서, 몇가지 좀 하니깐 삽질의 마수에서 벗어 날 수 있었다. 삽질을 해결한 순간 날아갈듯 했다.

3. 2002.5.2

  • Java 에서 강제 형변환을 C++ 스타일 int(변수), 이런식으로 하다가 수치해석 그래프를 자바로 못 그렸다. ㅠㅜ 그래서 MFC로 하다가 나중에 Java로 짜놓았던 Tridiagonal Matrix 가 MFC로 옮기면서 각종 문제가 발생... 다시 Java로 하려다가, 예전의 형 변환의 문제 발생..ㅠㅜ, 결국 MSN으로 형들에게 물어봐서 자바에서 형 변환은 (int)변수 이런식밖에 안된다는 것을 알았다. 기본에 충실하자.. ㅡㅡ;
  • 어떤 숫자들의 결과에 1/6을 곱하는 것과, 그 숫자들/6 과는 많이 차이가 있다는 것을 수치해석 숙제를 통해서 알았다. 만약 친구의 소스를 통해서 1/6 곱했던것을 숫자들/6 으로 하지 않았으면 숙제 해결 못했을 것이다. 실제로는 별로 차이 없을만한 것도 컴퓨터에서는 엄청난 차이를 불러 일으킨다는 것을 알았다.
    오.. 중요한 정보같은데. 혹시 상민쓰 자네 그래프 문제도 이것 때문이 아닐까 --석천
    y>0 일때 x+y > x 라는식이 항상 참은 아니지. 컴퓨터 세계에서는 :)) --이선우
    오옷! 왜요? -.-a --창섭
    see also Ieee754Standard

4. 2002.5.3

  • 헉헉.. 오늘은 내 컴퓨터에 pws 를 실행시키지 않고, Apache로 다시 웹서버를 바꿨다. 이유는 Java Servlet 한번 실행시켜 볼려는 의도였다. JDBC 보다가 Servlet이 나오길래 그냥 호기심에 한번 해보고 싶었다. 결과는 참담.. ㅡㅡ; 책에 나온데로 JSDK깔고, JServ 깔고 Tomcat깔고, 이것저것 설정 맞추고, 바꾸고, 지지고 볶고 하면서 아까운 시간들을 보냈다. 지금의 결과..Servlet 예제 쳐봐서 했는데 안됐다. ㅠㅜ 괜히 삽질로 하루 날렸다. 섯부른 호기심때문에 정작 할일들을 못했다. 교훈 -> 시간관리 잘하자..., 목적성을 가지고 일을 하자.

5. 2002.5.5

  • 삽질 해결.. ㅡㅡV, 내가 Apache Jserv와 Tomcat을 깔때 내가본 인스톨 가이드와 내가 실제로 부딪힌 상황들이 다른 이유는.. 버전이 달라서 였다. ㅡㅡ;;, 버전이 올라가면서 예전에는 수동으로 설정했던 것들이 자동으로 되었나 보다. 이번일 덕분에 Forte도 맛가고, JDK도 좀 이상한거 같고해서 윈도우 밀고 다시 깔았다. ㅠㅜ, 아주 기초적인거지만... 나중에도 잊지 말자.. 버전이 다르면 설치 방법도 다르다는걸.. 생각해보면 처음 깔았을때도 돌아가기는 돌아 간거 같다..ㅡㅡ; 단지 어떻게 돌아가는지 파악을 못하니 안돌아 가는것 처럼 보인거 같다..

6. 2002.6.1

  • 오늘은 엄청난 삽질의 하루다. 한것은 하나도 없는데 시간은 벌써 반나절이 지났다. ㅠㅜ 우선 내가 한 삽질 내용을 적어보고 그 이유는 나중에 찾아 봐야 겠다.
    • Driver driver = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 이거 할때 메인 함수에서 throws Exception 를 하지 않으면 thrown 을 잡거나 선언 해야만 한다는 메시지가 뜬다. 아직 이유는 모르겠다.
  • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이거는 main 함수 내부가 아닌 곳에서는 에러 뜬다. 엄청 삽질했다. ㅠㅜ 아직 이유는 모르겠다.
  • 방금 삽질 하나 해결..Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이게 메인 함수에서만 되는게 아니라 이 구문을 사용할때는 throws Exception 을 항상 해줘야만 한다는 사실.. ㅡㅡ; 그런데 이 사실을 진작 체감하고 있었다. 그런데 계속 삽질 했다. 그 이유는
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이게 사용된 바로 그 메소드에서 throws Exception 를 해줘야 하는데 계속 전체 클래스에서 이것을 했었다. 이게 문제의 원인.. 그러나 아직 왜 꼭 throws Exception 구문을 써야 하는지 모르겠고, Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");이게 없는 곳에서 throws Exception 를 쓰면 에러 뜨는 이유도 자세히는 모르겠다. 모르는것 투성.. ㅡㅡ;;
Exception Handling 에 대해서 이해해야 할 것 같은데. Exception 은 해당 함수가 throws 등으로 발생을 시키고, Java 의 경우 그 Exception 을 반드시 처리를 해주는 곳을 만들어야 하지. 해당 메소드 내에서 Exception 이 발생은 하는데, 그 메소드에서 예외처리를 바로 하고 싶지 않으면 (즉, 그 Exception을 그 메소드 내에서 처리하지 않고, 그 메소드를 호출했던 곳 등에서 처리를 한다고 한다면) throws 로 해당 메소드에서 exception 을 또 던져주는 식으로 되겠지. 만일 Class.forName(...) 쓴 구문을 try - catch 로 예외를 또 잡는다면 이야기가 다르겠지만. 자바는 Exception 를 강요하는 관계로 예외는 catch 에서 무엇을 하건, 반드시 해당 발생된 예외를 잡아줘야 함. (그 덕에 최악으로 뻗을 일이 적지. 예외는 발생하더라도) --석천

7. 2002.6.2

  • 나를 엄청나게 괴롭히던 삽질 해결.. 원인은 stmt.execute("SELECT * FROM Table1 WHERE ID = 'mID'"); 이 구문이었다. ㅠㅜ stmt.execute("SELECT * FROM Table1 WHERE ID = '"+ mID+"'"); 이렇게 해주어야 했던 것을... 잘못된 코드가 있으면 좀더 유심히 관찰해서 원인이 무엇인지 파악하는 버릇을 들여야 겠다. 너무 주먹 구구식으로 한거 같다. 어쨋든 찾아서 기쁘다.

8. 2002.6.11

  • 지금까지 자바에서 if(String1 == String2) 이게 안 먹혀서 계속 고생 했다. 알고 보니 String Class 의 CompareTo 메소드를 사용해야 했다. 허접 삽질.. ㅡㅡ;

9. 2002.6.13

  • 이번 삽질은 정말 중대한 삽질이었다. 1학기 평점을 좌우한다고 볼 수 있는 삽질이었다. 1학기 중간고사 대채용으로 내는 자바 프로젝트에서 소켓 부문을 맡은 친구가 알수 없는 에러때문에 엄청난 삽질을 해서 더이상 나아갈수 없다고 했었다. 메신저에서 통신이 안되다니.. ㅡㅡ;; 그 에러는 "No Such Method Found" 에러다. 그러한 Method가 분명히 있는데도 불구하고 안되었다. 나는 황당했다. 그 친구가 자바는 많이 안했어도 MFC랑 C++을 잘해서 소켓을 맡았는데... 나도 그 에러를 같이 찾기 위해서 삽질을 하였다. 소스도 길고 내가 짠것도 아니어서 정말 못 찾을거 같았다. 그 소스는 특성학 모든 클래스가 딱 서버, 클라이언트 두 파일 안에 들어 있었다. 그래서 난 그 클래스들을 각자 파일로 분리해 보기로 했다. 잘 안풀리니깐 한번 정리나 해보면 뭐좀 어떻게 될까 싶은 마음에 그렇게 했다. 그렇게 정리를 하다 문득.. ㅡㅡ;; 같은 이름의 클래스를 서버, 클라이언트에서 각자 다르게 정의해서 사용하는 소스를 발견... ㅡㅡ;;, 그 친구는 아직 자바에 익숙하지 않아서 이런 실수를 했나 보다.. 나도 만약 소스를 클래스별로 파일로 만들 생각을 안했으면 그 에러의 원인을 발견하지 못했을 것이다. 휴. 큰일날 뻔 했넹.. 앞으로는 "No Such Method Found"같은 에러때문에 고생할일은 절대 없기를.. ㅡㅡ;

10. 2002.6.18~ 6.20

  • 3일간 날 괴롭힌 초 대박 삽질... 운영체제를 2번 다시 깔게 하고, 리눅스 깔려는 시도까지 하게한 삽질.. 어느날 갑자기 인터넷이 안되었다...이것저것 별의 별거 다 해봤다. 랜카드 바꿔 껴보고, 드라이버 다시 깔아 보고, OS 새로 엎어 보고, 등등...ㅡㅡ;; 3일 동안 초 대박 삽질.. 그것도 시험 기간 동안에.. 오늘 기숙사 컴공 형이 옆에서 아이피 한번 바꿔 보라고 해서 바꿔 보았더니 된다. ㅡㅡ; 어떤 바보가 내 아이피를 사용했었나 보다.. ㅠㅜ

11. 2002.7.18

  • 오늘은 그렇게 큰 삽질은 아니지만 요새 별다른 삽질이 없어서 적어본다. 오늘 비행기게임 프로젝트를 하고 있는데 파일에서 적 비행기 경로를 읽어와서 실행하는거를 하는데 이상하게 계속 안되는 것이었다. 분명히 난 맞게 텍스트 파일에 적이 나올 위치를 숫자로 적었고, 정확한 명령어를 사용했는데 말이다. 그래서 계속 삽질하다가 잠깐 밖에 나갈 일이 생겼다. 그런데 걷다가 곰곰히 생각하니깐 왠지 파일읽어 온것을 프로그램에서 string 형으로 생각한거 같았다. 그때 아차 하는 생각이 들었다. 역시 삽질은 안된다고 계속 반복하기보다는 원인을 곰곰히 생각해야 한다는 교훈을 얻었다. 뭐 몸이 그렇게 안따라 주지만. ㅡㅡ;

12. 2002.7.19

  • 오늘도 어김 없이 ㅡㅡ;; 삽질을 했다. 이번에는 matrix 클래스를 구현하는데 matrix데이터를 이중 배열로 private영역에 넣어서 이것 저것 해보는데 나중에 클래스의 matrix 데이터를 호출해야할 경우가 생겼다. 44 이거 두개로 리턴할라고 했는데 안되었다. 남훈이형이랑 제본뜬 책찾아 보니깐 배열은 리턴이 안된다고 나왔다. 그래서 고민하다가 *4 이거 두개(포인터형 배열 4개짜리)를 사용하고 나중에는 *를 리턴하는 식으로 돌파구를 찾았다.(*4 이것도 배열이랑 비슷하게 써먹을수 있었다. 예-> *(matrix0+1)) 처음에는 뭔가 되는듯 싶었다. 클래스 내부 배열 설정도 제대로 되고 하였다. 그 .... 러..나.. ㅡㅡ;; 역시나 난 삽질맨이었다. 나중에 + 연산자 재정의 클래스 내에서 객체를 생성해서 리턴할때 뭔가 제대로 먹지가 않았다. 그거 가지고 간만에 ㅡㅡ;; 삽질에 바다에 퐁당 빠졌다. 간만에 해보는 삽질도 그리 유쾌한 일은 아니었다.. -_- 그렇게 계속 신나게 삽질하다가 도저히 안되겠다 싶어서 멤버 데이터를 public에 넣어 버리는 엽기적인 일을 해버렸다. ㅡㅡ; 그 방법밖에는 없는거 같았다. 그 후로는 아무런 걸림돌 없이 쭉쭉 되었다. 진작 이렇게 할걸하는 생각을 했지만 서도 멤버 데이터를 public안에 넣어서 웬지 모를 찝찝함이..
    근데.. Matrix 클래스가 있음에도불구하고 왜 Matrix 내의 array를 직접 접근할 일이 생긴건지? 그리고 연산자 재정의와 관련된 문제라면 Matrix 에 인자를 접근할 수 있는 메소드를 넣던지 friend 로 해결해야 하지 않을까 싶음 --1002
    그게 방금 떠올랐는데 Matrix의 인자 하나 하나에 접근하는 메소드는 만들 수 있겠네여.. 단지 그 모든 내용을 통째로 리턴하는 메소드는 못 만들겠어여.. 이중 배열을 리턴할수가 없어서 통째로 접근하는걸 못했어여.. - 상협
    꼭 이중 배열 전체가 return 이 되어야 하나? 넘겨받은 배열에 도로 쓰는 작업이라면, setter 를 만들어주면 될것 같아서. 클래스로 해놓은 이상 배열을 넘기지 말고 아에 클래스 인스턴스를 넘겨버리는 것이 더 나을것이라 생각 --1002

13. 2002.7.22

  • 오늘은 간만에 빡센 삽질을 했다. 오픈GL을 하는데, 여러개 반복되는 구문이 많은거 같아서 내 딴에는 함수화 시켜서 편하게 사용해야지 하고 생각하고 함수화를 했다. 그런데 그 과정에서 여기저기 실수해서 겁나게 삽질했다. 실수하고서는 한번 죽 흩어보지 않고 단지 성급하게 빨리 에러를 찾고자 하는 맘에.. 쩝.. 역시 삽질은 정신적인 스트레스를 너무 많이 준다.

14. 2002.7.23

  • 이 에러는 까먹기 전에 적어 놓아야 겠다는 생각이 들어서 여기에 적어야 겠다. 오늘 내가 만든 클래스를 인클루드 할때 난 대소문자 구분안해도 되는줄 알았는데 구분 안하니깐 링크할때 에러 떳다. 이 에러가 왜 나오는건줄 몰라서 겁나게 삽질 했었는데.. ㅡㅡ;
  • 에러 처리의 중요성을 알았다. 에러 처리를 제대로 하면 실수한 곳을 찾기 쉽고 고로 삽질을 덜할 수 있군.

15. 2002.7.30

  • 삽질 없는 세상에서 살고 싶어.. ㅠㅜ, 이번에 3D 알카로이드 하는데.. 충돌 처리가 제대로 계속 안되었다.... 근데 방금 수많은 삽질 끝에 해결했다. ㅠㅜ, 안되었던 이유는 내 머리속에서 핑핑 돌아가던 3D 좌표와 컴퓨터가 생각한(내가 예전에 만들었던 함수..) 3D 좌표가 달라서 그랬던 것이다. 이렇게 말하면 쉽지만 실제로 충돌 처리 함수는 금방 만들었는데.. 버그 찾는데 그거보다 5~6배 정도 시간이 더 든거 같다. ㅡㅡ;; 아.. 끝없는 삽질의 나라.~

16. 2002.8.24

  • 간만에 쓴다. 삽질일지.. -_-;; 그동안 너무 놀았나.. 쩝.. 이번 삽질은 내가 처음으로 환타스탁한 소켓 플밍 연습하는데, API로 작성된 WinSock 소스 가지고 send랑 recv 가지구 놀고 있는뎅... 글자가 계속 깨져 나왔당.. 미치고 환장할일.. -_-;; 정모때 남훈이형이 어떻게 해서 되기는 되었는데 이유는 몰랐다.. 그래서 희망을 안 버리고 계속 삽질 해봤는데.. send랑 recv의 타이밍이 서버와 클라이언트가 맞지 안아서 였다.. 쩝..테스트 결과 서버가 send먼저 하고 클라이언트가 recv하면 깨져 나왔당..서버가 recv하고 클라이언트가 send하면 글씨가 안깨진다..-_-;;.. 이게 규칙인가~ 쩝.~
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 13.1674 sec