달력

22025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
운영체제: WindowsXP
윈도XP에는 '대체구성' 이라는 기능이 있습니다.
가정에서 사용하는 대부분의 초고속 인터넷 서비스의 경우,
자동으로 IP를 할당받아 인터넷을 사용할 수 있도록하는 유동IP로
서비스되고 있고, 학교나 회사에서는 특정(고정) IP 주소로 네트워크 환경을
셋팅하여 인터넷을 이용하는 전용회선을 사용한다면, 노트북 사용자의 경우
장소를 옮겨서 인터넷을 사용할 때마다 해당 장소의 인터넷 환경에 맞추어서
네트워크 구성을 바꿔줘야하는 불편함이 있습니다.
이때, 노트북의 운영체제를 윈도XP로 사용할 경우에는 '대체구성'기능을 이용해
두 곳의 장소가 변경될 때마다 설정을 바꾸지 않고 두 곳에서 바로 네트워크에
접속할 수 있습니다.
대체구성 설정 방법은 아래와 같은 순서대로 설정해 주시면 됩니다.
1. 내 컴퓨터’의 ‘제어판’에서 ‘네트워크 연결’을 선택한다.
2.‘로컬 영역 연결’에 커서를 놓고 마우스 오른쪽을 클릭한 뒤,
팝업 메뉴가 나오면 ‘속성’을 선택한다.
3. 프로토콜 항목에서 ‘인터넷 프로토콜(TCP/IP)’을 선택한 뒤 ‘속성’
버튼을 누른다.
4. 여기에서 ‘인터넷 프로토콜(TCP/IP) 등록 정보’ 창에서는 집에서 사용하는
유동IP 인터넷 환경을 설정해야 하므로 ‘자동으로 IP 주소 받기’를 선택한다.
5. 선택을 했으면 다시 옆 창의 ‘대체 구성’ 탭을 누른다.
6. ‘대체 구성’에서는 ‘사용자 구성’을 선택한 뒤, 회사 또는 학교에서 사용하는
고정IP 주소및 네트워크 환경 설정을 입력한다.
7. 모든 설정이 끝났으면 ‘확인’ 버튼을 눌러 창을 닫는다.
Posted by tornado
|

.NET Framework V2.0 Obsolete API List

These lists identify all of the APIs which are obsolete in the .NET Framework V2.0. These lists are meant to serve as a simple reference for obsoleted members and types. Where applicable, an alternate or improved version of the API that provides a more robust set of functionality is listed. If no alternative is suggested then there is no replacement for the API. It is perfectly valid to continue to use and consume a type/member which is obsoleted as a warning. For information on making APIs obsolete, guidance is available in this Obsolete FAQ.

In each list, there are two separate counts specified for each assembly or namespace:

  • The Obsoleted Types count is the number of obsoleted types found in the assembly/namespace.
  • The Obsoleted Members count is the number of obsoleted members not contained in an obsoleted type. If a type is obsolete, it's members are not counted in this value.

Note: only assemblies that contain obsoleted types or members are listed.

Obsolete List: By Assembly

Obsolete List: By Namespace
  

Posted by tornado
|

(이벤트도서) Head First Design Patterns : 스토리가 있는 패턴 학습법

큰도서이미지보기
Eric Freeman , Elisabeth Freeman , Kathy Sierra , Bert Bates
서환수
한빛미디어
28,000원19,600원 (30%↓)
0원 (0%)
8979143400
번역서 / 2005-09-04 / 672 쪽

 

 

(이벤트도서) 정신병원에서 뛰쳐나온 디자인
Alan Cooper
이구형
안그라픽스
13,000원11,050원 (15%↓)
0원 (0%)
8970592202
국내서 / 2004-08-25 / 400 쪽

 

이렇게 두개는 오늘 시켰구.....

 

실용주의 프로그래머 : The Pragmatic Programmer - P.P.P. 시리즈 002

큰도서이미지보기
Andrew Hunt , David Thomas
정지호 , 김창준
Insight (인사이트)
25,000원18,750원 (25%↓)
0원 (0%)
8991268072
번역서 / 2005-07-24 / 480 쪽 / HardCover

 

이거는 오늘부터 볼 책.

 

 

 

Posted by tornado
|
01월10일은 돌풍님의 생일입니다. 축하해주세요!
Posted by tornado
|

2005년 여름에 원투 낚시로 손맛 본 이후에 낚시두 잘 못가구 가면 꽝~치고 ㅋ

어여 돈벌어서 1호대 하나 쥐기는거로 개비해야 하는데 ㅋ

 

re: 감성돔낚시 채비요..그리구 용어에대한질문좀.
duffks (2005-11-23 00:11 작성)이의제기 | 신고

감성돔 낚시
낚시기법


잠길찌낚시
상식을 깨는 찌낚시 채비


찌는 ‘어신파악’의 목적을 위해 채비에 활용되는

 것이지만 잠길찌낚시는 이러한 찌의 목적보다

 감성돔의 입장을 세심히 배려한 낚시다.
잠길찌낚시란 의도적으로 찌를 물 속에 가라

앉히는 낚시를 말한다. 이 기법의 이름만으로

생기는 간단한 의문은 찌가 물 속에 있는데

어떻게 어신을 파악할 수 있느냐는 것. 때문에

많은 꾼들이 시도조차 꺼리는 경우가 많았다.

하지만 잠길찌낚시의 진수를 알게 되면 기존의

낚시기법들 중에서 가장 공격적인 기법만이 가질 

수 있는 매력을 느낄 수 있을 것이다.
기본원리와 활용잠길찌낚시는 물 속에 찌를 잠수

시킨다는 것이 가장 핵심. 때문에 어신 파악을 일반

 구멍찌낚시처럼 눈으로 할 수 없다. 찌를

가라앉히는 가장 큰 이유는 감성돔이 느끼는

이물질감을 최소화하기 위해서다.

시원한 입질을 위해 꾼들 자신의 편리를 포기한

 것.어신 파악은 초릿대 끝이나 낚싯대를

쥐고 있는 손에 전해지는 감각만으로, 혹은

갑자기 빨

라지는 찌의 움직임이나 면사매듭의 모양만으로

 알 수 있다. 잠길찌낚시의 가장 큰 장점은 전유동

낚시처럼 광범위한 지역을 탐색하면서도 밑걸림을 최소화

할 수 있다는 것이다.

또 어느 정도 조류의 지원을 받아야 하는 전유동에 비해 조류가 미미한 상황에서도 민감하게

 채비

가 반응, 바닥층의 감성돔을 유인해 낼 수 있다는 점을 들 수 있다. 밑걸림의 발생을 찌의

 움직임으로 알 수 있어 편리하다. 잠길찌낚시는 밑걸림이 발생하면 더 이상 찌가 내려가지

 않는다. 이때 원줄을 조금만 당겨주면 민감한 찌는 솟아올라 바닥걸림에서 벗어나게 된다.

잠길찌낚시는 상하운동을 민감하게 해야 하기 때문에 주로 하부팽창형을 사용한다.

 하부팽창형은 위쪽의 굵기가 가늘어 밑걸림이 생겼을 때 잘 떠오름과 동시에 입수

저항으로 인해 서서히 가라앉는 장점이 있다. 잠길찌낚시는 조류의 흐름이 약하고 수심

 깊은 곳의 바닥층을 공략하기 위함이다. 바닥의 굴곡이 심하거나 수중여가 복잡하게

 깔린 곳에서도 효과적으로 시원한 입질을 원하는 꾼이라면 베테랑이든 초보꾼이든

한 번쯤은 써볼 만한 채비다.




응용 반 잠길찌 채비

초겨울 저수온기에 적중

가을에서 겨울로 넘어가면서 맞는 저수온기의

낚시는 차라리 본격적인 겨울낚시보다 훨씬

까다로운 입질에 꾼들을 맞닥뜨리게 한다.

갑자기 움직임이 둔해지고 입질도 약아지는

겨울 감성돔은 바닥층에서 잔뜩 웅크리고 있어

 꾼들의 채비에 무반응을 보이기 일쑤. 따라서

되도록 섬세하고 적극적인 구애로 감성돔의

 입맛을 자극해야 한다. 잠길찌를 응용한

 반 잠길찌 채비는 시중에 나와 있는 잠길찌

대신 일반 구멍찌 3B에 밑채비에 부력을 더 줘

찌를 강제로 가라앉게 하는 것이다. 찌매듭은

 바닥층에서 수면높이보다 2m 정도 낮춰 찌가

수면에서 2m 정도만 잠기게 한다. 물론 이정도의

깊이에 잠긴 찌는 눈으로도 식별이 용이하다.

목줄에는 B봉돌을 분납, 채비가 물 속 조류를

받아 바닥층을 탐색하다가 맨 밑의 봉돌이

바닥에 닿으면 찌는 제자리에 멈춘다. 이런

식으로 채비가 바닥에 닿으면 들었다가 다시

 놔주기를 반복하게 되면 자연스러운 채비의

연출이 가능함과 동시에 밑걸림 없이 광범위한 지역을 탐색할 수 있다. 잠길찌낚시의 장점을

 그대로 가져온 이 채비는 일단 수심 파악이 선행되어야 하며 깊은 수심을 노리는 낚시이니

만큼 3B 정도의 구멍찌를 써야만 밑채비를 무겁게 해 신속한 공략을 할 수 있다.


 

 

제로찌낚시
벵에돔 채비 응용, 초반 시즌에 효과

그동안 제로찌낚시는 벵에돔낚시 전용으로

인식되어 왔으나 제로찌의 장점을 감성돔낚시에

 활용해 보려는 꾼들의 노력으로 이제 감성돔

낚시에도 제로찌는 심심찮게 사용된다.

 제로찌낚시는 밑채비에 부력이 없고 단지

미끼와 바늘의 무게만으로 채비를 내리기

 때문에 중층 이하의 바닥을 공략하는 감성돔

낚시에는 부적합하다고 알려져 왔다. 그러나

시즌 초반 수심이 얕은 여밭지대를 공략하는

감성돔낚시에는 이보다 더 효율적인 채비가

 없을 정도다. 제로찌낚시의 가장 큰 장점은

약은 입질에도 확실한 반응을 보인다는 것.

잔존부력이 0이기 때문에 입질 때 입수저항이

거의 없다. 사실 부력이 0라는 것은 수면과

찌톱이 거의 일직선을 이루어야 하지만 실제

상황에서는 조류와 미끼, 바늘의 무게가 합쳐서

 물 속에 다소 가라앉는 경향을 보인다.

제로찌낚시의 어신 파악은 찌가 더 이상 내려가지

 못하게 쓰이는 찌멈춤 핀의 움직임으로

알 수 있다. 이 찌멈춤 핀은 수중찌와 비슷한

역할을 하게 되는데 채비를 내리는 것과 동시에

 물 속에서 자연스럽게 반응해 이 찌멈춤 핀이 부자연스러운 움직임을 보이면 입질이라고

 봐도 되는 것이다. 또는 채비가 내려가는 속도의 변화 등으로도 입질 유무를 알 수 있다.

 제로찌는 조류가 너무 빠르면 위력을 발휘하기 힘들기 때문에 곶부리 포인트는 피하고

갯바위 골창의 물이 돌아나가는 훈수지역을 노리는 것이 바람직하다.

 

 

 

 

L조법
고리찌를 이용한 반유동 개선 채비

L조법은 기존의 반유동 채비가 가질 수 있는

 입수시의 저항을 최소화하기 위해 만들어진

기법으로 이 채비의 정렬시 수중에서 만들어

