2024년 2월 11일 일요일

사형, 비혼출산, 안락사 - 인간의 존엄을 지키는길

사형, 비혼출산, 안락사 허용하는 나라가 되었으면.. 인간세상이 되었으면


인간을 인간답게, 인간이 아닌자에겐 생의 마감을.  

2023년 5월 31일 수요일

2022년 4월 2일 토요일

deck.gl with pure javascript, Mapbox GL JS, Geojson

Mapbox + Geojson + deck.gl

군더더기 없이.  잡다한 스크립트 라이브러리를 사용하는건.. 너무 싫다. 늙어서 그런갑다..

GeoJsonLayer 옵션은 여기서

https://deck.gl/docs/api-reference/layers/geojson-layer


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mapbox JS & deck.gl with pure javascript</title>
<script src="https://unpkg.com/deck.gl@latest/dist.min.js"></script>
<link href="https://api.mapbox.com/mapbox-gl-js/v2.7.0/mapbox-gl.css" rel="stylesheet">
<script src="https://api.mapbox.com/mapbox-gl-js/v2.7.0/mapbox-gl.js"></script>
<style>
body { margin: 0; padding: 0; }
#map { position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 100%; }
</style>
</head>
<body>
<div id="map"></div>
<script>
mapboxgl.accessToken = '<MAPBOX KEY>'
window.map = new mapboxgl.Map({
container: "map",
style: "https://basemaps.cartocdn.com/gl/dark-matter-nolabels-gl-style/style.json",
center: [-100, 38],
zoom: 6,
maxZoom: 19,
})
new deck.Deck({
initialViewState: {
longitude: -100,
latitude: 38,
zoom: 4
},
onViewStateChange: function(e){
var viewState = e.viewState
window.map.jumpTo({
center: [viewState.longitude, viewState.latitude],
zoom: viewState.zoom,
bearing: viewState.bearing,
pitch: viewState.pitch
});
},
controller: true,
layers: [
new deck.GeoJsonLayer({
id: 'geojson',
data: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/examples/highway/roads.json',
lineWidthMinPixels: 2,
getLineColor: [160, 0, 180, 200],
})
]
})
</script>
</body>
</html>



 

2022년 3월 5일 토요일

Mapbox GL JS + VWORLD Tile Map

<link href="https://api.mapbox.com/mapbox-gl-js/v2.7.0/mapbox-gl.css" rel="stylesheet">
<script src="https://api.mapbox.com/mapbox-gl-js/v2.7.0/mapbox-gl.js"></script>
<script src="https://map.vworld.kr/js/apis.do?type=Base&apiKey=<VWORLD KEY>"></script>

<div id="map"></div>
<script>
mapboxgl.accessToken = '<MAPBOX KEY>';
window.map = new mapboxgl.Map({
container: 'map',
style: {
version: 8,
sources: {
Satellite: {
type: 'raster',
tiles: ['http://xdworld.vworld.kr:8080/2d/Satellite/service/{z}/{x}/{y}.jpeg'],
bounds: [119, 28, 135, 48]
},
Hybrid: {
type: 'raster',
tiles: ['http://xdworld.vworld.kr:8080/2d/Hybrid/service/{z}/{x}/{y}.png'],
bounds: [119, 28, 135, 48]
}
},
layers: [{
id: 'Satellite',
type: 'raster',
source: 'Satellite',
},{
id: 'Hybrid',
type: 'raster',
source: 'Hybrid',
}],
},
center: [127, 38],
zoom: 8,
minZoom: 6,
maxZoom: 19,
projection: {
name: 'equirectangular',
}
});
</script>


MAPBOX

Openlayers 와는 또 다른 매력이.. 


MAPBOX : https://www.mapbox.com/mapbox-gljs

VWORLD : https://www.vworld.kr/dev/v4dv_baseguide_s001.do


인증키는 둘다 안받아도 사용할수 있는 방법이 있긴하지만... 이런데 올릴만한 내용은 아니니.. 패스 

 

2021년 6월 18일 금요일

Autodesk forge viewer coordinate conversion

