내가만든/라인들2017. 8. 13. 22:34

C# WPF로 만든 파일 복사 툴

WpfApplication1.zip


WpfApplication1 (2).zip

 

Release.zip


Posted by 비엔나햄
내가만든/연습장2017. 6. 26. 22:08

1. 캡슐화 - 접근 제어를 통해 숨기고 싶은 데이터에 대해 정보 은닉 하는 것.

2. 상속 - 코드를 물려주거나 물려받아, 재사용 하는 것.

3. 다형성 - 다양한 형태로 기능을 구현하는것. 오버라이딩과 오버로딩등으로 동적 바인딩을 한다.

4. 추상화 - 객체들의 공통적인 특징을 뽑아 멤버로 만드는 과정.

Posted by 비엔나햄
내가만든/라인들2016. 11. 27. 15:24

 

C++의 가변인자 템플릿을 이용한 문자열 생성 클래스

Write메서드의 인자로 원하는 값을 넣어주면 계속해서 append 된다.

 

단, char형에 대한 제약이 좀 필요 하다.

Write('a'); 라고 호출했을 경우,

a는 아스키 코드의 97로 인식이 되고 이것을 97이라는 "숫자"로 입력을 할 것인가,

혹은 아스키코드 97이 가리키는 값인 문자 'a'로 입력을 할 것인가 의 선택을 결정 해야 한다.

 

현재는 unsigned char형 일때에만 "숫자"로 입력을 하고 있는데,

내 생각에 가장 좋은 규약은 문자를 표현하고자 할때에는 전부 "문자열"로 입력을 하는 것이다.

 

어중간하게 Byte(unsigned char)같은 형을 통해 정수를 전달하는 행위를 없애고,

숫자는 -> 숫자 / 문자는 > 문자열 로 입력하는 약속을 정해서 사용하면 문제가 없을 것 같다.

 

그리고 이 클래스는 내부에서 재귀호출을 수행하므로 속도는 다소 떨어질 수 있다.

하지만 스트링 포맷을 맞추지 않아도 되기 때문에 대단히 편리하게 사용 될 것이다.

 

AutoString.h

 

'내가만든 > 라인들' 카테고리의 다른 글

파일 복사툴  (0) 2017.08.13
[피보나치] 피보나치 DP방식 코드  (0) 2016.10.30
메신저 서버  (0) 2016.07.22
[Float Compare] 실수형 데이터 비교  (0) 2016.06.30
[가중치 랜덤] h파일과 사용 예제  (0) 2016.06.30
Posted by 비엔나햄
내가만든/라인들2016. 10. 30. 14:58

C++ 사용, 스마트 포인터 및 STL Map 컨테이너 사용.

재귀호출을 이용한 피보나치 수열의 n번째 값을 리턴 하는 함수이다.

STL Map 컨테이너를 사용하여 결과 값을 저장하고 중복된 계산을 하지 않는 동적 계획 방식을 사용하여 속도를 줄였다.

 

// n은 얻고자 하는 인덱스, pDpMapPtr은 Map의 포인터로써 입력 하지 않아도됨

int Fibo( int n, std::shared_ptr<std::map<int, int>> *pDpMapPtr = nullptr )
{
 if( 1 >= n )
  return 0;

 std::shared_ptr<std::map<int, int>> stSharedPtr;
 if( nullptr == pDpMapPtr )
 {
  auto map = new std::map<int, int>();
  map->emplace( std::map<int, int>::value_type(2, 1) );
  stSharedPtr.reset( map );
  pDpMapPtr = &stSharedPtr;
 }
 else
  stSharedPtr = *pDpMapPtr;

 auto map = stSharedPtr->find(n);
 if( stSharedPtr->end() == map )
 {
  map = stSharedPtr->emplace( std::move( std::map<int, int>::value_type( n, Fibo( n - 2, &stSharedPtr ) + Fibo( n - 1, &stSharedPtr ) ) ) ).first;
 }
 return map->second;
}

 

void main()

{

cout << Fibo(10) << endl;

}

 

일반 적인 재귀 호출과 비교 했을때, 수십배 빠른성능을 보인다.

N이 커질 수록 갭은 더 커진다.

함수 호출 전에 위의 공유 포인터를 먼저 만들고 사용하면, 위 함수를 여러번 호출하는 경우( ex) Fibo(5); Fibo(4); 이런식으로 반복호출 될 경우 ) 더 빠른 성능을 보여준다.