지는 밑채비의 모양을 따 지은 이름이다.

기법의 핵심은 고리형 수중찌를 사용하는

데 있다. 물속에 들어간 고리형 수중찌는

바닥의 반탄류(反彈流)를 받아 밑채비의

 중심을 잡아주는 역할을 하게 된다. 이때

미끼는 조류의 흐름에 밀려 바닥층을 따라

수평으로 정렬하는 것이다. 이 기법은 조류에

 따른 채비의 자연스러운 움직임이 가능해

 감성돔의 경계심을 둔화시킬 수 있다는

장점과 밑채비를 바닥에서 어느 정도

띄울 수 있으므로 밑걸림을 줄일 수 있다.

 또 수중여가 산재한 곳에서도 복잡한 뒷줄

견제를 하지 않아도 스스로 탐색을 하는

효과를 발휘, 입질빈도를 높인다.

 

N조법
목줄찌 사용으로 이물질감 억제

N조법 역시 L조법과 마찬가지로 밑채비가 수중에서 만들어지는 모양으로 지어진

이름이다. 이 조법은 L조법의 형태에 목줄찌를 더해 목줄의 중간을 수중찌보다 상층에

위치하도록 고안한 것이다. 목줄찌를 사용한 이유는 역시 감성돔이 미끼를 삼켰을 때

 이물감을 최소화하기 위해서다. 실제로 감성돔의 입질이 예민할 경우에는 미끼를

바로 삼키기보다 일단 입속에 머금고 있다가 위험 유무를 확인한 다음 삼키는 동작을

 반복하게 된다. 이같은 감성돔의 속성상 최초의 입질 때 얼마나 이물질감을 최소화

시킬 수 있느냐는 것은 제물걸림을 시킬 수 있는 관건이된다. 목줄찌가 이를

해결해 준다. 채비의 형태상 감성돔이 일단 미끼를 물게 되면 느끼게 되는 저항은

 목줄찌의 미세한 부력뿐이기 때문에 거의 이물감을 느끼지 않아 곧바로 미끼를

깊숙히 삼키게 된다. 이때부터의 어신은 구멍찌에 곧바로 전달되어 낚시꾼은 어느

 정도 제물걸림을 이미 확보한 상태에서 챔질을 할 수 있는 것이다. N조법은 미세한

 차이를 공략하는 방법이니 만큼 채비의 정확한 정렬을 위해서는 극소단위의 부력을

정확하게 짚어내는 감각이 필요하다.

전유동 M조법
물 속을 휘젓는 미사일 조법

M조법은 전유동낚시의 단점을 보완한 채비.

그동안 전유동낚시는 벵에돔에 적합하다는 인식

때문에 감성돔낚시에는 꺼려왔고 실제 그다지

위력도 발휘하지 못했다. 하지만 광범위한 포인트를

 샅샅이 탐색할 수 있는 전유동낚시를 포기하기에는

 그 효과가 너무도 매력적이었다. 전유동낚시의

가장 큰 단점은 그 낚시를 구사하고 있는 꾼조차

밑채비의 상태에 대해서 정확하게 알 수 없다는

 점이다. 밑채비의 상태를 모르고 전유동낚시를

사하다가는 입질이 올 때까지 하염없이 채비를

 흘려야 하는 비효율적인 낚시가 되기 마련이다.

 이같은 형태로는 릴 찌낚시의 묘미를 전혀 느낄 수

없을 뿐더러 조과에도 그다지 도움이 되지 않는다.

M조법은 이러한 전유동의 약점을 보완하기 위해

잠길낚시와 접목시켜 개발한 감성돔 전용조법

이라고 할 수 있다. 기존 전유동낚시는 일단 바람에

약하고 미끼를 바닥층에 근접시키기가 어렵다. 때문에

 일부 낚시꾼들은 전유동낚시를 구사하면서도 목줄에

무거운 봉돌을 달아 억지로 가라앉히려고 하는

자충수를 두기 일쑤였다.

하지만 M조법은 어지간한 상황에서도 부피가 큰

 제로찌가 조류 저항을 받아 밑채비를 잡아줘 포인트내의 조류에서 벗어나는 경우가

적고 뒷줄관리도 편하다는 장점이 있다. 또 밑채비를 감성돔의 주 공략층인 바닥까지

무리없이 내릴 수 있고 자투리 목줄에 달려있는 봉돌만 바닥에 닿고 제로찌는 떠있는

상태에서 약간의 조류만 흐른다면 미끼가 바닥에 가라앉지 않으므로 밑걸림의 확률도

 적다. M조법의 위력이 드러나는 것은 바로 탐색기능.

바닥에 가라앉는 자투리 목줄의 영향으로 어느 정도 뜨게 되는 미끼는 조류에 따라

흘러가면서 바닥층을 샅샅이 탐색하게 되는데 이 같은 채비는 수중여에서 발생하게

되는 반탄류를 적절하게 받아 스스로 장애물을 피해 가면서 감성돔을 찾아내는

역할을 한다. M조법이라는 이름이 붙은 것도 바로 이 때문. 감성돔을 요격하는

미사일이라는 뜻에서 이름지었다. 이 조법의 핵심은 자투리 목줄.

자투리 목줄의 길이는 30∼50㎝가 알맞으며 자투리 목줄에 봉돌을 물릴 때는 탈락이

용이하도록 살짝만 물리는 것이 좋다. 만약 바닥에 있는 봉돌이 수중여 사이에 끼었을

 경우 원줄을 당기면 봉돌만 남고 자투리 목줄은 쉽게 빠져 나올 수 있도록 하기

 위해서다. M조법은 목줄의 길이를 1.5∼2m 정도로 다소 짧게 하며 목줄에는

봉돌을 달지 않는 것을 원칙으로 한다.        

]

]저도 초보고..님두 초보인거 같아서.  열심히 보고 열심히 배웁시당.. ^^

Posted by tornado
|

http://haacked.com/archive/2005/03/07/2317.aspx

 

Quick and Dirty Guide to Configuring Log4Net For Web Applications

Looking around, I noticed a lot of people struggling with getting Log4Net to work with their web applications (ASP.NET 1.1). I'm not going to spend a lot of time digging into Log4Net here, as you can do a Google search for that. But I will give you a quick and dirty guide to quickly getting it set up for a website. Bar of soap not included.

Using a Separate Config File
Although you can put your Log4Net configuration settings within the web.config file, I prefer to use a separate configuration file. Log4Net is a bit of an elitist. It won't dare put a FileSystemWatcher on web.config nor App.config. However, if you tell it to use its own config file, it will gladly monitor that log file and update its settings on the fly when the file changes.

Specifying the Log4Net Config File
If you use a separate config file, a quick and easy (and dirty) way to have your application find it is to place the config file in the webroot and add the following attribute to your AssemblyInfo.cs file.

[assembly: log4net.Config.DOMConfigurator( ConfigFile="Log4Net.config",Watch=true )]

Declaring the Logger
At the top of each class that I plan to use logging in, I declare a logger like so:

private static readonly ILog Log = LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType);
The reason I place a logger in each class is to scope it to that class. If you read the log4Net docs, you'll see what I mean by this.

Using the Logger
Once you've declared the logger, you can call one its logging methods. Each method is named for the logging level. For example:

Log.Debug("This is a DEBUG level message.  It's typically your most VERBOSE level."); Now whether that message shows up in your logs depends on how you've configured your appenders and the logging level you've set. Don't understand what that means? Read the Log4Net introduction.

Sample Web Solution
In order to make all this discussion very concrete, I've gone ahead and did all your homework for you by creating a simple ASP.NET 1.1 web solution (Log4NetSampleSolution.zip ) using Visual Studio.NET 2003. After unzipping this solution, you should be able to build it and then view the default.aspx web page. This page will log a few very interesting messages of varying levels to three appenders.

Of special note is the use of the RollingFileAppender as seen in this snippet.

<appender name="RollingLogFileAppender"        type="log4net.Appender.RollingFileAppender">    <file value="..\\Logs\\CurrentLog" />    <appendToFile value="true" />    <datePattern value="yyyyMMdd" />    <rollingStyle value="Date" />    <filter type="log4net.Filter.LevelRangeFilter">        <acceptOnMatch value="true" />        <levelMin value="INFO" />        <levelMax value="FATAL" />    </filter>    <layout type="log4net.Layout.PatternLayout">        <conversionPattern         value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />    </layout></appender>

Note that the file value (with backslashes escaped) points to ..\Logs\CurrentLog. This specifies that Log4Net will log to a file in a directory named "Logs" parallel to the webroot. You need to give the ASPNET user write permission to this directory, which is why it is generally a good idea to leave it out of the webroot. Not to mention the potential for an IIS misconfiguration that allows the average Joe to snoop through your logs.

[Listening to: Envy / Faith - Deep Dish - Global Underground 021 - Moscow CD2 (4:51)]

Feedback

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Exactly what I was trying to accomplish. Thanks.
3/12/2005 8:42 AM | sam

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Great info - thanks. This works for a website and the classes (Page) objects in the website. What about when the website uses different class libraries? How do I configure the class libraries so that they, too, will log to the same location as the website code does? Can I have the class libraries point to the log4net config file that is used by the website?

Thanks in advance.
3/17/2005 7:36 AM | bags

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

That's the beauty of it. If your classes are declaring a logger, they will log to wherever the executing application is configured to log to.

If you think of your application as an assembly graph, you need to configure your assembly and all the rest pick up that setting.

Typically your root assembly is your website or your EXE.

Hope that helps.
3/17/2005 8:07 AM | Haacked

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Thanks a lot. You don't believe I have been looking for it since 41/2 hours, most of the examples out there: either they are difficult to configure or difficult to understand.
Good work, keep it up
4/1/2005 12:17 PM | coolguy

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Glad it helped! Thanks for the compliment.
4/1/2005 12:51 PM | Haacked

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Hello,

We are evaluating log4net for one of our customers.

Our application consists of Asp.Net application which uses remoting.
We have included log4net in both web application and remoting application.
but the log4net logs the debug info only for the web application and not in=
the remoting application.
It doesn't even creat the log file in the remoting application directory.
we have given necessary permissions for the folders.

Help on the same is much appriciated. Thanks!

Regards,
Rohit

The following is mentioned in web.config of remoting application
<configSections>
<section name=3D"log4net" type=3D"log4net.Config.Log4NetConfigurationSect=
ionHandler,log4net" />
</configSections>

<log4net>
<appender name=3D"FileAppender" type=3D"log4net.Appender.RollingFileAppen=
der">
<param name=3D"File" value=3D"Test.log" />
<param name=3D"AppendToFile" value=3D"true" />
<param name=3D"RollingStyle" value=3D"Date" />
<param name=3D"MaxSizeRollBackups" value=3D"30" />
<param name=3D"DatePattern" value=3D"yyyyMMdd" />
<layout type=3D"log4net.Layout.PatternLayout">
<param name=3D"ConversionPattern" value=3D"%d [%t] %-5p %c [%x] - %m%n"=
/>
</layout>
<filter type=3D"log4net.Filter.LevelRangeFilter">
<levelMin value=3D"DEBUG" />
<levelMax value=3D"WARN" />
</filter>
</appender>
<appender name=3D"EventLogAppender" type=3D"log4net.Appender.EventLogAppe=
nder">
<applicationName value=3D"ApplicationName" />
<layout type=3D"log4net.Layout.PatternLayout">
<conversionPattern value=3D"%date [%thread] %-5level %logger [%ndc] - %=
message%newline" />
</layout>
<filter type=3D"log4net.Filter.LevelRangeFilter">
<levelMin value=3D"ERROR" />
<levelMax value=3D"FATAL" />
</filter>
</appender>
<root>
<level value=3D"DEBUG" />
<appender-ref ref=3D"FileAppender" />
<appender-ref ref=3D"EventLogAppender" />
</root>
</log4net>