와.. 한참 찾았네..

멋지다. 굳.

viewportId 는 일반적으로 1 




// convert paper to model
function fn_convert_position(point){
var matrix = viewer.model.getPageToModelTransform(1) //vpId : viewportId
return new THREE.Vector3(point.x, point.y, 0).applyMatrix4(matrix);
}

// convert model to paper
function fn_inverse_position(point){
var matrix = new THREE.Matrix4().getInverse(viewer.model.getPageToModelTransform(1)) //vpId : viewportId
return new THREE.Vector3( point.x, point.y, 0 ).applyMatrix4(matrix)
}

// example
r1 = fn_convert_position(new THREE.Vector3( 10, 10, 0 ))
// result : X.Vector3{x: 236000.85091722145, y: 325217.9908402892, z: 0}

r2 = fn_inverse_position(new THREE.Vector3( 236000, 325217, 0 ))
// result : X.Vector3{x: 10, y: 10, z: 0}






2021년 2월 21일 일요일

발버둥쳐야만.. 척이라도 해야만 되는세상.

인생... 세상의 나약하고 볼품없는 인생을 나, 배우자, 부모, 그리고 자식들에게 여과없이 보여주고 인정해가는 과정.. 인간사 참 쓸쓸하다. 조금이라도 더 나은 세상, 울타리 만들어 보려고 발버둥치는 우리들. 이게 소시민들의 역사 아니겠나. 

발버둥치치 않으면 쓰레기가 되어버리는 현대사회. 그게안되면 척하기위해 스스로를 거짓 위선으로 감싸지 않으면 쓰레기가 되는 현대사회. 실체없는 미디어에 정복된 정의로움에 목매여 뒤죽박죽 혼종 사상이 지배하고 있는 현대사회. 

솔직해지고 선을지키면 되는데. 그 경계선을 지들맘대로 바꿔버리는 정치세력. 가장 쓸쓸할 우리네 아버지 세대도 저물면.. 어떤세상이 올까. 잔인한 세상이 아니었으면..


아부지 술 좀 줄이세요.   



2020년 12월 20일 일요일

2020년도 이렇게 끝나가네

인생에 굵직굵직한 일들이 참 많았던 21C 10년대. 가 끝나가네. 나의 30대도 끝나가고.

뭐 1년은 더 남았지만.. 친구들이 40이니...

할머니도 가시고.. 고모 할머니도 가시고..

그래도 평범하게 살수 있었던거 같아 다행이다. 

싸우기도 많이 싸웠지만 내편도 만나고 내 핏줄도 생기고 집한칸 마련하고 사무실 마련하고. 

다시 누군가와 가정을 꾸리라하면 못할거 같다. 서로 이해하고 인정해가는 과정이 너무 힘들다.

그 과정이 지나면 넉넉한 사고방식의 여유가 찾아오긴 하지만..  

평생동반자 할꺼면 서로 편한게 제일인듯

지나온 30대... 몸이든 맘이든 참 넉넉해지긴 했다. 나름 만족한다. 

어느날엔가 아쉬움이 가득했던 분께 연락받아 일도 같이 하고 있고..

연락은 거의 않하지만... 너무 정치성향이..... 

그래도 항상 마음 한켠에 네임벨류가 있는 회사의 구성원이 되지 못한건 아쉬움으로 남아있다..

이젠 가지도 못해. 나이들어 차피 가기도 힘들고. 

간다해도 어설프게 월급받아봤자 지금의 방식으로 버는 수입보다 덜하고..

생각해보면 객관적으로 이름있는 개발회사 직원들 보다.. 

금전을 더 요구하지도 않았을거고 시간적으로나 퀄리티는 더 좋은 결과물을 낼 수 있는데..

이걸 표현을 하지도 못했고 하는 방법도 몰랐던거 같다.

지금도 모르지.. 일단 한번 경험하도록 해봐야......ㅜ.ㅜ

쨌든 OK. Ordinary 10 years!!

40의 시작을 오너로 시작할 수 있는 기반은 만들었다. 

감사합니다.

직원으로써의 20대

