퇴근5분전

 

다시 만들었다.

 

 

 

디자인은 동일하게 가져가고 내부 로직은 좀더 간결하게 바꾸었다.

 

주차에 대한것은 아래처럼 몇주차를 어렵게 구하지 않고 현재로부터 -1, + 1 형태로 변수 세개로 처리했다.

기존 달력은 문제점이... 조금씩 틀어지는 부분이 있어서 위처럼 1픽셀까지 맞추었다.

 

 

 

 

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

 

 이 달력은 새로 만든 스케쥴러에 사용한 달력임.

 

휴일과 관련된 내용과 몇 주차 인지에 대해 계산에 사용한 방법등을 기록해본다.

 

 # 해당년도의 1월 1일의 요일에 대한 코드값을 구한다.

int {올해 1월1일 요일} =  (int)new DateTime(DateTimeInfo.Year, 1, 1).DayOfWeek;

요일은

일요일 = 0,

월요일 = 1,

...

토요일 = 6

 

 

몇주차 구하기 :

한해는 365일로 7로 나누면 52.1... 총 53주가 나옴.

 

DateTimeInfo.DayOfYear  는 올해 365일중 몇일인지가 나옴.

 

int 몇주차 = (DateTimeInfo.DayOfYear + {올해 1월1일 요일}) / 7;
if ((DateTimeInfo.DayOfYear + {올해 1월1일 요일}) % 7 > 0) thisWeekCnt++;

 

전주, 금주, 차주를  구하면서...

년도가 바뀌는 부분인 12월 31일 ~ 1월1일로 지나가는 주차 묶어주는 계산

ex)    ((2014 - 2013 )*53) - ((2014-2013)*계산주) + ( 이번주차 - 1)

 

계산주 같은 경우 전년도 계산주기때문에 12월 마지막주와 새해 1월 1일은 같은 주차가 되는데

12월 마지막주차는 53주차로 위 계산에서 0이 되므로!

12월 마지막주의 전주는 52이므로 1을 더하게 된다.. 이렇게 계산되면 계속 전주차는 계속 줄어듬...

 

if (StartDateTime.Year == DateTime.Today.Year)
{
    int weekGap = thisWeekCnt - calcWeekCnt;
    if (weekGap == 0)
    {
        weekCountButton.Text = "금주";
    }
    else if (weekGap == 1)
    {
        weekCountButton.Text = "전주";
    }
    else if (weekGap == -1)
    {
        weekCountButton.Text = "차주";
    }
    else
    {
        weekCountButton.Text = - (weekGap) + " 주";
    }
}
else
{
    weekCountButton.Width -= 3;
    weekCountButton.Text = -((((DateTime.Today.Year - StartDateTime.Year) * 53) - ((DateTime.Today.Year -  StartDateTime.Year) * calcWeekCnt)) + (thisWeekCnt - 1)) + " 주";                         
}

 

전주차 ( 년도 변환되는 곳 )

 

 

# 국경일 기념일 처리..

private SortedList<DateTime, string> GetDayHolidays(int year)
{
    //휴일 
    SortedList<DateTime, string> holidays = new SortedList<DateTime, string>();
    //( 양력 )
    holidays.Add(new DateTime(year, 1, 1), "신정"); // 신정
    holidays.Add(new DateTime(year, 3, 1), "3.1절"); // 3.1절(5대 국경일)
    holidays.Add(new DateTime(year, 5, 5), "어린이날"); // 어린이날
    holidays.Add(new DateTime(year, 6, 6), "현충일"); // 현충일
    //holidays.Add(new DateTime(year, 7, 17), "제헌절"); // 제헌절 (5대 국경일, 휴일에서 제외됨)
    holidays.Add(new DateTime(year, 8, 15), "광복절"); // 광복절 (5대 국경일)
    holidays.Add(new DateTime(year, 10, 3), "개천절"); // 개천절(5대 국경일)
    holidays.Add(new DateTime(year, 10, 9), "한글날"); // 한글날(5대 국경일)
    holidays.Add(new DateTime(year, 12, 25), "크리스마스"); // 크리스마스
    //음력
    KoreanLunisolarCalendar kc = new KoreanLunisolarCalendar();
    //설
    holidays.Add(kc.ToDateTime(year, 1, 1, 0, 0, 0, 0), "설");
    holidays.Add(kc.ToDateTime(year, 1, 1, 0, 0, 0, 0).AddDays(-1), "설(전)");
    holidays.Add(kc.ToDateTime(year, 1, 1, 0, 0, 0, 0).AddDays(+1), "설(후)");
    //석가탄신일
    holidays.Add(kc.ToDateTime(year, 4, 8, 0, 0, 0, 0), "석가탄신일");
    //추석
    holidays.Add(kc.ToDateTime(year, 8, 15, 0, 0, 0, 0), "추석");
    holidays.Add(kc.ToDateTime(year, 8, 15, 0, 0, 0, 0).AddDays(-1), "추석(전)");
    holidays.Add(kc.ToDateTime(year, 8, 15, 0, 0, 0, 0).AddDays(+1), "추석(후)");
    return holidays;
}

 

 

