728x90

24살 청년은 자신이 살 날이 얼마 남지 않았다는 것을 알았다. 그는 죽음을 앞두고 느낀 바를 모두와 나누고 싶은 마음에 레딧(Reddit)이라는 소셜뉴스웹사이트에 공개 편지를 올렸다


"저는 곧 세상을 떠납니다. 그래도 누군가 이걸 읽어주면 기쁠 것 같아요. 


저는 고작 24살이지만 인생의 마지막 넥타이를 준비해뒀어요. 몇 달 뒤 제 장례식에서 맬 넥타이죠. 양복과 좀 어울리지 않지만, 그 상황에 가장 어울리는 타이라고 생각해요. 


암 진단을 받은 건 이미 너무 늦은 때였어요. 치료하면 오래 살 수 있다는 희망조차 가질 수 없었죠. 죽음을 맞이하면서 가장 중요한 건, 제가 존재함으로써 이 세상이 좀 더 나은 곳이 됐다는 확신이라는 걸 깨달았어요. 이제까지 제가 살아온 인생을 돌이켜보면 저의 존재가, 좀 더 정확히 말하자면 그 존재의 상실이 큰 일은 아니예요. 별로 세상에 도움이 될 일을 하지 못했거든요. 


전에는 생각이 너무 많았어요. 하지만 시간이 얼마 남지 않았다는 것을 알게 되니까 뭐가 더 중요한 지가 명확해졌어요. 그래서, 실은 이기적인 이유로 이 글을 씁니다.  제가 깨달은 것을 여러분과 공유함으로써 제 삶의 의미를 찾고 싶어서요. 


1. 좋아하지 않는 일에 시간을 낭비하지 마세요. 안 좋아하는 일로는 절대 성공할 수 없어요. 정말 그 일을 사랑해야만 인내와 열정을 쏟아붓고 헌신할 수 있으니까요.

2. 남의 시선을 두려워하는 것만큼 멍청한 일은 없어요. 두려움은 당신을 무력하게 만들어요. 남들의 눈치를 보고 한 번 굽힌다면 상황이 계속 악화돼 당신에게는 빈 껍데기만 남을 거예요. 내면의 소리를 따르세요. 누군가는 미쳤다고 할 수도 있지만, 당신을 전설로 생각하는 사람도 분명히 있을 거니까요.

3. 인생의 주도권을 잡으세요. 인생에 일어나는 모든 일에 전적으로 책임질 수 있도록. 나쁜 습관을 없애고, 건강한 삶의 습관을 기르세요. 즐겁게 할 수 있는 운동도 찾으면서요. 무엇보다도 미루지 마세요. 남이 아닌 당신 스스로 내린 결정이 인생을 좌우하게 하세요.

4. 주위 사람들에게 감사하세요. 친구들과 가족은 무한한 에너지의 근원이자 사랑이니까요. 어떤 것도 당연하게 여기지 마세요.


이 단순한 깨달음이 얼마나 중요한지 말로 다 표현할 수가 없네요. 그래도 전 이제 시간의 가치를 뼈저리게 깨달았고, 여러분이 제 말에 귀 기울여주면 좋겠어요. 인생의 마지막에 의미있는 일을 할 수 있어서 다행이예요. 인공지능의 발전이나 엘론 머스크( Elon Musk, 테슬라모터스 CEO)의 멋진 프로젝트를 볼 수 없다는 건 좀 유감스럽네요. 그리고 시리아와 우크라이나 전쟁이 빨리 끝나기를 기도합니다. 


우리는 죽을 때까지 건강과 균형 잡힌 육체를 유지하는데 신경을 쓰지만, 우리 몸이 포장에 불과하다는 걸 깨닫지 못해요. 우리의 인성, 생각, 신념, 의도를 세상에 배달하기 위한 상자요. 이 상자에 세상을 바꿀 만한 알맹이가 들어있지 않다면, 상자가 사라져도 큰 문제는 아니예요. 우리 모두에게 가능성이 있지만, 그것을 실현하려면 엄청난 용기가 필요해요.


당신은 그저 주어진 상황대로 흘러가면서 하루 하루, 또는 매 시간을 잃어버릴 수도 있어요. 혹은 당신의 신념을 위해 싸우고 멋진 이야기를 써 나갈 수도 있겠죠. 현명한 선택을 하시길 바랄게요.