하청으로써의 30대

수장으로써의 40대를 보내고 싶지만.. 

프리랜서 하라면 하고. 육아에 전념하라면 하고.

이래저래 깜깜한 앞날은 보이지 않는게 무척이나 고맙고 다행이다.

60대에는 퀀텀점프된 인공지능 하나 만들어야지?? 꼬맹이와함께^^

I Like Black $.$

 Black

간만에 바꿔보네 ~.*

2020년 3월 2일 월요일

@MapperScan 또는 MapperScannerConfigurer 에서 annotationClass 지정이 되지 않을때(not work)


SpringBoot 에 MyBatis 설정시

SpringBoot 버전에 따라 되는 경우가 있고 안되는 경우가 있는데

No MyBatis mapper was found in '[com.neutti]' package. Please check your configuration.

이런 메시지가 나오면서 Mapper Scan에 실패한다.

단 기본 애노테이션인 @Mapper 인 경우 정상 작동한다.

SpringBoot 버전이 상위버전일 경우가 안되기 때문에 해결을 하고 지나가야된다.

이유는 애노테이션 인터페이스 선언 문제인듯 한데.


/** * database.base 매핑 */
public @interface BaseMapper {
}

에서

/** * database.base 매핑 */
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
public @interface BaseMapper {
}

이런식으로 선언해주면 잘 작동한다.

도대체 이유를 알수 없어... 혹시나 해서 @Mapper 선언부분을 확인해서 동일하게 만들어주니 무사통과...

아무래도 마이바티스가 스프링과는 한몸이 아니기때문에 설정시 이런저런 오류가 나오는데

경고 메시지가 친절하진 않다.. 혹시 설정이 의도한대로 되지 않는다면 버전 체크도 하고 넘어가야 할듯

https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/


2020년 2월 20일 목요일

전자정부프레임워크 대신 Spring Boot 를 써야하는 이유?