Also in the AssemblyInfo file we have added this line
[assembly: log4net.Config.DOMConfigurator(Watch=3Dtrue)]=
4/9/2005 4:26 AM | Rohit

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Rohit, which version of Log4Net are you using. The config sample you sent me uses a different syntax than what I used.
4/9/2005 10:15 AM | Haacked

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Thanks for the reply, we are using .Net framework version 1.1 and log4net version log4net-1.2.0-beta8. Please let me know where we are going wrong.
I also noticed that log.IsDebugEnabled(also any other IsxxxEnabled) function always returns false. I tried with the same configuration with other test projects i created it works but it doesn't work with my actual application. [It doesn't work with the Remoting application but same configuration works with web application]
Thanks again fro the reply...
4/12/2005 4:24 AM | Rohit

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

I'm using version 1.2.0.30714 and the only thing I noticed is that your configuration file was very different from mine in how you declared the appenders.
4/14/2005 8:28 AM | Haacked

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Hi all,

I need help to set the log4net to delete log files automatically after 10days.
4/21/2005 1:24 PM | AspNet

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Hi

I'm simply trying to get NUnit to run some tests that log, with the Test project being the one that starts the application logging. In fact, ive seen this before and this is what im trying todo: im using a configuration class (that will utlimately read from the registry or db) that says where the configuration path should be, and that in turn tells to write to file, ill write out the TestFixture first and then the config file. I dont get any errors but neither do i get a file created or written to... thanks for any help!

[TestFixture]
public class TestLogging
{

static TestLogging()
{
string configFile = Configuration.LogConfigFilePath;
log4net.Config.DOMConfigurator.Configure(new System.IO.FileInfo(configFile));
ILog log = LogManager.GetLogger(typeof(TestLogging));
log.Info("Starting Logging");
}

[Test]
public void Test()
{
ILog logger = LogManager.GetLogger("my logger");
logger.Info("Logging the Test() method");
}
}





<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="c:\logs\log-file.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
5/17/2005 10:11 AM | Al

# re: Quick and Dirty Guide to Configuring Log4Net For Web Applications

Great, just what I needed. Been pounding my head against the wall for last couple of hours, trying to get it work, and this was excactly what I needed to get starting.

I've made 2 slight chances though

1. I put the assembly line in the global.asax instead of the assembly.cs. As far as I can tell it makes no difference and it just seems a bit more 'logical' place to me - purely a question of taste (and of where I suspect my collegues will be able to find it :)

2. I've used
[assembly: log4net.Config.XmlConfigurator( ConfigFile="Log4Net.config",Watch=true )]

Although it compiled just fine, I got a warning saying that the DOMConfigurator was obsolete and that the XmlConfigurator should be used instead - so I did :)


/emil@obey.your.compiler.or.die.com
5/20/2005 7:20 PM | Emil
Posted by tornado
|

http://www.devintelligence.com/Log4NetViewer/

 

 

Introduction

Log4Net Viewer is a GUI log viewer and filter for the Log4Net library. By
default it listens for LoggingEvent objects sent using the UdpAppender and
displays them in a table.

The events can be filtered based on:
  • Level

  • Logger

  • Message

All the details for each event can be displayed by selecting the event in the
table.

Screen shot

Log4Net Viewer

Getting Log4Net Viewer

System requirements

To run Log4Net Viewer you will need:

Setup

Extract the ZIP archive into a directory.

Configuring Log4Net

You will need to configure Log4Net to send logging events to Log4Net Viewer.

The following example shows how to configure the UdpAppender to send events to a RemoteAddress on the specified RemotePort.

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">    <param name="RemoteAddress" value="127.0.0.1" />    <param name="RemotePort" value="8080" />    <layout type="log4net.Layout.XmlLayout">        <param name="Prefix" value="" />     </layout></appender>				

Configuring Log4Net Viewer

You will need to configure Log4Net Viewer to recieve logging events.

End User License Agreement (Disclaimer)

SOFTWARE : Log4Net Viewer - GUI log viewer and filter for the Log4Net library
AUTHOR : Naumtsev Taras

The SOFTWARE, information and documentation is provided "as is" without warranty
of any kind, either express or implied.

In no event the AUTHOR shall be liable for any damages whatsoever including
direct, indirect, incidental, consequential, loss of business profits or
special damages, even if the AUTHOR has been advised of the possibility of such
damages.

This include, but not limited to merchantibility and fitness for a particular
function. The entire risk related to the SOFTWARE performance or quality is
assumed by the user.

It is prohibited to change any part of this SOFTWARE, including changes or
eliminations of messages or windows.

Reverse engineer (decompile) or disassemble of this SOFTWARE is prohibited.

It is prohibited to add any other copyright information (e.g. With bbs-adds)
then listed either in this license or within the SOFTWARE.

The archive and the SOFTWARE may be freely distributed provided that it is not
modified in any form and the original archive remains intact with all files.

All rights reserved by the AUTHOR.

If you do not agree with the terms of this license you have to remove the
SOFTWARE from your storage devices and do not use the SOFTWARE.

Contact information

email: admin at devintelligence.com
url: http://www.devintelligence.com
Posted by tornado
|

http://www.l4ndash.com/Home/tabid/36/Default.aspx

 

 

Log4Net Dashboard / Log4Net Viewer

  • Easy and powerful access to Log4net log table
  • Web application for easy access to the log4net log, by several users.
  • Suitable both during development and production.
  • Highly configurable


Log4Net is widely used as a logging framework, ported from the excellent Log4J logging framework and rewritten by the Apache organization.

Log4Net has proven it value in several projects and is today the number one choice in the .NET community.

The Log4Net Dashboard / Log4Net Viewer (L4NDash) is a web application that uses the Log4Net log table in a SqlServer database, and gives the user features to view and analyze the content of the log4net log table. L4NDash is aimed to fulfill the needs both during development of an application, and later when that application goes in to production.

 

L4NDash extends the benefit of using Log4Net logging framework, your customers can now have a powerful tool to view and track the logging form your application.

 

The main page in L4NDash is the dashboard page, which gives the user instant information on the logging status, on a top level, through a log summary pivot table.


L4NDash Summary table:
Log4Net Dashboard / Log4Net Viewer summary table

 

From the summary table the user can drill down to view collections of log rows and to view all details about a single log row. The content of the summary table can be configured in the config file.

 

L4NDash also offers a page to view the news log rows. Both in the Dashboard page and the New log events page, the user can fine grain the view through defining filters.

 

In addition, L4NDash offers a page to clean out logging events from the database (Clean up log). The page give a status on number of rows, database size etc, and the possibilities to specify which logging evens you need to delete.


L4NDash status table:
Log4Net Dashboard / Log4Net Viewer status table



L4NDash is highly configurable.

  • The summary pivot table can be customized to show the periods you are interested in.

  • Add custom columns, in addition to the standard columns in log4net. Many Log4Net users extend log4net beyond the standard columns (DateTime, Level, Logger, Message and Exception) and add custom columns. L4NDash can be configured use the custom columns, both in viewing and filtering (available in version 2.1)

  • The user interface is defined through extensive use of CSS style sheets. This gives the user the possibility to adjust the look and feel in accordance with personal preferences. In the settings page, the user can choose among several predefined style sheets. If you like to future customized the look of L4NDash, new style sheets can be added to the style sheet directory.

  • L4NDash can be configured to use several data sources bye defining several connection strings in the config file, the user can choos among these different data sources in the settings page.


 

Technology

  • L4NDash  is written in C#, and are using Microsoft ASP.NET.  Version 1.1 of L4NDash uses ASP.NET 1.1, and version 2.0 is based on ASP.NET version 2.0.
     
  • If you use ASP.NET 1.1 it is still possible to use L4NDash version 2.x by configuration Internet Information Server to us different .NET frameworks for different virtual directories.
     
  • L4NDash can be used with Microsoft SQL Server 2000 or Microsoft SQL Server 2005.
     
  • L4NDash uses (off course) Log4net to log events and can be configured to log to all the appenders that Log4Net offers.
     
  • L4NDash uses CSS (cascading style sheet) to define the look and feel of the application.
     
  • L4NDash does not require any third-party plug-ins or components. The user interface is rendered trough plain html and java-script.
     
  • L4NDash comes with an msi installer, making it easy to install. The installer will create a virtual directory (of your choice) in IIS (Internet Information Server).
Posted by tornado
|
Posted by tornado
|

http://www.zimbra.com/

 

jsp, javascript, XML/SOAP, ayax 등으로 만들어 졌네요.. 소스 크기가 무려 150MB나 되는 대형 프로젝트입니다.

아웃룹의 오픈소스 웹버전이라 생각하면 되겟습니다..

기능은 강력하지만, ,속도가 좀 안나온다는 단점이 있네요..

웹 어플리케이션의 전망을 점쳐볼수 있을 정도입니다.

 

관련 자료는 아래에서 받으실수 있습니다.

Zimbra Collaboration Suite 2005 Beta – Open Source

Binary

Related Documentation:

Migration Wizard

Related Documentation:

Flash Demo

 

 

