[.NET] 달랑 3줄로 동영상 플레이어 만들기

May 22nd, 2008 No Comments »

1. 무작정 Visual Studio 2008을 띄우고 C# WinForm 프로젝트 생성
2. [Add Reference]에서 Microsoft.DirectX.AudioVideoPlayback를 추가해주고(DirectX는 깔려 있어야 함)
3. Form을 더블 클릭하고 다음과 같이 쳐준다.

using Microsoft.DirectX.AudioVideoPlayback;
private void Form1_Load(object sender, EventArgs e){
    Video v = Video.FromFile(@"c:\test.avi");
    v.Owner = this;
    v.Play();
}

4. F5를 누른다.

근데 안된다.

[Debug]-[Exceptions]-[LoaderLock]의 Thrown 항목을 꺼준다.

loaderlock.png
5. F5를 누른다.

ㅋㅋㅋ 성공 ….
form1.jpg

[잡설]
이번 일주일간 WDM 디바이스 드라이버 프로그래밍 교육중이다.
Kernel Mode 프로그램에서는 좀만 잘못하면 블루 스크린…
오랜만에 보는 VisualStudio… 안보던 사이 많이 바뀌었었네…

[ruby] (가..힣).each{|x| print x}

May 14th, 2008 No Comments »

루비 공부 시작한지 다음날 문득
Unicode의 한글 영역을 전부 출력하는 프로그램을 ruby로 짜면 어떻게 될까 궁금해 졌다.

머리 속에서는 직관적으로

(가..힣).each{|x| print x}

란 코드가 떠 올랐다. 겁나 멋지다.
‘가’의 Unicode가 AC00인지 모르더라도 (’힣’의 코드 값은 외우고 있지도 않다.) Range가 지원해주지 않을까?

다른 언어라면 분명 루프가 빙빙 돌고,
‘가’가 아닌 AC00부터 code값을 증가시키면서…. 어쩌구 저쩌구 하는 코드가 될터인데….

근데 안돈다.
더 정확히는 도는듯 하다 만다.

이유는 ruby String의 내부처리가 UTF-8이어서 그랬다.
이런 젠장….

UTF-8도 Unicode 인코딩 기법중 하나 맞고, 나름 장단이 있는 유니코드 인코딩이지만,
직렬화나, 네트웍 전송시에나 적합한 인코딩이고, 메모리 내부 처리는 UCS2나 하다 못해 UCS4로 처리함이 맞다고 본다.
그래야 기껏 Unicode에서 욕먹어 가면서 현대 한글 11072자 모두 할당 받아 한글 처리가 조합형처럼 처리가 가능하고, 한글 소팅 문제나…..
기타등등…(욕까진 안먹었나? 하지만 눈치 보면서…)

아마도 ASCII가 1byte로 인코딩되는 점 때문에 (영어권 프로그래머의…)힘에서 밀린듯 하다.

암튼 String succ메소드를 건드리고야 말았다.(별 바람직해 보이진 않지만…)

class String
	def succ
		head = self.unpack('U*')
		tail = head.pop
		return head.pack('U*') + [tail + 1].pack('U*')
	end	
end

("".."").each{|x| print x}
("".."").each{|x| print x}

#"가나다".each_char {|x| print x}
puts "가나다".succ
가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬
갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓걔걕걖걗걘걙
...
힟힠힡힢힣あぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとど
なにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん가나닥

가능성은 희박하겠지만, ruby 2.0에서는 제발 UCS2나 4로 String 내부처리가 바뀌었으면 하는 바람이다.

[ruby] ruby 몰입교육중…

May 14th, 2008 No Comments »

회사 업무에, 용도에 따라 주로 다양한 언어를 사용하지만,
한번 쓰고 말거나, 간단한 처리는 주로 perl을 이용한다.
주로 하는 일이 UI가 필요없고,
주로 Unix환경인데다가,
text처리가 대부분이라 regula expression 이 강력해서 perl이야 말로 아주 적격이다.

ruby란 언어를 처음 접한건 1999년도 일본서 공부할때다.
자연어처리 연구실이라 그곳 역서 text처리가 대부분이다.
ruby 공부하던 인간도 몇 있었지만, 그저 취미 일뿐,
실용적인 측면에서는 그 연구실 조차 perl이었다.

그래서 나도 perl을 그곳에서 배우기 시작했다.
Unix + Emacs + Perl.

그랬던 ruby가 몇년 전 부터 하도 유행이라, 나도 공부해 보고 업무에도 적용해 보고 싶었지만,
팀에 초 고수 perl 본좌가 2명이나(noise & gogma) 있는 바람에
혼자서만 ruby코드를 양산할 수 없어서, 나도 친숙하고 모두가 다 아는 perl 이 주종이었다.

