드뎌 담주 월요일이면 모든 서류를 제출하고 확대개발 사업건을 마무리 짓는다.
한달간 존나게 힘들었지만 얻은건 소중한 나의 자산이자 경험이 되는 경력 이다.
처음 일을 시작할때만 해도 앞이 깜깜하고 못할것 같았지만 소중한 이 시간들이 나에게는 더더욱 뜻깊은 자리가 되었다.
앞으로 남은 새해 마무리 잘해서 내년부터는 새롭게 시작하자.
이제 학교도 졸업이니 말이다.


이깟 자격증 딸랑 하나~
ㅡㅡ;
db와 연동하는 방법은 두가지 있다.
하나는 odbc를 이용한 방법과 다른 하나는 oledb를 이용하는 방법인데 오늘시간에 연설할 내용은
두번째 방법이다.
oledb로 연결하기위해서는 mysql 홈페이지를 접속하여 connect 드라이버를 받아야 한다.
그리고 아래와 같이 네임스페이스를 추가한다.
Imports MySql.Data.MySqlClient 'oledb를 이용하기 위한 네임스페이스 추가.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '================================================
        ' 데이터베이스 연결 
        '================================================
        If Not conn Is Nothing Then conn.Close()
        Dim connStr As String
        connStr = String.Format("server=localhost;user id=아이디; password=비번; database=데이터베이스명; pooling=false")
        Try
            conn = New MySqlConnection(connStr)
            conn.Open()
            TextBox1.Text = "데이터베이스 연결성공"
            GetDatabases()
        Catch ex As MySqlException
            MessageBox.Show("Error connecting to the server: " + ex.Message)
            TextBox1.Text = "데이터베이스 연결실패"
        End Try
    End Sub

    Private Sub GetDatabases()
        Dim reader As MySqlDataReader
        reader = Nothing
        Dim sql As String = "SELECT name From test;"
        Dim cmd As New MySqlCommand(sql, conn)
        Try
            reader = cmd.ExecuteReader()
            'databaseList.Items.Clear()

            While (reader.Read())
                'databaseList.Items.Add(reader.GetString(0))
                MsgBox(reader.GetString(0))
            End While
        Catch ex As MySqlException
            MessageBox.Show("Failed to populate database list: " + ex.Message)
        Finally
            If Not reader Is Nothing Then reader.Close()
            MsgBox("데이터가 없습니다.")
            conn.Close()
        End Try

    End Sub

이소스는 사실 mysql에서 제공되는 소스이다. 천천히 보면 누구나 따라할 수 있다. 연결하는 부분부터 연결끊는부분까지 자세하게 소스가 정의되어 있기 때문이다.
이소스를 조금 응용하면 테이블 추가및 삭제 수정 조회 기능을 구현할 수 있다. 

간만에 프로그램을 만들다
제작언어 : vb.net 2008


로그인 화면이다.



메인화면

대학생이라면 듣고싶은 과목 인원이 차면 듣지 못하여서 별에별 짓을 다하는데 심심해서 post 데이터 분석해서 vb로 만들어 보았다. 이제까지 테스트 해보았는데 아주 잘 된다.


간만에 자바를 이용하여 프로그래밍 공부를 하였다. 후배의 부탁으로 jsp와 서블릿으로 자바를 처음 접하고나서 처음으로 제대로 공부해 보기 위해 책도 구입해서 열공하면서 오늘 코딩한 내용을 붙여넣기 해 본다.
내가 생각해도 오늘은 너무 무리하게 진도를 나간것 같다. 확실히 C언어를 먼저 선행학습해서 그런지 함수사용방법이나 함수선언, 문법 등은 기본가락이 있어서 그냥 넘어갔다. 또한 C++, C#, VB.NET으로 여러 프로젝트를 진행했던지라 그닥 객체지향 쪽도 어렵지 않게 수행할 수 있었다. 오늘 사실 책 전체를 다 봤다. 낼은 시간이 남으면 JFrame 쪽을 공부해야 겠다. 사실 JFrame을 해야 진짜 윈도우프로그램 다운걸 만들지 이런 콘솔은 통신외에는 써먹을때도 없다. 기본로직은 모든 언어와 마찬가지로 비슷하기 때문에 문법만 조금 틀어지기 때문이다. 사실 통신도 C언어나 C++ 만들어서 사용을 마니 하기 때문에 통신부분도 그닥 마음에 들진 않지만 그래도 자바를 공부하고 준비된 모습으로 어디를 가든 자신이 붙을려면 해야 한다고 생각해서 이렇게 작성하고 또 만들어 봐야 겠다. 여러가지 예외사항이나 변수들이 많을꺼라 생각하지만 책에 있는것을 치는것인데 설마 어려울까...

