캠핑과 개발


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="doInit();">
<mx:Script>
<!![CDATA[import mx.collections.ArrayCollection; // this holds the grid data
[Bindable]
private var myData:ArrayCollection = new ArrayCollection();private function doInit():void{
myData.addItem({fname:"Joe",lname:"Bloggs"});
myData.addItem({fname:"Joe1",lname:"Bloggs"});
}

private function buildToolTip(item:Object):String{
var myString:String = "";
if(item != null)
{
myString = myString + "Firstname : " + item.fname + "\n";
myString = myString + "Lastname : " + item.lname + "\n"
}
return myString;
}
]]>
</mx:Script>
<mx:DataGrid id="dGrid"  dataProvider="{myData}"  visible="true" dataTipFunction="buildToolTip">
<mx:columns>
<mx:DataGridColumn dataField="fname" headerText="FirstName" showDataTips="true" />
<mx:DataGridColumn dataField="lname" headerText="LastName" showDataTips="true" />
</mx:columns>
</mx:DataGrid>
</mx:Application>


ㅁ Pattern 클래스 : 정규식 패턴을 지정 정의
ㅁ Matcher 클래스 : 정규식 패턴을 데이터와 비교 

1단계 : 정규식에 해당하는 Pattern 인스턴스를 얻는다.
Pattern p = Pattern.compile("c[a-z]*");

2단계 : 정규식을 적용하여 비교할 Matcher 인스턴스를 얻는다.
Matcher m = p.matcher(data[i]);

3단계 : 정규식 여부를 확인한다.
if문 사용시 : if(m.matches()) {}

 

ㅁ 정규식 Rule
- 리터럴([]) 범위 지정 : [0-9] - 숫자, [a-z] - 소문자, [a-zA-Z]알파벳
- 리터럴(.) 모든범위문자
- 리터럴* : 해당 리터럴이 0번 이상 반복
- 리터럴+ : 해당 리터럴이 1번 이상 반복(반드시 1번은 나옴)
- ^리터럴 : 리터럴 조건을 만족하지 않는~
- 리터릴|리터럴 : 택1
- 리터럴{숫자} : 숫자만큼 반복
- (리터럴) : 리터럴 그룹화, 그룹화된 리터럴은 Matcher클래스의 인스턴스 메소드 group(int i) 호출을 통해 그룹단위로 얻을 수 있다.

 

ex1) [b|c].*{7} : b 또는 c로 시작하는 8자리 문자열
ex2) c.*d : c로 시작하고 d로 끝나는 문자열
ex3) 전화번호 정규식 : (0\d{1,2})-(\d{3,4})-(\d{4})

>>
 String ptn = "(0\\d{1,2})-(\\d{3,4})-(\\d{4});
 Pattern p = Pattern.compile(ptn);
 Matcher m = p.matcher("012-1234-4567");

>>
String regex = ".*he5|.*h5";
  String str = "he5chhh.h5hh.he85";
  Pattern p = Pattern.compile(regex);
  Matcher m = p.matcher(str.toLowerCase());
  System.out.println(m.matches());

 if(m.find())
  System.out.println( m.group() + " has " + m.group(1) + ", " + m.group(2) + ", " + m.group(3) );

[출처] http://blog.naver.com/junz0279?Redirect=Log&logNo=70046805130


I've never liked Windows Vista and I thought that Windows 7 is the same operating system just with new popular name. But lately I've read a lot good comments about Windows 7. To be honest Windows XP is still my favorite OS from Microsoft but I decided to try out Windows 7. So I downloaded and installed Windows 7 RC1.

First thing to try out after installing operating system is installation of Oracle Client because this application is essential for my work.

Shortly after initiating installation of Oracle Client 11g (11.1.0.6.0) installation stopped on prerequisite checks with error:

Checking operating system requirements ...
Expected result: One of 5.0,5.1,5.2,6.0
Actual Result: 6.1
Check complete. The overall result of this check is: Failed <<<< Problem: Oracle Database 11g is not certified on the current operating system. Recommendation: Make sure you are installing the software on the correct platform. ========================================================


To workaround this problem I've decided to edit refhost.xml file adding entry for Windows 7.

Location of this file on my system:
c:\unpacked_client_installation\win32_11gR1_client\client\stage\prereq\client\refhost.xml

This is excerpt from my newly edited refhost.xml file:


<CERTIFIED_SYSTEMS>
<OPERATING_SYSTEM>
<!--Microsoft Windows 2000-->
<VERSION VALUE="5.0"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!--Microsoft Windows XP-->
<VERSION VALUE="5.1"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!--Microsoft Windows 2003-->
<VERSION VALUE="5.2"/>
</OPERATING_SYSTEM>
<!--Microsoft Windows Vista-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.0"/>
</OPERATING_SYSTEM>
<!--Microsoft Windows 7-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>

