큰맘먹고 질렀습니다.
벽에 똥칠할 때까지 써야겠습니다-_-

13.1인치의 큰 화면에 1.48KG이라는 가벼운 무게에 반해서 사게 되었습니다-_- 느낀점은 1.48kg이나 2.4kg이나 1.2kg이나......오래 들고 다니면 무겁다입니다-_-

또한 매력을 느낀점은 STAMINA모드와 SPEED모드가 된다는 것입니다.
STAMINA모드를 사용하면 그래픽카드는 GMA4500HD로 바꿔버려서 더욱 오래 쓸 수 있도록 하구요. SPEED모드는 Geforce 9300mgs으로 해서 빠르게 사용하는데 오래 못씁니다.
스펙에는 최대 5시간이라고 써있는데, 아마 wireless도 끄고, 아무것도 안하는 상태에서 켜놔야 5시간이지 않을까요-_- 네이버바이오카페에서 말을 들어보면 4시간 넘게 가는 듯하네요 ^^ 대용량베터리를 쓰면 7.5시간 간다고 하는데, 대용량베터리는 얼마지-_- 9셀인가......

또다른 큰 매력은 13.1인치에서 1600x900해상도는 소니꺼 밖에 없습니다-_- 해상도에 반해서 구입했습니다-_-

사용자 삽입 이미지
사용자 삽입 이미지
우선 안 좋은 컴퓨터 쓰다가 갑자기 빠른 컴퓨터를 쓰게 되서 그런지 엄청 좋네요. 램도 4기가고 CPU도 2.66듀얼이고^^

단점은 많이 알려진대로 소음이 심하구요(전에 쓰던 도시바 노트북이랑 뭐 비슷하네-_- 그래서 그런지 시끄러운지 잘 모르겠어요-_-),
멀티탭이 문제가 있으면 전기가 온다고 하는데, 터치패드 좌우부분에서 전기가 올라요-_- 찌릿찌릿 합니다.
그리고 다들 노트북이 많이 약하다고 합니다. 딱 봐도 약하게 생겼어요. lcd부분이 굉장히 얇거든요. 이거 부서지만 몇십만원주고 고쳐야한다고 하네요. 노트북값도 장난아닌데......관리 잘해야지ㅜ
사용자 삽입 이미지

얇은 lcd-_-


또 있습니다. USB슬롯이.......2개입니다 OTL.....젠장 1개만 더 있었어도ㅠ 저는 데탑 대산에 사용하는 노트북이라 키보드랑 마우스를 연결해서 쓰거든요. 키보드용, 마우스용  USB를 꽂아버리면 나중에 결제나 USB가 필요할 때....키보드꺼를 뽑아야합니다.......-_- 젠장......

그리고 소니노트북의 특성인 초특급 구린 사운드가 있습니다. 예전 도시바 노트북은 제 2만원 짜리 스피커보다 좋은 소리를 냈었는데(하만카돈인가 하는거라던데 음질이 확실히 좋더군요^^), 이건뭐 라디오 지지직으로 듣는 것 같아요. 그래도 스피커는 뭐 상관없어요^^ 스피커에 연결하면 되니-_-

그래도 가장 큰 장점은 매우 밝고 선명한 lcd겠지요^^ 최고입니다. 게다가 해상도도 높고,집용 모니터lcd를 보다가 노트북 lcd를 보니 집에 있는 lcd가 구리다는 것을 알게 되었어요.

평점을 주자면 ★★★★☆ 별 4개! 별 한개는 다른 거 다필요 없고 usb구녕때문에 깎인겁니다.
사용자 삽입 이미지

노트북 간지는 VAIO랑 맥북이 짱입니다.


 
Posted by 머드초보
,
 
음... air.swf를 이용하면 설치된 애플리케이션을 실행할 수 있으며, Adobe AIR가 설치가 되어있지 않으면 설치도 할 수 있는 기능이 있는 SWF입니다.
http://airdownload.adobe.com/air/browserapi/air.swf

