본문 바로가기

분류 전체보기

(25)
c#을 이용한 TCP/IP 서버-클라이언트 소켓(Socket)통신 2개의 컴퓨터에서 데이터를 주고받을때 가장 자주 사용되는 방식이 소켓을 이용한 방식이다. C#에서는 다른 플랫폼과 마찬가지로 소켓을 사용하기 위한 간편한 라이브러리를 제공한다. 우리는 서버쪽 s_socket과 클라이언트쪽 c_socket을 만들 것이다. 서버는 계속 켜져있는 컴퓨터라고 생각하면 쉽다. 계속 켜져있는 채로 클라이언트 PC의 접속을 대기(Listen)한다. 클라이언트는 항상 켜져있을 필요는 없다. 필요할 때 서버쪽으로 Connect신호를 보내면, 서버쪽에서 이를 받아들이고 클라이언트와의 연결을 성립시킨다.(Accept) 연결이 성립되었다면 우리는 본격적으로 데이터를 주고 받을 수 있다. 먼저, 서버쪽 소켓의 Start() 와 Close()를 만들어보자. Start()는 Server 메인소켓을..
WPF ItemsControl을 이용해서 UIelement를 반복해서 표현하는 방법(xaml에서 for문, foreach문을 대신해서 사용할 수 있는 방법) WPF는 xaml, xaml.cs, viewmodel로 나누어서 프로그램을 만든다. viewmodel이나 xaml.cs(비하인드 코드) 에서는 for문이나 while문, foreach문 같은 반복문을 손 쉽게 사용할 수 있다. 하지만, xaml에서 직접적으로 반복문을 사용하는 방법은 없는데 똑같은 이미지를 반복해서 넣는다거나 똑같은 버튼, 텍스트박스를 반복해서 넣는 경우, 또는 각 element마다 들어가는 Content가 조금씩 다르다거나 Grid.Row 나 width같은 속성들이 규칙적으로 바뀌어서 여러개가 들어가야 하는 경우, xaml에서 for문이나 while문 같은 것들이 사용되면 좋겠다고 생각하게 되는 경우가 많았다. 하지만 이는 현실적으로 불가능하고, 비하인드 코드에서 for문을 써서 넣으려..
C# 바인딩 (onetime, oneway, twoway, onewaytosource) C#에서 인터페이스에 나타나는 값을 동적으로 표현할때 데이터바인딩을 사용한다. XAML의 내용이 이렇게 선언하면 TEXTBOX안에 표시되는 내용이 ViewModel이라는 뷰모델 클래스의 name이라는 요소와 연결되게 된다. 여기서 설정하는 MODE는 onetime, oneway, twoway, onewaytosource 중에 하나로 설정하는데, -onetime 만약에 현재 뷰모델의 name이라는 요소가 string타입의 "사과"라고 저장되어 있다고 하자. 만약 MODE를 onetime으로 연결 한다면, 인터페이스의 텍스트블록 안에 "사과"라는 글자가 뜨게 된다. 하지만, 이때 단 한번만 바인딩이 되고 이후로는 연결이 끊어지게 되서 뷰모델 안의 string name을 바꿔도 텍스트 박스의 값이 영향을 받지..
C# 제네릭 <generic> c# 클래스를 정의할 때, 들어가는 인자값이나 리턴값 등 클래스 내의 모든 데이터 타입을 지정한다. 하지만, 어떤 경우에는 거의 모든 내용이 같은데, 일부 데이터타입만 다른 경우가 존재한다. 예를들어, public class MyStack { int[] _elements; int pos = 0; public MyStack() { _elements = new int[100]; } public void Push(int element) { _elements[++pos] = element; } public int Pop() { return _elements[pos--]; } } class Program { static void Main(string[] args) { MyStack stack1 = new MySt..
SPRING BOOT를 이용한 나의 첫 웹페이지 제작 (8) - 회원가입 구현하기 (데이터베이스 연계) 저번 포스팅에서 회원가입을 하고 게시물을 조회하고 하는 화면을 jsp와 컨트롤러를 연계해서 만들어 보았다. 하지만, 지금까지의 상태로는 만들어진 웹 페이지가 db와 어떠한 연동도 하지 못하고 단순히 눈에 보이는 껍데기만 구현되어있는 상태인 것이다. 그러므로, 이번 포스팅에서는 껍데기에 이제 db와 연동하여 진짜로 id, pw등의 정보를 입력해서 회원가입을 진행하고 또한, 회원가입 되어있는 모든 사람의 정보를 조회하는 회원조회 창을 구현하고 id와 pw를 입력해서 해당 id의 dto에서 저장되어 있는 userPw와 입력한 pw가 같다면 db에서 삭제(회원탈퇴) 시키는 회원탈퇴 기능도 구현을 할 것이다. 사실 회원가입 만 구현하면 나머지는 비슷한 작업들의 연속이라 딱히 어려울게 없다. 그렇다면 지금부터 일단..
SPRING BOOT를 이용한 나의 첫 웹페이지 제작 (7) - 컨트롤러와 jspview 만들기 - 1 (부트스트랩 이용) 지금까지 한 것 1. 이클립스설치,JDK설치,환경변수 설정 2. 이클립스STS설치, Web software설치 3. Spring starter project (스프링 부트 프로젝트) 생성 4. JSP VIEW(jstl,jasper), DEVTOOLS,spring-boot-starter-test,junit,mybatis등 추가적으로 필요한 디펜던시 추가, 5. Mysql을 이용해서 게시판 구현에 필요한 DB생성 6. dto,dao(Mybatis의 경우 mapper)클래스를 이용해서 DB의 객체화 7. Junit과 스프링-테스트를 이용해서 정상적으로 DB에 반영되는지 테스트 8. 유저 Service와 게시판 Service 만들고 junit으로 DB에 반영되는지 테스트 까지 진행하였다. 이번 포스팅에서 진행할..
[딥러닝] 1개층을 가진 뉴럴 네트워크 경사하강법(backpropagation, backward 계산) , 역전파 단 1개의 parameter와 1개의 인풋, 1개의 아웃풋을 가진 매우 단순한 층으로 backpropagation을 계산 해 보았습니다. 참고로, x1이 2, w1이 3 , y1이 6 이라는걸 알았다는것 자체가 forwarding이라고생각하시면 되고 이것을 안다는 전재로 실제값과 y1을 MSELOSS(평균제곱오차)를 통해 오차를 구해주고 이를 바탕으로 오차와 W1의 영향 정도를 알아내서 W1을 개선해나가는 것이 backward (backpropagation)이라고 생각하시면 될 것 같습니다. 이 예시는 너무 쉬운 예시이므로 조금 더 복잡한 sigmoid 활성화 함수를 사용하는 2계층 2파라미터 역전파를 계산하고 싶으시면 다음 블로그를 참조 해 주세요. https://gomguard.tistory.com/..
딥러닝 활성화함수(Relu , Maxpool2d) class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.layer1 = torch.nn.Sequential( torch.nn.Conv2d(1, 8, kernel_size=3,stride=1,padding=1), torch.nn.ReLU(), torch.nn.MaxPool2d(2, 2) ) self.layer2 = torch.nn.Sequential( torch.nn.Conv2d(8, 16, kernel_size=3, stride=1, padding=1), torch.nn.ReLU(), torch.nn.MaxPool2d(2, 2) ) self.fc = torch.nn.Sequential( torch.nn.Linear(40000,..