이 세상에 흔적을 남겨주세요. 의미있는 인생을 사세요. 당신 방식대로요. 일단 저질러 봐요. 종국에는 우리 모두가 떠나게 될 이 장소는 뭐든지 가능한 아름다운 놀이터예요. 어쨌든 영원히 머무를 수는 없죠. 지구는 미지의 우주와 끝없는 어둠을 향해 엄청난 속도로 달려가고 있고, 우리의 삶은 찰나의 불꽃일 뿐이잖아요.그러니 열정을 갖고 인생을 즐기세요. 재미있고, 의미있게요! 


고맙습니다!"


이 젊은 청년은 정말 중요한 메시지를 전달하려 했다. 그가 세상을 떠나도 마지막 당부의 말은 오래 기억될 것이다. 

728x90

'향기나는글' 카테고리의 다른 글

성공을 가르는 다섯가지  (0) 2017.02.06
착한 빵집 아저씨  (0) 2016.05.11
인생에서 가장 행복 했던 순간  (0) 2016.04.27
제이슨 마라즈 - I'm yours  (0) 2016.04.23
빈틈  (0) 2016.04.23
728x90











728x90

'하늘을 사랑한 사람 여행기' 카테고리의 다른 글

남해 보리암  (0) 2016.05.29
남해 독일 마을  (0) 2016.05.29
전주한옥마을_풍남문  (0) 2016.05.06
윤동주 시인님의 언덕에 가다  (0) 2016.04.09
윤동주 시인님 문학관에 가다  (0) 2016.04.09
728x90












728x90

'하늘을 사랑한 사람 여행기' 카테고리의 다른 글

남해 독일 마을  (0) 2016.05.29
전주한옥마을 2  (0) 2016.05.06
윤동주 시인님의 언덕에 가다  (0) 2016.04.09
윤동주 시인님 문학관에 가다  (0) 2016.04.09
외도 여행 두번째  (0) 2015.05.31
728x90

