[하와이]Mokulele 항공 탑승기

배경

오아후에서 마우이로 가는 비행기표를 알아보다가 하와이안 항공보다 약간 싼 항공사가 있길래 선택한 곳이 모쿨렐레(Mokulele) 항공.

우선 하와이 가기 전에 불상사가 하나 있었는데, 처음 예약했던 호놀룰루에서 마우이의 카훌루이(Kahului) 공항으로 가는 비행기를 항공사측에서 일방적으로 취소해 버림.

스케줄을 변경하는 과정에서 카훌루이 공항이 아니라 머물 예정이었던 리조트에서 가까운 카팔루아(Kapalua) 공항으로 행선지를 변경했는데 이건 결과적으로 잘한 일이었음.

어쨌든 호놀룰루 공항에서 마우이로 가려고 모쿨렐레 항공 데스크를 찾아가려고 하니 그것부터 찾기가 어려웠음(안내하는 사람이나 지나가는 사람들에게 물어봐도 제대로 아는 사람이 거의 없었음)

결국 수소문해서 알아냈는데 무료 셔틀을 타고 이동해야 하는 3 터미널 지역에 모쿨렐레 항공 데스크가 있었음

비행기

내가 본 이 항공사 비행기는 전부 Cessna Caravan 기종이었는데 (아래 비디오 참고)

대략 8명 정도가 타는 크기라서 마치 비행기 투어하는 느낌이었음

모쿨렐레 비행기 장점

  • 큰 비행기보다 훨씬 좋은 전망을 볼 수 있음
  • 승객이 워낙 적다보니 체크인을 위해 기다리는 시간이 거의 없고 심지어 정시보다 먼저 출발.
  • 비행기만 내리면 버스처럼 바로 짐 찾아서 나갈 수 있음.

모쿨렐레 비행기 단점

  • 항공사가 영세해서 그런지 처음에 적었듯이 일방적으로 스케줄이 변경되는 위험이 있음. 나중에 인터넷 검색해 보니 이런 경우가 종종 있는 듯.
  • 비행기 타는 곳이 대부분의 항공사가 모여있는 1, 2 터미널이 아니고 따로 떨어져서 찾기 어려움
  • 소음이 크고 그리 안락하지는 않음 (아래 착륙 동영상 참고)

[산토리니] Gold Suites 호텔

  • 호텔

당시에 Andromeda Gold Suite 라는 이름의 호텔이었는데

그 후 이름이 바뀌었는지 검색이 되지 않고 현재는 Gold Suites 이라는 이름인 듯

  • 전망



  • 내부

전체적으로 아주 좋은 시설.

언덕을 파서 만든 구조다보니 테라스 외에는 창문이 없어 약간 답답하긴 하다.

아마 이 근처 호텔들이 대부분 그럴 듯.



  • 조식

조식은 전날 저녁에 원하는 옵션을 선택하면 아침에 테라스에 차려준다.

  • 호텔에 있는 수영장


P-value에 대하여

The American Statistician에 게재 예정인 The ASA’s statement on p-values: context, process, and purpose 중에서 발췌

