처음 대하는 환경이라 스칼라 설치에, 스파크, maven설치에 winutils까지 이것 저것 삽질을 많이 했었는데, 


쉘에서 실행해본다던가 다양한 방법이 있지만..

단지 스파크의 API를  스칼라 언어로 테스트해볼 것이라면 아래 설치만으로도 충분합니다.

뭐한건지...;;;




물론, 실제 운영 하려면 하둡설치에 다른 여러가지들이 필요 하겠지요.


간단하게 라인 수를 재는 프로그램을 돌려보기 위한 환경입니다.

스파크의 경우 파이썬, 자바, 스칼라 언어로 작동이 가능합니다.(공식문서에도 세가지 언어로 딱 가이드하더군요.) 

스칼라 기준으로합니다.. (윈도우7/10 환경입니다.)


1. 자바를 설치합니다. 자바 설치후 환경변수로 JAVA_HOME 을 자바 설치 경로로 셋팅해줍니다. 설치되어있다면 패스~


설치 : http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



171버전을 설치했네요.


* 참고로 관리자 권한으로 CMD 입력창을 실행하고

"C:\Windows\system32\rundll32.exe" sysdm.cpl,EditEnvironmentVariables 를 입력하면 바로 환경변수 수정이 가능합니다.








2. IntelliJ를 설치합니다. 어차피 메모장에서 개발할 것은 아니기 때문에, 바로 IDE를 설치합니다. 설치시 scala 플러그인을 선택하면 필요한 것을 같이 받을 수 있습니다.

IntelliJ 설치 경로 : https://www.jetbrains.com/idea/download/#section=windows

위 링크에서 커뮤니티 버전을 선택하시면 무료로 테스트 사용이 가능합니다. (상용개발시에는 구매를 해야겠지요.)







64비트 런처 숏컷은 하나 만들었습니다 .x86은 JRE는 필요없어서 체크안했구요.




설치시 아래 화면은 기본으로 넘어가셔도 됩니다. 보시고 필요한 것 있으면 더 다운로드 받으시면 됩니다.







아래 화면에서는 플러그인에  Scala를 꼭 Install해주세요.~






런처화면이 나오고












Create New Porject 를 해서






Scala에 SBT를 선택합니다. SBT Simple Build Tool 이라해서, 스칼라 빌드 환경입니다.





기존에 JDK를 설치했기 때문에 설치한 경로로  JDK환경을 설정합니다.





위 화면이 중요한데요. 스파크 2.3.0 버전은 Scala 2.11.12 버전으로 해야 됩니다. 2.12.x로 하니 잘 안되더군요.

이것 때문에 또 삽질.

http://spark.apache.org/docs/latest/quick-start.html <- 여기는 2.11.8로 설명이..








프로젝트 뷰 창이 나오지 않으면 ALT+1 을 누르시거나 View 메뉴에 Tool Windows -> Project를 차례로 선택합니다.


그리고 build.sbt 파일을 위와 같이 수정합니다.


name := "lineCount" version := "0.1" scalaVersion := "2.11.12" libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0"










스칼라 파일을 소스에 하나 추가합니다. (sbt파일이 한번 Sync가 되어야 Scala class파일을 추가할 수 있는걸로 보여집니다?)


Object를 추가할것으므로 Kind에서 Object를 선택하세요. 이름은 LineCount로 합니다.




소스파일 내용은 아래와 같습니다.



import org.apache.spark.{SparkConf, SparkContext}

object LineCount {

  def main(args: Array[String]): Unit = {

    val logFile = "c:\\download\\test.txt"  //경로는 바꿀 수 있습니다.


    val conf = new SparkConf().setAppName("Simple Application").setMaster("local")


    val sc = new SparkContext(conf)


    val logData = sc.textFile(logFile, 2).cache()


    val lineCount = logData.count()


    println("라인수==>"+lineCount)


    sc.stop()


  }

}


텍스파일은 하나 아무거나 준비합니다. 만들기 번거로우시면 아래링크를 받으세요.
Run 할때 실행 환경이 없다면 아래와 같이 하나 추가해주세요.
MainClass는 LineCount, Use classpath of module은 프로젝트내에 linecount 입니다.