</CERTIFIED_SYSTEMS>

New lines are added at the end of this excerpt after <!--Microsoft Windows 7-->. Notice version value=6.1.

With new refhost.xml file all checks passed and I was ready to try out is everything OK after installation.

All tools that I am using in my daily work functioned perfectly.

There are maybe some features that will not function properly on Windows 7 but I won't bother with that features as I don't use them.



O yes, and word or two about Windows 7.

My first impressions are good. It is much better operating system then Windows Vista. It is very stable and fast which is great for beta operating system.
Try it out on test machine or in virtual machine - it won't cost you anything ;)

출처 : http://msutic.blogspot.com/2009/08/how-to-instal-oracle-client-11g-on.html

'개발 > Database' 카테고리의 다른 글

오라클 모니터링 SQL  (0) 2011.02.25
Mysql 버전별 DB, USER 생성하기  (0) 2010.12.29
[mysql] mysql 암화화 하기  (0) 2010.06.03
[mysql] column add, modify, delete  (0) 2010.04.15
[mysql] 날짜 관련 함수  (0) 2010.03.18


flex에서 bitmap 관련 프로젝트를 진행하다가 결과물을 인쇄 또는 이미지로 저장을 하는 부분이 있어서 추후에도 이를 잊어버리지 않도록 간단한 예제와 함께 메모를 한다. 내용 샘플은 어떤 의미없는 비트맵 객체를 생성후 인쇄버튼과, 이미지 저장버튼을 누르게 되면 출력, 또는 이미지 파일로 저장이 된다. 여기에서 이미지 저장은 로컬 PC로 저장이 된다.
또 주석처리한 부분은 서버로 이미지를 저장할 경우 서버에서 이를 처리하기 위한 내용이다. 서버에서 이를 처리하기 위해서는 Server에서의 파일이 필요한데 이 부분은 첨부한 소스를 보면 된다.


예제화면

예제화면



source))

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
 creationComplete="init();"
 >
 <mx:Script>
  <![CDATA[
   import org.gif.encoder.GIFEncoder;
   import com.saeasoft.util.UploadPostHelper;
   import mx.collections.ArrayCollection;
   import mx.graphics.codec.PNGEncoder;
   import mx.graphics.codec.JPEGEncoder;
   import mx.graphics.codec.IImageEncoder;
   
   import mx.printing.FlexPrintJobScaleType;
   import mx.printing.PrintAdvancedDataGrid;
   import mx.printing.FlexPrintJob;
   
   private var imageType:String = "JPEG";
   
   private var imageTypeArray : ArrayCollection = new ArrayCollection([
    {label : "jpeg", data: 'jpeg'},
    {label : "png", data: 'png'},
    {label : "gif", data: 'gif'}
   ]);
   
   private var bitmapData:BitmapData;
   
   private function init():void{
    draw();
   }
   var bitmap:Bitmap;
   private function draw():void{
    var canvas:Sprite = new Sprite();
    var bitmapData:BitmapData = new BitmapData(500, 500, false, 0xffffffff);
    bitmap = new Bitmap(bitmapData);
    bitmapData.fillRect(new Rectangle(0,0,100,100), 0x000000);
    bitmapData.fillRect(new Rectangle(100,10,200,200), 0x000000);
    canvas.addChild(bitmap);
    content.addChild(canvas); 
   }
      
   private function saveImage():void
   {
    var imageEncoder:IImageEncoder;
    var gifImageEncoder : GIFEncoder;
    if(imageType.toUpperCase() == "JPEG") imageEncoder = new JPEGEncoder(); 
    else if(imageType.toUpperCase() == "PNG") imageEncoder = new PNGEncoder();
    else if(imageType.toUpperCase() == "GIF") gifImageEncoder = new GIFEncoder();
    var byteArray:ByteArray;
    if(imageType.toUpperCase() == "GIF" ){
     gifImageEncoder.start();
     gifImageEncoder.setRepeat(0);
     gifImageEncoder.addFrame(bitmap.bitmapData);
     gifImageEncoder.finish();
     byteArray = gifImageEncoder.stream;
    }else{
     byteArray = imageEncoder.encode(bitmap.bitmapData);
    }    
    var fileName:String = "desiredfilename." + imageType; //저장할 파일 이름이다. 아무거나 적자!
    
    byteArray.position=0;
    var fr:FileReference = new FileReference();
    fr.addEventListener(Event.COMPLETE, eventSaveComplete);
                fr.save(byteArray, fileName );
    /*
    var uploadPath:String = "/servlet/FlexUpload"
    var parameters:URLVariables = new URLVariables();
    parameters.method = "id";
    parameters.userId = "2000321";
    
    var urlRequest:URLRequest = new URLRequest();
    urlRequest.url = uploadPath;
    urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
    urlRequest.method = URLRequestMethod.POST;
    urlRequest.data = UploadPostHelper.getPostData(fileName, byteArray, null ,parameters);
    urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );
    
    //var encoder : Base64Encoder = new Base64Encoder();
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
    urlLoader.addEventListener(Event.COMPLETE, onComplate);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
    urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
    urlLoader.load(urlRequest);
    */
   }
   
   private function eventSaveComplete(e:Event):void{
    trace("완료");
   }
   
   private function onComplate(e:Event):void{
    var loader:URLLoader = URLLoader(e.target);
    var bytedata:ByteArray = loader.data;
    var strData:String = bytedata.toString();
    trace( strData)
   }
   
   private function onError(e:ErrorEvent):void{
    trace('error');
   }
   
   /**
    * 페이지 인쇄
    **/
   private function printPage():void {
             var myPrintJob:PrintJob = new PrintJob();
             var options:PrintJobOptions = new PrintJobOptions();
             options.printAsBitmap = true;
             myPrintJob.start();
             try {
                 myPrintJob.addPage(content, null, options);
             }
             catch(e:Error) {
                 trace ("Had problem adding the page to print job: " + e);
             }
             try{
              myPrintJob.send();
             }catch (e:Error) {
                 trace ("Had problem printing: " + e);   
             }
         }
        
         private function changeImageTypeHandler(e:Event):void{
          imageType = ComboBox(e.target).selectedItem.data;
         }
  ]]>
 </mx:Script>
 <mx:Canvas width="100%" height="100%">
  <mx:UIComponent id="content" />
  <mx:ControlBar width="100%">
   <mx:Button label="print" click="printPage()"/>
   <mx:ComboBox id="imageCombo" dataProvider="{imageTypeArray}" change="changeImageTypeHandler(event)"/>
   <mx:Button label="image save" click="saveImage()"/>
  </mx:ControlBar>
 </mx:Canvas>
