)]}'
{
  "log": [
    {
      "commit": "f632fe353ab3845b7bcce48ab95444e8ef474c8a",
      "tree": "cd56ea116cdd537cc30dc9f6f9dbada256071abc",
      "parents": [
        "c902c23dda52cf9b15e3c9bd37ed752e23af6989"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 07:58:46 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 16:02:30 2026 +0200"
      },
      "message": "Label virtual corpora by the names they were given\n\nPassing c(before \u003d ..., since \u003d ...) said what the two corpora are to be\ncalled, and only collocationAnalysis() listened. frequencyQuery() dropped\nthe names in the expand_grid() it builds its queries from and returned no\nlabel at all; corpusStats() let them become row names, which the first\nbind_rows() throws away; collocationScoreQuery() ignored them and derived\na label from the corpus definitions instead, so that the pair above came\nout as \"1990 \u0026 pubDat...\" and \"2010\".\n\nAll three now prefer the names, falling back to queryStringToLabel()\nwhere a vector is named only in part, as collocationAnalysis() has been\ndoing. A vector without names is left alone: no label column appears\nwhere there is nothing to put in it.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I72c7c8d5f14b649df853cae94a4d90c0be19d1f4\n"
    },
    {
      "commit": "ef5b7c1b03f9e83b0d6ef9a4f10d56d4e1a44c5d",
      "tree": "f3ba890b684e12eba03776fe47806facc8667312",
      "parents": [
        "ae4079aee782740315e3c8d7cb6f19dbe1f73df8"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 01 07:24:43 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 01 07:24:43 2026 +0200"
      },
      "message": "Drop the PTXQC dependency and bump to 1.3.0.9000\n\nPTXQC was imported for exactly two small string functions, lcpCount()\nand lcsCount(), both used only by queryStringToLabel(). It brought\nrmzqc, jsonvalidate, seqinr and V8 with it, and V8 was the only\ndependency in the whole tree that required a libv8 installation, which\nmade it by far the most expensive part of installing RKorAPClient on\nLinux. The recursive dependency closure shrinks from 128 to 90 packages.\n\nBoth functions are pure R in PTXQC, so reimplementing them costs no\ncompiled code. The replacements determine the length of the common\nprefix and suffix by binary search over vectorized startsWith() and\nendsWith() calls, instead of comparing character by character (and, for\nthe suffix, reversing every string with strsplit/rev/paste first). That\nmakes them 10 to 65 times faster, depending on the number and length of\nthe strings:\n\n                                      PTXQC      here\n  10 query strings, 37 chars   prefix   183 us    16 us\n                               suffix   127 us    13 us\n  121 vcs, 42 chars            prefix   413 us    29 us\n                               suffix  1029 us    26 us\n  50 strings, 563 chars        prefix  1405 us    64 us\n                               suffix  4362 us    67 us\n\nResults are unchanged: the two functions were compared against their\nPTXQC counterparts over 3020 inputs, and queryStringToLabel() over 8044\ninput/argument combinations, without a single difference. Empty vectors,\nempty strings and the single string case (where a string is its own\nprefix and suffix) behave exactly as before. The only deviation is for\nNA input, where PTXQC\u0027s lcsCount() silently treats NA as the literal\nstring \"NA\"; queryStringToLabel() never reaches it in that case, because\nthe prefix function errors on NA in both implementations.\n\nSince V8 is gone, and keyring no longer needs sodium either, libv8-dev\nand libsodium-dev can be dropped from the Linux installation\ninstructions in the Readme.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Icad4bc76b773b1586922dd05458b82409d112932\n"
    },
    {
      "commit": "617266df8d100c6d6d79701291c4565e7e8ef333",
      "tree": "3c91f968c7ca163f924635d4dafb3969e82ca17f",
      "parents": [
        "d5823b00016fd04e6d5f64d850c532f51b3e5c0b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Feb 27 10:43:07 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Feb 27 11:45:23 2025 +0100"
      },
      "message": "♻️💄 simplify KorAPConnection class instantiations to modern syntax\n\nUpdate all class instantiations from `new(\"KorAPConnection\")` to `KorAPConnection()`.\nThis is possible with R \u003e\u003d 4.0.\n\nChange-Id: I01131fb32045e084cafbb9e05cd8ba99f8f20f1b\n"
    },
    {
      "commit": "38e4e0201557f2af7b5502ffd467f1f03a044bc1",
      "tree": "003e684e1368e3d26dc0d49be5b1f10730caa0a5",
      "parents": [
        "41d4e35c2d88f2f9f5a01a23023c910058067fbc"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Apr 29 17:21:48 2024 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Apr 29 17:21:48 2024 +0200"
      },
      "message": "Replace deprecated legend.position\n\nChange-Id: Ie5d8a5686b26eea499138fe5f2c4bc026becc043\n"
    },
    {
      "commit": "548ac35563bf3c1d57f34570846f75070ccf59aa",
      "tree": "472a30678de4a6ad9ea536742d725418402cc4b7",
      "parents": [
        "881c0287091bddb0e0be9022d59fd76e8a20819e"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Apr 18 17:38:37 2023 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Apr 18 17:39:50 2023 +0200"
      },
      "message": "Fix dontrun position in misc.R\n\nChange-Id: Ice5166ae5efe4ff51ceaa19957558bea88482b6e\n"
    },
    {
      "commit": "6ae760520de0f9faec60e3a27104e4af8e1de848",
      "tree": "7b34be62796c6894952b2982ed3605d94d5d7e78",
      "parents": [
        "8b8aa52c6e1c84193807d127e0388ac4b9d7af84"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 21 10:34:00 2021 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 21 12:47:22 2021 +0200"
      },
      "message": "Use \\dontrun instead of \\donttest for non-essential examples\n\nThis is not so nice for the user experience because of the\nwrappers arround examples:\n\n ## Not run\n ...\n ## End(Not run)\n\nbut it is necessary to some extent to pass automatic CRAN\nchecks under all circumstances, which actually do run\nthe donttest examples since R 4.0 with a time limit of apparently\n20min in total.\n\nChange-Id: If09b1aa381e26179ec1a36edd9d8b07116e3c33e\n"
    },
    {
      "commit": "67edcb547e8d76dd78bf3e0b35723f977087bba4",
      "tree": "be74fab5ccf2b78cb661c1118255364b725c4efc",
      "parents": [
        "9e469483927a89771ac95248d1bc24dc8a6fd6cc"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Sep 20 21:54:24 2021 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 21 06:59:15 2021 +0200"
      },
      "message": "Migrate documentation to roxygen2md\n\nChange-Id: If5370cd207770f3e05c6f5cd063bd2a414b92bcb\n"
    },
    {
      "commit": "7aa4f1952a5fe86f330d8224f4c28a3603bf2179",
      "tree": "3276f8f2024efebf4431e5a346b3b84311a8cb66",
      "parents": [
        "3df159bb0a2d17a5905680697891d4b865d376af"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Mar 05 10:51:24 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Mar 05 14:14:10 2021 +0100"
      },
      "message": "Start using creationDate rather than pubDate\n\nChange-Id: I131d8396ff592dbfeea890e515cb6aceb9038c98\n"
    },
    {
      "commit": "5fb892e22e9246bc4a32a5c3a62387e9cf1a58cc",
      "tree": "d59591e8c8c66b626cd51c8fa233e042997ad4e9",
      "parents": [
        "10bcc91fdfc243b5e68019538712e6b599689328"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Mar 05 08:18:25 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Mar 05 09:34:54 2021 +0100"
      },
      "message": "Drop support for orphaned plotly package\n\nChange-Id: I59e5339c613fc1eef89bb81afc0c260e2f60ed16\n"
    },
    {
      "commit": "a6e4ee6c9271f0c6acc03e5c544e89e6831d7f51",
      "tree": "b024ed506b1bd0d7d541b7087f0540dfbe07a6f6",
      "parents": [
        "5a61f01306e65b032015849638f690cb29022c20"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Mar 05 09:00:15 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Mar 05 09:34:50 2021 +0100"
      },
      "message": "Restructure documentation\n\nChange-Id: I2640e68972cb7c5ed67032a3b575a2aec056f592\n"
    },
    {
      "commit": "cf1771d2febc4a7c28bf38c7b2ce5b273e0b8014",
      "tree": "d3b81a3fa2bfed27bbbeab1a827af360112e1d14",
      "parents": [
        "d5c3356c547d587ae4f1169b718da5956096bba2"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Mar 04 16:03:04 2020 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Mar 04 16:03:04 2020 +0100"
      },
      "message": "Use TRUE and FALSE instead of T and F\n\nChange-Id: I4f419313d56a9b58a96879ff6df7c9f2d873dfb4\n"
    },
    {
      "commit": "657d8e7916b0c5c06e8d2e1f97ce3e109c118e15",
      "tree": "926bb517e745f7741cadeed7d99ce87be2d223da",
      "parents": [
        "61b7578675688d96de501d20c8d9b4346197d402"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 25 18:31:50 2020 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 25 19:04:46 2020 +0100"
      },
      "message": "Add more donttests to stay below 5s for each test\n\nChange-Id: I4dde61ce4847f8c7067870256c14fe8998d18e0c\n"
    },
    {
      "commit": "f9ebbff38ee985154c52c6c67f3be13af11bfd4d",
      "tree": "07ba54540f61baec113aaa50e469ef6af95ebeaf",
      "parents": [
        "f45f8ac65412bf41319418188258e0bb3ab419e8"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 08:28:22 2020 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 08:29:38 2020 +0100"
      },
      "message": "Further minimize ggplotly test to make CRAN happy\n\nChange-Id: I4b0306fd14141a70d9a81bacc2391148ef09b2c5\n"
    },
    {
      "commit": "05b2277b70f8ac3f20ab4de8c676716add32e30d",
      "tree": "ebec81a624b892d6f39f72c34f4e0f1e008c73e1",
      "parents": [
        "e65ac41dec1cdd7777192e7a9c504bf90cc0db6d"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 18 21:58:42 2020 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 18 22:37:53 2020 +0100"
      },
      "message": "Don\u0027t run long running and redundant tests by default\n\nuse --run-donttest to run them\n\nChange-Id: Idec047eff02b9a3e2dababc6c6fc0347ca43e5de\n"
    },
    {
      "commit": "2fbac3d2357650cef26fc47059602e7ea49d0ba9",
      "tree": "64d3d78df273ff06b6ab661e998286b153c8152d",
      "parents": [
        "62d29a186f0ed19430b925c410e4a152a5b90bc5"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Jan 18 11:01:21 2020 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jan 20 10:45:06 2020 +0100"
      },
      "message": "Make Heuschrecken-Example less time-consuming\n\nChange-Id: I12fbab9a177b7e97ed9524a2a7b62a82697b3aef\n"
    },
    {
      "commit": "62d29a186f0ed19430b925c410e4a152a5b90bc5",
      "tree": "5a34f5deebea13db650937e8e6596261dbf9e4e1",
      "parents": [
        "08d222bb830a7e4288d9e265d0284cb87d2ab1d2"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Jan 18 12:38:36 2020 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Jan 18 12:40:21 2020 +0100"
      },
      "message": "Make queryStringToLabel more useful\n\nChange-Id: I381255725f095e1a2c7e53eb51d99cc37f2066a1\n"
    },
    {
      "commit": "23daf5b6fc4ed2699940dbb33533f7910347146d",
      "tree": "7a407b8025024cff10e3d4632c5015255ec569d0",
      "parents": [
        "95240e9501e5ccf41fa3fbc5dc1b489344ac5802"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Nov 27 10:28:07 2019 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 29 16:34:35 2019 +0100"
      },
      "message": "Add rCharts demo using Highcharts\n\nChange-Id: I4d348937b5db7888def2ccc763d9171de2cfbc46\n"
    },
    {
      "commit": "95240e9501e5ccf41fa3fbc5dc1b489344ac5802",
      "tree": "96e62f9aa3d0f2b39c88c7edd6fecfe9570843af",
      "parents": [
        "51d4e9da77c7cb27de0cdc7abf07b2b8bb6c3419"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Nov 27 18:19:04 2019 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Nov 28 10:00:02 2019 +0100"
      },
      "message": "Add queryStringToLabel to package misc functions\n\nChange-Id: I300b05c5d379ce868ce71665000471379345cbb5\n"
    },
    {
      "commit": "865760f9190fe26e6a8bd25f05dd6bb819e6d821",
      "tree": "6ca3b89776eca05225ed0fdec51fb40c3cb1c247",
      "parents": [
        "19e2ebd9547e20dea8f0c42b4bb33c6578f3f32c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Oct 07 19:29:44 2019 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Oct 08 19:06:15 2019 +0200"
      },
      "message": "Add convenience bindings for ggplot2 and plotly with hyperlinks\n\nThese functions will probably be moved to a separate package.\n\nChange-Id: Iaecd23b1401bc5df7ee4a904dca2e87466266143\n"
    },
    {
      "commit": "d68f9714b17bee81ee9a2a9f5c6da384d797aea9",
      "tree": "84731381db120903193b3348903e10b38b7c6cd2",
      "parents": [
        "bb7d232b11f6e769f5f1a2e7abd618eddf64455e"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 06 21:48:00 2019 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 06 21:48:00 2019 +0200"
      },
      "message": "Add convenience function geom_freq_by_year_ci\n\nChange-Id: Id4f9c5ead478cb2dcb7d7a48580b501bd5e0c752\n"
    },
    {
      "commit": "bb7d232b11f6e769f5f1a2e7abd618eddf64455e",
      "tree": "5c8058bd6699a72e33b284d6d5df4edc0116f38c",
      "parents": [
        "1242a5e972f70634b137f45e6d8c1e8da9635b1c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 06 21:42:34 2019 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 06 21:46:10 2019 +0200"
      },
      "message": "Add convenience function for conversion to ipm\n\nChange-Id: I2b9138322558fc1a2da2f9877cefe3d2268d2412\n"
    }
  ]
}
