Skip to main content

in reply to Neil E. Hodges

Still enjoying this. The stricter typing relative to Python has its ups and downs. 🤷
in reply to Neil E. Hodges

Kotlin is a pleasant language! If I were to do JVM stuff, I'd prefer to do so with Kotlin.
in reply to Neil E. Hodges

no, I skipped that opportunity.

Syntax puns aside, it's still the JVM.

in reply to Neil E. Hodges

Fancy. 👀
 % kotlin tar-compare.jar --algorithm sha3-512 -- - < tar-test.tar
2024-10-07 10:30:20,029 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/resources/logback.xml: fb3c76cb57ca39a437086179c72ccf35fb173991065d0805096b741da137ea6e17a71f339d70bbb7f1be5b4cda4d44dfc1bd0dd6811273cf84181bb3292fd346
2024-10-07 10:30:20,031 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/resources/magic_numbers.csv: 3053ac1dd78ed41d0828b8838d1697352ea152022c11c751d5412cbccbf28a56357ec9f8c64cb72f65e1b5acc5ff2fc4ccd31584f615258f4b1b25fa9f497cc9
2024-10-07 10:30:20,032 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/kotlin/org/tarcompare/Logging.kt: 5f095388ad498b0d66149dd92d5f62a4e6a803d746fb5d39ddb1630fa198434df3a572ad8d75a14cef71f0cd669b9663ad6c73846d79d59ee2244dcf9d3b1cdb
2024-10-07 10:30:20,032 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/kotlin/org/tarcompare/DigestCalculator.kt: 9696bb1e997ee80472eeb516fa744f41a0d9636fac6a9a4f0b91b4c41fe17a8d9a99b8ff9bd88762a58b247c114651e82ab14e3992a368a06a20dec885f55a87
2024-10-07 10:30:20,033 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/kotlin/org/tarcompare/Arguments.kt: e96351d708f564a791ebacd044d48533699feb7bc92dcd7e2efc77726c4dd7d9e41a994612361dd55d4753eb04544a97ae8dff67e7f231329d640ccb69354e31
2024-10-07 10:30:20,033 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/kotlin/org/tarcompare/InputStreamIterable.kt: 070b22245e5c73bf85bc2c0e95a5d8fa63441b3d0dca2d565741de04548829055b038ab48c73665ac7a69b910c32cfbdafbc12dffd985ddfeae64beb0b2a4d5e
2024-10-07 10:30:20,034 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/kotlin/org/tarcompare/Hasher.kt: c333d1d2b81e23b60c9ce7428269a1ee56b583935d718b1af8ede4e2746734d5c3de6941b742295e76d8e4f1ec0d60ac66ed6d9955dc2a333db7d899a7e7ea2d
2024-10-07 10:30:20,034 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/kotlin/org/tarcompare/TarCompare.kt: 91286562c5894f12ba3adf4475ec48a9d4d635f32e4f15d07a38654ab7b6c27370c98a934170c92f9d7e99711e41b1b2f42a608e0ab76d526a2f2239bc0262f3
2024-10-07 10:30:20,034 [pool-1-thread-1] INFO  DigestCalculation - <stdin>!tar-compare/src/main/kotlin/org/tarcompare/Magic.kt: c18ca7db9df5eb6d805970e0341892e86346a08612d211523157aee6b5740bb9047f15aca841f94de9265b6f1328e54a3abfda58ea0023ec1a676365ad36f5e6

 % kotlin tar-compare.jar --algorithm sha3-512 tar-test.tar 
2024-10-07 10:30:44,588 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/resources/logback.xml: fb3c76cb57ca39a437086179c72ccf35fb173991065d0805096b741da137ea6e17a71f339d70bbb7f1be5b4cda4d44dfc1bd0dd6811273cf84181bb3292fd346
2024-10-07 10:30:44,590 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/resources/magic_numbers.csv: 3053ac1dd78ed41d0828b8838d1697352ea152022c11c751d5412cbccbf28a56357ec9f8c64cb72f65e1b5acc5ff2fc4ccd31584f615258f4b1b25fa9f497cc9
2024-10-07 10:30:44,591 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/kotlin/org/tarcompare/Logging.kt: 5f095388ad498b0d66149dd92d5f62a4e6a803d746fb5d39ddb1630fa198434df3a572ad8d75a14cef71f0cd669b9663ad6c73846d79d59ee2244dcf9d3b1cdb
2024-10-07 10:30:44,592 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/kotlin/org/tarcompare/DigestCalculator.kt: 9696bb1e997ee80472eeb516fa744f41a0d9636fac6a9a4f0b91b4c41fe17a8d9a99b8ff9bd88762a58b247c114651e82ab14e3992a368a06a20dec885f55a87
2024-10-07 10:30:44,592 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/kotlin/org/tarcompare/Arguments.kt: e96351d708f564a791ebacd044d48533699feb7bc92dcd7e2efc77726c4dd7d9e41a994612361dd55d4753eb04544a97ae8dff67e7f231329d640ccb69354e31
2024-10-07 10:30:44,593 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/kotlin/org/tarcompare/InputStreamIterable.kt: 070b22245e5c73bf85bc2c0e95a5d8fa63441b3d0dca2d565741de04548829055b038ab48c73665ac7a69b910c32cfbdafbc12dffd985ddfeae64beb0b2a4d5e
2024-10-07 10:30:44,593 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/kotlin/org/tarcompare/Hasher.kt: c333d1d2b81e23b60c9ce7428269a1ee56b583935d718b1af8ede4e2746734d5c3de6941b742295e76d8e4f1ec0d60ac66ed6d9955dc2a333db7d899a7e7ea2d
2024-10-07 10:30:44,593 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/kotlin/org/tarcompare/TarCompare.kt: 91286562c5894f12ba3adf4475ec48a9d4d635f32e4f15d07a38654ab7b6c27370c98a934170c92f9d7e99711e41b1b2f42a608e0ab76d526a2f2239bc0262f3
2024-10-07 10:30:44,594 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar!tar-compare/src/main/kotlin/org/tarcompare/Magic.kt: c18ca7db9df5eb6d805970e0341892e86346a08612d211523157aee6b5740bb9047f15aca841f94de9265b6f1328e54a3abfda58ea0023ec1a676365ad36f5e6

 % kotlin tar-compare.jar --algorithm sha3-512 tar-test.tar.zstd
