Language

    var list = mutableListOf<T>() 를 사용하지 마세요.

    변경할 수 있는 리스트를 만들어야 한다고 가정해 봅시다. val list1 = mutableListOf() var list2 = listOf() 위 두가지 모두 다음과 같은 방법을 이용하여 변경할 수 있습니다. list1.add(1) list2 = list2 + 1 모두 정상적으로 작동하지만 장단점이 있습니다. 두 가지 모두 변경 가능 지점(mutating point)가 있지만 위치가 다르다는 점입니다. 첫 번째 코드는 구체적인 리스트 구현 내부에 변경 가능 지점이 있습니다. 멀티스레드 처리가 이루어지면 내부적으로 동기화가 적절하게 되어 있는지 알 수 없어 위험하게 됩니다. 두 번째 코드는 프로퍼티 자체가 변경 가능 지점입니다. 따라서 멀티스레드 처리의 안정성이 더 좋다고 할 수 있겠지만 구현을 잘못 하..

    Hex 데이터(16진수)를 String 으로 표현하는 방법

    최근에 알개 된 방법입니다. 평소에는 logger.info($"data : {hexVal[0].toString("X2")}"); 이러한 식으로 표현했으나, logger.info($"data : {hexVal[0]:X2}"); 이러한 문법도 지원하는 것을 알았습니다.

    [Querydsl] n시간 이전 데이터 삭제

    @Transactional fun exampleMethod(): Long { var date = LocalDateTime.now() date = date.minusHours(1) return queryFactory .delete(table_name) .where(table_name.updatedAt.lt(date)) .execute() } 위 코드는 아래와 같이 작동됩니다. 현재 시간이 2021년 11월 20일 10시 5분 이라면, DELETE FROM `table_name` WHERE `table_name`.updatedAt < '2021-11-20 09:05:00' 위와 같은 쿼리문이 작성되는 것입니다. 쿼리 진행 후 삭제가 된 데이터의 갯수를 리턴하도록 되어 있습니다.

    yyyy-mm-ddTHH:mm:ss(LocalDateTime) 를 원하는 데로 주무르기(T 만 없애는 등)

    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss", Locale.KOREA) val nowDateTime = LocalDateTime.now() val localStartDateTime = LocalDateTime.parse(nowDateTime.toString(), formatter) val DT = DateTimeFormatter.ofPattern("HH시 mm분 ss초").format(localStartDateTime) LocalDateTime.parse(nowDateTime.toString(), formatter) 에 변환할 LocalDateTime 형식의 변수를 할당하여 주시고 리턴되는 값을 변경하고 싶으시다면, DateTi..

    코틀린에서 java.time.LocalDateTime 을 비교하기

    import java.time.Duration import java.time.LocalDateTime 임포트를 해줍니다. val targetDate: LocalDateTime = LocalDateTime.of(2021, 9, 27, 17, 37, 39) val nowDate = LocalDateTime.now() // 2021, 9, 27, 17, 38, 00 val duration: Duration = Duration.between(targetDate, nowDate) 위와 같이 코드를 구성해 주면... 20초 라는 결과를 얻을 수 있습니다. 나노초 단위도 얻을 수 있습니다. 소요 시간을 한글로 표현 및 출력하려면 아래처럼 작성할 수 있습니다. val hours = seconds / 3600 val m..

    Composer Error Fix - it is missing from your system. Install or enable PHP's fileinfo extension

    처음에는 이 문제를 보고 다르게 이해를 했다가 패키지를 업데이트 하려고 했다. 하지만 해당 문제가 아니라, Problem 1 의 두번째에 있는 leafue/flyststem 을 보면, 내 시스템에 빠진게 있다. PHP의 fileinfo 확장을 설치하거나 활성화 해라 라고 되어 있다. 그래서 php.ini 를 살펴보면!!! 이렇게 주석 처리된 곳이 있다. 해당 부분을 풀어주고 다시 composer update 를 진행해 보자. 성공적으로 패키지가 설치/로드 되었다.

    C# .Net Core 로 만든 Linux 기반 멀티 소켓 서버 Base Project 공개

    https://github.com/Kuass/Csharp-Socket-Server Kuass/Csharp-Socket-Server Easy-to-customize projects that serve as the foundation for a powerful socket server. - Kuass/Csharp-Socket-Server github.com 소켓 서버 예제는 많지만 .Net Core 로 작성된 예제나 너무 간단하게만 이루어진 소켓 예제가 주류로 이루어 진 것 같아 Base Project 를 작성해 Github에 공개했습니다. 해당 서버에서는 자체적으로 Protocol 을 정의하여 여러분들이 직접 Custom 하기 용이한 형태로 개발된 상태입니다. 어디까지나 Base 예제이고 작동은 확인했으나..

    maven Project 를 gradle Project 로 변경할 때 dependencies 고치기(maven repository 활용)

    Minecraft 플러그인 빌드도구를 Maven 에서 Gradle 로 변경하면서 HikariCP 와 querydsl-sql 등을 그대로 작성하면 dependencies { implementation 'com.zaxxer:HikariCP' } 이렇게 작성하게 됬는데, 찾을 수 없다고 gradle 에서 build 에러가 났다. 그럴땐 https://mvnrepository.com/artifact/com.zaxxer/HikariCP 여기서 모듈을 검색한 뒤에 여기에 있는 글을 그대로 작성해주고 나서 빌드가 성공적으로 되었다.

    String 으로된 Byte Array를 Byte[] 로 리턴받기

    실무에서 사용했던 알고리즘입니다. 알고리즘 이랄게 없지만요;; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void Main(string[] args) { string packet_str = "20 21 03 18 09 40 55 00 01 07 4D 4F 44 45 52 4E 54 32 00 04 02 31 41 00 01" + " " + "00 01 FF FF FF FF FF FF FF FF 00 00 00 00 01 00 00"; byte[] array_result = string_to_hex_array(packet_str); } public static byte[] string_to_hex_array(string charstr) { string[] split ..

    [정보] 신선한 충격을 받았다. (알고리즘/코드 최적화)

    ByteArray(Hex) 를 HexArray 로 바꿔주는 방법을 구글링 했더니 스텍오버플로우에 다음과 같은 솔루션이 있었다. 아니 이런 세상에.. 내가 쓰던 BitConverter 방식보다 30배 빠른 코드가 있었다!! 하긴 내가 일반적으로 코딩하는 곳은 Resource가 충분한 환경에서 개발을 진행하기 때문에 이러한 경험을 겪은 적이 없지만 Resource가 한정적인 환경에서는 이러한 알고리즘이 아주 중요할 거 같다는 생각이 들게 되었습니다.. .Net Core로 Linux Server Application을 개발할때는 저러한 Algorithm을 참고해서 구축해야 하겠습니다. 출처 : stackoverflow.com/questions/311165/how-do-you-convert-a-byte-arra..