public class IfLeapYear {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  for(int year=1998;year<2006;year++){
   boolean yearTF = false;
   if((0==(year%4)&&0!=(year%100))||0==year%400){
    yearTF = true;
   }else{
    yearTF = false;
   }
   
   if(yearTF){
    System.out.println(year+"는 윤년입니다.");
   }else{
    System.out.println(year+"는 윤년이 아닙니다.");
   }
  }//for

 }

}

import javax.swing.*;
import java.awt.*;
public class Hello4Applet extends JApplet{
 private static final long serialVersionUID=122454214237L;
 public void init(){
  
 }
 public void start(){
  
 }
 public void paint(Graphics g){
  super.paint(g); // 습관적으로 쓰자
  g.drawString("안녕하세요", 50, 50);
 }
}


public class FiveOperation {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int ia=20;
  int ib=67;
  
  double da=69.67;
  double db=34;
  int iResultA=ia+ib;
  int iResultB=ia-ib;
  int iResultC=ia*ib;
  int iResultD=ia/ib;
  int iResultE=ia%ib;
  
  System.out.println("1:"+iResultA);
  System.out.println("2:"+iResultB);
  System.out.println("3:"+iResultC);
  System.out.println("4:"+iResultD);
  System.out.println("5:"+iResultE);
  
  double dResultA=da/db;
  double dResultB=da%db;
  double dc=(da-db*((int)(da/db)));
  System.out.println("6:"+dResultA);
  System.out.println("7:"+dResultB);
  System.out.println("8:"+dc);
  
  int even=4%2;
  int odd=5%2;
  System.out.println("9:"+even);
  System.out.println("9:"+odd);
  
 }

}

import java.util.*;
public class PrintTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int a=20;
  long b=30000L;
  float c=34.98F;
  double d=234.234;
  char e='k';
  Calendar today=Calendar.getInstance();
  System.out.println("1:"+a+""+b+""+c+""+d+""+e);
  System.out.printf("2: \\ %% %d %d %f %f %c %n", a,b,c,d,e);
  System.out.printf("today %1$tm %1te, %1$tY %n", today);
 }

}

간만에 툴 설명이다~ 뭐 한글은 한국에서 한글작업을 위한 대표적인 툴이지 않는가 ㅎㅎ
일단 처음에 설치하고 나서 조금 로딩이 있어 아 왜이렇게 오래 걸리지 하면서 짜증이 났지만 처음설치때만 그렇지 2007보다는 상당히 빨리 실행되는것같아 시작은 만족하다.


위 그림은 한글 2010을 처음 킨 화면이다. 오피스2007을 사용해본 사용자들은 왠지 오피스 필이 난다는 사실을 한눈에 볼 수 있다. 뭐 큼지막 해서 좋긴 하다 ㅎㅎ


표를 만든 화면이다. 한글2007까지만해도 이렇게 자동으로 표를 꾸며주는 기능이 존재하지 않아서 굉장히 불편한 감이 없지 않았지만 이번에 새롭게 추가되어~ 정말 좋다~~ 비록 잘 쓰진 않지만 말이다.

또 무슨 기능들이 있을까 해서 찾아보니 그림효과 기능들이 좋아진것 같다~


다음과 같이 생그림도 위와같이 편집하면 클릭 몇방으로 프로같이 반사기능, 네온, 옅은 테두리 같은 액자 기능도 만들수 있고, 스타일도 쉽게 줄수가 있다. 정말 좋다~ ㅎㅎ 훈훈하다. 이렇게 한글이 좋아지니 기존에도 한글로 거의 문서편집 작업을 했으나 더욱더 보강되서 완전 더 쓰게 되겠구나 라는 생각이 든다.

또 다른 기능을 보자면 우측에 보면 자르기 기능인데 이 기능은 정말 오피스에서 가지고 오고 싶었다. 자르기 기능이 없어서 워드가서 작업할때도 많이 있었는데 이제 그런 수작업을 할 필요가 없으니 한결 수월해 질 것 같다.

정말 유용한 기능들이 많지 않은가? ㅎㅎ 어떤것들이 있는지 또 찾아보자. 오 노~~ 블러그 관리도 이제 한글에서 척척 할수 있겠군.


정말 득이 되는 기능들이 많이 추가 되었다. 마지막으로 한가지 더 봐보면 편집 화면나누기 기능이다. 책을 만드는 작업을 할 때 유용할 것 같다.



학교에서 한글을 이용하여 책을 만들던 시절에 이런 기능들이 있었으면 좀더 빠르게 생산할 수 있었것만...
아 정말 좋다.