적용 )

var holidays = DayHolidays.Where(d => (d.Key.Year == _info.DateTimeInfo.Year && d.Key.Month == _info.DateTimeInfo.Month))

                                      .Select(d => new { DAY = d.Key.Day, DESC = d.Value });

 

if (holidays.Where(d => d.DAY == _info.DateTimeInfo.Day).Count() > 0)
{
    _btn.ForeColor = HolidayForeColor;
    string tooltip = holidays.Where(d => d.DAY == _info.DateTimeInfo.Day).Select(t => t.DESC).First();
    _btn.MouseHover += (s, e) => { toolTip1.SetToolTip(_btn, tooltip); };
}

 

- 설 같은것 툴팁으로 표시 ( 음력계산기를 이용 함 )

 

 

 

 

 

 

 

 

'# 1) 프로그래밍' 카테고리의 다른 글

가장 가까운 점 구하기  (0) 2014.02.08
한글분해_결합, 오토마타...  (0) 2014.01.30
알고리즘] 2  (0) 2013.11.15
알고리즘] 1  (0) 2013.11.14
C#] 문자열 정렬처리...  (0) 2013.11.10

 

 자바 프로젝트를 하면서 기존에 사용하던 프로젝트 매니져를 쓰면서 불필요한 기능 제거. 필요한 부분으로 기능 보완.

스케쥴러 새로 만듬. 쉬는 일주일 동안 새로 만들었음...

 

 해당 프로그램은 프로젝트 중에 일어난 일들을 기록하는게 목적임!

 

 

 

#기능

 - 파일관리

    : 작업파일 받았을때 파일을 몰아서 관리

    : 분석하면서 만든 파일관리

    : 수정시 기존파일 백업 ( 1일 단위 )

 

 - 스케쥴 관리

    : 일정이력관리( 간단한 메모, 이슈 )

   

 - 마일스톤

    : 산출물작업중 일정관련 간트챠트 만들때 엑셀이 불편해서 만듬.

 

 - 화면정의서 (스토리보드) - 작업중!

   

 

 

친구가 준 문제2

 

