Skip to content

생계형 개발자 수첩 ver4.0

이제 나이 먹어 강제로 4.0 버전업됨, 일인개발자임, 파키스탄식 코딩.. 오래된 코드도 다시 쓴다.

Category: 3.0

MySQL, Maria DB 글자 검색 수 설정

Posted on 2018년 1월 14일 by kimczip

MySQL, Maria DB에 저장된 내용을 최소 두글자로 검색하고 싶으면, 다음과 같은 셋팅이 필요하다.

우선 설정 파일을 찾아야 하는데 윈도우의 경우

MySQL => C:\ProgramData\MySQL\MySQL Server 5.6\My.ini

Maria DB => C:\Program Files\MariaDB 10.0\data\My.ini

파일을 열고

[mysqld] 항목 아래에 다음과 같이 기입한다.

ft_min_word_len=2

 

추가 >  데이터 전송량을 늘리고 싶다면, [mysqld] 항목 아래에 다음과 같이 기입한다.

패킷을 1G로 설정하고 싶다면..

max_allowed_packet=1024M

 

Maria DB의 my.ini 파일 편집화면

Posted in 3.0Tagged MariaDB, MySQL, 데이터베이스, 미세먼지팁Leave a comment

C# 병렬 ( Parallel ) 처리 패턴

Posted on 2017년 12월 5일 by kimczip

참조 문서 : MSDN Task Parallelism (Task Parallel Library)

함께 읽어보면 도움 되는 자료 링크 : http://blog.powerumc.kr/175?category=206843

 

개인적으로 멀티 작업 처리를 할 때 자주 쓰는 패턴이다.

모든 상황에 병렬처리가 꼭 좋은 성능을 발휘하는건 아니므로 상황에 따라 적절히 사용하는게 좋다.

using System.Threading.Tasks;
using System.Collections.Concurrent;


Object _lockObject = new Object();

// READ OR WRITE DATA
List<object> _testObject = new List<object>();



.....

// PATTERN
Task task = Task.Factory.StartNew(() =>
{
	int maxWorkingCount = _testObject.Count;
	int workingRangeSize = 1;
	int processedCount = 0;
        // 논리 프로세스 수량 만큼 쓰레드 생성
	if (maxWorkingCount > Environment.ProcessorCount)
	{
	    workingRangeSize = maxWorkingCount / Environment.ProcessorCount;
	}

	var part = Partitioner.Create(0, maxWorkingCount, workingRangeSize);
	Parallel.ForEach(part, (num, state) =>
	{
	   
	    for (int i = num.Item1; i < num.Item2; i++)
	    {
                // 처리하고자 하는 데이터 읽기
                object currentData = _testObject[i];
                // 현재 처리 수량
		processedCount++;
                
                
                // 만약 처리 데이터를 한곳에 모으고 싶다면 lock을 사용
                lock(_lockObject)
                {
                      // 예제      
                      object processedObject = Process(currentData);
                      _testObject.Add(processedObject);
                }                

	    }// END FOR
      
	});
});

// 이 부분은 필요에 따라 작성하던.. 안하던..
try
{
        // 처리가 완료 될때 까지 대기
	task.Wait();

        // 후 처리 영역

}
catch (AggregateException ex)
{
	// 쓰레드 영역 예외
}
catch(Exception ex)
{
       // 후 처리 예외
}

.....

 

 

Posted in 3.0Tagged C#, Parallel, 병렬처리Leave a comment

C# OpenCV Kmeans

Posted on 2017년 12월 3일 by kimczip

K-means algorithm 란?