끝으로 이번에 나온 한글은 정말 정품을 사용할것을 권하고 싶다. 기능면이나 편리성이나 인터페이스 부분까지 모두 만족스럽다. 기가막힌 버전이 나온것 같아서 너무 기분이 좋다.

학기초에 MFC를 공부하기 위해서 구입한 도서 인데
책 두께로 보거나 프리텍에 명성의 걸맞은 걸주간 책이 나왔다고 생각하고 그당시 학생신분에서는 꽤 큰돈으로 구입했었다.
학기초에는 시간도 나고 해서 공부를 첨에만 조금 했다가 최근들어 소켓통신 공부좀 해볼려고 책을 펼쳐서
뒷장으로 넘어가서 보는데 이건모 어다르고 아 다르다고, 원래 책을 보면서 코딩을 하면 쭈~~욱 쳐 내려가면서 이해하고 칠수 있을정도로 책을 지필해야 하는데 이건모 완전 순서도 엉켜져 있고, 초보들이 따라치다가는 날샐꺼 같다. 비록 본인은 MFC를 조금 해봐서 이리저리 앞뒤로 책을 넘겨보면서 쳐서 완성은 했지만 그래도 이건 아니다 쉽다.
책의 순서가 이렇게 엉켜 있음 어떻게 독자가 보란 말인가?
반성해 하자.

문제의 발단은 위에서 굵게 선언된 맴버함수를 사용하기 위해서 부터다. 책을 쭈욱 치고 갔지만 위에서와 같이 인텔리전스가 나오질 않아서 당황했다. 뒷장을 계속 찾아보아서 아래와 같은 코드를 찾을수 있었다. CClientSocket 클래스에서 맴버함수를 만들어 넣지도 않고 위에 코드가 먼저 설명이 나온것이다.

아 정말 어이없다. 이것때문에 시간 낭비하는 사람들을 위해서 구글링했을때 쉽게 찾을수 있도록 기록으로 남겨 둔다.

PEAR() 레퍼런스는 디자인 + 코딩 부분을 구별하여 제작할 수 있어서 좋다.
허나 블럭을 잘 알아야 한다.

아래 소스를 보자. 다음 멤버 테이블에 카드 부분을 피어로 뿌리는 소스이다.

$sql = "SELECT * FROM MEMBER ";

$res = $db->query($sql);
if (PEAR::isError($db)) {
die($db->getMessage());
}


while ($res->fetchInto($row)) {
if (!$tpl->setCurrentBlock("row")) Error("setCurrentBlock"); // 블럭 시작 부분이다.
$tpl->setVariable("CARD"      , $CARD);

$tpl->parseCurrentBlock("row");                                    // 블럭 끝 부분이다.
if (!$tpl->parse("row")) Error("parseCurrentBlock");         // 블럭의 에러를 검출하는 부분
}

   $tpl->show(); // 블럭한 부분을 화면에 보여준다.

다음은 디자인 부분을 보자
<html>
<link href="../css/global.css" rel="stylesheet" type="text/css">

<table width="720" cellpadding="5" cellspacing="1" bgcolor="cccccc">
  <!-- BEGIN row --> // 블럭 시작 부분
  <tr>
    <td width="80" align="center" bgcolor="ffffff"> {CARD}</td>

  </tr>
  <!-- END row -->  // 블럭 끝 부분
</table>
</html> 

거두 절미 하게 필요한 부분만 남기고 지워버렸다. 위에서 보는것과 같이 블럭 시작 부분에서는 row라는 변수로 파싱을 하기 위해 소스에 진하게 칠한 부분과 이름을 동일하게 해야 값이 올바르게 출력되는것을 알 수 있다.
이제까지 피어 프로그래밍에 대해서 공부해 보았다. 사실 PHP는 겉 핧기 식으로 공부했기 때문에 완벽하게 잘하진 못한다. 하지만 배우면 배울수록 재밌는것 같다.
물론 웹에서 가장 중요한 것은 프로그래밍 기술도 필요하지만 정규화된 데이터베이스 설계와 해당 데이터베이스 테이블에 값을 얼마나 효율적으로 보여주느냐에 따라서 실력 차이가 나는것 같다.
공부를 하면서 느끼는 것이지만 역시 학교다니던 시절 자료구조, 알고리즘 파트가 얼마나 중요한 과목인지 다시한번 생각하게 만드는 계기가 된 것 같다. 







'웹 프로그래밍 > PHP' 카테고리의 다른 글

소켓통신  (0) 2011.12.14
특정 태크 제거 소스.  (0) 2011.12.14

+ Recent posts