</mx:Application>

소스파일))


Flex 상에서 stage를 호출할 경우 null로 인식이 되어 속성을 찾지 못하는 경우는 현재 객체가 stage에 addChild 되어 있지 않은 경우이므로 addChild(객체)로 하신 후에 인식이 값을 가져와야 한다.

public function Sample()
{
addEventListener(Event.ADDED_TO_STAGE, init);



public function init(e:Event=null)
{
   //to do
    //trace(stage.width);
}


Flex 기본 배경색을 변경하는 방법이다. 세가지 방법이 있는데 Ant MXMLC, FlexBuilder, SWF MetaData로 변경을 할 수가 있다. 매번 잊어버리니 메모를 해둬야 겠다.

Ant MXMLC
<mxmlc>
    <default-background-color>0xFFFFFF</default-background-color>   
</mxmlc>

Flex Builder -> Project Properties -> Compiler Options -> Additional compiler arguments:
-default-background-color #FFFFFF

SWF MetaData
[SWF( backgroundColor="#FFFFFF" )]

출처 : http://www.webappsolution.com/wordpress/2009/11/04/flex-default-background-color-ant-mxmlc-flexbuilder/


Windows7 환경에서 Tomcat 사용시 아이피를 받아 오는 부분에서 일반적인 IPv4 형식의 아이피가 아니라 IPv6로 아이피를 받아오는 문제가 생겨버렸다..
이전에 한번 이런 문제가 생겨서 찾아 봤는데 역시나 메모를 해두지 않으면 또 고생을 하게 된다..
이런 경우 해결법은 이클립스에서 톰캣 플러그인을 사용하는 경우는 다음과 같이 할수 있다.

Run As 메뉴에서 Run Configurations 메뉴로 들어가게 되면 apache Tomcat 메뉴에서 Arguments 탭 항목에 VM agument항목에 다음 항목을 추가해주면 된다.
-Djava.net.preferIPv4Stack=true

톰캣을 단독으로 설치하여 사용할 경우 
catalina.bat 파일을 열고 해당 부분을 찾아서 아래와 같이 옵션을 추가해준다.
:noJuliConfig
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%

:noJuliConfig
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Djava.net.preferIPv4Stack=true


//2014.04.22 해당 내용은 사용하지 않음
SET JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -Djava.net.preferIPv4Stack=true






'개발 > Server' 카테고리의 다른 글

JEUS 사용법  (0) 2013.07.12
Tomcat 특정 아이피만 접근 허용  (0) 2011.07.10
Weblogic Domain 생성 및 테스트  (0) 2010.05.28
[Weblogic]Oracle WebLogic Server 10.3 설치  (0) 2010.05.28
Mercury Mail Server 설치법  (0) 2009.11.11

기본적으로 Bitmap 인스턴스는, 참조하고 있는 BitmapData 객체에 setPixcel32()나 setPixel()이 호출되는 상황을 알아챈다.
비트맵의 모든 픽셀의 색상을 바꾸게 될 경우 setPixcel32()나 setPixcel()이 한프레임에서 자주 호출될때는 퍼포먼스가 떨어지게 되는데 이런경우 퍼포먼스 향상을 위해 lock()을 사용한다.

lock()을 호출하게 되면 AS는 Bitmap 객체가 setPixel32()나 setPixcel()의 실행을 알 수 없게 강제로 막는다.
그래서 연속된 setPixcel()이 호출되는 경우는 lock()을 호출하는 편이 좋다. 호출된 후 변경하려던 모든 픽셀이 변경이 완료된 경우는 unlock()을 호출해주면 Bitmap 객체가 모든 알림을 받을 수 있게 된다. 


var bitmapData:BitmapData = new BitmapData(1024, 1024, false);
var bmp:Bitmap = new Bitmap(bitmapData);
 
//퍼포먼스 향샹을 위해 lock을 걸어준다.
bitmapData.lock();    
    
for(var i:uint = 0; i < bitmapData.height; i++){
    for(var j:uint = 0; j < imgData.width; j++){
        bitmapData.setPixel(j, i, Math.floor(Math.random()*0xffffffff));
    }
}

bitmapData.unlock(); //lock 해제
 
container.addChild(bmp);

ajax 쌩으로 쓸려면 코드도 길어지고 xmlhttp 객체 메모리관리도 해야하고 이것저것 귀찮죠
jquery 에서는 상당히 심플한 인터페이스를 제공합니다.. 플젝하다가 갖다썼는데 상당히 만족스럽네요
여러가지 ajax 타입을 소개할까합니다. 재밌는것도 몇개있네요.

타입1.

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"
});