N개의 열과 M개의 행으로 구성된 사각형 맵이 있는데, 각 영역은 특정 색으로 칠해져 있다.
맵의 두 영역은 다음 조건이 만족될 때 같은 나라에 포함된다.
같은 색을 가지고 있다.
다른 색으로 칠해진 영역을 거치지 않고, 동서남북 네 방향으로만 움직여서 한 영역에서 다른 영역으로 이동할 수 있다.
맵은 인덱스 0에서 시작하는 M열과 N행으로 구성된 정수들의 매트릭스로 기술될 수 있다. 각 영역의 색은 매트릭스의 각 요소로써 기술된다.
두 영역은 매트릭스의 각 요소가 같은 값을 가질 때에만 같은 색을 가진다.
예를 들어, 7열, 3행으로 구성된 매트릭스 A를 생각해보자.
A[0][0] = 5 A[0][1] = 4 A[0][2] = 4
A[1][0] = 4 A[1][1] = 3 A[1][2] = 4
A[2][0] = 3 A[2][1] = 2 A[2][2] = 4
A[3][0] = 2 A[3][1] = 2 A[3][2] = 2
A[4][0] = 3 A[4][1] = 3 A[4][2] = 4
A[5][0] = 1 A[5][1] = 4 A[5][2] = 4
A[6][0] = 4 A[6][1] = 1 A[6][2] = 1
매트릭스 A는 5가지 색으로 칠해진 맵으로 기술된다. 맵의 영역들은 7개의 다른 나라를 포함한다.
- A[0][0] 는 한 영역으로 구성된 하나의 나라를 형성한다.
- A[0][1], A[0][2], A[1][2], A[2][2]는 네 개의 영역으로 구성된 하나의 나라를 형성한다.
- A[1][0] 는 한 영역으로 구성된 하나의 나라를 형성한다.
- A[1][1] 는 한 영역으로 구성된 하나의 나라를 형성한다.
- A[2][0] 는 한 영역으로 구성된 하나의 나라를 형성한다.
- A[2][1], A[3][0], A[3][1], A[3][2] 는 네 개의 영역으로 구성된 하나의 나라를 형성한다.
- A[4][0], A[4][1] 는 두 개의 영역으로 구성된 하나의 나라를 형성한다.
- A[4][2], A[5][1], A[5][2] 는 세 개의 영역으로 구성된 하나의 나라를 형성한다.
- A[5][0] 는 한 영역으로 구성된 하나의 나라를 형성한다.
- A[6][0] 는 한 영역으로 구성된 하나의 나라를 형성한다.
- A[6][1], A[6][2] 는 두 개의 영역으로 구성된 하나의 나라를 형성한다.
함수를 작성해라.
def solution(A: Vector[Vector[Int]]): Int = {
 // TODO:
}
함수는 주어진 N열, M행의, 인덱스 0에서 시작하는 매트릭스 A에 대해서, 매트릭스 A에 의해 기술되는 맵의 영역들이 포함되는 나라의 수를 반환한다.
다음을 가정해라.
N은 범위 [1..300,000]의 정수이다.
M은 범위 [1..300,000]의 정수이다.
매트릭스 A의 요소 수는 범위 [1..300,000] 사이의 정수이다.
매트릭스 A의 각 요소의 값은 범위 [?1,000,000,000..1,000,000,000] 사이의 정수이다.
예를 들어, 위의 예에서, 7개의 열과 3개의 행으로 구성된 매트릭스 A에 대해서, 함수는 11을 반환해야만 한다.

 

풀이 )

    소요시간은 코딩시간 2시간, 고민시간 출퇴근 2시간 + 집에서 미드보면서 1시간...

    오래 걸리네...

 

Index = Row * ColCount + Col ;

격자의 Index로 루프를 돈다.

 

for{

1. Value = 0, Value와 현재 인덱스 값과 같은지 확인. 다르면 List에 등록 & 카운트

while(){

2. List에서 Index의 값 꺼내 Map의 현재 위치에서 좌, 우, 하 에 대한 Cell값 비교

3. 값이 같으면 List에 Index값 추가.

4. List의 다음 Index 값을 꺼내어 2번 ~ 3번 반복.

}

5. 같은 값이 없으면 리스트에 등록된 Index의 Cell 값에 * -1 적용.

6. 리스트 초기화

}

 