원문 링크: http://dx.doi.org/10.1080/00031305.2016.1154108

  • P-value: 특정한 통계 모형 하에서 통계량(ex. 표본 평균 차이)이 실제 관측된 값 이상이 될 확률
  • 원칙(Principles)
    1. P-value는 데이터가 특정 통계 모형과 얼마나 다른지 나타냄
    2. P-value는 가설이 참일 확률이나 데이터가 우연일 확률을 알려주지 않음; 종종 p-value를 귀무가설의 진위나 관측된 데이터가 우연일 확률에 대한 진술로 바꾸려는 사람들이 있지만 p-value는 그런 의미가 아니라 어떤 가설과 관련된 데이터에 대한 진술임
    3. p-value(0.05와 같은) 어떤 기준을 넘는지만으로 과학적 결론과 경영상 또는 정치적 결정을 해서는 안 되고 관련된 여러 요인들을 고려해야 함
    4. 제대로 된 추론을 위해서는 모든 정보가 그대로 보여져야 함; p-value나 연관된 분석들 중에서 선택적으로 골라서 사용해서는 안 되고 모든 데이터를 공개해야 함. 적어도 어떤 분석을 수행했는지를 전부 아는 상태에서 p-value와 통계량으로부터 결론을 내려야 함
    5. P-value는 영향력이나 결과의 중요성을 나타내지 않음; 표본의 크기가 크거나 측정이 정밀하다면 영향이 아주 적더라도 작은 p-value가 나올 수 있음. 반대로 표본의 크기가 작거나 측정이 부정확하다면 영향이 크더라도 특별할 것 없는 p-value가 나올 수 있음
    6. P-value만으로는 모형이나 가설에 대한 근거가 되지 않음; 문맥이나 다른 근거가 없는 상태에서는 p-value는 제한적인 정보만을 줌. p-value0.05 정도로 작다고 해서 귀무가설에 반하는 강한 증거가 되는 것이 아니고 반대로 p-value가 크다고 해서 귀무가설을 지지하는 근거가 되는 것이 아님. 따라서 다른 대안이 있다면 p-value를 계산하는 것으로 데이터 분석이 끝나서는 안 됨.

윈도우 상에서 이맥스의 ange ftp에 관하여

원래 Gnu Emacs에서 기본적으로 ange ftp를 통해 원격 파일 편집을 할 수 있는데 윈도우(7)에서는 문제가 있는 듯

윈도우에 기본적으로 있는 ftp가 이맥스와 뭔가 안 맞는지 ftp 접속할 때 암호를 입력하면 그대로 정지해 버리는 현상 발생

이런 경우 ftp://ftp.gnu.org/old-gnu/emacs/windows/contrib/ftp-for-win32.zip 를 내려받아 실행파일을 적당한 위치에 넣고 .emacs에 다음과 같이 추가하면 ange ftp가 정상적으로 작동함

(setq ange-ftp-ftp-program-name “새로 받은 ftp 실행파일의 위치”)

 

[괌] Ritidian Beach

  • Ritidian point라고도 불림
  • 비치는 정말 깨끗하고 갔던 날 날씨도 좋았음
  • 가는 길은 좋지 않고 표지판도 잘 되어있지 않음
  • 리티디언 비치는 자연보호 구역 안에 있어서 통제구역처럼 생긴 곳으로 들어가야 하는 것만 기억하면 찾기 어렵지 않음
  • 왠지 들어가면 안 될 것 같아서 지나치는 것이 흔히 하는 실수임
  • 오후 3시쯤에 방문자들을 전부 내보내기 때문에 일정에 유의해야 함


[QuantLib] Sobol Sequence

의외로 QuantLib에 기반한 샘플 코드를 구하기 쉽지 않다.

아래는 QuantLib Sobol 난수를 사용한 Monte Carlo Option Pricing의 예로,
QuantLib
으로 Sobol Sequence를 생성하는 기능을 활용하기 위함.