위와 같이 라인 수가 잘 나오는 것을 확인 할 수 있습니다




추가 링크:

스팍 개발 환경 설정(영어) : http://www.itversity.com/2018/04/19/setup-development-environment-big-data-hadoop-and-spark/

스팍 공식 문서(영어) http://spark.apache.org/docs/latest/index.html

스칼라 언어 배우기(한글) : https://twitter.github.io/scala_school/ko/index.html



C#기준입니다.


doxygen 다운로드 설치 : 

http://www.stack.nl/~dimitri/doxygen/download.html







Graphviz 다운로드 설치


graphviz-2.38.msi 설치하시면 문제없으실 듯!



둘다 설치 완료 후,


뭘 실행해야할까.. 고민하게 마련인데, doxywizard 선택.



Step1. 독시젠 워킹 디렉토리 즉 작업디렉토리 지정


Wizard 탭에서

Step2. 

프로젝트이름등 지정, 그리고 Source code 디렉토리 지정. 생성할 디렉토리지정.

Mode에서는 Java or C#설정

Output에서는 Scan recursively 체크해서 하위디렉토리 검색하도록 설정.

Diagram에서는 Use dot tool from the GraphViz package설정.

Call Graphs, Called by graphs는 함수호출 관계도를 그릴것인가인데 각자 환경에 맞게 설정


Expert탭에서

Porject에서 OUTPUT_LANGUAGE 를 Korean-en 설정

Dot에서 클래스 다이어그램 그릴거면 Class Diagram체크.

DOT_PATH에서 Graphviz실행 경로 설정. 보통 --> C:\Program Files (x86)\Graphviz2.38\bin


환경설정은 저장안하면 날아가므로 반드시 저장.


추가 팁 #01

페이지 넘버링 -> Ctrl+A , 마우스 오른쪽 버튼 필드업데이트.







추가 팁 #02

이미지 포함시키기.(기본적으로 doxygen은 rtf문서 생성시 이미지를 경로로만 연결시킨다.)

Ctrl+ A ---> Alt + E + K 해서 연결 끊기한다.





 

 

지인이 필요하다하여 간단하게 제작해 준 프로그램입니다.

다른 필요하신 분이 있으실 듯하여 프로그램을 공개합니다

프로그램을 이용하시려면 닷넷 프레임웍이 있어야 되며, 윈도우 환경에서만 동작합니다.

 

이 프로그램은 여러 이유로 완벽하지 않을 수 있으므로, 결과에 대한 보장은 하지 않으며,

그에 따른 책임은 제가 지지 않습니다.

 

그것에 동의하신다면 무료로 어디든 사용하시면 됩니다.

 

 

단, 이 프로그램을 재판매 목적으로 상업적 이용은 불가능합니다.

 

 

 

다운로드 : 

 


WordCounter.z01

WordCounter.z02

WordCounter.zip


 

한글 형태소 분석기는 아래 라이브러리를 이용하였습니다.

https://github.com/modamoda/TwitterKoreanProcessorCS

 

 

한동안 떠들석하게 했던 그 업데이트입니다.

스펙터의 경우엔  Bios업데이트로 해결을, 멜트다운 문제는 윈도우 업데이트로 해결이 가능합니다.


메인PC의 경우 업그레이드 한지 얼마 안되어서 그런지, bios업데이트가 있었지만, 구형 PC에는 bios가 아직

나오지 않았더군요. 둘다 기가바이트꺼 인데 ㅠ.ㅠ


https://www.ashampoo.com/en/usd/pin/1304/security-software/spectre-meltdown-cpu-checker


위 링크에서 제공해주는 툴로 쉽게 확인이 가능합니다.


메인PC. 모두 업데이트해서 잘 됬다고 나오고요.






* 기가바이트 메인보드의 경우, 최신 바이오스 파일을 다운로드 받으신 후, USB저장매체등에 복사를 해두고,

재부팅 한 후, F8키를 누르면 바이오스 업데이모드로 진입합니다.

스펙터 해결을 위한 바이오스 업데이트.


서브컴.. 


