어리석은 예언자

Posted at 2018/10/23 07:00 // in Essay/DailyComment // by Daniel

렘29:21절 만군의 여호와 이스라엘의 하나님께서 골라야의 아들 아합과 마아세야의 아들 시드기야에 대하여 이와 같이 말씀하시니라 그들은 내 이름으로 너희에게 거짓을 예언한 자라 보라 내가 그들을 바벨론의 왕 느부갓네살의 손에 넘기리니 그가 너희 눈 앞에서 그들을 죽일 것이라 22절 바벨론에 있는 유다의 모든 포로가 그들을 저줏거리로 삼아서 이르기를 여호와께서 너를 바벨론 왕이 불살라 죽인 시드기야와 아합 같게 하시기를 원하노라 하리니 23절 이는 그들이 이스라엘 중에서 어리석게 행하여이웃의 아내와 간음하며 내가 그들에게 명령하지 아니한 거짓을 내 이름으로 말함이라 나는 알고 있는 자로서 증인이니라 여호와의 말씀이니라 하시니라

어리석게 행하여..
예언자라는 사람이
이웃의 아내와 간음했고
하나님이 말씀하지 않은 말씀을 전했다.
그걸, 다른 사함은 몰랐을지라도 하나님은 아신다. “증인이니라.”
어리석은 예언자.

크리에이티브 커먼즈 라이센스
Creative Commons License

그립다

Posted at 2018/04/18 01:11 // in Essay // by Daniel

머리이신 예수님을 따른다는 것은 무엇일까? 소중한 사실의 두가지 예로 말하자면,

주기철 목사님이 마지막으로 석방되어 나오셨을 때 신사참배에 반대하여 신앙의 순결을 지켰던 사람들이 신사참배한 교단과 교회를 비판하며 새로운 교단을 세우자고 찾아왔단다. 그때 주기철목사님은 아직 그럴 만한 때가 아니며 그것은 우리의 소관이 아니라는 맥빠진 답을 주셨다고 한다.

손양원목사님께서 신사참배를 반대하여 감옥살이를 하시고 해방 후에 석방되셨을 때 신사참배에 반대했던 성도들이 모여 신사참배를 타협했던 교회들을 비판했을 때 손양원목사님은 이런 답을 주셨다고 한다. “우리는 몸은 수고스러웠으나 마음은 얼마나 평안했습니까? 하지만 그분들은 몸은 편했을 지언정 마음이 쉼없이 괴로웠을 테니 우리는 이를 살펴야 합니다.”

http://nomad2012.egloos.com/m/1169992

크리에이티브 커먼즈 라이센스
Creative Commons License

주님밖에

Posted at 2018/03/27 01:49 // in Essay // by Daniel

내가 이같이 우매무지하니 주 앞에 짐승이오나
내가 항상 주와 함께하므로 주께서 나의 오른손을 붙드셨나이다.
주의 교훈으로 나를 인도하시고
후에는 영광으로 나를 영접하시리니
하늘에서는 주 외에 누가 내게 있으리요
땅에서는 주 밖에 나의 사모할 자 없나이다
내 육신과 심장은 쇠잔하나
하나님은 나의 반석이시요
나의 영원한 분깃이시라
대저 주를 떠난 자는 망하리니
음녀같이 주를 떠난 자를 주께서 다 멸하셨나이다.
하나님을 가까이함이 내게 복이라
주 여호와를 나의 피난처로 삼아
주의 행사를 항상 전파하리이다

하나님을 가까이 함이 내게 복이라
하나님을 가까이 함이 내게 복이라

갈급한 요즘, 자주 생각나는 말씀입니다.

크리에이티브 커먼즈 라이센스
Creative Commons License

Apache POI의 엑셀 Formula에BIN2HEX HEX2BIN 지원 추가하기

Posted at 2018/01/10 15:04 // in Programming // by Daniel

POI의 엑셀 Formula 중에, BIN2HEX HEX2BIN 이 지원되지 않았습니다.
이를 커스텀으로 추가하려고 코드를 짜봤습니다.


package com.autron.odin.excel.core.ethercc.imports;

import org.apache.poi.ss.formula.OperationEvaluationContext;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.formula.eval.EvaluationException;
import org.apache.poi.ss.formula.eval.OperandResolver;
import org.apache.poi.ss.formula.eval.StringEval;
import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.formula.functions.FreeRefFunction;