static void Main(string[] args)

    int[,] map = new int[,] {
        { 5, 4, 4},
        { 4, 3, 4},
        { 3, 2, 4},
        { 2, 2, 2},
        { 3, 3, 4},
        { 1, 4, 4},
        { 4, 1, 1},
    };
    int RowCount = map.GetUpperBound(0) + 1;
    int ColCount = map.GetUpperBound(1) + 1;
    int cnt = 0;
    int value = 0, row = 0, col = 0;
    int xMinus = 0, xPlus = 0, yPlus = 0;
    List<int> BufferIndex = new List<int>();

    bool IsFind = false;

    for (int idx = 0; idx < map.Length; idx++)
    {
        IsFind = false;
        value = 0;
        row = idx / ColCount; col = idx % ColCount;
        BufferIndex.Clear();
        if (value != map[row, col] && 0 < map[row, col])
        {
            value = map[row, col];
            BufferIndex.Add(idx); cnt++;
            IsFind = true;
        }

        while (IsFind)
        {
            if (value == 2)
            {
                int breakValue = 0;
            }
            IsFind = false;
            for (int i = 0; i < BufferIndex.Count; i++)
            {
                row = BufferIndex[i] / ColCount; col = BufferIndex[i] % ColCount;

                xMinus = col - 1;
                xPlus = col + 1;
                yPlus = row + 1;

                // -x;
                if (xMinus >= 0 &&

value == map[row, xMinus] &&

0 < map[row, xMinus] &&

!BufferIndex.Contains(row * ColCount + xMinus))
                {
                    BufferIndex.Add(row * ColCount + xMinus);
                    IsFind |= true;
                }
                // +x;
                if (xPlus < ColCount &&

value == map[row, xPlus] &&

0 < map[row, xPlus] &&

!BufferIndex.Contains(row * ColCount + xPlus))
                {
                    BufferIndex.Add(row * ColCount + xPlus);
                    IsFind |= true;
                }
                // +y;
                if (yPlus < RowCount &&

value == map[yPlus, col] &&

0 < map[yPlus, col] &&

!BufferIndex.Contains(yPlus * ColCount + col))
                {
                    BufferIndex.Add(yPlus * ColCount + col);
                    IsFind |= true;
                }
            }
        }

        for (int loop = 0; loop < BufferIndex.Count; loop++)
        {
            map[BufferIndex[loop]/ ColCount, BufferIndex[loop] % ColCount]*= -1;
        }
        Console.WriteLine("count=" + cnt);
        Print(map);
        Console.ReadLine();
        Console.Clear();
    }

    Console.WriteLine("count=" + cnt);
    Console.ReadLine();
}

static void Print(int[,] map)
{
    int RowCount = map.GetUpperBound(0) + 1;
    int ColCount = map.GetUpperBound(1) + 1;
    for (int r = 0; r < RowCount; r++)
    {
        Console.Write(r.ToString("D2")+"행 ");
        for (int c = 0; c < ColCount; c++)
        {
            Console.Write( map[r, c] + " ");
        }
        Console.WriteLine("");
    }
}

'# 1) 프로그래밍' 카테고리의 다른 글

한글분해_결합, 오토마타...  (0) 2014.01.30
달력 컨트롤] 새로 만든 달력!!!  (0) 2014.01.26
알고리즘] 1  (0) 2013.11.14
C#] 문자열 정렬처리...  (0) 2013.11.10
.net] 모니터링 프로그램...  (0) 2012.05.13

친구가 준 문제.. ( 회사 시험... )

 

다음 열의 정수 배열은 다음처럼, 현재 열의 각 정수와 그 정수가 연속적으로 나타나는 개수의 쌍으로 구성된다.
1
1 1 → 위의 열은, 1이 하나다.
1 2 → 위의 열은, 1이 두 개다.
1 1 2 1 → 위의 열은, 1이 하나, 2가 두 개다.
1 2 2 1 1 1 → 위의 열은, 1이 두 개, 2가 하나, 1이 하나다.
1 1 2 2 1 3 → 위의 열은, 1이 하나, 2가 두 개, 1이 세 개다.
1 2 2 2 1 1 3 1 → ...
1 1 2 3 1 2 3 1 1 1 → ...

0으로 시작하는 주어진 인덱스 M에 대해서,
M을 각 열의 인덱스라고 하자.
인덱스 M이 가리키는 열의 정수 배열은 무엇인가?

예를 들어,
만일 M=4 라면,
답은 "1 2 2 1 1 1"이다

 

 