윈도우7의 경우 업데이트시에는 아래와 같이 나타날 수 있습니다.

Windows Management Framework version5가 필요하다고 하여 업데이트를 해줘야 할 수도 있습니다.






해당하는 윈도우 버전을 체크하여 다운로드 받은 후 설치하면 그 이후에야 멜트다운 관련 업데이트를 진행할 수 있습니다.




이후 윈도우즈에 업데이트 항목에서 보안업데이트를 진행합니다.






바이오스 업데이트가 지원되지 않아 여전히 스펙터에 취약한 서브 컴 ㅠ.ㅠ

본체에서 탈착 할 수 있는 조이콘으로 닌텐도 스위치의 마리오 카트는 2인용을 바로 즐길 수 있습니다.

주말에 애들 게임시켜주면 서로 할려고 난리인데, 조이콘 하나씩 안겨주고 대결하라고 하니

딱이더군요.


처음에 설정하는 법을 몰라 좀 헤맸는데, 이것도 간단합니다.

마리오카트 중에, 패드를 분리하면, 아래와 같은 화면이 나옵니다.




왼쪽을 먼저 분리해 보았습니다.









중간에 좀 작은 화면으로 안내 화면이 보입니다.

패드에  SL키와 SR키를 누르면 분리해서 설정이 가능합니다.









SL키 와 SR키는 아래 화면에 빨간색 박스로 표시된 부분입니다.



역시 같은 방법으로 오른쪽 조이콘도 분리하여 설정하면 됩니다.




설정이 완료되면 버튼 4개중 오른쪽 버튼을 누름니다.






아래처럼 2인 플레이가 가능합니다.


코드를 예쁘게 보이게 하기위해 Syntax highlighting을 붙혔습니다.


적용하는 방법은 아래 링크를 참고하시면 됩니다.

http://mclass.tistory.com/54



그런데, 어떤 소스코드를 붙히니까 자꾸 </t>가 붙더군요.

첨에 왜 그러지..했는지 확인해보니. HTML모드를 하고서는 소스코드 내용에 '<' '>' 문자가 문제였더군요.

HTML모드에서는 < > 문자는 태그로 인식되어서 그랬던 것이었습니다.


해서 강제로 < 는 &lt;   > 는 &gt; 로 바꾸고 등록했습니다.

&는 &amp; , 빈공백은 &nbsp;로 해줘야겠지만 그러한 문자는 없어서 패스했습니다.



즉 태그 내용 등록시 아래처럼 말이죠.



<pre class="brush: csharp">

using System.ComponentModel;


namespace RxTestWinForm

{

    public static class ControlExtension

    {

        /// &lt;summary&gt;

        /// T Type의 Delegate  선언

        /// &lt;/summary&gt;

        /// &lt;typeparam name="T"&gt;T타입&lt;/typeparam&gt;

        /// &lt;param name="obj"&gt;Invoke 할 컨트롤 &lt;/param&gt;

public delegate void RunOnUIThreadDelegate&lt;T&gt;(T obj) where T : ISynchronizeInvoke;

        /// &lt;summary&gt;

        /// ISynchoronizeInvoke 인터페이스 구현체 대한 RunOnUIThread확장 메소드

        /// &lt;/summary&gt;

        /// &lt;typeparam name="T"&gt;T타입, 캐스팅을 피하기 위해 사용&lt;/typeparam&gt;

        /// &lt;param name="obj"&gt;메소드 확장할 컨트롤&lt;/param&gt;

        /// &lt;param name="action"&gt;수행할 Action&lt;/param&gt;

        public static void RunOnUIThread&lt;T&gt;(this T obj, RunOnUIThreadDelegate&lt;T&gt; action)

            where T : ISynchronizeInvoke

        {

            if (obj.InvokeRequired)

            {

                obj.Invoke(action, new object[] { obj });

            }

            else

            {

                action(obj);

            }

        }

    }

}

</pre>





그런데 이렇게 안하고, 그냥, 아래 코드로 먼저 HTML 에서 입력하고 난 뒤,


<pre class="brush: csharp">

</pre>