음....문제점이 한쪽에서 air.swf를 로딩하고 나서 getApplicationVersion(애플리케이션이 설치되었는지 확인하는 함수)을 하고 있습니다. 그런데 다른 한쪽에서 air.swf를 로딩해서 getStatus(air가 설치되어있는지 상태값 받기)를 하면 air가 설치 되어있음에도 불구하고 available(AIR설치는 안되어있으나 설치가 가능함)을 받는 경우가 발생합니다.

그래서 더 찾아보니 우야꼬님의 글을 보다가 알았는데요. air.swf 없이도 AIR애플리케이션을 설치하고 실행할 수 있다고 한다는 글을 보았습니다. 그래서 이 현상이 버그인지 확인해보려고 직접 구현하려고 했지만........-_-
생각보다 조낸 어렵네요-_- 우야꼬님께서 ProductManager클래스를 이용해야 한다는 힌트만 주셔서 ㅠ
ProductManger는 뭐하는 놈인지 검색해도 잘 안나와요-_- 어디서 뜯어봐야하는지ㅠ 근데 이놈을 이용해서 AIR애플리케이션을 리스타트하는 프로그램을 만들 수도 있더라구요.
http://www.hufkens.net/2009/03/how-to-restart-an-air-application-from-code/
productmanager가 air프로그램 실행하고 그러는 것 같긴 한데, launch라는 함수가 있는데 이것에 대한 커맨드라인 명령어 같은 게 설명이 잘 안나왔네요 ㅠ

암튼, air.swf를 로딩해서 getApplicationVersion을 무한 반복하는 애플리케이션을 만들고, 그걸 2개를 띄워볼께요-_-
AirService.as
[code]package
{
    import flash.display.Loader;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;
   
    public class AirService extends EventDispatcher
    {
        private var _loader:Loader;
        public var _service:Object;
       
        public function AirService()
        {
            _loader = new Loader();
            var context:LoaderContext = new LoaderContext();
            context.applicationDomain = ApplicationDomain.currentDomain;
            _loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
            var swf:String = "http://airdownload.adobe.com/air/browserapi/air.swf";
            var request:URLRequest = new URLRequest(swf);
            _loader.load(request, context);
        }
       
        private function initHandler(event:Event):void
        {
            _service = _loader.content;
            dispatchEvent(new Event(Event.COMPLETE));
        }
       
        public function getStatus():String {
            return _service.getStatus();
        }
       
        public function getApplicationVersion(applicationId:String, publisherId:String, callback:Function):void
        {
            _service.getApplicationVersion(applicationId, publisherId, callback);
        }
       
        public function installApplication(url:String, runtimeVersion:String, parameters:Array = null):void
         {
            _service.installApplication(url, runtimeVersion, parameters);        
         }
        
         public function launchApplication(applicationId:String, publisherId:String, parameters:Array = null):void
         {
             _service.launchApplication(applicationId, publisherId, parameters);
         }
    }
}[/code]
Main.mxml
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical" verticalAlign="middle"
    applicationComplete="applicationCompleteHandler()" width="100%" height="100%">
   
    <mx:Script>
        <![CDATA[
            import adobe.utils.ProductManager;
           
            private var airService:AirService;
           
            private function applicationCompleteHandler():void
            {
                airService = new AirService();
                airService.addEventListener(Event.COMPLETE, completeHandler);
            }
           
            private function completeHandler(event:Event):void
            {
                trace(airService.getStatus());
                ta.text += airService.getStatus() + "\n";
                if (airService.getStatus() == "installed")
                {
                    airService.getApplicationVersion("AirApplication",
                        "2D0F512A27635B8D26E3FE2622F4AAEDDA9D3CFC.1",
                        applicationVersion);
                }
            }
           
            private function applicationVersion(version:String):void
            {
                trace("version=" + version + ", status = " + airService.getStatus());
                ta.text += "version=" + version + ", status = " + airService.getStatus() + "\n";
                ta.verticalScrollPosition = ta.maxVerticalScrollPosition;
                airService.getApplicationVersion("AirApplication",
                    "2D0F512A27635B8D26E3FE2622F4AAEDDA9D3CFC.1",
                    applicationVersion);
            }
           
        ]]>
    </mx:Script>
    <mx:TextArea id="ta" height="100%" width="50%"/>