'내가만든 > 라인들' 카테고리의 다른 글

파일 복사툴  (0) 2017.08.13
[AutoString] 헤더 파일과 사용시 주의점  (0) 2016.11.27
메신저 서버  (0) 2016.07.22
[Float Compare] 실수형 데이터 비교  (0) 2016.06.30
[가중치 랜덤] h파일과 사용 예제  (0) 2016.06.30
Posted by 비엔나햄
내가만든/라인들2016. 7. 22. 18:14

ChatServer.zip

C#

채팅서버를 생각 하며 만들었지만..

유저가 접속하고, 방을 개설하고 채팅을 할 수 있는 구조라는게 요즘의 메신저와 비슷 하다는 생각을 하며 프로젝트 방향 수정!

C#을 이요하기 때문에 제공 되는 라이브러리가 많고, .Net FramWork의 API들을 사용할 수 있어서 좋다. 하지만, 확실히 알고 써야지 안그러면 찾을 수도 없는 오류가 발생하더라...ㅠ

( ex) 소켓을 안닫은 채로 봇을 무작위로 붙이다보면 소켓 capacity가 넘어서 오류가 나는데 그냥 Memory accsess Violation 이라는 예외 처리가 발생함.. 찾기 어려웠음)

 

서버 - 클라이언트를 구현 중이고, 이 부분이 완료 되면 REDIS를 이용해 대화 내용들을 전체를 유저(클라이언트)에게 전달 할 수 있도록 구조를 계획 중이다.

 

#2

리팩토링중...

ChatServer.zip

 

Posted by 비엔나햄
내가만든/라인들2016. 6. 30. 11:29

bool FloatCompare(float a, float b)
 {
  return fabsf(a - b) < FLT_EPSILON;
 }

 

실수형 타입 변수는 소수점 아래 값에 오차가 있기 때문에, 별도의 대/소/등호 검사 로직을 사용 해야 한다.

개념은 두 실수 값의 차가 FLT_EPSPILON 보다 작으면 같다. 이다.

ex) 1.001 - 1.0009 < 0.002 같은 형태로 사용 된다.

'내가만든 > 라인들' 카테고리의 다른 글

[피보나치] 피보나치 DP방식 코드  (0) 2016.10.30
메신저 서버  (0) 2016.07.22
[가중치 랜덤] h파일과 사용 예제  (0) 2016.06.30
[로또 번호추출] 로또 번호  (1) 2016.04.03
[이미지 비교] 실행파일  (0) 2016.03.27
Posted by 비엔나햄
내가만든/라인들2016. 6. 30. 11:15

가중치_랜덤.zip

 

가중치에 따라 랜덤한 값이 나옴

퍼포먼스를 위하여 std::map 컨테이너를 사용 하였고, lower_bound() 를 통해 가중치로 리턴되는 값들을 얻어 올 수 있다.

단점은 가중치의 값이 추가는 되지만, 중간에 삭제는 할 수가 없다.(초기화 후에 다시 할당해서 써야한다.)

 

메르센 트위스터를 이용하여 랜덤값을 사용하였고, float을 기반으로한 실수형 가중치가 가능하며, 정수형은 특성으로 인해 맨앞의 [0]은 사용하지 않도록 예외 처리 되어 있다.

'내가만든 > 라인들' 카테고리의 다른 글

메신저 서버  (0) 2016.07.22
[Float Compare] 실수형 데이터 비교  (0) 2016.06.30
[로또 번호추출] 로또 번호  (1) 2016.04.03
[이미지 비교] 실행파일  (0) 2016.03.27
[자바] 이미지 불러오기  (1) 2016.03.11
Posted by 비엔나햄
내가만든/라인들2016. 4. 3. 17:15

로또 번호 추출기

C# 으로 제작

 

로또 추출기는 만들기 쉽다.

하지만, 일반 적인 녀석들과는 다르다. 그 차이점은 바로,

1회부터~ 696회차 까지의 당첨번호를 읽어온 뒤, 각각의 횟수를 가중치로 두어 난수를 발생 시키기 때문에 "여태까지 많이 나왔던 번호의 출현 확률이 좀더 크다."

 

이걸로 로또 대박에 도전해 봐야겠다.

 

 

로또.zip

실행파일 제공합니다:)

※주의 여기서 나온 번호로 구매해서 성공하면 본인것, 실패해도 본인것

 

+)

모바일로 제작!!!(안드로이드)