최근에 이 둘을 꼬셔서 루비 공부 시작…

꼬시는데 뭐 어려운거 없었다.
황대산 님의 20분짜리 가이드한번 보여줬더니
바로 루비 광신도로 변신…

회사 도서관에 있는 ‘Programming Ruby’를 죄다 빌려다 모두 공부 중.

근데 도대체 대충 읽을 수가 없다.

한줄 한줄 의미를 곱씹으니 아주 오묘하다는 것.
특히 문법 설계가 아주 예술이다.

예전에 신군이랑 메신저로 잠깐 나눴던, Code Block이랑 Meta Programming이 왜 필요한지 왜 써야 하는지 이해가 가지 않았는데,
이것참 물건이다.

당분간 루비 얘기로 블로그가 도배될꺼 같다.

Mac에서 시리얼 로그 보기

March 5th, 2008 No Comments »

21세기인 지금에도 많은 기계들이 시리얼 포트를 사용하고 있다.

TV나 STB같은 경우는, AS나 디버깅 용으로,
그리고 많은 천체장비들은 아직도 시리얼통신이 주가 아닌가 싶다.

업무상 TV의 시리얼 로그를 봐야하는 경우가 종종 있는데….

맥에서는 여태까지 어떤 프로그램으로 해야 하는지 몰랐는데.

일단
Windows에서는 TeraTerm을 많이 사용하는거 같은데
Mac용으로는 어떤프로그램으로 보는지 몰랐다.

시리얼 로그를 보는 프로그램으로는

  • Minicom
  • Zterm
  • Screen

이 있고

minicom이 가장 낳아 보였고, 간결함은 screen이 압도적인거 같다.
심지어 screen은 설치도 필요없이 기본 내장이다.

Mac에 시리얼 포트가 없으므로 USB2Serial 젠더로 연결하고 해당 드라이버를 설치하면
/dev/tty.usbserialXXXX 라는 디바이스가 보일 것이고

$screen /dev/tty.usbserialXXXX 9600

[java] reflect on java

November 13th, 2007 No Comments »

회사서 Class를 조사할 일이 있는데 reflect를 까먹어서 한동안 googling 해서 다시 학습…

java.lang.String의 method를 출력하는 루틴의 골자만 요약하면….

import java.lang.reflect.*;

public class ClassExam{

    public void printClassInfo(String className){
        try{
            Class a = this.getClass().getClassLoader().loadClass(className);
            Method[] methods = a.getDeclaredMethods();
            for(int i=0; i<methods.length; i++){
                System.out.println(methods[i].toString());
            }		
        }catch(Exception e){
        }
    }

    public static void main(String[] args){
        ClassExam a = new ClassExam();
        a.printClassInfo("java.lang.String");
    }
}

Java programming시 유용한 사이트

July 5th, 2007 No Comments »

almanac14a.jpg
나처럼 코딩할때, 웹브라우저 부터 실행하고, 각종 프로그램 조각들을 cut&paste 해서 완성해가는 코드몽키들에게 Java Programming 할때, 아주 유용한 사이트.

회사서 testcase 개발할때, 아주 많은 도움이 되었기에 여기에 포스팅.

me2day 브라우저 만들다.

April 20th, 2007 1 Comment »

최근에 me2day 시작했다.
중독성 심하다는 말에 그냥 괜한 말인줄 알았는데…

steelheart 님의 me2day 파도타기란거 보고서 나도 만들어 보고 싶어서 me2day 브라우저란걸 만들었는데…

차이점이 있다면, steelheart님은 java인거 같고,
내꺼는 me2day의 friends.xml을 가져와서 friends.xslt로 그냥 렌더링 해버리는 거다.
그러므로 만드는데는 몇분 걸리지도 않았다.

기술적으로야 어떻건 간에 만들고 보니, 이거 완전 플톡스러운? 짖 아닌가???

steelheart 님에게는 사실대로 이실직고 하였고,

간추린 xslt는 대략 다음과 같다.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/friends">
   <h3><xsl:value-of select="@friends_of"/>'s friends (<xsl:value-of select="count(friend)"/>명)</h3>
   <ul><xsl:apply-templates match="friend"/></ul>
</xsl:template>

<xsl:template match="friend">
   <li>
      <xsl:value-of select="@user_id"/>
      <a>
         <xsl:attribute name="href">/wp/me2day/?id=<xsl:value-of select="@user_id"/></xsl:attribute>
         <img><xsl:attribute name="src"><xsl:value-of select="profile_image"/></xsl:attribute></img>
      </a>
   </li>
</xsl:template>