</mx:Application>[/code]
두개를 띄워보면
사용자 삽입 이미지
한놈은 available을 받습니다-_- 왜그러지-_-
대체 getApplicationVersion에서 어떤 일을 하는지 궁금해지기 시작했습니다.

그래서 대처 방법으로는....-_- getApplicationVersion을 동시에 하지 않으면 돼요-_- 사용자가 클릭할 때 하면 되는데, 이렇게 되면 launchApplication을 할 때에 또 클릭해줘야 해요. launchApplication은 사용자 액션에 의해서만 되더라구요.

PS. 혹시......이 글을 보게 되시는 분들중에서.....AIR애플리케이션을 launch하는 사이트를 목격 하시면 댓글 달아주세요ㅠ

 
Posted by 머드초보
,
 
JTable에 대한 사용법은 여기에 있습니다.
http://jfx.wikia.com/wiki/SwingComponents#Table

그 외에 작년에 preview버전에서 구현한 것 같은 소스도 있군요.
http://www.jroller.com/peter_pilgrim/entry/javafx_reintroduce_swing_jtable

Java에서 사용하는 방법이랑 같은 방법으로 하는군요.
근데, JTable에서는 기본적으로는 편집이 가능하게 되어있습니다.
JTable에서 Model을 구현하는데, AbstractTableModel를 상속받아 구현한 모델을 JTable에 적용하는 방법이 있구요. 기본적인 Table기능만 있으면 되면 DefaultTableModel을 이용하는 것 같습니다.
Java에서 편집이 안되게 막으려면 아래와 같은 방법으로 하면 됩니다.
[code]
mod = new DefaultTableModel(data,title) {
public boolean isCellEditable(int rowIndex, int mColIndex) {
return false;
}
};
[/code]
출처: http://nkdk.tistory.com/entry/%EC%9E%90%EB%B0%94-jtable-%EC%97%B4-%EC%A1%B0%EC%A0%95-%EC%95%88%EB%90%98%EA%B3%A0-%EB%82%B4%EC%9A%A9-%EC%88%98%EC%A0%95-%EB%AA%BB%ED%95%98%EA%B2%8C-%ED%95%98%EA%B8%B0
근데, 저 문법을 JavaFX에 적용하려고 하니까-_- 안되더군요-_-
그래서 상속받아서 해결했습니다.

DefaultTableModel을 상속받은 MyTableModel
[code]
public class MyTableModel extends DefaultTableModel {

    override function isCellEditable(row:Integer, col:Integer): Boolean {
        return false;
    }
}
[/code]
사용시에는
[code]
model = MyTableModel {}
model.addColumn("name");
table.setModel(model);
[/code]
이렇게 하면 편집 불가능한 JTable을 만들 수 있습니다.

PS. 분명 누군가가 좋은 데이터그리드를 만들꺼야....-_- JavaFX는 역시 컴포넌트가 부족하군ㅠ
 
Posted by 머드초보
,
 
JavaFX는 신뢰할 수 있는지에 대해서 동의만 얻으면 로컬에 있는 파일에 접근할 수 있습니다. 그렇다는 얘기는 JavaFX로 사용자 컴퓨터를 맛이가게 할 수 있는건가....-_-
JavaFX는 브라우저에서 돌아갈 때 오래전에 영광을 누렸던 Applet기반으로 돌아갑니다. 예전엔 채팅사이트나 왠만한 사이트에 Applet이 꼭 들어갔었죠. 보안문제나 속도문제 때문에 아마 Flash에 밀렸을겁니다.
혹시나 했는데 스카이러브라는 예전에 유명했던 채팅사이트는 아직도 애플릿을 사용하네요-_-