위 사진에 보이는 아이콘 클릭! 하면

위와 같은 화면이 나오는데, "대박!" 버튼을 누르면~

쨔잔~! 스레드를 이용해서 0.8~1초마다 Swap되면서 섞이는 듯한 애니메이션 처리함.

이거 구현하느라 좀 애먹었는데, 안드로이드 UI는 오직 "메인 스레드"에서만 UI표시를

변경할 수 있다... 이걸 몰라서 좀많이 헤맸고, 해결법을 찾아서 스레드에서는 UI값만 변경, 메인 스레드가 화면을 refresh 해주도록 해서 해결 했다(ㅠㅠ)

이 앱은 보통 로또 추출기와는 달리, 나눔로또에 올라온 xls 파일을 읽어 들여 여태까지 전체 당첨 되었던 데이터를 받아온다.

이를 기반으로 가장 많이 나왔던 번호 or 가장적게 나왔던 번호에 가중치를 주어 추첨할 수 있게 했다(나름 머신러닝..)

 

마지막으로 함께 만들어준 사람을 위해 Credit 페이지도 꾸며봤다.

디자이너가 UI를 잡아주니까 훨씬 보기 좋아져서 긍정적인 경험 이었다:)

 

 

이 앱으로 부자가 되었으면 좋겠다.

Lotto.zip

 

'내가만든 > 라인들' 카테고리의 다른 글

[Float Compare] 실수형 데이터 비교  (0) 2016.06.30
[가중치 랜덤] h파일과 사용 예제  (0) 2016.06.30
[이미지 비교] 실행파일  (0) 2016.03.27
[자바] 이미지 불러오기  (1) 2016.03.11
파일분할_파일  (0) 2016.03.02
Posted by 비엔나햄
내가만든/라인들2016. 3. 27. 20:24

이미지를 비교 하는 프로그램

 

비교하고자 하는 이미지 파일 2개를 선택 한 뒤 Exe Cmp클릭

 

위 그림과 같이 다른 영역은 빨간색으로 표시해준다.

감도를 설정하여 더 ㅂ미세하게, 혹은 조금 여유롭게 비교해준다.

 

이거 틀린그림 찾기 할때 유용하게 쓰일것이다(하하)

소스코드는 SVN에 커밋! 실행파일만 제공합니다:)

ImageCompare.exe

 

'내가만든 > 라인들' 카테고리의 다른 글

[가중치 랜덤] h파일과 사용 예제  (0) 2016.06.30
[로또 번호추출] 로또 번호  (1) 2016.04.03
[자바] 이미지 불러오기  (1) 2016.03.11
파일분할_파일  (0) 2016.03.02
스케쥴링_파일  (0) 2016.03.02
Posted by 비엔나햄
내가만든/라인들2016. 3. 11. 21:36
[Swing] 이미지 파일을 읽어와서 프레임에 보여주는 방법.

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class LoadImageApp extends Component {  
    //버퍼를 활용한 이미지 클래스
BufferedImage img;
 
    public void paint(Graphics g) {
        g.drawImage(img, 0, 0, null); //그림을 그리는 메소드
    }
    //디폴트 생성자
    public LoadImageApp() {
       try {
      String filename=".\\raw\\taehee1.png"; // 파일의 경로
           img = ImageIO.read(new File(filename)); //이미지 파일을 불러오는 IO 메소드
            //파일경로의 이미지 파일을 읽는다.
       } catch (IOException e) {
      e.printStackTrace();
       }
    }

    public Dimension getPreferredSize() {
        if (img == null) {
             return new Dimension(100,100); //그림 파일이 없을 경우 프레임의 크기를 100,100으로 만든다
        } else {
           return new Dimension(img.getWidth(null), img.getHeight(null)); //그림의 크기에 따라 화면의 크기를 변경한다.
       }
    }
    public static void main(String[] args) {

        JFrame f = new JFrame("Load Image Sample");
           
        f.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });

        f.add(new LoadImageApp());
        f.pack();
        f.setVisible(true);
    }
}

 

'내가만든 > 라인들' 카테고리의 다른 글

[로또 번호추출] 로또 번호  (1) 2016.04.03
[이미지 비교] 실행파일  (0) 2016.03.27
파일분할_파일  (0) 2016.03.02
스케쥴링_파일  (0) 2016.03.02
[로그분할기] 텍스트 용량별 분할기  (0) 2016.02.28
Posted by 비엔나햄