2024-10-07 10:30:59,209 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/resources/logback.xml: fb3c76cb57ca39a437086179c72ccf35fb173991065d0805096b741da137ea6e17a71f339d70bbb7f1be5b4cda4d44dfc1bd0dd6811273cf84181bb3292fd346
2024-10-07 10:30:59,211 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/resources/magic_numbers.csv: 3053ac1dd78ed41d0828b8838d1697352ea152022c11c751d5412cbccbf28a56357ec9f8c64cb72f65e1b5acc5ff2fc4ccd31584f615258f4b1b25fa9f497cc9
2024-10-07 10:30:59,212 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/Logging.kt: 5f095388ad498b0d66149dd92d5f62a4e6a803d746fb5d39ddb1630fa198434df3a572ad8d75a14cef71f0cd669b9663ad6c73846d79d59ee2244dcf9d3b1cdb
2024-10-07 10:30:59,212 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/DigestCalculator.kt: 9696bb1e997ee80472eeb516fa744f41a0d9636fac6a9a4f0b91b4c41fe17a8d9a99b8ff9bd88762a58b247c114651e82ab14e3992a368a06a20dec885f55a87
2024-10-07 10:30:59,213 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/Arguments.kt: e96351d708f564a791ebacd044d48533699feb7bc92dcd7e2efc77726c4dd7d9e41a994612361dd55d4753eb04544a97ae8dff67e7f231329d640ccb69354e31
2024-10-07 10:30:59,214 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/Magic.kt: c18ca7db9df5eb6d805970e0341892e86346a08612d211523157aee6b5740bb9047f15aca841f94de9265b6f1328e54a3abfda58ea0023ec1a676365ad36f5e6
2024-10-07 10:30:59,214 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/Hasher.kt: e87c7a821c4354b599011257a0346b4b24df4aaecc59e6ee40501fd4982613236e8192c6ee0dcc8f070f780ce9a0b38fd4f495e7f661882cba26953d8070968a
2024-10-07 10:30:59,214 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/TarCompare.kt: be060578ff8377b64549c00acab667ac6823c24069150ba65082156f814f5881dcb921b7d53f1d9add9fefe738789247a64e9d19cef4fb7b233774e8f2a83df1
2024-10-07 10:30:59,215 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/InputStreamIterable.kt: a0c3321a25c9f4b5e7bc015fd462374117f7e5e06a623783b36051c3372c0ee2228765754fc0d0558b5e68c117c7c338b6858be12f8185e878e1cd02b14ac0ac
2024-10-07 10:30:59,215 [pool-1-thread-1] INFO  DigestCalculation - tar-test.tar.zstd!tar-compare/src/main/kotlin/org/tarcompare/TarFile.kt: 40d293df14aaed7a17e22a3e7eb9eb1b6401beebc88033f5cbe63e52ba1c49c1a575c72690f60d383ef51312573e073bf732d443053900fcbfcb651b50da3d13
in reply to Neil E. Hodges

👀 #Kotlin
    public fun getDigest(group: String, file: String): String? {
        return executePreparedStatement(SQL_QUERIES.q("get-digest")) { statement -> 
            statement.setString(1, group)
            statement.setString(2, file)
            statement.executeQuery().use { resultSet ->
                if (!resultSet.next())
                    throw NoSuchElementException("No digest for group=${group}, file=${file}")

                resultSet.getString("digest")
            }
        }
    }
in reply to Neil E. Hodges

This is pretty nifty. :3 #Kotlin
package org.tarcompare
import com.google.common.util.concurrent.ThreadFactoryBuilder
import java.util.concurrent.ThreadFactory

fun buildThreadFactory(
    nameFormat: String? = null,
    daemon: Boolean? = null,
    priority: Int? = null,
): ThreadFactory {
    return ThreadFactoryBuilder().apply {
        nameFormat?.let { it -> setNameFormat(it) }
        daemon?.let { it -> setDaemon(it) }
        priority?.let { it -> setPriority(it) }
    }.build()
}