2015년 12월 15일 화요일

아파치 에러(mod_passenger unixd_config) 처리

에러내용
$ /etc/apache2# service apache2 start
 * Starting web server apache2                                                                                  *
 * The apache2 configtest failed.
Output of config test was:
apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/passenger.load: Cannot load /var/lib/gems/1.8/gems/passenger-4.0.46/buildout/apache2/mod_passenger.so into server: /var/lib/gems/1.8/gems/passenger-4.0.46/buildout/apache2/mod_passenger.so: undefined symbol: unixd_config
Action 'configtest' failed.
The Apache error log may have more information.

원인
Apache 2.4에서 unixd_config 이름이 ap_unixd_config 로 변경됨

해결방안
아래 바이너러를 설치하고 아파치 실행
$ apt-get install libapache2-mod-passenger

또는
./bin/passenger-install-apache2-module로 모듈 재컴파일

2015년 12월 3일 목요일

WindowsBuilder 설치하기




SWT UI 디자인을 편하게 해주는 툴이당.
http://www.eclipse.org/windowbuilder/download.php 에서 다운로드 경로 확인
Help > Install new software 선택하고 Add 클릭한 다음 위 URL 입력
SWT Designer, WindowsBuilder Engine 체크하고 설치하기

디자인할 자바 파일을 우클릭한 다음 Open With > WindowsBuilder Editor 선택





SWT 개발환경 구축하기



SWT 다운로드
http://www.eclipse.org/swt/

File > Import > General > Existing Projects into Workspace
Select archive file 선택하고 Browser 버튼을 클릭해서 다운받은 파일 지정하고 Finish 클릭

File > New > Java Project 선택하고 기타 정보를 입력한 후 프로젝트 생성
생성한 프로젝트 Properties에서 Java Build Path > Projects 선택하고 Add 버튼 클릭
org.eclipse.swt 체크하고 OK





공휴일 여부 확인 메서드 (대체공휴일 포함)


package util;

import java.text.ParseException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ibm.icu.util.ChineseCalendar;

public class Holiday {
    static Logger logger = LoggerFactory.getLogger(Holiday.class);

    public static void main(String[] args) throws Exception {
//        long date = DateUtils.parseDate("20180507", "yyyyMMdd").getTime();
        long date = DateUtils.parseDate("20160210", "yyyyMMdd").getTime();
//        long date = DateUtils.parseDate("20171006", "yyyyMMdd").getTime();
        boolean isLegalHoliday = isLegalHoliday(date);
        boolean isWeekend = isWeekend(date);
        boolean isAlternative = isAlternative(date);
        boolean isHoliday = isHoliday(date);
       
        System.out.println(isLegalHoliday);
        System.out.println(isWeekend);
        System.out.println(isAlternative);
        System.out.println(isHoliday);
    }
   
    /**
     * 공휴일 여부
     * @param date
     */
    public static boolean isHoliday(long date) {
        return isLegalHoliday(date) || isWeekend(date) || isAlternative(date);
    }
   
    /**
     * 음력날짜 구하기
     * @param date
     * @return
     */
    public static String getLunarDate(long date) {
        ChineseCalendar cc = new ChineseCalendar(new java.util.Date(date));
        String m = String.valueOf(cc.get(ChineseCalendar.MONTH) + 1);
        m = StringUtils.leftPad(m, 2, "0");
        String d = String.valueOf(cc.get(ChineseCalendar.DAY_OF_MONTH));
        d = StringUtils.leftPad(d, 2, "0");
       
        return m + d;
    }
   
    /**
     * 법정휴일
     * @param date
     * @return
     */
    public static boolean isLegalHoliday(long date) {
        boolean result = false;
       
        String[] solar = {"0101", "0301", "0505", "0606", "0815", "1225"};
        String[] lunar = {"0101", "0102", "0408", "0814", "0815", "0816", "1231"};
       
        List<String> solarList = Arrays.asList(solar);
        List<String> lunarList = Arrays.asList(lunar);
       
        String solarDate = DateFormatUtils.format(date, "MMdd");
        ChineseCalendar cc = new ChineseCalendar(new java.util.Date(date));
       
//        String y = String.valueOf(cc.get(ChineseCalendar.EXTENDED_YEAR) - 2637);
        String m = String.valueOf(cc.get(ChineseCalendar.MONTH) + 1);
        m = StringUtils.leftPad(m, 2, "0");
        String d = String.valueOf(cc.get(ChineseCalendar.DAY_OF_MONTH));
        d = StringUtils.leftPad(d, 2, "0");
       
        String lunarDate = m + d;
       
        if (solarList.indexOf(solarDate) >= 0) {
            return true;
        }
        if (lunarList.indexOf(lunarDate) >= 0) {
            return true;
        }
       
        return result;
    }
   
    /**
     * 주말 (토,일)
     * @param date
     * @return
     */
    public static boolean isWeekend(long date) {
        boolean result = false;
       
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(date);
       
        //SUNDAY:1 SATURDAY:7
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
            result = true;
        }
       
        return result;
    }
   
    /**
     * 대체공휴일
     * @param date
     * @return
     */
    public static boolean isAlternative(long date) {
        boolean result = false;
       
        //설날 연휴와 추석 연휴가 다른 공휴일과 겹치는 경우 그 날 다음의 첫 번째 비공휴일을 공휴일로 하고, 어린이날이 토요일 또는 다른 공휴일과 겹치는 경우 그 날 다음의 첫 번째 비공휴일을 공휴일로 함
        //1. 어린이날
        String year = DateFormatUtils.format(date, "yyyy");
        java.util.Date d = null;
        try {
            d = DateUtils.parseDate(year+"0505", "yyyyMMdd");
        } catch (ParseException e) {}
        if (isWeekend(d.getTime()) == true) {
            d = DateUtils.addDays(d, 1);
        }
        if (isWeekend(d.getTime()) == true) {
            d = DateUtils.addDays(d, 1);
        }
        if (DateUtils.isSameDay(new java.util.Date(date), d) == true) {
            result = true;
        }
       
        //2. 설
        String lunarDate = getLunarDate(date);
        Calendar calendar = Calendar.getInstance();
        d = new java.util.Date(date);
        if (StringUtils.equals(lunarDate, "0103")) {
           
            d = DateUtils.addDays(d, -1);
            calendar.setTime(d);
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                return true;
            }
           
            d = DateUtils.addDays(d, -1);
            calendar.setTime(d);
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                return true;
            }
           
            d = DateUtils.addDays(d, -1);
            calendar.setTime(d);
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                return true;
            }
        }
       
        //3. 추석
        d = new java.util.Date(date);
        if (StringUtils.equals(lunarDate, "0817")) {
            d = DateUtils.addDays(d, -1);
            calendar.setTime(d);
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                return true;
            }
           
            d = DateUtils.addDays(d, -1);
            calendar.setTime(d);
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                return true;
            }
           
            d = DateUtils.addDays(d, -1);
            calendar.setTime(d);
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                return true;
            }
        }
       
        return result;
    }
   
}