/** *

 * com.autron.odin.excel.core.ethercc.imports
 *   |_ Hex2Bin.java
 * 
 * Description:    to support formula HEX2BIN
 * Howto Use : AnalysisToolPak.registerFunction("HEX2BIN", Hex2Bin.instance);
 * 
* Company: Hyundai Autron * Author: JSSONG * Date: 2018. 1. 10. * * version *
 * Revision History:  
 * Version No:  Date of update:    Updated by:  Changes
 * 1.0.0   		2018. 1. 10.        JSSONG       refs #10669 #11020 to support formula HEX2BIN
 * 
*/
class Hex2Bin implements FreeRefFunction { public static final FreeRefFunction instance = new Hex2Bin(); /* (non-Javadoc) * see org.apache.poi.ss.formula.functions.FreeRefFunction#evaluate(org.apache.poi.ss.formula.eval.ValueEval[], org.apache.poi.ss.formula.OperationEvaluationContext) */ Override public ValueEval evaluate(ValueEval[] paramArrayOfValueEval, OperationEvaluationContext paramOperationEvaluationContext) { return evaluateHex2Bin(paramArrayOfValueEval); }

/** * Desc : evaluate HEX2BIN * HEX2BIN * 16진수를 2진수로 변환합니다. * – number 필수 요소입니다. 변환할 16진수입니다. * number는 최대 10자까지 사용할 수 있습니다. * number의 최상위 비트는 부호 비트(오른쪽에서 40번째 비트)이고, 나머지 9비트는 값을 나타내는 비트입니다. * 음수는 2의 보수 표기법으로 표시됩니다. * – places 선택 요소입니다. * 사용할 자릿수입니다. * places를 생략하면 HEX2BIN에서는 필요한 최소 자릿수가 사용됩니다. * places를 지정하면 반환 값의 앞부분을 0으로 채울 수 있습니다. * * Method Name : evaluateHex2Bin * param paramArrayOfValueEval * @return evaluated StringEval(BIN value) or ErrorEval.VALUE_INVALID */ private ValueEval evaluateHex2Bin(ValueEval[] paramArrayOfValueEval) { String strHex = “”; int places = -1; if (paramArrayOfValueEval.length==1) { strHex = OperandResolver.coerceValueToString(paramArrayOfValueEval0); } if (paramArrayOfValueEval.length==2) { strHex = OperandResolver.coerceValueToString(paramArrayOfValueEval0); try { places = OperandResolver.coerceValueToInt(paramArrayOfValueEval1); } catch (EvaluationException e) { e.printStackTrace(); } } try { String binStr = Integer.toString(Integer.parseInt(strHex, 16),2); if (places>0) { if (places > binStr.length()) { int num0 = places – binStr.length(); String str0 = “”; for (;num0>0;num0—) { str0 += “0”; } binStr = str0 + binStr; } } // System.out.println(strHex + “ “ + places + “ -> “ + binStr); return new StringEval(binStr); } catch (Exception e) { return ErrorEval.VALUE_INVALID; } }
}


package com.autron.odin.excel.core.ethercc.imports;

import org.apache.poi.ss.formula.OperationEvaluationContext;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.formula.eval.EvaluationException;
import org.apache.poi.ss.formula.eval.OperandResolver;
import org.apache.poi.ss.formula.eval.StringEval;
import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.formula.functions.FreeRefFunction;

/** *

 * com.autron.odin.excel.core.ethercc.imports
 *   |_ Bin2Hex.java
 * 
 * Description:    to support formula BIN2HEX.
 * Howto Use : AnalysisToolPak.registerFunction("BIN2HEX", Bin2Hex.instance);
 * 
* Company: Hyundai Autron * Author: JSSONG * Date: 2018. 1. 10. * * version *
 * Revision History:  
 * Version No:  Date of update:    Updated by:  Changes
 * 1.0.0   		2018. 1. 10.        JSSONG       refs #10669 #11020 to support formula BIN2HEX
 * 
*/
class Bin2Hex implements FreeRefFunction { public static final FreeRefFunction instance = new Bin2Hex(); /** * Desc : Private Constructor of Bin2Hex.java class */ private Bin2Hex() { // make it private } /** * Desc : * Method Name : evaluate * param paramArrayOfValueEval * param paramOperationEvaluationContext * return */ @Override public ValueEval evaluate(ValueEval[] paramArrayOfValueEval, OperationEvaluationContext paramOperationEvaluationContext) {
// System.out.println(“BIN2HEX “ + paramArrayOfValueEval + paramOperationEvaluationContext); return evaluateBin2Hex(paramArrayOfValueEval); }

/** * Desc : evaluate BIN2HEX * Method Name : evaluateBin2Hex * BIN2HEX(number, [places]) * - number 필수 요소입니다. 변환할 2진수입니다. * number는 최대 10자(10비트)까지 사용할 수 있습니다. 최상위 비트는 부호 비트이고 나머지 9비트는 값을 * 나타내는 비트입니다. 음수는 2의 보수 표기법으로 표시됩니다. * - places 선택 요소입니다. 사용할 자릿수입니다. * places를 생략하면 필요한 최소 자릿수가 사용됩니다. places를 지정하면 반환 값의 앞부분을 0으로 채울 수 * 있습니다. * param paramArrayOfValueEval * @return evaluated StringEval(HEX value) or ErrorEval.VALUE_INVALID */ private ValueEval evaluateBin2Hex(ValueEval[] paramArrayOfValueEval) { String strBin = “”; int places = -1; if (paramArrayOfValueEval.length==1) { strBin = OperandResolver.coerceValueToString(paramArrayOfValueEval0); } if (paramArrayOfValueEval.length==2) { strBin = OperandResolver.coerceValueToString(paramArrayOfValueEval0); try { places = OperandResolver.coerceValueToInt(paramArrayOfValueEval1); } catch (EvaluationException e) { e.printStackTrace(); } } try { String hexStr = Integer.toString(Integer.parseInt(strBin, 2),16); if (places>0) { if (places > hexStr.length()) { int num0 = places – hexStr.length(); String str0 = “”; for (;num0>0;num0—) { str0 += “0”; } hexStr = str0 + hexStr; } } // System.out.println(strBin + “ “ + places + “ -> “ + hexStr); return new StringEval(hexStr); } catch (Exception e) { return ErrorEval.VALUE_INVALID; } } }

사용법은 위 클래스를 추가하고 런타임에

AnalysisToolPak.registerFunction("BIN2HEX", Bin2Hex.instance);
AnalysisToolPak.registerFunction("HEX2BIN", Hex2Bin.instance);

코드를 호출하면 됩니다.
이외에도 지원안되는 함수가 많이 있습니다.

제 사용 예는 아래와 같습니다.


// Register BIN2HEX Formula
AnalysisToolPak.registerFunction(“BIN2HEX”, Bin2Hex.instance);

// Register HEX2BIN formula
AnalysisToolPak.registerFunction(“HEX2BIN”, Hex2Bin.instance);

evaluator = wb.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateAll();

wb는 org.apache.poi.ss.usermodel.Workbook 타입입니다.

크리에이티브 커먼즈 라이센스
Creative Commons License