-- 분석 함수

    -- RANK OVER()

    -- ROW_NUMBER() OVER() ** 중요  제일 많은 씀 **

      -- 순위를 구함. 

      -- RANK() OVER()는 동일 순위인 경우 1,1,3, 형식으로 출력하지만

      -- ROW_NUMBER() OVER()는 동일 순위인 경우 1,2,3, 형식으로 출력

      -- DENSE_RANK() OVER()는 동일 순위인 경우 1,1,2 형식으로 출력

      -- ROW_NUMBER() OVER()는 매우매우매우 중요한 함수이므로 반드시 알아 둘것 !!!!!!!!!!!!!!!!!!!!!!!

      

      --기본급 내림차순으로 순위를 구하기

      SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa; -- 비교데이타가 똑같으면 순위를 건너뜀

      

      SELECT name, basicpay, ROW_NUMBER() OVER(ORDER BY basicpay DESC) 순위 FROM insa; -- 비교데이타가 똑같아도 순위를 차례대로 매김

      

      -- 기본급 내림차순으로 순위. 단, 기본급이 같으면 수당 내림차순.

      SELECT name, basicpay, sudang, RANK() OVER(ORDER BY basicpay DESC, sudang DESC) 순위 FROM insa;

      

       SELECT name, basicpay, sudang, ROW_NUMBER() OVER(ORDER BY basicpay DESC, sudang DESC) 순위 FROM insa;

      

      -- 부서별 기본급의 내림차순 순위 구하기

      SELECT name, basicpay, buseo, 

        RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

      

      SELECT name, basicpay, buseo, 

        ROW_NUMBER() OVER(PARTITION BY buseo ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

      

      -- 출신도별 부서별 순위(학년의 반별)

      SELECT name, basicpay, city, buseo, 

        RANK() OVER(PARTITION BY city ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

        

      -- 여자 인원수가 가장 많은 부서는?

      SELECT buseo, COUNT(*) FROM insa

        WHERE SUBSTR(ssn,8,1) IN (2,4,6)

        GROUP BY buseo;

        

      SELECT buseo FROM(

      SELECT buseo, COUNT(*) cnt, RANK() OVER(ORDER BY COUNT(*) DESC) 순위

        FROM insa WHERE SUBSTR(ssn,8,1) IN (2,4,6) GROUP BY buseo

        ) WHERE 순위 =1;

        

      -- 기본급여 많이 받는 1~10등 까지 출력(name, basicpay)

      SELECT name, basicpay,RANK() OVER(ORDER BY basicpay DESC) 순위 FROM(

      SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa 

      ) WHERE 순위 <=10;

      

      -- 기본급 상위 10% 출력(name, basicpay)

       SELECT name, basicpay FROM(

        SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa 

        )WHERE 순위<=TRUNC((SELECT COUNT(*) FROM insa) *0.1);

      

      -- 기본급 하위 10% 출력(

      SELECT name, basicpay FROM(

        SELECT name, basicpay, RANK() OVER(ORDER BY basicpay) 순위 FROM insa 

        )WHERE 순위<=TRUNC((SELECT COUNT(*) FROM insa) *0.1);

      

      -- 부서별 기본급여 가장 높은 사람들 출력( name, buseo, jikwi)

      SELECT name, buseo,basicpay, RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC) 순위

      FROM insa; -- 일단 부서별 순위를 매기는 쿼리

      

      SELECT name, buseo,basicpay FROM(

        SELECT name, buseo,basicpay,

        RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC) 순위 

        FROM insa

        ) WHERE 순위=1;

        

    -- ***** 나중에 게시판 작성 할 때 사용하는 쿼리 형식이므로 반드 암기 해야함. *****

    -- ROW_NUMBER()를 이용한 쿼리가 아래 ROWNUM을 사용한 쿼리보다 우수

      SELECT num,name,basicpay FROM(

        SELECT num, name, basicpay, ROW_NUMBER() OVER(ORDER BY num DESC) rnum FROM insa

        ) WHERE rnum>= 10 AND rnum <=15 ORDER BY num DESC;

        

     SELECT num,name,basicpay FROM(

      SELECT ROWNUM rnum, num, name, basicpay FROM(

        SELECT num, name, basicpay FROM insa ORDER BY num DESC

      )

    )WHERE rnum>=10 AND rnum<=15;


출처 : http://tibang.tistory.com/

728x90

'프로그래밍 > Oracle' 카테고리의 다른 글

오라클에서 COMMENT 다는 법  (0) 2019.04.24
오라클 테이블스페이스 생성  (0) 2019.04.04
oracle hr 사용자 unlock  (0) 2016.01.25
ORACLE PLS-553 오류 처리  (0) 2015.04.29
오라클 백업  (0) 2015.04.24
728x90

@Aspect annotation 기반 AOP 사용

1. 로그인 하지 않은 사용자가, 로그인페이지를 제외한 다른페이지에 접근했을 때 

2. 접근권한이 없는(세션값) 사용자가, 접근할 수 없는 페이지에 접근했을 경우 등

   로깅이나, 공통기능을 사이트 전반에 적용시켜야 할 때 이용한다.


@Aspect 어노테이션은 AspectJ 5버전에 새롭게 추가된 어노테이션으로서, xml파일에 Advice 및 Pointcut 등의 설정을 하지않고도,

자동으로 Advice를 적용할 수 있다.


#STS를 사용할 경우 메이븐 dependency 추가

<!-- AspectJ -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>${org.aspectj-version}</version>

</dependency>


<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>${org.aspectj-version}</version>

</dependency>


# spring 환경 설정 xml 파일에 아래 내용을 추가한다.

<aop:aspectj-autoproxy />

<bean id="loginAspect" class="com.common.LoginAspect"/>


# aspect 구현 소스

@Aspect

public class LoginAspect {

 

    @Pointcut("execution(public * com.admin..*(..))")

    private void adminMethod(){}

     

    @Pointcut("execution(public * com.bbs..*(..))")

    private void bbsMethod(){}

     

    @Pointcut("execution(public * com.common..*(..))")

    private void commonMethod(){}

     

    @Pointcut("execution(public * com.onm.administrator..*(..))")

    private void onmAdministratorMethod(){}

     

    @Pointcut("execution(public * com.onm.membership..*(..))")

    private void onmMembershipMethod(){}

     

    @Pointcut("execution(public * com.onm.report..*(..))")

    private void onmReportMethod(){}

         

    private String[] access_url = {

            };

     

    @Around(value ="adminMethod() || bbsMethod()  || commonMethod()

                                || onmAdministratorMethod() || onmMembershipMethod() || onmReportMethod()")

    public Object trace(ProceedingJoinPoint joinPoint) throws Throwable{

 

System.out.println("#### LoginAspect 시작 ####");     

        HttpServletRequest request = null;

        HttpServletResponse response = null;

        for ( Object o : joinPoint.getArgs() ){ 

            if ( o instanceof HttpServletRequest ) {

                request = (HttpServletRequest)o;

            } 

            if ( o instanceof HttpServletResponse ) {

                response = (HttpServletResponse)o;

            } 

        }

        try{

            HttpSession session = request.getSession();

 

                String loginId = (String) session.getAttribute("loginId");

                String userEnterType = (String) session

                        .getAttribute("UserEnterType");

 

                System.out.println("### Margo ==> loginId : " + loginId);

                if (loginId == null || "".equals(loginId)) {

                    System.out.println("### Margo ==> in if loginId : "

                            + loginId);

                    throw new RuntimeException("먼저 로그인을 하셔야 합니다.");

                }           

        }catch(Exception e){

             

            throw new RuntimeException("먼저 로그인을 하셔야 합니다.");

 

        }       

        Object result = joinPoint.proceed();

System.out.println("#### LoginAspect 끝 ####");      

        return result;

    }

}


1라인 에 적용한 @Aspect 어노테이션을 적용한 클래스는 advice구현메소드나, pointcut정의를 포함할 수 있게된다.


4 라인에 AspectJ의 pointcut 표현식으로 pointcut을 정의한다. 


execution(수식어패턴 리턴타입 클래스이름패턴 이름패턴(파라미터패턴))


수식어패턴: public, protected 등


각패턴은 * 를 이용하여 모든 값을 표현할 수 있고. '..' 를 이용하여 0개 이상이라는 의미를 표현가능

Controller라고 끝나는 이름의 클래스에만 적용할때는 - execution(public * com.bbs..*Controller.*(..))


5라인 처럼 pointcut 정의 메소드는 무조건 리턴타입이 void여야한다.

 이 메소드는 advice 관련 어노테이션인 @around의 값으로 사용될 메소드이다.




이제 trace메서드를 이용해서, 필요한 처리를 구현하면된다.

!!!!!!!!!!!!!!!! 여기서...중요한게 있다!!!!!!

27라인에서 joinPoint는 수행될 메소드인데, 보통 세션값 이용할때 request에서 빼내오는데

그 원래 해당메소드 파라메타로 HttpServletRequest가 지정되어 있지 않으면, request가 null이 되겠지..


끝으로 51,55라인에서 뿌린 Exception을 잡을 놈도 xml에 정의해야한다.

servlet xml에다가 추가해주자

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<prop key="java.lang.Exception">

index

</prop>

</property>

</bean>


출처 : http://winmargo.tistory.com/164

728x90
728x90

google map 서비스 만드는 과정 

1. sdk manager로 들어가서 google play service를 설치한다.


2. 라이브러리를 등록한다.



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.vincentgoo.myapplication">


<!-- 내 프로젝트에 대한 보안 수준 설정. 내 프로젝트의 패키지가 com.example.vincentgoo.myapplication 인 경우 -->
<!--android:name="com.example.myapplication.permission.MAPS_RECEIVE"-->
<permission
android:name="com.example.vincentgoo.myapplication.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />

<!-- 구글맵 API v2의 권한 설정 -->
<uses-permission android:name="com.example.vincentgoo.myapplication.permission.MAPS_RECEIVE" />

<!-- 구글맵 API v2의 일반 권한 설정. -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

<!-- 일반 권한 설정 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- OpenGL 사용 설정 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<!-- 라이브러리 사용 설정 -->
<uses-library android:name="com.google.android.maps" />

<!-- 구글맵 API v2 키 설정 -->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyAnZOuHXGxWoTuxXejtC0BWfuEJE7vnJAI" />

<!-- GMS 라이브러리 버전 설정 -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

<구글 map api key 받기>


작업 1 : 고급설정에 path에 C:\Program Files\Java\jdk1.7.0_40\bin 설정여부를 확인한다. 작업 2 : C:\Users\a\.android/debug.keystore을 이용해서 MD5값을 생성하기 위해서 콘솔창을 실행하고 C:\Users\a\.android/으로 경로를 이동한다. 작업 3 : keytool -v -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android 실행한다. 작업 4 : 'SHA1:'뒤에 있는 값을 이용하여 구글맵을 사용하기 위한 API키를 발급받는다. 작업 5 : 구글맵을 사용하기 위한 API키를 발급받기 위해 https://code.google.com/apis/console/사이트에 접속한다. 작업 6 : Google Maps Android API v2 을 'API사용설정'을 클릭한다. 작업 7 : Api Acess서브메뉴선택후 create new android key버튼을 클릭한다. 작업 8 : SHA1;어플리케이션 패키지명을 입력후 create버튼을 클릭한다. 작업 9 : 작업8단계에서 생성된 API키를 androidmanifast.xml파일에서 <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="API키" /> value속성에 작성한다



https://code.google.com/apis/console/ 접속





Google Maps APIs 에서 Google Maps Android API 클릭



Credentials 클릭



API key 설정




728x90
728x90




역사상 위대한 여자 성악가 중 한 사람으로 기록되고 있는
미국의 콘트랄토(여성 최저음 영역의 가수) 마리안 앤더슨.

그녀는 가난한 가정 형편과 흑인이라는 이유로 많은 어려움이 있었지만 
1925년 28세의 나이에 '뉴욕 필하모닉' 주최 신인 콩쿠르에서 
많은 경쟁자를 뒤로하고 1등으로 합격하였습니다.

1935년 흑인 최초로 잘츠부르크 음악제에 섰고 
이 공연을 본 거장 지휘자 아르투로 토스카니니는 
한 세기에 한 번 나올만한 소리를 가졌다며
아낌없는 찬사를 보내기도 했습니다.

그리고 1939년 워싱턴 링컨 기념관 광장에서 진행한
무료 야외 연주회에서는 7만 5천여 명의 청중이 몰릴 정도로
그녀는 많은이들에게 유명해졌습니다.

어느 날 그녀가 서는 무대마다 빠짐없이 참석해 취재했던 
한 기자가 그녀에게 다음과 같이 질문했습니다.

"당신의 인생 중에서 가장 행복했던 때는 언제입니까?"

기자는 그녀가 공연을 마친 뒤 감격으로 눈물을 흘리던
모든 순간을 함께했었기 때문에 
그녀가 어떤 대답을 할지 짐작할 수 있었습니다.

그런데 그녀의 입에서 뜻밖의 대답이 흘러나왔습니다. 
"제 일생에서 가장 행복했던 순간은 늙으신 어머니께 
이젠 피부색으로 인한 차별을 받지 않게 되었다고 말씀드릴 때였습니다."



마리안 앤더슨은 가난했고 차별당했지만
꿈을 향한 도전을 포기하지 않았고
결국 그녀는 가장 행복한 순간을 얻을 수 있었습니다.

우리는 원하는 것에 주저하지 않을 때 
비로소 행복해질 수 있습니다.
꿈을 향해 도전하는 삶을 사시길 바랍니다. 

728x90
728x90

=============================================================
키 | 자바스크립트 코드(숫자)
=============================================================

←(백스패이스) = 8
TAB = 9
ENTER = 13
SHIFT = 16
CTRL = 17
ALT = 18
PAUSEBREAK = 19
CAPSLOOK = 20
한/영 = 21
한자 = 25
ESC = 27

스패이스 = 32
PAGEUP = 33
PAGEDN = 34
END = 35
HOME =36

←(중간) = 37
↑(중간) = 38
→(중간) = 39
↓(중간) = 40

0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57
INSERT = 45
DELETE = 46

A = 65
B = 66
C = 67
D = 68
E = 69
F = 70
G = 71
H = 72
I = 73
J = 74
K = 75
L = 76
M = 77
N = 78
O = 79
P = 80
Q = 81
R = 82
S = 83
T = 84
U = 85
V = 86
W = 87
X = 88
Y = 89
Z = 90

윈도우(왼쪽) = 91
윈도우(오른쪽) = 92
기능키 = 93
0(오른쪽) = 96
1(오른쪽) = 97
2(오른쪽) = 98
3(오른쪽) = 99
4(오른쪽) = 100
5(오른쪽) = 101
6(오른쪽) = 102
7(오른쪽) = 103
8(오른쪽) = 104
9(오른쪽) = 105
.(오른쪽) = 110
/(오른쪽) = 111
*(오른쪽) = 106
+(오른쪽) = 107
-(오른쪽) = 109
F1 = 112
F2 = 113
F3 = 114
F4 = 115
F5 = 116
F6 = 117
F7 = 118
F8 = 119
F9 = 120
F10 = 121
F11 = 122
F12 = 123
NUMLOCK = 144
SCROLLLOCK = 145
=(중간) = 187
-(중간) = 189
`(왼쪽콤마) = 192
(중간) = 220

 

 


































출처 : http://Ssemi.net


728x90

+ Recent posts