C# 구현. ( 1시간 걸림. 삽질 30분후에 뭔가 안맞는것 같아 고민 하던 중에... )

 

            List<int> result = new List<int>();
            int[] prms = new int[] { 1 };
            int x = 0;
            int M = 5;
            for (int loop = 0; loop < M; loop++)
            {
                x = 0;
                for (int idx = 0; idx < prms.Length; idx++)
                {
                    if (x != prms[idx])
                    {
                        result.Add(prms[idx]);
                        result.Add(1);
                        x = prms[idx];
                    }
                    else
                        result[result.Count - 1]++;
                }

                textBox1.AppendText("" + loop + "] " + string.Join(" ", prms) + Environment.NewLine);

                prms = result.ToArray();
                result.Clear(); 
            }

 

'# 1) 프로그래밍' 카테고리의 다른 글

달력 컨트롤] 새로 만든 달력!!!  (0) 2014.01.26
알고리즘] 2  (0) 2013.11.15
C#] 문자열 정렬처리...  (0) 2013.11.10
.net] 모니터링 프로그램...  (0) 2012.05.13
.NET] 트리 뷰_ 체크박스 - 더블클릭  (0) 2012.04.09

 

 옵져버에 대해 글을 남기게 되었다. 최근 다시 디자인 패턴을 보게 되었는데, 다른 패턴들은 그저 확인정도지만,

옵져버는 그동안 긴가민가! 했던 패턴이라 다시 자세히 보게 되었다.

 

 모니터링을 만들때 각 서버에 데이타 수집받으며, 데이타를 챠트로 표시하는곳, 표시박스에 표기하거나

라인색을 표시하거나 하는 곳으로 모두 전달했는데, 여기 사용하던 패턴이 잘 못 적용되었다. 옵져버 패턴을 제대로

이해 못하고 만든거라서 설계에서 꼬여버린 케이스같다.

 

 

 

 

음... 처음 컨셉은 저랬는데... 옵져버 패턴을 잘 못 적용했넹...

 

동작은 되지만... 옵져버가 서로 뒤바꼈던것 같다.

 

데이타객체가 바뀌면 관련 객체를 업데이트 한다였는데... 소스는 좀 꼬였던것 같고..

 

 

간략하게 옵져버 패턴용 소스를 만들어봤다. 이젠 혼란스럽지 않겠지..  

 

public interface IData
{
        void Add(IHandler handler);
        void Remove(IHandler handler);
        void Notify();
}

 

public interface IHandler
{
        void Update();
}

 

public class DataObject : IData
{
        List<IHandler> handlers = new List<IHandler>();
        public void Add(IHandler handler)
        {
            handlers.Add(handler);
        }

        public void Remove(IHandler handler)
        {
            handlers.Add(handler);
        }

        public void Notify()
        {
            foreach (IHandler h in handlers)
            {
                h.Update();
            }
        }
        string text { get; set; }
        public string Text { get { return text; } set { text = value; Notify(); } }
}

public class View : IHandler
{
        static int Number = 0;
        int No = 0;
        public View()
        {
            No = Number++;
        }
        public DataObject Sv { get; set; }
        public Control HostControl { get; set; }
        public void Update()
        {
            if (HostControl != null && Sv != null) HostControl.Text = No+"]"+ Sv.Text;
        }  
}

 

// 사용

 DataObject sv = new DataObject();

// 등록

    sv.Add(new View() { Sv = sv, HostControl = label1 });
    sv.Add(new View() { Sv = sv, HostControl = label2 });
    sv.Add(new View() { Sv = sv, HostControl = label3 });

 

// 상태 업데이트 발생 이벤트 시점!

     sv.Text = "가나다";

 

 훈스 닷넷에 문의 글이 하나 올라왔다.

 

 "994.jpg", "995.jpg", "995-1.jpg", "995-2.jpg", "996.jpg", "997.jpg", "998.jpg", "998-1.jpg", "999.jpg", "1000.jpg", "1000-1.jpg",

 

정렬해야 되는데 '-' 들어간 것때문에 정렬이 이상하게 된다고...

 

Array.Sort를 이용하였다는 글이었다.

 

http://www.hoons.net/Board/qacshap/Content/60271

 

그래서 우선 간단하게 만들어본다고 시작하게 되었는데...

 

우선 첫번째 실수는 정렬에 대한 내용 이해를 잘못했다

 

994, 995, 1000, 995-1, 1000-1 형태로 정렬을 해야되는건가? 하고 코드를 시작했다.

 