</xsl:stylesheet>

IE7, FireFox, Safari 에서 블로그 검색을 쉽게 하기

March 15th, 2007 No Comments »

하늘의 닷넷의 검색 메뉴
어느 블로그나 검색 메뉴가 있다. 나의 경우는 show menu를 누르면 사이드 바가 뜨고 검색 메뉴가 있다. 혹은 사전을 위해서 dic.naver.com을 찾아가거나 한다.
매번 해당 블로그나 사이트에 가서 메뉴가 있는 곳 까지 찾아 가서 검색을 하는게 가끔 번거러울 때가 있다.
이를 좀더 쉽게 해보자.

Safari

safari

MacOSX의 사파리의 경우에는 예전부터 sogudi라는 플러그인이 있어서, 이미 잘 사용하고 있었다.
safari에 sogudi를 설치하면 다음과 같은 설정창에서
hanury -> http://hanury.net/wp/index.php?s=@@@
와 같이 검색할 파라미터를 @@@로 해서 검색 URL을 입력해 두면, 주소창에 URL 형태가 아닌 “hanury 검색어” 처럼 입력하면 @@@를 검색어로 치환해 주는 플러그인이다.
이를 이용해서, 영어 사전은 eng, 이미지 검색은 img 등으로 설정해서 편하게 사용해 왔다.
나에겐 MacOS 설치시 필수 항목으로 자리잡았다.sogudi
단점은 주소를 UTF-8으로 보내기 때문에 국내 사이트중 대부분이 KSC-5601_1987로만 받아서 깨지는 경우가 많다.
Naver도 그중 하나이다.

OpenSearch이런 와중에 OpenSearch에서 이런 부분을 xml 스키마 형태로 표준화 했고,
IE7과 FireFox가 지원하기 시작했다.

FireFox

FireFox

ff-search1.png
OpenSearch에서 정의한 대로 Search Provider XML을 작성해서 searchplugins 폴더에 놔 두면 된다.
MacOSX용 FF의 경우라면 Package 내 Contents/MacOS/searchplugins/ 에 해당한다.

직접 편집하는 만큼 자유도가 높다.
재밌는건 아이콘을 넣을려면, Base64로 인코딩 된 스트링을 알아야 하는데, 내 경우에는 아이콘 파일을 나한테 보내서
메일 메시지의 [본문 원본보기] 로 알아냈다. (아마 더 낳은 방법이 있을거 같은데…. 암튼.)

또 다른 방법으로 [검색 사이트 관리...] - [추가할 검색사이트 찾기]를 눌러보면
다른 사용자들이 올려놓은 사전등의 SearchProvider 들이 등록되어 있다.
입맛에 맞게 골라 쓰면 된다.

OpenSearch 용 XML내용은 대략 다음과 같다.

<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
   <ShortName>Hanury</ShortName>
   <Description>Hanury.NET Search</Description>
   <InputEncoding>UTF-8</InputEncoding>
   <Image width="16" height="16">data:image/ico;base64,Qk04AgAAAAAAADY
         AAAAoAAAAEAAAABAAAAABABAAAAAAAAICAAASCwAAEgsAAAAAAAAAAA
         AATlpvYm9mTmLTahRvsG7RbvJu8m7RDlYOUpNeem+8c5xze284Z5FW5Vk
         Wa753e284Z+tVhlVGUQRF4zwFOQ5Km3Obb/Veb1LDVa9 ...
   </Image>
   <Url type="text/html" method="GET" template="http://hanury.net/wp/index.php">
      <Param name="s" value="{searchTerms}"/>
   </Url>
   <SearchForm>http://hanury.net/wp</SearchForm>
</SearchPlugin>

IE 7

IE 7

ie-search.png
Microsoft IE7 도 OpenSearch 표준에 참가해서 IE 7 부터 FF 와 같은 방식의 SearchProvider를 제공한다.
FF와 같은 표준을 구현하였기에 대략 비슷하지만 각각 차이가 있다.

  • FF가 icon을 제공하는데 반해 IE는 제공하지 않는다.
  • FF, IE 모두 남들(혹은 서비스 제공자)가 만들어 준 SearchProvider를 쉽게 추가할수 있다.
  • 하지만 IE에 좀더 후한 점수를 주고 싶은 건 [Find more Provider] - [직접 만들기] 기능이다.
    naver 사전이나, 가격 검색 등은 남들이 만들어 주겠지만, 나만을 위한 SearchProvider는 제공 받을리 만무 하다.
    이럴때 FF는 내가 직접 XML을 편집해서 만들 수 있지만, xml 편집 조차 부담스러워 하는 사람들에게는 IE의 [직접 만들기] 기능은 상당히 매력적이다.
  • sogudi와 비교해서는 추가 설치하지 않아도 된다는 점
  • sogudi가 UTF-8만 지원하는데 반해, [직접만들기]-[여기를 클릭]을 누르면 입력 옵션이 더 늘어서 인코딩 등을 추가 설정해 줄수 있다.(국내 사이트를 위해서 중요하다.)