에디트 모드로 돌아가면 회색 사각형이 보이는데, 거기서 그냥 코드 입력하면, 굳이 위에 처럼 귀찮게 문자 바꾸지 않고도

잘 등록이 되더군요.



위 화면에서 바로 코드를 입력하면 됩니다.


윈폼 컨트롤 사용시 타 쓰레드에서 컨트롤 변경호출시 컨트롤의 InvokeRequired 확인하고 처리하는 코드가 너저분해지기 마련입니다.

이런 류 코드는 많이 쓰일 것 같은데... 



간단히 이렇게도 가능하지만, 

   textBox1.Invoke( new Action (() => { textBox1.Text = count.ToString(); } ));



좀 더 효율적으로 동작하기 위한 방법들을 찾아보았습니다.
아래 링크에 좋은 의견들이 많았습니다.
그 중 깔끔하게 사용하는 방법을 옮겨 포스팅합니다.




WinForm.cs (아래처럼 활용하시면 됩니다.)
-----------------------------------------------------------
//메인쓰레드가 아닌 다른 쓰레드에서 UI 변경 호출시
label1.RunOnUIThread(control =>
{

     control.Text = $"{progressCount}/{totalCount}";;

});





다음 확장메소드를 선언합니다.


ControlExtension.cs

----------------------------------------------------------------------------


using System.ComponentModel;

namespace RxTestWinForm
{
    public static class ControlExtension
    {
        /// <summary>
        /// T Type의 Delegate  선언
        /// </summary>
        /// <typeparam name="T">T타입</typeparam>
        /// <param name="obj">Invoke 할 컨트롤 </param>
	public delegate void RunOnUIThreadDelegate<T>(T obj) where T : ISynchronizeInvoke;
        /// <summary>
        /// ISynchoronizeInvoke 인터페이스 구현체 대한 RunOnUIThread확장 메소드
        /// </summary>
        /// <typeparam name="T">T타입, 캐스팅을 피하기 위해 사용</typeparam>
        /// <param name="obj">메소드 확장할 컨트롤</param>
        /// <param name="action">수행할 Action</param>
        public static void RunOnUIThread<T>(this T obj, RunOnUIThreadDelegate<T> action)
            where T : ISynchronizeInvoke
        {
            if (obj.InvokeRequired)
            {
                obj.Invoke(action, new object[] { obj });
            }
            else
            {
                action(obj);
            }
        }
    }
}








'C#' 카테고리의 다른 글

WPF MVVM 샘플코드  (0) 2018.05.28
doxygen 설치 및 설정  (0) 2018.05.14
간단한 한글 단어 세기 프로그램 공개  (6) 2018.03.02
IIS7 환경에서 WEBAPI 프로젝트 구동 오류시  (0) 2017.11.17
닷넷으로 CNTK 돌려보기  (0) 2017.10.24

닌텐도 스위치가 한국에서 정식 발매된지도 벌써 한달 반정도 된 것 같습니다.

wiiU를 건너띄고 발매되어 더욱 기대를 많이 하게 되었는데요.


기본 조이콘의 그립감이 똥망이라, 프로콘을 구입하는 유저들도 많은 것 같습니다.


프로콘이 USB-C타입으로 연결되는데, PC에서도 잘 안식되고 좋더군요.

PC에서 무선 블루투스로 연결이 가능해 에뮬레이터등에서도 이용이 가능합니다.


근데 PC에서 블루투스 설정 후, 다시 닌텐도 스위치에 연결하려니까 잘 안되더군요.


해서 해결한 방법을 좀 남겨두려합니다.


방법은 본체랑 패드를 USB로 연결하면 자동으로 인식됩니다. (참 쉽죠;;;)


그런데 패드 및 본체모두 USB-C타입 작은모양이라 케이블이 없으면 연결이 불가능합니다.


다행히 독에 일반 USB 잭이 있습니다. 이쪽으로 연결하시면 됩니다.





본체화면에서 설정화면 들어가기.

메뉴에서 Controllers를 들어갑니다.

Find Controllers 메뉴를 선택합니다.

연결을 확인합니다.







다시 재밌게 즐기시면 됩니다.



+ Recent posts