데모와 스크린 샷은 아래에서 즐기세요

 

  • Flash Demo
  • Hosted Demo
  • Screen Shots
  •  

     

    Inbox

    Inbox - View messages as conversation threads or individually, with message text preview

    Conversation

    Conversation - See all messages in a thread - inbox, sent, filed, even trash - in one view

    Search Builder

    Search Builder - Build dynamic searches for attachments, message text, domains, even phone numbers

    Calendar

    More Calendar

    Calendar - See all of your scheduled appointments and their status; mouseover for full details

    Contacts

    Contacts - Add contacts directly from email; mouseover to view details

    Admin - COS Preferences

    Admin - Distribution List

    Admin - New Account Wizard

    Admin - Volume Management

    'JAVA > JSP_Servlet' 카테고리의 다른 글

    이클립스에서 native2ascii 설정하기  (0) 2006.05.10
    http://zk1.sourceforge.net/  (0) 2006.05.10
    No solutions exist for "NotifyUtil::java.net.ConnectException  (2) 2005.12.03
    [펌] 자바툴(솔루션) 정리  (0) 2005.11.16
    sitemesh ..  (0) 2005.11.09
    Posted by tornado
    |

    eclipse 프로파일러..

    JAVA/JSE 2005. 12. 22. 12:10
    Posted by tornado
    |

     
    • 온라인을 통한 기술지원 • SQLER
    http://support.microsoft.com/oas
    제품별 기술지원 정보 및 온라인을 통한 기술지원 제공.
     http://www.sqler.pe.kr/
    SQL Server 팁, 강좌제공 및 활발한 게시판운영
    • 뉴스그룹 • MSSQL
    http://support.microsoft.com/newsgroups
    고객 상호간 또는 Microsoft 기술지원 엔지니어 및 MVP에 의해 지원되는 게시판 형식의 뉴스그룹을 통한 기술지원 제공.
     http://www.mssql.org/
    SQL Server 유용한 강좌를 제공하는 개인 홈페이지
    • TechNet 온라인 • SQL Server 2005 커뮤니티
    www.microsoft.com/korea/technet
    IT Pro를 위한 백과사전
     http://www.sqlyukon.co.kr/
    SQL Server 2005 최신 정보제공
    • MSDN 온라인 • Jangrae's SQL World
    www.microsoft.com/korea/msdn
    샘플코드, 라이브러리, 기술문서, 제품 다운로드 등 개발자들의 필수 참고 사이트
     http://www.sqlworld.pe.kr/
    MS SQL을 공부하시는 분들에게 유익한 정보를 제공
    • Microsoft 행사 및 세미나 정보 • OLAP Forum
    www.microsoft.com/korea/events
    Microsoft 행사 및 세미나 일정 공지
     http://www.olapforum.com/
    국내 최고의 OLAP 사이트
    • Microsoft 다운로드 센터 • DB 가이드넷
    www.microsoft.com/korea/download
    최근의 주요 업데이트 프로그램, 서비스 팩 및 기타 유용한 파일 등의 다운로드
     http://www.dbguide.net/
    한국데이터베이스진흥센터에서 운영하는 DB 구축·운영 종합정보 사이트
    • Microsoft e-Seminar  • MCP월드
    http://www.microsoft.com/korea/seminar
    Microsoft가 주관하는 모든 세미나의 동영상과 발표자료 제공
     http://www.mcpworld.com/
    마이크로소프트 MCP인증 관련 커뮤니티
    • Microsoft 교육 및 인증 • 고수닷넷
    www.microsoft.com/korea/traincert
    Microsoft 자격증 및 Microsoft 공인 교육에 대한 정보 제공
     http://www.gosu.net/
    국내 최초 아티클 전무 개발자 커뮤니티
    • MDSN HOW-TO 문서    
    http://www.msdn.microsoft.com/howto
    실제 개발과 관련된 절차식 프로그램 가이드 라인 제시
      
    • Microsoft Patterns & Practices    
    http://www.microsoft.com/practices
    애플리케이션의 디자인 배포, 아키텍처, 제작 등에 관련된 Microsoft의 제안
      
    Posted by tornado
    |

    1. 관리자용 비밀번호를 아는경우 -------------
         관리자 아이디로 윈도우 로그인후 제어판에서 사용자관련 항목에서 비밀번호 변경

     

    2. 두번째 관리자 비밀번호를 모르는경우 ------
         윈도우 안전모드(프롬프트)로 로그인하여 도스명령창에서
         c:\net user 비밀번호분실아이디 *
         이렇게 하면 비밀번호 재설정이 뜹니다

     

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

     

    administrator 계정의 암호를 알면 안전모드로 부팅하여

    사용자 계정을 따로 하나 만들고 그걸로 사용하시면 되는데..

    administrator 암호도 모른다면..포맷하는 방법밖엔 없습니다.

    보통 xp 설치할때 administrator 계정 암호를 설정안하면 엔터치고 들어갈 수 있거든요..

    일단 안전모드로 들어가서

    [부팅할때 키보드 F8 키 눌러 안전모드 선택한다음 엔터쳐서 안전모드로 부팅]

    로그인 화면에서 administrator 클릭하고 들어가면

    제어판- 사용자 계정에서 새로운 사용자 추가 하시고..사용하면 되구요..

    Posted by tornado
    |
    Posted by tornado
    |
    This topic has 8 replies on 1 page.
     
    Hi, I get the following error when I load a webpage that is on a tomcat 5.0 server.... It repeats about 3-5 times just from loading a page any ideas?

    NotifyUtil::java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
    at java.net.Socket.connect(Socket.java:452)
    at java.net.Socket.connect(Socket.java:402)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:139)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:402)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:618)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:306)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:267)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:320)
    at sun.net.www.http.HttpClient.New(HttpClient.java:315)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:521)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:498)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:569)
    at org.netbeans.modules.web.monitor.server.NotifyUtil$RecordSender.run(NotifyUtil.java:237)
     
    Hi, I'm fairly new to java and trying to download a web page page with th help of URL object and I get the following Exception:


    java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at HttpConnection.conectare(HttpConnection.java:92)
    at HttpConnection.incarca(HttpConnection.java:58)
    at HttpConnection.main(HttpConnection.java:44)

    Can anybody help me?
    Shoud I know about a proxy or something like that? :)
    thankx
     
    it means that u can't connect to the server. try to ping to the server and see the result.
     
    i don't know if that reply refeared to me or not... but in case it did thank you... I figured out what was wrong with it :)) i have a proxy and i did a small modification to my code i simply added the following lines before I used the URLConnection object:
    // Modify system properties
    Properties sysProperties = System.getProperties();

    // Specify proxy settings
    sysProperties.put("proxyHost", "10.9.1.1");
    sysProperties.put("proxyPort", "3128");
    sysProperties.put("proxySet", "true");


    easy isn't it?
     
    I had this problem from installing netbeans. I uninstalled it, but there was still some configurations in the <catilina home>/config/web.xml file. Remove the following:

    If you want an IDE, perhaps you'd like to try eclipse.

    edit your [$TOMCAT_HOME]/conf/web.xml file and rip out the following section from the top - where Netbeans snuck it in, and didn't remove - even if i uninstalled it

    =========================================
    <filter>
    <filter-name>HTTPMonitorFilter</filter-name>
    <filter-class>org.netbeans.modules.web.monitor.server.MonitorFilter</filter-class>
    <init-param>
    <param-name>netbeans.monitor.ide</param-name>
    <param-value>127.0.0.1:8082</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>HTTPMonitorFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    =========================================
     
    GO POST your QUESTION in your OWN thread!
     
    Thanks jwolter, will try.
     
    This worked. I did have NetBeans installed but thought the error was originating from Eclipse. Thanks for the help jwolter.
     
    Yes, this works for me. I installed NetBeans but never notice that. I confused why get connetion refused even if access into 127.0.0.1. Now everything works fine. Thanks jwolter!
     

    'JAVA > JSP_Servlet' 카테고리의 다른 글

    http://zk1.sourceforge.net/  (0) 2006.05.10
    [펌] 오픈소스 메일 서버/클라이언트 zimbra  (0) 2005.12.23
    [펌] 자바툴(솔루션) 정리  (0) 2005.11.16
    sitemesh ..  (0) 2005.11.09
    [펌] JSF의 새로운 얼굴, MyFaces  (0) 2005.10.27
    Posted by tornado
    |

    먼저 쓰던 컴퓨터(AMD 2500 , Ram 1GB) 는 누나 줘버리고

    놋북으로 바꿨다.

    그리고 베리텍 레이저 프린터는 몇 달전에 OKJSP 에서 salt 님한테 공짜로 받은거다.

     

     

    근데.. 놋북에 프린터 포트가 없당.. USB 만 세개 있음.

    테크노마트가서 프린터 포트를 USB 로 변환하는 젠더 하나 사와서 프린터 하는데,

    헐~  안된당...

     

    왜 안되나... 고민하다가, 프린터 공유 부분을 체크하고 다시 해봤다..

     

    크헉.... 된다...

     

    USB 출력이라서 프린터 공유를 해줘야 하는건지.. 참 이상하네..

    저번 7월달에 산 캐논 프린터는 USB 인데두 공유 안해도 잘 출력 되던데,

     

    그것 참 희한하네~~~

     

     

     
          
     
    NETmate USB1.1 to 페러럴 변환기
    프린터단자가 없을시 USB를 이용하여 프린터 사용가능.
    제조원 : 강원전자
    모델명 : KW-1284
    판매가 : 15,000 원
     

     

    이거 샀는데, 테크노 마트는 18,000 원에 팔고있음.. 

    Posted by tornado
    |

    [msdn 펌] AOP...

    .NET 2005. 11. 29. 11:58

    자바에서 쓰던거 전부 넘어오는거 아닌지 모르겠네..

    스프링까지 넘어와서.. VS.NET 툴에 통합되면 무지 편리하겠는데..

     

    AOP(Aspect-Oriented Programming)

     

    Matthew Deiters
    ThoughtWorks

    2005년 9월

    적용 대상:
    Microsoft Visual Studio
    Microsoft Visual Basic

    요약: 웹 서비스 클라이언트 응용 프로그램의 동작을 동적으로 확장하는 방법을 시연하여 AOP(Aspect-Oriented Programming)에 대한 실용적인 정보를 확인합니다(11페이지/인쇄 페이지 기준).

    이 기사의 코드 샘플을 다운로드하려면 여기를 클릭하십시오.

    목차

    소개
    Aspect란?
    AOP의 장단점
    Trace.WriteLine을 넘어서
    Mixin의 배후 구현
    동작 위빙(Weaving)
    정리
    결론

    소개

    AOP(Aspect Oriented Programming)는 개발된 지 오래되었지만 최근에야 Microsoft .NET 개발 커뮤니티에서 주목을 받기 시작했습니다. 새로 채택되는 모든 기술이 그렇듯이 기술과 기술의 사용 방법에 대해서는 많은 오해가 발생하기 마련이며 AOP도 예외는 아닙니다. 이 기사와 다음 코드 샘플에서는 AOP의 실제적인 응용 방법과 AOP에서 처리할 수 있는 몇 가지 일반적인 문제를 설명하며 AOP에 대해 집중적으로 다룰 예정입니다. 또한 웹 서비스를 사용하는 응용 프로그램을 살펴보고, AOP 프레임워크를 사용하여 웹 서비스에서 반환하는 개체에 새로운 aspect를 적용함으로써 개체의 기능을 확장해 보겠습니다. 이러한 aspect는 WSDL로 생성된 개체 모델과는 별개로 이 기능만을 위한 것입니다.

    Aspect란?

    개체와 다른 개체 간의 관계를 떠올리면 대개 상속의 관점에서 생각하게 됩니다. 여기서는 Dog라는 추상 클래스를 예로 들어 보겠습니다. 저마다 고유한 동작을 가지는 유사한 클래스를 정의할 때는 대개 상속을 사용하여 기능을 확장하게 됩니다. 예를 들어 Poodle을 정의하는 경우 PoodleDog이므로 PoodleDog를 상속한다고 할 수 있을 것입니다. 지금까지는 괜찮지만 나중에 Obedient Dog라는 이름으로 또 다른 고유한 동작을 정의하면 어떻게 될까요? 당연히 모든 Dog가 고분고분한(obedient) 것은 아니므로 Dog 클래스에는 obedience 동작이 포함될 수 없습니다. 또한 Dog에서 상속된 Obedient Dog 클래스를 만드는 경우 Poodle은 이 계층 구조에서 어디에 위치할까요? PoodleDog입니다. 그러나 Poodle고분고분(obedient)하거나 그렇지 않을 수 있습니다. 그렇다면 PoodleDog에서 상속되는 것일까요, 아니면 Obedient Dog에서 상속되는 것일까요? obedience를 Dog 계층 구조에 부적절하게 강제로 적용하는 대신 고분고분한 모든 유형의 Dog에 적용할 aspect로 볼 수도 있습니다.

    소프트웨어 측면에서 볼 때, AOP(Aspect-Oriented Programming)를 사용하면 상속 계층 구조와 별개로 클래스나 개체의 동작을 변경하는 aspect를 적용할 수 있습니다. 그러면 이러한 aspect를 런타임이나 컴파일 시에 적용하게 됩니다. AOP는 설명하는 것보다 예제를 통해 보여 주는 편이 더 간단합니다. 시작하기 전에 반복해서 사용할 네 개의 주요 AOP 용어를 정의해야 합니다.

    • Joinpoint—식별 가능하며 제대로 정의된 코드 지점
    • Pointcut—구성 또는 코드를 사용하여 joinpoint를 지정하는 방법
    • Advice—발생해야 하는 크로스 커팅(Cross Cutting) 작업을 표현하는 방법
    • Mixin—새 동작을 적용할 클래스의 대상 인스턴스와 혼합될 클래스의 인스턴스

    이들 용어에 대한 이해를 돕기 위해 joinpoint를 프로그램의 흐름에 정의된 지점으로 생각해 봅시다. 코드에서 메서드를 호출할 때 해당 호출이 발생하는 지점이 joinpoint의 좋은 예입니다. pointcut을 사용하면 프로그램 흐름을 차단할 joinpoint를 지정하거나 정의할 수 있습니다. 또한 pointcut에는 joinpoint에 도달할 경우 발생하는 advice가 들어 있습니다. 따라서 호출 중인 특정 메서드에 pointcut을 정의하는 경우, 호출이 발생하거나 joinpoint가 호출되면 AOP 프레임워크에 의해 프로그램의 흐름이 중단되고 pointcut의 advice가 실행됩니다. advice는 여러 가지일 수 있지만 호출할 또 다른 메서드로 간주하는 것이 가장 일반적입니다. 그러므로 pointcut이 있는 메서드를 호출하는 경우 실행할 advice는 호출할 또 다른 메서드가 됩니다. 이 advice 또는 호출할 메서드는 메서드가 차단된 개체에 있거나 여기서 혼합한 다른 개체에 있을 수 있습니다. mixin에 대해서는 나중에 좀 더 자세히 설명하겠습니다.

    AOP의 장단점

    흔히들 AOP를 차단으로 오해하지만 사실은 그렇지 않습니다. AOP는 차단 기능의 힘을 빌어 advice를 적용하거나 동작을 함께 위빙(weaving)할 뿐입니다. 현재 ContextBoundObject를 사용하여 AOP를 연상하게 하는 스타일로 차단하는 방법을 보여 주는 다양한 .NET 코드 샘플을 확인할 수 있습니다. 하지만 이 접근 방식에서는 사전 요구 사항에 따라 차단을 허용해야 하는 모든 클래스가 ContextBoundObject에서 상속되어야 하므로 ContextBoundObject는 이 작업에 적합하지 않습니다. ContextBoundObject 같은 사전 요구 사항이 있는 AOP에 대한 접근 방식은 요구 사항으로 인해 좋지 않은 영향이 발생하므로 복잡한 접근 방식으로 간주될 수 있으며 가능한 한 사용하지 않도록 합니다. 복잡한 접근 방식은 시스템에서 많은 공간을 차지하여 잠재적으로 모든 클래스에 영향을 미치므로 향후 시스템을 변경하거나 수정하는 능력을 떨어뜨릴 수 있습니다.

    필자는 Encase라는 간단한 프레임워크를 만들었습니다. 여기서 "간단한"이라는 용어는 시스템 전체에 전혀 영향을 주지 않는다는 의미로 사용한 것입니다. AOP를 사용하면 한 시스템의 서로 다른 부분이 영향을 받게 되지만 간단한 프레임워크를 선택하고 뛰어난 프로그래밍 방식을 적용하면 부정적인 문제를 대부분 완화할 수 있습니다. Encase 프레임워크는 pointcut, mixin 및 aspect 위빙을 단순화하도록 설계되었습니다. 개발자는 대부분의 다른 간단한 AOP 프레임워크에 사용되는 XML 같은 구성 파일 대신 Encase가 있는 코드를 통해 aspect를 적용할 수 있습니다.

    AOP가 널리 채택되지 않는 이유로는 복잡한 프레임워크를 꼽을 수 있겠지만, 가장 큰 원인은 현재 사용되고 있는 AOP 예제에서 찾을 수 있습니다. 이들 예제는 거의 모두가 실행 전에 메서드를 차단하고 Trace.WriteLine("Method entered.")을 실행하는 aspect를 적용하도록 구성되어 있습니다. 이러한 일반적인 인식과는 달리 AOP는 로깅, 보안, 계측 등을 제외한 문제를 해결하는 데 유용하게 사용할 수 있습니다.

    Trace.WriteLine을 넘어서

    AOP에 대한 보다 실제적인 접근 방식을 설명하기 위해 ContactService.Service라는 웹 서비스에서 사람 개체 컬렉션을 수신하는 응용 프로그램을 만들어 보겠습니다. 현재 .NET 개발에 웹 서비스를 사용하는 가장 일반적인 방법은 XML을 반환하는 웹 서비스를 호출하고 프레임워크에서 자동으로 이 XML을 개체로 deserialize하는 것입니다. 이러한 개체에는 데이터만 있고 동작은 들어 있지 않습니다. .NET Framework 2.0에서는 partial 키워드를 사용하고 동작을 만들어 이러한 자동 코드 생성 개체에 기능을 추가할 수 있습니다. 그러나 다양한 웹 서비스(또는 프록시) 개체에서 일부 특정 동작을 다시 사용하려고 하면 여전히 문제가 발생하게 됩니다. 앞서 언급했듯이 대부분의 경우 공유하는 공통 동작은 추상 클래스에 있고 다른 모든 클래스는 이 클래스에서 상속됩니다. 그러나 웹 서비스 개체를 사용하면 개체에서 기능을 상속할 수 없습니다. 이 문제는 AOP가 얼마나 강력한지 보여 줄 수 있는 좋은 기회로 활용할 수 있습니다.

    여기서 소개하는 응용 프로그램의 용도는 연락처 정보를 표시하는 것입니다. 본래는 정보를 표시하는 것이 목적이었지만 이제는 여기에 몇 가지 동작을 추가해야 합니다. 코드 샘플을 살펴보기 위해 TheAgileDeveloper.ContactService라는 가상 디렉터리를 만들어야 합니다. 이 디렉터리는 로컬 시스템에서 TheAgileDeveloper.ContactService 프로젝트가 위치한 폴더를 가리켜야 합니다.

    참고   이 프로젝트는 http://localhost/TheAgileDeveloper.ContactService를 통해 액세스할 수 있어야 합니다.

    그림 1. 응용 프로그램 스크린 샷

    응용 프로그램에 있는 단일 뷰는 MainForm이라는 WinForm이며, 이 뷰에는 웹 서비스에서 반환된 연락처 개체가 ListView의 왼쪽에 표시됩니다. 연락처를 선택하면 오른쪽에 있는 텍스트 상자에 성과 이름, 그리고 웹 페이지가 표시됩니다. MainForm이 로드되면 ServiceManager 클래스를 호출하여 연락처 정보를 가져옵니다. 다음 ServiceManager 클래스는 언뜻 보면 폼과 웹 서비스 사이의 또 다른 계층을 제외하고는 값을 추가하지 않는 것처럼 보입니다. 그러나 이 클래스는 코드를 복제하지 않고도 웹 서비스에 새 기능을 추가할 수 있는 하나의 공간을 제공하므로 매우 중요한 역할을 수행합니다. 또 다른 이점으로는 전체 응용 프로그램에서 웹 서비스의 자취를 추상화하여 제거한다는 점을 들 수 있습니다.

    Public Class ServiceManager    Public Shared Function GetAllContacts() As ContactService.Contact()        Dim service As ContactService.Service = New ContactService.Service        Dim contacts() As ContactService.Contact = service.GetAllContacts        Return contacts    End Function    Public Shared Sub SaveContact(ByVal contact As ContactService.Contact)        Dim service As ContactService.Service = New ContactService.Service        service.SaveContact(contact)    End SubEnd Class

    이제 Reference.vb 파일의 TheAgileDeveloper.Client 프로젝트를 살펴보겠습니다. 이 프로젝트는 ContactService의 웹 참조를 가져올 때 wsdl.exe에 의해 만들어진 것입니다. 또한 이 프로젝트는 WSDL에서 다음 Contact 클래스를 자동으로 생성합니다.

    '<remarks/>    <System.Xml.Serialization.XmlTypeAttribute(_  [Namespace]:=http://tempuri.org/TheAgileDeveloper.ContactService/Service1 _ )>  _    Public Class Contact                '<remarks/>        Public Id As Integer                '<remarks/>        Public FirstName As String                '<remarks/>        Public LastName As String                '<remarks/>        Public WebSite As String    End Class

    위의 코드에서 현재 Contact 개체는 데이터만 처리합니다. 또한 이 코드는 wsdl.exe에 의해 자동으로 생성되며 다음에 다시 생성하면 모든 변경 내용을 잃어버리게 되므로 편집하지 않습니다. 여기서는 Save라는 메서드를 호출하여 개체를 저장하는 동작을 소개하겠습니다. 이 동작은 mixin을 사용하여 손쉽게 수행할 수 있습니다. mixin은 인터페이스 구현만 혼합할 수 있는 등의 제한 사항을 제외하면 다중 상속을 연상하게 합니다. 여기서 사용하는 Encase 프레임워크에는 개체를 가져와 래핑하는 Encaser 클래스가 들어 있습니다. 개체를 래핑하면 실제로 새 개체가 만들어지며(이 경우 새 Contact 개체) 여기에는 구성된 mixin과 pointcut이 포함됩니다.

    mixin을 만들어 Contact 개체에서 Save 메서드를 호출하려면 인터페이스를 지정해야 하는데, 여기서는 이를 ISavable이라고 하겠습니다. 실제로 개체에 혼합될 것이 바로 이 ISavable 인터페이스입니다. 이 인터페이스는 ContactSave라는 또 다른 새로운 클래스에 구현해야 합니다.

    Public Interface ISaveable    Sub Save()End InterfacePublic Class ContactSave    Implements ISavable    Public Contact As ContactService.Contact    Public Sub Save() Implements ISavable.Save        ServiceManager.SaveContact(Me.Contact)    End SubEnd Class

    이 응용 프로그램에서 Contact 개체에 ContactSave 구현을 혼합하기에 가장 적합한 위치는 ServiceManager입니다. 이 동작을 혼합할 수는 있지만 클라이언트 코드, 즉 MainForm을 변경할 필요는 없습니다. 이는 mixin을 적용한 후에도 ContactContactSave가 통합된 새 Contact 개체가 여전히 본래의 Contact 형식을 유지하기 때문입니다. 다음은 이를 처리할 ServiceManager의 변경된 GetAllContacts 메서드입니다.

    Public Shared Function GetAllContacts() As ContactService.Contact()        Dim service As ContactService.Service = New ContactService.Service        Dim contacts() As ContactService.Contact = service.GetAllContacts        '//각 contact 개체를 래핑합니다.        For i As Integer = 0 To contacts.Length-1            '//개체를 래핑하는            '//encaser의 새 인스턴스를 만듭니다.            Dim encaser As encaser = New encaser            '//ContactSave의 mixin 인스턴스를 추가합니다.            Dim saver As ContactSave = New ContactSave            encaser.AddMixin(saver)            '//Contact 및 ContactSave 구현을 사용하여            '//새 개체를 만듭니다.            Dim wrappedObject As Object = encaser.Wrap(contacts(i))            '//새로 래핑된 contact 개체를            '//이전 contact 개체에 할당합니다.            contacts(i) = DirectCast(wrappedObject, _              ContactService.Contact)             '//래핑된 개체의 형식이 여전히 동일한지 확인합니다.            '//새로 래핑된 Contact 개체를            '//혼합된 ContactSave의 대상 필드에 할당합니다.            saver.Target = contacts(i)        Next        Return contacts    End Function(참고: 프로그래머 코멘트는 샘플 프로그램 파일에는 영문으로 제공되며 기사에는 설명을 위해 번역문으로 제공됩니다.)

    Mixin의 배후 구현

    프레임워크에서 pointcut과 advice 또는 aspect를 적용하는 방법은 프레임워크별로 다르지만 적용 목적과 개념은 같습니다. 이 기사에서 Encaser가 개체를 래핑하면 실제로는 System.Reflection.Emit 네임스페이스의 클래스를 사용하여 MSIL 코드를 내보내 즉석에서 새 Contact 형식이 만들어집니다. 새 Contact 형식은 Contact 클래스에서 파생되므로 계속해서 형식을 공유하지만 새로 래핑된 개체에도 여기서 혼합한 ContactSave 개체에 대한 참조가 유지됩니다. ISavable.Save 메서드는 새 Contact 개체에 구현되므로 Save를 호출하면 실제로는 호출을 혼합된 ContactSave 개체에 위임하게 됩니다. 여기서의 이점은 새 Contact 개체를 혼합된 개체에 구현된 모든 인터페이스에 캐스팅할 수 있다는 점입니다.

    그림 2. 래핑된 개체의 UML 다이어그램

    .NET Framework 2.0의 부분 클래스 언어 기능을 사용하면 또 다른 partial 클래스에 Save 동작을 추가할 수 있는 것으로 생각할 수도 있습니다. 이는 가능한 일이지만 필자는 코드가 이전 버전의 .NET Framework 1.x와 호환되도록 하기 위해 이러한 방식을 피하고 있습니다. 이제 부분 언어 기능이 있으므로 이전 샘플에서도 일반적인 경우에는 mixin이 필요 없을 것입니다. 하지만 mixin은 개발자가 다른 비관련 개체의 계층 구조에 속한 개체의 다시 사용 가능한 동작을 혼합하도록 하여 partial 클래스보다 더 많은 작업을 수행할 수 있으므로 여전히 중요한 역할을 합니다. partial 키워드를 사용할 때 추가하는 코드는 클래스나 형식이 동일하며 물리적인 위치만 다릅니다. 다음에 소개할 mixin에서는 Contact 클래스에 국한되지 않고 대신 FieldUndoer라는 다시 사용 가능한 클래스인 동작을 추가하는 작업에 대해 설명하겠습니다. FieldUndoerIUndoable 인터페이스를 구현하며 수정된 개체를 원래 상태로 복원할 수 있도록 해 줍니다.

        Public Interface IUndoable        ReadOnly Property HasChanges() As Boolean        Sub Undo()        Sub AcceptChanges()    End Interface

    HasChanges 속성은 변경 사항이 발생했음을 나타내며 Undo는 개체를 원래 상태로 되돌리고, AcceptChanges는 개체의 현재 변경 사항을 적용합니다. 따라서 나중에 Undo를 호출하면 마지막으로 변경 사항이 적용된 상태로 복원됩니다. 이 인터페이스가 부분 클래스에 구현된 경우 이 세 개의 메서드는 이 동작을 포함시킬 클래스마다 반복해서 복제되도록 구현되어야 합니다. 필자는 실용주의적인 성향의 프로그래머로 "한 번 코딩하여 한 번만 사용한다"는 원칙을 고수하려 노력하므로 코드를 복제하지 않을 뿐 아니라 복사하여 붙여넣는 경우도 상당히 적습니다. mixin을 사용하면 IUndoable을 구현하는 FieldUndoer 개체를 다시 사용할 수 있습니다. 필자는 이 새로운 기능을 ServiceManager에 다시 혼합하는 방법을 채택하고 있습니다. 모든 클라이언트 코드는 여전히 새로운 mixin을 인식하지 않으며 IUndoable 인터페이스를 사용해야 할 경우가 아니면 변경할 필요도 없습니다. MainFormContact 개체를 변경한 다음 undo를 클릭하여 이 동작을 테스트해 보십시오.

    Public Shared Function GetAllContacts() As ContactService.Contact()        Dim service As ContactService.Service = New ContactService.Service        Dim contacts() As ContactService.Contact = service.GetAllContacts        '//각 contact 개체를 래핑합니다.        For i As Integer = 0 To contacts.Length-1            '//개체를 래핑하는            '//encaser의 새 인스턴스를 만듭니다.            Dim encaser As encaser = New encaser            '//ContactSave의 mixin 인스턴스를 추가합니다.            Dim saver As ContactSave = New ContactSave            encaser.AddMixin(saver)            '//FieldUndoer의 mixin 인스턴스를 추가합니다.            Dim undoer As FieldUndoer = New FieldUndoer            encaser.AddMixin(undoer)            '//Contact 및 ContactSave 구현을 사용하여            '//새 개체를 만듭니다.            Dim wrappedObject As Object = encaser.Wrap(contacts(i))            '//새로 래핑된 contact 개체를            '//이전 contact 개체에 할당합니다.            contacts(i) = DirectCast(wrappedObject, _              ContactService.Contact)             '//래핑된 개체의 형식이 여전히 동일한지 확인합니다.            '//새로 래핑된 Contact 개체를 대상 필드에 할당합니다.            saver.Target = contacts(i)            undoer.Target = contacts(i)        Next        Return contactsEnd Function

    동작 위빙(Weaving)

    mixin은 전체의 작은 부분에 지나지 않습니다. AOP가 진정한 인정을 받는 부분은 혼합된 동작이 함께 위빙될 때 나타납니다. 예를 들어 새 Contact 개체를 사용하는 경우 ISavable.Save 메서드를 호출하면 클라이언트 코드에서는 다음에 IUndoable.Undo를 호출할 때 마지막으로 저장된 변경 내용을 사용하도록 IUndoable.AcceptChanges 메서드를 호출해야 합니다. 이를 검토하여 작은 MainForm에 추가하는 것은 간단하지만 이 규칙을 단일 사용자 인터페이스보다 큰 시스템에 코딩하는 일은 상당한 노력이 요구되는 작업입니다. 이렇게 하려면 Save 메서드가 호출된 모든 항목을 찾은 다음 AcceptChanges를 추가로 호출해야 합니다. 또한 새 코드가 만들어지면 개발자는 Save를 호출할 때마다 이 기능을 잊지 않고 추가해야 합니다. 이는 곧바로 계단식 효과로 이어져 시스템을 순식간에 불안정한 상태로 만들고 추적하기 힘든 다양한 버그를 만들어 낼 수 있습니다. 하지만 AOP(Aspect-Oriented Programming)를 사용하면 이러한 메서드를 함께 위빙할 수 있습니다. 메서드를 위빙하려면 Save 메서드가 호출될 때 Contact 개체가 백그라운드에서 자동으로 AcceptChanges를 호출하도록 pointcut과 advice를 지정합니다.

    응용 프로그램에 위빙을 구현하려면 ServiceManager에 코드 한 줄을 추가해야 합니다. 이 코드는 FieldUndoer mixin을 추가한 후에 추가합니다.

    '//joinpoint를 저장한 다음 AcceptChanges 메서드를 실행합니다.encaser.AddPointcut("Save", "AcceptChanges") 

    AddPointcut 메서드는 서로 다른 여러 개의 서명과 함께 오버로드되어 pointcut을 상당히 자유롭게 지정할 수 있도록 해 줍니다. 호출되는 AddPointcutSave 메서드에 해당하는 문자열을 joinpoint 이름으로, AcceptChanges라는 메서드를 실행할 advice로 사용합니다. 실행을 확인하려면 FieldUndoer.AcceptChanges 메서드와 ContactSave.Save 메서드에 각각 중단점을 설정합니다. MainFormSave 단추를 클릭하면 joinpoint가 차단되어 먼저 AcceptChanges 메서드인 advice를 실행하게 됩니다. advice의 실행이 완료되면 계속해서 Save 메서드를 실행합니다.

    이 간단한 예제에서는 전체 응용 프로그램에 걸쳐 새 동작을 추가하는 매우 강력한 기능을 보여 주고 있습니다. AOP는 단순히 기능을 효과적으로 추가하는 방법이 아니라 든든한 조력자의 역할을 담당합니다. AOP는 코드를 다시 사용하고 시스템 관리 용이성을 향상시키는 등의 다양한 이점을 통해 새로운 요구 사항에 발맞추어 손쉽게 발전시켜 나갈 수 있도록 해줍니다. 그러나 이와 동시에 AOP를 잘못 사용하면 시스템 유지 관리에 매우 심각한 영향을 미칠 수 있으므로 AOP의 사용 시기와 방법을 적절히 알아 두는 것이 중요합니다.

    정리

    AOP는 아직 대규모 또는 중요한 프로덕션 시스템에 사용할 만큼 발전하지는 못했지만 언어에 대한 지원이 늘어나면 보다 널리 채택될 것으로 예상됩니다. 또한 AOP를 활용하는 소프트웨어 팩토리 같은 새로운 소프트웨어 개발 패러다임은 이러한 지원을 촉진하는 사례로 볼 수 있습니다. 현재 .NET 영역에는 다양한 AOP 프레임워크가 있으며 이들은 각각 고유한 접근 방식과 장단점을 보유하고 있습니다.

    • Encase (영문)—이 코드 샘플에 포함된 Encase 프레임워크는 AOP를 신속하게 실행하여 AOP의 기반이 되는 개념을 이해하는 수단으로 사용하기 위한 것입니다. Encase는 런타임에 개체에 개별적으로 추가할 수 있는 aspect를 적용합니다.
    • Aspect# (영문)—aspect를 선언 및 구성하는 언어를 기본적으로 제공하는 CLI를 위한 AOP 지원 호환 프레임워크입니다.
    • RAIL (영문)—RAIL 프레임워크는 가상 시스템에서 클래스를 JIT 컴파일 중일 때 aspect를 적용합니다.
    • Spring.NET (영문)—현재 널리 사용되는 Java Spring 프레임워크의 .NET 버전으로 향후 릴리스에 AOP와 함께 구현될 예정입니다.
    • Eos (영문)—C#을 위한 aspect 지향 확장입니다.

    결론

    이 기사의 목적은 기존의 로깅 또는 보안 예제에 비해 새롭고 보다 실제적인 AOP 적용 방식을 보여 주는 데 있습니다. AOP를 올바르게 사용하면 많은 이점이 있을 뿐 아니라 기존 프로그래밍 옵션으로는 불가능한 결과를 손쉽게 얻을 수 있습니다. 아울러 AOP의 적용 시기와 방법에 대한 결정을 내릴 때는 가능한 한 인터넷에 나와 있는 다양한 리소스를 검색하여 도움을 얻도록 합니다.

     


    저자 소개

    Matthew Deiters는 소프트웨어 개발에 깊은 관심을 갖고 있으며 ThoughtWorks에서 컨설턴트로 활동하고 있습니다. 또한 .NET Framework를 사용한 금융 및 보험 업계의 다양한 엔터프라이즈 시스템 개발 업무에 참여했습니다. 그는 XP 프로그래밍과 TTD 방법론을 높이 평가하며 인간이 겪는 문제의 대부분은 디자인 패턴이나 뛰어난 단위 테스트를 통해 해결할 수 있다고 생각하고 있습니다. Matthew의 개인 웹 페이지는 http://www.theagiledeveloper.com/ (영문)입니다.

    Posted by tornado
    |

    NO.1 (Digital Camera Enhancer)

    디카로 어두운 곳에서 사물이나 인물을 찍으면 이미지가 뚜렷하지 않게 나온다.
    심하면 점이 박혀있는 것처럼 거칠다. 이것 을 '노이즈' 현상이라고 한다.
    디카의 LCD로 보면 노이즈를 알아보기 어렵지만 모니터에서는 바로 나타난다.
    디씨 인핸서(DC Enhancer)는 노이즈를 없애는 프로그램이다.
    특히 어두운 실내에서 찍을 때 생기는 노이즈를 부드럽게 바꾼다.
    노이즈뿐만 아니라 화이트밸런스, 색조절도 한다.
    노이즈가 있는 사진을 불러온 다음 밑에 있는 대화상자 막대를 움직이면 왼쪽 사진이 오른쪽에 있는 사진으로 바뀐다.
    미리보기가 되기 때문에 맘껏 조절해보고 좋은 사진을 골라 저장한다.


    NO.2 (ColorCastFX)

    디카의 단골 사진은 하늘이다. 시원한 하늘을 디카로 찍었다.
    "어? 왜 이렇게 틀리지?" 하늘이 칙칙해 보인다. 어두운 부분은 더 그렇다.
    디카로 하늘을 찍으면 이런 일이 자주 일어난다. 카메라 회사에 따라 차이가 심하다.
    같은 회사의 제품은 그나마 비슷하 게 나온다.
    이땐 컬러캐스트 에프엑스(ColorCast FX) 프로그램을 써서 자연스럽게 만들자.
    왼쪽 밑에 있는 프리셋에서 내가 가 지고 있는 디카를 선택한다.
    오른쪽 사진이 원래색으로 나올 때까지 ColorCast Fix 막대를 움직인다.


    NO.3 (CleanSkinFX)

    클린스킨은 거친 피부를 부드러운 피부로 바꾸는 프로그램이다.
    클릭 한번으로 기미, 주근깨, 잡티가 없는 피부 미인으로 다시 태어난다.
    디카로 인물을 찍으면 땀구멍까지 선명하게 나온다.
    사진이 잘 나오는 것까지는 좋은데 너무 선명하면 화를 내는 사람 도 생긴다.
    특히 피부를 생명처럼 여기는 여자친구는 더욱! 클린스킨은 이런 경우 쓰기 딱 좋다.
    왼쪽이 원본이고 오른쪽은 효과 를 준 사진이다.
    200만 화소의 이미지에서 효과가 나오는데 약 2분 정도 걸린다.
    조금 느린 편이지만 결과는 확실하다.
    프로그램 을 쓰기 전에 ColorCast FX를 쓰면 더 좋다.
    대화상자에 있는 Enhance Pink에 체크하면 생기있는 피부색을 얻는다.


    NO.4 (HotPixels Eliminator)
     
    디카로 밤하늘을 찍으면 별은 아닌데 이상한 점이 나온다.
    셔터속도를 길게해서 찍으면 점이 더 많다. 이게 바로 CCD 노이즈다.
    CCD 노이즈는 빛을 받아들이는 CCD의 한계 때문에 나타나는데 요즘 나오는 디카는 'Low Noise' 기능과 CMYK 방식으로 빛을 읽어 (일반적으로 RGB 방식으로 읽는다)노이즈를 줄였다고 하지만 가끔씩 나타난다.
     이럴때 핫픽셀을 쓰면 걱정할 것 없다.
    핫픽셀은 검은 하늘에서 보이는 하얀점을 눈깜짝할 사이에 없앤다.
    밑에 있는 'Dark Night Shots' 체크창은 파란색 노이즈를 없애는데 좋다.


    NO.5 (BlackFrame NR)

    블랙프레임은 핫픽셀처럼 노이즈를 없애는 프로그램이지만 방식이 좀 다르다.
    노이즈가 있는 사진에 까만색 종이를 한장 덧대 어 구멍난 것처럼 보이는 노이즈를 메꾸는 방식이다.
    원본 사진을 찍는다. 그리고 카메라 뚜껑을 닫고 다시 찍는다.
    원본 사진과 뚜껑을 닫고 찍은 사진을 프로그램에서 작업한다.
    과정은 좀 복잡하지만 노이즈를 없애는 방식중에서 효과가 최고다. 


    NO.6 (FilterSIM)

    동틀 무렵 사진을 찍으면 사진이 파랗게 나온다.
    반대로 해질녘에 사진이 노랗다.
    우리 눈에는 아침, 낮, 해질 무렵의 빛이 모두 같아 보인다.
    하지만 빛은 고유의 색온도가 있다. 색온도에 따라 사진이 다르게 나온다.
    디카는 색온도를 화이트밸런스에서 맞출 수 있다.
    형광등 아이콘, 텅스텐 아이콘, 태양 아이콘에 각각 맞춰 고르면 사진이 잘 나온다.
    일일이 빛에 맞게 아이콘을 바꾸기 귀찮다면 오토 화이트밸런스에 맞추고 찍는다.
     필터 심(Filter SIM)은 필름 카메라에서 이용하는 필터에서 아이디어를 얻은 제품이다.
    필름카메라에서 색온도를 맞추려면 렌즈 앞에 필터를 댄다.
    필름 카메라에서 색온도를 정확히 맞추려면 몇십장의 필터도 모자란다.
    값은 한 장에 2~3만원 정도로 만만치 않다.
    하지만 필터 심 프로그램은 코닥에서 나오는 90여개의 필터가 들어 있는 공짜 프로그램이다.
     쉽게 여러 효과를 연출할 수 있다. 특히 사진 색깔을 바꿀 때 그만이다.
    프로그램에 있는 필터 번호는 모두 시중에서 파는 코닥 필터의 번호와 같다.


    NO.7 (B/Works)

    컬러사진을 흑백으로 만드는 방법은 많다.
    모니터의 RGB 단계를 그레이스케일로 바꾸면 된다.
    웬만한 프로그램에는 다 있다. 비웍스(B/Works)는 사진을 단순히 흑백으로 바꾸는 프로그램이 아니다.
    사진을 갈색으로 바꾸고 구름을 더욱 짙게 만든다.
    하늘 이 마치 그을린 것 같은 효과를 낼 수 있다.
    여러가지 효과를 주려면 대화상자를 열어 필터를 선택한다. 필터의 개수는 모두 16 개.
    그 중에는 노이즈를 일부러 만드는 필터도 있다.  
    밝고 어두운 차이가 많이 나는 사진을 골라 작업하는 게 좋다.
    그래야 사진이 드라마틱하게 나온다.


    NO.8 (RGB Lights)


    광고 사진 작가의 작품을 보면 이걸 어떻게 찍었을까 궁금해진다.
    무척 어려울 것 같다.
    디카와 RGB 라이트 프로그램 하나로 분 위기 있는 사진에 도전해 보자.
    전문 사진가도 부럽지 않은 나만의 사진이 나온다.
    RGB 라이트를 쓰려면 똑같은 사진이 3장 필요하다.
    3장의 사진을 찍을 땐 디카의 제품의 자리가 움직이지 않도록 한다.
    조명은 집에 있는 스탠드 하나면 된다.
    조명 위치만 바뀌 사진을 찍고 RGB 라이트를 열어 처음에 찍은 사진을 불러온다.
    그림자의 위치를 보고 2번과 3번 순서를 정한 다.
    3장의 사진은 붉은색, 녹색, 파란색으로 바뀐다.
    색과 그림자의 위치가 마음에 들지 않으면 아래에 있는 Swap 버튼을 눌러 바꾼다.
    오른쪽 밑에 있는 Make 버튼을 누르면 끝.


    NO.9 (Oscar's JPEG Thumb-Maker)

    JPEG 섬 메이커(JPEG Thumb-Maker)는 '발품' 팔아 찍은 사진을 리사이즈하려고
    다시 고생하는 디카족에게 딱 좋은 프로그 램이다.
    폴더 안에 있는 사진을 한꺼번에 리사이즈하는 프로그램이다.
    사진 크기를 정해주면 프로그램이 알아서 다 바꿔준다.
    단 순히 크기만 바꾸지 않는다.
    옵션 상자를 체크하면 JPEG 압축률, 이미지를 선명하게 하는 샤픈(Sharpen), 자동 밝기 조절도 한 꺼번에 한다.
    사진을 한꺼번에 바꾸는 기능은 최고다. 비슷비슷한 사진을 바꿀 때 쓰면 좋다.


    NO.10 (Oscar's File Renamer)

    100장이나 되는 사진의 이름을 바꾸려면 시간이 얼마나 걸릴까?
    보통 오른쪽 마우스 버튼 → 이름바꾸기 → 키보드로 이름을 적는다.
    잘하는 사람은 파일을 선택하고 F2키를 눌러 이름을 바꾼다.
    한꺼번에 바꿀 수 없을까?
    파일 리네이머는 텍스트 에디터처 럼 사진 파일 이름을 순식간에 바꾼다.
    먼저 파일 이름을 바꿀 폴더를 선택한다.
    리네이머 왼쪽창은 원래 파일 이름이고 오른쪽 창 파일 이름은 바뀔 파일 이름이다.
    제조사마다 디카로 찍은 사진에는 고유의 파일이름이 있다.
    예를 들면 후지는 DSCF XXXX. 산요는 Sany XXXX 라고 표시된다.
    이처럼 파일 이름이 반복되기 때문에 편하게 관리하려면 각각 다른 이름으로 바꾸는 것이 좋다.
    리네이머에서 제일 눈에 띄 는 것은 매크로 기능이다.
    이것은 사용자가 파일명을 바꾸는 과정을 저장한다.
    저장한 매크로는 필요할 때 불러와서 다시 쓸 수 있다. 

    Posted by tornado
    |
    [펌] 자바툴(솔루션) 정리 | SE 포스트 삭제 2004/07/20 15:48
    http://blog.naver.com/leschan/4210065
    출처 : joomanba님의 블로그

    Agents

    Cougaar

    Cougaar has a Java-based architecture for the construction of large-scale distributed agent-based applications. It is the product of a multi-year DARPA research project into large scale agent systems and includes not only the core architecture but also a variety of demonstration, visualization and management components to simplify the development of complex, distributed applications.

    Aglets

    IBM Aglet Kit

    Hawaii Aglet Server

    Artificial Intelligence/Expert Systems

    JGAP: The Java Genetic Algorithms Package

    JESS

    JOONE - Java Object Oriented Neural Engine

    JSR-94

    Weka

    Bayes & Naive-Bayes Classifiers

    Classifier4J

    Naiban

    Authentication and Authorization

    Acegi Security System for Spring

    OSUser2

    Tapestry

    JAAS

    JAAS in Tomcat

    Clients

    Virtual File System

    Email

    Java POP3 Email Proxy

    MAILMILL

    HTTP

    HttpClient

    URLFetch Java

    HTTP Proxies

    Muffin

    Surfboard Proxy Framework

    PAW

    Internet Protocols

    Jakarta Commons/Net

    RSS

    News retrieval from hundreds of websites via their RSS syndication files.

    fetchrss

    fetchrss polls weblogs (rss feeds) and e-mails the updates, one message per updated entry. The effect is comparable to the weblog author e-mailing you personally. fetchrss can run in the background on your desktop or server.

    HotSheet

    Informa

    RSS4j

    RSSLibJ

    RSSLibJ is a Java class library designed primarily to generate RSS data in various formats, based on a simple object model.

    Connected Graphs

    GEF

    JGraph

    JGraphT

    Arakne Network Editor

    Documentation

    Bouvard & Pecuchet

    Xref-java2html

    QDox

    JEX

    Encryption

    The Bouncy Castle Crypto API

    Cryptix

    Frameworks

    Components and Services

    Carbon

    HiveMind

    Jicarilla

    A compact, powerful, extensible and performant component-oriented software framework written in java, and a collection of components developed for this framework. Jicarilla utilizes and supports inversion of control, seperation of concerns, seperation of interface from implementation, contract-based programming, aspect-oriented programming and event-based programming. To get the buzzwords out of the way :D

    In readable english, Jicarilla provides a platform for developing a wide range of applications and software components. Think of Jicarilla as the glue between your classes, beans, components and/or services. Jicarilla can be used for building and glueing together a wide variety of applications. Whether you build web services, server applications, servlets, enterprise javabeans, desktop applications, or applets, Jicarilla will make it easier.

    Keel

    Merlin

    The Merlin project deals with the broad area of service and component management. The Merlin system is a container that provides comprehensive support for the management of complex component-based systems. Merlin uses a component meta-model to facilitate the automated assembly and deployment of components.

    NanoContainer (see also PicoContainer)

    PicoContainer

    Spring

    Mule

    Mule is a light-weight messaging framework. It can be thought of as a highly distributable object broker that can seamlessly handle interactions with other applications using disparate technologies such as Jms, Http, Email, and Xml-Rpc.The Mule framework provides a highly scalable environment in which you can deploy your business components. Mule manages all the interactions between components transparently whether they exist in the same VM or over the internet and regardless of the underlying transport used.

    Mule was designed around the Enterprise Service Bus enterprise integration pattern, which stipulates that different components or applications communicate through a common messaging bus, usually implemented using Jms or some other messaging server. Mule goes a lot further by abstracting Jms and any other transport technology away from the business objects used to receive messages from the bus.

    Web Application

    Cocoon

    Struts

    Tapestry

    WebMacro

    Socket Communications

    SocketTalk

    Graphics

    Batik

    OpenMap

    Piccolo

    TinyPTC

    ZVTM: Zoomable Visual Transformation Machine

    Barcode Generation

    Barbecue

    JBarcodeBean

    Charting

    Cewolf

    JFreeChart

    Chart 2D

    JOpenChart

    EXIF

    Jhead

    exifExtractor

    Images

    Links

    PDF

    iText

    PDFBox

    Icons

    Links

    http://sourceforge.net/projects/icon-collection/

    http://developer.java.sun.com/developer/techDocs/hi/repository/

    JDBC

    Java based

    Axion

    McKoi

    HSQLDB

    Redbase

    IDEs

    DbVisualizer

    Squirrel

    Reporting

    Generation of reports from databases or other data sources.

    JFreeReport

    DataVision

    Mondrian

    Intercepting and Modifying Commands

    P6Spy

    JSP

    the display tag library

    LDAP

    http://salt.sourceforge.net/

    Logs

    Jestr

    Jestr--pronounced like "jester"--is a Java Reflection-based library that provides an extensible framework for defining the way objects are "stringified"--that is, converted into String's for display and logging purposes. It allows the application to define how objects are stringified just by editing a properties file. The style of stringification can be adjusted at runtime, either in a blanket fashion or just for individual classes, class hierarchies, and package hierarchies. Jestr is configurable using a properties file called jestr.properties, which models log4j.properties and should look reasonably familiar to those accustomed to Log4J.

    Logging

    Just4log

    Log4j

    Log View/Filtering

    Chainsaw

    Lumbermill

    Misc

    Java Object Cache

    JOCache is a Java library that implements strict object caching.

    It's strict in that each cache enforces two limits in a very strict and predictable way.

    Very Large Hashtable

    JOTM

    Java FEC (Forward Error Correction) Library

    SiteMesh

    SiteMesh is a web-page layout and decoration framework and web- application integration framework to aid in creating large sites consisting of many pages for which a consistent look/feel, navigation and layout scheme is required.

    Xephyrus Flume Pipeline

    Flume is a component pipeline engine. It allows you to chain together multiple workers into a pipeline mechanism. The intention of Flume is that each of the workers would provide access to a different type of technology. For example, a pipeline could consist of a Jython script worker followed by a BeanShell script worker followed by an XSLT worker.

    The pipeline workers can contain any custom code, however the intention behind Flume is that the workers would implement different scripting languages. This provides a means of separating distinct functionality of the work-flow. For example, if Al understands the business flow and Betty is really good at making it look good, Al could write his piece in Jelly and Betty could do her work in XSL. The pipeline could then execute Al's script, then do Betty's transformation, spewing out some nice document.

    JReleaseInfo

    The JReleaseInfo AntTask generates a java source file with getter methods for the build date of the program, a build number or the version.

    Multimedia

    Peer-to-Peer

    Blitz JavaSpaces

    The purpose of the Blitz project is to further the use of JavaSpaces and JINITM through the provision of essential resources such as:

    JXTA

    JavaGroups

    Instant Messaging

    Echomine Muse

    Echomine Muse is a library intended to make communication across a wide variety of protocols (including Jabber, Napster, Gnutella, and more) easy and somewhat consistent.

    Object Persistence

    Hibernate

    Jing DAO Framework

    Prevayler

    SwarmCache

    SwarmCache is a simple but effective distributed cache. It uses IP multicast to efficiently communicate with any number of hosts on a LAN. It is specifically designed for use by clustered, database-driven web applications. Such applications typically have many more read operations than write operations, which allows SwarmCache to deliver the greatest performance gains. SwarmCache uses JavaGroups internally to manage the membership and communications of its distributed cache.

    Object-XML Binding

    Castor

    Digester

    Jato

    JiBX

    XML Databases

    eXist

    Xindice

    Program Distribution

    IzPack

    Packlet

    Java Web Start/JNLP

    Java Web Start

    Netx

    Reading and Writing XML

    Utilities

    txt2xml

    NekoHTML

    jaxen

    Element Construction Set

    The Element Construction Set makes it easy for you to build structured XML from a series of calls to objects. It tries to make sure you can't generate something that is not well-formed at the least, even if it is not necessarily well structured. I've used this in the past and found it easy to use but it seems to have fallen from favor. The last time I looked there wasn't much new activity and most people I work with tend to push for using JDOM for this purpose.

    VMTools

    Library functions to find differences between XML documents and represent those differences as a series of edit operations (again in XML form). Sample code is provided to make it easy to not only find the differences but also to patch an existing file to make it look like a new one.

    Parsing

    Binary XML

    JAXP

    JDOM

    dom4j

    Pipelines

    xBeans

    Clover ETL

    Transmorpher

    Remote Procedure Calls

    Hessian

    SwitchRMI

    SOAP

    Apache Axis

    GLUE

    XML-RPC

    Apache XML-RPC (formerly the Helma XML-RPC library)

    Scheduling

    Jcrontab

    Scripting

    BeanShell

    Bean Scripting Framework

    Simkin

    Searching

    Lucene

    Jakarta Lucene is a high-performance, full-featured text search engine written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.

    Relevant links

    Server Administration

    Servers

    Java Service Wrapper

    JMX

    JMX offers a simple way for you to package server components so you can make them administrable locally or remotely. JBoss and many other server packages now make their components MBeans (managable beans) just to get this functionality.

    Consider it seriously for any server software you might be building.

    MC4J Management Console

    XtremeJ

    MX4j

    JBossMX

    JMX Homepage (Reference JMX Implementation Available Here)

    AdventNet Agent Toolkit Java/JMX Edition

    Modeler Component

    JMX taglib

    JMX4Ant

    XMOJO

    Email

    MrPostman

    HTTP

    Jetty

    Jo

    J2EE

    JBoss

    SecurityFilter

    Portal

    eXo

    Jetspeed

    jportlet

    Pluto

    WebDAV

    Slide

    Swing

    Date & Time Selector Component (commercial)

    Can be customized to pick Date, Time or Date & Time.

    Unavailable dates can be set. User selection is disabled for unavailable dates.

    Clock needles can be dragged to change time.

    Class Library includes separate Calendar Panel and Clock Panel for other use.

    Unlimited runtime distrubution without any royalty

    FoxTrot

    Glazed Lists

    Suppose you have a list of 1,000 objects to browse. With Glazed Lists, you can:

    Java Bean Calendar Control

    JCascadedPane

    JCalendar

    JCalendarCombo

    JFontChooser

    The Kiwi Toolkit

    New controls for Swing (including a tree table, date control, etc.)

    L2FProd.com Common Components

    A set of new Swing components including a font chooser, directory chooser, property sheet panel, and a really cool task pane.

    Embedded Editors

    Ekit

    Ekit is a free open source Java HTML editor applet and application. The Ekit standalone also allows for HTML to be loaded and saved, as well as serialized and saved as an RTF. It is approaching its first production release version.

    JXMLPad

    JXMLPad is a pure Swing java component/framework for editing XML/XHTML document.

    Look and Feel

    Want to change the look of your Java application. Here are some ways to do it.

    Oyoaha lookandfeel

    SkinLF

    Metouia look & feel

    Windows System Tray Integration

    Java System Tray Manager

    Windows Tray Icon - Java Implementation

    Templates

    Canvas

    Canvas is a template generator based on the Groovy language. It uses the familiar Velocity Java API to bind variables and allows you to use the full expressivity of Groovy inside your templates.

    FreeMarker

    vDoclet

    Velocity

    XDoclet

    XSLT

    Tools

    UI Compiler

    Build

    Ant

    Anthill

    CruiseControl

    Maven

    Profiling

    Extensible Java Profiler

    JAMon

    JAMon offers a set of functions which can be called to record performance data (both duration and number of times executed). The data can be reviewed using an admin JSP.

    JRat: the Java Runtime Analysis Toolkit

    Version Control

    JSVN

    Testing

    Customer Acceptance Testing

    Unit Testing

    Swing GUI Testing

    Source Code Reformatting

    BeautyJ

    Jalopy

    Jalopy is a source code formatter for the Sun Java programming language. It layouts any valid Java source code according to some widely configurable rules; to meet a certain coding style without putting a formatting burden on individual developers.

    Workflow

    Bonita

    Bonita is a flexible cooperative workflow system, compliant to WfMC specifications, based on the workflow model proposed by the ECOO Team, which incorporates the anticipation of activities as a more flexible mechanism of workflow execution.

    Bossa

    JaWE

    JaWE (Java Workflow Editor) is the first open source graphical Java workflow process editor fully according to WfMC specifications supporting XPDL as its native file format and LDAP connections. It can be used to edit / view every XPDL file which conforms to WfMC specifications.

    jBpm

    OpenEmcee

    The "OpenEmcee Microflow Engine for Java" is an open source framework (Released under MPL 1.1) for developing flexible, manageable, and adaptable applications. It aims to allow application developers to develop well-engineered business-logic intensive application domain software. Drafting from the "Model" and "Controller" layers of the "Model-View-Controller" pattern, it allows developers to separate the business context of their application from their core business functions.

    This separation of context from core implementation encourages development of software units which are easily reusable and require no or little modification to business critical code when implementing new functionality. Also, these units of work ("tasks") can be easily reused in future projects.

    Open For Business

    OpenWFE

    Jakarta Commons Workflow Project

    OSWorkflow

    Shark

    The Shark project delivers a workflow server with a difference. Shark is completely based on standards from WfMC and OMG using XPDL as its native workflow definition format. Storage of processes and activities is done using Enhydra DODS.

    werkflow

    Posted by tornado
    |

    sitemesh ..

    JAVA/JSP_Servlet 2005. 11. 9. 22:51

    http://www.opensymphony.com/sitemesh/

     

    example 돌려봤는데... 굉장히 심플하게 레이아웃을 만들어주네.

    설정도 어렵지 않고... 아주 편리하겠는걸~

    주말에 낚시갔다와서 문서좀 봐야긋당....

    Posted by tornado
    |