답글을 보니 Lookw님은 처음 나열된 순서대로 나오도록 작성을 해 올리셨더라.

 

List<string> ls = new List<string>
{
    "1000-100","1000-99","998-1","999","999-0", "994","995","995-1",
    "999-1","1000","995-2","996","997","998"
};
var ls2 = ls.Select(x =>
{
    var subs = x.Split('-');
    if (subs.Length > 1)
        return new {Original=x, First = subs[0], Last = subs[1] };
    else
        return new {Original=x, First = subs[0], Last=string.Empty};
})
.OrderBy(x => int.Parse(x.First))
.ThenBy(x =>
{
if (x.Last != string.Empty)
    return int.Parse(x.Last);
else
    return 0;
})
.Select(x => x.Original);

 

그래서 나도 정렬 순서를 바꾸려고 코드를 수정했는데 1시간동안 수정했다.

string[] arr = new string[] {
                "994","995","995-1","995-2","996","997","998",
                "998-1","999","1000","1000-100","1000-99",
 //"994.jpg",
 //"995.jpg",
 //"995-1.jpg",
 //"995-2.jpg",
 //"996.jpg",
 //"997.jpg",
 //"998.jpg",
 //"998-1.jpg",
 //"999.jpg",
 //"1000.jpg",
 //"1000-1.jpg",
};

            int maxLenght = arr.Max(s => s.Replace(".jpg", "").Length);
            int hipen = 4;
            Func<string, string[]> Process = (s) =>
            {
                string[] NameExtensArray = s.Split(new char[] { '.' });
                string[] NameHipenArray = NameExtensArray[0].Split(new char[] { '-' });
                if (NameHipenArray.Length == 1)
                {
                    NameHipenArray = new string[] { NameHipenArray[0], "" };
                }
                return new string[] { NameHipenArray[0].PadLeft(maxLenght, '0'), NameHipenArray[1].PadLeft(hipen, '0').PadRight(hipen, '0'), NameExtensArray[NameExtensArray.LongLength - 1] };
            };

            Comparison<string> compare = (s1, s2) =>
            {
                string[] cv1 = Process(s1);
                string[] cv2 = Process(s2);
                return (cv1[0] + cv1[1]).CompareTo(cv2[0] + cv2[1]);
            };
            Array.Sort(arr, compare);

 

이렇게 작성해두고 잠깐 있으니 String.Format이 떠올랐다.

 

string k1 = string.Format("{0, 8}",  "995").Replace(" ","0");
string k2 = string.Format("{0, 8}", "1000").Replace(" ", "0");

요건 {0, 8} 같은 경우 8자리에 오른쪽 정렬, {0, -8}은 왼쪽 정렬

 

이걸로 다시... 코드를 작성!

 

 string[] arr2 = new string[] { 
         //"994","995","995-1","995-2","996","997","998",
         //"998-1","999","1000","1000-100","1000-99",
         "994.jpg",  "995.jpg",  "995-1.jpg",  "995-2.jpg",  "996.jpg",  "997.jpg",
         "998.jpg",  "998-1.jpg",  "999.jpg",  "1000.jpg",  "1000-1.jpg",

   };

         int maxLenght2 = arr2.Max(s => s.Replace(".jpg", "").Length);
         var result = from o in (arr2.Select(ars =>
         {
               string[] strings = ars.Replace(".jpg", "").Split('-');
               string opt = "0000";
               if (strings.Length > 1)
               {
                        opt = strings[1].Split('.')[0];
                }
                return new {

 key = ars,

             value = string.Format("{0," + maxLenght2 + " }",

            strings[0].Split('-')[0]).Replace(" ", "0")  +

           string.Format("{0, 4}", opt).Replace(" ", "0")

    }

   }))

         orderby o.value
         select o.key;

 

이게 뭐라고 금욜저녁에 필 꽃혀서리...

 

 

 

 

 

 

 

 

 

 

'# 1) 프로그래밍' 카테고리의 다른 글