직접 만들기
safari의 sogudi의 @@@ 처럼 검색어를 대문자 TEST로 해서 입력하고, 이름을 입력하고 바로 밑에 있는 [설치] 단추를 누르면 끝.
한동안 시장 점유율만 믿고, IE6에서 개발을 한동안 중단했던 거만함도, MS가 몇년전부터 노래부르던 UX를 위해 IE7을 통해, 그동안 아쉬웠던, TabBrowsing, RSS 지원, OpenSearch 등등 긍정적인 방향으로 나아가는거 같다.

본인의 경우는 각종 사전류, 회사 프로젝트에 사용하는 trac, 그리고 내 블로그 검색 용으로 개인용 SearchProvider를 만들어 사용하고 있다.

Mac 용 Java program 만들기??

March 13th, 2007 No Comments »

Hello.java 가 있다고 하면

$javac Hello.java

로 컴파일 가능하다.

jar로 묶기 위해서
manifest.mf 파일을 만들고 안에
Main-Class: Hello
라고 public static void main(String[] args)을 포함한 시작 클래스를 적어둔다.

$jar cvfm hello.jar manifest.mf Hello.class

를 실행하면 여러 파일을 묶을수도 있고, 압축도 해주며 java -jar 로 실행도 가능하다.
여기까지는 일반 jar 만들기 이고…


xmlviewer.png
허접하지만 내가 만든 Xml Viewer이다. xml 파일을 끌어다 속성창에 떨어뜨리면 swing tree 보기로 보여주는데, exception 처리를 거의 하지 않아 외부 entity나, dtd를 참조하거나 하면 여지없이 exception 발생
암튼 본인 업무상 쓸일이 있어서 만들었다.

일반 macosx용 응용프로그램 처럼 보이지만 패키지 보기로 보면 jar로 묶인 자바 프로그램이란 걸 알 수 있다.

일반 macosx용 응용 프로그램 처럼 더블클릭으로 수행되며, 독에 포함 할 수도 있다.
info.png

ANT를 사용한다면 sorceforge에서 JarBundler라는 Task로 제공되어 쉽게 jar를 mac App로 만들어 주나 본데, 패키지 않에 있는 inpo.plist만 수정해주면 금망 jar로 mac App로 변신 가능
스크린 샷에서 처럼
Root-Java-

• Arguments
• ClassPath
• JVMVersion
• MainClass

이정도 값만 세팅해주면 끝.
자세한 내용은 Apple Dev 페이지에…

3n+1

January 10th, 2007 No Comments »

이전글(messier 페이지에 type icon 표시 추가)을 올렸더니 allblog에서 같은 카테고리 blog article로 3n + 1 문제 코딩가 올라와서 호기심에서 perl 로 짜 보았다.

원 문제 내용http://acm.uva.es/p/v1/100.html

무지 간단해 보이는 데 타이틀 까지 건 이유가 뭔지 궁금해 호기심에서 짜 보았다.
게다가 정말 간단해 보이는데 이문제가 NP 문제라는게 더욱이 그러했다.

내가 짠 perl code는 이렇다. (짜는데야 타이핑 시간 1분여가 소요되었지만, 원 문제를 곱씹어 보면서 영어 해석하는데 좀 시간이 걸렸다. 쉽다고 댐볐지만, 내용의 깊이는 그리 간단한게 아니었다.)

#!/usr/bin/perl
use strict;

sub three_n_plus_one($){
	my ($n) = @_;
	print $n . " ";
	exit 0 if $n == 1;

	if($n % 2 == 1){
		three_n_plus_one(3 * $n + 1);
	}else{
		three_n_plus_one( $n2 );
	}
}

sub main(){
	three_n_plus_one(22);
}

main();

문제의 특징은:

  • 가정: 자연수를 주면 반드시 끝난다.
  • 간단해 보이는 알고리즘에도 불구하고, 이 가정이 사실인지는 알려져있지 않다.(아직은??? 영원히…)
  • 0 < n < 1,000,000사이에서는 그렇다는게 알려져 있다.

이정도???….

여러 숫자를 넣어 보니, 원 글에서 처럼,
… 5 16 8 4 2 1 로 수렴하며 끝나긴 끝났다.

참고로, 입력이 1,000,000,000,000,000였을 때
결과는

Continue reading »