- Spectacle
- 화면 캡쳐 : 윈도우 픽픽 같음, 그놈 기본은 강조 표시 등 간단한 수정이 안되어 불편
- GIMP (GNU Image Manipulation Program, 그누 이미지 처리 프로그램)
- 이미지 편집
- Shotcut
- 동영상 편집
- Color Picker
- 화면에서 RGB 색상 알아내기
분류 전체보기
- [linux/fedora] 사용하는 툴 2023.12.22
- spring mvc - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field 2023.08.17
- Kubenetes ConfigMap Example 2023.08.09
- [Spring Boot] Datasource HikariCP에서 DBCP2로 변경 테스트 2023.07.19
- [암호화/복호화] JAVA <-> Javascript 양방향 암/복호화 2023.04.25
- Fedora GNOME RDP 원격 데스크톱 서버 접속 불가 해결 2022.12.29
- [Fedora] 36 사용중 업데이트 및 37 버전 사용 시 Chrome 이슈 해결 2022.11.29
- [java] 헥사 16진수 문자열 변환(hexadecimal) 2022.05.10
- [docker] podman sonatype nexus 2 설치 2022.04.21
- [GNOME] 사용중인 extensions 리스트 2022.04.19
[linux/fedora] 사용하는 툴
spring mvc - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field
Class에 선언되지 않은 필드 정보가 넘어옴(columns 필드 선언되지 않음)
org.jboss.resteasy.spi.ReaderException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "columns"
...
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "columns"
무시하려면
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class .....
Kubenetes ConfigMap Example
## configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: test-cm
data:
kube.config: |-
# ~/.kube/config
apiVersion: v1
clusters:
...
name: kubernetes
contexts:
command: ncp-iam-authenticator
ncloud.config: |-
# ~/.ncloud/configure
[DEFAULT]
ncloud_access_key_id = G
ncloud_secret_access_key = d
ncloud_api_url = https://n
## deployment
spec:
replicas: 1
selector:
matchLabels:
app: test-app
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: test-app
spec:
containers:
- env:
...
volumeMounts:
- mountPath: /home/default/.kube/config
name: kubeconfigcm
subPath: kube.config
- mountPath: /home/default/.ncloud/configure
name: kubeconfigcm
subPath: ncloud.config
restartPolicy: Always
volumes:
- configMap:
defaultMode: 420
items:
- key: kube.config
path: kube.config
- key: ncloud.config
path: ncloud.config
name: test-cm
name: kubeconfigcm
[Spring Boot] Datasource HikariCP에서 DBCP2로 변경 테스트
build.gradle
implementation ('org.springframework.boot:spring-boot-starter-jdbc') {
exclude group: 'com.zaxxer', module: 'HikariCP'
}
implementation group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.9.0'
application.yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3380/testdb
username: root
password: test
dbcp2:
initial-size: 5
max-total: 10
test-while-idle: true
time-between-eviction-runs-millis: 1000
num-tests-per-eviction-run: 1
[암호화/복호화] JAVA <-> Javascript 양방향 암/복호화
[Javascript]
// https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js
// https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/pbkdf2.js
var passphrase = "key...변경";
var iv = CryptoJS.lib.WordArray.random(128/8);
var key = CryptoJS.enc.Hex.parse(CryptoJS.SHA1(passphrase).toString().substring(0,32));
console.log("key: ", key)
var ct = CryptoJS.AES.encrypt(str, key, { iv: iv });
var enc = iv.concat(ct.ciphertext).toString();
console.log("enc: ", enc)
## enc: b3ff8dd004bb643f0aba857baccb0d45e1565d2f4a1d727c9a268580d3a2031b
console.log("Result: " + CryptoJS.AES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(enc.substring(32))
}, CryptoJS.enc.Hex.parse(CryptoJS.SHA1(passphrase).toString().substring(0,32)),
{
iv: CryptoJS.enc.Hex.parse(enc.substring(0,32)),
}).toString(CryptoJS.enc.Utf8));
## Result: abcd
enc = "B8160A9EDCA2CFECE3E6444BFDE09B780D8DD2D873B93080E7F5A6F4B5644217";
console.log("JAVA 에서 암호화한 문자열 복호화 Result: " + CryptoJS.AES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(enc.substring(32))
}, CryptoJS.enc.Hex.parse(CryptoJS.SHA1(passphrase).toString().substring(0,32)),
{
iv: CryptoJS.enc.Hex.parse(enc.substring(0,32)),
}).toString(CryptoJS.enc.Utf8));
## JAVA 에서 암호화한 문자열 복호화 Result: abcd
[Java]
// com.google.guava:guava:29.0-jre
import com.google.common.base.Charsets;
import com.google.common.hash.Hashing;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.AlgorithmParameters;
import java.util.Arrays;
public class AesCryptUtil {
private static Logger logger = LoggerFactory.getLogger(AesCryptUtil.class);
public static String encryptAES(String data, String secretKey) {
try {
byte[] secretKeys = Arrays.copyOfRange(Hashing.sha1().hashString(secretKey, Charsets.UTF_8).asBytes(), 0, 16);
SecretKey secret = new SecretKeySpec(secretKeys, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] cipherText = cipher.doFinal(data.getBytes(Charsets.UTF_8));
return DatatypeConverter.printHexBinary(iv) + DatatypeConverter.printHexBinary(cipherText);
} catch (Exception e) {
logger.error("===== exception", e);
throw new RuntimeException(e);
}
}
public static String decryptAES(String data, String secretKey) {
try {
byte[] secretKeys = Arrays.copyOfRange(Hashing.sha1().hashString(secretKey, Charsets.UTF_8).asBytes(), 0, 16);
String hexedIv = data.substring(0, 32);
String hexedCipherText = data.substring(32);
byte[] iv = DatatypeConverter.parseHexBinary(hexedIv);
byte[] cipherText = DatatypeConverter.parseHexBinary(hexedCipherText);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKeys, "AES"), new IvParameterSpec(iv));
return new String(cipher.doFinal(cipherText), Charsets.UTF_8);
}catch (Exception e) {
logger.error("===== exception", e);
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws Exception {
String key = "key...변경";
String abcd = AesCryptUtil.encryptAES("abcd", key);
System.out.println("enc: " + abcd);
System.out.println("dec: " + AesCryptUtil.decryptAES(abcd, key));
System.out.println("javascript 암호화한 문자열 복호화 dec: " + AesCryptUtil.decryptAES("b3ff8dd004bb643f0aba857baccb0d45e1565d2f4a1d727c9a268580d3a2031b", key));
}
}
[참고] https://stackoverflow.com/questions/37368710/decrypt-aes-cbc-pkcs5padding-with-cryptojs
Fedora GNOME RDP 원격 데스크톱 서버 접속 불가 해결
환경
- Fedora 37
- GHOME 43.2
- RDP 서버
현상
GUI 화면이 잠겨 있는 상황에서는 RDP Client 에서 접속 안됨
Failed to start remote desktop session: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Session creation inhibited
해결 방법
Gnome Extensions > Allow Locked Remote Desktop 설치
https://extensions.gnome.org/extension/4338/allow-locked-remote-desktop/
아래 안 되는듯
Alt+F2, type lg
global.backend.get_remote_access_controller().uninhibit_remote_access = () => {}
[Fedora] 36 사용중 업데이트 및 37 버전 사용 시 Chrome 이슈 해결
2023.08 Chrome 한글 전환 이슈 등등 이슈
Google Chrome 사이트에서 RPM 다운로드 받지 않고, Fedora Repository에 있는 Chrome 설치하면 아무 문제 없네;;
----------------------------------------------------------------
2023부터 네이버 웨일로 바꿔 사용 중.. 위 문제들 없이 좋은거 같음
(deb를 rpm으로 변환해서 설치)
----------------------------------------------------------------
36 버전 사용 중 업데이트 시 또는 37 버전 에서 Chrome 렌더링 이슈 생김.. 깜빡깜빡.. 한 참 뒤에 열리기는 함..
열리면 chrome://flags 들어가서 Vulkan Disabled
비디오 하드웨어 디코딩 성능 관련 옵션으로 보임
[확인] https://forum.babylonjs.com/t/performance-and-rendering-issues-since-fedora-37-upgrade/35739
Wayland, X11 옵션 선택
chrome://flags/#ozone-platform-hint
[java] 헥사 16진수 문자열 변환(hexadecimal)
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
public class Test {
public static void main(String[] args) {
String hexString = "123 abc [0xea][0xb0][0x80][0xeb][0x82][0x98] [0xeb][0x8b][0xa4][0xeb][0x9d][0xbc]";
do {
hexString = hexToString(hexString); // output : 123 abc 가나 다라
} while (hexString.indexOf("[0x") > -1);
System.out.println("en : " + hexString);
}
private static String hexToString(String s) {
try {
int idx = s.indexOf("[0x");
if (idx > -1) {
String t = s.substring(idx, idx + 18);
String c = new String(Hex.decodeHex(t.replaceAll("\\[0x", "").replaceAll("\\]", "").toCharArray()));
s = s.replace(t, c);
}
} catch (DecoderException e) {
throw new RuntimeException(e);
}
return s;
}
}
[docker] podman sonatype nexus 2 설치
groupadd -g 200 nexus
useradd -g 200 -u 200 nexus
yum install -y podman java-1.8.0-openjdk-devel.x86_64
mkdir /data/nexus2-data
podman load -i docker_image_nexus_2.15.1-02.tar
podman run -d -p 8088:8081 --name nexus2 -v /data/nexus2-data:/sonatype-work --privileged=true registry.hub.docker.com/sonatype/nexus:2.15.1-02
podman logs -f $(podman ps -a -q -f name=nexus2)
#podman rm --force $(podman ps -a -q -f name=nexus2)
mkdir /root/.m2
cat << EOF > /root/.m2/settings.xml
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8088/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>
EOF
[GNOME] 사용중인 extensions 리스트
https://extensions.gnome.org/#
- Dash to Panel
- 실행한 창이 하단 TaskBar 에 표시
- 빠른 단축 아이콘 설정
- 설치 에러 시 42.46 버전 설치(Fedora 37 에서..)
- Window List
- 실행한 창이 하단 TaskBar 에 표시(Dash To Panel 사용하기 전에 사용 했었음)
- Launch new instance
- 실행 아이콘을 클랙 했을때 새로운 창이 열림(예로 브라우저 클릭 시 이미 실행 되어 있을때도 빈 창이 열림)
- Applications Menu
- 메뉴에 프로그램 드롭다운 버튼 생김
- Places Status Indicator
- 메뉴에 탐색기의 기본 메뉴 처럼 드롭다운 버튼 생김
- Extenstion List
- 메뉴에 확장 드롭다운 버튼 생김
- Allow Locked Remote Desktop
- 화면 잠금 시에도 원격 RDP 접속 허용