'분류 전체보기' 카테고리의 글 목록 :: iopeni - Think of C#

얼마전 VM을 이용하여 Linux에 Hadoop을 설치 하고 공부 하려고 했었는데.... 


암튼 불의의 사정으로 인하여 VM이 사라져 버리는 바람에... Hadoop은 포기해야 하나 생각 하던 중... 그냥 Windows에 Hadoop을 설치 하고 C#으로 프로그램이 가능하지 않을까? 하는 궁금증이 생겼고...


오늘은 그 궁금증을 해결 하는 날이다.


일단... Windows 10에 ANT를 설치 한다.. 


ANT다운로드 사이트는.... 


http://ant.apache.org/bindownload.cgi 


이곳이 되겠다.


이어 Java를 설치 한다...


자바의 다운로드 사이트는....


http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html


이곳이 되겠다.


그리고 나서 하둡을 다운로드 받는다..


http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz 


이곳이 되시겠다. 


이제 JDK를 설치 하고 Hadoop과 Ant는 사용자가 원하는 임의의 폴더에 압축을 해제 한다. 


하둡 압축 해제 도충 다음과 같은 오류를 만나게 되면 무시 한다.




임의의 ANT 설치 폴더와 하둡 설치 폴더를 환경 변수에 등록 한다.



이렇게 설치 된 폴더를 등록 하고 Path를 등록 한다.




이 까지 완료 하였다면 하둡의 설치 경로가 C:\hadoop-2.8.0 일 경우라고 가정 할때 

아래 폴더를 생성 한다.


C:\hadoop-2.8.0\data

C:\hadoop-2.8.0\data\data

C:\hadoop-2.8.0\data\name


C:\Hadoop\temp

C:\Hadoop\userlog


다음 하둡의 환경 설정파일을 수정 하여야 한다.


C:\hadoop-2.8.0\etc\hadoop 디렉토리의 4가지 xml 파일을 수정 하여야 한다.


-- Core-site.XML -----------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!--

  Licensed under the Apache License, Version 2.0 (the "License");

  you may not use this file except in compliance with the License.

  You may obtain a copy of the License at


    http://www.apache.org/licenses/LICENSE-2.0


  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License. See accompanying LICENSE file.

-->


<!-- Put site-specific property overrides in this file. -->


<configuration>

<property>

  <name>hadoop.tmp.dir</name>

  <value>C:\hadoop\temp</value>

</property>

<property>

<name>fs.default.name</name>

<value>hdfs://localhost:50071</value>

</property>

</configuration>


-- hdfs-site.XML -----------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!--

  Licensed under the Apache License, Version 2.0 (the "License");

  you may not use this file except in compliance with the License.

  You may obtain a copy of the License at


    http://www.apache.org/licenses/LICENSE-2.0


  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License. See accompanying LICENSE file.

-->


<!-- Put site-specific property overrides in this file. -->


<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

<!-- 데이터를 저장할 생성 디렉토리 설정. -->

<property>

<name>dfs.namenode.name.dir</name>

<value>/hadoop-2.8.0/data/name</value>

<final>true</final>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/hadoop-2.8.0/data/data</value>

<final>true</final> 

</property> 

</configuration>


-- mapred-site.XML -----------------------------------------------------------------------

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!--

  Licensed under the Apache License, Version 2.0 (the "License");

  you may not use this file except in compliance with the License.

  You may obtain a copy of the License at


    http://www.apache.org/licenses/LICENSE-2.0


  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License. See accompanying LICENSE file.

-->


<!-- Put site-specific property overrides in this file. -->


<configuration>

  <property>

  <name>mapreduce.framework.name</name>

  <value>yarn</value>

  </property>

<property>

  <name>mapred.job.tracker</name>

  <value>localhost:9001</value>

  </property>

<property>

<name>mapreduce.application.classpath</name> 

