일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Qt OpenGL
- 자바
- 오토바이
- c언어
- 윈도우7
- 이륜차
- Qt 소켓프로그래밍
- 양평역
- android SAF
- QTcpServer
- 정성하
- vuejs
- Qt4
- 엑티브엑스
- 재귀함수
- 마영전
- FFI
- Java
- qt 설치
- HTML
- 고속도로
- 디자이어HD
- QT
- 안드로이드
- 바이크
- 자료구조
- 스타2
- 알람프로그램
- 잡담
- 스타크래프트2
- Today
- Total
목록프로그래밍 (174)
프로그래밍과 잡담

좆같은 구글이 폴더에 접근방식을 개같이 만들어 버렸다. 아마 애플이 이딴 방식으로 되어 있겠지 안써봐서 모르겠지만. 타겟버전을 무조건 29 이상으로 안하면 스토어 앱을 못 올린다. 아직 29까지는 manifests 에 예외 기능을 넣어서 기존 처럼 사용이 가능하지만 언제 타겟 버전을 30으로 올릴지 모른다. 여하튼 여태까지 접근 하던 방식인 File 클래스를 통한 접근은 더 이상 동작하지 않는다. File("/sdcard/").listFiles() // 이렇게 하면 null 떨어짐 구글 새끼들이 쓰라고 하는 방식은 공용 폴더는 MediaStore 인가 뭔가 써서 접근 하라고 하고 일반 폴더는 SAF(Storage Access Framework) 를 쓰라고 한다. 사실 이거 나왔을 때 잘 안썼다. 쓰기가 ..
초창기의 개방형 OS가 아닌 점점 애플 iOS 처럼 폐쇄적으로 가는거 같다. 왜 그러냐 하면은 점점 저장소에 대해서 iOS 처럼 바뀌고 있다. 최근 타겟 버전을 29버전 이상으로 강제하고 있다. 이 버전부터는 앱이 내부 폴더 이외의 장소에는 접근을 할 수 없게 된다. 즉, 안드로이드 앱의 앱 내부 저장소는 /data/data/앱이름 으로 되어 있는데 이 아래의 정보만 접근이 가능하다. 그외에 공용 폴더는 접근이 가능하다. 그림, 동영상 이딴거 말이야. 예전에는 폰의 내부저장소(/sdcard), 외부저장소( /storage/123-123) 에 바로 접근을 할 수 있다. 근데 지금은 접근을 할려면 Storage Access Framework 를 써야한다. 그리고 안드로이드 11버전에선 저장소의 루트 폴더에 ..
까먹기 전에 글을 써둬야지.. Spring 에서 외부파일을 이용해서 JDBC 셋팅하는 방법 일단 지금 내가한 방법은 1. src/main/resources 아래에 property 폴더를 생성 2. 폴더 내에 db.properties 파일을 생성 3. 아래와 같이 셋팅 db.driverClassName=oracle.jdbc.driver.OracleDriver -- db에 맞춰서 셋팅 db.url=jdbc:log4jdbc:oracle:thin:@{DBURL}:{DBssid} -- 오라클일 때는 이렇게 하고 다른 db면 그거에 맞게 db.username={LoginID} db.password={LOGIN PASSWORD} 4. root-context.xml에 아래와 같이 셋팅 5. 끗
구글을 찾아봐도 내가 검색을 못하는건지 잘 안나오는거 같음. 내가 원하는건 컴포넌트의 값이 변경될 경우, 체크될 때 값을 체크해서 뭔가를 띄워주거나 하고 싶은건데 찾아도 watch를 검색하면 프로퍼티를 이용하는 방법만 나오더라. 그래서 대충 아무거나 해보던 와중에 발견한거임. 그냥 mounted 에서 this.$watch 함수를 이용해서 내가 원하는 데이터를 셋팅해주고 콜백 넣으니까 되더라 ㅋ 사실 제대로 이해하고 만든게 아니라 그냥 참조만 할것 template: '' data: function(){ return { data1 : "", Data: { name: "" } } }, mounted: function () { this.$watch('Data.name', function (newVal, old)..
template에 radio 버튼이나 checkbox 만들고 label for로 라벨클릭시 선택되게 할려고 할 때 아래처럼 해줘야 인덱스가 id에 들어감. 예제> nodejs에서 쓸 경우 i는 for문 변수 idx는 외부 변수 node.js에서 하면 편하다. 예제> node.js가 아닌 html에서 쓸 경우 template = ' \ \ \ \ ' 빨간색 작은따옴표( ' )는 template를 덮는 부분 파란색 \' 는 변수를 또는 추가로 붙일 문자에 넣음 보라색은 + 는 외부 변수 추가 용도 검은색 + 는 변수와 문자열을 연결하는 용도
ust는 다른 언어를 위한 인터페이스가 존재한다. 구조는 C 인터페이스를 사용한다. 그에 대한 사용법은 아래와 같다. Rust에서 선언 이렇게 하면 되고 // Rust에서 다른 언어로 넘길 때 사용하는 구조체 아래의 어노테이션을 써야한다. #[repr(C)] pub struct Data{ pub int_val : i32, pub double_val: f64, // 문자열 쓸려면 이렇게 해야함. pub str_val: *const c_char } // 이건 뭐 해도 되고 안해도 됨 impl Clone for Data{ fn clone(&self) -> Data { Data { int_val: self.int_val, double_val: self.double_val, str_val: self.str_val..

인터넷 찾아보면 WPF MVVM 패턴을 구현한 거보면 대부분 이해하기 쉽다. 근데 그 예제들은 이해하기 쉬우라고 쉽게 만들어 놓은거지만 실제 사용 할려면 여러가지가 짬뽕되서 사용해야한다는거지. 일단 나도 공부하는 중이라서 여기다 적어 놓는다. 유저컨트롤 - 유저컨트롤 간의 데이터 교환을 할려면 결국 인터페이스든 이벤트든 간에 연결이 필요하다. 컨트롤A가 있는데 이건 그냥 유저를 추가하는 기능 밖에 없음. 대충 아래와 같이 생김. xaml 코드 그리고 컨트롤 B는 컨트롤 A에서 추가한 유저 목록을 표시함. 소스는 아래와 같음. xaml 하는 일은 간단함. 컨트롤 A에서 유저를 입력하면 B에 추가되서 표시되는거지. 그러면 MainWindow에서는 아래와 같이 처리함. 소스는 그냥 제외 처리한다. 그냥 유저컨..
1. 사전 준비 작업 안드로이드 SDK 설치 안드로이드 NDK 설치 ( sdk 열어서 SDK_Tools 탭에 가면 ndk 설치하면 된다. ) Rust 설치 2. 빌드 셋팅 config 파일을 만들어서 에디터로 연다. 그리고 아래와 같이 셋팅 NDK 경로는 toolchains 라는 폴더가 있는 위치를 넣으면됨 예를들어 나같은 경우는 D:\Dev\android-sdk\ndk\21.3.6528147 이렇게 되어 있음 뒤에 exe, cmd 는 각자의 os에 맞춰서 바꾸면 된다. [target.aarch64-linux-android] ar = "[NDK경로]/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android-ar.exe" linker = "[ND..
C#에서 Rust 에서 만든 메소드를 호출 하는데 예를 들어 아래와 같은걸 호출한다고 치자. // 문자열 배열을 받아서 문자열 배열을 반환하는 함수임. C#으로 따지면 string[] 이거임. // 근데 이걸 반환하기가 넘 어려움. fn foo(bar: &[*const c_char] ) -> &[*const c_char] 문제는 다른 언어에서 이걸 호출 하면 졸라 어렵다는거다. 왜냐하면 문자열 배열이란게 C언어로 치면 char** 이 거랑 비슷하다. 그러다보니 서로 통신하기가 아주 지랄맞아. 이건 Go 도 마찮가지다. 단순 문자열은 잘 가지만 문자열 배열이 들어가는 순간 지랄이 나는거야. 그냥 때려치우고 하나의 문자열로 만들어서 보낼려고 한다. 그리고 처리하는 쪽도 받은걸 잘라서 처리한 다음에 다시 하나..
C#에서는 Java의 final 과 같은 로컬변수를 고정하는 기능이 없다. 그래서 아래 처럼 제네릭 클래스를 만들어서 써야한다. 다만 이것도 단점이 있다. java의 final은 다시 new가 안돼지만 이건 new 하면 덮어 쓸 수 가 있다. 뭐 다만 이미 셋팅된 값을 변경 할려고 하면 에러나니까 그냥 대충 써야지 뭐. çlass Const { public T value { get; private set; } public Const(T data){ value = data; } }