컴파일 환경: Visual Studio 2010 Express + Boost 1.47 +
QuantLib 1.1

 

    1 #include<cmath>

    2 #include<ql/quantlib.hpp>

    3 

    4 using namespace QuantLib;

    5 

    6 int main() {

    7 

    8     const double PI = 3.141592653589793238462;

    9 

   10     int nSim = 100000;

   11     double underlying = 36;

   12     double strike = 40;

   13     double dividendYield = 0.00;

   14     double riskFreeRate = 0.06;

   15     double volatility = 0.20;

   16     double maturity = 1;

   17     unsigned type = 1; // call: 0, put: 1

   18 

   19     double dt = maturity;

   20     double s = 0;

   21 

   22     double payoff;

   23     double price = 0;

   24 

   25     SobolRsg sobolGen(2);

   26     std::vector<Real> sampleSobol(sobolGen.dimension());

   27     //sobolGen.skipTo(4096);

   28 

   29     for(int i = 0; i < nSim; i++) {

   30 

   31         sampleSobol = sobolGen.nextSequence().value;

   32 

   33         double d0 = sampleSobol[0];

   34         double d1 = sampleSobol[1];

   35         // Box-Muller

   36         double d2 = sqrt(-2 * log(d0)) * cos(2 * PI * d1);

   37 

   38         //std::cout << d2 << “, “;

   39 

   40         s = underlying * exp((riskFreeRate – dividendYield – 0.5 * volatility * volatility) * dt

   41            + volatility * d2 * sqrt(dt));

   42 

   43         if(type==0) {

   44            if(s > strike) {

   45                payoff = s – strike;

   46            } else {

   47                payoff = 0;      

   48            }

   49         } else {

   50            if(s < strike) {

   51                payoff = strike – s;

   52            } else {

   53                payoff = 0;

   54            }

   55         }

   56 

   57         price += payoff;

   58     }

   59 

   60     price /= nSim;

   61     price *= exp(-riskFreeRate * maturity);

   62 

   63     std::cout << price << std::endl;

   64 

   65 }

 

파이썬 모듈: Oracle 테이블의 컬럼 정보를 csv 파일에 저장하기

”’
Created on 2011. 8. 20.

@author: “Hur, Suhkjin”
”’

import csv
import cx_Oracle

connection = cx_Oracle.connect(“user”, “pass”, “XXX.XXX.XXX.XXX:1521/ORCL”)
cursor = connection.cursor()

# list of tables
sql = “select * from tab”
cursor.execute(sql)

tab_names = []
for row_data in cursor:
    tab_names.append(row_data[0])

# ‘w’ -> extra carriage returns
outputFile = open(‘acc_tables.csv’,’wb’)
output = csv.writer(outputFile, dialect=’excel’)
          
for tab_name in tab_names:
    if tab_name.startswith(‘ACC’): # filter the table names
       
        cursor.execute(“””
        select T.COLUMN_ID, C.COLUMN_NAME, C.COMMENTS, T.DATA_TYPE,
        T.DATA_LENGTH, T.NULLABLE, T.DATA_DEFAULT
        from USER_TAB_COLUMNS T, USER_COL_COMMENTS C
        where T.TABLE_NAME = ‘””” + tab_name + “””‘
        and C.TABLE_NAME = T.TABLE_NAME
        and T.COLUMN_NAME = C.COLUMN_NAME
        ORDER BY COLUMN_ID”””)
       
        # table name
        output.writerow([tab_name])
       
        # column descriptions
        cols = []
        for col in cursor.description:
            cols.append(col[0])
        output.writerow(cols)
       
        # one row at a time
        for row_data in cursor:
            output.writerow(row_data)
        output.writerow(‘\n’)

outputFile.close()
       
cursor.close()
connection.close()

################################################################################

  1. 설명
    • cx_Oracle이라는 파이썬 모듈 사용
    • “user”, “pass”, “XXX.XXX.XXX.XXX:1521/ORCL”는 오라클 서버 접속 정보
    • 이 예에서는 테이블명이 ACC로 시작하는 테이블만 처리
    • 이 예에서는 acc_tables.csv에 결과 저장
    • output.writerow([tab_name])에서 tab_name 대신 [tab_name]을 사용한 이유는 writerow가 String 하나를 받으면 그 String을 이루고 있는 문자들을 한 개의 셀에 하나씩 저장하기 때문
  2. 결과: acc_tables.csv파일에 다음과 같은 내용이 각 테이블에 대해 저장된다.
ACC_XXX
COLUMN_ID COLUMN_NAME COMMENTS DATA_TYPE DATA_LENGTH NULLABLE DATA_DEFAULT
1 DT 기준일 CHAR 8 N
2 ACCOUNT_UUID 계좌 UUID VARCHAR2 36 N
3 PAR_VAL 액면 가격 NUMBER 22 N