<value>/hadoop-2.8.0/share/hadoop/mapreduce/*,

  /hadoop-2.8.0/share/hadoop/mapreduce/lib/*,

  /hadoop-2.8.0/share/hadoop/common/*,

    /hadoop-2.8.0/share/hadoop/common/lib/*,

    /hadoop-2.8.0/share/hadoop/yarn/*,

  /hadoop-2.8.0/share/hadoop/yarn/lib/*,

  /hadoop-2.8.0/share/hadoop/hdfs/*,

  /hadoop-2.8.0/share/hadoop/hdfs/lib/*,

 </value>

</property>

</configuration>



-- yarn-site.XML -----------------------------------------------------------------------

<?xml version="1.0"?>

<!--

  Licensed under the Apache License, Version 2.0 (the "License");

  you may not use this file except in compliance with the License.

  You may obtain a copy of the License at


    http://www.apache.org/licenses/LICENSE-2.0


  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License. See accompanying LICENSE file.

-->

<configuration>


<!-- Site specific YARN configuration properties -->

<property>

 <name>yarn.nodemanager.aux-services</name>

 <value>mapreduce_shuffle</value>

 </property>

 <property>

 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

 <value>org.apache.hadoop.mapred.ShuffleHandler</value>

 </property>

<property>

 <name>yarn.nodemanager.log-dirs</name>

 <value>C:\hadoop\userlog</value>

 <final>true</final>

 </property>

 <property>

<name>yarn.nodemanager.local-dirs</name>

<value>C:\hadoop\temp\nm-localdir</value>

</property>

 <property>

 <name>yarn.nodemanager.delete.debug-delay-sec</name>

 <value>600</value>

 </property>

 <property><name>yarn.application.classpath</name>

 <value>/hadoop-2.8.0/,

       /hadoop-2.8.0/share/hadoop/common/*,

       /hadoop-2.8.0/share/hadoop/common/lib/*,

       /hadoop-2.8.0/share/hadoop/hdfs/*,

       /hadoop-2.8.0/share/hadoop/hdfs/lib/*,

       /hadoop-2.8.0/share/hadoop/mapreduce/*,

       /hadoop-2.8.0/share/hadoop/mapreduce/lib/*,

       /hadoop-2.8.0/share/hadoop/yarn/*,

       /hadoop-2.8.0/share/hadoop/yarn/lib/*

 </value>

 </property>


</configuration>



이후 재 부팅 하고 Hadoop의 버젼을 확인 해 보자. 


하둡 버젼 확인은 잘 된다. 


이제 하둡 namenode 포맷을 하면 된다.


hdfs namenode -format 


명령으로 포맷 한다.


이 후 hadoop의 sbin 디렉토리로 경로 이동하여 


start-all 명령을 실행 하면 다음과 같은 오류가 발생 한다. 


이 문제의 해결 방법은 위 에러 메시지에서 해결 방법을 안내 하고 있다. 


https://wiki.apache.org/hadoop/WindowsProblems


사이트의 내용을 읽어 보면...  

How to fix a missing WINUTILS.EXE

You can fix this problem in two ways

  1. Install a full native windows Hadoop version. The ASF does not currently (September 2015) release such a version; releases are available externally.
  2. Or: get the WINUTILS.EXE binary from a Hadoop redistribution. There is a repository of this for some Hadoop versions on github.

Then

  1. Set the environment variable %HADOOP_HOME% to point to the directory above the BIN dir containing WINUTILS.EXE.

  2. Or: run the Java process with the system property hadoop.home.dir set to the home directory.

이런 방법으로 해결 하라고 한다. 


난 그냥 winutils.exe를 찾아서 다운로드 받아 bin 디렉토리에 추가해 주었다. 


Hadoop-2.7.1_WinUtils.zip


다시 start-all 명령을 때리면 잘 동작 된다. 


그런데 PC를 다시 재부팅 하고나니 이거 참... 

또 에러가 뜬다. 에러의 종류가.. org.apache.hadoop.yarn.exceptions.YarnRuntimeException

요런 Error인데. cmd를 관리자 권한으로 실행 이후 start-all 명령 실행 하니 아주 잘 동작 한다.


이제.. Windows 10에 하둡 실행 완료


자 이제 C#으로 로컬 테스트만 성공 하면 되겠다. 

Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

몇일 전 .... 사람인에 올려 놓은 구직 이력서를 보고 모 업체 대표님이 전화를 하셨다...


"C# 몇 년이나 하셨어요? WinForm은 몇 년이나 하셨어요????? " 라고 질문을 하셨다... 내 기준에선 C#은 사실 발표 된 지 오래 되지 않았으므로... 몇 년이나 했는지 이력이 중요할 수 있을 지도 모르겠다... 


그런데 윈폼을 몇년이나 했느냐는 질문에는 좀....... 웃음이 나왔다... 사실 마이크로소프트 종속 프로그래머 로써 C++이든 VB든 Microsoft 개발자라면 윈도우 용 프로그램을 만드는 사람이라면... 20년이 넘는 세월동안 유저 인터렉티브한 프로그램을 만드는 개발자 였다면 윈폼을 사용하지 않고서는 개발을 하지 못했을 것이기 때문이다 visual studio 6.0의 발표 시기는 1998년 이었던 것으로 기억 되고 . .Net(C#) 이 발표 되었을 시기가.... 아마도 2002년 정도 였던 것으로 기억 된다. (C#이 발표된건 14년 정도 된건가?) 이 후 WPF가 UI로서 발표된건 .Net Framework 3.0 - 발표 아마도 2007년 이었던 것으로 기억 된다.


윈폼은 아주 오래된 환경이고 Dos 시절 부터 인터럽트 프로그래밍을 했던 나에게 윈폼을 몇년이냐 했냐는 질문은 좀 헛 웃음이 나오게 만드는... 질문 이었다....


그래서 윈폼은 아주 오래 했습니다.. 라는 대답을 했더니..... 그 대표님 께선 이렇게 말씀하셨다...


"C#을 한게 이력서 상 7년도 안되 보이는데(C#이 발표된 건 14년 정도 뿐이 안 되었고...3.0 발표 이후 부터 언어로써 각광을 받기 시작한 C#을 7년이면 오래 한거 아닌가?)... 윈폼을 아주 오래 했다니 그 아주 오래한게 몇년 이신데요?" 라고 말이다.  Win API CreateWindow는 윈폼이 아니었나 보다.... 


이런 질문을 하는 대표님 께서는... FP니.... DI니... 이런 주제들은 들어 본적도 없을 것이고 단지 갑이 요구 하는 인력이 C#에 윈폼을 사용한 사람이니... 윈폼이 C#에 종속된 뭐 특별한 기술 인지 아셨던 대표님 이었다고 추측할 뿐이다.


얼마 전 대한민국 꽤나 큰 대기업인 기업에 면접을 보러 간 적이 있었다.


그 기업의 전산 팀장님 께서는 이런 질문을 하셨다...


"우리 회사가 사용하고 있는 전산 시스템에 대해서 설명하세요..." 였다. 

이 질문을 듣고 있는데 이거 참.. 또 웃음이 나왔다.. 


물론 알고는 있었다... 대답도 했다... 그런데 경력 사원 뽑으면서 얼마나 준비를 안 했으면 알아도 그만 몰라도 그만 인 그 회사가 운영하고 있는 시스템을 설명하라니.... 


"두 번째 질문은 사용 할 줄 아는 미들웨어가 있는가?" 를 질문 하셨다.


그 기업에서는 3Tier를 구축하기 위해 TMax 제품을 미들웨어로서 사용하고 있었고 TMax제품을 사용할 줄 압니다... 라는 대답을 받고 싶었을 것이다.


이거 역시 좀 웃겼다.....


기술 면접이라고 뭔가 기술을 묻고 싶었다면 주제는 얼마든 있었을 것인데... 사람을 얼마나 무시 했으면 자기 회사 시스템을 설명 하라니....


회사 시스템은 면접관이 구직자에게 설명하고 더불어 회사가 앞으로 추구 하는 기술 환경에 경력직으로서 가져야 하는 기술을 물었어야 하는 것이 맞다고 생각 된다. 


시간이 지나면 지날 수록 예전 처럼 정말 천천히 칠판에 하나 하나 그림을 그려가면서 설명 하시고 질의 하셨던 진짜 엔지니어는 사라져 가는 구나 라는 참담함이 대한민국 IT시장의 암담함을 대변 하는 듯 하다..


정말 ... 참 암담한 시장이 아닐 수 없다... 좀비들만 난무 하는 시장.... 대한민국 IT시장..... 진짜 엔지니어는 필요 없는 IT시장... 대한민국 시장이다.... 

'Favorite > Other...' 카테고리의 다른 글

노벨뷰 singbox T6  (1) 2014.06.22
YF Sonata 하이브리드 지르다...  (0) 2014.01.06
U+ Navi LTE만???  (0) 2013.11.18
ATIV Pro XQ700T1C-A54  (0) 2013.07.16
10Q / 10A  (0) 2010.10.25
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

"펫졸드 가라사대.........."


라는 말을 아시는가?


어느 정도 년수가 된 프로그래머라면 찰스 펫졸드를 모르면 간첩이라고나 할까....


오늘 또 펫졸드 아저씨의 책을 한권 질렀다...


사실.. 주기적으로 지른다.. 이 아저씨의 책은.. 

 

이번에 지른 펫졸드 아저씨의 책이다..

 

 

이 아저씨의 책을 제일 처음 본건....

 

이 책이다...

 

ㅎㅎ 벌써 23년이 지났네...

 

23년 IT를 했는데. 난 아직도 이책의 반도 이해 못한다.. 불행하게도 말이다... 쩝

'Book > Computor Book...' 카테고리의 다른 글

너무 놀았나???????  (0) 2016.12.30
미쳤따아~~~~~  (0) 2014.04.20
C# 표준...  (0) 2013.07.17
C# Language Specification Version 5.0  (0) 2013.07.16
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

병원에서 사용하는 시스템 중 EMR이라는 시스템의 중요기능 중 하나는 동적 서식 생성이라는 주제 이다.

 

몇년전 EMR이 뭔지도 모를 때 모 대학 병원에서 엉겁결에 동적 서식 생성기라는 프로그램을 만들었고.. 지금은 확실하게 서식생성기가 가져야 하는 기능들에 대해서 남들보다 잘 알고 있다고 자신 한다.

 

전에 근무하던 회사도 의료정보쪽 일을 하고 있는 회사 였고, 동적 서식 생성기라는 프로그램이 몇종류 있었다. 물론 지금도 팔고 있는 제품이고 나름 경쟁력 있는 제품들이라 생각 한다.

 

그러나 나의 입장에서 보면 뭔가 좀 어색하고 대단히 이상했다. 왜냐하면 서식 생성시 서식의 모양을 지정하고 모양의 위치를 지정하고 하는 것들을 전부 이미지로 처리하고 있었기 때문이다.

 

정확한건 아니지만 타회사(후지쯔코리아, 큐브플랙스)의 제품들을 봐도 서식을 생성하기 위해 처리 하고 있는 생성기는 이미지 처리 기반인 것으로 추측된다.

 

왜 일까? 왜 이미지로 했을까? 난 잘 모르겠다. 일부러 이미지로 처리한다는 것 자체만 보더라도 공수는 훨씬 많이 들어갈것 처럼 보인다.

 

생각을 살짝만 바꿔서 생각 하면 그냥 패널이나. 이미지박스에 동적으로 컨트롤을 들어 올리고 그걸 가지고 선택 하면 개발자가 Hit Testing 은 신경 쓰지 않아도 되며, 드래그는 Left와 Top 값만을 변경 하는 것으로 원하는 기능을 구현 할 수 있다.

 

물론 Copy & Paste 의 구현도 이미지 기반 처리에 비해 쉽게 할 수 있다.

 

국가연구사업으로 완성된 CCM(임상 컨텐츠 모델) 이라는 것을 보면 서식 생성시 중요하게 생각 하여야 하는 것은 어트리뷰트와 엔티티, 컴포넌트이다.

 

그래서 생각 하게 된거다... 만약 말이다. 우리가 동적 서식 생성이라는 문제를 가지고 Visual Studio의 폼 디자이너 처럼 할 수 있다면? 그럼 어떻게 될까?

 

폼 디자이너에는 어트리뷰트, 엔티티, 컴포넌트 따위 그냥 기본 개념일 뿐이다. 얼마든지 확장할 수 있고 사용자가 화면을 그리기도 이미지 에디터에 비해서 훨씬 쉽다.

 

더불어~~~~~~~~~ CodeDom으로 코드 까지 생성해 준다.......  뭐 자동생성하는 코드가 맘에 들지 않는 다면 나만의 규약으로 코드를 생성해도 된다.

 

예상컨데... 이거 서식 생성기 끝판왕을 만들 수 있겠구나??? 라는 생각을 함 해봤다.

 

그런데??????? 폼 디자이너는 어떻게 만들었을까?... 이라는 호기심이 문득 들었고 저를 아는 분들은?? 아시겠지만..... 한번 호기심이 생기면 끝까지 물고 늘어져서 ㅎㅎㅎ 알아내고야 마는 묘한 습성이 있다.

 

이번에도 그랬다.... 폼디자이너 어떻게 만들었는지 알고 싶었다. 몇일간의 구글링과 .... MSDN 검색질을 통해서 알아내고야 말았다......

 

일단 샘플로 만들어 놓은 화면이다. ㅎㅎㅎㅎ

 

 

드래그... 및 Anchor 기능이 기본으로 동작 된다. 이 코드..... 코드량 얼마나 많을까???? 많지 않다.

 

깜놀 했다.. ㅎㅎㅎ 이걸 알고 나서 어찌나 자랑질을 하고 싶었는지 아마 여러분은 모를 꺼다..

 

역시 고마운건 Microsoft 였다...

 

System.Design 어셈블리를 참조 하고 System.ComponentModel.Design 네임 스페이스에 존재 하는 DesignSurface가 답이었다.

 

대충 만든 C# 코드를 소개 한다.

 

내가 또 서식생성기를 만들게 될 일은 없겠지만.. 만약 또 만들게 된다면... 이번엔 이렇게 할 것이다. 만약 WPF디자이너에 CodeDom을 활용하게 될 지도 모르겠지만 말이다.

 

이렇게 만들어 놓은 서식으로 사용자가 리포트를 작성하게 하고 .. 이후 출력을 하게 될 경우에 대한 좋은 방법은 OpenXML SDK 인듯 하다.

 

아마 docx, xlsx, pptx 와 같은 문서들의 확장자를 Zip으로 바꾸고 압축을 풀어 보면 압축이 풀리는 신기한 경험을 하게 될지도 모른다.

 

미국 정부는 Microsoft에게 오피스 없이도 오피스 문서를 읽을 수 있도록 해달라는 요청을 하였고, 마이크로소프트는 그 의견에 수렴하여 OpenXML 이라는 문서 포맷을 표준으로 하였다.

 

ECMA와 ISO공히 표준 문서가 등재 되어 있고 이곳에 백업한다. EMR을 새로 만들거나 서식 생성기를 새로 만드는 분들에겐 아마도 도움이 될 것이다.

 

http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=51463

http://www.ecma-international.org/publications/standards/Ecma-376.htm

 

그런데 말이다... 지금 나에게 중요한건 이런 블로그질이 아니라... 취업이다... ㅎㅎ

에혀.. 지방에는 튼실한 IT 기업이 없다.. 있어도 나 같은 허접한 개발자는 취급하고 싶지 않은 걸까???? 백수 생활이 점점 길어진다... 아혀~~

 

 

 

 

 

'Functional World > .Net Framework' 카테고리의 다른 글

Microsoft .Net Framework 4.5? 에 추가된 것들...  (0) 2013.11.01
Ms Chart Control Sample  (0) 2013.08.26
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

오늘은 조금은 특별한 날이다....


9월 15일 이후 백수 생활 시작.. 내가 조금은 너무 놀았나 보다. 약간의 압력과 압박을 모른척 하고.. 정말 꾸준하게 놀았나 보다.....


오늘 와이프가 갑작스레 선물 아닌 선물을 했다.


혹시 아시는가?


개발자라면 누구나 봤을 법한... C기초 플러스.... 서울대학교 수업 교재 였고...


내가 처음 C라는 언어를 접했을 때 본 책이기도 하다.....


서울 대학교의 그 수업 교재는.. ㅎㅎ 지금 사진으로 찍을 수 없을 듯 하다... 책... 버렸나 보다.. 그래도 내가 가지고 있는 C기초 플러스....


그 역사를 보여 드리겠다...



그랬다.. 이 책은 정말 세계적인 명서 였고... 지금 우리집 책장에 있는 가장 오래된 책 중에.. 하나일 것이다.. 벌써 20년은 넘은 책이니까....


그랬다...


나에게 C라는 언어를 알려준 책이다... 물론 옛날 서울대 황희융 교수님께서 수업 교재로 채택 하셨던 바로 그 책이다.


오늘... 갑작스레 우리 와이프가.. 나에게.. 몇 종의 책을 선물 했는데.. 대략.. 한 20만원은 쓴거 같다..


무슨 책이 필요 한지 묻지도 않았다...


그냥 선물 했다.. 이 선물들은 나에게 약간의 향수와... 옛날 기억과... 그리고...


아.. 너무 놀았나 보다... 라는 자각을 하게 되었다...


오늘 우리 와이프가 나에게 선물한.... C 기초 플러스... ㅎㅎㅎㅎ 사진으로 보자..



흐... 이거 참....


다른 책들이다...



고맙다...


은근 책 욕심이 많은 나에게.. 명서와...


그리고 봐 두면 좋을 만한.. 교양서... 그런 책들을.. 선물 했다....


이렇게 볼 책이 생길 때마다 나는 왜 이렇게 행복 할까.....


마눌 사랑해요~~ 고마워요~~~~ 공부 열쒸미 해서 돈 마니 벌어 드릴께요~~~~~~~~~~

'Book > Computor Book...' 카테고리의 다른 글

윈도우 프로그래밍......  (0) 2017.01.14
미쳤따아~~~~~  (0) 2014.04.20
C# 표준...  (0) 2013.07.17
C# Language Specification Version 5.0  (0) 2013.07.16
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

요즘 다이어트 한답시고.. 헬스장에서 런닝 머신위를 열심히 걸어 다니고 있었다..


런닝.. 머신... 런닝 머신...... 머신 러닝..........


말 같지도 않은 저런 이유로 요즘 머신 러닝... 딥 러닝 이런 주제들에 갑작스런 호기심이 생겼고.


요즘 한참 화자 되고 있는 텐서플로우를 한번 설치해 보기로 마음 먹었다.


Bit Data DB 까지 엮어 보면 좋으련만.... 이걸 Hadoop으로 엮을지.... 아님 MongoDB로 엮어 볼지는 아직 결정 하지 않았다.


그나 저나... 뭐.. 일단은 OS부터가 문제인데... 엣날엔 .. 그래도 FreeBSD 만만 했다 나름 OS설치 부터 X 윈도우 컴파일... 포트 컴파일, 폰트 컴파일 등등 해 가면서. 서버 구성도 해봤고 .... 이렇게 하다 보니 man Page 보는게 DOS Help 쳐다 보는 것 보다 훨씬 편안하게 느껴질 때도 있었다. 다 옛날 이야기 였다.


제일 처음 욕심 낸건... FreeBSD였다.. 젠장... 이거 뭐 ..... 하나도 모르겠다. 


세상은 너무 발전 했는데 난 계속 퇴보에 퇴보를 거듭하고 있었던 거다.


그래.. FreeBSD는 포기 하고.... 그냥 쉬운걸로 하자... 마음편히..... 


데미안, 레드햇, 우분투, 뭘 할까 고민 하다가 아직 한번도 안써본 CentOS를 한번 써보자 마음먹고 고고~~~~~


알고 봤더니... 뭐 CentOS가 사실 RadHat이었다. 


OS설치는 했는데 이거 참... 단순 명령어들도 기억나는건 하나도 없고... ifconfig로 확인 해야 하는 IP를 ipconfig로 확인하려고 두들겨 놓고.. 이거 뭐지 뭐지???? 라고 헤매고 있는 나 자신이 왜 이렇게 한심 하던지... 아~~ 공부 하자 ~~~~


이렇게 저렇게 삽질에 삽질...... 기본 개발툴 설치 하고 어쩌구 저쩌구.... 


막상 텐서 플로우를 설치 하려고 Tensorflow.org 사이트에서 설치 메뉴얼을 확인 하고 있는데.


기존에 파이썬으로 작성된 프로젝트가 있으면 단순 pip설치를 하게 되면 프로젝트가 영향을 받을 수 있다고 명시 되어 있었다.


뭐 오늘 OS설치 했는데 기존 Python 프로젝트가 있을리는 만무 했지만.. pip가 먼지도 모르는데. 뭐 대략 MS의 NuGet 같은 것이려니... 짐작만 하고는 그 밑에 환경을 보니 virtualenv 라는 걸로 설치를 하면 괜찮단다.


그래 모르는거 한번 해보자~~~


그리고 그냥 설치 페이지에 있는 내용을 따라하니 .. 그냥 설치 된다... 


이거 너무 쉽다. 


초보들이여... 두려워하지 말고 따라해 보자. 나같은 초보도 그냥 설치 했다... ^^;;;


자알 된다 아주 자알


참고로 텐서플로우의 GPU버젼은 MacOS에선 지원하지 않는다. Linux에서만 지원된다. 

더불어 AMD 계열의 그래픽 카드는 지원하지 않는다.


오리지 NVidia 그래픽 카드만 지원한다는 사실...... 하드웨어와 설치 OS를 확인하고 괜시레 삽질 하지 않길 바란다. 


https://www.tensorflow.org/versions/r0.11/get_started/os_setup.html#download-and-setup


요기에 설치 방법이 있다. 심심풀이 땅콩으로 가지고 놀아볼 ... 주제 하나 만들어 졌다.. ^^ 

Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

마이크로소프트 종속적인 어플리케이션 개발자로서 NuGet을 처음 경험 하였을 때의 경이로움은 정말 이루 말 할 수 없었다.


오늘은 NuGet과 비슷한 어플리케이션을 관리 하는 툴을 처음 알게 되었다.


이건 뭐..... 정말 사랑해 주고 싶다.. 나의 귀차니즘이여.. 안녕~~~~


사이트는

https://chocolatey.org 이다.


메인 페이지에 있는 스크립트를 관리자 모드의 cmd에서 복사 붙여 넣은 후 설치 하면 완료.


등록된 패키지는 clist 로 검색 ....


설치는 cinst 로 한다. 


만약 파일질라를 설치 하고 싶으면 


"c:\>clist filezilla" 로 검색.

"c:\>cinst filezilla" 로 설치...


 편하돠~~~~~~

'Favorite > Computing' 카테고리의 다른 글

Windows 10 ....에 하둡 설치 하기....  (0) 2017.04.13
Google Tensorflow ..... 설치 해보다.....  (0) 2016.10.24
Synology Nas : Docker-Gitlab upload 용량 제한 20M  (0) 2015.07.02
PowerMockup  (0) 2015.03.24
3M WP-8500 프리젠터  (0) 2013.08.09
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

Synology NAS를 구입 하게 된 가장 큰 이유는 사실 SVN이었습니다.


뭐 사실 구입 이후 문화 생활 부분에서 조금은 윤택 해짐을 느끼고 있습니다.


한동안 잘 쓰던 SVN을 접고 갑자기 Git을 쓰고 싶어서.. Synology NAS에 기본 포함된 Git을 쓰려고 하니.. 이거 참 난감한 겁니다.


난감한 이유가 시놀로지 나스에 기본 포함된 Git은 SSH프로토콜만 사용하고 있는 거였습니다. 결국 외부 확장 프로그램들 즉 Tortoise Git 같은 것들의 도움을 받아야 좀 수월해 질 수 있었습니다.


그런데 전 외부 확장프로그램을 쓰고 싶다기 보다 Visual Studio 에서 Git을 이용할 수 있었으면 했습니다. 이력관리 도구가 너무 좋거든요. SVN 과는 비교도 되지 않을 정도로 훌륭합니다.


그런데 Visual Studio 의 Git Provider는 HTTP 프로토콜만 지원합니다.


별 오만가지 방법을 다 동원하고 테스트 하고 실험 하였습니다만.. 끝내는 그냥 포기 하고 말았습니다. 그냥.. PC Git을 설치 하는게 오히려 더 편하고.. 확장성이 더 좋았기 때문입니다.


그런데 어느날... Synology NAS에 가상화 솔루션 Docker가 포함된 겁니다.


그리고 좀 있다가.... GitLab 이 Docker에 포함 되었는데. 이 GitLab이 나름 그래도 꽤 유명한 Git Server에 마일스톤 관리 및 이슈트래킹을 할 수 있는 도구 입니다. 혼자 가지고 놀기는 정말 딱이죠.


이게 웬 떡이냐~~~ 바로 함 해봐야 겠다 라고 생각할 즈음.. 정말 아끼는 동생으로 부터 또 다른 제보를 받았습니다.


소스트리에 좀 사이즈가 큰 파일을 첨부 하여 커밋 푸쉬 하려고 하니 원격서버에서 자꾸 뱉어 낸다는 겁니다.


그래서 인터넷 검색을 해 봤더니. 용량 제한이 있다고 인터넷에 기사가 올려져 있다는 겁니다.


인터넷에서 하라는 데로 다 해봤는데 안된다는 겁니다.


이거참... 그래서 저두 빨리 해 봐야 겠다고 생각 하며 오늘 오전 Reposirory를 만들고. 사이즈가 좀 큰 동영상 file 하나와 PDF문서 하나를 커밋 하고. 바로 Push~~~~~~~~

올라가는지 관찰 하려던 찰나.. 다음과 같은 오류가 터지며 뱉어 내 버리는 겁니다.

fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
error: RPC failed; result=22, HTTP code = 413
Everything up-to-date

뭐 구글링 약간 하다 보니 몇가지 방법들이 보입니다. 문제는 이것이었던 거죠... 웹서버가 대용량 파일일 경우 뱉어 버리는 겁니다.


역시나 개발자의 천국 이라는 Stackoverflow에는 정확한 해결책이 제시 되고 있습니다.


http://stackoverflow.com/questions/7489813/github-push-error-rpc-failed-result-22-http-code-413

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


If you get error 413, then the issue doesn't lie with git but with your web server. It's your web server that is blocking big upload files.

Solution for nginx

Just load your nginx.conf and add client_max_body_size 50m; ( changing the value to your needs ) in the http block.

Reload nginx to accept the new config by executing sudo service nginx reload and try again to push your commit over http.

Solution for Apache

In your httpd.conf add LimitRequestBody 52428800 ( changing the value to your needs ) inside a <Directory /> block. Doing this you can limit the request of the whole server filesystem, just a single Virtual Host or a directory.

I hope this helps.

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


그런데 이눔의 제 나스는 이 해결책 대로 열심히 했는데 안되는 겁니다. 


문득 드는 생각이 가상화 솔루션이므로 혹시 Docker에서 뭔가 걸르는게 아닌가 싶더군요. 


https://registry.hub.docker.com/u/sameersbn/gitlab/


이 문서를 쭉 보다 보면.. 해결책이 보입니다. 답은 말이죠 바로.. 이겁니다.


일단 SSH 터미널을 오픈 합니다. 그리고 root 계정으로 로그인 하세요. 그 다음.. 아래 파일을 vi로 오픈 하세요


/usr/syno/etc/packages/Docker/synology_gitlab.config


그리고 다음과 같이 추가해 주세요.


{

"key" : "NGIX_MAX_UPLOAD_SIZE"

"value" : "1000m"

}


물론 위 Stackoverflow에 달린 답변 처럼. 


etc/nginx/nginx.conf


파일도 수정해 주셔야 합니다. 그리고 리부팅... 하면 됩니다.


오늘 이걸 해결 하느라구 하루 종일 걸렸네요. 어찌 되었든... 이제 정말 자알 사용 할 수 있을 듯 합니다.  

'Favorite > Computing' 카테고리의 다른 글

Google Tensorflow ..... 설치 해보다.....  (0) 2016.10.24
어플리케이션을 쉽게 설치 하자. chocolatey  (0) 2016.01.23
PowerMockup  (0) 2015.03.24
3M WP-8500 프리젠터  (0) 2013.08.09
외장 하드디스크...  (0) 2010.04.07
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,


정말 어려운 주제 입니다.. 디펜던시 인젝션이라는 주제는... 이걸 어떻게 설명 해야 할지 참 난감 합니다.


저의 블로그에도 이전에 이 주제를 가지고 한번 포스팅을 한적이 있습니다. 


http://iopeni.tistory.com/entry/Dependency-Injection-Container


Dependency Injection in Action 이라는 책을 보면 DI를 가정집에 전기 콘센트로 비유 하고 있습니다. 뻔한 내용 이겠죠? 헤어드라이든 냉장고든 TV든 콘센트에 꽂혀야 동작을 하니 콘센트는 하나의 가전 제품에 생명력을 불어넣어 주는 ~~ 신비한 곳입니다. 만약 집에 있는 가전 제품들이 모두 특수한 가전제품이라 각기 다른 전기 어댑터를 지니게 된다면, 아마 콘센트의 양은 정말 어마 무시하게 많아 지겠지만, 다행 스럽게 대한민국의 콘센트는 같은 모양을 지니고 있습니다.


이런 일을 컴퓨터 언어적인 측면에서 설명을 하자면, 추상 클래스와 인터페이스 같은 것들로 설명을 할 수 있습니다. 

즉 다형성이라는 주제 인걸로 보입니다. 추상이나 인터페이스의 목적이 좀 모호합니다만, 알고보면 별거 아닙니다.

 

사실 정확하게 이야기 하자면 추상은 인터페이스와 비교하면 목적 자체가 틀립니다. 추상은 콘센트 라기 보다 가전 제품의 종류 입니다. 세상에 에어컨이 있는데 이 에어컨의 종류가 벽면 에어컨도 있고 스탠드 에어컨도 있고 지붕에 달려 있는 에어컨도 있고... 많은 형태의 에어컨이 존재 하지만 모든 에어컨은 공통인 것들 즉 에어컨은 바람이 나오고, 실외기가 있어야 하고, 프레온 가스로 찬 바람을 만들고, 등등 기본적인 성격을 모든 에어컨이 지니게 되는데 이것이 바로 추상 클래스 입니다. 프레온 가스가 있는 이 프레온 가스는 A 회사 제품도 있고, B회사 제품도 있고 다 틀리니 말이죠.


인터페이스는 다릅니다. 


인터페이스는 항구, 공항, 콘센트, 주유소, 세차장, 책장 등과 같습니다. 항구에는 수많은 종류의 배들이 정박 할 수 있는 곳이며, 공항은 수많은 종류의 비행기가 뜨고 내리는 곳입니다. 하나의 객체와 또 다른 객체를 이어주는 연결 고리 라고 생각 하면 됩니다.


물론 이런걸 관점주의적 프로그래밍 이라는 주제로 바라 보면 또 약간의 차이점이 발생 하기도 합니다.


각설하고 말이죠 더 깊에 설명 하려고 하면 골 때리고, 닭이 먼저 인지 달걀이 먼저인지.... 니가 나 인지.. 내가 너 인지 모르는 사태가 발생 할 수 있으므로 우리는 여기서 딱 한가지만 정하고 가야 할 듯 합니다.


오늘은 인터페이스 입니다. 인터페이스 하나만 알면 됩니다.


이걸로 디펜던시 인젝션 이라는 주제를 설명 하고자 합니다. OOP적 관점에서의 인터페이스 라고 하면 이 아무것도 아닌 개념이 정말 난해하게 느껴져 절망을 부르짓고 있는 분이 계실지도 모르겠습니다.


사실 디펜던시 인젝션의 모든 테크닉은 이 인터페이스 에서 비롯 됩니다.


하나의 클래스에서 맴버가 등록 되는데 이 멤버의 타입이 인터페이스 인겁니다. 즉 맴버는 인터페이스를 상속 받은 다양한 클래스들이 이 멤버에 대입 될 수 있으며, 정보를 취득 가공함에 있어 형 변환 연산이 필요하지 않은 것입니다.


마이크로 소프트는 유니티를 다음과 같이 설명 하고 있습니다. https://msdn.microsoft.com/library/ff647202.aspx


오늘 우리는 이 유니티 컨트롤을 사용하는 기초적 용법을 습득하고 다음 포스트에서 다시 프리즘으로 넘어가서 또 다른 주제를 풀어 볼까 합니다.


콘솔로 또 헬로우 월드를 표시 하는 걸로 이 샘플을 예시 합니다. 일단 콘솔 어플리케이션 프로젝트를 하나 생성 합니다.


그리고 NuGet 패키지 관리자를 실행 시키고 Unity를 찾습니다.


화면으로 보여 드리죵~



요걸 설치 하시면 됩니다. 


코드 봐야 겠죠?



재미있는건 우리가 알고 있는 간단한 IoC 컨테이너는 타입을 넣어 주고 new로 생성된 인스턴스를 넣어서 사용 하고자 할때 타입으로 찾아 꺼내 쓰는 모습 이었는데 이건 좀 다르게 보입니다.


이녀석은 우리가 new를 사용하지 않아도 자신이 new를 해서 반환해 줍니다. 이렇게 생각 하면 좀 이상하게 보이는게 있는데 new를 하는게 언제하냐는 겁니다. 


그래서 아주 간단한 방법으로 테스트 해 보았습니다.


Container.ResisterType 항목을 주석 처리 하고 Resolve에 직접 클래스를 적어주니 객체를 생성해서 반환 합니다.

다음과 같이요..


var test = container.Resolve<Hello>();


와 같이요... 


혹시 기억 하실지 모르겠습니다. Prism 1 에서 MainWindow 를 Resolve 하던 코드를... 거기에선 ResisterType을 하지 않았습니다.


그럼 ResisterType은 무엇일까요? 이건 Dictionary<T, T> 를 사용해 보신 분이라면 아실껍니다. 키를 가지고 실 데이터를 찾게 되는데 그 실 데이터의 타입을 정해 주는 겁니다. Dictionary와 같습니다. 단~ 틀린게 있다면 딕셔너리는 Object 를 등록하게 되지만 여기서는 Type을 등록 하네요~ 즉 정확한 의미는 이겁니다. 만약 인터페이스 타입으로 누군가 Resolve를 요청 하면 이 클래스를 생성해서 반환 하도록 한다.. 라는 사전 지정 입니다.


한번 생각해 보도록 하죠. 만약 유니티 컨테이너를 특정 유틸리티 클래스의 static member로 놓고 거기에 오만 가지 사용하고 있는 클래스를 등록 합니다. 예를 들어 이런 것들이요.. Logger나 File처리 클래스, 통신 클래스 같은 것들이요. 필요할 때 마다 불러서 쓸 수 있겠네요. 프로젝트 전역에서. 참 유용 하겠죠? 


한가지 더 주의 사항이 있습니다. container.RegisterType<IISayHelloWold, Hello2>(); 여기서 interface가 Key 입니다. 


같은 Key를 두번 등록 하면 어떻게 될까요? 바꿔 치기 됩니다. 주의 하시기 바랍니다.


오늘도 수고 하세요~   

Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

Prism 1 포스팅에 이어 두번째 포스팅이다. 


우리는 프로젝트 수행 중 몇가지 요구 사항으로 인하여 프로그램 런타임 시에 동적으로 어셈블리를 로딩 하여야 할 경우가 있다. 이럴 때 리플렉션을 이용하여 할 수 있다는 것은 누구나 다 알고 있는 내용일 것이다. 물론 리플렉션은 프로젝트의 타입 안정성을 해친다는 등 단점들이 존재 한다. 리플렉션을 이 포스트에서 논하는 것은 범위 밖 이므로 리플렉션은 MSDN을 참고 하기 바란다.


리플렉션을 자세히 보시려면 이곳을 클릭 -> https://msdn.microsoft.com/ko-kr/library/ms173183.aspx 


원격지 모듈 로딩은 프리즘을 이용하여 원격지에 있는 구성 요소를 로딩 할 수 있는 방법이다.




포스트 1에서 작성 하였던 ModuleA 모듈을 일단 분리 하였다. 이 후 시작 프로젝트에 ModuleCatalog.xaml 을 생성 속성을 다음과 같이 수정 한다. 



코드를 확인 하자.


중요한 것은 xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;

assembly=Microsoft.Practices.Prism.Composition"

Modularity 클래스는 Ref 참조 와 ModuleType 이 필수 항목이다. Ref는 설명하지 않아도 될 듯 하다.

단지 ModuleType 만이 약간의 설명이 필요해 보인다. 


ModuleType의 첫번째 요소는 Type을 표시 한다. 두번째 요소는 Namespace를 의미 하며, 세번째 요소는 Version을 의미 한다. 프로젝트의 AssemblyInfo 클래스를 참조 하자.


이제 이 포스트의 마지막 요소이다. ModulesCatalog.xaml 을 만들었으니 Bootstrapper가 이 xaml 파일을 파싱 로드 해야 할 것이다. 





이상이다. 정말 쉽게 할 수 있다는 것을 알 수 있다. 리플렉션에 비하면 말이다.

Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,