암튼 JavaFX에서 사운드재생은 Flash처럼 매우 간단합니다.
MediaPlayer라는 클래스가 있습니다.
http://java.sun.com/javafx/1.1/docs/api/javafx.scene.media/javafx.scene.media.MediaPlayer.html
그리고 Media라는 클래스가 있습니다.
http://java.sun.com/javafx/1.1/docs/api/javafx.scene.media/javafx.scene.media.Media.html

[code]
var mediaPlayer:MediaPlayer = MediaPlayer {
    volume: 0.5
    autoPlay: false
    onError: function(e:MediaError) {
        println("got a MediaPlayer Error : {e.cause} {e}");
    }
    onEndOfMedia: function() {
        println("reched end of media");
        playList.next();
    }
}

mediaPlayer.media = Media {
    source: "URL경로 및 FILE경로",
    onError: function(e:MediaError) {
        println("got a media error {e}");
    }
}
mediaPlayer.play()
[/code]
이렇게 하면 됩니다. 아....URL은 그냥 http://www.~~~.com/1.mp3 이렇게 하면 되는데요. 로컬에 있는 파일을 읽어올 경우에는 C:\1.MP3 이게 아니더군요.
file:/D:/임재범-비상.mp3 이렇게 해야되더군요.

아 그리고, JavaFX에서는 flash에 있는 DataGrid같은 게 없습니다-_- swing컴포넌트를 이용해서 만들어야해요. 구글링을 해보니 JTable로 만들어 놓은 게 있더라구요. 그걸 이용해서 플레이리스트르 만들었습니다.

근데, 가끔 브라우저(FireFox나 IE, Opeara는 안됨ㅠ)에서 버튼이 클릭이 안될 때가 있습니다-_- 왜그런지 모르겠네요. 근데 크롬은 100%클릭이 잘 됩니다. 왜그럴까요....-_- 테스트 하시는 분들은 크롬으로 하세요 ^^ 크롬짱-_-
사용자 삽입 이미지

이미지에요-_- 주소는 아래에-_-


예제 데모주소입니다(크롬으로....-_-)
http://mudchobosample.appspot.com/JavaFXMP3Player/JavaFXMP3Player.html

소스주소입니다.
http://my-svn.assembla.com/svn/mudchobosample/trunk/JavaFXMP3Player/

 
Posted by 머드초보
,
 
해결방법 같은 건 아니구요-_- 그냥 이렇게 하니까 짤리지는 않더라 정도 입니다-_-

혹시....맥에서 Flex Builder 쓰시는 분도 그런가요?-_- 맥에선 컴파일을 안해봐서 잘 모르겠네요.
암튼, Windows용 Flex Builder로 컴파일한 swf는 맥에서는 한글이 짤려서 보이네요.
버그리포팅을 하고 싶지만.....영어도 딸리고...말주변도 없고....에이레네님께 부탁을 ㄷㄷㄷ

사용자 삽입 이미지
사용자 삽입 이미지
우선 style에서 fontFamily를 "돋움"으로 주니 맥에서 저렇게 보이더군요.
그래서 fontFamily에다가 Arial을 추가해줍니다-_-(석경씨가 발견! 짱!)
[code]font-family: "돋움", Arial;[/code]
그럼 윈도우폰트도 적용할 수 있고, 맥에서는 글씨도 안짤릴 수 있고...하지만, 맥에서는 폰트를 바꿀 수 없습니다-_- 그냥 나오는대로 보셔야합니다ㅠ

PS. 다른 방법 알고 계신 분 알려주세요ㅠㅠ
PS2. 보너스로~ 내 윈도우에서 돌아가는 Mac OS X Leopard.....인터넷 밖에 안된다는...ㅠㅠ
사용자 삽입 이미지


 
Posted by 머드초보
,