알고리즘] 2  (0) 2013.11.15
알고리즘] 1  (0) 2013.11.14
.net] 모니터링 프로그램...  (0) 2012.05.13
.NET] 트리 뷰_ 체크박스 - 더블클릭  (0) 2012.04.09
.net ] 한글 유니코드 변환  (0) 2012.04.07

 인텔리 제이!! 음.. 좋앙..

 

가장 맘에 들었던건 단축키를 Visual Studio로 맞출 수 있는데... 몇몇 키들은 아니더랑... 오히려 더 헷갈려서 다시

이클립스로 맞춰서 쓰고 있다.

 

 이클립스에서 사용하던 프로젝트를 import 해서 바로 땡기니 설정이 모두 맞춰진 상태였다.

SVN설정까지 맞춰지더만..

 

Ant 기능이 좋던뎅... Ant 목록을 관리할수 있게 만들어져있넹...

 

플러그인이 없는건지...  weblogic plugin찾아도 안보이넹... (디버그 해보겠다고 열심히 찾아봄.. )

 

 

또 좋은점은... 이클립스는 뭐했다하면 백그라운드에서 뭔가 오래 오래 돌면서 작업이 멈춘다!

 

인텔리 제이는 그런게 거의 없네... 똑같은 프로젝트인데!

 

 

# File > Settings ( Alt + F7 )

탭사이즈 변경

Code Style > General

: 탭사이즈정보랑 들여쓰기정보 변경가능

: 각 언어별로 별도 수정이 가능함. html, java...

컴파일러 설정 java sdk버젼 설정

Compiler > Java Compiler

인코딩정보

File Encodings

: 파일 관련 인코딩 정보가 있는데

: 하단에 보면 properties 파일에 대한 인코드정보가 별도로 있음.

 직접 properties 를 열어보면 유니코드(/uXXXX)로 보이는게 한글로 보이며, 실제 저장시엔 유니코드로 저장된다.

SVN

Version Control > SubVersion

: 제외 파일을 추가 할수 있는데 Version Control > Ignored Files 에 확장자(mask), 파일등으로 등록가능함.

Font 변경

Editor > Color & Font > Font

: 폰트를 변경할때는 Save As.. 를 눌러서 이름을 정한다.

다음 Editor Font의 Show only monospaced fonts 체크를 해제하면

다른 폰트들이 나타난다. 폰트를 선택(오른쪽으로 이동)하고 apply하면 저장됨.

키보드 단축키 변경

KeyMap

: 이클립스보다 많은 단축키가 보이는데... Visual Studio 가 있어서 반가운 마음에 선택...

사용하다 다시 이클립스 사용한다. 엄청 헷갈린다.

플러그인

plugins

: 기본적으로 깔리는 것과 다운받을수 있는것으로 구분되는데 실제로 웹에서 목록을 가져오는지

 로컬에서 가져온건지 모르겠음.

 

 

 

 

 

 

 

 

 

 

 

Weblogic 에 디버그...

 

음 소스 실행을 이클립스에서 하는 거라면 바로 브레이크 포인트 잡으면 되지만...

 

Weblogic 서버를 로컬에서 돌리고, 이클립스는 코딩만, Ant를 이용해서 배포하기 때문에

 

디버깅 방법을 못찾고 있었다. 내부 인력들은 모르쇠이고 log 스크립트 보면서 하면 된다는데...

 

이게 빌드하는데 15분이니 말다했지...

 

 그래서 Visual Studio의 프로세스 디버그 처럼 뭔가 있지 않을까 하고 이클립스와 Intellij로 여기저기 뒤져보던 중

 

리포트 디버깅에 관련된 내용이 검색이 되었는데... 당췌 설정을 몰라서 하루 꼬박 삽질에 삽질을 하면서 설정을 완료했다.

 

1. weblogic 서버가 Debug모드이어야 한다.

웹로직 설치된 폴더에 user_properties\mydomain\myserver\startWebLogic.cmd ( 철자가 맞나? )

저 파일에 디버그 모드를 추가한다.

 

set debugFlag = true; // 이거 넣는데 하루 걸렸다. 영어는 짧지.. 한글 문서는 없지..

 

JVM에 디버그 모드와 함께 포트를 설정한다.

 