k-평균 클러스터링 알고리즘은 클러스터링 방법 중 분할법에 속한다. 분할법은 주어진 데이터를 여러 파티션 (그룹) 으로 나누는 방법이다. 예를 들어 n개의 데이터 오브젝트를 입력받았다고 가정하자. 이 때 분할법은 입력 데이터를 n보다 작거나 같은 k개의 그룹으로 나누는데, 이 때 각 군집은 클러스터를 형성하게 된다. 다시 말해, 데이터를 한 개 이상의 데이터 오브젝트로 구성된 k개의 그룹으로 나누는 것이다. 이 때 그룹을 나누는 과정은 거리 기반의 그룹간 비유사도 (dissimilarity) 와 같은 비용 함수 (cost function) 을 최소화하는 방식으로 이루어지며, 이 과정에서 같은 그룹 내 데이터 오브젝트 끼리의 유사도는 증가하고, 다른 그룹에 있는 데이터 오브젝트와의 유사도는 감소하게 된다.[7] k-평균 알고리즘은 각 그룹의 중심 (centroid)과 그룹 내의 데이터 오브젝트와의 거리의 제곱합을 비용 함수로 정하고, 이 함수값을 최소화하는 방향으로 각 데이터 오브젝트의 소속 그룹을 업데이트 해 줌으로써 클러스터링을 수행하게 된다. 출저 : 위키피디아

 

적용 이미지 예시 ( OpenCV 공식 홈페이지 )

이미지 선 성분 검출을 위해서 서전에 이 작업을 거치면 비교적 원하는 결과를 얻을 수 있다.

OpenCVSharp ver 3.2에서는 Kmeans Method를 지원한다.

이 Method의 Parameter의 의미는 여기에서 참조 하길 바란다.

아래는  C#으로 구현된 OpenCVSharp을 활용한 K-means

public static void Kmeans(Mat input, Mat result, int k)
{
    using (Mat points = new Mat())
    {
	using (Mat labels = new Mat())
	{
	    using (Mat centers = new Mat())
	    {
		int width = input.Cols;
		int height = input.Rows;

		points.Create(width * height, 1, MatType.CV_32FC3);
		centers.Create(k, 1, points.Type());
		result.Create(height, width, input.Type());

		int i = 0;
		for (int y = 0; y < height; y++)
		{
		    for (int x = 0; x < width; x++, i++)
		    {
			Vec3f vec3f = new Vec3f
			{
			    Item0 = input.At<Vec3b>(y, x).Item0,
			    Item1 = input.At<Vec3b>(y, x).Item1,
			    Item2 = input.At<Vec3b>(y, x).Item2
			};

			points.Set<Vec3f>(i, vec3f);
		    }
		}

		Cv2.Kmeans(points, k, labels, new TermCriteria(CriteriaType.Eps | CriteriaType.MaxIter, 10, 1.0), 3, KMeansFlags.PpCenters, centers);

		i = 0;
		for (int y = 0; y < height; y++)
		{
		    for (int x = 0; x < width; x++, i++)
		    {
			int idx = labels.Get<int>(i);

			Vec3b vec3b = new Vec3b();


			int tmp = Convert.ToInt32(Math.Round(centers.At<Vec3f>(idx).Item0));
			tmp = tmp > 255 ? 255 : tmp < 0 ? 0 : tmp;
			vec3b.Item0 = Convert.ToByte(tmp);

			tmp = Convert.ToInt32(Math.Round(centers.At<Vec3f>(idx).Item1));
			tmp = tmp > 255 ? 255 : tmp < 0 ? 0 : tmp;
			vec3b.Item1 = Convert.ToByte(tmp);

			tmp = Convert.ToInt32(Math.Round(centers.At<Vec3f>(idx).Item2));
			tmp = tmp > 255 ? 255 : tmp < 0 ? 0 : tmp;
			vec3b.Item2 = Convert.ToByte(tmp);

			result.Set<Vec3b>(y, x, vec3b);

		    }
		}
	    }
	}
    }

}

 

 

 

Posted in 3.0Tagged C#, OpenCV, 개발팁Leave a comment

C# OpenCV (OpenCVSharp) Mat Class To Bitmap

Posted on 2017년 7월 28일 by kimczip
using OpenCvSharp

/* Mat => System.Drawing.Bitmap */
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);

/* System.Drawing.Bitmap => Mat */
Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);

/* Mat => byte[] */
// TYPE 1
byte[] imageBytes = mat.ToBytes(".jpg");
// TYPE 2
byte[] imageBytes;
Cv2.ImEncode(".jpg", mat, out imageBytes);