우리나라에서는 전자정부프레임워크(https://www.egovframe.go.kr/) 라는 개발환경을 정보화진흥원에서 국가차원에서 제공하고 있다.

전자정부프레임워크은 Springframework 기반이다.

왜 만들었을까? 좀더 쉽게 개발하고 표준을 제시하여 유지보수 인력이 바뀌어도 시스템에 대한 유지보수 연속성을 유지하기 위해서이다.

그런데... Spring Boot 가 더 쉽다.

전자정부프레임워크가 설계되고 만들어질때와는 상황이 다르다.
난립하던 웹개발 방식이 스프링으로 거의 통일화 되었고. 버전업도 활발히 이루어 지고 있다.

아니라고 할 사람도 이겠지만 사실상 Springframework 에 종속적인 전자정부프레임워크은 그 속도를 따라가지 못하고 있다. 언젠가는 전자정부프레임워크도 Spring Boot 환경을 적용할 것이고.

공공기관의 경우 과업지시서에 전자정부프레임워크를 꼭 써라 딱 적혀있지 않은 경우 새롭게 시작하는 프로젝트에 무엇을 써야될지 고민하는것은  우둔한 고민일뿐.

혹여나. 개발진 개발역량이 안된다고 해서 그렇다면 정말 핑계
시간이 촉박해서 라면 그냥 더도말고 덜도말고 딱 하루만 사용해보고 판단해도 늣지않다.


그냥 쉽다.  편하다.

이정도 변화가 두렵다면.. 개인이든 회사든 고민을 많이 해보자...
신기술도 아니다. 보편화 되었다고 해도 무리가 아니다.

현시점에도 많은 업체와 그안에 속한 사람들이 이글의 타이틀과 같은 문제로 고민하고 있다는게 안타까워 글을 남기고 있다.


웹개발에서 Java 의 점유율은 계속 하락세이다.
그정도 사용됐으면 됐다. 영원은 없으니 변하지 않는게 가장 무서운것 아닌가?
필요에 의해 가장 알맞는 개발 툴 과 언어를 그리고 프레임웍을 사용하면 된다.
간단한 로직의 웹개발라면 Nodejs 를 사용하는것도 나쁘지 않다.

트랜드를 따라가는게 가장 안정적인 방식이다.
고민하는 이유가 실험적이라는 이유로 고민하고 있는게 아닌가?
더이상 늦지 말고 테스트라도 해보자.

지름길을 만들어 줬는데 내 발자국이 남아있다고 계속 우회해서 먼길 돌아가는 상황이다.
발자국은 또 찍으면 되지. 발자국 찍는게 어려운게 아니다.

2020년 1월 23일 목요일

모르지만 아는척

일반인이 검찰 대면할 경험이 얼마나 되나?

평생에 1번, 2번이면 많은거 아닌가?

근데 뭐 검찰집단에 대해 그리 잘아는 사람들이 이렇게 많나...

검찰 가장많이 마주하는 인간들이 누굴까.

정치한다는 인간들이겠지.

과거, 진행형인 죄목들 드러날까봐 겁나겠지. 드러나서 정치질 못할까봐

참.. 누구의 어느집단의 작품인지 사람들 머릿속을 조종하는게 대단하다.. 정말.


2019년 6월 29일 토요일

정치란 덜 나쁜 사람 골라 뽑는 과정??

덜떨어진 인간들이 덜나쁜 정치인 찾고있지...

좋음 나쁨으로 구별한다는거 자체가... 덜떨어진거지..

지식인이란 사람들이 사람들 생각을 참.. 볼품없게 만드는구나...

2018년 11월 6일 화요일

cafe24 에서 nodejs 호스팅 이용할때 .gitignore 파일 꼭 넣어줘야... /node_modules

월 500원에 nodejs 호스팅 이용하는게 어디냐만은...
쫌 가이드좀 제대로 하지..
문의를 해도 응답이 영...관련 문구하나만 넣어놨어도 호스팅 구성하는 친구들이 알아서 할텐데...

git 통해 업로드시

<.gitignore> 파일은 꼭 넣어주어야 플랫폼 종속적인 모듈에서 에러발생으로 안됨..

파일명 그대로 git 형상관리 제외 목록을 관리하는 파일로

 /node_modules

패턴을 꼭 넣어주어야 함...

------------------------------------------------------------------------------------
샘플 <.gitignore>
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
/.idea
/app/release
/node_modules
------------------------------------------------------------------------------------

안그럴시 에러 발생할 수 있음..

내경우  이미지처리 라이브러리인 sharp 이용시 에러발생...

Error: 'win32-x64' binaries cannot be used on the 'linux-x64' platform. Please remove the 'node_modules/sharp/vendor' directory and run 'npm install'.

에러내용보면 원인은 대충 짐작이 가겠죠

2018년 9월 2일 일요일

대한민국 70년대 출생자들의 비애

https://news.v.daum.net/v/20180901205224955?f=m

개인적으로는 몇몇 70년대생 형님, 누님들을 알고있고 맘이 잘맞고 좋다.
허나 한가지 안타까운게 있는데. 대부분 진보라는 단어를 좋아한다는거다
아마 전 연령대중 현 민주당의 가장 많은 지지를 보내고 있을거다

이제.. 그만 내려놓으셨으면 한다. 다양하게 객관적으로 바라보라 말씀드리고 싶다
지금의 40대 고용참사가 이명박근혜가 싸질러놓은게 지금터지는건가??
그랬으면 하겠지만 아니지 않은가. 그냥 누가봐도 현 정권의 실책이지 않은가.

지금의 40대 형님, 누님들 충분히 능력이 되고 올바른 생각과 이전세대에서 볼수없는 소통능력을 가지고 있는 분들인데 왜 인생을 얄팍한 정치인들에게 흔들리는가.

보수를 지지하라는것도 아니고 진보를 버리라는것도 아니다.
7080당이라도 만들어 목소리를 내시라

선거에만 되면 그래도 덜 부패한놈  뽑아야된다는 그지같은 말에 혹하지 마시고...

2018년 4월 20일 금요일

궤변...궤변...궤변...

민주당 과 그 지지자들..
정말 갑갑하다.

넓게보면 자칭 진보라는 사람들.
선 과 악의 흑백논리만 머릿속이 가득 찬 사람들

팩트는
정치, 역사, 논리 등 잘 알지 못하는거에 대해 누군가 그럴듯하게 설명해주니
아 그런가보다.
그런게 시간이 지나며 진리가 되고 스스로도 허물수 없는 벽이 만들어지고
그게 한 인격체의 자존심이 되고..

그러다 오류가 생기게 되면 절대 인정을 할수 없지.
자존심이거든.
이런 자존심은 죽을고비를 넘기지 않는 한 벗어나기는 사실상 힘들다.

무섭고 두려운건 이러한 사람들의 머릿속을
특정집단에서 계획적으로 체계적으로 선동 하지 않았냐이다.

이게 쇄뇌하고 무엇이 다른가.

모든 쇄뇌는 사람의 무지와 이기심에 기반한다.

무지하고 이기심이 넘치는 사람들아.
적어도... 궤변은 늘어놓지 말자..

2017년 9월 8일 금요일

아직도 정신을 못차렸는가

서울대 시국 대자보

지적허영과 환상에 빠진자들

https://m.blog.naver.com/raymunds/221091694589

대한민국을 수렁으로 빠뜨리지 말길

2017년 5월 21일 일요일

문재인

이미지 메이커.
민주당 당원 이자
대한민국 대통령

사람들의 생각을 획일화 시키는 집단.

사람들의 눈을 가려버리는 집단.

과연 이 사람들, 이 집단의 목적은 무엇인지

큰뜻이 있는건가? 대의가 있는건가?

목적은 그리 긍정적이진 않을것 같다.

그들이 하는 결정, 행동이 결과적으로는 대한민국을 넘어 한민족에 긍정적이길..

박근혜 처럼.



2017년 2월 7일 화요일

[Android] 카카오로그인(Kakao Login)시 별도(Custom) 로그인버튼(Button) 사용하기

1. 카카오 로그인 버튼 클래스를 상속받는 로그인 컨트롤 클래스 생성
------------------------------------------------------------------------------------
package com.neutti;

import android.app.Activity;
import android.content.Context;

import com.kakao.auth.AuthType;
import com.kakao.auth.Session;
import com.kakao.usermgmt.LoginButton;

import java.lang.reflect.Method;
import java.util.List;

public class KakaoLoginControl extends LoginButton {
    public KakaoLoginControl(Context context) {
        super(context);
    }

    public void call() {
        try {
            Method methodGetAuthTypes = LoginButton.class.getDeclaredMethod("getAuthTypes");
            methodGetAuthTypes.setAccessible(true);
            final List<AuthType> authTypes = (List<AuthType>) methodGetAuthTypes.invoke(this);
            if(authTypes.size() == 1){
                Session.getCurrentSession().open(authTypes.get(0), (Activity) getContext());
            } else {
                Method methodOnClickLoginButton = LoginButton.class.getDeclaredMethod("onClickLoginButton",List.class);
                methodOnClickLoginButton.setAccessible(true);
                methodOnClickLoginButton.invoke(this,authTypes);
            }
        } catch (Exception e) {
            Session.getCurrentSession().open(AuthType.KAKAO_ACCOUNT, (Activity) getContext());
        }
    }

}
------------------------------------------------------------------------------------
2. 커스텀 버튼(btn_custom_kakao_login) 클릭 이벤트에  컨트롤(KakaoLoginControl) 연결
------------------------------------------------------------------------------------
findViewById(R.id.btn_kakao).setOnClickListener(new View.OnClickListener() {
    @Override    public void onClick(View view) {
        new KakaoLoginControl([해당 Activity]).call();    }
});
------------------------------------------------------------------------------------


음.. 그리고 버튼 디자인은 최대한 카카오 디자인을 유지해야된다고 함..

KakaoDevelopers 관련답변 : https://devtalk.kakao.com/t/topic/7553
카카오로그인 버튼 가이드 : https://developers.kakao.com/buttons

테스트버전 : android lib - 1.1.33 API