기본형을 보시면 ajax() 라는 메서드안에 속성 3개를 가진 객체를 생성한후 인자로 때려넣고 있군요.
동적으로 js파일을 로드해서 실행시키는 기능을합니다. 기능이 재밌어 보이긴하는데, 실제로 별로 안쓸것같네요 -_-;


타입2.

 $.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
});
some.php 에 POST 타입으로 name 과 location 을 parameter 로 넘기고있네요. success 프라퍼티는 서버에서 http response 를 받은후에 수행될 콜백함수를 지정합니다. "데이타가 저장되었어염" 라고 알려주네요.
갠적으로 이 타입을 가장많이 사용하고있습니다. 실무에서도 가장많이 사용되죠.

타입3.
$.ajax({
  url: "test.html",
  cache: false,
  success: function(html){
    $("#results").append(html);
  }
});
cache 라는 프라퍼티가 추가되었군요. test.html 을 가장 최근에 수정된 페이지로 받겠다는거죠.
"캐쉬를 사용하지 않겠다" 이겁니다. html 을 받은후에 results라는 아이디를 가진 엘리먼트의 자식노드로써 추가하고있네요. 쌩 dom api 로 쓰면 이렇겠죠. document.getElementById("results").innerHTML = html;
음 근데 이거랑은 좀 차이점이있어요. append 는 "result 엘리먼트의 자식이 존재할경우, 가장 마지막 자식으로 붙인다" 라는 규칙을 가지고있거든요. 반면에 innerHTML 으로넣으면 자식이 존재하든안하든 덮어써버리는거죠. 기존의 html 엘리먼트는 사라지고 새로운 엘리먼트로 교체되는 개념입니다.

타입4.
 var html = $.ajax({
  url: "some.php",
  async: false
}).responseText;
async(비동기) 라는 프라퍼티가 추가되었군요. false를 때려넣었으니까 "동기"로 요청한다는말이네요.
뭔말이냐면, some.php로 request를 날린후에 response가 오기전까지는 브라우저를 블락킹 시켜버립니다.
유저의 어떠한 인터렉션도 허용되지않죠. 보시면 콜백함수를 때려넣는 success라는 프라퍼티도없네요
그럼 어떻게 응답데이타를 받나염? 바로 저렇게요. var html = $.ajax().responseText;
어차피 서버로부터 response 가 오기전까지는 스크립트수행이 블락되어있으니까 저 코드가 가능한겁니다.
웹플밍을 하다보면 이 타입을 "써야만" 할때가 종종있더군요.

타입 5.
 var xmlDocument = [create xml document];
$.ajax({
   url: "page.php",
   processData: false,
   data: xmlDocument,
   success: handleResponse
});


출처 : http://boast.tistory.com/entry/JQuery-Ajax-사용하기

'개발 > Javascript' 카테고리의 다른 글

[jquery] ajax 사용하기  (0) 2010.12.17
javascript 정리  (0) 2010.12.17
[javascript] 위도, 경로를 이용한 거리 계산 소스  (0) 2010.07.14
유용한 jQuery 플러그인 리스트  (0) 2010.06.18
[jquery] Form 플러그인 함수  (0) 2010.04.06