/* byte[] => Mat */

// TYPE 1 : COLOR
Mat colorMat = Mat.FromImageData(imageBytes, LoadMode.Color);
// TYPE 2 : GRAY
Mat grayMat = Mat.FromImageData(imageBytes, LoadMode.GrayScale);
// TYPE 3
Mat grayMat = Cv2.ImDecode(imageBytes, LoadMode.GrayScale);

 

Posted in 3.0Tagged C#, OpenCV, 개발팁4 Comments

명령 프롬프트 (cmd.exe) 인수 제한

Posted on 2017년 7월 4일 by kimczip

어떠한 기능을 하는 콘솔프로그램에 인수를 받아 처리 하는 프로그램이라면, 인수의 길이가 길어질 가능성이 있는지 고려해야한다.

다음은 Microsoft 문서 중 일부

Microsoft Windows XP 실행 컴퓨터에서 명령 프롬프트에서 사용할 수 있는 문자열의 최대 길이 8191 문자 이상 또는. Microsoft Windows 2000 또는 Windows NT 4.0을 실행 하는 컴퓨터에서 명령 프롬프트에서 사용할 수 있는 문자열의 최대 길이 2047 자입니다.
….. 중략 …..

자세히 보기

인수가 길어질 가능성이 있다면, 인수를 파일로 만들어 처리하자.

Posted in 3.0Tagged Command, 명령프롬프트, 인수 제한Leave a comment

C# OpenCV 3.2 사용하기 (OpenCvSharp)

Posted on 2017년 7월 3일 by kimczip

C#에서 OpenCV를 사용하고자 할 때, Visual Studio가 설치 되어 있다면

도구 > NuGet 패키지 관리자 > 패키지 관리자 콘솔 을 실행한다.

패키지 관리자 콘솔창에서 다음과 같이 입력

Install-Package OpenCvSharp3-AnyCPU

그러면 자동으로 설치가 되고, 관련 DLL 파일은 솔루션 디렉토리 내에 packages 폴더에 존재한다.

간단한 예제

using OpenCvSharp;

private void Form1_Load(object sender, EventArgs e)
{
   Mat image = Cv2.ImRead(SAMPLE_IMG, ImreadModes.Color);
   Cv2.NamedWindow("OriginImage", WindowMode.AutoSize);
   Cv2.ImShow("OriginImage", image);
}

 

소스 보기
소스 숨김

만약, 실행 중 오류가 난다면 OpenCV 홈페이지에서 (http://opencv.org/releases.html) WinPack 파일을 다운 받은 후, 압축 해제하고
버전 마다 틀리겠지만 3.2버전 기준으로 opencv\build\x64\vc14\bin 디렉토리에 있는 파일 전체를 복사하여, 현재 개발중인 프로젝트의 Debug폴더에 복사&붙여넣기한 후 실행하면 해결된다.

Posted in 3.0Tagged C#, OpenCVLeave a comment

First Custom Cooling System

Posted on 2017년 5월 26일 by kimczip

3월 말부터 직구부터 해서 하나씩 부품 사모아 드뎌 오늘에서야 시스템을 완성

RGB 컨셉 PC, 용도는 영상 제어 실험, 멀티 OS 제어 (벨런스시스템) 연구 외 개인용도로 구축.

<강화 유리 제거>

<강화 유리 장착>

전면 화면 보기
전면 화면 숨김

 

<강화 유리 제거>

 

<강화 유리 장착>

측면 화면 보기
측면 화면 숨김

 

 

기타
기타 숨김

 

 

시스템 전체 화면

 

 

 

 

Posted in 3.0Leave a comment

C# WebException “기본 연결이 닫혔습니다”

Posted on 2017년 5월 25일 by kimczip

WebClient Class든 HttpWebRequest Class든, 간혹 같은 코드로 Web에서 데이터 수신이 잘 되던게
갑자기 안될 경우가 있다.

Exception 메시지는 “기본 연결이 닫혀 있습니다.”
Google검색으로 여러가지 해결법이 있지만, 되는것도 있고 서버에서 설정 변경으로 처리해야만 가능 할 경우가 있다.

아래 코드는 위의 에러가 생길 경우, 서버 설정변경이 어려운 상황이나 같은 URL로 브라우저에서 호출하면 이상은 없는데
유독 위 Class로 자동화 구현시 Exception 걸릴 경우, 꼼수?로 좋은 코드다.

public static string DownloadHTMLPage(string URL)
{
    string pageContent = null;
    try
    {
        HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);

        httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
        httpWebRequest.Referer = "http://www.google.com/";


        httpWebRequest.Timeout = 10000;
        
        WebResponse response = httpWebRequest.GetResponse();

        Stream webStream = response.GetResponseStream();


        StreamReader streamReader = new StreamReader(webStream);

        pageContent = streamReader.ReadToEnd();

        streamReader.Close();
        webStream.Close();
        response.Close();
    }
    catch (WebException ex)
    {
        Console.WriteLine("HTTP ERROR [{0}] : {1}", URL, ex.ToString());
        return null;
    }

    return pageContent;
}
소스 보기
소스 숨김
Posted in 3.0Tagged C#, Exception, WebLeave a comment