set JAVA_OPTION=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y suspend=y

 

제법 간단하지? 웹로직 실행선언을 보면... 

 

...\java %JAVA_OPTION% weblogic.~

 

저런 옵션을 첨에 넣어도 안되기에 JVM이란걸 알아보는데 오래 오래 걸렸던 것이다.

 

Java 실행옵션을 보면 ( java -help )

    java.exe -option class args

 

이클립스 원격 디버그 셋업 link

 

2. 이클립스 설정.

Debug 설정 창에서 Remote Application Configurations 에서 포트8000에 맞춰주면 된다.

 

3. 그래도 안되면... 방화벽

방화벽의 예외 사항으로 이클립스를 등록해주자.

 

그래도 안되면? ... 다른 방법이 있으려나?

 

 

 

 

 

 

 

'# 10) Java' 카테고리의 다른 글

Java의 properties 읽어들이기...?  (0) 2022.11.23
도구] Intellij File >setting  (0) 2013.11.01
도구] 이클립스 Snippets  (0) 2013.10.31
도구] 이클립스 Project > Properties  (0) 2013.10.31
도구] 이클립스 window > preference  (0) 2013.10.31

 

Visual studio에도 있지만...

 

eclipse는 등록이 간단했음.

 

마우스로 소스를 쭉 끌어서 우측버튼 누르면... Add Snippets 라고 뜸.

 

이름을 지정하고 등록해놓으면...

 

아래 탭으로 Snippets 가 있고

 

등록된 이름이 보임..

 

그럼 사용할때 끌어다가 에디터에 붙이면 들어감!!!

 

오! 문화적인 충격이돠...

 

Visual Studio는 Snippet 파일 하나 까서 수정해서 저장해두면

 

사용할수 있는데... 그래서 이 과정을 쉽게 하도록 프로그래밍을 할까 고민했는데...

 

요거 따라해보면 되겠다.

 

 

 

추가를 div_s1에 div_temp로 추가했더니 아래 snippets 탭에 보면..

등록된 것이 보인다!

 

 

 나를 괴롭히던...

 

소스를 받고 기본적으로 먼저와있던 개발자들이 설정해주었는데, 안되는게 너무 많았어!

   ( 정의로 이동, 인텔리센스, comment보기 등...  )

 

그래서 자바경력이 있는 사람이 일부 맞춰줬으나... 설정환경이 바뀔때마다

뭔가 틀어져서 안됨. ( 이 플젝에서 소스를 몇번이나 바꾸면서 기존 소스를 버리니 다시 잡아야 했던... )

 

 나중에 개발문서를 찾고 뒤져서 맞췄더니 그제서야 제대로 셋팅이 되었다.

 ( 5번은 바뀐것 같은데... 바뀔때마다 한나절 또는 반나절을 고생했다. 이것 때문에 열받아서

 플젝에서 나간다고 엄포도 놨었다. 개발 환경에 대한 문서가 없다고 자바 개발하던 사람들이

제대로 셋팅을 못하지? 이해불가... )

 

# Project > Properties ( 프로젝트 속성정보 )

- 리소스 인코딩 기본 정보

Resource

인코드 정보가 MS949로 되어있음.

- 자바 jar참조 셋팅

Java Build Path > tab : source

source 폴더들 ( 이거 설정되면 소스 내에 객체 참조가 되어 정의가기및 다른 기능이 된다 )

. Default output folder

: .net의 bin/debug 폴더 같은 곳.

- Jsp Fragment

이건 뭐지? 문서타입및 언어를 선택할수 있게 되있는데???

- Project Facets

프로젝트에 관련된 설정들인듯 함.

런타임시 서버로 돌지 말지, 자바 버젼등 설정가능.

- 웹컨텐츠 설정이 있네?

Web Content Settings

이거 지정하면 jsp 구식 코딩이 된거에 html tag가 색이 돌아올려나?

css profile을 설정하면 tag색이 보이려나...

!지정해보니 우선... jsp생성시 Doctype Page지정자가 나온다!

 

다른 내용은 window 속성에 있던거랑 비슷한데... 모르는게 많음.