MySQL 덤프 파일 만들기

Posted on 2017년 5월 23일 by kimczip

명령어 : mysqldump –u [user name] –p[password] [database name] > [dump file]

일자별로 자동백업 할 경우,

아래와 같이 배치 파일 생성
mysqldump -u root -ppassword databse > C:\backupdb\%date:-=%.sql

그리고 스케쥴러 등록 후 사용

Posted in 3.0Tagged MySQL, 데이터베이스Leave a comment

C# WebClient를 이용한 URL Post 전송

Posted on 2017년 5월 23일 by kimczip

웹페이지에서 보안이나 기타이유로 URL 파라미터를 Get 전송방식을 막아놓을 때가 있다.

그래서 Post 방식으로 정보를 전달 할 때 아래와 같이 간단하게 구현 가능하다.

 

using System.Net;
using System.Collections.Specialized;


// Web Client Class의 UploadValues Method 이용
WebClient = client = new WebClient();

string url = "http://.......";
NameValueCollection params = new NameValueCollection
{
    { "PARAMETER_NAME_1", "PARAMETER_VALUE_1"},
    { "PARAMETER_NAME_2", "PARAMETER_VALUE_2"},
    { "PARAMETER_NAME_3", "PARAMETER_VALUE_3"}
};

byte[] response = client.UploadValues(url, params);

Console.WriteLine(Encoding.UTF8.GetString(response));



// 활용안
        public static byte[] Post(string uri, NameValueCollection pairs)
        {
            byte[] response = null;
            using (WebClient client = new WebClient())
            {
                try
                {
                    response = client.UploadValues(uri, pairs);
                }
                catch(WebException ex)
                {
                    Console.WriteLine("ERROR [ {0} ] => {1}", uri, ex.Message);
                }
            }
            return response;
        }

 

소스 보기
소스 숨김
Posted in 3.0Tagged C#, WebLeave a comment

글 내비게이션

이전 글
새 글

버전

  • 3.0
  • 4.0

최근에..

  • 실행파일 디지털 서명하기 (프로그램 배포)
  • 자신의 PC에 막혀 있는 포트 검색
  • DB Table Column 이름 가져오기.
  • DLL 파일 PublicKeyToken 얻기
  • DSM 7.0에서 MariaDB 10 설정

Tags

10Gbps AMD Bitspower C# Command Control Corsair Crawling Exception F4-3200C14D-16GFX FLAREX G.Skill git gogs MariaDB MySQL NAS OpenCV Parallel PC-O9 rainmeter Ryzen scimitar Thermaltake UI Web WinForm 개발팁 개인사업자 광명시청 네트워크속도 데이터베이스 라이젠 랜선 랜케이블 리안리 메모리 명령프롬프트 수냉쿨링 수로 시놀로지 직구 커스텀쿨링 컴퓨터 퍼옴
Proudly powered by WordPress | Theme: micro, developed by DevriX.